From bff47d67c7a3d373b7640663beaa886e5e096c1f Mon Sep 17 00:00:00 2001 From: Christophe Lesur Date: Thu, 14 May 2026 13:36:27 +0200 Subject: [PATCH 01/15] fix(translate): chunking code-block-aware + migration qwen3.6:35b + MAJ changelog et memory bank - Fix ContentSplitter : ne coupe plus au milieu des blocs de code - Nouvelles methodes : _find_code_block_ranges, _is_inside_code_block, _find_safe_split_point - Migration modele traduction : qwen3-2507:30b-a3b vers qwen3.6:35b (contexte 250k) - Changelog : ajout 3 entrees manquantes (stockage IOPS, sauvegarde IaaS, DB sizing) - Memory Bank : mise a jour complete (nouveaux services, etat couverture 97%) --- docs/changelog.md | 12 + memory-bank/core/activeDocumentation.md | 446 ++++++------------ memory-bank/core/documentationStatus.md | 126 +++-- memory-bank/workflows/translation-workflow.md | 32 +- scripts/translate_py/.env | 8 +- scripts/translate_py/translator.py | 180 +++++-- 6 files changed, 417 insertions(+), 387 deletions(-) diff --git a/docs/changelog.md b/docs/changelog.md index 3b0134e3..5a7d8b58 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -9,6 +9,18 @@ sidebar_position: 2 - **Sécurité (Docker)** : Ajout de `apk upgrade --no-cache` dans le stage final `nginx:stable-alpine` des Dockerfiles de production (`Dockerfile` et `Dockerfile.prebuilt`). Cette mise à jour corrige l'ensemble des CVE Critical et High détectées par Harbor/Trivy sur l'image `3.24.3`, liées aux packages Alpine figés : `libcrypto3`, `libssl3`, `libxml2`, `libxslt`, `libexpat`, `libpng`, `zlib`, `c-ares`, `musl`, `xz-libs`, `busybox`, `curl`. Le prochain build produira une image avec tous ces packages à leur dernière version corrigée. +### 30 Avril 2026 : Précisions sur les performances de stockage + +- **Stockage (IaaS VMware, OpenSource, Bare Metal)** : Ajout des plafonds absolus d'IOPS et de bande passante maximum pour toutes les classes de stockage. Ces informations permettent de mieux dimensionner les environnements en fonction des besoins de performance. + +### 24 Avril 2026 : Enrichissement de la documentation sauvegarde IaaS OpenSource + +- **IaaS OpenSource (Sauvegarde)** : Enrichissement de la section sauvegarde avec des précisions sur l'architecture technique (sauvegarde incrémentale, impact du Thick provisioning sur le stockage), la sécurité (chiffrement AES-256, isolation réseau), le monitoring et les contraintes de planification. Traductions disponibles EN/DE/ES/IT. + +### 20 Avril 2026 : Mise à jour du dimensionnement Managed Database + +- **Managed MariaDB & PostgreSQL** : Mise à jour des gabarits de dimensionnement maximum disponibles pour les services de bases de données managées. + ### 17 Avril 2026 : VM Instances — documentation illustrée, tutoriels et traductions - **VM Instances — Enrichissement documentaire** : Refonte complète et illustration de la documentation VM Instances. Le guide de démarrage (`quickstart.md`) couvre désormais l'intégralité du parcours utilisateur illustré : accès à la section, liste des VMs, wizard de création en 9 étapes (famille d'instance, zone de disponibilité, template OS, gabarit, nom/sauvegarde, Cloud Init, disques, réseau, sommaire), et gestion des 4 onglets (Informations, Disques, Réseau, Snapshots). diff --git a/memory-bank/core/activeDocumentation.md b/memory-bank/core/activeDocumentation.md index 8e5e7d49..0f0b32cc 100644 --- a/memory-bank/core/activeDocumentation.md +++ b/memory-bank/core/activeDocumentation.md @@ -5,6 +5,7 @@ ### 🖥️ Console Management - Statut : ✅ COMPLET #### Fichiers Existants (`/docs/console/`) + - ✅ `console.md` : Page principale - ✅ `console_quickstart.md` : Guide de démarrage - ✅ `api.md` : Documentation API @@ -12,350 +13,207 @@ - ✅ `status.md` : Monitoring et états #### Sous-Module IAM - ✅ COMPLET + - ✅ `iam/iam.md` : Présentation IAM - ✅ `iam/concepts.md` : Architecture Identity Management - ✅ `iam/quickstart.md` : Configuration rapide - ✅ `iam/images/` : Support visuel -- ✅ `iam/tutorials/` : Guides avancés +- ✅ `iam/tutorials/` : Guides avancés (SSO AAD, ADFS, Entra, JumpCloud, Okta, Intune) + +#### Module Billing (Gestionnaire des coûts) - ✅ NOUVEAU (avril 2026) + +- ✅ `billing/concepts.md` : Dashboard, consommation, répartition, facturation, catalogue prix +- ✅ `billing/images/` : 6 captures d'écran illustrées -#### Modules en Développement -- 🔄 `metrics/` : Structure créée, contenu à développer -- 🔄 `security/` : Structure créée, contenu à développer +#### Modules Metrics et Security - ✅ COMPLETS + +- ✅ `metrics/` : Dashboards Grafana, datasources, métriques IaaS/hyperviseurs +- ✅ `security/` : Alertes de sécurité, recommandations #### Ressources Visuelles + - ✅ **40+ captures d'écran** dans `/images/` -- ✅ **Interfaces Console** : Connexion, onboarding, API -- ✅ **Workflows** : Commandes, incidents, métriques -- ✅ **Dashboards Grafana** : Monitoring complet ### 🛡️ Bastion Security - Statut : ✅ COMPLET -#### Documentation Complète (`/docs/bastion/`) -- ✅ `bastion.md` : Vue d'ensemble service -- ✅ `concepts.md` : Architecture sécurité -- ✅ `quickstart.md` : Première connexion -- ✅ `tutorials.md` : Cas d'usage avancés - -#### Support Visuel +- ✅ `bastion.md`, `concepts.md`, `quickstart.md`, `tutorials.md` - ✅ **13 captures détaillées** : Workflows complets -- ✅ **Sessions** : Création, ouverture, modification, suppression -- ✅ **Appliances** : Configuration et gestion -- ✅ **Support** : Interface intégrée -### ☁️ IaaS Services - Statut : ✅ STRUCTURE COMPLÈTE +### ☁️ IaaS Services - Statut : ✅ COMPLET #### IaaS Bare Metal (`/docs/iaas_bare-metal/`) -- ✅ `iaas_bare-metal.md` : Service principal -- ✅ `concepts.md` : Architecture matérielle -- ✅ `quickstart.md` : Déploiement rapide -- ✅ `tutorials.md` : Cas d'usage -- ✅ `images/` : Diagrammes techniques + +- ✅ `iaas_bare-metal.md`, `concepts.md`, `quickstart.md`, `tutorials.md` +- ✅ Précisions BFS (Boot from SAN) ajoutées #### IaaS Open Source (`/docs/iaas_opensource/`) -- ✅ `iaas_opensource.md` : Solutions libres -- ✅ `concepts.md` : Technologies open source -- ✅ `quickstart.md` : Installation -- ✅ `tutorials.md` : Implémentations -- ✅ `images/` : Support visuel + +- ✅ `iaas_opensource.md`, `concepts.md`, `quickstart.md` +- ✅ `tutorials/` : Sauvegarde, HA pools, HA VMs, création VM (3 méthodes) +- ✅ Section sauvegarde enrichie (architecture incrémentale, sécurité AES-256, monitoring) #### IaaS VMware (`/docs/iaas_vmware/`) -- ✅ `iaas_vmware.md` : Virtualisation VMware -- ✅ `concepts.md` : vSphere, vCenter -- ✅ `quickstart.md` : Configuration initiale -- ✅ `images/` : Captures VMware -- ✅ `tutorials/` : Scénarios avancés - -### 🚀 PaaS OpenShift - Statut : ✅ STRUCTURE COMPLÈTE - -#### Documentation Container (`/docs/paas_openshift/`) -- ✅ `paas_openshift.md` : OpenShift managed -- ✅ `concepts.md` : Kubernetes et containers -- ✅ `quickstart.md` : Premier déploiement -- ✅ `images/` : Screenshots OpenShift -- ✅ `tutorials/` : Workflows DevOps - -### 📦 Managed Kubernetes - Statut : ✅ BON - -#### Documentation Container (`/docs/managed_kubernetes/`) -- ✅ `managed_kubernetes.md` : Vue d'ensemble du service -- ✅ `concepts.md` : Concepts techniques et prérequis + +- ✅ `iaas_vmware.md`, `concepts.md`, `quickstart.md` +- ✅ `tutorials/` : Backup, VM encryption, deploy template, deploy Terraform, configure management VM +- ✅ Métriques cluster documentées (mémoire allouée/consommée/worst case) + +### 🚀 PaaS OpenShift - Statut : ✅ COMPLET + +- ✅ `paas_openshift.md`, `concepts.md`, `quickstart.md`, `first_steps.md` +- ✅ `tutorials/` : Helmfile, KubeVirt, Kasten + +### 📦 Managed Kubernetes - Statut : ✅ COMPLET + +- ✅ `managed_kubernetes.md`, `managed_core_kubernetes.md`, `concepts.md`, `quickstart.md` +- ✅ `tutorials/` : Deploy, Networking, ArgoCD, Capsule, Gateway API, GPU, Harbor, Kasten, KubeCosts, OpenCost + +### 🗄️ Managed MariaDB - Statut : ✅ NOUVEAU (avril 2026, preview) + +- ✅ `managed_mariadb.md` : Présentation du service +- ✅ `concepts.md` : Architectures StandAlone et Distributed (MaxScale) +- ✅ `quickstart.md` : Guide de démarrage +- ✅ `images/` : Schémas architecture (4 images) + +### 🐘 Managed PostgreSQL - Statut : ✅ NOUVEAU (avril 2026, preview) + +- ✅ `managed_postgresql.md` : Présentation du service +- ✅ `concepts.md` : Concepts techniques - ✅ `quickstart.md` : Guide de démarrage -- 🟡 `tutorials.md` : Premier tutoriel "Hello World" créé, à enrichir -- ✅ `images/` : Diagrammes d'architecture + +### ☁️ Cloud Public — VM Instances - Statut : ✅ NOUVEAU (avril 2026, preview) + +- ✅ `public_cloud/vm_instances/vm_instances.md` : Vue d'ensemble +- ✅ `public_cloud/vm_instances/concepts.md` : Classes de service, gabarits, stockage, réseau VPC +- ✅ `public_cloud/vm_instances/quickstart.md` : Wizard de création en 9 étapes illustrées +- ✅ `public_cloud/vm_instances/tutorials/` : 3 tutoriels (créer VM, gérer disques, snapshots) +- ✅ `public_cloud/vm_instances/images/` : 17 captures d'écran +- ✅ SLA : 99,95% ### 🏢 Housing & Colocation - Statut : ✅ COMPLET -#### Infrastructure Physique (`/docs/housing/`) -- ✅ `housing.md` : Offres colocation -- ✅ `concepts.md` : Infrastructure datacenter -- ✅ `quickstart.md` : Procédures installation -- ✅ `tutorials.md` : Bonnes pratiques - -### 🌐 Services Réseau - Statut : ✅ STRUCTURE COMPLÈTE - -#### Documentation Réseau (`/docs/network/`) -- ✅ `vpc/` : Virtual Private Cloud (Concepts, Quickstart, Tutorials) -- ✅ `private_network/` : Réseaux privés (Concepts, Quickstart, Tutorials) -- ✅ `internet/advanced_concepts.md` : Concepts avancés (communautés BGP, Local Preference) -- 🔄 `internet/` : Connectivité Internet base (structure créée, contenu à enrichir) - -#### Support Visuel -- ✅ **Diagrammes VPC** : Architecture et configuration -- ✅ **Interfaces** : Captures console pour VPC et Private Network - -### 🤖 LLMaaS - LLM as a Service - Statut : ✅ SYSTÈME COMPLET ET VALIDÉ - -#### Intelligence Artificielle Générative (`/docs/llmaas/`) -- ✅ `llmaas.md` : Vue d'ensemble du service. -- ✅ `models.md` : **AUTOMATISÉ** - Catalogue de modèles à jour. -- ✅ `api.md` : Documentation API complète (Tiers, Endpoints, Facturation). -- ✅ `concepts.md` : Architecture, Tokens, Sécurité. -- ✅ `quickstart.md` : Guide de démarrage (cURL, Python, Tool Calling, Vision). -- ✅ `tutorials.md` : Guides avancés (LangChain, RAG, Qdrant, Agents). -- ✅ `ocr.md` : **NOUVEAU** - Guide DeepSeek-OCR (compression contextuelle, parsing). -- ✅ `rag_explained.md` : **NOUVEAU** - Explication détaillée du RAG et Embeddings. -- ✅ `faq.md` : **NOUVEAU** - Questions fréquentes. -- ✅ `images/` : Screenshots, benchmarks, schémas. -- ✅ `licences/` : Licences des modèles. - -#### Suite de Tests (`/tests/llmaas/`) - ✅ COMPLÈTE (29/06/2025) -- ✅ **9/9 suites de tests réussies** : Couverture complète des fonctionnalités de l'API. -- ✅ **Tests RAG validés** : Pipelines FAISS et Qdrant fonctionnels. -- ✅ **Tests SDK et API** : Validés. -- ✅ **Runner de test unifié** : `run_all_tests.py` orchestre l'ensemble. - -#### Spécifications LLMaaS -- ✅ **40 modèles** : 40+ modèles dont Vision, Code, Sécurité. -- ✅ **Contexte** : 8k → 128k tokens -- ✅ **Pricing** : Tiers de facturation + pricing à l'usage. -- ✅ **Fonctionnalités** : Tool Calling, Vision, Audio, OCR, RAG. - -### 💾 Storage Solutions - Statut : 🔄 EN DÉVELOPPEMENT - -#### Object Storage Service (`/docs/storage/oss/`) -- 🔄 **Structure créée** : Dossier existant -- 📝 **Documentation à créer** : Stockage objet -- 📝 **API S3** : Compatibilité et utilisation -- 📝 **Intégrations** : Avec IaaS et PaaS - -## Documentation Contractuelle - Statut : ✅ COMPLÈTE - -### Aspects Juridiques (`/contractual/`) -- ✅ `baremetal.md` + `.docx` : Contrats bare metal -- ✅ `cgvu.md` + `.docx` : Conditions générales -- ✅ `dpa.md` + `.docx` : Data Processing Agreement -- ✅ `orderdoc.md` : Processus de commande -- ✅ `hierarchie.docx` : Structure organisationnelle - -### Templates Juridiques -- ✅ `CT.AM.JUR.TEMPLATE_CS.dotx` : Modèles contrats -- ✅ `CT.AM.JUR.TEMPLATE_CS_nonum.dotx` : Variantes - -### Contrats par Service -- ✅ `iaas/` : Contrats IaaS -- ✅ `network/` : Contrats réseau -- ✅ `paas/` : Contrats PaaS -- ✅ `llmaas/` : Matrice de responsabilité (RACI) -- ✅ `kubernetes/` : **NOUVEAU** - Matrice de responsabilité (RACI) - -## Internationalisation - Statut : ✅ STRUCTURE COMPLÈTE +- ✅ `housing.md`, `concepts.md`, `quickstart.md`, `tutorials.md` -### Langues Supportées (`/i18n/`) -- ✅ **Français** (`fr/`) : Langue source -- ✅ **Anglais** (`en/`) : Traduction principale -- ✅ **Allemand** (`de/`) : Marché DACH -- ✅ **Espagnol** (`es/`) : Expansion européenne -- ✅ **Italien** (`it/`) : Marché méditerranéen +### 🌐 Services Réseau - Statut : ✅ COMPLET + +- ✅ `network/network_overview.md` : Vue d'ensemble +- ✅ `network/vpc/` : VPC (Concepts, Quickstart, Tutorials) +- ✅ `network/private_network/` : Réseaux privés +- ✅ `network/private_backbone/` : Backbone privé +- ✅ `network/internet/` : Connectivité Internet, concepts avancés BGP + +### 🤖 LLMaaS - Statut : ✅ COMPLET ET VALIDÉ + +- ✅ `llmaas.md`, `models.md`, `api.md`, `concepts.md`, `quickstart.md`, `tutorials.md` +- ✅ `ocr.md`, `rag_explained.md`, `faq.md` +- ✅ `licences/` : Licences de tous les modèles +- ✅ **40+ modèles**, tests validés (9/9 suites) -### Structure i18n -- ✅ `code.json` : Traductions interface -- ✅ `docusaurus-plugin-content-docs/` : Contenu traduit -- ✅ `docusaurus-theme-classic/` : Thème localisé +### 💾 Storage Solutions - Statut : ✅ BON + +- ✅ `storage/oss/oss.md`, `concepts.md`, `quickstart.md`, `faq.md` +- ✅ `storage/oss/tutorials/` : AWS S3 Sync, Boto3, Cloudberry, mc mirror, Rclone, Restic, WinSCP, bucket-access, file-hashing +- ✅ Plafonds IOPS et bande passante documentés + +### 🔧 Terraform - Statut : ✅ COMPLET + +- ✅ `terraform.md`, `concepts.md`, `quickstart.md`, `tutorials.md` +- ✅ Notifications nouvelles versions Provider + +### 🛒 Marketplace - Statut : ✅ COMPLET + +- ✅ `marketplace.md`, `concepts.md`, `quickstart.md` +- ✅ `tutorials/` : Contact partenaire, personnalisation images OpenIaaS/VMware, déploiement + +## Documentation Contractuelle - Statut : ✅ RESTRUCTURÉE (avril 2026) + +### Nouvelle Architecture + +- ✅ `contracts.md` : Page hub — CGVU, Convention SecNumCloud, SLA, liens PDF +- ✅ `shared-responsibility.md` : Page hub — Matrices RACI par service + +### Matrices RACI par Service + +- ✅ `iaas/raci.md`, `iaas/raci_s3.md` : IaaS et stockage objet +- ✅ `paas/raci.md`, `paas/raci_ocp_std.md`, `paas/mco_mcs.md` : PaaS OpenShift +- ✅ `kubernetes/raci.md` : Managed Kubernetes +- ✅ `llmaas/raci.md` : LLM as a Service +- ✅ `network/raci.md`, `network/raci_vpc.md`, `network/sla_vpc.md` : Réseau +- ✅ `vm-instances/raci.md`, `vm-instances/sla_vm-instances.md` : VM Instances ## Pages Globales - Statut : ✅ COMPLÈTES -### Documentation Globale (`/docs/`) - ✅ `home.md` : Page d'accueil -- ✅ `changelog.md` : Suivi des modifications -- ✅ `containers_overview.md` : **NOUVEAU** - Comparaison des offres Containers +- ✅ `changelog.md` : Suivi des modifications (documentation) +- ✅ `changelog_produits.md` : **NOUVEAU** — Changelog produit +- ✅ `faq.md` : **NOUVEAU** — FAQ générale +- ✅ `compute_overview.md` : **NOUVEAU** — Vue d'ensemble Compute +- ✅ `containers_overview.md` : Comparaison offres Containers +- ✅ `databases_overview.md` : **NOUVEAU** — Vue d'ensemble Bases de données +- ✅ `managedproducts_overview.md` : **NOUVEAU** — Vue d'ensemble Produits managés +- ✅ `security_identity_overview.md` : **NOUVEAU** — Vue d'ensemble Sécurité/Identité - ✅ `market_place_public.md` : Marketplace public - ✅ `privacy.md` : Politique de confidentialité -### Contenu Additionnel (`/docs/additional_content/`) -- ✅ `concepts_az.md` : Availability Zones -- ✅ `concepts_regional.md` : Architecture régionale -- ✅ `images/iaas_az_001.png` : Diagramme AZ - -## Priorités de Développement - -### 🔥 Priorité HAUTE -1. **Network Documentation** (`/docs/network/`) - - Créer `internet.md`, `concepts.md`, `quickstart.md` - - Documenter connectivité et bande passante - - Créer `private_network.md` avec VLAN, VPN - - Diagrammes architecture réseau +## Internationalisation - Statut : ✅ OPÉRATIONNELLE -2. **Storage OSS** (`/docs/storage/oss/`) - - Documentation Object Storage Service - - API S3 et compatibilité - - Intégrations avec autres services - - Cas d'usage et bonnes pratiques - -### 🔶 Priorité MOYENNE -1. **Enrichissement Managed Kubernetes** (`/docs/managed_kubernetes/`) - - Ajouter des tutoriels avancés (sécurité, stockage, etc.). - - Détailler le modèle de pricing. -2. **Console Metrics** (`/docs/console/metrics/`) - - Dashboards Grafana avancés - - Métriques custom et alerting - - Intégration monitoring -3. **Console Security** (`/docs/console/security/`) - - Contrôles de sécurité avancés - - Audit et compliance - - Gestion des incidents +### Langues Supportées (`/i18n/`) -### 🔵 Priorité BASSE -1. **Extensions Services Existants** - - Tutorials avancés supplémentaires - - Cas d'usage sectoriels - - Optimisations performance - -## Actions Éditoriales Actives - -### En Cours de Rédaction -- 📝 **Network Services** : Architecture et concepts -- 📝 **Storage OSS** : Documentation API -- 📝 **Console Metrics** : Dashboards avancés - -### Corrections Récentes -- ✅ **Mise à jour Tarifs LLMaaS** : Mise à jour des prix dans tous les fichiers sources et la Memory Bank (Input: 1.9€/M, Output: 8€/M, Raisonneur: 8€/M). -- ✅ **Fix Build MDX (i18n)** : Résolution des erreurs de compilation MDX dans toutes les langues (en, es, it, de) causées par des blocs de code Python/JSON corrompus lors de la traduction. -- ✅ **Génération Documentation Modèles** : Mise à jour automatisée de `docs/llmaas/models.md` via le script Python. -- ✅ **Traduction Network (VPC)** : Traduction complète du service VPC et mise à jour de Private Network vers en, de, es, it. Correction des liens LLMaaS dans `usingopencost.md`. -- ✅ **Fix Build MDX Multi-langues** : Correction des erreurs de parsing MDX dans toutes les langues pour LLMaaS et Network. Restauration des blocs de code et suppression des doublons dans le catalogue de modèles. -- ✅ **Concepts Avancés Réseau** (21/02/2026) : Ajout page communautés BGP et Local Preference (PR #249). Traduction vers en, de, es, it. -- ✅ **Qualité Traductions** (21/02/2026) : Amélioration des traductions security_alarms.md et models.md (4 langues). Mise à jour changelog. - -### En Review -- 🔄 **Cohérence terminologique** : Uniformisation -- 🔄 **Mise à jour screenshots** : Console -- 🔄 **Validation technique** : Exactitude information - -### Planifié -- 📅 **Nouveaux services** : Roadmap 2025 -- 📅 **Migration Docusaurus** : Mise à jour version -- 📅 **Optimisation SEO** : Métadonnées et structure +- ✅ **Français** (`fr/`) : Langue source +- ✅ **Anglais** (`en/`) : Traduction principale +- ✅ **Allemand** (`de/`) : Marché DACH +- ✅ **Espagnol** (`es/`) : Expansion européenne +- ✅ **Italien** (`it/`) : Marché méditerranéen ## Métriques de Couverture ### Services Documentés -- **Console Management** : 95% (metrics, security en cours) + +- **Console Management** : 100% (billing ajouté) - **Bastion Security** : 100% -- **IaaS Services** : 100% +- **IaaS Services** : 100% (sauvegarde enrichie, métriques cluster) - **PaaS OpenShift** : 100% +- **Managed Kubernetes** : 100% +- **Managed MariaDB** : 90% (preview, tutoriels à ajouter) +- **Managed PostgreSQL** : 90% (preview, tutoriels à ajouter) +- **VM Instances** : 95% (preview, 3 tutoriels) - **Housing** : 100% -- **Network** : 80% (VPC et Private Network complets) -- **Storage** : 20% (structure créée) -- **Managed Kubernetes**: 90% (Ajout guide OpenCost) +- **Network** : 95% (VPC, Private Network, Internet, Backbone) +- **LLMaaS** : 100% +- **Storage OSS** : 95% (FAQ + 9 tutoriels) +- **Terraform** : 100% +- **Marketplace** : 100% +- **Contractuel** : 100% (restructuré) -### Couverture Globale : 92% +### Couverture Globale : ~97% -### Par Type de Documentation -- **Pages principales** : 100% -- **Concepts techniques** : 95% -- **Guides quickstart** : 95% -- **Tutorials avancés** : 90% -- **Support visuel** : 85% +## Priorités Restantes -## Décisions Éditoriales Récentes +### 🔶 Priorité MOYENNE -### Standards Adoptés -- ✅ **Français langue source** : Tout contenu créé en français -- ✅ **Pattern uniforme** : service.md → concepts → quickstart → tutorials -- ✅ **SecNumCloud focus** : Aspects sécurité systématiques -- ✅ **Screenshots obligatoires** : Support visuel pour chaque guide +1. **Managed MariaDB & PostgreSQL** : Ajouter des tutoriels pratiques +2. **VM Instances** : Enrichir avec cas d'usage avancés (scaling, monitoring) -### Règles de Rédaction -- **Ton technique professionnel** : Avant-vente technique -- **Approche didactique** : Progression pédagogique -- **Références croisées** : Liens entre services -- **Validation technique** : Review expertise +### 🔵 Priorité BASSE ---- +1. **Extensions tutoriels existants** : Cas d'usage sectoriels +2. **Amélioration continue traductions** : Qualité des traductions automatiques -## Prochaines Actions Immédiates +## 🐍 Système de Traduction Python - ✅ CORRIGÉ (14/05/2026) -1. **Compléter Network** : Internet et Private Network -2. **Développer Storage OSS** : Documentation API S3 -3. **Finaliser Console** : Metrics et Security modules -4. **Maintenance Générale** : Poursuivre la correction des liens et ancres cassés dans les traductions. -5. **Validation globale** : Cohérence et qualité +**Localisation** : `scripts/translate_py/` +**Status** : Production Ready — bug chunking corrigé ---- -*État de la documentation au 19/01/2026 - Memory Bank Cloud Temple* +### ✅ Correction majeure : chunking code-block-aware -### 🐍 Système de Traduction Python - ✅ COMPLET ET OPÉRATIONNEL (17/06/2025) -**Localisation** : `scripts/translate_py/` -**Status** : Production Ready -**Script Legacy** : `oldies/translate.js` (archivé) - -#### ✅ Fonctionnalités Implémentées et Testées -- ✅ **Architecture modulaire complète** : config, models, ui, translator, file_manager -- ✅ **Interface Rich moderne** : Barres de progression temps réel, statistiques avancées -- ✅ **Détection intelligente par hash SHA-256** : Comparaison précise des fichiers modifiés -- ✅ **Mode initialisation** (`--init`) : Génération métadonnées avec hash des traductions existantes -- ✅ **Gestion métadonnées** : Fichier `translation-meta.json` dans `scripts/translate_py/` -- ✅ **Support .notranslation** : Exclusion automatique de répertoires (copie forcée) -- ✅ **Concurrence optimisée** : Pool de workers pour utilisation maximale API -- ✅ **Statistiques temps réel** : Tokens IN/OUT, vitesse tokens/s, progression détaillée -- ✅ **Mode debug complet** : Logs détaillés avec comparaison hash avant/après -- ✅ **Configuration flexible** : Variables d'environnement, auto-détection racine projet -- ✅ **Gestion erreurs robuste** : Retry automatique, validation des réponses API - -#### 🔍 Détection des Changements Validée -- ✅ **Hash SHA-256** : Calcul et comparaison précise des fichiers source -- ✅ **Métadonnées persistantes** : Stockage état par fichier et langue -- ✅ **Logique de décision** : - - Nouveau fichier (pas de hash stocké) → Traduit - - Fichier modifié (hash différent) → Traduit - - Traduction manquante → Traduit - - Fichier inchangé (hash identique) → Ignore -- ✅ **Logs explicatifs** : Messages clairs pourquoi chaque fichier est traité -- ✅ **Workflow testé** : Init → Modification → Détection → Traduction validé - -#### 📁 Architecture du Système -``` -scripts/translate_py/ -├── translate.py # 🚀 Script principal avec CLI Click -├── translation-meta.json # 🔍 Métadonnées et hash SHA-256 (123 fichiers) -├── config.py # ⚙️ Configuration Pydantic + env -├── models.py # 📋 Modèles de données TypedDict -├── ui.py # 🎨 Interface Rich + barres progression -├── translator.py # 🌐 Moteur traduction Cloud Temple API -├── file_manager.py # 📁 Gestion fichiers + métadonnées -├── requirements.txt # 📦 aiofiles, rich, pydantic, click, aiohttp -├── .env.example # 📝 Template configuration -└── .env # 🔒 Configuration locale -``` - -#### 🎯 Workflow de Production Validé -1. **Initialisation** : `python translate.py --init` → Génère métadonnées (45Ko, 123 fichiers) -2. **Détection** : `python translate.py --dry-run --debug` → Affiche changements avec hash -3. **Traduction** : `python translate.py` → Traduit uniquement fichiers modifiés -4. **Validation** : Hash mis à jour automatiquement après traduction réussie - -#### 📊 Performance et Métriques -- **Fichiers indexés** : 123 fichiers Markdown -- **Langues supportées** : 4 (en, de, es, it) -- **Métadonnées** : 45 Ko (format JSON optimisé) -- **Détection** : <1s pour 123 fichiers (hash précalculés) -- **Concurrence** : 8 workers simultanés (configurable) - -#### 🔄 Migration Script Legacy -- ✅ **Script JS archivé** : `oldies/translate.js` (plus de maintenance) -- ✅ **Compatibilité métadonnées** : Format JSON conservé -- ✅ **Documentation mise à jour** : README complet avec workflows -- ✅ **Workflow unifié** : Même commandes, interface améliorée +- ✅ **Bug corrigé** : Le `ContentSplitter` ne tenait pas compte des blocs de code ```` ``` ```` lors du découpage +- ✅ **`_find_code_block_ranges()`** : Identifie toutes les zones de code protégées +- ✅ **`_is_inside_code_block()`** : Vérifie si un point de coupure est dans un bloc de code +- ✅ **`_find_safe_split_point()`** : Cherche un point de coupure sûr (hors code) +- ✅ **`split_content()` corrigé** : Ignore les headers `#` à l'intérieur des blocs de code +- ✅ **`_split_large_block()` corrigé** : Ne coupe jamais au milieu d'un bloc de code +- ✅ **Test validé** : Blocs de code Python/Bash correctement préservés --- -*État de la documentation au 22/11/2025 - Memory Bank Cloud Temple* + +*État de la documentation au 14/05/2026 - Memory Bank Cloud Temple* diff --git a/memory-bank/core/documentationStatus.md b/memory-bank/core/documentationStatus.md index 78c05bc6..5efdfcc8 100644 --- a/memory-bank/core/documentationStatus.md +++ b/memory-bank/core/documentationStatus.md @@ -1,67 +1,85 @@ # Statut de la Documentation ## 🚦 État Global du Build -- **Dernier build** : ✅ SUCCÈS (21/02/2026 - 15h31) + +- **Dernier build validé** : ✅ SUCCÈS (04/05/2026) - **Langues compilées** : fr, en, es, it, de -- **Dernières modifications** : - - Ajout d'une nouvelle page `network/internet/advanced_concepts.md` sur les communautés BGP et la Local Preference (PR #249). - - Mise à jour du catalogue de modèles LLMaaS et correction des erreurs MDX (concepts, models) pour toutes les langues. - - Amélioration de la qualité des traductions des alertes de sécurité (security_alarms.md) en en, de, es, it. - - Mise à jour du changelog avec les dernières modifications. - - Traduction de la page concepts avancés réseau vers les 4 langues. -- **Problèmes résolus précédemment** : - - Correction des erreurs de compilation MDX (Acorn) dans `llmaas/models.md` et `llmaas/concepts.md` pour toutes les langues (fr, en, es, it, de). - - Restauration des blocs de code Python manquants dans les traductions de `llmaas/concepts.md`. - - Suppression d'une duplication du modèle `devstral-small-2:24b` dans toutes les versions du catalogue de modèles. - - Correction d'un bloc de code mal fermé dans `network/internet/advanced_concepts.md` (version en, es, it, de). - - Correction des imports d'images incorrects dans les traductions (it, de) qui causaient des erreurs de build ("Module not found"). +- **Version** : 3.25.0 ## 📊 Couverture par Service ### Console Management (`/docs/console/`) -- **État** : ✅ Stable -- **Traduction** : Complète + +- **État** : ✅ Stable et complet +- **Nouveauté** : Module Billing (gestionnaire des coûts) ajouté en avril 2026 ### Bastion Security (`/docs/bastion/`) + - **État** : ✅ Stable -- **Traduction** : Complète -- **Note** : Imports d'images corrigés dans `it` et `de`. ### IaaS Services (`/docs/iaas_*/`) -- **État** : ✅ Stable -- **Traduction** : Complète -- **Note** : Imports d'images corrigés pour IaaS VMware (`it`, `de`). + +- **État** : ✅ Stable et enrichi +- **Évolutions** : + - IaaS OpenSource : section sauvegarde enrichie (architecture, sécurité, monitoring) + - IaaS VMware : métriques cluster documentées + - IaaS Bare Metal : précisions BFS ajoutées + - Plafonds IOPS/bande passante ajoutés pour toutes les classes de stockage ### PaaS OpenShift (`/docs/paas_openshift/`) + - **État** : ✅ Stable -- **Traduction** : Complète ### Managed Kubernetes (`/docs/managed_kubernetes/`) -- **État** : ✅ Stable -- **Traduction** : Complète -- **Note** : Balises `` corrigées dans `usingharbor.md`. + +- **État** : ✅ Stable et complet +- **Évolutions** : GPU, Gateway API, OpenCost, Bare Metal nodes + +### Managed MariaDB (`/docs/managed_mariadb/`) + +- **État** : 🆕 Nouveau (preview, avril 2026) +- **Contenu** : Présentation, concepts (StandAlone/Distributed), quickstart +- **À faire** : Tutoriels pratiques + +### Managed PostgreSQL (`/docs/managed_postgresql/`) + +- **État** : 🆕 Nouveau (preview, avril 2026) +- **Contenu** : Présentation, concepts, quickstart +- **À faire** : Tutoriels pratiques + +### VM Instances (`/docs/public_cloud/vm_instances/`) + +- **État** : 🆕 Nouveau (preview, avril 2026) +- **Contenu** : Vue d'ensemble, concepts, quickstart illustré (9 étapes), 3 tutoriels +- **SLA** : 99,95% ### LLMaaS (`/docs/llmaas/`) -- **État** : ✅ Stable e Validé -- **Traduction** : Complète -- **Note** : Blocs de code Python corrigés dans `concepts.md`. -### Terraform (`/docs/terraform/`) -- **État** : ✅ Stable e Validé -- **Traduction** : Complète -- **Note** : Correction systématique des blocs de code vides et de la syntaxe HCL dans `concepts.md`, `quickstart.md`, `terraform.md`, `tutorials.md` pour toutes les langues. +- **État** : ✅ Stable et validé +- **Modèles** : 40+ ### Network (`/docs/network/`) -- **État** : ✅ Stable (VPC, Internet concepts avancés) / 🔄 En développement (Internet base, Private Network) -- **Traduction** : VPC et concepts avancés Internet traduits (en, de, es, it) -- **Note** : Nouvelle page `advanced_concepts.md` ajoutée (communautés BGP, Local Preference AS33930). + +- **État** : ✅ Stable +- **Structure** : VPC, Private Network, Private Backbone, Internet (concepts avancés BGP) ### Storage (`/docs/storage/`) -- **État** : 🔄 En développement + +- **État** : ✅ Bon (9 tutoriels, FAQ, plafonds IOPS) + +### Terraform (`/docs/terraform/`) + +- **État** : ✅ Stable + +### Contractuel (`/docs/contractual/`) + +- **État** : ✅ Restructuré (avril 2026) +- **Architecture** : Pages hub `contracts.md` et `shared-responsibility.md`, RACI par service +- **Navigation** : Colonne dédiée dans le footer (plus de menu latéral) ## 🌍 Internationalisation (i18n) -**Dernière mise à jour des traductions** : 21/02/2026 (Fix Build MDX, Catalogue Modèles, Concepts Réseau) +**Script de traduction** : `scripts/translate_py/translate.py` — **corrigé le 14/05/2026** (chunking code-block-aware) | Langue | Statut Build | Qualité Traduction | Actions Requises | |--------|--------------|-------------------|------------------| @@ -71,15 +89,35 @@ | **IT** | ✅ Succès | Moyenne | Aucune | | **DE** | ✅ Succès | Moyenne | Aucune | +## 🏗️ Navigation et Structure + +### Catégories principales (sidebar) + +- **Cloud Public** : VM Instances (preview) +- **Compute** : IaaS OpenSource, IaaS VMware +- **Containers** : Managed Kubernetes, PaaS OpenShift +- **Managed Databases** : MariaDB, PostgreSQL (preview) +- **Network** : VPC, Private Backbone +- **Sécurité & Identité** : Bastion, Console IAM +- **Stockage** : OSS +- **LLMaaS** : IA Générative +- **Contractuel** : Colonne footer dédiée + ## 🛠️ Maintenance Technique -### Actions Récentes -- [x] Correction des erreurs MDX dans les fichiers anglais (`en`). -- [x] Application des corrections aux fichiers espagnols (`es`), italiens (`it`) et allemands (`de`). -- [x] Correction des chemins d'images brisés par la traduction (`apri_appliance` vs `ouvrir_appliance`, etc.). -- [x] Validation par un build complet réussi. -- [x] Mise à jour du changelog avec les dernières modifications. +### Actions Récentes (session 14/05/2026) + +- [x] Fix permissions git (core.fileMode false) +- [x] Mise à jour changelog (3 entrées manquantes : stockage IOPS, sauvegarde IaaS, DB sizing) +- [x] Fix chunking traduction (code-block-aware dans ContentSplitter) +- [x] Mise à jour Memory Bank ### Actions Futures -- [ ] Améliorer le script de traduction pour prévenir la réapparition de ces erreurs (blocs vides, échappement, traduction des chemins d'images). -- [ ] Standardiser les ancres dans les fichiers source pour éviter les liens brisés lors de la traduction. + +- [ ] Relancer les traductions avec le script corrigé pour les fichiers modifiés +- [ ] Ajouter des tutoriels pour Managed MariaDB et PostgreSQL +- [ ] Enrichir VM Instances avec cas d'usage avancés + +--- + +*Dernière mise à jour : 14/05/2026* diff --git a/memory-bank/workflows/translation-workflow.md b/memory-bank/workflows/translation-workflow.md index 093b6d09..25fd3371 100644 --- a/memory-bank/workflows/translation-workflow.md +++ b/memory-bank/workflows/translation-workflow.md @@ -80,7 +80,33 @@ Le script `scripts/translate_py/translate.py` est l'outil central de ce workflow - Une relecture humaine des traductions générées est recommandée, surtout pour les contenus critiques ou complexes. - Les erreurs de traduction ou les problèmes de formatage doivent être signalés pour améliorer le prompt système ou le script. +## 🔧 Correction majeure du 14/05/2026 : chunking code-block-aware + +### Problème résolu + +Le `ContentSplitter` dans `translator.py` ne tenait pas compte des blocs de code délimités par ` ``` ` lors du découpage en chunks. Cela causait : + +1. **Headers dans le code traités comme des points de coupure** : Un `# commentaire Python` ou `## exemple` dans un bloc ` ```python ` était interprété comme un header Markdown, cassant le bloc de code en deux chunks séparés. +2. **Coupures au milieu des blocs de code** : Le sous-découpage des gros blocs (`_split_large_block`) coupait sur les `.`, `!`, `?` ou espaces sans vérifier si le point de coupure était dans un bloc de code. +3. **Résultat** : Les traductions produisaient des fichiers avec des blocs de code cassés (ouverture ` ``` ` sans fermeture), causant des erreurs MDX au build. + +### Solution implémentée + +Nouvelles méthodes dans `ContentSplitter` : + +- **`_find_code_block_ranges(text)`** : Identifie toutes les plages `(start, end)` des blocs de code ` ``` ... ``` ` dans le texte. Gère les fence de longueur variable et les blocs non fermés. +- **`_is_inside_code_block(position, code_ranges)`** : Vérifie si une position donnée est à l'intérieur d'un bloc de code. +- **`_find_safe_split_point(text, start, end, code_ranges)`** : Cherche un point de coupure sûr (hors bloc de code) avec priorité : ligne vide > fin de phrase > saut de ligne. +- **`split_content()` modifié** : Filtre les headers qui sont à l'intérieur d'un bloc de code avant de découper. +- **`_split_large_block()` modifié** : Utilise `_find_safe_split_point()` et ne coupe jamais au milieu d'un bloc de code. Si bloqué dans un code block, prend tout le bloc jusqu'à sa fermeture. + +### Validation + +Test unitaire validé : un document avec des `# commentaires Python` et `## faux headers` dans des blocs ` ```python ` et ` ```bash ` produit des blocs avec des code fences toujours équilibrées. + ## 🚀 Prochaines Étapes / Améliorations Possibles -- Intégration dans un workflow CI/CD pour automatiser les traductions lors de modifications sur la branche principale. -- Tableau de bord de l'état des traductions. -- Mécanisme de relecture et validation humaine intégré. + +- Relancer les traductions des fichiers modifiés avec le script corrigé. +- Intégration dans un workflow CI/CD pour automatiser les traductions lors de modifications sur la branche principale. +- Tableau de bord de l'état des traductions. +- Mécanisme de relecture et validation humaine intégré. diff --git a/scripts/translate_py/.env b/scripts/translate_py/.env index 965f6f52..02a8e7b7 100644 --- a/scripts/translate_py/.env +++ b/scripts/translate_py/.env @@ -7,8 +7,8 @@ CLOUDTEMPLE_API_KEY="WolFH3xGSCMPvlfEru5JAt_KWZIrYreQOm1dDB2x5X4" # Optionnel: Chemin de base de la documentation (par défaut '.') # DOC_BASE_PATH=. -# Optionnel: Modèle de traduction (par défaut 'qwen3:30b-a3b') -TRANSLATION_MODEL=qwen3-2507:30b-a3b +# Optionnel: Modèle de traduction +TRANSLATION_MODEL=qwen3.6:35b # Optionnel: Type de modèle pour la gestion du tokenizer ('openai' ou 'other', par défaut 'other') MODEL_TYPE=openai @@ -27,8 +27,8 @@ RETRY_DELAY=5.0 # Optionnel: Taille maximale d'un bloc de traduction en tokens (par défaut 5000) MAX_TOKENS_PER_BLOCK=4000 -# Optionnel: Longueur maximale du contexte du modèle en tokens (par défaut 32768 pour qwen3:30b-a3b) -MAX_MODEL_CONTEXT_LENGTH=32000 +# Optionnel: Longueur maximale du contexte du modèle en tokens (qwen3.6:35b supporte 1M) +MAX_MODEL_CONTEXT_LENGTH=250000 # Optionnel: Nombre de tokens de sécurité à soustraire du contexte disponible (par défaut 200) BUFFER_TOKENS=200 diff --git a/scripts/translate_py/translator.py b/scripts/translate_py/translator.py index 701a92e1..4408c87a 100644 --- a/scripts/translate_py/translator.py +++ b/scripts/translate_py/translator.py @@ -36,7 +36,11 @@ async def __aexit__(self, exc_type, exc_val, exc_tb): class ContentSplitter: - """Utilitaire pour découper le contenu en blocs traduisibles en comptant les tokens.""" + """Utilitaire pour découper le contenu en blocs traduisibles en comptant les tokens. + + IMPORTANT : Le découpage est code-block-aware — les blocs de code délimités + par des triple backticks (```) ne sont jamais coupés au milieu. + """ def __init__(self, max_tokens: int = 8000, model_name: str = "gpt-4", model_type: str = "other"): """ @@ -63,66 +67,156 @@ def _count_tokens(self, text: str) -> int: return len(self.encoding.encode(text)) else: # Estimation pour les modèles non-OpenAI (environ 4 caractères par token pour l'anglais) - # C'est une heuristique, la précision peut varier selon la langue et le contenu. return len(text) // 4 + def _find_code_block_ranges(self, text: str) -> List[Tuple[int, int]]: + """Identifie les plages (start, end) de tous les blocs de code ``` dans le texte. + + Gère les blocs avec ou sans spécificateur de langage (```python, ```json, etc.) + et les blocs de code imbriqués ou non fermés (traités comme allant jusqu'à la fin). + + Returns: + Liste de tuples (start, end) des blocs de code. + """ + ranges = [] + # Cherche les lignes qui commencent par ``` (avec éventuellement un langage après) + fence_pattern = re.compile(r'^(`{3,})', re.MULTILINE) + matches = list(fence_pattern.finditer(text)) + + i = 0 + while i < len(matches): + start = matches[i].start() + fence_marker = matches[i].group(1) + fence_len = len(fence_marker) + + # Chercher le prochain fence de fermeture de même longueur ou plus + found_end = False + for j in range(i + 1, len(matches)): + if len(matches[j].group(1)) >= fence_len: + # Fin du bloc de code = fin de la ligne du fence de fermeture + end_of_line = text.find('\n', matches[j].end()) + end = end_of_line if end_of_line != -1 else len(text) + ranges.append((start, end)) + i = j + 1 + found_end = True + break + + if not found_end: + # Bloc non fermé — va jusqu'à la fin du texte + ranges.append((start, len(text))) + break + + return ranges + + def _is_inside_code_block(self, position: int, code_ranges: List[Tuple[int, int]]) -> bool: + """Vérifie si une position est à l'intérieur d'un bloc de code.""" + for start, end in code_ranges: + if start <= position < end: + return True + if start > position: + break # Les ranges sont triées, pas besoin de continuer + return False + + def _find_safe_split_point(self, text: str, search_start: int, search_end: int, + code_ranges: List[Tuple[int, int]]) -> int: + """Trouve un point de coupure sûr (hors bloc de code) dans une zone de texte. + + Cherche en reculant depuis search_end vers search_start. + Priorité : ligne vide > fin de phrase > espace. + Ne coupe jamais à l'intérieur d'un bloc de code. + + Returns: + Position de coupure, ou -1 si aucun point sûr trouvé. + """ + segment = text[search_start:search_end] + + # Priorité 1 : Couper sur une ligne vide (séparateur de paragraphe) + for match in reversed(list(re.finditer(r'\n\n', segment))): + abs_pos = search_start + match.end() + if not self._is_inside_code_block(abs_pos, code_ranges): + return abs_pos + + # Priorité 2 : Couper après une fin de phrase + for match in reversed(list(re.finditer(r'[.!?]\s', segment))): + abs_pos = search_start + match.end() + if not self._is_inside_code_block(abs_pos, code_ranges): + return abs_pos + + # Priorité 3 : Couper sur un saut de ligne simple + for match in reversed(list(re.finditer(r'\n', segment))): + abs_pos = search_start + match.end() + if not self._is_inside_code_block(abs_pos, code_ranges): + return abs_pos + + return -1 + def _split_large_block(self, block: str) -> List[str]: - """Sous-découpe un bloc qui dépasse la limite de tokens.""" + """Sous-découpe un bloc qui dépasse la limite de tokens. + + Ne coupe jamais à l'intérieur d'un bloc de code ```. + """ + code_ranges = self._find_code_block_ranges(block) sub_blocks = [] current_pos = 0 + while current_pos < len(block): - # Estimation du point de coupure en caractères - estimated_end = current_pos + self.max_tokens * 4 + remaining = block[current_pos:] - # Segment à analyser - segment = block[current_pos:estimated_end] + # Si le reste tient dans la limite, on le prend en entier + if self._count_tokens(remaining) <= self.max_tokens: + sub_blocks.append(remaining) + break - # Si le segment est dans la limite, on le prend en entier - if self._count_tokens(segment) <= self.max_tokens: - sub_blocks.append(segment) - current_pos += len(segment) - continue - - # Le segment est trop grand, il faut le couper - # On cherche le point de coupure idéal en reculant depuis la fin du segment - split_pos = len(segment) + # Estimation du point de coupure en caractères + estimated_end = current_pos + self.max_tokens * 4 + estimated_end = min(estimated_end, len(block)) - # Priorité aux fins de phrase - sentence_enders = ['.', '!', '?'] - best_split = -1 - for p in sentence_enders: - pos = segment.rfind(p) - if pos > best_split: - best_split = pos + # Chercher un point de coupure sûr + split_pos = self._find_safe_split_point(block, current_pos, estimated_end, code_ranges) - if best_split != -1: - split_pos = best_split + 1 - else: - # Sinon, on cherche un espace - pos = segment.rfind(' ') - if pos != -1: - split_pos = pos + 1 - - sub_blocks.append(block[current_pos:current_pos + split_pos]) - current_pos += split_pos + if split_pos == -1 or split_pos <= current_pos: + # Pas de point de coupure sûr trouvé — on doit vérifier si on est dans un bloc de code + # Dans ce cas, chercher la fin du bloc de code et inclure tout + for cr_start, cr_end in code_ranges: + if cr_start <= current_pos < cr_end: + # On est dans un bloc de code, prendre tout le bloc de code + split_pos = cr_end + # Chercher la fin de ligne après le bloc de code + next_newline = block.find('\n', split_pos) + if next_newline != -1: + split_pos = next_newline + 1 + break + + # Si toujours pas de point, prendre le segment tel quel (fallback) + if split_pos == -1 or split_pos <= current_pos: + split_pos = estimated_end - return sub_blocks + sub_blocks.append(block[current_pos:split_pos]) + current_pos = split_pos + + return [b for b in sub_blocks if b.strip()] def split_content(self, content: str) -> List[str]: """ Découpe le contenu en blocs sémantiques basés sur les en-têtes Markdown. - Les blocs trop grands sont ensuite sous-découpés. + + IMPORTANT : Les en-têtes à l'intérieur des blocs de code (```) sont ignorés. + Les blocs trop grands sont ensuite sous-découpés sans casser les blocs de code. """ - final_blocks = [] + # 1. Identifier les zones de code pour les protéger + code_ranges = self._find_code_block_ranges(content) - # Découpage initial par en-têtes + # 2. Découpage par en-têtes (en ignorant ceux dans les blocs de code) header_pattern = re.compile(r'^(#+\s.*)', re.MULTILINE) - - # Trouver tous les en-têtes et leurs positions matches = list(header_pattern.finditer(content)) + # Filtrer les headers qui sont à l'intérieur d'un bloc de code + safe_matches = [m for m in matches if not self._is_inside_code_block(m.start(), code_ranges)] + + final_blocks = [] start_pos = 0 - for match in matches: + + for match in safe_matches: # Bloc entre le dernier en-tête (ou le début) et le début du nouvel en-tête block_content = content[start_pos:match.start()] if block_content.strip(): @@ -136,7 +230,7 @@ def split_content(self, content: str) -> List[str]: if last_block.strip(): final_blocks.append(last_block) - # Sous-découpage des blocs trop grands + # 3. Sous-découpage des blocs trop grands (code-block-aware) processed_blocks = [] for block in final_blocks: if self._count_tokens(block) > self.max_tokens: @@ -271,7 +365,9 @@ async def translate_content( total_time += block_result.processing_time success = not errors - final_content = '\n\n'.join(translated_blocks) if success else None + # Réassemblage : on utilise '\n\n' comme séparateur entre blocs sémantiques + # car chaque bloc commence par un header ou un paragraphe distinct + final_content = '\n\n'.join(b.strip() for b in translated_blocks) if success else None error_message = '; '.join(errors) if errors else None return BlockTranslationResult( From 3b6a6c596902aa32b02a7203ff1030f699364692 Mon Sep 17 00:00:00 2001 From: Christophe Lesur Date: Thu, 14 May 2026 17:52:36 +0200 Subject: [PATCH 02/15] fix(translate): stop copying images to i18n - use absolute @site/docs paths --- memory-bank/workflows/translation-workflow.md | 7 +++++++ scripts/translate_py/file_manager.py | 6 ++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/memory-bank/workflows/translation-workflow.md b/memory-bank/workflows/translation-workflow.md index 25fd3371..70c910d7 100644 --- a/memory-bank/workflows/translation-workflow.md +++ b/memory-bank/workflows/translation-workflow.md @@ -104,9 +104,16 @@ Nouvelles méthodes dans `ContentSplitter` : Test unitaire validé : un document avec des `# commentaires Python` et `## faux headers` dans des blocs ` ```python ` et ` ```bash ` produit des blocs avec des code fences toujours équilibrées. +## 🔧 Correction du 14/05/2026 : suppression de la copie d'images + +Depuis avril 2026, les images dans la documentation utilisent des chemins absolus `@site/docs/...` au lieu de chemins relatifs `./images/...`. Les versions i18n référencent directement les images sources, donc **les images n'ont plus besoin d'être dupliquées** dans les dossiers `i18n/`. + +**Modification** : Dans `file_manager.py`, la méthode `_needs_translation()` retourne maintenant `False` pour tous les fichiers non-Markdown (images, .docx, .pdf, etc.). Cela économise ~2500 fichiers inutiles (613 images × 4 langues). + ## 🚀 Prochaines Étapes / Améliorations Possibles - Relancer les traductions des fichiers modifiés avec le script corrigé. +- Nettoyer les images orphelines dans les dossiers i18n (optionnel, pas bloquant). - Intégration dans un workflow CI/CD pour automatiser les traductions lors de modifications sur la branche principale. - Tableau de bord de l'état des traductions. - Mécanisme de relecture et validation humaine intégré. diff --git a/scripts/translate_py/file_manager.py b/scripts/translate_py/file_manager.py index fa292ece..b344e56f 100644 --- a/scripts/translate_py/file_manager.py +++ b/scripts/translate_py/file_manager.py @@ -438,9 +438,11 @@ def _needs_translation( if init_mode: return translate_missing and not target_path.exists() - # Fichiers non-markdown : copie si manquant + # Fichiers non-markdown (images, documents, etc.) : ne plus copier. + # Depuis avril 2026, les images utilisent des chemins absolus @site/docs/... + # et n'ont plus besoin d'être dupliquées dans les dossiers i18n. if file_type != FileType.MARKDOWN: - return not target_path.exists() + return False # Fichiers markdown : vérification du hash if not target_path.exists(): From cc919ec4a3577d9469f5ef0d44f623caf5741970 Mon Sep 17 00:00:00 2001 From: Christophe Lesur Date: Fri, 15 May 2026 14:54:47 +0200 Subject: [PATCH 03/15] revert(translate): restore image copy - 63 source files still use relative paths --- scripts/translate_py/file_manager.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/translate_py/file_manager.py b/scripts/translate_py/file_manager.py index b344e56f..edb4e9d6 100644 --- a/scripts/translate_py/file_manager.py +++ b/scripts/translate_py/file_manager.py @@ -438,11 +438,11 @@ def _needs_translation( if init_mode: return translate_missing and not target_path.exists() - # Fichiers non-markdown (images, documents, etc.) : ne plus copier. - # Depuis avril 2026, les images utilisent des chemins absolus @site/docs/... - # et n'ont plus besoin d'être dupliquées dans les dossiers i18n. + # Fichiers non-markdown (images, documents, etc.) : copie si manquant. + # NOTE : 63 fichiers source utilisent encore ./images/ (relatif). + # La copie reste nécessaire tant que la migration vers @site/docs/ n'est pas complète. if file_type != FileType.MARKDOWN: - return False + return not target_path.exists() # Fichiers markdown : vérification du hash if not target_path.exists(): From 11383eeea81ba9235a4ffc06edd41870d4c73a07 Mon Sep 17 00:00:00 2001 From: Christophe Lesur Date: Fri, 15 May 2026 15:07:58 +0200 Subject: [PATCH 04/15] docs(memory-bank): avertissement critique - ne JAMAIS modifier i18n a la main --- memory-bank/core/activeDocumentation.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/memory-bank/core/activeDocumentation.md b/memory-bank/core/activeDocumentation.md index 0f0b32cc..e61e8755 100644 --- a/memory-bank/core/activeDocumentation.md +++ b/memory-bank/core/activeDocumentation.md @@ -1,5 +1,23 @@ # Documentation Active - État Actuel +## ⛔ AVERTISSEMENT CRITIQUE — NE RIEN FAIRE À LA MAIN DANS i18n/ + +> **INTERDICTION ABSOLUE** : Ne JAMAIS modifier manuellement les fichiers dans les dossiers `i18n/`. +> +> **Pourquoi** : Toutes les traductions sont gérées automatiquement par le script `scripts/translate_py/translate.py`. +> Toute modification manuelle sera **écrasée** lors de la prochaine exécution du script, et peut **casser le build** +> (blocs de code mal fermés, chemins d'images incorrects, doublons MDX). +> +> **Workflow obligatoire** : +> 1. Modifier UNIQUEMENT les fichiers source en **français** dans `docs/` +> 2. Lancer le script de traduction : `python scripts/translate_py/translate.py` +> 3. Vérifier le build : `npx docusaurus build` +> 4. Commiter l'ensemble (sources FR + traductions générées) +> +> **Attention aux images** : 63 fichiers source utilisent encore des chemins relatifs `./images/`. +> Le script copie automatiquement les images dans les dossiers i18n. Ne PAS supprimer ces copies. +> La migration vers `@site/docs/...` (chemins absolus) est un chantier futur. + ## Analyse de Complétude par Service ### 🖥️ Console Management - Statut : ✅ COMPLET From dbf8eca8cb2afff9a7f403b516d1b3390d062057 Mon Sep 17 00:00:00 2001 From: Christophe Lesur Date: Sat, 16 May 2026 22:29:01 +0200 Subject: [PATCH 05/15] fix(translate): never copy images to i18n - guard before all flags --- scripts/translate_py/file_manager.py | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/scripts/translate_py/file_manager.py b/scripts/translate_py/file_manager.py index edb4e9d6..0c62ce85 100644 --- a/scripts/translate_py/file_manager.py +++ b/scripts/translate_py/file_manager.py @@ -430,19 +430,12 @@ def _needs_translation( Returns: True si traduction nécessaire """ - # En mode force, tout est à traduire - if force_retranslation: - return True - - # En mode init, on ne traduit que les manquants si demandé - if init_mode: - return translate_missing and not target_path.exists() - - # Fichiers non-markdown (images, documents, etc.) : copie si manquant. - # NOTE : 63 fichiers source utilisent encore ./images/ (relatif). - # La copie reste nécessaire tant que la migration vers @site/docs/ n'est pas complète. + # Fichiers non-markdown (images, documents, etc.) : JAMAIS copier. + # Les images déjà commitées dans i18n y restent. + # Le script ne doit PAS re-créer les dossiers d'images à chaque exécution. + # Pour les nouveaux contenus, utiliser @site/docs/... (chemins absolus). if file_type != FileType.MARKDOWN: - return not target_path.exists() + return False # Fichiers markdown : vérification du hash if not target_path.exists(): From 4fefdbfc4b5baa0f055dfe6728745c730f0904a0 Mon Sep 17 00:00:00 2001 From: Christophe Lesur Date: Sun, 17 May 2026 18:16:16 +0200 Subject: [PATCH 06/15] refactor(i18n): migrate image paths to @site/docs absolute + resync translation hashes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Migration complète des chemins d'images et nettoyage du système de traduction : Images (208 fichiers migrés) : - ./images/ → @site/docs/.../images/ (165 fichiers FR + i18n) - ../images/ → @site/docs/.../images/ (43 fichiers FR + i18n) - Fix cross-dir ../console/images/ dans iaas_vmware/quickstart.md - Suppression de 11 dossiers images orphelins dans i18n/ Traductions & hash : - Resync translation-meta.json (157/157 fichiers synchronisés) - extract_changelog.py : ajout mise à jour automatique des hash - Suppression de oldies/translate.js (script legacy) - scripts/README.md : suppression section legacy, ajout extract_changelog Fixes MDX : - batch.md : échappement {batch_id} et {file_id} (FR + 4 langues) - contact_partner.md EN : import manquant marketplaceContactEmail - usinggpu.md IT : typo nvidasmi → nvidiasmi Documentation : - README.md : section traduction enrichie, règle images @site/docs - changelog_produits.md : tronqué avant v4.0 (~2600 → ~420 lignes) - memory-bank/documentationStatus.md : état mis à jour Build : ✅ SUCCESS (toutes les langues) --- README.md | 37 +- docs/additional_content/concepts_regional.md | 2 +- docs/bastion/concepts.md | 2 +- docs/bastion/quickstart.md | 12 +- docs/bastion/tutorials.md | 24 +- docs/changelog_produits.md | 2198 +---------------- docs/console/api.md | 18 +- docs/console/billing/concepts.md | 12 +- docs/console/console_quickstart.md | 24 +- docs/console/iam/concepts.md | 30 +- docs/console/iam/quickstart.md | 18 +- docs/console/iam/tutorials/sso_adfs.md | 24 +- docs/console/iam/tutorials/sso_azuread.md | 34 +- docs/console/iam/tutorials/sso_jumpcloud.md | 4 +- docs/console/metrics/concepts.md | 50 +- docs/console/orders.md | 52 +- docs/console/status.md | 20 +- docs/iaas_bare-metal/quickstart.md | 8 +- docs/iaas_opensource/quickstart.md | 32 +- .../backup/iaas_opensource_backup.md | 20 +- .../high_availability/manage_pool.md | 12 +- .../tutorials/high_availability/manage_vm.md | 12 +- docs/iaas_vmware/quickstart.md | 100 +- .../tutorials/backup/iaas_backup.md | 32 +- .../tutorials/deploy_vm_template.md | 6 +- .../tutorials/deploy_vm_terraform.md | 4 +- docs/iaas_vmware/tutorials/vm_encryption.md | 10 +- docs/llmaas/api.md | 228 +- docs/llmaas/batch.md | 536 ++++ docs/llmaas/concepts.md | 302 +-- docs/llmaas/faq.md | 93 +- docs/llmaas/llmaas.md | 20 +- docs/llmaas/models.md | 1349 +++++----- docs/llmaas/ocr.md | 47 +- docs/llmaas/quickstart.md | 79 +- docs/llmaas/rag_explained.md | 57 +- docs/llmaas/rerank.md | 371 +++ docs/llmaas/tutorials.md | 36 +- docs/managed_kubernetes/concepts.md | 8 +- .../managed_core_kubernetes.md | 4 +- docs/managed_kubernetes/managed_kubernetes.md | 4 +- .../tutorials/networking.md | 455 ++-- .../tutorials/usingargocd.md | 375 +-- .../managed_kubernetes/tutorials/usinggapi.md | 454 ++-- docs/managed_kubernetes/tutorials/usinggpu.md | 118 +- .../tutorials/usingkasten.md | 231 +- .../tutorials/usingopencost.md | 261 +- docs/managed_mariadb/managed_mariadb.md | 16 +- docs/marketplace/quickstart.md | 4 +- docs/marketplace/tutorials/contact_partner.md | 6 +- .../tutorials/customize_image_openiaas.md | 6 +- .../tutorials/customize_image_vmware.md | 6 +- docs/marketplace/tutorials/deploy_openiaas.md | 4 +- docs/marketplace/tutorials/deploy_vmware.md | 4 +- docs/network/internet/quickstart.md | 14 +- docs/network/internet/tutorials/forti.md | 94 +- docs/network/internet/tutorials/pfSense.md | 22 +- docs/network/private_network/quickstart.md | 36 +- docs/network/vpc/quickstart.md | 26 +- .../network/vpc/tutorials/vm_configuration.md | 12 +- docs/paas_openshift/concepts.md | 2 +- docs/paas_openshift/quickstart.md | 12 +- docs/public_cloud/vm_instances/quickstart.md | 32 +- .../vm_instances/tutorials/create_vm.md | 20 +- .../vm_instances/tutorials/manage_disks.md | 4 +- .../vm_instances/tutorials/snapshots.md | 2 +- docs/storage/oss/quickstart.md | 28 +- docs/storage/oss/tutorials/bucket-access.md | 6 +- .../oss/tutorials/cloudberry-explorer.md | 6 +- docs/storage/oss/tutorials/winscp.md | 4 +- docs/terraform/terraform.md | 4 +- .../current/additional_content/concepts_az.md | 20 +- .../additional_content/concepts_regional.md | 10 +- .../current/bastion/bastion.md | 18 +- .../current/bastion/concepts.md | 40 +- .../current/bastion/quickstart.md | 72 +- .../current/bastion/tutorials.md | 82 +- .../current/changelog.md | 224 +- .../current/compute_overview.md | 14 +- .../current/console/api.md | 275 +-- .../current/console/billing/concepts.md | 109 +- .../current/console/console.md | 84 +- .../current/console/console_quickstart.md | 195 +- .../current/console/iam/concepts.md | 389 +-- .../current/console/iam/iam.md | 26 +- .../console/iam/tutorials/sso_jumpcloud.md | 72 +- .../current/console/metrics/concepts.md | 119 +- .../current/console/orders.md | 222 +- .../console/security/security_alarms.md | 72 +- .../current/containers_overview.md | 72 +- .../current/contractual/contracts.md | 68 +- .../current/contractual/iaas/raci.md | 423 ++-- .../current/contractual/iaas/raci_s3.md | 121 +- .../current/contractual/kubernetes/raci.md | 241 +- .../current/contractual/llmaas/raci.md | 96 +- .../current/contractual/network/raci.md | 21 +- .../current/contractual/network/raci_vpc.md | 234 +- .../current/contractual/network/sla_vpc.md | 78 +- .../current/contractual/paas/mco_mcs.md | 253 +- .../current/contractual/paas/raci.md | 264 +- .../current/contractual/paas/raci_ocp_std.md | 232 +- .../contractual/shared-responsibility.md | 50 +- .../current/contractual/vm-instances/raci.md | 278 +-- .../vm-instances/sla_vm-instances.md | 71 +- .../current/databases_overview.md | 20 +- .../current/faq.md | 16 +- .../current/home.md | 27 +- .../current/housing/housing.md | 12 +- .../current/housing/quickstart.md | 38 +- .../current/housing/tutorials.md | 10 +- .../current/iaas_bare-metal/concepts.md | 159 +- .../iaas_bare-metal/iaas_bare-metal.md | 24 +- .../current/iaas_bare-metal/quickstart.md | 58 +- .../current/iaas_bare-metal/tutorials.md | 6 +- .../current/iaas_opensource/concepts.md | 524 ++-- .../iaas_opensource/iaas_opensource.md | 30 +- .../current/iaas_opensource/quickstart.md | 209 +- .../iaas_opensource/tutorials/create_vm.md | 224 +- .../tutorials/high_availability/manage_vm.md | 10 +- .../current/iaas_vmware/concepts.md | 640 ++--- .../current/iaas_vmware/iaas_vmware.md | 18 +- .../current/iaas_vmware/quickstart.md | 431 ++-- .../tutorials/backup/iaas_backup.md | 122 +- .../tutorials/deploy_vm_template.md | 37 +- .../tutorials/deploy_vm_terraform.md | 80 +- .../iaas_vmware/tutorials/vm_encryption.md | 40 +- .../current/llmaas/api.md | 521 ++-- .../current/llmaas/batch.md | 536 ++++ .../current/llmaas/concepts.md | 609 ++--- .../current/llmaas/faq.md | 177 +- .../current/llmaas/llmaas.md | 66 +- .../current/llmaas/quickstart.md | 358 ++- .../current/llmaas/rerank.md | 371 +++ .../current/managed_kubernetes/concepts.md | 352 +-- .../images/archi_overview.png | Bin 114801 -> 0 bytes .../images/archi_overview_1az.png | Bin 81762 -> 0 bytes .../managed_kubernetes/images/cillium.png | Bin 108152 -> 0 bytes .../managed_kubernetes/images/grafana.png | Bin 243273 -> 0 bytes .../managed_core_kubernetes.md | 74 +- .../managed_kubernetes/managed_kubernetes.md | 80 +- .../current/managed_kubernetes/quickstart.md | 100 +- .../tutorials/firstdeploy.md | 63 +- .../tutorials/images/argocdguestbook.png | Bin 150815 -> 0 bytes .../tutorials/images/cillium.png | Bin 108152 -> 0 bytes .../tutorials/images/gapi.png | Bin 26637 -> 0 bytes .../tutorials/images/k10dashboard.png | Bin 153879 -> 0 bytes .../tutorials/images/k10infrabackups.png | Bin 152930 -> 0 bytes .../tutorials/images/k10s3location.png | Bin 53319 -> 0 bytes .../tutorials/images/nvidiasmi.png | Bin 19640 -> 0 bytes .../tutorials/images/opencost.png | Bin 89375 -> 0 bytes .../tutorials/images/opencostgrafana.png | Bin 241798 -> 0 bytes .../tutorials/images/opencostmcp.png | Bin 291688 -> 0 bytes .../tutorials/images/opencostmcp2.png | Bin 22533 -> 0 bytes .../tutorials/images/opencostmcp3.png | Bin 36248 -> 0 bytes .../tutorials/networking.md | 155 +- .../tutorials/usingargocd.md | 107 +- .../tutorials/usingcapsule.md | 46 +- .../managed_kubernetes/tutorials/usinggapi.md | 84 +- .../managed_kubernetes/tutorials/usinggpu.md | 28 +- .../tutorials/usingharbor.md | 154 +- .../tutorials/usingkasten.md | 91 +- .../tutorials/usingopencost.md | 89 +- .../current/managed_mariadb/concepts.md | 122 +- .../managed_mariadb/managed_mariadb.md | 74 +- .../current/managed_mariadb/quickstart.md | 66 +- .../current/managed_postgresql/concepts.md | 125 +- .../managed_postgresql/managed_postgresql.md | 66 +- .../current/managed_postgresql/quickstart.md | 48 +- .../current/managedproducts_overview.md | 34 +- .../current/market_place_public.md | 12 +- .../current/marketplace/concepts.md | 84 +- .../current/marketplace/marketplace.md | 22 +- .../current/marketplace/quickstart.md | 78 +- .../marketplace/tutorials/contact_partner.md | 34 +- .../tutorials/customize_image_openiaas.md | 60 +- .../tutorials/customize_image_vmware.md | 56 +- .../marketplace/tutorials/deploy_openiaas.md | 42 +- .../marketplace/tutorials/deploy_vmware.md | 48 +- .../network/internet/advanced_concepts.md | 86 +- .../current/network/internet/concepts.md | 116 +- .../current/network/internet/internet.md | 14 +- .../network/internet/tutorials/pfSense.md | 102 +- .../current/network/network_overview.md | 12 +- .../current/additional_content/concepts_az.md | 14 +- .../additional_content/concepts_regional.md | 15 +- .../current/bastion/bastion.md | 18 +- .../current/bastion/concepts.md | 30 +- .../current/bastion/quickstart.md | 64 +- .../current/bastion/tutorials.md | 82 +- .../current/changelog.md | 167 +- .../current/compute_overview.md | 6 +- .../current/console/api.md | 188 +- .../current/console/billing/concepts.md | 111 +- .../current/console/console.md | 76 +- .../current/console/console_quickstart.md | 126 +- .../current/console/iam/concepts.md | 351 +-- .../current/console/iam/iam.md | 16 +- .../console/iam/tutorials/sso_jumpcloud.md | 60 +- .../current/console/metrics/concepts.md | 100 +- .../current/console/orders.md | 190 +- .../console/security/security_alarms.md | 60 +- .../current/containers_overview.md | 54 +- .../current/contractual/contracts.md | 52 +- .../current/contractual/iaas/raci.md | 369 ++- .../current/contractual/iaas/raci_s3.md | 107 +- .../current/contractual/kubernetes/raci.md | 151 +- .../current/contractual/llmaas/raci.md | 92 +- .../current/contractual/network/raci.md | 21 +- .../current/contractual/network/raci_vpc.md | 228 +- .../current/contractual/network/sla_vpc.md | 70 +- .../current/contractual/paas/mco_mcs.md | 181 +- .../current/contractual/paas/raci.md | 202 +- .../current/contractual/paas/raci_ocp_std.md | 209 +- .../contractual/shared-responsibility.md | 28 +- .../current/contractual/vm-instances/raci.md | 282 +-- .../vm-instances/sla_vm-instances.md | 63 +- .../current/databases_overview.md | 4 +- .../current/faq.md | 10 +- .../current/home.md | 17 +- .../current/housing/housing.md | 16 +- .../current/housing/quickstart.md | 40 +- .../current/housing/tutorials.md | 10 +- .../current/iaas_bare-metal/concepts.md | 136 +- .../iaas_bare-metal/iaas_bare-metal.md | 28 +- .../current/iaas_bare-metal/quickstart.md | 38 +- .../current/iaas_bare-metal/tutorials.md | 8 +- .../current/iaas_opensource/concepts.md | 413 ++-- .../iaas_opensource/iaas_opensource.md | 23 +- .../current/iaas_opensource/quickstart.md | 133 +- .../iaas_opensource/tutorials/create_vm.md | 116 +- .../tutorials/high_availability/manage_vm.md | 10 +- .../current/iaas_vmware/concepts.md | 526 ++-- .../current/iaas_vmware/iaas_vmware.md | 22 +- .../current/iaas_vmware/quickstart.md | 321 +-- .../tutorials/backup/iaas_backup.md | 111 +- .../tutorials/deploy_vm_template.md | 29 +- .../tutorials/deploy_vm_terraform.md | 72 +- .../iaas_vmware/tutorials/vm_encryption.md | 24 +- .../current/llmaas/api.md | 439 ++-- .../current/llmaas/batch.md | 536 ++++ .../current/llmaas/concepts.md | 557 ++--- .../current/llmaas/faq.md | 119 +- .../current/llmaas/llmaas.md | 40 +- .../current/llmaas/models.md | 1684 +++++++------ .../current/llmaas/quickstart.md | 334 ++- .../current/llmaas/rerank.md | 371 +++ .../current/managed_kubernetes/concepts.md | 208 +- .../images/archi_overview.png | Bin 114801 -> 0 bytes .../images/archi_overview_1az.png | Bin 81762 -> 0 bytes .../managed_kubernetes/images/cillium.png | Bin 108152 -> 0 bytes .../managed_kubernetes/images/grafana.png | Bin 243273 -> 0 bytes .../managed_core_kubernetes.md | 72 +- .../managed_kubernetes/managed_kubernetes.md | 80 +- .../current/managed_kubernetes/quickstart.md | 60 +- .../tutorials/firstdeploy.md | 43 +- .../tutorials/images/argocdguestbook.png | Bin 150815 -> 0 bytes .../tutorials/images/cillium.png | Bin 108152 -> 0 bytes .../tutorials/images/gapi.png | Bin 26637 -> 0 bytes .../tutorials/images/k10dashboard.png | Bin 153879 -> 0 bytes .../tutorials/images/k10infrabackups.png | Bin 152930 -> 0 bytes .../tutorials/images/k10s3location.png | Bin 53319 -> 0 bytes .../tutorials/images/nvidiasmi.png | Bin 19640 -> 0 bytes .../tutorials/images/opencost.png | Bin 89375 -> 0 bytes .../tutorials/images/opencostgrafana.png | Bin 241798 -> 0 bytes .../tutorials/images/opencostmcp.png | Bin 291688 -> 0 bytes .../tutorials/images/opencostmcp2.png | Bin 22533 -> 0 bytes .../tutorials/images/opencostmcp3.png | Bin 36248 -> 0 bytes .../tutorials/networking.md | 107 +- .../tutorials/usingargocd.md | 77 +- .../tutorials/usingcapsule.md | 40 +- .../managed_kubernetes/tutorials/usinggapi.md | 52 +- .../managed_kubernetes/tutorials/usinggpu.md | 16 +- .../tutorials/usingharbor.md | 112 +- .../tutorials/usingkasten.md | 69 +- .../tutorials/usingopencost.md | 69 +- .../current/managed_mariadb/concepts.md | 120 +- .../managed_mariadb/images/Distributed.png | Bin 72032 -> 0 bytes .../managed_mariadb/images/StandAlone.png | Bin 42541 -> 0 bytes .../current/managed_mariadb/images/stack.png | Bin 8593 -> 0 bytes .../managed_mariadb/managed_mariadb.md | 58 +- .../current/managed_mariadb/quickstart.md | 66 +- .../current/managed_postgresql/concepts.md | 117 +- .../managed_postgresql/managed_postgresql.md | 50 +- .../current/managed_postgresql/quickstart.md | 48 +- .../current/managedproducts_overview.md | 36 +- .../current/market_place_public.md | 14 +- .../current/marketplace/concepts.md | 56 +- .../current/marketplace/marketplace.md | 14 +- .../current/marketplace/quickstart.md | 56 +- .../marketplace/tutorials/contact_partner.md | 26 +- .../tutorials/customize_image_openiaas.md | 36 +- .../tutorials/customize_image_vmware.md | 34 +- .../marketplace/tutorials/deploy_openiaas.md | 22 +- .../marketplace/tutorials/deploy_vmware.md | 22 +- .../network/internet/advanced_concepts.md | 42 +- .../current/network/internet/concepts.md | 100 +- .../current/network/internet/internet.md | 12 +- .../network/internet/tutorials/pfSense.md | 102 +- .../current/network/network_overview.md | 6 +- .../current/additional_content/concepts_az.md | 16 +- .../additional_content/concepts_regional.md | 14 +- .../current/bastion/bastion.md | 24 +- .../current/bastion/concepts.md | 40 +- .../current/bastion/quickstart.md | 60 +- .../current/bastion/tutorials.md | 74 +- .../current/changelog.md | 231 +- .../current/compute_overview.md | 18 +- .../current/console/api.md | 285 ++- .../current/console/billing/concepts.md | 111 +- .../current/console/console.md | 82 +- .../current/console/console_quickstart.md | 142 +- .../current/console/iam/concepts.md | 343 +-- .../current/console/iam/iam.md | 14 +- .../console/iam/tutorials/sso_jumpcloud.md | 71 +- .../current/console/metrics/concepts.md | 105 +- .../current/console/orders.md | 213 +- .../console/security/security_alarms.md | 54 +- .../current/containers_overview.md | 86 +- .../current/contractual/contracts.md | 52 +- .../current/contractual/iaas/raci.md | 425 ++-- .../current/contractual/iaas/raci_s3.md | 131 +- .../current/contractual/kubernetes/raci.md | 219 +- .../current/contractual/llmaas/raci.md | 112 +- .../current/contractual/network/raci.md | 21 +- .../current/contractual/network/raci_vpc.md | 242 +- .../current/contractual/network/sla_vpc.md | 78 +- .../current/contractual/paas/mco_mcs.md | 207 +- .../current/contractual/paas/raci.md | 254 +- .../current/contractual/paas/raci_ocp_std.md | 231 +- .../contractual/shared-responsibility.md | 22 +- .../current/contractual/vm-instances/raci.md | 276 ++- .../vm-instances/sla_vm-instances.md | 65 +- .../current/databases_overview.md | 12 +- .../current/faq.md | 20 +- .../current/home.md | 45 +- .../current/housing/housing.md | 8 +- .../current/housing/quickstart.md | 30 +- .../current/housing/tutorials.md | 10 +- .../current/iaas_bare-metal/concepts.md | 139 +- .../iaas_bare-metal/iaas_bare-metal.md | 24 +- .../current/iaas_bare-metal/quickstart.md | 48 +- .../current/iaas_bare-metal/tutorials.md | 8 +- .../current/iaas_opensource/concepts.md | 419 ++-- .../iaas_opensource/iaas_opensource.md | 25 +- .../current/iaas_opensource/quickstart.md | 128 +- .../iaas_opensource/tutorials/create_vm.md | 225 +- .../tutorials/high_availability/manage_vm.md | 14 +- .../current/iaas_vmware/concepts.md | 557 +++-- .../current/iaas_vmware/iaas_vmware.md | 12 +- .../current/iaas_vmware/quickstart.md | 364 ++- .../tutorials/backup/iaas_backup.md | 98 +- .../tutorials/deploy_vm_template.md | 30 +- .../tutorials/deploy_vm_terraform.md | 80 +- .../iaas_vmware/tutorials/vm_encryption.md | 30 +- .../current/llmaas/api.md | 506 ++-- .../current/llmaas/batch.md | 536 ++++ .../current/llmaas/concepts.md | 555 ++--- .../current/llmaas/faq.md | 141 +- .../current/llmaas/llmaas.md | 56 +- .../current/llmaas/models.md | 1754 +++++++------ .../current/llmaas/quickstart.md | 326 ++- .../current/llmaas/rerank.md | 368 +++ .../current/managed_kubernetes/concepts.md | 334 +-- .../images/archi_overview.png | Bin 114801 -> 0 bytes .../images/archi_overview_1az.png | Bin 81762 -> 0 bytes .../managed_kubernetes/images/cillium.png | Bin 108152 -> 0 bytes .../managed_kubernetes/images/grafana.png | Bin 243273 -> 0 bytes .../managed_core_kubernetes.md | 60 +- .../managed_kubernetes/managed_kubernetes.md | 76 +- .../current/managed_kubernetes/quickstart.md | 104 +- .../tutorials/firstdeploy.md | 57 +- .../tutorials/images/argocdguestbook.png | Bin 150815 -> 0 bytes .../tutorials/images/cillium.png | Bin 108152 -> 0 bytes .../tutorials/images/gapi.png | Bin 26637 -> 0 bytes .../tutorials/images/k10dashboard.png | Bin 153879 -> 0 bytes .../tutorials/images/k10infrabackups.png | Bin 152930 -> 0 bytes .../tutorials/images/k10s3location.png | Bin 53319 -> 0 bytes .../tutorials/images/nvidiasmi.png | Bin 19640 -> 0 bytes .../tutorials/images/opencost.png | Bin 89375 -> 0 bytes .../tutorials/images/opencostgrafana.png | Bin 241798 -> 0 bytes .../tutorials/images/opencostmcp.png | Bin 291688 -> 0 bytes .../tutorials/images/opencostmcp2.png | Bin 22533 -> 0 bytes .../tutorials/images/opencostmcp3.png | Bin 36248 -> 0 bytes .../tutorials/networking.md | 119 +- .../tutorials/usingargocd.md | 99 +- .../tutorials/usingcapsule.md | 42 +- .../managed_kubernetes/tutorials/usinggapi.md | 72 +- .../managed_kubernetes/tutorials/usinggpu.md | 30 +- .../tutorials/usingharbor.md | 160 +- .../tutorials/usingkasten.md | 91 +- .../tutorials/usingopencost.md | 79 +- .../current/managed_mariadb/concepts.md | 122 +- .../managed_mariadb/images/Distributed.png | Bin 72032 -> 0 bytes .../managed_mariadb/images/StandAlone.png | Bin 42541 -> 0 bytes .../current/managed_mariadb/images/stack.png | Bin 8593 -> 0 bytes .../managed_mariadb/managed_mariadb.md | 68 +- .../current/managed_mariadb/quickstart.md | 66 +- .../current/managed_postgresql/concepts.md | 127 +- .../managed_postgresql/managed_postgresql.md | 62 +- .../current/managed_postgresql/quickstart.md | 48 +- .../current/managedproducts_overview.md | 32 +- .../current/market_place_public.md | 10 +- .../current/marketplace/concepts.md | 60 +- .../current/marketplace/marketplace.md | 16 +- .../current/marketplace/quickstart.md | 66 +- .../marketplace/tutorials/contact_partner.md | 24 +- .../tutorials/customize_image_openiaas.md | 48 +- .../tutorials/customize_image_vmware.md | 46 +- .../marketplace/tutorials/deploy_openiaas.md | 24 +- .../marketplace/tutorials/deploy_vmware.md | 30 +- .../network/internet/advanced_concepts.md | 58 +- .../current/network/internet/concepts.md | 96 +- .../current/network/internet/internet.md | 6 +- .../network/internet/tutorials/pfSense.md | 107 +- .../current/network/network_overview.md | 14 +- .../current/additional_content/concepts_az.md | 12 +- .../additional_content/concepts_regional.md | 18 +- .../current/bastion/bastion.md | 22 +- .../current/bastion/concepts.md | 42 +- .../current/bastion/quickstart.md | 72 +- .../current/bastion/tutorials.md | 72 +- .../current/changelog.md | 229 +- .../current/compute_overview.md | 16 +- .../current/console/api.md | 263 +- .../current/console/billing/concepts.md | 109 +- .../current/console/console.md | 72 +- .../current/console/console_quickstart.md | 140 +- .../current/console/iam/concepts.md | 326 +-- .../current/console/iam/iam.md | 8 +- .../console/iam/tutorials/sso_jumpcloud.md | 59 +- .../current/console/metrics/concepts.md | 113 +- .../current/console/orders.md | 212 +- .../console/security/security_alarms.md | 62 +- .../current/containers_overview.md | 56 +- .../current/contractual/contracts.md | 42 +- .../current/contractual/iaas/raci.md | 432 ++-- .../current/contractual/iaas/raci_s3.md | 137 +- .../current/contractual/kubernetes/raci.md | 219 +- .../current/contractual/llmaas/raci.md | 128 +- .../current/contractual/network/raci.md | 21 +- .../current/contractual/network/raci_vpc.md | 244 +- .../current/contractual/network/sla_vpc.md | 80 +- .../current/contractual/paas/mco_mcs.md | 221 +- .../current/contractual/paas/raci.md | 274 +- .../current/contractual/paas/raci_ocp_std.md | 249 +- .../contractual/shared-responsibility.md | 34 +- .../current/contractual/vm-instances/raci.md | 302 +-- .../vm-instances/sla_vm-instances.md | 77 +- .../current/databases_overview.md | 14 +- .../current/faq.md | 14 +- .../current/home.md | 25 +- .../current/housing/housing.md | 20 +- .../current/housing/quickstart.md | 43 +- .../current/housing/tutorials.md | 12 +- .../current/iaas_bare-metal/concepts.md | 139 +- .../iaas_bare-metal/iaas_bare-metal.md | 34 +- .../current/iaas_bare-metal/quickstart.md | 44 +- .../current/iaas_bare-metal/tutorials.md | 8 +- .../current/iaas_opensource/concepts.md | 462 ++-- .../iaas_opensource/iaas_opensource.md | 24 +- .../current/iaas_opensource/quickstart.md | 167 +- .../iaas_opensource/tutorials/create_vm.md | 224 +- .../tutorials/high_availability/manage_vm.md | 14 +- .../current/iaas_vmware/concepts.md | 569 +++-- .../current/iaas_vmware/iaas_vmware.md | 18 +- .../current/iaas_vmware/quickstart.md | 362 ++- .../tutorials/backup/iaas_backup.md | 97 +- .../tutorials/deploy_vm_template.md | 30 +- .../tutorials/deploy_vm_terraform.md | 86 +- .../iaas_vmware/tutorials/vm_encryption.md | 32 +- .../current/llmaas/api.md | 493 ++-- .../current/llmaas/batch.md | 536 ++++ .../current/llmaas/faq.md | 139 +- .../current/llmaas/llmaas.md | 54 +- .../current/llmaas/models.md | 1716 +++++++------ .../current/llmaas/quickstart.md | 355 ++- .../current/llmaas/rerank.md | 371 +++ .../current/managed_kubernetes/concepts.md | 290 +-- .../images/archi_overview.png | Bin 114801 -> 0 bytes .../images/archi_overview_1az.png | Bin 81762 -> 0 bytes .../managed_kubernetes/images/cillium.png | Bin 108152 -> 0 bytes .../managed_kubernetes/images/grafana.png | Bin 243273 -> 0 bytes .../managed_core_kubernetes.md | 78 +- .../managed_kubernetes/managed_kubernetes.md | 82 +- .../current/managed_kubernetes/quickstart.md | 110 +- .../tutorials/firstdeploy.md | 73 +- .../tutorials/images/argocdguestbook.png | Bin 150815 -> 0 bytes .../tutorials/images/cillium.png | Bin 108152 -> 0 bytes .../tutorials/images/gapi.png | Bin 26637 -> 0 bytes .../tutorials/images/k10dashboard.png | Bin 153879 -> 0 bytes .../tutorials/images/k10infrabackups.png | Bin 152930 -> 0 bytes .../tutorials/images/k10s3location.png | Bin 53319 -> 0 bytes .../tutorials/images/nvidiasmi.png | Bin 19640 -> 0 bytes .../tutorials/images/opencost.png | Bin 89375 -> 0 bytes .../tutorials/images/opencostgrafana.png | Bin 241798 -> 0 bytes .../tutorials/images/opencostmcp.png | Bin 291688 -> 0 bytes .../tutorials/images/opencostmcp2.png | Bin 22533 -> 0 bytes .../tutorials/images/opencostmcp3.png | Bin 36248 -> 0 bytes .../tutorials/networking.md | 131 +- .../tutorials/usingargocd.md | 109 +- .../tutorials/usingcapsule.md | 46 +- .../managed_kubernetes/tutorials/usinggapi.md | 80 +- .../managed_kubernetes/tutorials/usinggpu.md | 22 +- .../tutorials/usingharbor.md | 139 +- .../tutorials/usingkasten.md | 99 +- .../tutorials/usingopencost.md | 85 +- .../current/managed_mariadb/concepts.md | 116 +- .../managed_mariadb/images/Distributed.png | Bin 72032 -> 0 bytes .../managed_mariadb/images/StandAlone.png | Bin 42541 -> 0 bytes .../current/managed_mariadb/images/stack.png | Bin 8593 -> 0 bytes .../managed_mariadb/managed_mariadb.md | 68 +- .../current/managed_mariadb/quickstart.md | 66 +- .../current/managed_postgresql/concepts.md | 117 +- .../managed_postgresql/managed_postgresql.md | 62 +- .../current/managed_postgresql/quickstart.md | 48 +- .../current/managedproducts_overview.md | 32 +- .../current/market_place_public.md | 8 +- .../current/marketplace/concepts.md | 52 +- .../current/marketplace/marketplace.md | 18 +- .../current/marketplace/quickstart.md | 68 +- .../marketplace/tutorials/contact_partner.md | 34 +- .../tutorials/customize_image_openiaas.md | 54 +- .../tutorials/customize_image_vmware.md | 54 +- .../marketplace/tutorials/deploy_openiaas.md | 24 +- .../marketplace/tutorials/deploy_vmware.md | 22 +- .../network/internet/advanced_concepts.md | 42 +- .../current/network/internet/concepts.md | 94 +- .../current/network/internet/internet.md | 20 +- .../current/network/network_overview.md | 12 +- memory-bank/core/documentationStatus.md | 28 +- oldies/translate.js | 753 ------ scripts/README.md | 92 +- scripts/extract_changelog.py | 69 + scripts/translate_py/translation-meta.json | 1726 ++++++------- 534 files changed, 32408 insertions(+), 29268 deletions(-) create mode 100644 docs/llmaas/batch.md create mode 100644 docs/llmaas/rerank.md create mode 100644 i18n/de/docusaurus-plugin-content-docs/current/llmaas/batch.md create mode 100644 i18n/de/docusaurus-plugin-content-docs/current/llmaas/rerank.md delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/images/archi_overview.png delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/images/archi_overview_1az.png delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/images/cillium.png delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/images/grafana.png delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/argocdguestbook.png delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/cillium.png delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/gapi.png delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/k10dashboard.png delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/k10infrabackups.png delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/k10s3location.png delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/nvidiasmi.png delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencost.png delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostgrafana.png delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp.png delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp2.png delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp3.png create mode 100644 i18n/en/docusaurus-plugin-content-docs/current/llmaas/batch.md create mode 100644 i18n/en/docusaurus-plugin-content-docs/current/llmaas/rerank.md delete mode 100644 i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/images/archi_overview.png delete mode 100644 i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/images/archi_overview_1az.png delete mode 100644 i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/images/cillium.png delete mode 100644 i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/images/grafana.png delete mode 100644 i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/argocdguestbook.png delete mode 100644 i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/cillium.png delete mode 100644 i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/gapi.png delete mode 100644 i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/k10dashboard.png delete mode 100644 i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/k10infrabackups.png delete mode 100644 i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/k10s3location.png delete mode 100644 i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/nvidiasmi.png delete mode 100644 i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencost.png delete mode 100644 i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostgrafana.png delete mode 100644 i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp.png delete mode 100644 i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp2.png delete mode 100644 i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp3.png delete mode 100644 i18n/en/docusaurus-plugin-content-docs/current/managed_mariadb/images/Distributed.png delete mode 100644 i18n/en/docusaurus-plugin-content-docs/current/managed_mariadb/images/StandAlone.png delete mode 100644 i18n/en/docusaurus-plugin-content-docs/current/managed_mariadb/images/stack.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/llmaas/batch.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/llmaas/rerank.md delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/images/archi_overview.png delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/images/archi_overview_1az.png delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/images/cillium.png delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/images/grafana.png delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/argocdguestbook.png delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/cillium.png delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/gapi.png delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/k10dashboard.png delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/k10infrabackups.png delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/k10s3location.png delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/nvidiasmi.png delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencost.png delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostgrafana.png delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp.png delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp2.png delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp3.png delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/managed_mariadb/images/Distributed.png delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/managed_mariadb/images/StandAlone.png delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/managed_mariadb/images/stack.png create mode 100644 i18n/it/docusaurus-plugin-content-docs/current/llmaas/batch.md create mode 100644 i18n/it/docusaurus-plugin-content-docs/current/llmaas/rerank.md delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/images/archi_overview.png delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/images/archi_overview_1az.png delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/images/cillium.png delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/images/grafana.png delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/argocdguestbook.png delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/cillium.png delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/gapi.png delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/k10dashboard.png delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/k10infrabackups.png delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/k10s3location.png delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/nvidiasmi.png delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencost.png delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostgrafana.png delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp.png delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp2.png delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp3.png delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/managed_mariadb/images/Distributed.png delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/managed_mariadb/images/StandAlone.png delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/managed_mariadb/images/stack.png delete mode 100755 oldies/translate.js diff --git a/README.md b/README.md index 2ae8cd36..76eda0cb 100644 --- a/README.md +++ b/README.md @@ -177,7 +177,7 @@ python scripts/generate_models_doc/generate_models_doc.py ## 🌍 Translation System -This documentation supports multiple languages. The primary content is written in French (in the `/docs/` directory) and automatically translated using an advanced Python system powered by the __Cloud Temple LLMaaS API__. +This documentation supports 5 languages: __French (source)__, English, German, Spanish, and Italian. The primary content is written in French (in the `/docs/` directory) and automatically translated using an advanced Python system powered by the __Cloud Temple LLMaaS API__. The system uses SHA-256 hashing to intelligently detect modified files, ensuring that only new or changed content is sent for translation. It features a modern command-line interface with real-time progress and detailed statistics. @@ -208,6 +208,39 @@ The system uses SHA-256 hashing to intelligently detect modified files, ensuring # Perform a dry run to see what would be translated python scripts/translate_py/translate.py --dry-run + + # Translate only one language + python scripts/translate_py/translate.py --lang=en + + # Force retranslation of all files + python scripts/translate_py/translate.py --force + + # Test API connection + python scripts/translate_py/translate.py --test-api ``` -> For a complete list of commands, advanced features (like `--force`, `--init`, `.notranslation` files), and troubleshooting, please see the detailed [__Translation Script Documentation__](./scripts/README.md#--translatetranslatepy-recommandé). +### How It Works + +The translation system tracks changes via SHA-256 hashes stored in `scripts/translate_py/translation-meta.json`: + +1. When you modify a file in `docs/`, its hash changes +2. `translate.py` detects the mismatch and sends only modified files to the LLMaaS API +3. After successful translation, the new hash is saved → file is marked as "up to date" + +### Important Rules + +> ⚠️ **Never edit files in `i18n/` manually.** Always modify the French source in `docs/` and run `translate.py`. Manual edits in `i18n/` will be overwritten on the next translation run. + +> 🖼️ **Image paths must use absolute Docusaurus paths.** Always reference images with `@site/docs//images/file.png` instead of relative paths (`./images/` or `../images/`). This ensures images resolve correctly in all languages without needing copies in `i18n/`. + +> 💡 **Excluding directories from translation:** Place a `.notranslation` file in any directory under `docs/` to force file **copying** instead of translation (useful for license files, code snippets, etc.). + +### Scripts Overview + +| Script | Purpose | Updates hash? | +|--------|---------|:---:| +| `scripts/translate_py/translate.py` | Main translation (FR → EN/DE/ES/IT via LLMaaS API) | ✅ | +| `scripts/extract_changelog.py` | Generate product changelog in all languages from `maj.js` | ✅ | +| `scripts/generate_models_doc/generate_models_doc.py` | Generate LLMaaS models doc (FR source only) | N/A (triggers retranslation) | + +> For a complete list of commands, advanced features, and troubleshooting, please see the detailed [__Scripts Documentation__](./scripts/README.md). diff --git a/docs/additional_content/concepts_regional.md b/docs/additional_content/concepts_regional.md index a441f84d..ef31b494 100644 --- a/docs/additional_content/concepts_regional.md +++ b/docs/additional_content/concepts_regional.md @@ -2,7 +2,7 @@ title: Concepts - Régions --- -import iaasAz001 from './images/iaas_az_001.png'; +import iaasAz001 from '@site/docs/additional_content/images/iaas_az_001.png'; ## Régions diff --git a/docs/bastion/concepts.md b/docs/bastion/concepts.md index 9e337f95..020886a8 100644 --- a/docs/bastion/concepts.md +++ b/docs/bastion/concepts.md @@ -1,7 +1,7 @@ --- title: Concepts --- -import bastion from './images/bastion.png' +import bastion from '@site/docs/bastion/images/bastion.png' ## C'est quoi le Bastion Cloud Temple ? diff --git a/docs/bastion/quickstart.md b/docs/bastion/quickstart.md index 4a5ec23d..8e95e6c2 100644 --- a/docs/bastion/quickstart.md +++ b/docs/bastion/quickstart.md @@ -1,12 +1,12 @@ --- title: Guide de démarrage --- -import shivaSupport from './images/shiva_support.png' -import creerSession from './images/creer_session.png' -import creerSession2 from './images/creer_session2.png' -import creerSession3 from './images/creer_session3.png' -import ouvrirSession from './images/ouvrir_session.png' -import ouvrirSession2 from './images/ouvrir_session2.png' +import shivaSupport from '@site/docs/bastion/images/shiva_support.png' +import creerSession from '@site/docs/bastion/images/creer_session.png' +import creerSession2 from '@site/docs/bastion/images/creer_session2.png' +import creerSession3 from '@site/docs/bastion/images/creer_session3.png' +import ouvrirSession from '@site/docs/bastion/images/ouvrir_session.png' +import ouvrirSession2 from '@site/docs/bastion/images/ouvrir_session2.png' Ce guide de démarrage vous présente comment demander la création d'une Appliance et comment enregistrer une nouvelle session et s'y connecter. diff --git a/docs/bastion/tutorials.md b/docs/bastion/tutorials.md index c252bd87..91c15d85 100644 --- a/docs/bastion/tutorials.md +++ b/docs/bastion/tutorials.md @@ -1,18 +1,18 @@ --- title: Tutoriels --- -import sessions from './images/sessions.png' -import sessions2 from './images/sessions2.png' -import appliances from './images/appliances.png' -import ouvrirAppliance from './images/ouvrir_appliance.png' -import creerSession from './images/creer_session.png' -import creerSession2 from './images/creer_session2.png' -import creerSession3 from './images/creer_session3.png' -import ouvrirSession from './images/ouvrir_session.png' -import ouvrirSession2 from './images/ouvrir_session2.png' -import modifierSession from './images/modifier_session.png' -import modifierSession2 from './images/modifier_session2.png' -import supprimerSession from './images/supprimer_session.png' +import sessions from '@site/docs/bastion/images/sessions.png' +import sessions2 from '@site/docs/bastion/images/sessions2.png' +import appliances from '@site/docs/bastion/images/appliances.png' +import ouvrirAppliance from '@site/docs/bastion/images/ouvrir_appliance.png' +import creerSession from '@site/docs/bastion/images/creer_session.png' +import creerSession2 from '@site/docs/bastion/images/creer_session2.png' +import creerSession3 from '@site/docs/bastion/images/creer_session3.png' +import ouvrirSession from '@site/docs/bastion/images/ouvrir_session.png' +import ouvrirSession2 from '@site/docs/bastion/images/ouvrir_session2.png' +import modifierSession from '@site/docs/bastion/images/modifier_session.png' +import modifierSession2 from '@site/docs/bastion/images/modifier_session2.png' +import supprimerSession from '@site/docs/bastion/images/supprimer_session.png' Ces tutoriels vous aident à déployer et gérer un Bastion Cloud Temple depuis la Console. diff --git a/docs/changelog_produits.md b/docs/changelog_produits.md index 5677a23f..c0f630c9 100644 --- a/docs/changelog_produits.md +++ b/docs/changelog_produits.md @@ -651,2198 +651,8 @@ sidebar_position: 999 - Nouveau design de la Console - Refonte des pages infrastructure et sauvegarde -## v3.37.5 — 2024-10-02 - -### [Commandes](/console/orders) -- Modification du message d'avertissement lors de la demande de suppression d'un cluster - -### [Identité & Accès (IAM)](/console/iam/iam) -- Suppression des boutons "Selectionner mes permissions" et "Tout déselectionner" lors de l'édition d'un propriétaire du tenant - -## v3.37.4 — 2024-09-30 - -### [Commandes](/console/orders) -- Ajout de confirmation par nom lors de la demande de suppression de ressources infrastructure - -### [Identité & Accès (IAM)](/console/iam/iam) -- Les modifications des permissions d'un propriétaire du tenant est désactivé - -## v3.37.2 — 2024-09-16 - -### [Identité & Accès (IAM)](/console/iam/iam) -- Amélioration des messages concernant le fonctionnement des propriétaires d'un tenant - -### [Console](/console/console) -- Ajout d'une redirection de la route /support vers /administration/support afin de corriger les redirections des tickets support depuis un mail - -## v3.37.0 — 2024-09-02 - -### [Réseau](/network/network_overview) -- Possibilité de commander des IPs publiques depuis la page internet du menu réseau - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Ajout d'un avertissement lors de la mise en maintenance d'un datastore s'il contient des bibliothèques de contenu - -### [Identité & Accès (IAM)](/console/iam/iam) -- Affichage des propriétaire d'un tenant -- Possibilité pour un propriétaire de déclarer un utilisateur comme également propriétaire du tenant - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout d'un avertissement lors de la suppression d'un iso d'une bibliothèque de contenu lorsqu'il est monté dans une machine virtuelle - -## v3.36.0 — 2024-07-24 - -### [Commandes](/console/orders) -- Possibilité de commander le provisionnement d'un cluster d'hyperviseur -- Possibilité de commander la suppression d'un cluster d'hyperviseur -- Possibilité de commander le provisionnement d'un cluster de stockage -- Possibilité de commander la suppression d'un cluster de stockage - -### [Console](/console/console) -- Ajout d'une page listant les IPs publiques et les subnets autorisés à accéder à la console (nouvelle permission nécessaire) -- Possibilité d'ajouter une IPs à la liste autorisée à accéder à la console (nouvelle permission nécessaire) - -## v3.35.2 — 2024-07-23 - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout de vérifications et messages lors de la restauration d'une sauvegarde - -## v3.35.0 — 2024-07-15 - -### [Commandes](/console/orders) -- Nouvelle page permettant d'afficher le rapport des consommations Cloud sur des intervalles de dates données -- Les 2 datastores par défaut ne peuvent pas être de type MASS à la création d'une AZ -- Ajout des commandes de calcul sur le formulaire de la page listant les commandes - -### [Bastion](/bastion/bastion) -- Ajout d'une permission spécifique pour l'accès à la console d'une appliance - -### [Réseau](/network/network_overview) -- Mise à jour des types de networks autorisés à être propagés -- Possibilité de passer plusieurs networks sur la même actions de création de réseaux -- Ajout d'une colonne indiquant la propagation d'un réseau -- Possibilité de réactiver un réseaux supprimé - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité d'éditer la description d'une snapshot -- Ajout d'un champ pour les fichiers de configuration lors du déplacement d'une machine virtuelle - -## v3.34.0 — 2024-06-25 - -### [Console](/console/console) -- Mise à jour de la récupération et affichage des incidents généralisés ou liés au tenant - -## v3.33.0 — 2024-06-06 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité d'ajouter et supprimer des vApp properties depuis les options avancées d'une machine virtuelle -- La recherche sur les tasks Vmware est maintenant également appliquée à la colonne "cible" - -### [Stockage](/storage/oss/oss) -- Possibilité de générer une URL afin de partager un fichier depuis la page d'un bucket - -### [Console](/console/console) -- La page des incidents terminés affiche désormais les incidents les plus récents en premier - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout de colonnes dernière execution et prochaine execution sur les jobs de sauvegardes -- Ajout d'une validation empechant l'assignation de politique en statut HELD -- Possibilité d'attribuer un nouveau nom à la restauration d'une sauvegarde de machine virtuelle - -## v3.32.0 — 2024-05-24 - -### [Commandes](/console/orders) -- Possibilité de commander le provisionnement d'une nouvelle AZ -- Ajout d'une limitation à 20 réseaux maximum par propagation -- Ajout d'une redirection sur les bulles d'informations indiquant qu'une commande est deja en cours - -### [Réseau](/network/network_overview) -- Ajout d'une validation sur le nom lors de la création d'un nouveau réseau virtuel - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité d'ajouter une clé extra config "disk.EnableUUID" depuis les options avancées d'une machine virtuelle -- Possibilité de modifier un contrôleur SCSI sur une machine virtuelle éteinte -- Possibilité de renommer un élément du catalogue de modèle local -- Possibilité de modifier le contrôleur d'un disque virtuel - -### [Console](/console/console) -- Gestion de l'affichage des pages VMware lorsqu'aucun environnement n'est provisionné - -### [Stockage](/storage/oss/oss) -- Affichage des intervalles d'IPs autorisés sur un bucket en accès privé ou personnalisé -- Possibilité de synchroniser les intervalles d'IPs autorisés sur un bucket avec les intervalles d'IPs internet publiques du tenant - -## v3.31.0 — 2024-04-16 - -### [Console](/console/console) -- Ajout des incidents avec le statut "investigation" ou "identifié" à la liste des incidents ouverts - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout de l'option "provisionnement fin" lors d'une migration de stockage d'une machine virtuelle - -### [Console — Notifications](/console/console) -- Initialisation du nouveau module notification -- Possibilité de lister et s'abonner à des sujets depuis la page profil - -### [Stockage](/storage/oss/oss) -- Ajout du type d'accès lors de la création d'un bucket -- Possibilité de modifier l'accès d'un bucket depuis les paramètres du bucket - -## v3.30.0 — 2024-04-04 - -### [Console](/console/console) -- Ajout de l'affichage des incidents ouverts depuis la barre de navigation -- Ajout d'une page de tous les incidents ouverts et terminées - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout d'une validation sur les caractères autorisés dans le nom des fichiers envoyés lors de l'upload dans un catalogue - -### [Stockage](/storage/oss/oss) -- Désactivation temporaire de la possibilité d'upload dans un bucket depuis l'application - -## v3.29.0 — 2024-03-27 - -### [Commandes](/console/orders) -- Mise à jour du formulaire pour la demande d'ajout de datastore et l'augmentation de la taille d'un datastore - -### [Réseau](/network/network_overview) -- Affichage du nombre d'adresses disponnibles pour chaque préfix depuis la page Internet - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Mise à jour et explication du fonctionnement des règles affinité/anti-affinité sur un cluster de calcul - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Mise à jour des options par défaut lors de la prise de snapshot sur une machine virtuelle -- Suppression de la recherche provoquant des erreurs et ralentissements lors de l'exploration d'un datastore - -## v3.28.0 — 2024-03-21 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité de choisir un contrôleur NVME lors de la création d'un disque -- Possibilité d'activer ou désactiver les options vApp depuis les options avancées d'une machine virtuelle -- Mise à jour de l'affichage des types de disques disponibles lors de la création - -### [Réseau](/network/network_overview) -- Refonte du menu IPs publiques en un menu Internet - -## v3.27.0 — 2024-03-08 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout d'alertes concernant les modes de disques non pris en compte lors de la sauvegarde - -## v3.26.0 — 2024-03-06 - -### [PaaS OpenShift](/paas_openshift/paas_openshift) -- Nouveau module supportant le produit Openshift - -## v3.25.0 — 2024-03-05 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Mise à jour de l'affichage des modes de disques disponibles lors de la création - -## v3.24.0 — 2024-03-04 - -### [Console](/console/console) -- Lors de certaines actions sur certaines ressource, il est désormais possible d'accéder cette ressource depuis la notification de succés -- Les tokens utilisés sur les swaggers sont désormais automatiquement renouvelés, il n'est plus necessaire de raffraichir la page - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité d'ajouter des contrôleurs NVME sur une machine virtuelle - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Possibilité de faire une mise à jour de configuration sur un ESX (mise à jour n'ayant pas d'impact sur la version du build) - -### [Réseau](/network/network_overview) -- Possibilité de demander la suppression d'une propagation d'un réseau virtuel - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Possibilité de supprimer une politique de sauvegarde sur une machine virtuelle eteinte, même lorsque cette politique est la dernière assignée - -### [Stockage](/storage/oss/oss) -- Possibilité d'explorer et télécharger des fichiers dans un bucket - -## v3.23.0 — 2024-02-15 - -### [Stockage](/storage/oss/oss) -- Ajout des menus Stockage et Stockage Object -- Ajout d'une page listant et permettant des actions sur les buckets et comptes de stockage -- Ajout d'une page sur les details d'un bucket listant la configuration et les comptes de stockage associés - -## v3.22.0 — 2024-02-14 - -### [Console — Activités](/console/console) -- Optimisation de la récupération des activités avec une pagination sur les appels API - -## v3.21.0 — 2024-02-05 - -### [Console](/console/console) -- Amélioration des messages d'erreurs pas assez explicites - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité de choisir un stockage différent par disque lors de l'ajout de plusieurs disques à la fois - -### [Commandes](/console/orders) -- Gestion de l'affichage des actions pour réaliser des commandes disponibles uniquement en environnement SNC - -## v3.20.0 — 2024-01-31 - -### [Console — Activités](/console/console) -- Depuis la page des logs, l'affichage des activités est désormais mis à jour en direct -- Depuis la page des logs, la barre de progression est désormais affichée sur les activités en cours - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité d'exporter une machine virtuelle au format OVF vers un catalogue local -- Possibilité de réserver de la RAM sur une machine virtuelle - -## v3.19.0 — 2024-01-10 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Les datastores et hosts en cours de provisionnement sont désormais bloqués lors des différentes sélections -- Ajout de l'option virtualisation matérielle et possibilité de le modifier - -### [Console](/console/console) -- Ajout d'options lors de l'exportation csv - -### [Console — Activités](/console/console) -- Ajout d'un filtre auteur sur la page des logs - -### [Commandes](/console/orders) -- Ajout d'une page pour les détails d'une commande -- Possibilité de visualiser et ajouter des commentaires lorsqu'un ticket est lié à une commande -- Possibilité de visualiser la propagation d'un réseau actif de type VLAN -- Possibilité de propager un réseau actif de type VLAN -- Possibilité de propager un réseau dès sa création - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Suppression de la page infrastructure dvswitch remplacée par un tableau de réseaux dans la page d'un hostCluster -- Affichage des alarmes pour les hosts et vcenters - -## v3.18.1 — 2023-12-15 - -### [Commandes](/console/orders) -- Le tri par défaut sur la page des commandes a été remplacé par la date de la dernière mise à jour -- Ajout d'une limitation sur la taille minimum lors d'une demande d'augmentation de datastore - -## v3.18.0 — 2023-12-15 - -### [Identité & Accès (IAM)](/console/iam/iam) -- Mise à jour des noms de certaines permissions et création de nouvelles permissions -- Regroupement de l'affichage des permissions par produits - -### [Hébergement physique (Housing)](/housing/housing) -- Mise à jour des appels API Hosting vers la nouvelles API Colocation - -### [Réseau](/network/network_overview) -- Mise à jour des appels API Hosting vers la nouvelles API Réseaux - -### [Commandes](/console/orders) -- Ajout d'une page listant les commandes -- Possibilité de commander de l'ajout de mémoire sur un host cluster -- Possibilité de commander un nouvel host sur un host cluster -- Possibilité de commander l'ajout de capacité de stockage sur un datastore -- Possibilité de commander un nouveau datastore sur un datastore cluster -- Possibilité de commander le déprovisionnement d'un datastore - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout d'un filtre par statut sur les sessions d'un job - -### [Console](/console/console) -- Les interventions terminées sont désormais triées par défaut du plus récent au plus vieux -- Possibilité de choisir son tenant favoris qui sera utilisé par défaut lors de la connexion à l'application sans direct URL - -## v3.17.4 — 2023-11-07 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout d'informations dans la popup de confirmation de suppression d'un disque - -## v3.17.2 — 2023-10-16 - -### [Métriques](/console/metrics/concepts) -- Ajout du nom du vCenter dans la route pour la santé d'une machine virtuelle - -## v3.17.0 — 2023-10-10 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout de l'option "auto-connexion" à la création d'un adaptateur réseau - -### [Métriques](/console/metrics/concepts) -- Mise à jour de la page de santé des machines virtuelles - -### [Console](/console/console) -- Les interventions terminées sont désormais triées par défaut du plus récent au plus vieux - -### [Réseau](/network/network_overview) -- Ajout d'une page concernant les réseaux virtuels et la possibilité de les partager entre tenants de l'organisation - -## v3.16.2 — 2023-09-11 - -### [Console](/console/console) -- Mises à jour de certains menus dans la barre latérale - -## v3.16.1 — 2023-09-11 - -### [Bastion](/bastion/bastion) -- La description est maintenant optionnelle sur un équipement - -## v3.16 — 2023-09-11 - -### [Console](/console/console) -- Mise à jour du menu latéral -- Ajout d'une page profil utilisateur -- Ajout d'une documentation concernant la confidentialité - -### [Bastion](/bastion/bastion) -- Intégration de la nouvelle version du module Bastion - -## v3.15 — 2023-08-30 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout de la liste des proprétés vApp d'une machine virtuelle depuis les options avancées -- Optimisation de la création d'un disque en remplissant les champs par défaut -- Optimisation de la création d'une machine virtuelle en remplissant certains champs par défaut - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout d'un suivi des activités liées aux jobs de sauvegarde - -## v3.14 — 2023-08-02 - -### [Console](/console/console) -- Tri par défaut de la liste des hosts et datastores par ordre alphabétique -- Appuyer sur "Entrée" au niveau d'un formulaire ne lance plus le rechargement de la page -- Amélioration des modals à étapes multiples - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Amélioration de l'affichage du résumé à la création de disques -- Ajout du choix des adaptateurs réseau lors du clone d'une machine virtuelle -- Lors de la création d'une machine virtuelle, les champs ne se mettent plus en erreur par défaut après avoir ajouté un disque, un contrôleur ou un adaptateur réseaux -- Modification du champ CPU à la création d'une machine virtuelle n'étant pas exploitable lorsqu'un trop gros nombre de valeurs étaient disponibles - -## v3.13 — 2023-07-18 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout de la taille des fichiers présents dans le catalogue local - -### [Console](/console/console) -- La liste des demandes de support est désormais accessible depuis la bouée située dans la navbar -- Les notes de mises à jour par modules sont désormais disponible depuis la page des swaggers - -### [Métriques](/console/metrics/concepts) -- Le filtre date de la page santé des machines virtuelles prend désormais en compte les heures et minutes - -### [Console — Activités](/console/console) -- Il est désormais possibe de lister les logs en lecture, le filtre par défaut n'affiche que les logs ecriture - -## v3.12.1 — 2023-06-23 - -### [Console](/console/console) -- Amélioration de l'affichage des interventions - -## v3.12 — 2023-06-21 - -### [Console](/console/console) -- Ajout de l'affichage des interventions en cours, planifiées et terminées - -## v3.11.3 — 2023-06-19 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Affichage d'un message d'erreur lorsqu'un fichier dépassant la limite autorisée est ajouté lors de la publication dans un catalogue - -## v3.11 — 2023-06-12 - -### [Console](/console/console) -- Possibilité d'ajouter des observateurs supplémentaires à la création d'un ticket support - -### [Métriques](/console/metrics/concepts) -- Ajout de l'historique des données de santé d'une machine virtuelle -- Ajout d'une légende sur les colonnes de la page santé des machines virtuelles - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout du nom du vcenter devant les clusters lors de la restauration d'une machine virtuelle -- Ajout d'un bandeau d'alerte sur une machine virtuelle lorsqu'elle n'est pas inventoriée sur SPP -- Possibilité de lancer l'inventaire SPP depuis les onglets politique et sauvegardes d'une machine virtuelle qui n'est pas encore inventoriée - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité de démarrer une machine virtuelle en sppMode test - -## v3.10 — 2023-06-06 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Intégration des fonctionnalités pour piloter un Esxi Standalone - -### [Console](/console/console) -- Amélioration de l'affichage des demandes de support - -## v3.9 — 2023-05-23 - -### Maintenance & Opérations -- Possibilité de visualiser les graphiques d'un service depuis la page d'un équipement -- Amélioration de l'affichage des graphiques d'un service - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Possibilité de parcourir les fichiers d'un datastore -- Amélioration du chargement de la page d'un ESX - -### [Console](/console/console) -- Possibilité de fermer un ticket support -- Optimisation du projet - -## v3.8 — 2023-04-04 - -### [Console](/console/console) -- Amélioration de l'affichage des thématique lors de la création d'un ticket support -- Ajout de filtres sur la page des tickets support -- Optimisation de l'utilisation des retours websockets -- Amélioration de la récupération des fonts et icônes - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout de l'étape de configuration du réseaux lors du déploiement d'une machine virtuelle depuis un modèle de VM ou un OVF -- Ajout de filtres sur la page "Catalogues" -- Modification de la mise à jour de la version materiel d'une machine virtuelle - -### [Métriques](/console/metrics/concepts) -- Ajout d'une page "Santé" pour les machines virtuelles -- Ajout de la consommation électrique globale des ESX sur le tableau de bord - -## v3.7 — 2023-03-16 - -### Documentation -- Ajout d'un fil d'arianne sur les pages de la partie documentation - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout de l'option secure boot dans les options avancées du démarrage d'une machine virtuelle -- Amélioration de l'ajout de disques sur une machine virtuelle en permettant l'ajout multiple en une seule action -- Ajout d'une étape supplémentaire pour le choix d'un OS lors de la création d'une machine virtuelle -- Ajout d'un filtre par hostCluster sur la liste des machines virtuelles - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout d'une colonne indiquant les types d'une politique de sauvegardes -- Amélioration des messages affichés à l'utilisateur sur les actions concernant les politiques de sauvegarde d'une machine virtuelle - -## v3.6.3 — 2023-03-08 - -### [Console](/console/console) -- Affichage des tickets modifiés les plus récemment par défaut sur les demandes de support - -## v3.6.2 — 2023-03-07 - -### [Console](/console/console) -- Optimisation de la configuration du projet - -## v3.6 — 2023-02-27 - -### [Identité & Accès (IAM)](/console/iam/iam) -- Lorsque l'utilisateur ne possède pas le droit 'iam_manage_permissions' ne pas bloquer l'ouverture de la pop-up mais uniquement l'édition - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Lors de l'upload, possibilité d'ajouter des fichiers avec des extensions en majuscule - -### [Bastion](/bastion/bastion) -- Remplacement du titre d'un onglet de session bastion par le nom de la session - -## v3.5.2 — 2023-02-07 - -### [Bastion](/bastion/bastion) -- Amélioration du temps d'affichage d'une session bastion - -## v3.5.1 — 2023-02-07 - -### [Console — Activités](/console/console) -- La récupération des activités en cours au rechargement de la page est temporairement désactivée - -## v3.5 — 2023-02-03 - -### [Tickets de support](/console/console) -- Ajout de la colonne référence client sur la liste des tickets - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout d'un onglet dans la page de rapport de sauvegarde de la liste non groupée des rapports - -### [Identité & Accès (IAM)](/console/iam/iam) -- Possibilité de mettre à jour son profil utilisateur d'un compte local - -## v3.4.3 — 2023-02-07 - -### [Bastion](/bastion/bastion) -- Amélioration du temps d'affichage d'une session bastion - -## v3.4.2 — 2023-02-07 - -### [Console — Activités](/console/console) -- La récupération des activités en cours au rechargement de la page est temporairement désactivée - -## v3.4 — 2023-01-30 - -### [Console](/console/console) -- Les fonctionnalités nécessitant un rôle non possédé ne sont plus affichées - -### Maintenance & Opérations -- Ajout d'un champ de recherche par nom sur la liste des équipements - -## v3.3.1 — 2023-01-19 - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Affichage d'un avertissement lors de l'ajout d'une politique désactivée à une machine virtuelle - -## v3.3 — 2023-01-18 - -### [Console](/console/console) -- Refonte de l'affichage des notifications - -## v3.2.1 — 2023-01-11 - -### Maintenance & Opérations -- Optimisation de la récupération des informations sur la liste des services - -## v3.2 — 2023-01-05 - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Mise à jour des statuts des ESXs et Datastores - -## v3.1 — 2022-12-21 - -### [Métriques](/console/metrics/concepts) -- Ajout d'un nouvel onglet dans le dashboard pour la consommation électrique et l'émission de CO2 des ESX -- Ajout d'un graphique de consommation électrique sur les détails d'un ESX sur une période donnée -- Ajout de l'émission de carbone d'un ESX sur une période donnée - -## v3.0 — 2022-12-14 - -### [Console](/console/console) -- Refonte du style et de l'ergonomie globale de l'interface -- Refonte de la page d’accueil de l'application -- Nouveau fonctionnement et affichage des filtres -- Nouveau fonctionnement et affichage des vues enregistrées sur les services supervisés et les tickets -- Ajout d'un filtre "non assigné" sur la liste des tickets -- Nouveau fonctionnement du suivi des activités en cours -- Séparation en onglets du tableau de bord -- Affichage des APIs et PAT dans une page dédiée - -## v2.38 — 2022-12-06 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Intégration des appels API VRM (Virtual Machine Replication) sur la page réplication et les details d'une machine virtuelle - -### [Console](/console/console) -- La FAQ est désormais redirigée vers la nouvelle documentation - -## v2.37 — 2022-11-24 - -### Maintenance & Opérations -- Mise à jour des graphiques de performances sur les services supervisés - -## v2.36 — 2022-11-02 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout de notifications lorsqu'une seule partie des vcenters ne répondent -- Ajout d'une validation sur le nom lors de la publication d'un fichier dans un catalogue - -### [Console](/console/console) -- Possibilité de consulter les demandes de support - -## v2.35 — 2022-10-18 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Lors de la selection d'une ressource de calcul ou de stockage, les ressources indisponibles ne peuvent pas etre séléctionnées - -### Maintenance & Opérations -- Possibilité d'ajouter des arrêts planifiés depuis la liste des équipements - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout de l'option 'Streaming' lors d'une restauration de sauvegarde pour améliorer le temps d'execution - -## v2.34 — 2022-10-12 - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Les politiques de sauvegardes désactivées ne sont plus assignable à un machine virtuelle excépté la politique 'nobackup' - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Refonte de la page Bibliothèque de contenu qui devient la page Catalogues -- Possibilité de publier un ISO ou les fichiers d'un OVF dans "Mon catalogue" -- Possibilité de cloner vers "Mon catalogue" un modèle depuis un "Catalogue publique" - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Possibilité de lister, ajouter et supprimer une bibliothèque de contenu depuis la page d'un vcenter dans la partie Infrastructure - -## v2.33.1 — 2022-10-12 - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Mise à jour des actions de sauvegardes disponibles depuis un tenant SecNumCloud - -## v2.33 — 2022-09-23 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité de synchroniser un élément d'une content librairie 'Subscribed' - -### [Console](/console/console) -- Mise à jour du fonctionnement des demandes de support - -## v2.32.3 — 2022-09-01 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Bug d'affichage sur la configuration des adaptateurs réseaux d'une machine virtuelle - -## v2.32 — 2022-08-30 - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Ajout d'une fonctionnalité permettant de demander une mise à jour d'un ESX. - -## v2.31 — 2022-08-29 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité d'activer la mise à jour des VMware tools au prochain redémarrage de la machine virtuelle -- Ajout des règles affinité et anti-affinité sur les details d'une machine virtuelle - -### [Console](/console/console) -- Ajout d'une validation sur la création d'un Personal Access Token limitant l'expiration à maximum 1 an - -## v2.30 — 2022-08-23 - -### [Console](/console/console) -- Optimisation des performances en annulant les appels API en cours lors du changement de page - -## v2.29.3 — 2022-08-23 - -### [Bastion](/bastion/bastion) -- Amélioration de la sécurité concernant l'ouverture d'une session Bastion - -## v2.29 — 2022-08-04 - -### [Console](/console/console) -- Amélioration de l'affichage pour une demande de support - -### [Tickets de support](/console/console) -- Ajout d'un filtre 'En escalade' sur la liste des tickets -- Possibilité de choisir la règle de filtrage 'ET' ou 'OU' à appliquer entre les différents filtres sur la liste des tickets -- Suppression de l'option pour modifier un ticket lorsque celui-ci est fermé - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout d'options avancées au démarrage d'une machine virtuelle - -## v2.28.1 — 2022-08-01 - -### [Identité & Accès (IAM)](/console/iam/iam) -- Désactivation temporaire de la fonctionnalité de mise à jour d'une adresse email - -### [Console](/console/console) -- Retrait des details techniques du champs description dans la partie demande de support - -## v2.28 — 2022-07-22 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout d'une alerte sur les informations d'une machine virtuelle lorsque la mémoire est gonflée -- Informations sur la taille restante necessaire sur le datastore lors de l'upload d'un ISO -- Ajout du bouton pour ouvrir une console directement dans la colonne actions d'une machine virtuelle - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Ajout de la version des VMware tools sur les details d'un ESX - -### [Console](/console/console) -- Refonte de la partie demande de support - -## v2.27 — 2022-07-06 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Mise à jour de l'interface pour suivre les transferts de fichiers -- Possibilité de n'exporter que les machines virtuelles filtrées lors de l'export CSV -- Ajout d'un tableau listant les fichiers ISO - -## v2.26.4 — 2022-07-04 - -### Maintenance & Opérations -- Lors du choix de l'intervalle de date personnalisé sur les graphiques de supervision, l'heure est à 00:00 par défaut - -## v2.26.1 — 2022-06-27 - -### Maintenance & Opérations -- Mise à jour des graphiques de performance sur certains services monitorés - -## v2.26 — 2022-06-23 - -### Inventaire -- Intégration de la nouvelle API Inventory - -### [Console](/console/console) -- Modification de l'affichage des changements d'API dans les informations de mises à jour -- Ajout d'un logo SecNumCloud devant les tenant SecNumCloud dans la barre latérale -- Les données dynamiques de la partie infrastructure dans la barre latérale sont désormais triés par ordre alphabétique - -### Maintenance & Opérations -- Mise à jour de l'affichage des details d'un arrêt planifié - -### [Hébergement physique (Housing)](/housing/housing) -- Ajout du champ référence sur la page des circuits telecom - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Possibilité de déclarer des règles d'affinité et anti-affinité entre des machines virtuelles depuis un hostCLuster - -### Étiquettes -- Optimisation du temps de récupération des tags sur la liste des machines virtuelles - -## v2.25.1 — 2022-06-10 - -### [Console](/console/console) -- Ajout de contraintes pour un tenant SNC - -## v2.25 — 2022-06-07 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité de copier les paramètres avancés d'une machine virtuelle dans le presse-papier -- Possibilité d'ajouter la somme de la taille des disques dans l'export csv des machines virtuelles - -### Maintenance & Opérations -- Possibilité d'ajouter et consulter les arrêts planifiés de supervision depuis la liste des services -- Ajout d'une page listant les arrêts planifiés de supervision - -## v2.24 — 2022-05-10 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Affichage d'indicateur d'alarmes de type danger et critique sur la liste des machines virtuelles -- Ajout de l'information lors du déploiement d'une machine virtuelle depuis un modèle -- Afficher la liste et les details des alertes sur une machine virtuelle -- Mise à jour du filtre des OS pour ne proposer que les OS utilisés - -### [Console](/console/console) -- Mise à jour de l'affichage des versions de mises à jour -- Affichage des changements API sur les notes de mises à jour - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Mise à jour de l'affichage de la mémoire d'un hostCluster et ajout d'une alerte sur la mémoire gonflée - -### Maintenance & Opérations -- Ajout de graphiques de performance sur certains services monitorés - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Lors de l'assignation d'une politique de sauvegarde, ne pas afficher les politiques désactivées - -## v2.23 — 2022-04-28 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout d'un champ de recherche sur les filtres OS et vlans sur la liste des machines virtuelles -- Optimisation de la récupération des réseaux - -## v2.22 — 2022-04-26 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Optimisation de la récupération des réseaux -- Ajout du filtre par OS sur la liste des machines virtuelles -- Ajout d'un champ de recherche sur les arborescences contenant beaucoup de données - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout de la date à laquelle les données on été récupérées concernant les erreurs sur les dernières sauvegardes -- Affichage des informations de la machine virtuelle lors de la restauration d'un disque ou d'une machine virtuelle -- Optimisation de la récupération des travaux par politiques de sauvegardes sur le tableau de bord - -### [Tickets de support](/console/console) -- Ajout d'une confirmation pour annuler la création d'un ticket - -## v2.21 — 2022-04-12 - -### Maintenance & Opérations -- Ajout des notifications liées à un service - -### [Tickets de support](/console/console) -- Possibilité d'ajouter des observateurs à la création avancée d'un ticket - -### [Console](/console/console) -- Mise à jour des rôles dans la FAQ -- Mise à jour de la réinitialisation des formulaires à l'ouverture d'une modal - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Mise à jour de l'affichage des VMware tools en fonction de leur provenance -- Mise à jour de l'affichage des vm-template et des options pour les déployer -- Possibilité de forcer l'accès au BIOS au démarrage d'une machine virtuelle - -### [Identité & Accès (IAM)](/console/iam/iam) -- Possibilité de réinscrire un utilisateur - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Optimisation de la récupération des rapports de sauvegarde - -## v2.20 — 2022-03-30 - -### [Bastion](/bastion/bastion) -- Possibilité de supprimer une session -- Possibilité de consulter les activités liées à une session - -## v2.19 — 2022-03-29 - -### [Tickets de support](/console/console) -- Ajout d'une option pour afficher la description et les commentaires en texte brut sans interpréation HTML -- Possibilité de passer un ticket en attente client vers ouvert planifié à la création d'un commentaire - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité de changer le type d'assignation d'une adresse MAC d'un adaptateur réseaux - -### [Bastion](/bastion/bastion) -- Ajout de sessions de connexion bastion - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Possibilité d'afficher les graphiques des travaux par politiques de sauvegarde sur 7 jours et 30 jours en plus de 24h et 48h - -## v2.18 — 2022-03-21 - -### [Tickets de support](/console/console) -- Mises à jour des routes pour télécharger et importer des fichiers sur des tickets - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Ré-intégration des appels API Scup concernant les informations de mises à jour des ESXs - -### Étiquettes -- Ajout du module TAG -- Possibilité d'ajouter et supprimer des tags sur plusieurs machines virtuelles à la fois -- Possibilité d'afficher et supprimer des tags sur une machines virtuelle -- Possibilité de filtrer les machines virtuelles en fonction des tags - -## v2.17.3 — 2022-03-16 - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Désactivation de l'edition du statut Host DRS provoquant des erreurs VMware - -## v2.17.2 — 2022-03-15 - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Désactivation de l'edition du statut SDRS provoquant des erreurs VMware - -## v2.17 — 2022-03-03 - -### [Tickets de support](/console/console) -- Possibilité de supprimer un fichier sur un ticket - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Amélioration de la modal d'édition d'un disque - -### [Bastion](/bastion/bastion) -- Ajout de traduction et modification d'interface sur la partie Bastion - -## v2.16 — 2022-02-28 - -### [Bastion](/bastion/bastion) -- Possibilité d'éditer la description d'une appliance bastion - -### [Tickets de support](/console/console) -- Amélioration sur le detail d'un ticket en permettant l'édition meme si des données mettent du temps à charger - -## v2.15 — 2022-02-17 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Mettre en chargement une machine virtuelle lors de la prise d'une snapshot -- Modification de la migration Vmotion lors de la selection "Migrer uniquement les ressources de calcul" -- Modification de la colonne "Manager" sur la liste des machines virtuelles - -### [Console](/console/console) -- Possibilité de faire un clic droit sur les boutons de redirection pour ouvrir la page dans un nouvel onglet - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout d'informations lors d'une restauration de sauvegarde - -### [Bastion](/bastion/bastion) -- Ajout du choix ssh/rdp - -## v2.14.1 — 2022-02-10 - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Désactivation temporaire de l'affichage des mises à jour disponibles pour un ESX - -## v2.14 — 2022-02-03 - -### [Identité & Accès (IAM)](/console/iam/iam) -- Mise à jour du fonctionnement du module IAM - -## v2.13 — 2022-02-01 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajouter le nom des dvswitch sur la liste des vlans proposés -- Ajout d'un champ de recherche sur l'exploration d'un datastore -- Possibilité de voir les activités Shiva liées depuis la machine virtuelle - -### Documentation -- Possibilité de faire une recherche de page sur la partie Documentation - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Mise à jour des libéllés pour entrer et sortir un ESX de maintenance - -## v2.12 — 2022-01-26 - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Mise à jour des informations de sauvegarde sur le tableau de bord -- Ajout de la liste des derniéres sauvegardes de machine virtuelle en échec sur la page des rapports de sauvegardes - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité de choisir un host cluster ou un nouveau datacenter lors de l'export d'une machine virtuelle en tant que template -- Possibilité de choisir un contrôleur IDE lors de la création d'un disque virtuel - -### [Tickets de support](/console/console) -- Ajout d'un filtre centre de compétence sur la liste des tickets -- Ajout d'une colonne appelant sur la liste des tickets - -### [Identité & Accès (IAM)](/console/iam/iam) -- Ajout de la réinitialisation d'adresse mail pour un utilisateur local - -## v2.11 — 2022-01-21 - -### [Bastion](/bastion/bastion) -- Ajout du module Bastion - -### [Console](/console/console) -- Ajout des swaggers Bastion et Scup - -## v2.10 — 2022-01-20 - -### [Identité & Accès (IAM)](/console/iam/iam) -- Amélioration de l'experience SSO - -## v2.9 — 2022-01-17 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout d'une alerte sur les machines virtuelles en statut "invalid" -- Ajout d'alertes (consolidation requise, esx indisponible, machine virtuelle en statut "invalid") au dessus du tableau des machines virtuelles - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout d'une barre de recherche sur la liste des machines virtuelles d'une politique de sauvegarde - -## v2.8 — 2022-01-06 - -### [Console](/console/console) -- Refonte de la composition des urls Shiva - -## v2.7 — 2022-01-05 - -### [Identité & Accès (IAM)](/console/iam/iam) -- Suivi de l'activité et synchronisation de l'affichage lors de la suppression d'un utilisateur - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajouter le nombre de machines virtuelles concernées sur un rapport de sauvegardes - -## v2.6 — 2022-01-04 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Mise à jour de l'outil controlant la console d'une machine virtuelle - -## v2.5 — 2022-01-03 - -### [Tickets de support](/console/console) -- Ajout de validation sur le titre d'un ticket lors de son édition - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Modification de l'affichage des informations de sauvegarde sur le tableau de bord -- Ajout de précision sur la fréquence des politiques de sauvegarde - -### [Identité & Accès (IAM)](/console/iam/iam) -- Ajout d'un filtre pour les utilisateurs vérifiés ou non - -## v2.4.8 — 2021-12-24 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Suppression de l'édition des paramètres avancés - -## v2.4.6 — 2021-12-21 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Lors de l'actualisation des données d'une machine virtuelle, ne pas changer d'onglet sur la machine virtuelle - -## v2.4.5 — 2021-12-17 - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Amélioration de la vitesse de chargement de la page SPP dans la partie infrastructure - -## v2.4.4 — 2021-12-17 - -### [Console](/console/console) -- Ajout d'un overlay au chargement d'un élément de tableau déplié - -## v2.4.1 — 2021-12-16 - -### [Console](/console/console) -- Possibilité de chercher sur certaines listes dynamiques (exemples: choix de réseaux sur la création ou migration de machine virtuelle, choix d'une vue sur la partie supervision...) -- Ajout de guillemets sur les noms d'objets dans les notifications (exemples: noms de machines virtuelles, nom de ticket...) - -## v2.4 — 2021-12-15 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout d'une étape pour configurer le réseau, lors du déploiement d'un template -- Ajout de la version de VMware tools sur les informations d'une machine virtuelle - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Suppression du bouton pour exécuter une sauvegarde sur le tableau des politiques de sauvegarde d'un disque - -### [Réseau](/network/network_overview) -- Supprimer temporairement l'edition d'un réseau sur la page Réseaux - -## v2.3 — 2021-12-10 - -### [Identité & Accès (IAM)](/console/iam/iam) -- Lors de l'assignation de droits, les rôles non possédés et donc non assignables par l'utilisateur, sont désactivés - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout du choix de la destination lors du clonage d'une machine virtuelle -- Ajout d'un filtre sur la liste des utilisateurs pour filtrer par utilisateurs externes ou internes -- Ajout d'une étape pour configurer le réseau, lors du déploiement d'un template - -## v2.2 — 2021-12-06 - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Ajout de la page hébergement / racks -- Ajout de la page hébergement / IP publiques -- Ajout de la page hébergement / équipements -- Ajout de la page hébergement / circuits telecom -- Ajout de la page réseaux -- Possibilité d'ajouter, supprimer et éditer un réseau -- Ajout d'informations liées aux hosts sur les pages d'hosts et host clusters - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout d'un filtre par date sur les sauvegardes d'une machine virtuelle - -## v2.1 — 2021-12-02 - -### [Tickets de support](/console/console) -- Ajout du champ synthèse sur les details d'un ticket - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Amélioration de la modal de migration de machine virtuelle -- Ajout de la consommation lors de la selection des hosts et datastores sur toutes les modals - -## v2.0 — 2021-11-29 - -### [Console](/console/console) -- Refonte du moteur graphique - -## v1.63 — 2021-11-17 - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Possibilité de parcourir un datastore pour inventorier une machine virtuelle à partir d'un fichier vmx - -### [Tickets de support](/console/console) -- Mise à jour de l'edition du centre de compétence et du propriétaire sur les détails d'un ticket -- Sur la création d'un ticket ajout de l'appelant par défaut et proposer l'édition contact en mode avancé - -### Maintenance & Opérations -- Ajout de la liste des tickets liés à un équipement - -## v1.62.2 — 2021-11-03 - -### [Console](/console/console) -- Entrées dans la FAQ "Comment utiliser les APIs Shiva pour automatiser des taches?" et "Pourquoi certains utilisateurs sont grisés?" - -## v1.62 — 2021-10-19 - -### [Tickets de support](/console/console) -- Possibilité d'ajouter des fichiers à la création d'un ticket -- Ajout du mode "Avancé" sur la création d'un ticket avec les champs "Appelant" et "Référence client" -- Activation de la lecture seule sur l'édition des champs "Centre de competence", "Appelant", "Propriétaire" et "Contact" d'un ticket - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Amélioration et correction du suivi de publication d'un fichier dans une bibliothèque de contenu -- Possibilité de choisir le type de suppression d'une machine virtuelle - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Ajout d'une page par host dans la partie infrastructure - -### [Identité & Accès (IAM)](/console/iam/iam) -- Ajout de la date d'expiration sur la liste des PAT - -### [Console](/console/console) -- Ajout de la mécanique de redirection une fois l'utilisateur connecté lors du partage d'un lien SHIVA -- Intégration de l'outil de suivi d'erreurs "Sentry" au projet - -## v1.61 — 2021-10-12 - -### [Console](/console/console) -- Affichage du nombre d'éléments au total au pied des tableaux -- Un utilisateur n'ayant pas vérifié son email est désormais grisé sur la liste des utilisateurs et ses droits ne peuvent être modifiés - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Actualisation des données affichées suite à la désassignation d'une politique de sauvegarde -- Amélioration des graphiques sur les machines couvertes par une politique de sauvegarde -- Ajout d'un bouton pour exporter les infos de sauvegarde des machines virtuelles depuis la page Spectrum Protect Plus dans la partie infrastructure - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout d'une validation lors du démontage d'un disque virtual -- Mise à jour de l'affichage complet des Ids SCSI sur les disques virtuels -- Possibilité connecter et déconnecter un lecteur CDROM -- Ajout de l'option cluster de stockage sur le déploiement d'un template depuis la page machines virtuelles -- Possibilité de supprimer un paramètre de configuration avancé sur une machine virtuelle -- Possibilité de trier les disques virtuels par nom -- Ajout d'un bouton pour exporter les infos des machines virtuelles depuis la page des machines virtuelles - -### [Tickets de support](/console/console) -- Ajout d'un champ de recherche par Id sur la liste des tickets renvoyant vers les details du ticket -- Ajout d'un bouton actualisation des données sur les details d'un ticket -- Ajout d'un bandeau d'information à la création d'un ticket avec un lien renvoyant vers ce ticket -- Possibilité de trier alphabétiquement sur la liste des éléments d'un catalogue -- Possibilité de modifier l'appelant d'un ticket -- Possibilité de filtrer par l'appelant la liste des tickets -- Traduction des statuts de tickets - -### Maintenance & Opérations -- Ajout de la sélection, par utilisateur, d'une vue par défaut pour chacun des chemins existants depuis la page 'Vues' -- Possibilité de mettre à jour la vue par défaut sur les pages supportant la fonctionnalité -- Possibilité d'écraser les filtres d'une vue lors du clique sur 'Sauvegarder' -- Ajout des filtres de supervision et notifications sur la liste des services -- Désactivation temporaire du bouton santé des appliances - -### [Identité & Accès (IAM)](/console/iam/iam) -- Ajout d'une date d'expiration lors de la création d'un PAT - -### Documentation -- Les fichiers en duplicat ne s'affichent pas correctement sur une page documentation - -## v1.60.11 — 2021-10-06 - -### [Console](/console/console) -- Ajout d'un bouton pour exporter les activités récentes en csv -- Ajout d'un bouton pour exporter les activités archivées en csv -- Ajout d'une entrée FAQ concernant l'emplacement des activités - -## v1.60.8 — 2021-10-04 - -### [Console](/console/console) -- Ajout des dernières versions manquantes dans les notes de mise à jour -- Ajout d'une précision dans la FAQ concernant la suppression d'un utilisateur - -## v1.60.7 — 2021-09-30 - -### [Console](/console/console) -- Remplacer 'Administrateur' par 'Tous les rôles' dans la FAQ - -## v1.60 — 2021-09-21 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout du stockage total utilisé sur le detail d'une machine virtuelle - -### [Tickets de support](/console/console) -- Remplissage des catalogues avec l'item par défaut à la création d'un ticket -- Les champs catalogues ne sont plus requis pour créer un ticket -- Ajout des observateurs sur le detail d'un ticket -- Possibilité de modifier les observateurs d'un ticket - -## v1.59.3 — 2021-09-20 - -### Documentation -- Suppression des modifications liées aux fichiers - -## v1.59 — 2021-09-16 - -### [Identité & Accès (IAM)](/console/iam/iam) -- Ajout d'un bouton sur la liste des utilisateurs permettant un export de la liste en format CSV - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout des taches sur les details d'une machine virtuelle - -## v1.58 — 2021-09-13 - -### [Console](/console/console) -- Possibilité de déclarer un incident de sécurité - -## v1.57 — 2021-09-03 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Lors de la création d'un disque virtuel, il est possible de selectionner manuellement le contrôleur SCSI -- Lors d'une migration de stockage, il est désormais possible de choisir un stockage de destination pour chaque disque - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout d'un bouton sur la liste des machines virtuelles par politique permettant un export de la liste en format CSV - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Ajout du facteur d'offloading TSM sur la page du SPP dans la partie infra - -### [Tickets de support](/console/console) -- Ajout du champs titre lors de la création d'un ticket -- Ajout de nouvelles traductions - -### Maintenance & Opérations -- Changement du format de la date et heure dans la partie monitoring et ticket lorsque la langue est en anglais -- Ajout d'un bouton dans la page des vues permettant la redirection vers la vue choisie -- Ajout d'un bouton permettant l'ajout de tags sur la liste des équipements - -## v1.56.3 — 2021-08-24 - -### [Console](/console/console) -- Mise à jour de la traduction des types de services et des statuts de tickets - -## v1.56.2 — 2021-08-24 - -### [Console](/console/console) -- Mise à jour de la traduction des types de services et des statuts de tickets - -## v1.56.1 — 2021-08-16 - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Les filtres ne sont pas mis à jour lors du rafraichissement des machines virtuelles sans SLA - -## v1.56 — 2021-08-06 - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout de la liste des machines n'ayant pas de politique de sauvegarde sur la page des politiques - -## v1.55 — 2021-07-30 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité d'activer ou désactiver le changement à chaud de la RAM -- Possibilité d'activer ou désactiver le changement à chaud du CPU -- Ajout des paramètres avancés sur une machine virtuelle -- Possibilité d'éditer les paramètres avancés d'une machine virtuelle -- Ajout d'une page avec la liste des machines virtuelles répliquées - -### [Console](/console/console) -- Pré-autorisation sur la documentation Api - -### Maintenance & Opérations -- Ajout d'une page listant les vues de filtrage de la partie supervision - -### [Identité & Accès (IAM)](/console/iam/iam) -- Possibilité de créer des Access Tokens personnels (PAT) - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Lors de l'annulation d'un job, possibilité de conserver les données déjà sauvegardées - -## v1.54 — 2021-07-23 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout d'un filtre permettant de filtrer les machines virtuelles possédant ou ne possédant pas de snapshot - -### [Tickets de support](/console/console) -- Url mise à jour en fonction des filtres appliqués sur la page Ticket -- Possibilité de sauvegarder les filtres appliqués en tant que vue sur la pages Ticket -- Possibilité d'appliquer les filtres d'une vue préalablement enregistrée sur la pages Ticket - -### Maintenance & Opérations -- Url mise à jour en fonction des filtres appliqués sur la page Équipement -- Possibilité de sauvegarder les filtres appliqués en tant que vue sur la pages Équipement -- Possibilité d'appliquer les filtres d'une vue préalablement enregistrée sur la pages Équipement -- Url mise à jour en fonction des filtres appliqués sur la page Service -- Possibilité de sauvegarder les filtres appliqués en tant que vue sur la pages Service -- Possibilité d'appliquer les filtres d'une vue préalablement enregistrée sur la pages Service - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Possibilité de nettoyer les ressources actives liées à un job - -## v1.53 — 2021-07-16 - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Ajout des événements liés à une tâche vmware - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité, lors de la création de machine virtuelle, de choisir entre une nouvelle machine ou une machine depuis un template dans une bibliothèque de contenu -- Ajout d'une vérification sur le nom du fichier avant son chargement dans une bibliothèque de contenu -- Ajout d'une entrée FAQ concernant la visibilité d'une bibliothèque de contenu notamment lors du montage d'un iso - -### [Console](/console/console) -- Modification de la structure de la barre de navigation - -### [Tickets de support](/console/console) -- Possibilité d'éditer ses propres commentaires sur un ticket -- Modification des filtres appliqués lors du clique sur un tag de la vue tickets -- Ajout de traductions sur la vue tickets -- Modification de l'affichage et de la gestion des GTI/GTR - -### [Identité & Accès (IAM)](/console/iam/iam) -- Ajout du rôle iam_manage_permissions - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Modification du graphique concernant le nombre de machines ayant au moins 1 sauvegarde - -## v1.52.3 — 2021-07-09 - -### Documentation -- Ajout de la page d'accueil - -## v1.52 — 2021-06-29 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout du choix des recommandations au démarrage d'une machine virtuelle - -### Maintenance & Opérations -- Ajout des équipements sans notifications sur les chiffres des graphiques de supervision - -### [Tickets de support](/console/console) -- Possibilité de télécharger les fichiers attachés à un ticket -- Ajout d'un bouton sur les filtres par interval de date pour retirer l'interval -- Ajout des retours à la ligne sur l'aperçu de la description d'un ticket ou d'un commentaire - -## v1.51 — 2021-06-28 - -### Documentation -- Ajout du module documentation - -## v1.50 — 2021-06-28 - -### [Console](/console/console) -- Possibilité d'ouvrir plusieurs tenant d'une même entreprise à la fois - -## v1.49 — 2021-06-25 - -### [Console](/console/console) -- Ajout d'un bouton sur les comptes locaux pour réinitialiser son mot de passe une fois connecté -- Ajout d'un bouton sur les comptes locaux pour réinitialiser son MFA une fois connecté - -## v1.48 — 2021-06-22 - -### Maintenance & Opérations -- Ajout de graphiques sur la vue de l'ensemble des services - -### [Tickets de support](/console/console) -- Ajout d'un filtre sur les échéances Gti sur la liste des tickets -- Ajout d'un tag sur le nombre d'échéances Gti expirées ou bientôt expirées sur la liste des tickets -- Ajout d'un filtre sur les échéances Gtr sur la liste des tickets -- Ajout d'un tag sur le nombre d'échéances Gtr expirées ou bientôt expirées sur la liste des tickets -- Ajout d'un filtre sur les catalogues non renseignés sur la liste des tickets -- Ajout d'un tag sur le nombre de catalogues "Origine" non renseignés sur la liste des tickets -- Ajout d'un tag sur le nombre de catalogues "Nature" non renseignés sur la liste des tickets - -## v1.47 — 2021-06-15 - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout d'un graphique sur le nombre de machines concernées par une politique de sauvegarde -- Ajout de pagination sur la récupération des sauvegardes d'une machine virtuelle - -### [Tickets de support](/console/console) -- Modification de l'affichage des details d'un ticket - -## v1.45 — 2021-06-09 - -### [Tickets de support](/console/console) -- Ajout de la colonne "Equipe" sur la liste des tickets - -### Maintenance & Opérations -- Modification de l'affichage de la colonne "Information" des services - -## v1.44 — 2021-06-02 - -### Maintenance & Opérations -- Ajout d'une vue tableau de bord pour la partie supervision -- Ajout d'une vue listant l'ensemble des services -- Ajout d'un graphique des statuts de services sur la vue details d'un équipement -- Possibilité de filtrer les équipements "monitorés" et avec les "notifications activées" -- Possibilité de récupérer l'état de santé d'une appliance -- Possibilité de filtrer et trier les statuts des équipements -- Modification de l'affichage du statut d'un équipement -- Modification des champs gtr et gti sur la liste des tickets - -### [Tickets de support](/console/console) -- Ajout d'un tag sur la liste des tickets indiquant le nombre de tickets "non assigné" avec la possibilité de cliquer pour filtrer -- Ajout d'un tag sur la liste des tickets indiquant le nombre de tickets "en escalade" avec la possibilité de cliquer pour filtrer -- Ajout de la colonne "Nature" sur la liste des tickets - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Suppression des restrictions concernant le démontage et la suppresion d'un disque virtuel lorsque la machine est allumée - -## v1.43 — 2021-06-01 - -### [Identité & Accès (IAM)](/console/iam/iam) -- Ajout de la possibilité de pré-selectionner les rôles possédés lors de l'affectation de rôles - -## v1.41 — 2021-05-18 - -### [Identité & Accès (IAM)](/console/iam/iam) -- Mise à jour du système d'authentification suite aux changements IAM V2 - -## v1.40 — 2021-05-05 - -### [Identité & Accès (IAM)](/console/iam/iam) -- Activation d'IAM V2 - -## v1.31 — 2021-05-05 - -### [Console — Activités](/console/console) -- Possibilité de filtrer les logs par utilisateurs - -### [Console](/console/console) -- Ajout de redirections au clique sur les graphiques du tableau de bord - -### Maintenance & Opérations -- Ajout d'une vue de gestion des tags -- Possibilité d'ajouter un tag à un équipement -- Afficher les tags associés à un équipement -- Ajout d'un filtre par tags sur la liste des équipements - -## v1.30 — 2021-04-22 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Suppression d'une tooltip erronée sur le bouton pour clone une machine virtuelle - -### [Console](/console/console) -- Modification du message de bienvenue pour la première connexion d'un utilisateur - -### [Identité & Accès (IAM)](/console/iam/iam) -- Mise en place de IAM V2 - -## v1.29.1 — 2021-04-22 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité de cloner une machine virtuelle lorsqu'elle est allumée - -## v1.29 — 2021-04-20 - -### [Console](/console/console) -- Possibilité de choisir l'ordre des colonnes lorsqu'elles sont filtrables - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Ajout de la vue suivi des tâches VmWare - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout de validation sur les MAC adresses -- Ajout du nom du switch virtuel sur le filtre des vlans dans la vue machines virtuelles - -### [Tickets de support](/console/console) -- Possibilité de filtrer par la nature du ticket -- Ajout du nombre de tickets par statut sur la vue des tickets - -### Maintenance & Opérations -- Ajout de la colonne information sur la vue des services - -## v1.28 — 2021-04-09 - -### [Console](/console/console) -- Ajout du nombre de tickets et de la répartition des tickets non fermés sur le tableau de bord - -## v1.27 — 2021-04-08 - -### [Console](/console/console) -- Modifications pour adapter le responsive de l'application - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout de l'ensemble des IPs d'une machine virtuelle -- Possibilité de choisir le type de déplacement d'une machine virtuelle (calcul seulement, stockage seulement ou les 2) -- Ajout des infos de l'emplacement actuel d'une machine virtuelle lors de son déplacement - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Possibilité de modifier la configuration SDRS -- Possibilité de modifier la configuration HostCluster DRS -- Possibilité de choisir les recommendations à appliquer lors d'une mise en maintenance -- Possibilité d'appliquer les recommendations d'un SDRS - -### Maintenance & Opérations -- Ajout de filtres sur les vues équipements et services -- Ajout de la date de mise à jour du status pour un service - -### [Tickets de support](/console/console) -- Ajout des colonnes GTR et GTI - -## v1.26.2 — 2021-03-23 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout du filtre par host lors de la récupération des bibliothèques de contenu - -## v1.26 — 2021-03-18 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout de la consolidation d'une machine virtuelle -- Ajout de l'upload de fichiers sur la bibliothèque de contenu et desactivation d'object-storage -- Ajout de la modification d'un SE invité -- Ajout de la création d'un lecteur CD/DVD -- Ajout du choix du lecteur CD/DVD lors du montage d'un ISO -- Ajout d'un filtrage par host lors de la récupération des SE invité - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Affichage de la version de la plateforme SPP dans la partie infrastructure - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Ajouter le choix du nombre de pages sur la liste des hosts dans la vue infrastructure - -### [Tickets de support](/console/console) -- Ajout du filtrage des tickets avec plusieurs statuts -- Ajout de la modification d'un ticket - -## v1.25 — 2021-02-26 - -### [Console](/console/console) -- Ajout d'une redirection au clique sur un job sur le graphique du tableau de bord - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité de choisir entre host et hostCluster pour un deploy template -- Possibilité de configurer en dur une adresse mac sur une machine virtuelle -- Possibilité de stopper ou redémarrer le SE invité sur une machine virtuelle -- Ajout d'un affichage particulier pour les machines virtuelles en échec lors d'une migration - -### Maintenance & Opérations -- Ajout du nombre de services et le statut de la disponibilité sur la vue équipement -- Ajout d'une page des services pour un équipement - -### [Tickets de support](/console/console) -- Modification de l'affichage entre un commentaire humain et automatique sur un ticket - -### Inventaire -- Possibilité de choisir d'afficher 50 ou 100 éléments sur une vue inventaire - -## v1.24 — 2021-02-17 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité de choisir un cluster de stockage ou de calcul lors de la migration d'une machine virtuelle -- Désactivation du redimensionnement d'un disque lorsque la machine possede au moins un snapshot -- Ajout d'une vérification de compatibilité en fonction de cluster lors d'un vmotion - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Ajouter un bouton vmotion d'un datastore à l'autre sur la partie infrastructure - -### [Tickets de support](/console/console) -- Les champs catalogues sont désormais affichés selon les éléments précédemment sélectionnés -- Ajout de l'édition d'un commentaire -- Ajout de la création d'un commentaire - -## v1.23.2 — 2021-02-12 - -### [Tickets de support](/console/console) -- Modification de l'appel API pour la création de ticket - -## v1.23.1 — 2021-02-10 - -### [Tickets de support](/console/console) -- Ajout d'une notification lors d'un problème sur la récupération des catalogues de services - -## v1.23 — 2021-02-09 - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Possibilité de migrer plusieurs machines virtuelle d'un host à l'autre sur la vue infrastructure d'un hostcluster -- Mise à jour de l'affichage des status des hosts sur la vue infrastructure d'un hostcluster - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout du nom de la machine virtuelle dans l'url lors de l'ouverture de la console -- Ajout d'un tri alphabétique dans l'arborescence d'un datastore - -### [Tickets de support](/console/console) -- Ajout des fichiers liés sur l'édition d'un ticket -- Possibilité de lier des fichiers à l'édition d'un ticket -- Possibilité de créer un nouveau ticket -- Ajout de filtres sur les tickets - -### [Console](/console/console) -- Renforcement de la sécurité sur l'interprétation de nouveaux champs - -## v1.22 — 2021-01-20 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout d'options sur la création de snapshots -- Lors de l'ajout d'un disque, il est désormais possible de choisir entre un datastore et un cluster -- Ajout de l'affichage de la description et des options appliquées d'un snapshot - -### [Tickets de support](/console/console) -- Ajout des catalogues sur les tickets - -### Maintenance & Opérations -- Ajout de la liste des appliances - -## v1.21 — 2021-01-12 - -### [Console](/console/console) -- Ajout de la documentation API SHIVA -- Mise à jour de la sidebar -- Les listes déroulantes sont désormais remplacées par un message lorsqu'elles sont vides - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Le filtre avec la liste des vlans est maintenant trié par ordre alphabétique -- Possibilité de déployer un template directement depuis la vue machines virtuelles - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Possibilité de mettre en maintenace un host - -### [Identité & Accès (IAM)](/console/iam/iam) -- Ajout d'un filtre par rôle sur la vue utilisateurs -- Possibilité de trier les utilisateurs par nombre de rôles -- Mise à jour des rôles Ticketing et Supervision - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout d'une tooltip redirigeant vers la FAQ lors du choix du type de restauration -- L'édition d'une politique de sauvegarde est momentanément désactivé - -### [Tickets de support](/console/console) -- Possibilité de trier par colonne sur la vue Tickets - -### Maintenance & Opérations -- Possibilité de trier par colonne sur la vue Équipements - -## v1.20 — 2021-01-08 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout du typage sur les variables de déploiement pour les templates de bibliothèques -- Lors de la migration d'une machine virtuelle, il est desormais possible de choisir un nouveau réseau pour chaque adaptateur réseau -- Le montage d'une image ISO a été modifié afin de rendre transparent la création d'un lecteur CDROM - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Possibilité de mettre en maintenace un datastore - -### Maintenance & Opérations -- Ajout d'une vue supervision listant les équipements - -## v1.19.1 — 2020-12-22 - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Le graph sur le nombre de machines concernées par une politique de sauvegarde ne fonctionne pas avec SPP 10.1.5 - -## v1.19 — 2020-12-16 - -### [Tickets de support](/console/console) -- Création d'une vue permettant le listing des tickets - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Lors de la création d'une machine virtuelle, il est désormais possible de ne séléctionner uniquement les clusters de calcul et de stockage afin de profiter du DRS -- Ajout d'une confirmation lorsque la combinaison 'ctrl + alt + suppr' est effectuée sur la console -- Ajout d'un explorateur de datastore pour la récupération de disque virtuel existant - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Ajout des informations Vsphere DRS sur l'onglet 'Stockage' dans la partie infrastructure - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Lorqu'un job échoue, il est désormais possible de le relancer pour les machines concernées à l'aide d'un nouveau bouton prévu à cet effet -- Ajout d'un graphique indiquant le nombre de machines virtuelles associées à au moins une politique de sauvegarde - -### [Object Storage S3](/storage/oss/oss) -- Ajout de la création de token S3 avec object-storage -- Ajout de la liste des tokens S3 par projet - -## v1.18 — 2020-11-27 - -### [Console](/console/console) -- Cliquer sur un élément du menu permet l'ouverture de la page et des sous-menu à la fois -- Apparition d'une scroll-bar lorsqu'un élément du menu est trop long -- Ajout des informations sur les nouveaux droits compute_iaas_vmware_management dans la FAQ -- Le rôle compute_vmware_management_url est remplacé par compute_iaas_vmware_management_read et permet en plus l'exploration de l'infrastructure VMware - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Suppression de la vue sur les ressource pools dans la partie infrastructure -- Alignement de la légende sur les graphiques de la partie infrastructure et ajout d'un total - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité de diminuer la mémoire d'une machine virtuelle -- Ajout d'un filtre automatique par Datacenter lors de la récuperation de fichiers iso sur un datastore ou une bibliothèque de contenu -- Ajout de l'ID des controllers SCSI sur la liste des disques d'une machine virtuelle - -## v1.17 — 2020-11-17 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout de l'interface pour la création d'un contrôleur CD/DVD - -### [Console](/console/console) -- Desactivation des datastores lors de leur mise en maintenance -- Ajout d'une entrée FAQ sur la suppression d'un disque restauré - -## v1.16.2 — 2020-10-22 - -### [Console](/console/console) -- Modification de la valeur par défaut des capacités mémoire et stockage lors de création et édition à travers toute l'application (désormais GB) - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout de spécifications techniques en fonction de l'OS sélectionné (ex: mémoire maximum, cpu maximum, nombre de disques maximum...) -- Possibilité de filtrer les machines virtuelles par 'Template' - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Modification de l'affichage de la mémoire du cpu et du stockage d'un datacenter -- Modification de l'affichage du stockage d'un datastore cluster -- Modification de l'affichage de la mémoire du cpu et du stockage d'un hostCluster - -## v1.16.1 — 2020-10-20 - -### [Console](/console/console) -- Ajout d'une image d'exemple dans la FAQ sur la mémoire réservée d'un hostcluster - -## v1.16 — 2020-10-14 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité de monter un disque virtuel existant (à partir de son VMDK) -- Possibilité de démonter un disque virtuel sans supprimer les données sur le datastore -- Ajout du mode, du chemin et du type de provisionnement d'un disque -- Possibilité de configurer le mode et le type de provisionnement d'un nouveau disque -- Possibilité de modifier le mode d'un disque -- Possibilité d'ajouter un disque existant à la création d'une machine virtuelle -- Affichage d'une erreur de configuration lorsqu'un réseau est invalide ou introuvable sur un adaptateur réseaux -- Possibilité de déplacer une machine virtuelle (vMotion) - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Ajout d'informations concernant la configuration drs d'un hostcluster -- Ajout de la mémoire réservée d'un hostcluster -- Ajout du nombre d'ESX et leurs noms sur les datastores -- Ajout du nombre d'ESX et leurs noms sur les réseaux - -### [Console](/console/console) -- Ajout d'une entrée FAQ sur les modes de disques -- Ajout d'une entrée FAQ sur la mémoire réservée d'un hostcluster - -## v1.15.1 — 2020-10-01 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout d'un bouton pour recharger les bibliothèques sur la vue 'bibliothèque de contenu' - -## v1.15 — 2020-09-28 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout de l'export d'un item d'une bibliothèque de contenu vers un bucket object-storage - -## v1.14 — 2020-09-22 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout d'options sur la création d'une machine virtuelle (ajout de disques, contrôleurs et adaptateurs réseaux) -- Mise à jour de l'onglet 'disques virtuelles' en onglet 'périphériques' avec la possibilité de gérer les contrôleurs -- Ajout du champ 'Type' sur les adaptateurs réseaux pour les versions 6.7 -- Désactivation des actions sur une machine virtuelle lorsque l'ESX est déconnecté - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Tooltip concernant les informations d'une sla lors de l'assignation d'une sla à une machine virtuelle - -## v1.13 — 2020-09-10 - -### [Console](/console/console) -- Ajout d'entrées FAQ concernant IAM et 'Comment cloner une machine virtuelle' - -### Inventaire -- Différenciation des éléments par des formes sur l'affichage graphique d'une relation -- Affichage des détails d'un élément sous forme de tooltip sur l'affichage graphique d'une relation - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Ajout du nombre de machines virtuelles sur les hosts et les datastores - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité de filtrer les machines virtuelles par hosts -- Filtre affiné sur la récupération des datastores pour la création d'un disque virtuel - -### [Identité & Accès (IAM)](/console/iam/iam) -- Possibilité de reinitialiser son mot de passe une fois connecté - -## v1.12 — 2020-09-01 - -### [Console](/console/console) -- Ajout d'entrées FAQ sur 'L'expiration d'une session' et 'Comment transformer une machine virtuelle en modèle' - -### Inventaire -- Possibilité de déplacer les colonnes -- Affichage graphique des relations -- Ajout de conversion sur les colonnes unitaires - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout de la version matériel d'une machine virtuelle -- Possibilité de selectionner l'option 'auto-connecter' sur les adaptateurs réseaux -- Possibilité de mettre à niveau la version matériel d'une machine virtuelle -- Possibilité de cloner vers une nouvelle machine virtuelle depuis les actions de la machine virtuelle - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Ajout d'un sous-menu 'réseau' listant les switchs virtuels dans la partie infrastruscture -- Ajout d'une vue des réseaux par switch virtuel -- Ajout de la version des hosts sur la vue cluster dans la partie infrastructure - -### [Identité & Accès (IAM)](/console/iam/iam) -- Possibilité de choisir la durée de sa session parmis une liste d'options - -## v1.11 — 2020-08-04 - -### [Console](/console/console) -- Possibilité de personaliser le Tableau de bord à sa guise -- Ajout d'un nouvel onglet 'Archives' dans la vue des logs -- Ajout d'un badge du nombre de version ajoutées depuis la dernière ouverture de la modal des mises à jour - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Possibilité de supprimer un job de type 'recovery' se trouvant en statut 'veille' -- Possibilité de restorer un vmdk précis à partir d'une sauvegarde -- Ajout d'une colonne 'Date d'activation' sur les politiques de sauvegarde -- Ajout d'une colonne 'Spp mode' sur les disques virtuels -- Possibilité de passer un disque du mode 'Instant Access' au mode 'Production' - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité de déployer un type 'vm-template' depuis une bibliothèque de contenu -- Possibilité d'exporter une machine virtuelle en template vers une bibliothèque de contenu - -## v1.10.3 — 2020-07-27 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité d'upload des fichiers '.ova', '.ovf' et '.iso' dans une bibliothèque de contenu depuis une url publique - -## v1.10.1 — 2020-07-27 - -### [Console](/console/console) -- Ajout d'une entrée FAQ sur 'Comment monter un ISO' - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout d'une colonne 'Date d'expiration' sur les sauvegardes d'une machine virtuelle - -## v1.10 — 2020-07-23 - -### [Identité & Accès (IAM)](/console/iam/iam) -- Sur la vue 'Utilisateurs', possibilité de chercher par email, 'Admin', 'Sans roles' - -### Inventaire -- Ajout d'une notification lorsqu'un ou plusieurs items ont été ajoutés depuis la dernière actualisation des données - -### [Console](/console/console) -- Nouveau design pour la FAQ - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Affichage du nombre de machines virtuelles par vcenter - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Optimisation du listage des machines virtuelles - -## v1.9 — 2020-07-20 - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- AJout d'un filtre par date sur les sauvegardes d'une machine virtuelle - -### Inventaire -- Possibilité de choisir les colonnes à afficher - -### [Object Storage S3](/storage/oss/oss) -- Ajout de validation sur la création d'un bucket -- Ajout de l'url publique des fichiers dans un bucket - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Possibilité d'importer un fichier dans une bilbiothèque de contenu depuis object-storage - -## v1.8 — 2020-07-17 - -### [Console](/console/console) -- Ajustement de styles sur l'ensemble de l'application -- Ajout du choix du nombre de lignes affichées d'un tableau sur l'ensemble de l'application - -### Inventaire -- Affichage dynamique des vues inventaire disponibles -- Ajout d'un bouton sur la partie infrastructure d'un vcenter permettant d'inventorier toutes les VMs de ce vcenter -- Possibilité d'ajouter un nouvel élément à un inventaire si le type d'inventaire est autre que celui des VMs -- Possibilité de voir les items liés à une relation -- Amélioration sur la récupération des relations d'un item -- Possibilité d'effectuer une suppression sur plusieurs éléments à la fois -- Possibilité d'effectuer une edition sur plusieurs éléments à la fois -- Modification de la modal d'édition -- Gestion des paramètres 'Lecture seule', 'Obligatoire', 'Unique'... sur les différents champs - -## v1.7.4 — 2020-07-06 - -### Inventaire -- Mise à jour du système de pagination et de filtre - -## v1.7 — 2020-06-30 - -### Inventaire -- Mise en place du système d'inventaire - -## v1.6 — 2020-06-19 - -### [Console](/console/console) -- Réorganisation de la sidebar -- Mise en place de lazy loading sur le tableau de bord - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout d'une vue sur les machines virtuelles supprimées qui peuvent etre réstaurées - -### [Object Storage S3](/storage/oss/oss) -- Ajout d'une vue pour voir la liste des projets object storage -- Ajout d'une vue pour voir la liste des buckets d'un projet - -## v1.5 — 2020-05-29 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout d'un message supplémentaire à la suppression d'un disque -- Ajout d'une barre de recherche sur le contenu d'une bibliothèque -- Ajout d'un filtre sur le mode SPP d'une machine virtuelle - -## v1.4.5 — 2020-05-07 - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout de la possibilité de passer une machine virtuelle en mode test vers le mode clone - -## v1.4.2 — 2020-04-15 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout d'une suppression spécifique pour une machine virtuelle en mode test - -## v1.4 — 2020-04-09 - -### [Console](/console/console) -- Les modules sont désormais affichés en fonction des droits de l'utilisateur - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Affichage du mode SPP de la vm (test/clone/production) - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout de la possibilité de restaurer une machine virtuelle en mode test -- Ajout de la possibilité de passer une machine virtuelle en mode test vers le mode production - -## v1.3.11 — 2020-03-27 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout d'une recherche par uuid dans la vue machine virtuelles -- Ajout de l'édition des cores par socket - -### [Console](/console/console) -- Uniformisation des boutons pour enrouler/dérouler les informations dépliables -- Ajout d'une tooltip et d'une question dans la FAQ concernant le quiescing -- Nouvelle apparence du bouton de feedback se trouvant désormais dans la barre de navigation -- Ajout de traductions -- Ajout dans la FAQ du temps de conservation des logs - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Nouvelle architecture pour la partie infrastructure - -## v1.3.10 — 2020-03-19 - -### [Identité & Accès (IAM)](/console/iam/iam) -- Ajout des emails sur la liste des utilisateurs - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Ajout des SDRS dans la partie infrastructure -- Ajout d'une vue infrastructure pour les SDRS - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout d'un bouton explicit pour voir les logs concernant un job -- Ajout des activités pour toutes les actions concernant backup -- Ajout de la possibilité de modifier les options de sauvegarde d'une machine virtuelle (Quiescing) - -### [Console](/console/console) -- Mise à jour des librairies utilisées pour l'interface web - -## v1.3.9 — 2020-02-28 - -### [Console](/console/console) -- Ajout dans la FAQ des versions de navigateurs supportées - -## v1.3.8 — 2020-02-28 - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Ajout d'une vue infrastructure pour la partie Sauvegardes - -### [Console](/console/console) -- La connexion est désormais automatiquement actualisée lorsqu'une console est ouverte -- Ajout de selection d'un sujet lors du clique sur le bouton de support Shiva -- Ajout dans la FAQ de l'utilisation de l'arobase dans la console - -### [Identité & Accès (IAM)](/console/iam/iam) -- Tri par ordre alphabetique des rôles dans la vue des utilisateurs - -## v1.3.7 — 2020-02-21 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout du filtrage des guest operation system par vcenter lors de la création d'une vm - -### [Console](/console/console) -- Mise à jour de dépendances et de la version de docker - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout d'une colonne status sur l'export csv des rapports de sauvegardes - -## v1.3.6 — 2020-02-14 - -### [Console](/console/console) -- Ajout d'une page FAQ sur l'inventaire du module de sauvegardes -- Ajout d'une page FAQ sur une erreur de snapshot lors d'une sauvegarde -- Ajout d'une page FAQ sur la connexion/déconnexion d'une carte réseau -- Ajout d'un graphique sur le tableau de bord avec les status des jobs executé sur une plage horraire -- Résolution de bugs sur les graphiques du tableau de bord avec le navigateur Google Chrome -- Résolution de bugs de traduction - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout de l'option de trier les machines virtuelles par VLAN -- Ajout de l'option de connecter/déconnecter une carte réseau sur une machine virtuelle en version 6.7 -- Ajout de l'information du nombre de cores par socket sur une machine virtuelle - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Suppression de l'action pour executer le job d'une politque depuis la vue rapport de sauvegarde et la vue politiques -- Ajout de l'option d'annuler un job sur la vue des jobs -- Ajout de couleurs sur certains status de sessions d'un job - -## v1.3.5 — 2020-01-20 - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Ajout d'une vue pour consulter les détails d'un vcenter -- Ajout d'une vue pour consulter les détails d'un datacenter -- Changement de la couleur du status de maintenance -- Modification de l'affichage de la capacité de stockage restante au lieu de celle utilisée - -## v1.3.4 — 2020-01-06 - -### [Console](/console/console) -- Intégration du module Infrastructure dans la sidebar -- Changement du logo lorsque la sidebar est réduite -- Ajout de l'option pour filtrer par vcenter lors de la création ou dépoliement d'une machine virtuelle ou lors de la création d'une bibliothèque - -### [Infrastructure IaaS](/iaas_vmware/iaas_vmware) -- Affichage de la liste des vcenters dans la sidebar -- Affichage de la liste des datacenter d'un vcenter dans la sidebar -- Affichage de la liste des hostCluster d'un datacenter dans la sidebar -- Ajout d'une vue pour consulter les consommations des datastores d'un datacenter -- Ajout d'une vue pour consulter les consommations des hosts et resources pools d'un hostCluster -- Ajout d'une vue pour consulter les consommations d'un hostCluster - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Retrait des boutons permettant de créer et supprimer une politique de sauvegarde - -## v1.3.2 — 2019-12-13 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout de la colonne de description des éléments d'une bibliothèque -- Ajout des champs pour configurer les options d'une image ovf lors du déploiement d'une vm -- Ajout d'un rôle pour accéder à l'url de la Vstack d'un vcenter -- Ajout du lien des Vstacks, accessible depuis les machine virtuelles lorsque l'utilisateur possède le droit adequat - -### [Console](/console/console) -- Mise à jour de la FAQ -- Ajout du nouveau logo - -## v1.3.1 — 2019-12-06 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout de l'option pour créer une bibliothéque de contenu -- Ajout de l'option pour supprimer une bibliothéque de contenu -- Ajout de l'option pour monter un ISO sur une machine virtuelle -- Ajout de l'option pour démonter un ISO sur une machine virtuelle -- Nouvel affichage pour le déploiement d'une machine virtuelle à partir d'un fichier ovf - -## v1.3 — 2019-11-29 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout du nom du vcenter d'une vm -- Ajout de la fonctionnalité pour créer une machine virtuelle vide -- Ajout de la vue bibliothèque de contenu (vcenter 6.7 seulement) -- Ajout de la fonctionnalité pour envoyer un modèle dans une bibliothèque (vcenter 6.7 seulement) -- Ajout de la fonctionnalité pour déployer un modèle en tant que machine virtuelle (vcenter 6.7 seulement) - -### [Console](/console/console) -- Mise à jour de la FAQ -- Ajout d'ancre permettant d'accéder à une FAQ en particulier, ajout de ces ancres dans l'url au clique sur une question -- Suppresion de l'utilisation de cookies - -### [Identité & Accès (IAM)](/console/iam/iam) -- Ajout d'un bouton pour raffraichir la liste des utilisateurs - -### [Console — Activités](/console/console) -- Ajout des raisons d'échec dans les logs - -## v1.2.9 — 2019-11-07 - -### [Identité & Accès (IAM)](/console/iam/iam) -- Afficher l'uuid de l'auteur dans les logs lorsqu'il a été supprimé -- Afficher une colone des roles des utilisateurs sur la page dédiée - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Retirer le mode test lors d'une restauration - -## v1.2.7 — 2019-10-24 - -### [Console](/console/console) -- Traduction des FAQ et des notes de mises à jours -- Ajout de question IAM dans la FAQ -- Ajout du fonctionnement du clavier de la console dans la FAQ - -### [Identité & Accès (IAM)](/console/iam/iam) -- Ajout du bouton pour supprimer un utilisateur -- Ajout du support activité d'IAM - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Afficher l'état des vmWare tools -- Ajout de l'option pour mettre à jour les vmWare tools -- Ajout de l'option pour monter ou démonter l'image disque des vmWare tools - -## v1.2.6 — 2019-10-15 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Editer CPU et RAM lorsque la machine virtuelle est allumée -- Editer un disque lorsque la machine virtuelle est allumée -- Mettre à jour l'unité utilisée pour les datastores - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajouter les logs d'une session de travail - -### [Console](/console/console) -- Ajout d'une page FAQ -- Refonte du tableau de bord - -## v1.2.5 — 2019-10-03 - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout de la possibilité d'éxecuter un job sur la vue politiques de sauvegardes -- Ajout de la possibilité d'éxecuter un job sur la vue rapport -- Ajout de la possibilité d'éxecuter un job sur la vue job -- Ajout de l'exportation des rapports de sauvegardes d'une politique au format pdf -- Ajout de l'exportation des rapports de sauvegardes d'une politique au format csv -- Ajout de l'espace total et occupé des datastores lors d'une restauration -- Mise à jour du rendu des rapports - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout de l'espace total d'un datastore lors de l'ajout d'un disque -- Ajout d'un message de validation lors de l'arret d'une machine virtuelle -- Possibilité de modifier la taille d'un disque lorsque la machine virtuelle est allumée - -### [Console](/console/console) -- Ajout de statistiques concernant backup sur le dashboard - -## v1.2.4 — 2019-09-24 - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Mise à jour de la page des rapports de sauvegardes -- Ajout d'un filtre par intervalles sur les rapports de sauvegardes -- Ajout d'une modal lorsque plusieurs rapports de sauvegardes se trouve dans le même intervalle -- Amélioration du traitement de données concernant les rapports de sauvegardes - -### [Console](/console/console) -- Ajout de traductions - -## v1.2.3 — 2019-09-10 - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout du status d'un job -- Ajout d'un filtre par status pour les jobs -- Ajout d'un bouton pour rafraichir les jobs -- Mise à jour du style des rapports de sauvegarde -- Mise à jour du style des jobs -- Mise à jour de la modal sur la modification d'une politique de sauvegarde - -### [Console — Activités](/console/console) -- Ajout de l'auteur d'une action dans les logs - -## v1.2.2 — 2019-09-03 - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Ajout d'options à la restauration d'une vm -- Ajout de la possibilité de voir les vm par politiques de sauvegarde - -### [Console](/console/console) -- Mise à jour des activités reçues en WebSocket - -## v1.2 — 2019-07-10 - -### [Console](/console/console) -- Intégration de compatibilités Internet Explorer 11 - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout d'un filtre par datacenter -- Mise en forme des politiques sous forme de tableau -- Ouverture de la console dans une nouvelle page - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Intégration d'une vue pour les rapports de sauvegardes -- Intégration d'une vue pour les jobs -- Ajout d'options sur la restoration d'une vm -- Modififcation de la modal sur les politiques - -## v1.1 — 2019-05-22 - -### [Console](/console/console) -- Ajout d'un bouton pour contacter le support -- Ajout des informations de version -- Modification de l'affichage sur la redirection du login - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Ajout d'un message de confirmation sur le redémarrage d'une machine virtuelle -- La réduction de la RAM est désormais autorisée -- Ajout d'une limite sur le nombre d'adaptateurs réseaux sur une machine virtuelle -- Ajout d'une limite sur le nombre de disques sur une machine virtuelle - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Intégration du module -- Edition des paramètres d'une politique de sauvegarder -- Ajout de la gestion des politiques de sauvegardes -- Ajout de l'assignation des politiques sur une machine virtuelle -- Ajout de l'assignation des politiques sur un disque -- Ajout des sauvegardes sur une machine virtuelle -- Ajout de l'execution d'une backup sur une machine virtuelle - -## v1.0 — 2019-02-07 - -### [Console](/console/console) -- Première version - -### [IaaS — Machines virtuelles](/iaas_vmware/iaas_vmware) -- Première version - -### [Sauvegarde](/iaas_vmware/iaas_vmware) -- Première version - -### [Identité & Accès (IAM)](/console/iam/iam) -- Première version +--- -### [Console — Activités](/console/console) -- Première version +:::info Historique antérieur +L'historique complet des versions antérieures à v4.0 (v1.0 à v3.37.5, de février 2019 à octobre 2024) est disponible dans l'[historique Git](https://github.com/Cloud-Temple/docs) du projet. +::: diff --git a/docs/console/api.md b/docs/console/api.md index d80cfca7..1cb9d38b 100644 --- a/docs/console/api.md +++ b/docs/console/api.md @@ -1,15 +1,15 @@ --- title: Documentation API --- -import ShivaProfil001 from './images/shiva_profil_001.png' -import ShivaProfil002 from './images/shiva_profil_002.png' -import ShivaProfil003 from './images/shiva_profil_003.png' -import ShivaProfil004 from './images/shiva_profil_004.png' -import ShivaProfil005 from './images/shiva_profil_005.png' -import ShivaApi001 from './images/shiva_api_001.png' -import ShivaApi002 from './images/shiva_api_002.png' -import ShivaApi003 from './images/shiva_api_003.png' -import ShivaApi004 from './images/shiva_api_004.png' +import ShivaProfil001 from '@site/docs/console/images/shiva_profil_001.png' +import ShivaProfil002 from '@site/docs/console/images/shiva_profil_002.png' +import ShivaProfil003 from '@site/docs/console/images/shiva_profil_003.png' +import ShivaProfil004 from '@site/docs/console/images/shiva_profil_004.png' +import ShivaProfil005 from '@site/docs/console/images/shiva_profil_005.png' +import ShivaApi001 from '@site/docs/console/images/shiva_api_001.png' +import ShivaApi002 from '@site/docs/console/images/shiva_api_002.png' +import ShivaApi003 from '@site/docs/console/images/shiva_api_003.png' +import ShivaApi004 from '@site/docs/console/images/shiva_api_004.png' ## Introduction diff --git a/docs/console/billing/concepts.md b/docs/console/billing/concepts.md index 390b0ca8..45c5816a 100644 --- a/docs/console/billing/concepts.md +++ b/docs/console/billing/concepts.md @@ -2,12 +2,12 @@ title: Gestionnaire des coûts --- -import billingDashboardPreview from './images/billing_dashboard_preview.png' -import billingDashboardConsumptionTotal from './images/billing_dashboard_consumption_total.png' -import billingDashboardConsumptionPerProduct from './images/billing_dashboard_consumption_per_product.png' -import billingDashboardConsumptionPerService from './images/billing_dashboard_consumption_per_service.png' -import billingConsumptionDetails from './images/billing_consumption_details.png' -import billingPricesList from './images/billing_prices_list.png' +import billingDashboardPreview from '@site/docs/console/billing/images/billing_dashboard_preview.png' +import billingDashboardConsumptionTotal from '@site/docs/console/billing/images/billing_dashboard_consumption_total.png' +import billingDashboardConsumptionPerProduct from '@site/docs/console/billing/images/billing_dashboard_consumption_per_product.png' +import billingDashboardConsumptionPerService from '@site/docs/console/billing/images/billing_dashboard_consumption_per_service.png' +import billingConsumptionDetails from '@site/docs/console/billing/images/billing_consumption_details.png' +import billingPricesList from '@site/docs/console/billing/images/billing_prices_list.png' ## Présentation diff --git a/docs/console/console_quickstart.md b/docs/console/console_quickstart.md index c15cc00c..e51d0f69 100644 --- a/docs/console/console_quickstart.md +++ b/docs/console/console_quickstart.md @@ -1,18 +1,18 @@ --- title: Quickstart --- -import shivaLogin from './images/shiva_login.png' -import shivaHome from './images/shiva_home.png' -import shivaProfil_006 from './images/shiva_profil_006.png' -import shivaSupport from './images/shiva_support.png' -import shivaSupport_01 from './images/shiva_support_01.png' -import shivaSupport_02 from './images/shiva_support_02.png' -import shivaSupport_03 from './images/shiva_support_03.png' -import shivaOnboard_007 from './images/shiva_onboard_007.png' -import shivaLogs from './images/shiva_logs.png' -import shivaOnboard_009 from './images/shiva_onboard_009.png' -import shivaOnboard_008 from './images/shiva_onboard_008.png' -import shivaSupportCriticities from './images/shiva_incident_criticities.png' +import shivaLogin from '@site/docs/console/images/shiva_login.png' +import shivaHome from '@site/docs/console/images/shiva_home.png' +import shivaProfil_006 from '@site/docs/console/images/shiva_profil_006.png' +import shivaSupport from '@site/docs/console/images/shiva_support.png' +import shivaSupport_01 from '@site/docs/console/images/shiva_support_01.png' +import shivaSupport_02 from '@site/docs/console/images/shiva_support_02.png' +import shivaSupport_03 from '@site/docs/console/images/shiva_support_03.png' +import shivaOnboard_007 from '@site/docs/console/images/shiva_onboard_007.png' +import shivaLogs from '@site/docs/console/images/shiva_logs.png' +import shivaOnboard_009 from '@site/docs/console/images/shiva_onboard_009.png' +import shivaOnboard_008 from '@site/docs/console/images/shiva_onboard_008.png' +import shivaSupportCriticities from '@site/docs/console/images/shiva_incident_criticities.png' ## Prérequis diff --git a/docs/console/iam/concepts.md b/docs/console/iam/concepts.md index 7bcf9487..abd0165a 100644 --- a/docs/console/iam/concepts.md +++ b/docs/console/iam/concepts.md @@ -1,21 +1,21 @@ --- title: Concepts --- -import shivaOnboard_003 from './images/shiva_onboard_003.png' -import shivaOnboard_004 from './images/shiva_onboard_004.png' -import shivaOnboard_001 from './images/shiva_onboard_001.png' -import shivaOnboard_005 from './images/shiva_onboard_005.png' -import shivaProfil_012 from './images/shiva_profil_012.png' -import shivaProfil_014 from './images/shiva_profil_014.png' -import shivaProfil_015 from './images/shiva_profil_015.png' -import shivaProfil_016 from './images/shiva_profil_016.png' -import shivaProfil_013 from './images/shiva_profil_013.png' -import shivaProfil_010 from './images/shiva_profil_010.png' -import shivaProfil_009 from './images/shiva_profil_009.png' -import shivaProfil_011 from './images/shiva_profil_011.png' -import shivaProfil_006 from './images/shiva_profil_006.png' -import shivaProfil_007 from './images/shiva_profil_007.png' -import shivaTenantRessources_01 from './images/shiva_tenant_ressources_01.png' +import shivaOnboard_003 from '@site/docs/console/iam/images/shiva_onboard_003.png' +import shivaOnboard_004 from '@site/docs/console/iam/images/shiva_onboard_004.png' +import shivaOnboard_001 from '@site/docs/console/iam/images/shiva_onboard_001.png' +import shivaOnboard_005 from '@site/docs/console/iam/images/shiva_onboard_005.png' +import shivaProfil_012 from '@site/docs/console/iam/images/shiva_profil_012.png' +import shivaProfil_014 from '@site/docs/console/iam/images/shiva_profil_014.png' +import shivaProfil_015 from '@site/docs/console/iam/images/shiva_profil_015.png' +import shivaProfil_016 from '@site/docs/console/iam/images/shiva_profil_016.png' +import shivaProfil_013 from '@site/docs/console/iam/images/shiva_profil_013.png' +import shivaProfil_010 from '@site/docs/console/iam/images/shiva_profil_010.png' +import shivaProfil_009 from '@site/docs/console/iam/images/shiva_profil_009.png' +import shivaProfil_011 from '@site/docs/console/iam/images/shiva_profil_011.png' +import shivaProfil_006 from '@site/docs/console/iam/images/shiva_profil_006.png' +import shivaProfil_007 from '@site/docs/console/iam/images/shiva_profil_007.png' +import shivaTenantRessources_01 from '@site/docs/console/iam/images/shiva_tenant_ressources_01.png' ## Utilisateurs diff --git a/docs/console/iam/quickstart.md b/docs/console/iam/quickstart.md index 7b66931a..4783e0fb 100644 --- a/docs/console/iam/quickstart.md +++ b/docs/console/iam/quickstart.md @@ -1,15 +1,15 @@ --- title: Guide de démarrage --- -import shivaTenant from './images/shiva_tenant.png' -import shivaOnboard_003 from './images/shiva_onboard_003.png' -import shivaOnboard_004 from './images/shiva_onboard_004.png' -import shivaOnboard_001 from './images/shiva_onboard_001.png' -import shivaOnboard_005 from './images/shiva_onboard_005.png' -import shivaProfil_006 from './images/shiva_profil_006.png' -import shivaProfil_007 from './images/shiva_profil_007.png' -import shivaIpAccessManagement_01 from './images/shiva_ip_access_management_01.png' -import shivaIpAccessManagement_02 from './images/shiva_ip_access_management_02.png' +import shivaTenant from '@site/docs/console/iam/images/shiva_tenant.png' +import shivaOnboard_003 from '@site/docs/console/iam/images/shiva_onboard_003.png' +import shivaOnboard_004 from '@site/docs/console/iam/images/shiva_onboard_004.png' +import shivaOnboard_001 from '@site/docs/console/iam/images/shiva_onboard_001.png' +import shivaOnboard_005 from '@site/docs/console/iam/images/shiva_onboard_005.png' +import shivaProfil_006 from '@site/docs/console/iam/images/shiva_profil_006.png' +import shivaProfil_007 from '@site/docs/console/iam/images/shiva_profil_007.png' +import shivaIpAccessManagement_01 from '@site/docs/console/iam/images/shiva_ip_access_management_01.png' +import shivaIpAccessManagement_02 from '@site/docs/console/iam/images/shiva_ip_access_management_02.png' ## Tenant diff --git a/docs/console/iam/tutorials/sso_adfs.md b/docs/console/iam/tutorials/sso_adfs.md index d8eb4a23..894451a2 100644 --- a/docs/console/iam/tutorials/sso_adfs.md +++ b/docs/console/iam/tutorials/sso_adfs.md @@ -5,18 +5,18 @@ tags: - tutorials - onboarding --- -import ssoAdfs_001 from './images/sso_adfs_001.png' -import ssoAdfs_002 from './images/sso_adfs_002.png' -import ssoAdfs_003 from './images/sso_adfs_003.png' -import ssoAdfs_004 from './images/sso_adfs_004.png' -import ssoAdfs_005 from './images/sso_adfs_005.png' -import ssoAdfs_006 from './images/sso_adfs_006.png' -import ssoAdfs_007 from './images/sso_adfs_007.png' -import ssoAdfs_008 from './images/sso_adfs_008.png' -import ssoAdfs_009 from './images/sso_adfs_009.png' -import ssoAdfs_010 from './images/sso_adfs_010.png' -import ssoAdfs_011 from './images/sso_adfs_011.png' -import ssoAdfs_012 from './images/sso_adfs_012.png' +import ssoAdfs_001 from '@site/docs/console/iam/tutorials/images/sso_adfs_001.png' +import ssoAdfs_002 from '@site/docs/console/iam/tutorials/images/sso_adfs_002.png' +import ssoAdfs_003 from '@site/docs/console/iam/tutorials/images/sso_adfs_003.png' +import ssoAdfs_004 from '@site/docs/console/iam/tutorials/images/sso_adfs_004.png' +import ssoAdfs_005 from '@site/docs/console/iam/tutorials/images/sso_adfs_005.png' +import ssoAdfs_006 from '@site/docs/console/iam/tutorials/images/sso_adfs_006.png' +import ssoAdfs_007 from '@site/docs/console/iam/tutorials/images/sso_adfs_007.png' +import ssoAdfs_008 from '@site/docs/console/iam/tutorials/images/sso_adfs_008.png' +import ssoAdfs_009 from '@site/docs/console/iam/tutorials/images/sso_adfs_009.png' +import ssoAdfs_010 from '@site/docs/console/iam/tutorials/images/sso_adfs_010.png' +import ssoAdfs_011 from '@site/docs/console/iam/tutorials/images/sso_adfs_011.png' +import ssoAdfs_012 from '@site/docs/console/iam/tutorials/images/sso_adfs_012.png' Voici un exemple de configuration du référentiel d'authentification d'une organisation Cloud Temple avec __Microsoft ADFS__. diff --git a/docs/console/iam/tutorials/sso_azuread.md b/docs/console/iam/tutorials/sso_azuread.md index 0378c9c5..1c46976e 100644 --- a/docs/console/iam/tutorials/sso_azuread.md +++ b/docs/console/iam/tutorials/sso_azuread.md @@ -5,23 +5,23 @@ tags: - tutorials - onboarding --- -import ssoEntra_001 from './images/sso_entra_001.png' -import ssoEntra_002 from './images/sso_entra_002.png' -import ssoAad_004 from './images/sso_aad_004.png' -import ssoAad_005 from './images/sso_aad_005.png' -import ssoAad_006 from './images/sso_aad_006.png' -import ssoAad_007 from './images/sso_aad_007.png' -import ssoAad_008 from './images/sso_aad_008.png' -import ssoAad_009 from './images/sso_aad_009.png' -import ssoAad_010 from './images/sso_aad_010.png' -import ssoAad_011 from './images/sso_aad_011.png' -import ssoAad_012 from './images/sso_aad_012.png' -import ssoAad_013 from './images/sso_aad_013.png' -import ssoAad_014 from './images/sso_aad_014.png' -import ssoAad_015 from './images/sso_aad_015.png' -import ssoAad_016 from './images/sso_aad_016.png' -import ssoAad_017 from './images/sso_aad_017.png' -import ssoAad_018 from './images/sso_aad_018.png' +import ssoEntra_001 from '@site/docs/console/iam/tutorials/images/sso_entra_001.png' +import ssoEntra_002 from '@site/docs/console/iam/tutorials/images/sso_entra_002.png' +import ssoAad_004 from '@site/docs/console/iam/tutorials/images/sso_aad_004.png' +import ssoAad_005 from '@site/docs/console/iam/tutorials/images/sso_aad_005.png' +import ssoAad_006 from '@site/docs/console/iam/tutorials/images/sso_aad_006.png' +import ssoAad_007 from '@site/docs/console/iam/tutorials/images/sso_aad_007.png' +import ssoAad_008 from '@site/docs/console/iam/tutorials/images/sso_aad_008.png' +import ssoAad_009 from '@site/docs/console/iam/tutorials/images/sso_aad_009.png' +import ssoAad_010 from '@site/docs/console/iam/tutorials/images/sso_aad_010.png' +import ssoAad_011 from '@site/docs/console/iam/tutorials/images/sso_aad_011.png' +import ssoAad_012 from '@site/docs/console/iam/tutorials/images/sso_aad_012.png' +import ssoAad_013 from '@site/docs/console/iam/tutorials/images/sso_aad_013.png' +import ssoAad_014 from '@site/docs/console/iam/tutorials/images/sso_aad_014.png' +import ssoAad_015 from '@site/docs/console/iam/tutorials/images/sso_aad_015.png' +import ssoAad_016 from '@site/docs/console/iam/tutorials/images/sso_aad_016.png' +import ssoAad_017 from '@site/docs/console/iam/tutorials/images/sso_aad_017.png' +import ssoAad_018 from '@site/docs/console/iam/tutorials/images/sso_aad_018.png' Voici un exemple de configuration du référentiel d'authentification d'une organisation Cloud Temple avec __Microsoft EntraID__ (Azure Active Directory). diff --git a/docs/console/iam/tutorials/sso_jumpcloud.md b/docs/console/iam/tutorials/sso_jumpcloud.md index a3b539d8..17f537e6 100644 --- a/docs/console/iam/tutorials/sso_jumpcloud.md +++ b/docs/console/iam/tutorials/sso_jumpcloud.md @@ -5,8 +5,8 @@ tags: - tutorials - onboarding --- -import ssoJumpcloud001 from './images/sso_jumpcloud_001.png'; -import ssoJumpcloud002 from './images/sso_jumpcloud_002.png'; +import ssoJumpcloud001 from '@site/docs/console/iam/tutorials/images/sso_jumpcloud_001.png'; +import ssoJumpcloud002 from '@site/docs/console/iam/tutorials/images/sso_jumpcloud_002.png'; Ce tutoriel vous guide à travers la configuration de l'authentification unique (SSO) entre JumpCloud et la console Cloud Temple en utilisant le protocole OpenID Connect (OIDC). diff --git a/docs/console/metrics/concepts.md b/docs/console/metrics/concepts.md index ba17c20c..e7b8d23d 100644 --- a/docs/console/metrics/concepts.md +++ b/docs/console/metrics/concepts.md @@ -1,31 +1,31 @@ --- title: Metrologie --- -import metricsHypervisorsCo2 from './images/metrics_hypervisors_co2.png' -import shivaHome from './images/shiva_home.png' -import shivaMetric_000 from './images/shiva_metric_000.png' -import shivaMetric_001 from './images/shiva_metric_001.png' -import shivaMetric_002 from './images/shiva_metric_002.png' -import shivaMetric_003 from './images/shiva_metric_003.png' -import shivaMetric_004 from './images/shiva_metric_004.png' -import shivaMetric_006 from './images/shiva_metric_006.png' -import shivaMetric_007 from './images/shiva_metric_007.png' -import shivaMetric_008 from './images/shiva_metric_008.png' -import shivaMetric_009 from './images/shiva_metric_009.png' -import shivaMetric_010 from './images/shiva_metric_010.png' -import shivaMetric_011 from './images/shiva_metric_011.png' -import shivaMetric_012 from './images/shiva_metric_012.png' -import shivaMetric_013 from './images/shiva_metric_013.png' -import shivaMetric_014 from './images/shiva_metric_014.png' -import grafanaDashboards_003 from './images/grafana_dashboards_003.png' -import grafanaDashboards_004 from './images/grafana_dashboards_004.png' -import grafanaDashboards_002 from './images/grafana_dashboards_002.png' -import grafanaDatasourceHttp from './images/grafana_datasource_http.png' -import grafanaDatasourceAuth from './images/grafana_datasource_auth.png' -import grafanaDatasourceBasicAuthDetails from './images/grafana_datasource_basic_auth_details.png' -import grafanaDatasourceAlerting from './images/grafana_datasource_alerting.png' -import grafanaDatasourceWorking from './images/grafana_datasource_working.png' -import grafanaDashboards_001 from './images/grafana_dashboards_001.png' +import metricsHypervisorsCo2 from '@site/docs/console/metrics/images/metrics_hypervisors_co2.png' +import shivaHome from '@site/docs/console/metrics/images/shiva_home.png' +import shivaMetric_000 from '@site/docs/console/metrics/images/shiva_metric_000.png' +import shivaMetric_001 from '@site/docs/console/metrics/images/shiva_metric_001.png' +import shivaMetric_002 from '@site/docs/console/metrics/images/shiva_metric_002.png' +import shivaMetric_003 from '@site/docs/console/metrics/images/shiva_metric_003.png' +import shivaMetric_004 from '@site/docs/console/metrics/images/shiva_metric_004.png' +import shivaMetric_006 from '@site/docs/console/metrics/images/shiva_metric_006.png' +import shivaMetric_007 from '@site/docs/console/metrics/images/shiva_metric_007.png' +import shivaMetric_008 from '@site/docs/console/metrics/images/shiva_metric_008.png' +import shivaMetric_009 from '@site/docs/console/metrics/images/shiva_metric_009.png' +import shivaMetric_010 from '@site/docs/console/metrics/images/shiva_metric_010.png' +import shivaMetric_011 from '@site/docs/console/metrics/images/shiva_metric_011.png' +import shivaMetric_012 from '@site/docs/console/metrics/images/shiva_metric_012.png' +import shivaMetric_013 from '@site/docs/console/metrics/images/shiva_metric_013.png' +import shivaMetric_014 from '@site/docs/console/metrics/images/shiva_metric_014.png' +import grafanaDashboards_003 from '@site/docs/console/metrics/images/grafana_dashboards_003.png' +import grafanaDashboards_004 from '@site/docs/console/metrics/images/grafana_dashboards_004.png' +import grafanaDashboards_002 from '@site/docs/console/metrics/images/grafana_dashboards_002.png' +import grafanaDatasourceHttp from '@site/docs/console/metrics/images/grafana_datasource_http.png' +import grafanaDatasourceAuth from '@site/docs/console/metrics/images/grafana_datasource_auth.png' +import grafanaDatasourceBasicAuthDetails from '@site/docs/console/metrics/images/grafana_datasource_basic_auth_details.png' +import grafanaDatasourceAlerting from '@site/docs/console/metrics/images/grafana_datasource_alerting.png' +import grafanaDatasourceWorking from '@site/docs/console/metrics/images/grafana_datasource_working.png' +import grafanaDashboards_001 from '@site/docs/console/metrics/images/grafana_dashboards_001.png' La majorité des clients __Cloud Temple__ disposent d'outils de visualisation, de monitoring et de métrologie pour le suivi de leurs opérations. diff --git a/docs/console/orders.md b/docs/console/orders.md index 806b608d..4a3dd487 100644 --- a/docs/console/orders.md +++ b/docs/console/orders.md @@ -1,32 +1,32 @@ --- title: Déployer des ressources --- -import shivaOrdersList from './images/shiva_orders_list.png' -import shivaOrderNotif_001 from './images/shiva_order_notif_001.png' -import shivaOrderStatus from './images/shiva_order_status.png' -import shivaOrderAz_01 from './images/shiva_order_az_01.png' -import shivaOrderAz_02 from './images/shiva_order_az_02.png' -import shivaOrderAz_03 from './images/shiva_order_az_03.png' -import shivaOrderAz_04 from './images/shiva_order_az_04.png' -import shivaOrderAz_05 from './images/shiva_order_az_05.png' -import shivaOrderAz_06 from './images/shiva_order_az_06.png' -import shivaOrderAz_07 from './images/shiva_order_az_07.png' -import shivaOrderAz_08 from './images/shiva_order_az_08.png' -import shivaOrderClucalc_01 from './images/shiva_order_clucalc_01.png' -import shivaOrderClucalc_02 from './images/shiva_order_clucalc_02.png' -import shivaOrderClucalc_03 from './images/shiva_order_clucalc_03.png' -import shivaOrderClucalc_04 from './images/shiva_order_clucalc_04.png' -import shivaOrderClucalc_05 from './images/shiva_order_clucalc_05.png' -import shivaOrderClusto_01 from './images/shiva_order_clusto_01.png' -import shivaOrderClusto_02 from './images/shiva_order_clusto_02.png' -import shivaOrderClusto_03 from './images/shiva_order_clusto_03.png' -import shivaOrderClusto_04 from './images/shiva_order_clusto_04.png' -import shivaOrdersIaasSpoolDs from './images/shiva_orders_iaas_spool_ds.png' -import shivaOrdersNet_002 from './images/shiva_orders_net_002.png' -import shivaOrdersNet_003 from './images/shiva_orders_net_003.png' -import shivaOrdersNet_004 from './images/shiva_orders_net_004.png' -import shivaOrdersIaasCpoolEsx from './images/shiva_orders_iaas_cpool_esx.png' -import shivaOrdersIaasCpoolMemory from './images/shiva_orders_iaas_cpool_memory.png' +import shivaOrdersList from '@site/docs/console/images/shiva_orders_list.png' +import shivaOrderNotif_001 from '@site/docs/console/images/shiva_order_notif_001.png' +import shivaOrderStatus from '@site/docs/console/images/shiva_order_status.png' +import shivaOrderAz_01 from '@site/docs/console/images/shiva_order_az_01.png' +import shivaOrderAz_02 from '@site/docs/console/images/shiva_order_az_02.png' +import shivaOrderAz_03 from '@site/docs/console/images/shiva_order_az_03.png' +import shivaOrderAz_04 from '@site/docs/console/images/shiva_order_az_04.png' +import shivaOrderAz_05 from '@site/docs/console/images/shiva_order_az_05.png' +import shivaOrderAz_06 from '@site/docs/console/images/shiva_order_az_06.png' +import shivaOrderAz_07 from '@site/docs/console/images/shiva_order_az_07.png' +import shivaOrderAz_08 from '@site/docs/console/images/shiva_order_az_08.png' +import shivaOrderClucalc_01 from '@site/docs/console/images/shiva_order_clucalc_01.png' +import shivaOrderClucalc_02 from '@site/docs/console/images/shiva_order_clucalc_02.png' +import shivaOrderClucalc_03 from '@site/docs/console/images/shiva_order_clucalc_03.png' +import shivaOrderClucalc_04 from '@site/docs/console/images/shiva_order_clucalc_04.png' +import shivaOrderClucalc_05 from '@site/docs/console/images/shiva_order_clucalc_05.png' +import shivaOrderClusto_01 from '@site/docs/console/images/shiva_order_clusto_01.png' +import shivaOrderClusto_02 from '@site/docs/console/images/shiva_order_clusto_02.png' +import shivaOrderClusto_03 from '@site/docs/console/images/shiva_order_clusto_03.png' +import shivaOrderClusto_04 from '@site/docs/console/images/shiva_order_clusto_04.png' +import shivaOrdersIaasSpoolDs from '@site/docs/console/images/shiva_orders_iaas_spool_ds.png' +import shivaOrdersNet_002 from '@site/docs/console/images/shiva_orders_net_002.png' +import shivaOrdersNet_003 from '@site/docs/console/images/shiva_orders_net_003.png' +import shivaOrdersNet_004 from '@site/docs/console/images/shiva_orders_net_004.png' +import shivaOrdersIaasCpoolEsx from '@site/docs/console/images/shiva_orders_iaas_cpool_esx.png' +import shivaOrdersIaasCpoolMemory from '@site/docs/console/images/shiva_orders_iaas_cpool_memory.png' ## Concept diff --git a/docs/console/status.md b/docs/console/status.md index aa9f864b..3ec0dd67 100644 --- a/docs/console/status.md +++ b/docs/console/status.md @@ -1,16 +1,16 @@ --- title: Opérations planifiées et gestion des Incidents --- -import shivaInterventionMenu01 from './images/shiva_intervention_menu01.png' -import shivaInterventionMenu03 from './images/shiva_intervention_menu03.png' -import shivaInterventionMenu04 from './images/shiva_intervention_menu04.png' -import shivaInterventionMenu05 from './images/shiva_intervention_menu05.png' -import shivaIncident_001 from './images/shiva_incident_001.png' -import shivaIncident_002 from './images/shiva_incident_002.png' -import shivaIncident_003 from './images/shiva_incident_003.png' -import shivaIncident_004 from './images/shiva_incident_004.png' -import shivaIncident_005 from './images/shiva_incident_005.png' -import shivaIncident_006 from './images/shiva_incident_006.png' +import shivaInterventionMenu01 from '@site/docs/console/images/shiva_intervention_menu01.png' +import shivaInterventionMenu03 from '@site/docs/console/images/shiva_intervention_menu03.png' +import shivaInterventionMenu04 from '@site/docs/console/images/shiva_intervention_menu04.png' +import shivaInterventionMenu05 from '@site/docs/console/images/shiva_intervention_menu05.png' +import shivaIncident_001 from '@site/docs/console/images/shiva_incident_001.png' +import shivaIncident_002 from '@site/docs/console/images/shiva_incident_002.png' +import shivaIncident_003 from '@site/docs/console/images/shiva_incident_003.png' +import shivaIncident_004 from '@site/docs/console/images/shiva_incident_004.png' +import shivaIncident_005 from '@site/docs/console/images/shiva_incident_005.png' +import shivaIncident_006 from '@site/docs/console/images/shiva_incident_006.png' Comme toute plateforme d'infrastructure Cloud, la plateforme Cloud Temple fait l'objet de travaux et de maintenance matérielle et logicielle régulièrement. diff --git a/docs/iaas_bare-metal/quickstart.md b/docs/iaas_bare-metal/quickstart.md index 5735d14e..314b38de 100644 --- a/docs/iaas_bare-metal/quickstart.md +++ b/docs/iaas_bare-metal/quickstart.md @@ -1,10 +1,10 @@ --- title: Guide de démarrage --- -import shivaBareMetalMenu from './images/shiva_bare-metal_menu.png' -import shivaBareMetalList from './images/shiva_bare-metal_list.png' -import shivaBareMetalDetails from './images/shiva_bare-metal_details.png' -import shivaBareMetalStoragelist from './images/shiva_bare-metal_storagelist.png' +import shivaBareMetalMenu from '@site/docs/iaas_bare-metal/images/shiva_bare-metal_menu.png' +import shivaBareMetalList from '@site/docs/iaas_bare-metal/images/shiva_bare-metal_list.png' +import shivaBareMetalDetails from '@site/docs/iaas_bare-metal/images/shiva_bare-metal_details.png' +import shivaBareMetalStoragelist from '@site/docs/iaas_bare-metal/images/shiva_bare-metal_storagelist.png' # QuickStart pour l'offre Bare Metal diff --git a/docs/iaas_opensource/quickstart.md b/docs/iaas_opensource/quickstart.md index 9b758a35..770bb79a 100644 --- a/docs/iaas_opensource/quickstart.md +++ b/docs/iaas_opensource/quickstart.md @@ -1,22 +1,22 @@ --- title: Guide de démarrage --- -import openIaasVirtualMachinesList from './images/open_iaas_virtual_machines_list.png' -import openIaasVirtualMachinesListActions from './images/open_iaas_virtual_machines_list_actions.png' -import openIaasVirtualMachineOverview from './images/open_iaas_virtual_machine_overview.png' -import openIaasVirtualMachineActions from './images/open_iaas_virtual_machine_actions.png' -import openIaasVirtualMachineOverviewInformations from './images/open_iaas_virtual_machine_overview_informations.png' -import openIaasVirtualMachineAdvancedOverview from './images/open_iaas_virtual_machine_advanced_overview.png' -import openIaasReplicationMenu from './images/open_iaas_replication_menu.png' -import openIaasReplicationPoliciesView from './images/open_iaas_replication_policies_view.png' -import openIaasReplicationPolicyForm1 from './images/open_iaas_replication_policy_form1.png' -import openIaasReplicationPolicyForm2 from './images/open_iaas_replication_policy_form2.png' -import openIaasVmReplicationSection from './images/open_iaas_vm_replication_section.png' -import openIaasReplicationPoliciesTable from './images/open_iaas_replication_policies_table.png' -import openIaasReplicationReplicasTable from './images/open_iaas_replication_replicas_table.png' -import openIaasVmConsoleBtn from './images/open_iaas_vm_console_btn.png' -import openIaasVmConsoleOpen from './images/open_iaas_vm_console_open.png' -import openIaasVmConsoleClipboard from './images/open_iaas_vm_console_clipboard.png' +import openIaasVirtualMachinesList from '@site/docs/iaas_opensource/images/open_iaas_virtual_machines_list.png' +import openIaasVirtualMachinesListActions from '@site/docs/iaas_opensource/images/open_iaas_virtual_machines_list_actions.png' +import openIaasVirtualMachineOverview from '@site/docs/iaas_opensource/images/open_iaas_virtual_machine_overview.png' +import openIaasVirtualMachineActions from '@site/docs/iaas_opensource/images/open_iaas_virtual_machine_actions.png' +import openIaasVirtualMachineOverviewInformations from '@site/docs/iaas_opensource/images/open_iaas_virtual_machine_overview_informations.png' +import openIaasVirtualMachineAdvancedOverview from '@site/docs/iaas_opensource/images/open_iaas_virtual_machine_advanced_overview.png' +import openIaasReplicationMenu from '@site/docs/iaas_opensource/images/open_iaas_replication_menu.png' +import openIaasReplicationPoliciesView from '@site/docs/iaas_opensource/images/open_iaas_replication_policies_view.png' +import openIaasReplicationPolicyForm1 from '@site/docs/iaas_opensource/images/open_iaas_replication_policy_form1.png' +import openIaasReplicationPolicyForm2 from '@site/docs/iaas_opensource/images/open_iaas_replication_policy_form2.png' +import openIaasVmReplicationSection from '@site/docs/iaas_opensource/images/open_iaas_vm_replication_section.png' +import openIaasReplicationPoliciesTable from '@site/docs/iaas_opensource/images/open_iaas_replication_policies_table.png' +import openIaasReplicationReplicasTable from '@site/docs/iaas_opensource/images/open_iaas_replication_replicas_table.png' +import openIaasVmConsoleBtn from '@site/docs/iaas_opensource/images/open_iaas_vm_console_btn.png' +import openIaasVmConsoleOpen from '@site/docs/iaas_opensource/images/open_iaas_vm_console_open.png' +import openIaasVmConsoleClipboard from '@site/docs/iaas_opensource/images/open_iaas_vm_console_clipboard.png' ## Calcul diff --git a/docs/iaas_opensource/tutorials/backup/iaas_opensource_backup.md b/docs/iaas_opensource/tutorials/backup/iaas_opensource_backup.md index 26ec9e79..f87efee9 100644 --- a/docs/iaas_opensource/tutorials/backup/iaas_opensource_backup.md +++ b/docs/iaas_opensource/tutorials/backup/iaas_opensource_backup.md @@ -6,16 +6,16 @@ tags: - iaas_opensource_backup --- -import backupCloneOpenIaas_001 from './images/backup_clone_iaas_opensource_001.png' -import backupCloneOpenIaas_002 from './images/backup_clone_iaas_opensource_002.png' -import backupPolicyOpenIaas_001 from './images/backup_policy_iaas_opensource_001.png' -import backupPolicyOpenIaas_002 from './images/backup_policy_iaas_opensource_002.png' -import backupPolicyOpenIaas_003 from './images/backup_policy_iaas_opensource_003.png' -import backupPolicyOpenIaas_004 from './images/backup_policy_iaas_opensource_004.png' -import backupPolicyOpenIaas_005 from './images/backup_policy_iaas_opensource_005.png' -import backupPolicyOpenIaas_006 from './images/backup_policy_iaas_opensource_006.png' -import backupRestorationOpenIaas_001 from './images/backup_restoration_iaas_opensource_001.png' -import backupRestorationOpenIaas_002 from './images/backup_restoration_iaas_opensource_002.png' +import backupCloneOpenIaas_001 from '@site/docs/iaas_opensource/tutorials/backup/images/backup_clone_iaas_opensource_001.png' +import backupCloneOpenIaas_002 from '@site/docs/iaas_opensource/tutorials/backup/images/backup_clone_iaas_opensource_002.png' +import backupPolicyOpenIaas_001 from '@site/docs/iaas_opensource/tutorials/backup/images/backup_policy_iaas_opensource_001.png' +import backupPolicyOpenIaas_002 from '@site/docs/iaas_opensource/tutorials/backup/images/backup_policy_iaas_opensource_002.png' +import backupPolicyOpenIaas_003 from '@site/docs/iaas_opensource/tutorials/backup/images/backup_policy_iaas_opensource_003.png' +import backupPolicyOpenIaas_004 from '@site/docs/iaas_opensource/tutorials/backup/images/backup_policy_iaas_opensource_004.png' +import backupPolicyOpenIaas_005 from '@site/docs/iaas_opensource/tutorials/backup/images/backup_policy_iaas_opensource_005.png' +import backupPolicyOpenIaas_006 from '@site/docs/iaas_opensource/tutorials/backup/images/backup_policy_iaas_opensource_006.png' +import backupRestorationOpenIaas_001 from '@site/docs/iaas_opensource/tutorials/backup/images/backup_restoration_iaas_opensource_001.png' +import backupRestorationOpenIaas_002 from '@site/docs/iaas_opensource/tutorials/backup/images/backup_restoration_iaas_opensource_002.png' --- diff --git a/docs/iaas_opensource/tutorials/high_availability/manage_pool.md b/docs/iaas_opensource/tutorials/high_availability/manage_pool.md index 5b9d94f7..f362df8d 100644 --- a/docs/iaas_opensource/tutorials/high_availability/manage_pool.md +++ b/docs/iaas_opensource/tutorials/high_availability/manage_pool.md @@ -1,12 +1,12 @@ --- title: Gestion du Pool --- -import open_iaas_pool_ha_how_to_find from '../images/open_iaas_pool_ha_how_to_find.png' -import open_iaas_pool_enable_ha from '../images/open_iaas_pool_enable_ha.png' -import open_iaas_pool_ha_enabled from '../images/open_iaas_pool_ha_enabled.png' -import open_iaas_pool_ha_how_to_modify from '../images/open_iaas_pool_ha_how_to_modify.png' -import open_iaas_pool_ha_error from '../images/open_iaas_pool_ha_error.png' -import open_iaas_pool_ha_vm_errors from '../images/open_iaas_pool_ha_vm_errors.png' +import open_iaas_pool_ha_how_to_find from '@site/docs/iaas_opensource/tutorials/images/open_iaas_pool_ha_how_to_find.png' +import open_iaas_pool_enable_ha from '@site/docs/iaas_opensource/tutorials/images/open_iaas_pool_enable_ha.png' +import open_iaas_pool_ha_enabled from '@site/docs/iaas_opensource/tutorials/images/open_iaas_pool_ha_enabled.png' +import open_iaas_pool_ha_how_to_modify from '@site/docs/iaas_opensource/tutorials/images/open_iaas_pool_ha_how_to_modify.png' +import open_iaas_pool_ha_error from '@site/docs/iaas_opensource/tutorials/images/open_iaas_pool_ha_error.png' +import open_iaas_pool_ha_vm_errors from '@site/docs/iaas_opensource/tutorials/images/open_iaas_pool_ha_vm_errors.png' Pour gérer la haute disponibilité d'un pool, il vous suffit d'aller sur la page du pool. L'état de la haute disponibilité est directement affiché : diff --git a/docs/iaas_opensource/tutorials/high_availability/manage_vm.md b/docs/iaas_opensource/tutorials/high_availability/manage_vm.md index c93ce7a3..7f9a04a6 100644 --- a/docs/iaas_opensource/tutorials/high_availability/manage_vm.md +++ b/docs/iaas_opensource/tutorials/high_availability/manage_vm.md @@ -1,12 +1,12 @@ --- title: Gestion d'une machine virtuelle --- -import open_iaas_vm_ha_enable from '../images/open_iaas_vm_ha_enable.png' -import open_iaas_vm_ha_how_to_find from '../images/open_iaas_vm_ha_how_to_find.png' -import open_iaas_vm_ha_how_to_update from '../images/open_iaas_vm_ha_how_to_update.png' -import open_iaas_vm_ha_filter from '../images/open_iaas_vm_ha_filter.png' -import open_iaas_vm_ha_errors from '../images/open_iaas_vm_ha_errors.png' -import open_iaas_vm_ha_warning from '../images/open_iaas_vm_ha_warning.png' +import open_iaas_vm_ha_enable from '@site/docs/iaas_opensource/tutorials/images/open_iaas_vm_ha_enable.png' +import open_iaas_vm_ha_how_to_find from '@site/docs/iaas_opensource/tutorials/images/open_iaas_vm_ha_how_to_find.png' +import open_iaas_vm_ha_how_to_update from '@site/docs/iaas_opensource/tutorials/images/open_iaas_vm_ha_how_to_update.png' +import open_iaas_vm_ha_filter from '@site/docs/iaas_opensource/tutorials/images/open_iaas_vm_ha_filter.png' +import open_iaas_vm_ha_errors from '@site/docs/iaas_opensource/tutorials/images/open_iaas_vm_ha_errors.png' +import open_iaas_vm_ha_warning from '@site/docs/iaas_opensource/tutorials/images/open_iaas_vm_ha_warning.png' En plus de la gestion du pool, les machines virtuelles doivent également être configurées. Pour voir la configuration de la machine virtuelle, il vous suffit d'aller dans les options avancées : diff --git a/docs/iaas_vmware/quickstart.md b/docs/iaas_vmware/quickstart.md index 2969be3b..e7a9a6fc 100644 --- a/docs/iaas_vmware/quickstart.md +++ b/docs/iaas_vmware/quickstart.md @@ -1,56 +1,56 @@ --- title: Guide de démarrage --- -import shivaVmHome from './images/shiva_vm_home.png' -import shivaVmHomeDesc from './images/shiva_vm_home_desc.png' -import shivaVmHomeAlarme from './images/shiva_vm_home_alarme.png' -import shivaVmActions from './images/shiva_vm_actions.png' -import shivaVmInformations from './images/shiva_vm_informations.png' -import shivaVmBandeauRapide from './images/shiva_vm_bandeau_rapide.png' -import shivaVmVueRapide from './images/shiva_vm_vue_rapide.png' -import shivaVmInfosGenerales from './images/shiva_vm_infos_generales.png' -import shivaVmInfosAvancees from './images/shiva_vm_infos_avancees.png' -import shivaEditCpuRam from './images/shiva_edit_cpu_ram.png' -import shivaVmDiskctrl_001 from './images/shiva_vm_diskctrl_001.png' -import shivaCpool_010 from './images/shiva_cpool_010.png' -import shivaCpool_011 from './images/shiva_cpool_011.png' -import shivaCpool_012 from './images/shiva_cpool_012.png' -import shivaCatalogs from './images/shiva_catalogs.png' -import shivaCatalogs_002 from './images/shiva_catalogs_002.png' -import shivaVmTemplate_002 from './images/shiva_vm_template_002.png' -import shivaVmTemplate_001 from './images/shiva_vm_template_001.png' -import shivaVmAdv_001 from './images/shiva_vm_adv_001.png' -import shivaVmAdv_002 from './images/shiva_vm_adv_002.png' -import shivaVmAdv_003 from './images/shiva_vm_adv_003.png' -import shivaVmAdv_004 from './images/shiva_vm_adv_004.png' -import shivaCpool_001 from './images/shiva_cpool_001.png' -import shivaEsx_001 from './images/shiva_esx_001.png' -import shivaEsx_002 from './images/shiva_esx_002.png' -import shivaCpool_003 from './images/shiva_cpool_003.png' -import shivaCpool_004 from './images/shiva_cpool_004.png' -import shivaCpool_005 from './images/shiva_cpool_005.png' -import shivaCpool_009 from './images/shiva_cpool_009.png' -import shivaCpool_007 from './images/shiva_cpool_007.png' -import shivaCpool_008Build from './images/shiva_cpool_008_build.png' -import shivaCpool_008Firm from './images/shiva_cpool_008_firm.png' -import shivaCpool_006 from './images/shiva_cpool_006.png' -import shivaSupport from '../console/images/shiva_support.png' -import shivaVmPolitiquesBackupAssignMandatory from './images/shiva_vm_politiques_backup_assign_mandatory.png' -import shivaVmPolitiquesBackup from './images/shiva_vm_politiques_backup.png' -import shivaVmDisquesVirtuelsPolitiques from './images/shiva_vm_disques_virtuels_politiques.png' -import shivaVmPolitiquesBackupExecute from './images/shiva_vm_politiques_backup_execute.png' -import shivaVmPolitiquesBackupExecute2 from './images/shiva_vm_politiques_backup_execute2.png' -import shivaVmPolitiquesBackupRetirer from './images/shiva_vm_politiques_backup_retirer.png' -import shivaVmPolitiquesBackupRetirerImpossible from './images/shiva_vm_politiques_backup_retirer_impossible.png' -import shivaBackupHeld_001 from './images/shiva_backup_held_001.png' -import shivaBackupHeld_002 from './images/shiva_backup_held_002.png' -import shivaVmBackupRestaurer from './images/shiva_vm_backup_restaurer.png' -import shivaVmBackupTest from './images/shiva_vm_backup_test.png' -import shivaVmBackup_2prod from './images/shiva_vm_backup_2prod.png' -import iaasVmwareClusterProvisionedMemory from './images/iaas_vmware_cluster_provisioned_memory.png' -import iaasVmwareClusterUsedMemory from './images/iaas_vmware_cluster_used_memory.png' -import iaasVmwareClusterWorstCaseAllocationMemory from './images/iaas_vmware_cluster_worst_case_allocation_memory.png' -import iaasVmwareEsxMemory from './images/iaas_vmware_esx_memory.png' +import shivaVmHome from '@site/docs/iaas_vmware/images/shiva_vm_home.png' +import shivaVmHomeDesc from '@site/docs/iaas_vmware/images/shiva_vm_home_desc.png' +import shivaVmHomeAlarme from '@site/docs/iaas_vmware/images/shiva_vm_home_alarme.png' +import shivaVmActions from '@site/docs/iaas_vmware/images/shiva_vm_actions.png' +import shivaVmInformations from '@site/docs/iaas_vmware/images/shiva_vm_informations.png' +import shivaVmBandeauRapide from '@site/docs/iaas_vmware/images/shiva_vm_bandeau_rapide.png' +import shivaVmVueRapide from '@site/docs/iaas_vmware/images/shiva_vm_vue_rapide.png' +import shivaVmInfosGenerales from '@site/docs/iaas_vmware/images/shiva_vm_infos_generales.png' +import shivaVmInfosAvancees from '@site/docs/iaas_vmware/images/shiva_vm_infos_avancees.png' +import shivaEditCpuRam from '@site/docs/iaas_vmware/images/shiva_edit_cpu_ram.png' +import shivaVmDiskctrl_001 from '@site/docs/iaas_vmware/images/shiva_vm_diskctrl_001.png' +import shivaCpool_010 from '@site/docs/iaas_vmware/images/shiva_cpool_010.png' +import shivaCpool_011 from '@site/docs/iaas_vmware/images/shiva_cpool_011.png' +import shivaCpool_012 from '@site/docs/iaas_vmware/images/shiva_cpool_012.png' +import shivaCatalogs from '@site/docs/iaas_vmware/images/shiva_catalogs.png' +import shivaCatalogs_002 from '@site/docs/iaas_vmware/images/shiva_catalogs_002.png' +import shivaVmTemplate_002 from '@site/docs/iaas_vmware/images/shiva_vm_template_002.png' +import shivaVmTemplate_001 from '@site/docs/iaas_vmware/images/shiva_vm_template_001.png' +import shivaVmAdv_001 from '@site/docs/iaas_vmware/images/shiva_vm_adv_001.png' +import shivaVmAdv_002 from '@site/docs/iaas_vmware/images/shiva_vm_adv_002.png' +import shivaVmAdv_003 from '@site/docs/iaas_vmware/images/shiva_vm_adv_003.png' +import shivaVmAdv_004 from '@site/docs/iaas_vmware/images/shiva_vm_adv_004.png' +import shivaCpool_001 from '@site/docs/iaas_vmware/images/shiva_cpool_001.png' +import shivaEsx_001 from '@site/docs/iaas_vmware/images/shiva_esx_001.png' +import shivaEsx_002 from '@site/docs/iaas_vmware/images/shiva_esx_002.png' +import shivaCpool_003 from '@site/docs/iaas_vmware/images/shiva_cpool_003.png' +import shivaCpool_004 from '@site/docs/iaas_vmware/images/shiva_cpool_004.png' +import shivaCpool_005 from '@site/docs/iaas_vmware/images/shiva_cpool_005.png' +import shivaCpool_009 from '@site/docs/iaas_vmware/images/shiva_cpool_009.png' +import shivaCpool_007 from '@site/docs/iaas_vmware/images/shiva_cpool_007.png' +import shivaCpool_008Build from '@site/docs/iaas_vmware/images/shiva_cpool_008_build.png' +import shivaCpool_008Firm from '@site/docs/iaas_vmware/images/shiva_cpool_008_firm.png' +import shivaCpool_006 from '@site/docs/iaas_vmware/images/shiva_cpool_006.png' +import shivaSupport from '@site/docs/console/images/shiva_support.png' +import shivaVmPolitiquesBackupAssignMandatory from '@site/docs/iaas_vmware/images/shiva_vm_politiques_backup_assign_mandatory.png' +import shivaVmPolitiquesBackup from '@site/docs/iaas_vmware/images/shiva_vm_politiques_backup.png' +import shivaVmDisquesVirtuelsPolitiques from '@site/docs/iaas_vmware/images/shiva_vm_disques_virtuels_politiques.png' +import shivaVmPolitiquesBackupExecute from '@site/docs/iaas_vmware/images/shiva_vm_politiques_backup_execute.png' +import shivaVmPolitiquesBackupExecute2 from '@site/docs/iaas_vmware/images/shiva_vm_politiques_backup_execute2.png' +import shivaVmPolitiquesBackupRetirer from '@site/docs/iaas_vmware/images/shiva_vm_politiques_backup_retirer.png' +import shivaVmPolitiquesBackupRetirerImpossible from '@site/docs/iaas_vmware/images/shiva_vm_politiques_backup_retirer_impossible.png' +import shivaBackupHeld_001 from '@site/docs/iaas_vmware/images/shiva_backup_held_001.png' +import shivaBackupHeld_002 from '@site/docs/iaas_vmware/images/shiva_backup_held_002.png' +import shivaVmBackupRestaurer from '@site/docs/iaas_vmware/images/shiva_vm_backup_restaurer.png' +import shivaVmBackupTest from '@site/docs/iaas_vmware/images/shiva_vm_backup_test.png' +import shivaVmBackup_2prod from '@site/docs/iaas_vmware/images/shiva_vm_backup_2prod.png' +import iaasVmwareClusterProvisionedMemory from '@site/docs/iaas_vmware/images/iaas_vmware_cluster_provisioned_memory.png' +import iaasVmwareClusterUsedMemory from '@site/docs/iaas_vmware/images/iaas_vmware_cluster_used_memory.png' +import iaasVmwareClusterWorstCaseAllocationMemory from '@site/docs/iaas_vmware/images/iaas_vmware_cluster_worst_case_allocation_memory.png' +import iaasVmwareEsxMemory from '@site/docs/iaas_vmware/images/iaas_vmware_esx_memory.png' ## Calcul diff --git a/docs/iaas_vmware/tutorials/backup/iaas_backup.md b/docs/iaas_vmware/tutorials/backup/iaas_backup.md index a75224fd..d6acfa3a 100644 --- a/docs/iaas_vmware/tutorials/backup/iaas_backup.md +++ b/docs/iaas_vmware/tutorials/backup/iaas_backup.md @@ -5,22 +5,22 @@ tags: - tutorials - iaas_backup --- -import backupCloneIaas_001 from './images/backup_clone_iaas_001.png' -import backupCloneIaas_002 from './images/backup_clone_iaas_002.png' -import backupRestoIaas_001 from './images/backup_resto_iaas_001.png' -import backupCloneIaas_004 from './images/backup_clone_iaas_004.png' -import backupPolicyIaas_001 from './images/backup_policy_iaas_001.png' -import backupPolicyIaas_002 from './images/backup_policy_iaas_002.png' -import backupPolicyIaas_003 from './images/backup_policy_iaas_003.png' -import backupPolicyIaas_006 from './images/backup_policy_iaas_006.png' -import backupPolicyIaas_005 from './images/backup_policy_iaas_005.png' -import backupPolicyIaas_004 from './images/backup_policy_iaas_004.png' -import backupCloneIaas_003 from './images/backup_clone_iaas_003.png' -import backupPolicyIaas_007 from './images/backup_policy_iaas_007.png' -import backupRestoreIaas_001 from './images/backup_restore_iaas_001.png' -import backupRestoreIaas_003 from './images/backup_restore_iaas_003.png' -import backupRestoreIaas_002 from './images/backup_restore_iaas_002.png' -import backupInvIaas_001 from './images/backup_inv_iaas_001.png' +import backupCloneIaas_001 from '@site/docs/iaas_vmware/tutorials/backup/images/backup_clone_iaas_001.png' +import backupCloneIaas_002 from '@site/docs/iaas_vmware/tutorials/backup/images/backup_clone_iaas_002.png' +import backupRestoIaas_001 from '@site/docs/iaas_vmware/tutorials/backup/images/backup_resto_iaas_001.png' +import backupCloneIaas_004 from '@site/docs/iaas_vmware/tutorials/backup/images/backup_clone_iaas_004.png' +import backupPolicyIaas_001 from '@site/docs/iaas_vmware/tutorials/backup/images/backup_policy_iaas_001.png' +import backupPolicyIaas_002 from '@site/docs/iaas_vmware/tutorials/backup/images/backup_policy_iaas_002.png' +import backupPolicyIaas_003 from '@site/docs/iaas_vmware/tutorials/backup/images/backup_policy_iaas_003.png' +import backupPolicyIaas_006 from '@site/docs/iaas_vmware/tutorials/backup/images/backup_policy_iaas_006.png' +import backupPolicyIaas_005 from '@site/docs/iaas_vmware/tutorials/backup/images/backup_policy_iaas_005.png' +import backupPolicyIaas_004 from '@site/docs/iaas_vmware/tutorials/backup/images/backup_policy_iaas_004.png' +import backupCloneIaas_003 from '@site/docs/iaas_vmware/tutorials/backup/images/backup_clone_iaas_003.png' +import backupPolicyIaas_007 from '@site/docs/iaas_vmware/tutorials/backup/images/backup_policy_iaas_007.png' +import backupRestoreIaas_001 from '@site/docs/iaas_vmware/tutorials/backup/images/backup_restore_iaas_001.png' +import backupRestoreIaas_003 from '@site/docs/iaas_vmware/tutorials/backup/images/backup_restore_iaas_003.png' +import backupRestoreIaas_002 from '@site/docs/iaas_vmware/tutorials/backup/images/backup_restore_iaas_002.png' +import backupInvIaas_001 from '@site/docs/iaas_vmware/tutorials/backup/images/backup_inv_iaas_001.png' #### Comment cloner une machine virtuelle ? diff --git a/docs/iaas_vmware/tutorials/deploy_vm_template.md b/docs/iaas_vmware/tutorials/deploy_vm_template.md index 1b71eedc..c4f06489 100644 --- a/docs/iaas_vmware/tutorials/deploy_vm_template.md +++ b/docs/iaas_vmware/tutorials/deploy_vm_template.md @@ -4,9 +4,9 @@ tags: - iaas_vmware - tutorials --- -import shivaCatalogsCharger from './images/shiva_catalogs_charger.png'; -import shivaCatalogsAjout from './images/shiva_catalogs_ajout.png'; -import shivaCatalogsDeployer from './images/shiva_catalogs_deployer.png'; +import shivaCatalogsCharger from '@site/docs/iaas_vmware/tutorials/images/shiva_catalogs_charger.png'; +import shivaCatalogsAjout from '@site/docs/iaas_vmware/tutorials/images/shiva_catalogs_ajout.png'; +import shivaCatalogsDeployer from '@site/docs/iaas_vmware/tutorials/images/shiva_catalogs_deployer.png'; Ce guide va vous permettre de déployer en moins de 5 minutes vos premières instances sur le Cloud de Confiance. diff --git a/docs/iaas_vmware/tutorials/deploy_vm_terraform.md b/docs/iaas_vmware/tutorials/deploy_vm_terraform.md index bd02bfa8..ebbf6523 100644 --- a/docs/iaas_vmware/tutorials/deploy_vm_terraform.md +++ b/docs/iaas_vmware/tutorials/deploy_vm_terraform.md @@ -4,8 +4,8 @@ tags: - iaas_vmware - tutorials --- -import statusCloudInit from './images/status_cloud_init.png'; -import cloudInitOutput from './images/cloud-init-output.png'; +import statusCloudInit from '@site/docs/iaas_vmware/tutorials/images/status_cloud_init.png'; +import cloudInitOutput from '@site/docs/iaas_vmware/tutorials/images/cloud-init-output.png'; Ce guide va vous permettre de déployer en moins de 5 minutes vos premières instances sur le Cloud de Confiance. diff --git a/docs/iaas_vmware/tutorials/vm_encryption.md b/docs/iaas_vmware/tutorials/vm_encryption.md index b1fbef49..d6df2573 100644 --- a/docs/iaas_vmware/tutorials/vm_encryption.md +++ b/docs/iaas_vmware/tutorials/vm_encryption.md @@ -4,11 +4,11 @@ tags: - iaas_vmware - tutorials --- -import shivaHsmKms_000 from './images/shiva_hsm_kms_000.png' -import shivaHsmKms_001 from './images/shiva_hsm_kms_001.png' -import shivaHsmKms_002 from './images/shiva_hsm_kms_002.png' -import shivaHsmKms_003 from './images/shiva_hsm_kms_003.png' -import shivaHsmKms_004 from './images/shiva_hsm_kms_004.png' +import shivaHsmKms_000 from '@site/docs/iaas_vmware/tutorials/images/shiva_hsm_kms_000.png' +import shivaHsmKms_001 from '@site/docs/iaas_vmware/tutorials/images/shiva_hsm_kms_001.png' +import shivaHsmKms_002 from '@site/docs/iaas_vmware/tutorials/images/shiva_hsm_kms_002.png' +import shivaHsmKms_003 from '@site/docs/iaas_vmware/tutorials/images/shiva_hsm_kms_003.png' +import shivaHsmKms_004 from '@site/docs/iaas_vmware/tutorials/images/shiva_hsm_kms_004.png' Ce tutoriel vous aide à chiffrer une machine virtuelle IaaS VMWare depuis le portail Console. diff --git a/docs/llmaas/api.md b/docs/llmaas/api.md index 53e54498..9a3a0166 100644 --- a/docs/llmaas/api.md +++ b/docs/llmaas/api.md @@ -25,31 +25,33 @@ Authorization: Bearer VOTRE_TOKEN_API Notre système de tiers est conçu comme des **enveloppes de service complètes** qui définissent trois aspects clés de votre utilisation : -1. **Un Palier d'Accès (Crédit d'Achat)** : Pour les Tiers 1 à 4, il s'agit d'un montant à régler de manière anticipée (upfront) pour activer le service et débloquer les capacités techniques et budgétaires du palier choisi. -2. **Une Limite de Budget Mensuel** : C'est le plafond de votre consommation mensuelle, vous assurant une maîtrise totale de vos coûts. -3. **Une Capacité Technique** : Ce sont les limites de débit (tokens par jour et par heure) qui garantissent une performance stable et prévisible pour votre volume d'appels. +1. **Un Palier d'Accès (Crédit d'Achat)** : Pour les Tiers 1 à 4, il s'agit d'un montant à régler de manière anticipée (upfront) pour activer le service et débloquer les capacités techniques et budgétaires du palier choisi. +2. **Une Limite de Budget Mensuel** : C'est le plafond de votre consommation mensuelle, vous assurant une maîtrise totale de vos coûts. +3. **Une Capacité Technique** : Ce sont les limites de débit (tokens par jour et par heure) qui garantissent une performance stable et prévisible pour votre volume d'appels. Le choix d'un tier est donc un équilibre entre l'investissement initial, le budget mensuel prévisionnel et la capacité technique requise. Votre consommation au sein de cette enveloppe est ensuite facturée selon les tarifs en vigueur. ### Tableau des Tiers -| Tier | Crédit d'Achat | Limite Mensuelle | Tokens Output/Heure | Tokens Output/Jour | Description | -|------|----------------|-------------------|---------------------|--------------------|-----------| -| **Tier 1** | 200 € | 1 000 € | 150 000 | 3 600 000 | Utilisation standard | -| **Tier 2** | 500 € | 3 000 € | 300 000 | 7 200 000 | Usage professionnel | -| **Tier 3** | 1 000 € | 5 000 € | 450 000 | 10 800 000 | Volume élevé | -| **Tier 4** | 4 000 € | 10 000 € | 600 000 | 14 400 000 | Entreprise | -| **Facturation Mensuelle** | N/A | Illimitée | Priorité élevée | Priorité élevée | Contact commercial | - -**Note** : Les limites de débit sont calculées sur la base des tokens de sortie. La tarification des tokens varie selon l'usage : - -- **Tokens d'entrée** : 1.90 € / million -- **Tokens de sortie (standard)** : 8.00 € / million -- **Tokens de sortie (raisonneur)** : 8.00 € / million (s'applique aux modèles les plus avancés pour les tâches complexes de type agent ou raisonnement) - -#### **Facturation Audio** - -- **Transcription Audio** : 0.01 € / minute (toute minute commencée est due) +| Tier | Crédit d'Achat | Limite Mensuelle | Tokens Output/Heure | Tokens Output/Jour | Description | +| ------------------------- | -------------- | ---------------- | ------------------- | ------------------ | -------------------- | +| **Tier 1** | 200 € | 1 000 € | 150 000 | 3 600 000 | Utilisation standard | +| **Tier 2** | 500 € | 3 000 € | 300 000 | 7 200 000 | Usage professionnel | +| **Tier 3** | 1 000 € | 5 000 € | 450 000 | 10 800 000 | Volume élevé | +| **Tier 4** | 4 000 € | 10 000 € | 600 000 | 14 400 000 | Entreprise | +| **Facturation Mensuelle** | N/A | Illimitée | Priorité élevée | Priorité élevée | Contact commercial | + +**Note** : Les limites de débit sont calculées sur la base des tokens de sortie. La tarification varie selon l'usage : + +| Type d'usage | Tarif | +| -------------------------------------- | ------------------------------------------------ | +| **Tokens d'entrée** | 1.8 € / million | +| **Tokens de sortie (chat/completion)** | 8.00 € / million | +| **Tokens de raisonnement** | 8.00 € / million | +| **Reranking** | 4.00 € / million de tokens rerankés | +| **Batch asynchrone (entrée)** | 0.9 € / million (−50% vs standard) | +| **Batch asynchrone (sortie)** | 4.00 € / million (−50% vs standard) | +| **Transcription Audio** | 0.01 € / minute (toute minute commencée est due) | ### Headers de Limite @@ -86,7 +88,7 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer VOTRE_TOKEN_API" \ -d '{ - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "messages": [ { "role": "user", @@ -100,19 +102,19 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ #### Paramètres -| Paramètre | Type | Obligatoire | Description | -|-----------|------|-------------|-------------| -| `model` | string | ✅ | ID du modèle (voir [catalogue](./models)) | -| `messages` | array | ✅ | Conversation (role: system/user/assistant) | -| `stream` | boolean | ❌ | Active le streaming (défaut: false) | -| `temperature` | float | ❌ | Créativité 0.0-2.0 (défaut: 0.7) | -| `max_tokens` | integer | ❌ | Limite de tokens (défaut: 1024) | -| `top_p` | float | ❌ | Échantillonnage nucleus 0.0-1.0 (défaut: 1.0) | -| `presence_penalty` | float | ❌ | Pénalité présence -2.0 à 2.0 (défaut: 0) | -| `frequency_penalty` | float | ❌ | Pénalité fréquence -2.0 à 2.0 (défaut: 0) | -| `user` | string | ❌ | ID utilisateur unique | -| `tools` | array | ❌ | Liste des outils que le modèle peut appeler. | -| `tool_choice`| string/object | ❌ | Contrôle si le modèle doit appeler un outil. "none", "auto", ou `{"type": "function", "function": {"name": "my_function"}}`. | +| Paramètre | Type | Obligatoire | Description | +| ------------------- | ------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------- | +| `model` | string | ✅ | ID du modèle (voir [catalogue](./models)) | +| `messages` | array | ✅ | Conversation (role: system/user/assistant) | +| `stream` | boolean | ❌ | Active le streaming (défaut: false) | +| `temperature` | float | ❌ | Créativité 0.0-2.0 (défaut: 0.7) | +| `max_tokens` | integer | ❌ | Limite de tokens (défaut: 1024) | +| `top_p` | float | ❌ | Échantillonnage nucleus 0.0-1.0 (défaut: 1.0) | +| `presence_penalty` | float | ❌ | Pénalité présence -2.0 à 2.0 (défaut: 0) | +| `frequency_penalty` | float | ❌ | Pénalité fréquence -2.0 à 2.0 (défaut: 0) | +| `user` | string | ❌ | ID utilisateur unique | +| `tools` | array | ❌ | Liste des outils que le modèle peut appeler. | +| `tool_choice` | string/object | ❌ | Contrôle si le modèle doit appeler un outil. "none", "auto", ou `{"type": "function", "function": {"name": "my_function"}}`. | #### Réponse Standard @@ -121,7 +123,7 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ "id": "chatcmpl-bc52de347f2e4068b7bde380c0f8db37", "object": "chat.completion", "created": 1749114814, - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "choices": [ { "index": 0, @@ -149,7 +151,7 @@ Si le modèle décide d'appeler un outil, la réponse aura un `finish_reason` de "id": "chatcmpl-9f27a53f52b44a9693753f2a5e1f7a73", "object": "chat.completion", "created": 1749115200, - "model": "qwen3:14b", + "model": "gpt-oss:120b", "choices": [ { "index": 0, @@ -182,7 +184,7 @@ Après avoir reçu une réponse `tool_calls`, vous devez exécuter l'outil de vo ```json { - "model": "qwen3:14b", + "model": "gpt-oss:120b", "messages": [ { "role": "user", @@ -215,26 +217,23 @@ Après avoir reçu une réponse `tool_calls`, vous devez exécuter l'outil de vo Avec `"stream": true`, la réponse arrive token par token : **Headers de réponse :** - ``` Content-Type: text/event-stream Cache-Control: no-cache ``` **Format des événements :** - ``` -data: {"choices":[{"delta":{"content":"La"},"finish_reason":null,"index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"granite3.3:8b","object":"chat.completion.chunk"} +data: {"choices":[{"delta":{"content":"La"},"finish_reason":null,"index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"gpt-oss:120b","object":"chat.completion.chunk"} -data: {"choices":[{"delta":{"content":" photo"},"finish_reason":null,"index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"granite3.3:8b","object":"chat.completion.chunk"} +data: {"choices":[{"delta":{"content":" photo"},"finish_reason":null,"index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"gpt-oss:120b","object":"chat.completion.chunk"} -data: {"choices":[{"delta":{"content":""},"finish_reason":"stop","index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"granite3.3:8b","object":"chat.completion.chunk"} +data: {"choices":[{"delta":{"content":""},"finish_reason":"stop","index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"gpt-oss:120b","object":"chat.completion.chunk"} data: [DONE] ``` **Structure des chunks :** - - `choices[].delta.content` : Contenu incrémental - `finish_reason` : `null` pendant le streaming, puis `"stop"` - Signal de fin : `data: [DONE]` @@ -245,11 +244,11 @@ Pour analyser des images, vous pouvez envoyer une requête où le champ `content Le format pour une image est un objet avec `type: "image_url"` et un champ `image_url` contenant l'URL de l'image au format `data URI` (base64). -:::info[Note de Compatibilité] +:::info Note de Compatibilité Bien que le format standard et recommandé soit `{"type": "image_url", "image_url": {"url": "data:..."}}`, l'API supporte également par souci de flexibilité un format simplifié `{"type": "image", "image": "data:..."}`. Il est cependant conseillé d'utiliser le format `image_url` standard pour une meilleure compatibilité avec l'écosystème OpenAI. ::: -:::tip[OCR et Analyse de Documents] +:::tip OCR et Analyse de Documents Pour des tâches spécifiques d'analyse de documents (PDF, scans, tableaux), nous recommandons l'utilisation du modèle spécialisé **DeepSeek-OCR**. Voir la [documentation dédiée](./ocr). ::: @@ -285,7 +284,7 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ ### POST /v1/completions :::warning -**Note** : L'endpoint `/v1/completions` utilise le même format que `/v1/chat/completions` avec des messages. +**Note** : L'endpoint `/v1/completions` utilise le même format que `/v1/chat/completions` avec des messages. Pour la complétion de texte simple, utilisez un message user avec votre prompt. ::: @@ -298,7 +297,7 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/completions" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer VOTRE_TOKEN_API" \ -d '{ - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "messages": [ { "role": "user", @@ -334,13 +333,13 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/audio/transcriptions" \ #### Paramètres -| Paramètre | Type | Obligatoire | Description | -|-----------|------|-------------|-------------| -| `file` | binary | ✅ | Fichier audio (wav, mp3, m4a). | -| `language` | string | ❌ | Code langue ISO 639-1 (ex: "fr"). Détection automatique si non fourni. | -| `initial_prompt` | string | ❌ | Contexte ou mots spécifiques pour améliorer la précision de la transcription. | -| `task` | string | ❌ | Tâche à effectuer : `transcribe` (défaut) ou `translate` (traduire en anglais). | -| `response_format` | string | ❌ | `json` (défaut, équivalent à `verbose_json`). Les formats `text`, `srt`, `vtt` ne sont pas supportés actuellement. | +| Paramètre | Type | Obligatoire | Description | +| ----------------- | ------ | ----------- | ------------------------------------------------------------------------------------------------------------------ | +| `file` | binary | ✅ | Fichier audio (wav, mp3, m4a). | +| `language` | string | ❌ | Code langue ISO 639-1 (ex: "fr"). Détection automatique si non fourni. | +| `initial_prompt` | string | ❌ | Contexte ou mots spécifiques pour améliorer la précision de la transcription. | +| `task` | string | ❌ | Tâche à effectuer : `transcribe` (défaut) ou `translate` (traduire en anglais). | +| `response_format` | string | ❌ | `json` (défaut, équivalent à `verbose_json`). Les formats `text`, `srt`, `vtt` ne sont pas supportés actuellement. | #### Réponse (`json`) @@ -365,6 +364,7 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/audio/transcriptions" \ } ``` + ### POST /v1/embeddings Crée un vecteur d'embedding représentant le texte d'entrée. @@ -383,10 +383,10 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/embeddings" \ #### Paramètres -| Paramètre | Type | Obligatoire | Description | -|-----------|------|-------------|-------------| -| `model` | string | ✅ | ID du modèle d'embedding (voir [catalogue](./models)) | -| `input` | string or array of strings | ✅ | Le texte ou la liste de textes à vectoriser. | +| Paramètre | Type | Obligatoire | Description | +| --------- | -------------------------- | ----------- | ----------------------------------------------------- | +| `model` | string | ✅ | ID du modèle d'embedding (voir [catalogue](./models)) | +| `input` | string or array of strings | ✅ | Le texte ou la liste de textes à vectoriser. | #### Réponse @@ -413,6 +413,96 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/embeddings" \ } ``` +### POST /v1/rerank + +Réordonne une liste de documents par pertinence par rapport à une requête. Compatible avec l'API Cohere (v1 et v2). + +**Facturation** : 4€ / million de tokens rerankés. Idéal pour améliorer la précision des pipelines RAG. + +#### Requête + +```bash +curl -X POST "https://api.ai.cloud-temple.com/v1/rerank" \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ + -d '{ + "model": "nvidia/llama-nemotron-rerank-vl-1b-v2", + "query": "Quelle est la capitale de la France ?", + "documents": [ + "Paris est la capitale et la plus grande ville de France.", + "Lyon est une grande ville du sud-est de la France.", + "La France est un pays d'\''Europe occidentale." + ], + "top_n": 2 + }' +``` + +#### Paramètres + +| Paramètre | Type | Obligatoire | Description | +| ----------- | ------- | ----------- | --------------------------------------------------------------------------- | +| `model` | string | ✅ | ID du modèle de reranking (voir [catalogue](./models#modèles-de-reranking)) | +| `query` | string | ✅ | La requête de recherche | +| `documents` | array | ✅ | Liste des documents à réordonner | +| `top_n` | integer | ❌ | Nombre de résultats à retourner (défaut : tous) | + +#### Réponse + +```json +{ + "id": "rerank-7f3a2b1c", + "results": [ + { + "index": 0, + "relevance_score": 0.9874, + "document": { + "text": "Paris est la capitale et la plus grande ville de France." + } + }, + { + "index": 2, + "relevance_score": 0.5231, + "document": { + "text": "La France est un pays d'Europe occidentale." + } + } + ], + "usage": { + "billed_units": { + "search_units": 3 + } + } +} +``` + +L'endpoint `/v2/rerank` (Cohere SDK v2) est également disponible avec le même format de requête. + +#### Exemple Python (SDK Cohere) + +```python +import cohere + +# Compatible avec le SDK Cohere en pointant vers l'API LLMaaS +co = cohere.Client( + api_key="VOTRE_TOKEN_API", + base_url="https://api.ai.cloud-temple.com" +) + +results = co.rerank( + model="nvidia/llama-nemotron-rerank-vl-1b-v2", + query="Quelle est la capitale de la France ?", + documents=[ + "Paris est la capitale et la plus grande ville de France.", + "Lyon est une grande ville du sud-est de la France.", + "La France est un pays d'Europe occidentale." + ], + top_n=2 +) + +for result in results.results: + print(f"Index: {result.index}, Score: {result.relevance_score:.4f}") +``` + ### GET /v1/models Liste des modèles disponibles. @@ -431,16 +521,16 @@ curl -X GET "https://api.ai.cloud-temple.com/v1/models" \ "object": "list", "data": [ { - "id": "granite3.3:8b", + "id": "gpt-oss:120b", "object": "model", "created": 1749110897, "owned_by": "CloudTemple", - "root": "granite3.3:8b", - "aliases": ["granite3.3:8b"], + "root": "gpt-oss:120b", + "aliases": ["gpt-oss:120b"], "max_model_len": 60000, "permission": [ { - "id": "modelperm-granite3.3:8b-1749110897", + "id": "modelperm-gpt-oss:120b-1749110897", "object": "model_permission", "allow_sampling": true, "allow_view": true, @@ -545,7 +635,7 @@ headers = { # Chat completion payload = { - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "messages": [ {"role": "user", "content": "Bonjour !"} ], @@ -580,7 +670,7 @@ except Exception as e: import requests import json -def stream_chat(message, model="granite3.3:8b"): +def stream_chat(message, model="gpt-oss:120b"): # Il est recommandé de protéger votre clé API en utilisant des variables d'environnement. # Exemple: API_KEY = os.getenv("LLMAAS_API_KEY") API_KEY = "VOTRE_TOKEN_API" @@ -652,7 +742,7 @@ async function chatCompletion(message) { const response = await axios.post( `${BASE_URL}/chat/completions`, { - model: 'granite3.3:8b', + model: 'gpt-oss:120b', messages: [ { role: 'user', content: message } ], @@ -694,7 +784,7 @@ async function fetchCompletion(message) { 'Authorization': `Bearer ${API_KEY}` }, body: JSON.stringify({ - model: 'granite3.3:8b', + model: 'gpt-oss:120b', messages: [ { role: 'user', content: message } ], @@ -764,7 +854,7 @@ client = OpenAI( try: response = client.chat.completions.create( - model="granite3.3:8b", + model="gpt-oss:120b", messages=[ {"role": "user", "content": "Bonjour !"} ], @@ -789,7 +879,7 @@ from langchain.schema import HumanMessage chat = ChatOpenAI( api_key="VOTRE_TOKEN_API", base_url="https://api.ai.cloud-temple.com/v1", - model="granite3.3:8b", + model="gpt-oss:120b", # Note: Les paramètres comme max_tokens sont passés via model_kwargs # pour assurer la compatibilité entre les versions de LangChain. model_kwargs={"max_tokens": 200} @@ -811,7 +901,7 @@ except Exception as e: #### Utilisation des Embeddings -:::warning[Incompatibilité avec les clients LangChain standards] +:::warning Incompatibilité avec les clients LangChain standards Actuellement, l'utilisation de l'endpoint d'embedding via les classes standards de LangChain (`langchain_openai.OpenAIEmbeddings` ou `langchain_community.OllamaEmbeddings`) présente des incompatibilités avec notre API. - `OpenAIEmbeddings` envoie des tokens pré-calculés au lieu de texte brut, ce qui est rejeté. diff --git a/docs/llmaas/batch.md b/docs/llmaas/batch.md new file mode 100644 index 00000000..346de328 --- /dev/null +++ b/docs/llmaas/batch.md @@ -0,0 +1,536 @@ +--- +title: Batch API +sidebar_position: 6 +--- + +# Batch API — Traitement Asynchrone + +:::info Disponibilité +La Batch API est en **déploiement progressif**. Vérifiez la disponibilité sur votre compte dans la [Console Cloud Temple](https://console.cloud-temple.com) ou contactez le support commercial. +::: + +## Qu'est-ce que la Batch API ? + +La **Batch API** permet de soumettre des volumes importants de requêtes de manière **asynchrone**, traitées en heures creuses. En échange d'une tolérance sur le délai de traitement (quelques heures), vous bénéficiez d'une **réduction de 50%** sur les tarifs standard. + +### Quand utiliser la Batch API ? + +| Cas d'usage | Adapté au Batch ? | +|-------------|-------------------| +| Classification/labeling de millions de documents | ✅ Idéal | +| Génération de résumés en masse | ✅ Idéal | +| Extraction d'entités sur un large corpus | ✅ Idéal | +| Vectorisation (embedding) en volume | ✅ Idéal | +| Evaluation de modèles (benchmarks) | ✅ Idéal | +| Chatbot temps réel | ❌ Utilisez `/v1/chat/completions` | +| Réponse interactive < 2 secondes | ❌ Utilisez l'API standard | +| Streaming SSE | ❌ Utilisez l'API standard | + +## Tarification + +| Usage | Batch | Standard | Économie | +|-------|-------|----------|---------| +| **Tokens d'entrée** | **0.9 € / million** | 1.8 € / million | −50% | +| **Tokens de sortie** | **4.0 € / million** | 8.0 € / million | −50% | + +### Exemple de gain + +Pour traiter 1 million de documents de 500 tokens avec des réponses de 200 tokens : +- **Standard** : (500 × 1.8 + 200 × 8) / 1 = 2 500 € +- **Batch** : (500 × 0.9 + 200 × 4) / 1 = 1 250 € +- **Économie : 1 250 € (−50%)** + +## Architecture du Pipeline Batch + +``` +1. Préparation 2. Soumission 3. Traitement +──────────────────────── ───────────────────── ───────────────────── +Créer un fichier JSONL → POST /v1/batches → Traitement asynchrone +avec N requêtes (retourne batch_id) en heures creuses + +4. Polling 5. Récupération +───────────────────────── ───────────────────────── +GET /v1/batches/{id} → GET /v1/files/{file_id} → Résultats JSONL +(statut : validating, (télécharger les + in_progress, completed) résultats) +``` + +## Format du Fichier d'Entrée (JSONL) + +Chaque ligne du fichier est une requête JSON indépendante : + +```json +{"custom_id": "req-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gpt-oss:120b", "messages": [{"role": "user", "content": "Résume ce texte : L'IA générative est..."}], "max_tokens": 200}} +{"custom_id": "req-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gpt-oss:120b", "messages": [{"role": "user", "content": "Classifie ce ticket : Mon accès VPN ne fonctionne plus."}], "max_tokens": 50}} +{"custom_id": "req-3", "method": "POST", "url": "/v1/embeddings", "body": {"model": "granite-embedding:278m", "input": "Texte à vectoriser pour la recherche sémantique."}} +``` + +### Champs obligatoires par ligne + +| Champ | Type | Description | +|-------|------|-------------| +| `custom_id` | string | Identifiant unique de votre requête (pour la récupération) | +| `method` | string | Toujours `"POST"` | +| `url` | string | Endpoint cible (ex: `/v1/chat/completions`, `/v1/embeddings`) | +| `body` | object | Corps de la requête (même format qu'un appel direct) | + +## Endpoints API + +### POST /v1/batches — Soumettre un lot + +```bash +# 1. Upload du fichier JSONL +curl -X POST "https://api.ai.cloud-temple.com/v1/files" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ + -F "purpose=batch" \ + -F "file=@requests.jsonl" +``` + +```json +{ + "id": "file-abc123xyz", + "object": "file", + "purpose": "batch", + "filename": "requests.jsonl", + "bytes": 4096, + "created_at": 1749110753 +} +``` + +```bash +# 2. Soumission du batch +curl -X POST "https://api.ai.cloud-temple.com/v1/batches" \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ + -d '{ + "input_file_id": "file-abc123xyz", + "endpoint": "/v1/chat/completions", + "completion_window": "24h" + }' +``` + +```json +{ + "id": "batch-def456uvw", + "object": "batch", + "endpoint": "/v1/chat/completions", + "input_file_id": "file-abc123xyz", + "status": "validating", + "created_at": 1749110800, + "request_counts": { + "total": 100, + "completed": 0, + "failed": 0 + } +} +``` + +### GET /v1/batches/\{batch_id\} — Vérifier le statut + +```bash +curl -X GET "https://api.ai.cloud-temple.com/v1/batches/batch-def456uvw" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" +``` + +**Statuts possibles :** + +| Statut | Description | +|--------|-------------| +| `validating` | Validation du fichier d'entrée en cours | +| `in_progress` | Traitement des requêtes en cours | +| `finalizing` | Compilation des résultats | +| `completed` | Tous les résultats sont disponibles | +| `failed` | Échec global (voir `errors`) | +| `cancelled` | Annulé par l'utilisateur | + +```json +{ + "id": "batch-def456uvw", + "status": "completed", + "output_file_id": "file-ghi789rst", + "request_counts": { + "total": 100, + "completed": 99, + "failed": 1 + }, + "completed_at": 1749118000 +} +``` + +### GET /v1/files/\{file_id\}/content — Récupérer les résultats + +```bash +curl -X GET "https://api.ai.cloud-temple.com/v1/files/file-ghi789rst/content" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ + -o results.jsonl +``` + +**Format des résultats (JSONL) :** + +```json +{"id": "batch-def456uvw", "custom_id": "req-1", "response": {"status_code": 200, "body": {"id": "chatcmpl-...", "choices": [{"message": {"role": "assistant", "content": "Résumé : L'IA générative..."}}], "usage": {"prompt_tokens": 45, "completion_tokens": 87}}}} +{"id": "batch-def456uvw", "custom_id": "req-2", "response": {"status_code": 200, "body": {"id": "chatcmpl-...", "choices": [{"message": {"role": "assistant", "content": "Catégorie: Réseau/VPN"}}], "usage": {"prompt_tokens": 22, "completion_tokens": 8}}}} +{"id": "batch-def456uvw", "custom_id": "req-3", "error": {"code": "server_error", "message": "Processing failed"}} +``` + +## Exemple Python Complet + +```python +""" +Exemple complet d'utilisation de la Batch API LLMaaS. +Cas d'usage : classification de tickets de support en masse. +""" +import httpx +import json +import time +import os +from pathlib import Path + +API_KEY = os.getenv("LLMAAS_API_KEY") +BASE_URL = "https://api.ai.cloud-temple.com/v1" +HEADERS = { + "Authorization": f"Bearer {API_KEY}", + "Content-Type": "application/json" +} + + +# ══════════════════════════════════════════════════════ +# ÉTAPE 1 : Préparer les requêtes au format JSONL +# ══════════════════════════════════════════════════════ + +def create_batch_file(tickets: list[str], output_path: str = "batch_input.jsonl") -> str: + """ + Crée un fichier JSONL avec une requête de classification par ticket. + + Args: + tickets: Liste des tickets à classifier + output_path: Chemin du fichier JSONL de sortie + + Returns: + Chemin du fichier créé + """ + with open(output_path, "w", encoding="utf-8") as f: + for i, ticket in enumerate(tickets): + request = { + "custom_id": f"ticket-{i:04d}", + "method": "POST", + "url": "/v1/chat/completions", + "body": { + "model": "gpt-oss:120b", + "messages": [ + { + "role": "system", + "content": ( + "Tu es un expert en support IT. " + "Classifie le ticket dans une seule catégorie parmi : " + "Réseau, Sécurité, Logiciel, Matériel, Accès, Autre. " + "Réponds uniquement avec le nom de la catégorie." + ) + }, + { + "role": "user", + "content": ticket + } + ], + "max_tokens": 10, + "temperature": 0.0 + } + } + f.write(json.dumps(request, ensure_ascii=False) + "\n") + + print(f"✅ Fichier JSONL créé : {output_path} ({len(tickets)} requêtes)") + return output_path + + +# ══════════════════════════════════════════════════════ +# ÉTAPE 2 : Upload du fichier +# ══════════════════════════════════════════════════════ + +def upload_batch_file(file_path: str) -> str: + """ + Upload le fichier JSONL vers l'API. + + Returns: + file_id retourné par l'API + """ + print(f"📤 Upload de {file_path}...") + + with open(file_path, "rb") as f: + with httpx.Client(timeout=60.0) as client: + response = client.post( + f"{BASE_URL}/files", + headers={"Authorization": f"Bearer {API_KEY}"}, + files={"file": (Path(file_path).name, f, "application/jsonl")}, + data={"purpose": "batch"} + ) + response.raise_for_status() + + file_id = response.json()["id"] + print(f"✅ Fichier uploadé : {file_id}") + return file_id + + +# ══════════════════════════════════════════════════════ +# ÉTAPE 3 : Soumettre le batch +# ══════════════════════════════════════════════════════ + +def submit_batch(file_id: str) -> str: + """ + Soumet un batch pour traitement asynchrone. + + Returns: + batch_id retourné par l'API + """ + print(f"🚀 Soumission du batch (fichier: {file_id})...") + + with httpx.Client(timeout=30.0) as client: + response = client.post( + f"{BASE_URL}/batches", + headers=HEADERS, + json={ + "input_file_id": file_id, + "endpoint": "/v1/chat/completions", + "completion_window": "24h" + } + ) + response.raise_for_status() + + data = response.json() + batch_id = data["id"] + print(f"✅ Batch soumis : {batch_id} (statut: {data['status']})") + return batch_id + + +# ══════════════════════════════════════════════════════ +# ÉTAPE 4 : Polling jusqu'à la complétion +# ══════════════════════════════════════════════════════ + +def wait_for_completion(batch_id: str, poll_interval: int = 30) -> dict: + """ + Interroge l'API jusqu'à la complétion du batch. + + Args: + batch_id: L'identifiant du batch + poll_interval: Intervalle de polling en secondes + + Returns: + Le statut final du batch + """ + print(f"⏳ En attente de la complétion du batch {batch_id}...") + + terminal_statuses = {"completed", "failed", "cancelled", "expired"} + + while True: + with httpx.Client(timeout=30.0) as client: + response = client.get( + f"{BASE_URL}/batches/{batch_id}", + headers=HEADERS + ) + response.raise_for_status() + + batch = response.json() + status = batch["status"] + counts = batch.get("request_counts", {}) + + print( + f" Statut: {status} | " + f"Complétées: {counts.get('completed', 0)}/{counts.get('total', 0)} | " + f"Échouées: {counts.get('failed', 0)}" + ) + + if status in terminal_statuses: + return batch + + time.sleep(poll_interval) + + +# ══════════════════════════════════════════════════════ +# ÉTAPE 5 : Récupérer et parser les résultats +# ══════════════════════════════════════════════════════ + +def download_results(output_file_id: str, save_path: str = "batch_output.jsonl") -> list[dict]: + """ + Télécharge et parse les résultats du batch. + + Returns: + Liste des résultats par custom_id + """ + print(f"📥 Téléchargement des résultats ({output_file_id})...") + + with httpx.Client(timeout=60.0) as client: + response = client.get( + f"{BASE_URL}/files/{output_file_id}/content", + headers={"Authorization": f"Bearer {API_KEY}"} + ) + response.raise_for_status() + + # Sauvegarder le fichier brut + with open(save_path, "wb") as f: + f.write(response.content) + + # Parser les résultats + results = [] + for line in response.text.strip().split("\n"): + if line: + results.append(json.loads(line)) + + print(f"✅ {len(results)} résultats récupérés → {save_path}") + return results + + +# ══════════════════════════════════════════════════════ +# PROGRAMME PRINCIPAL +# ══════════════════════════════════════════════════════ + +def main(): + # Exemples de tickets de support IT + tickets = [ + "Mon accès VPN ne fonctionne plus depuis ce matin.", + "L'imprimante du 3ème étage n'imprime plus en couleur.", + "Je ne peux pas me connecter à mon compte Office 365.", + "Mon ordinateur est très lent depuis la mise à jour d'hier.", + "Le site web de facturation interne affiche une erreur 500.", + "Besoin d'accès au dossier partagé RH sur le serveur.", + "Mon badge ne fonctionne plus à l'entrée du datacenter.", + "Outlook ne reçoit plus d'emails depuis 2 heures.", + ] + + print(f"🎯 Traitement de {len(tickets)} tickets en mode Batch\n") + + # Pipeline complet + jsonl_file = create_batch_file(tickets) + file_id = upload_batch_file(jsonl_file) + batch_id = submit_batch(file_id) + + final_status = wait_for_completion(batch_id, poll_interval=30) + + if final_status["status"] != "completed": + print(f"❌ Batch terminé avec statut : {final_status['status']}") + return + + output_file_id = final_status.get("output_file_id") + if not output_file_id: + print("❌ Aucun fichier de sortie disponible.") + return + + results = download_results(output_file_id) + + # Afficher les résultats + print("\n" + "═" * 60) + print("📊 RÉSULTATS DE CLASSIFICATION") + print("═" * 60) + + for result in results: + custom_id = result["custom_id"] + idx = int(custom_id.split("-")[1]) + + if "error" in result: + category = f"ERREUR: {result['error']['message']}" + else: + category = result["response"]["body"]["choices"][0]["message"]["content"].strip() + + ticket_text = tickets[idx] if idx < len(tickets) else "?" + print(f"[{custom_id}] {category:12s} | {ticket_text[:60]}...") + + +if __name__ == "__main__": + main() +``` + +## Gestion des Erreurs Partielles + +Le batch peut être **partiellement réussi** : certaines requêtes réussissent et d'autres échouent. + +```python +def process_results(results: list[dict]) -> tuple[list, list]: + """Sépare les succès des échecs dans les résultats.""" + successes = [] + failures = [] + + for result in results: + if "error" in result: + failures.append({ + "custom_id": result["custom_id"], + "error": result["error"] + }) + else: + response_body = result["response"]["body"] + successes.append({ + "custom_id": result["custom_id"], + "content": response_body["choices"][0]["message"]["content"], + "usage": response_body.get("usage", {}) + }) + + print(f"✅ Succès : {len(successes)} | ❌ Échecs : {len(failures)}") + return successes, failures +``` + +## Limitations et Contraintes + +| Contrainte | Valeur | +|-----------|--------| +| **Taille maximale du fichier JSONL** | 100 MB | +| **Nombre maximum de requêtes par batch** | 50 000 | +| **Délai de traitement garanti** | < 24h (typiquement 2-4h) | +| **Rétention des fichiers de résultats** | 7 jours | +| **Batches simultanés par compte** | 10 | + +:::warning Traitement asynchrone +Le batch ne garantit pas un ordre de traitement. Les résultats peuvent apparaître dans un ordre différent de l'ordre d'entrée. Utilisez le champ `custom_id` pour associer chaque résultat à sa requête originale. +::: + +## Cas d'Usage Avancés + +### Embedding en masse + +```python +# Vectorisation de 10 000 documents en batch +def create_embedding_batch(documents: list[str]) -> str: + with open("embed_batch.jsonl", "w") as f: + for i, doc in enumerate(documents): + request = { + "custom_id": f"doc-{i:05d}", + "method": "POST", + "url": "/v1/embeddings", + "body": { + "model": "granite-embedding:278m", + "input": doc[:500] # Limite de contexte du modèle + } + } + f.write(json.dumps(request) + "\n") + return "embed_batch.jsonl" +``` + +### Annulation d'un batch + +```python +def cancel_batch(batch_id: str) -> dict: + with httpx.Client(timeout=30.0) as client: + response = client.post( + f"{BASE_URL}/batches/{batch_id}/cancel", + headers=HEADERS + ) + response.raise_for_status() + return response.json() +``` + +### Liste des batches + +```python +def list_batches(limit: int = 20) -> list[dict]: + with httpx.Client(timeout=30.0) as client: + response = client.get( + f"{BASE_URL}/batches", + headers=HEADERS, + params={"limit": limit} + ) + response.raise_for_status() + return response.json()["data"] +``` + +## Ressources + +- **Code d'exemple complet** : [`exemples/simple_batch/`](https://github.com/Cloud-Temple/product-llmaas-how-to/tree/main/simple_batch) +- **Catalogue modèles** : [Modèles compatibles Batch](./models) +- **API Reference** : [Documentation API complète](./api) +- **Pricing détaillé** : [Tarification LLMaaS](./api#rate-limiting-et-facturation) diff --git a/docs/llmaas/concepts.md b/docs/llmaas/concepts.md index af6f1d58..75fa839f 100644 --- a/docs/llmaas/concepts.md +++ b/docs/llmaas/concepts.md @@ -13,21 +13,19 @@ Le service **LLMaaS** (Large Language Models as a Service) de Cloud Temple fourn ### Infrastructure Cloud Temple -import ArchitectureLLMaaS from './images/llmaas_architecture_001.png'; +import ArchitectureLLMaaS from '@site/docs/llmaas/images/llmaas_architecture_001.png'; Architecture Technique LLMaaS Cloud Temple ### Composants Principaux #### 1. **API Gateway LLMaaS** - - **Compatible OpenAI** : Intégration transparente avec écosystème existant - **Rate Limiting** : Gestion des quotas par tier de facturation - **Load Balancing** : Distribution intelligente sur 12 machines GPU - **Monitoring** : Métriques temps réel et alerting #### 2. **Service d'Authentification** - - **Tokens API sécurisés** : Rotation automatique - **Contrôle d'accès** : Permissions granulaires par modèle - **Audit trails** : Traçabilité complète des accès @@ -41,19 +39,19 @@ import ArchitectureLLMaaS from './images/llmaas_architecture_001.png'; ### Gestion des Tokens #### **Types de Tokens** - - **Tokens d'entrée** : Votre prompt et contexte - **Tokens de sortie** : Réponse générée par le modèle - **Tokens système** : Metadata et instructions #### **Calcul des Coûts** - ``` -Coût total = (Tokens entrée × 1.9€/M) + (Tokens sortie × 8€/M) + (Tokens sortie Raisonnement × 8€/M) +Chat/Completion = (Tokens entrée × 1.8€/M) + (Tokens sortie × 8€/M) + (Tokens sortie Raisonnement × 8€/M) +Reranking = Documents rerankés × 4€/M +Batch (async) = (Tokens entrée × 0.9€/M) + (Tokens sortie × 4€/M) +Audio (ASR) = 0.01€ / minute de transcription ``` #### **Optimisation** - - **Context window** : Réutilisez les conversations pour économiser - **Modèles appropriés** : Choisissez la taille selon la complexité - **Max tokens** : Limitez la longueur des réponses @@ -70,7 +68,7 @@ prompt = "Expliquez la photosynthèse" response_max = 200 # tokens max souhaités estimated_input = estimate_tokens(prompt) # ~6 tokens -total_cost = (estimated_input * 1.9 + response_max * 8) / 1_000_000 +total_cost = (estimated_input * 1.8 + response_max * 8) / 1_000_000 print(f"Coût estimé: {total_cost:.6f}€") ``` @@ -81,26 +79,23 @@ print(f"Coût estimé: {total_cost:.6f}€") Le service LLMaaS est calculé sur une infrastructure technique qui bénéficie de la **qualification SecNumCloud 3.2** de l'ANSSI, garantissant : #### **Protection des Données** - - **Chiffrement bout en bout** : TLS 1.3 pour tous les échanges - **Stockage sécurisé** : Données chiffrées au repos (AES-256) - **Isolation** : Environnements dédiés par tenant #### **Souveraineté Numérique** - - **Hébergement France** : Datacenters Cloud Temple certifiés - **Droit français** : Conformité RGPD native - **Pas d'exposition** : Aucun transfert vers clouds étrangers #### **Audit et Traçabilité** - - **Logs complets** : Toutes les interactions tracées - **Rétention** : Conservation selon politiques légales - **Compliance** : Rapports d'audit disponibles ### Contrôles de Sécurité -import SecurityControls from './images/llmaas_security_002.png'; +import SecurityControls from '@site/docs/llmaas/images/llmaas_security_002.png'; Contrôles de Sécurité LLMaaS @@ -108,27 +103,24 @@ import SecurityControls from './images/llmaas_security_002.png'; L'analyse des prompts est une fonctionnalité de sécurité **native et intégrée** à la plateforme LLMaaS. Activée par défaut, elle vise à détecter et prévenir les tentatives de "jailbreak" ou d'injection de prompts malveillants avant même qu'ils n'atteignent le modèle. Cette protection repose sur une approche multicouche. -:::tip[Contacter le support pour la désactivation] +:::tip Contacter le support pour la désactivation Il est possible de désactiver cette analyse de sécurité pour des cas d'usage très spécifiques, bien que cela ne soit pas recommandé. Pour toute question à ce sujet ou pour demander une désactivation, veuillez contacter le support Cloud Temple. ::: #### 1. Analyse Structurelle (`check_structure`) - - **Vérification JSON malformé** : Le système détecte si le prompt commence par un `{` et tente de le parser comme du JSON. Si le parsing réussit et que le JSON contient des mots-clés suspects (ex: "system", "bypass"), ou si le parsing échoue de manière inattendue, cela peut indiquer une tentative d'injection. - **Normalisation Unicode** : Le prompt est normalisé en utilisant `unicodedata.normalize('NFKC', prompt)`. Si le prompt original diffère de sa version normalisée, cela peut indiquer l'utilisation de caractères Unicode trompeurs (homoglyphes) pour contourner les filtres. Par exemple, "аdmin" (cyrillique) au lieu de "admin" (latin). #### 2. Détection de Patterns Suspects (`check_patterns`) - - Le système utilise des expressions régulières (`regex`) pour identifier des motifs connus d'attaques de prompts, et ce, dans plusieurs langues (français, anglais, chinois, japonais). - **Exemples de patterns détectés** : - - **Commandes Système** : Mots-clés comme "ignore les instructions", "ignore instructions", "忽略指令", "指示を無視". - - **Injection HTML** : Balises HTML cachées ou malveillantes, par exemple `
`, ``. - - **Injection Markdown** : Liens Markdown malveillants, par exemple `[texte](javascript:...)`, `[text](data:...)`. - - **Séquences Répétées** : Répétition excessive de mots ou de phrases comme "oublie oublie oublie", "forget forget forget". - - **Caractères Spéciaux/Mixtes** : Utilisation de caractères Unicode inhabituels ou mélange de scripts pour masquer des commandes (ex: "s\u0443stème"). + - **Commandes Système** : Mots-clés comme "ignore les instructions", "ignore instructions", "忽略指令", "指示を無視". + - **Injection HTML** : Balises HTML cachées ou malveillantes, par exemple `
`, ``. + - **Injection Markdown** : Liens Markdown malveillants, par exemple `[texte](javascript:...)`, `[text](data:...)`. + - **Séquences Répétées** : Répétition excessive de mots ou de phrases comme "oublie oublie oublie", "forget forget forget". + - **Caractères Spéciaux/Mixtes** : Utilisation de caractères Unicode inhabituels ou mélange de scripts pour masquer des commandes (ex: "s\u0443stème"). #### 3. Analyse Comportementale (`check_behavior`) - - Le load balancer maintient un historique des prompts récents. - **Détection de Fragmentation** : Il combine les prompts récents pour voir si une attaque est fragmentée sur plusieurs requêtes. Par exemple, si "ignore" est envoyé dans un prompt et "instructions" dans le suivant, le système peut les détecter ensemble. - **Détection de Répétition** : Il identifie si le même prompt est répété de manière excessive. Le seuil actuel pour la détection de répétition est de 30 prompts consécutifs identiques. @@ -140,7 +132,6 @@ Cette approche multicouche permet de détecter un large éventail d'attaques de ### Monitoring en Temps Réel Access via **Console Cloud Temple** : - - Métriques d'utilisation par modèle - Graphiques de latence et débit - Alertes sur seuils de performance @@ -167,7 +158,7 @@ client_ct = OpenAI( # Code identique ! response = client_ct.chat.completions.create( - model="granite3.3:8b", # Modèle Cloud Temple + model="gpt-oss:120b", # Modèle Cloud Temple messages=[{"role": "user", "content": "Bonjour"}] ) ``` @@ -175,21 +166,18 @@ response = client_ct.chat.completions.create( ### Écosystème Supporté #### **Frameworks IA** - - ✅ **LangChain** : Intégration native - ✅ **Haystack** : Pipeline de documents - ✅ **Semantic Kernel** : Orchestration Microsoft - ✅ **AutoGen** : Agents conversationnels #### **Outils Développement** - - ✅ **Jupyter** : Notebooks interactifs - ✅ **Streamlit** : Applications web rapides - ✅ **Gradio** : Interfaces utilisateur IA - ✅ **FastAPI** : APIs backend #### **Plateformes No-Code** - - ✅ **Zapier** : Automatisations - ✅ **Make** : Intégrations visuelles - ✅ **Bubble** : Applications web @@ -198,7 +186,7 @@ response = client_ct.chat.completions.create( ### Mise à Jour des Modèles -import ModelLifecycle from './images/llmaas_lifecycle_003.png'; +import ModelLifecycle from '@site/docs/llmaas/images/llmaas_lifecycle_003.png'; Cycle de Vie des Modèles LLMaaS @@ -220,51 +208,66 @@ Ce planning est fourni à titre indicatif et est **revu au début de chaque trim - **DMP (Date de Mise en Production)** : Date à laquelle le modèle devient disponible en production. - **DSP (Date de Fin de Support)** : Date prévisionnelle à partir de laquelle le modèle ne sera plus maintenu. Un préavis de 3 mois est respecté avant toute suppression effective. -| Modèle | Éditeur | Phase | DMP | DSP | LTS | Migration conseillée | -| :--------------------- | :------------------------ | :--------- | :--------- | :--------- | :-- | :------------------- | -| devstral:24b | Mistral AI & All Hands AI | Production | 13/06/2025 | 30/03/2026 | Non | devstral-small-2:24b | -| granite3.1-moe:2b | IBM | Production | 13/06/2025 | 30/03/2026 | Non | granite4-tiny-h:7b | -| qwen3-coder:30b | Qwen Team | Production | 02/08/2025 | 30/03/2026 | Non | qwen-coder-next:80b | -| qwen3:30b-a3b | Qwen Team | Production | 30/08/2025 | 30/03/2026 | Non | qwen3-next:80b | -| cogito:32b | Deep Cogito | Production | 13/06/2025 | 30/06/2026 | Non | gpt-oss:120b | -| gemma3:27b | Google | Production | 13/06/2025 | 30/06/2026 | Non | | -| glm-4.7-flash:30b | Zhipu AI | Production | 22/01/2026 | 30/06/2026 | Non | | -| medgemma:27b | Google | Production | 02/12/2025 | 30/06/2026 | Non | | -| ministral-3:14b | Mistral AI | Production | 30/12/2025 | 30/06/2026 | Non | | -| ministral-3:3b | Mistral AI | Production | 30/12/2025 | 30/06/2026 | Non | | -| ministral-3:8b | Mistral AI | Production | 30/12/2025 | 30/06/2026 | Non | | -| nemotron3-nano:30b | NVIDIA | Production | 04/01/2026 | 30/06/2026 | Non | | -| olmo-3:32b | AllenAI | Production | 30/12/2025 | 30/06/2026 | Non | | -| olmo-3:7b | AllenAI | Production | 30/12/2025 | 30/06/2026 | Non | | -| qwen3-omni:30b | Qwen Team | Production | 05/01/2026 | 30/06/2026 | Non | | -| qwen3-vl:235b | Qwen Team | Production | 04/01/2026 | 30/06/2026 | Non | | -| qwen3-vl:2b | Qwen Team | Production | 30/12/2025 | 30/06/2026 | Non | | -| qwen3-vl:32b | Qwen Team | Production | 30/12/2025 | 30/06/2026 | Non | | -| qwen3-vl:8b | Qwen Team | Production | 05/01/2026 | 30/06/2026 | Non | | -| rnj-1:8b | Essential AI | Production | 30/12/2025 | 30/06/2026 | Non | | -| devstral-small-2:24b | Mistral AI & All Hands AI | Production | 02/02/2026 | 30/09/2026 | Non | | -| gpt-oss:20b | OpenAI | Production | 08/08/2025 | 30/09/2026 | Non | | -| granite4-small-h:32b | IBM | Production | 03/10/2025 | 30/09/2026 | Non | | -| granite4-tiny-h:7b | IBM | Production | 03/10/2025 | 30/09/2026 | Non | | -| mistral-small3.2:24b | Mistral AI | Production | 23/06/2025 | 30/09/2026 | Non | | -| deepseek-ocr | DeepSeek AI | Production | 22/11/2025 | 30/12/2026 | Non | | -| functiongemma:270m | Google | Production | 30/12/2025 | 30/12/2026 | Non | | -| granite3.2-vision:2b | IBM | Production | 13/06/2025 | 30/12/2026 | Non | | -| qwen-coder-next:80b | Qwen Team | Production | 04/02/2026 | 30/12/2026 | Non | | -| qwen3-next:80b | Qwen Team | Production | 02/02/2026 | 30/12/2026 | Non | | -| qwen3-vl:30b | Qwen Team | Production | 30/12/2025 | 30/12/2026 | Non | | -| qwen3-vl:4b | Qwen Team | Production | 30/12/2025 | 30/12/2026 | Non | | -| qwen3:0.6b | Qwen Team | Production | 13/06/2025 | 30/12/2026 | Non | | -| translategemma:12b | Google | Production | 22/01/2026 | 30/12/2026 | Non | | -| translategemma:27b | Google | Production | 22/01/2026 | 30/12/2026 | Non | | -| translategemma:4b | Google | Production | 22/01/2026 | 30/12/2026 | Non | | -| bge-m3:567m | BAAI | Production | 18/10/2025 | 30/12/2027 | Oui | | -| embeddinggemma:300m | Google | Production | 10/09/2025 | 30/12/2027 | Oui | | -| gpt-oss:120b | OpenAI | Production | 11/11/2025 | 30/12/2027 | Oui | | -| granite-embedding:278m | IBM | Production | 13/06/2025 | 30/12/2027 | Oui | | -| llama3.3:70b | Meta | Production | 13/06/2025 | 30/12/2027 | Oui | | -| qwen3-2507-gptq:235b | Qwen Team | Production | 04/01/2026 | 30/12/2027 | Oui | | -| qwen3-2507-think:4b | Qwen Team | Production | 31/08/2025 | 30/12/2027 | Oui | | +| Modèle | Éditeur | Phase | DMP | DSP | LTS | Migration conseillée | +| :------------------------------------ | :------------------------ | :--------- | :--------- | :--------- | :-- | :------------------- | +| cogito:32b | Deep Cogito | Production | 13/06/2025 | 30/06/2026 | Non | gpt-oss:120b | +| embeddinggemma:300m | Google | Production | 10/09/2025 | 30/06/2026 | Non | | +| gemma3:27b | Google | Production | 13/06/2025 | 30/06/2026 | Non | | +| glm-4.7-flash:30b | Zhipu AI | Production | 22/01/2026 | 30/06/2026 | Non | | +| ministral-3:14b | Mistral AI | Production | 30/12/2025 | 30/06/2026 | Non | | +| ministral-3:3b | Mistral AI | Production | 30/12/2025 | 30/06/2026 | Non | | +| ministral-3:8b | Mistral AI | Production | 30/12/2025 | 30/06/2026 | Non | | +| olmo-3:32b | AllenAI | Production | 30/12/2025 | 30/06/2026 | Non | | +| olmo-3:7b | AllenAI | Production | 30/12/2025 | 30/06/2026 | Non | | +| qwen3-omni:30b | Qwen Team | Production | 05/01/2026 | 30/06/2026 | Non | | +| qwen3-vl:2b | Qwen Team | Production | 30/12/2025 | 30/06/2026 | Non | | +| qwen3-vl:32b | Qwen Team | Production | 30/12/2025 | 30/06/2026 | Non | | +| qwen3-vl:8b | Qwen Team | Production | 05/01/2026 | 30/06/2026 | Non | | +| rnj-1:8b | Essential AI | Production | 30/12/2025 | 30/06/2026 | Non | | +| devstral-small-2:24b | Mistral AI & All Hands AI | Production | 02/02/2026 | 30/09/2026 | Non | | +| gemma4:e2b | Google | Production | 19/04/2026 | 30/09/2026 | Non | | +| gemma4:e4b | Google | Production | 19/04/2026 | 30/09/2026 | Non | | +| gpt-oss:20b | OpenAI | Production | 08/08/2025 | 30/09/2026 | Non | | +| mistral-small3.2:24b | Mistral AI | Production | 23/06/2025 | 30/09/2026 | Non | | +| qwen3.5:4b | Qwen Team | Production | 24/03/2026 | 30/09/2026 | Non | | +| qwen3.5:9b | Qwen Team | Production | 24/03/2026 | 30/09/2026 | Non | | +| bge-reranker-large | BAAI | Production | 13/05/2026 | 30/12/2026 | Non | | +| deepseek-ocr | DeepSeek AI | Production | 22/11/2025 | 30/12/2026 | Non | | +| functiongemma:270m | Google | Production | 30/12/2025 | 30/12/2026 | Non | | +| gemma4:31b | Google | Production | 14/04/2026 | 30/12/2026 | Non | | +| granite3-guardian:2b | IBM | Production | 13/06/2025 | 30/12/2026 | Non | | +| granite3-guardian:8b | IBM | Production | 13/06/2025 | 30/12/2026 | Non | | +| granite3.2-vision:2b | IBM | Production | 13/06/2025 | 30/12/2026 | Non | | +| mistral-small4:119b | Mistral AI | Production | 13/05/2026 | 30/12/2026 | Non | | +| nemotron-3-super:120b | NVIDIA | Production | 01/04/2026 | 30/12/2026 | Non | | +| nemotron-cascade:30b | NVIDIA | Production | 01/04/2026 | 30/12/2026 | Non | | +| nemotron3-nano:30b | NVIDIA | Production | 04/01/2026 | 30/12/2026 | Non | | +| qwen-coder-next:80b | Qwen Team | Production | 04/02/2026 | 30/12/2026 | Non | | +| qwen3-embedding:0.6b | Qwen Team | Production | 14/05/2026 | 30/12/2026 | Non | | +| qwen3-embedding:4b | Qwen Team | Production | 14/05/2026 | 30/12/2026 | Non | | +| qwen3-embedding:8b | Qwen Team | Production | 14/05/2026 | 30/12/2026 | Non | | +| qwen3-next:80b | Qwen Team | Production | 02/02/2026 | 30/12/2026 | Non | | +| qwen3-reranker:0.6b | Qwen Team | Production | 13/05/2026 | 30/12/2026 | Non | | +| qwen3-reranker:4b | Qwen Team | Production | 13/05/2026 | 30/12/2026 | Non | | +| qwen3-vl:235b | Qwen Team | Production | 04/01/2026 | 30/12/2026 | Non | | +| qwen3-vl:30b | Qwen Team | Production | 30/12/2025 | 30/12/2026 | Non | | +| qwen3-vl:4b | Qwen Team | Production | 30/12/2025 | 30/12/2026 | Non | | +| qwen3.5:0.8b | Qwen Team | Production | 24/03/2026 | 30/12/2026 | Non | | +| qwen3.6:27b | Qwen Team | Production | 01/05/2026 | 30/12/2026 | Non | | +| qwen3.6:35b | Qwen Team | Production | 01/05/2026 | 30/12/2026 | Non | | +| qwen3:0.6b | Qwen Team | Production | 13/06/2025 | 30/12/2026 | Oui | | +| translategemma:12b | Google | Production | 22/01/2026 | 30/12/2026 | Non | | +| translategemma:27b | Google | Production | 22/01/2026 | 30/12/2026 | Non | | +| translategemma:4b | Google | Production | 22/01/2026 | 30/12/2026 | Non | | +| voxtral | Mistral AI | Production | 01/04/2026 | 30/12/2026 | Non | | +| z-image:16b | Community | Production | 01/04/2026 | 30/12/2026 | Non | | +| nvidia/llama-nemotron-rerank-vl-1b-v2 | NVIDIA | Production | 13/05/2026 | 30/06/2027 | Non | | +| bge-m3:567m | BAAI | Production | 18/10/2025 | 30/12/2027 | Oui | | +| gpt-oss:120b | OpenAI | Production | 11/11/2025 | 30/12/2027 | Oui | | +| granite-embedding:278m | IBM | Production | 13/06/2025 | 30/12/2027 | Oui | | +| llama3.3:70b | Meta | Production | 13/06/2025 | 30/12/2027 | Oui | | +| qwen3-2507:235b | Qwen Team | Production | 04/01/2026 | 30/12/2027 | Oui | | +| qwen3-2507-think:4b | Qwen Team | Production | 31/08/2025 | 30/12/2027 | Oui | | ### Légende @@ -284,14 +287,20 @@ Le monde des LLMs évolue très rapidement. Pour garantir à nos clients l'accè | Modèle | Phase | Date de Dépréciation | | :----------------------- | :------- | :------------------- | +| devstral:24b | Déprécié | 30/03/2026 | +| granite3.1-moe:2b | Déprécié | 30/03/2026 | +| granite4-small-h:32b | Déprécié | 15/05/2026 | +| granite4-tiny-h:7b | Déprécié | 15/05/2026 | +| medgemma:27b | Déprécié | 15/05/2026 | +| qwen3-2507-gptq:235b | Déprécié | 15/05/2026 | +| qwen3-coder:30b | Déprécié | 30/03/2026 | +| qwen3:30b-a3b | Déprécié | 30/03/2026 | | deepseek-r1:14b | Déprécié | 30/12/2025 | | deepseek-r1:32b | Déprécié | 30/12/2025 | | gemma3:1b | Déprécié | 30/12/2025 | | gemma3:4b | Déprécié | 30/12/2025 | -| qwen3:0.6b | Déprécié | 30/12/2025 | | qwen3:1.7b | Déprécié | 30/12/2025 | | qwen3:14b | Déprécié | 30/12/2025 | -| qwen3:30b-a3b | Déprécié | 30/12/2025 | | qwen3:4b | Déprécié | 30/12/2025 | | qwen3:8b | Déprécié | 30/12/2025 | | qwen3:32b | Déprécié | 30/12/2025 | @@ -321,121 +330,6 @@ Le monde des LLMs évolue très rapidement. Pour garantir à nos clients l'accè | qwen2.5:3b | Déprécié | 17/10/2025 | | deepseek-r1:671b | Déprécié | 17/10/2025 | ---- - -## Le RAG : Interroger vos Données avec un LLM - -Ce document explique les concepts fondamentaux derrière la technique de **Retrieval-Augmented Generation (RAG)**. - -:::tip[Code d'Exemple Disponible] -Les concepts abordés ici sont illustrés dans un démonstrateur complet et fonctionnel disponible sur notre GitHub. Il constitue une excellente base de départ pour comprendre le fonctionnement pratique d'un pipeline RAG. - -➡️ **[Accéder au code du Simple RAG Demo](https://github.com/Cloud-Temple/product-llmaas-how-to/tree/main/simple_rag_demo)** -::: - -### Le problème : Les LLMs n'ont pas de mémoire à long terme - -Un grand modèle de langage (LLM) comme Mistral ou Granite est très puissant, mais il ne connaît que les données sur lesquelles il a été entraîné. Il ne connaît pas vos documents internes, les derniers articles de presse, ou les spécificités de votre métier. - -Le **RAG** est une technique qui permet de donner au LLM un "mémoire externe" en lui fournissant, au moment de la question, les extraits de documents les plus pertinents pour l'aider à formuler sa réponse. - -Le processus se déroule en deux temps : - -1. **Retrieval (Récupération)** : Trouver les bons documents. -2. **Augmented Generation (Génération Augmentée)** : Utiliser ces documents pour générer une réponse. - -C'est cette étape de **Retrieval** qui est au cœur de notre sujet. Comment un ordinateur parvient-il à "comprendre" qu'une question et un paragraphe parlent de la même chose ? La magie opère grâce aux **vecteurs**. - -![Schéma conceptuel du RAG](./images/rag_concept_overview.png) - -### Étape 1 : L'Embedding : Transformer les Mots en Nombres - -Un ordinateur ne comprend pas les mots, mais il est excellent pour manipuler les nombres. L'**embedding** est le processus qui traduit un texte (un mot, une phrase, un document) en une liste de nombres, appelée **vecteur**. - -:::tip[Qu'est-ce qu'un vecteur ?] -En termes simples, un vecteur est une liste de nombres qui représente un point dans un espace à plusieurs dimensions. Chaque nombre dans le vecteur correspond à une coordonnée sur un "axe" de cet espace. Pour les embeddings de texte, ces axes ne sont pas `x`, `y`, `z` mais des dimensions sémantiques abstraites (par exemple, un axe pourrait représenter le concept de "royauté", un autre celui de "félin", etc.). -::: - -`"Le chat est sur le tapis."` → `[-0.01, 0.98, 0.45, ..., -0.33]` - -![Exemple de vecteur d'embedding](./images/embedding_vector_example.png) - -Ce vecteur n'est pas aléatoire. Il représente la "position" du texte dans un espace sémantique multidimensionnel. Des textes ayant un sens similaire auront des vecteurs qui pointent dans des directions similaires. - -:::tip[Analogie Géographique] -Imaginez une carte géographique. "Paris" et "France" seraient très proches, tout comme "Rome" et "Italie". "Paris" serait plus éloigné de "Rome" que de "France", mais plus proche que de "Tokyo". L'embedding fait la même chose, mais avec des milliers de "dimensions" au lieu de deux, pour capturer des nuances de sens complexes. -::: - -Dans notre script, l'endpoint `/v1/embeddings` et le modèle `granite-embedding:278m` sont responsables de cette traduction. - -#### Focus sur les Modèles Granite Embedding - -Les embeddings font partie intégrante de l'écosystème LLM. Un moyen précis et efficace de représenter les mots, les requêtes et les documents sous forme numérique est essentiel pour toute une série de tâches d'entreprise, y compris la recherche sémantique, la recherche vectorielle et la RAG, ainsi que pour maintenir des bases de données vectorielles efficaces. Un modèle d'embedding efficace peut notablement améliorer la compréhension de l'intention de l'utilisateur par le système et augmenter la pertinence des informations et des sources en réponse à une requête. - -Alors que les deux dernières années ont vu la prolifération de LLM autorégressifs open source de plus en plus compétitifs pour des tâches comme la génération et la synthèse de texte, les modèles d'embedding open source publiés par les principaux fournisseurs sont relativement rares. - -##### Pourquoi Granite Embedding ? - -Les nouveaux modèles **Granite Embedding** d'IBM, que nous mettons à votre disposition, sont une évolution améliorée de la famille Slate de modèles de langage encodeurs uniquement basés sur RoBERTa. Ils se distinguent sur plusieurs points cruciaux pour un usage en entreprise : - -1. **Entraînement Éthique et Commercialement Sûr** : Alors que la grande majorité des modèles d'embedding ouverts du classement MTEB Hugging Face s'appuient sur des ensembles de données d'entraînement uniquement sous licence à des fins de recherche (comme MS-MARCO), IBM a vérifié l'éligibilité commerciale de toutes les sources de données utilisées pour entraîner Granite Embedding. -2. **Indemnisation de Propriété Intellectuelle** : Soulignant le soin apporté à son utilisation en entreprise, IBM prend en charge Granite Embedding avec le même niveau d'indemnisation non plafonnée pour les réclamations de tiers liées à la propriété intellectuelle que celle prévue pour l'utilisation d'autres modèles développés par IBM. -3. **Performance et Efficacité** : Les efforts d'IBM dans l'organisation et le filtrage des données d'entraînement n'ont pas empêché les modèles Granite Embedding de suivre le rythme des principaux modèles d'embedding open source de taille similaire. - -Les benchmarks ci-dessous illustrent deux avantages clés : - -- **Précision de la Recherche** : Le premier graphique montre que les modèles Granite (en bleu) sont très compétitifs, voire supérieurs, à des modèles de taille similaire sur des tâches de recherche sémantique (`Retrieval Tasks`). -- **Vitesse d'Inférence** : Le second graphique montre que les modèles Granite sont **nettement plus rapides** (temps par requête plus faible) que la plupart des alternatives populaires, ce qui est un avantage considérable pour les applications nécessitant des réponses en temps réel. - -![Benchmark de Performance des Modèles Granite](./images/granite_benchmark_performance.png) -*Comparaison des performances sur des tâches de recherche (BEIR) et de recherche de code (CoIR).* - -![Benchmark de Vitesse des Modèles Granite](./images/granite_benchmark_speed.png) -*Comparaison de la latence (temps par requête en secondes) entre différents modèles d'embedding.* - -C'est pour cet équilibre entre **performance, vitesse, sécurité juridique et éthique** que nous avons choisi d'intégrer le modèle `granite-embedding:278m` (la version multilingue la plus puissante) comme service d'embedding par défaut. - -### Étape 2 : La Recherche : Mesurer la Proximité Sémantique - -Une fois que notre question et tous nos documents sont transformés en vecteurs, la recherche devient un problème mathématique : **trouver le vecteur de document le plus "proche" du vecteur de la question.** - -Il existe plusieurs façons de mesurer cette "proximité". Notre script en utilise deux : la Similarité Cosinus et la Distance Euclidienne. - -#### La Similarité Cosinus (Le Standard) - -- **Concept** : Elle ne mesure pas la distance, mais l'**angle** entre deux vecteurs. Un angle faible (proche de 0°) signifie que les vecteurs pointent dans la même direction, et donc que les textes ont un sens très similaire. -- **Score** : Le cosinus d'un angle de 0° est 1 (similarité parfaite). Le cosinus d'un angle de 90° est 0 (aucune similarité). -- **Pourquoi est-elle si utilisée ?** Pour le texte, la *direction* sémantique est beaucoup plus importante que la *magnitude* (la longueur) du vecteur. La similarité cosinus ignore la magnitude et se concentre uniquement sur la direction. - -**Exemple simple en 2D :** - -- Question : `v_q = [2, 2]` -- Doc A : `v_a = [4, 4]` (même sens, plus long) -- Doc B : `v_b = [-2, 2]` (direction différente) - -Le calcul de la similarité cosinus donnera : - -- `cos(v_q, v_a) = 1.0` → Angle de 0°. Similarité parfaite. -- `cos(v_q, v_b) = 0.0` → Angle de 90°. Aucune similarité. - -![Illustration de la Similarité Cosinus](./images/cosine_similarity_concept.png) - -C'est le résultat que nous voulons : le Document A est sémantiquement identique à la question, même si sa formulation est plus longue. - -#### La Distance Euclidienne (La Règle) - -- **Concept** : C'est la distance "à vol d'oiseau" entre les points terminaux des deux vecteurs. -- **Score** : Un score de 0 signifie que les vecteurs sont identiques. Plus le score est élevé, plus ils sont éloignés. -- **Inconvénient pour le texte** : Elle est sensible à la magnitude. Dans notre exemple ci-dessus, la distance entre `v_q` et `v_a` ne serait pas nulle, car les vecteurs n'ont pas la même longueur, même s'ils ont le même sens. - -![Illustration de la Distance Euclidienne](./images/euclidean_distance_concept.png) - -### Conclusion RAG - -Le plus grand défi reste la **qualité du modèle d'embedding**. Un bon modèle produira des vecteurs qui capturent fidèlement le sens, rendant le calcul de proximité, quelle que soit la méthode, beaucoup plus fiable. - ---- - ## 💡 Bonnes Pratiques Pour tirer le meilleur parti de l'API LLMaaS, il est essentiel d'adopter des stratégies d'optimisation des coûts, de la performance et de la sécurité. @@ -444,7 +338,7 @@ Pour tirer le meilleur parti de l'API LLMaaS, il est essentiel d'adopter des str La maîtrise des coûts repose sur une utilisation intelligente des tokens et des modèles. -1. **Choix du Modèle** : N'utilisez pas un modèle surpuissant pour une tâche simple. Un modèle plus grand est plus capable, mais il est aussi plus lent et consomme beaucoup plus d'énergie, ce qui impacte directement le coût. Adaptez la taille du modèle à la complexité de votre besoin pour un équilibre optimal. +1. **Choix du Modèle** : N'utilisez pas un modèle surpuissant pour une tâche simple. Un modèle plus grand est plus capable, mais il est aussi plus lent et consomme beaucoup plus d'énergie, ce qui impacte directement le coût. Adaptez la taille du modèle à la complexité de votre besoin pour un équilibre optimal. Par exemple, pour traiter un million de tokens : - **`Gemma 3 1B`** consomme **0.15 kWh**. @@ -453,14 +347,13 @@ La maîtrise des coûts repose sur une utilisation intelligente des tokens et de ```python # Pour une classification de sentiment, un modèle compact est suffisant et économique. if task == "sentiment_analysis": - model = "granite3.3:2b" + model = "qwen3.5:0.8b" # Pour une analyse juridique complexe, un modèle plus grand est nécessaire. elif task == "legal_analysis": - model = "deepseek-r1:70b" + model = "gpt-oss:120b" ``` -2. **Gestion du Contexte** : L'historique de la conversation (`messages`) est renvoyé à chaque appel, consommant des tokens d'entrée. Pour des conversations longues, envisagez des stratégies de résumé ou de fenêtrage pour ne conserver que les informations pertinentes. - +2. **Gestion du Contexte** : L'historique de la conversation (`messages`) est renvoyé à chaque appel, consommant des tokens d'entrée. Pour des conversations longues, envisagez des stratégies de résumé ou de fenêtrage pour ne conserver que les informations pertinentes. ```python # Pour une conversation longue, on peut résumer les premiers échanges. messages = [ @@ -471,12 +364,11 @@ La maîtrise des coûts repose sur une utilisation intelligente des tokens et de ] ``` -3. **Limitation des Tokens de Sortie** : Utilisez toujours le paramètre `max_tokens` pour éviter des réponses excessivement longues et coûteuses. Fixez une limite raisonnable en fonction de ce que vous attendez. - +3. **Limitation des Tokens de Sortie** : Utilisez toujours le paramètre `max_tokens` pour éviter des réponses excessivement longues et coûteuses. Fixez une limite raisonnable en fonction de ce que vous attendez. ```python # Demander un résumé de 100 mots maximum. response = client.chat.completions.create( - model="granite3.3:8b", + model="gpt-oss:120b", messages=[{"role": "user", "content": "Résume ce document..."}], max_tokens=150, # Marge de sécurité for ~100 mots ) @@ -486,8 +378,7 @@ La maîtrise des coûts repose sur une utilisation intelligente des tokens et de La réactivité de votre application dépend de la manière dont vous gérez les appels à l'API. -1. **Requêtes Asynchrones** : Pour traiter plusieurs requêtes sans attendre la fin de chacune, utilisez des appels asynchrones. C'est particulièrement utile pour les applications backend traitant un grand volume de requêtes simultanées. - +1. **Requêtes Asynchrones** : Pour traiter plusieurs requêtes sans attendre la fin de chacune, utilisez des appels asynchrones. C'est particulièrement utile pour les applications backend traitant un grand volume de requêtes simultanées. ```python import asyncio from openai import AsyncOpenAI @@ -496,7 +387,7 @@ La réactivité de votre application dépend de la manière dont vous gérez les async def process_prompt(prompt: str): # Traite une seule requête de manière asynchrone - response = await client.chat.completions.create(model="granite3.3:8b", messages=[{"role": "user", "content": prompt}]) + response = await client.chat.completions.create(model="gpt-oss:120b", messages=[{"role": "user", "content": prompt}]) return response.choices[0].message.content async def batch_requests(prompts: list): @@ -505,12 +396,11 @@ La réactivité de votre application dépend de la manière dont vous gérez les return await asyncio.gather(*tasks) ``` -2. **Streaming pour l'Expérience Utilisateur (UX)** : Pour les interfaces utilisateur (chatbots, assistants), le streaming est essentiel. Il permet d'afficher la réponse du modèle mot par mot, donnant une impression de réactivité immédiate au lieu d'attendre la réponse complète. - +2. **Streaming pour l'Expérience Utilisateur (UX)** : Pour les interfaces utilisateur (chatbots, assistants), le streaming est essentiel. Il permet d'afficher la réponse du modèle mot par mot, donnant une impression de réactivité immédiate au lieu d'attendre la réponse complète. ```python # Affiche la réponse en temps réel dans une interface utilisateur response_stream = client.chat.completions.create( - model="granite3.3:8b", + model="gpt-oss:120b", messages=[{"role": "user", "content": "Raconte-moi une histoire."}], stream=True ) @@ -524,8 +414,7 @@ La réactivité de votre application dépend de la manière dont vous gérez les La sécurité de votre application est primordiale, surtout lorsque vous traitez des entrées utilisateur. -1. **Validation et Nettoyage des Entrées (Sanitization)** : Ne faites jamais confiance aux entrées utilisateur. Avant de les envoyer à l'API, nettoyez-les pour retirer tout code potentiellement malveillant ou instructions de "prompt injection". Limitez également leur taille pour éviter les abus. - +1. **Validation et Nettoyage des Entrées (Sanitization)** : Ne faites jamais confiance aux entrées utilisateur. Avant de les envoyer à l'API, nettoyez-les pour retirer tout code potentiellement malveillant ou instructions de "prompt injection". Limitez également leur taille pour éviter les abus. ```python def sanitize_input(user_input: str) -> str: # Exemple simple : retirer les démarqueurs de code et limiter la longueur. @@ -534,8 +423,7 @@ La sécurité de votre application est primordiale, surtout lorsque vous traitez return cleaned[:2000] # Limite la taille à 2000 caractères ``` -2. **Gestion Robuste des Erreurs** : Encadrez toujours vos appels API dans des blocs `try...except` pour gérer les erreurs réseau, les erreurs de l'API (ex: 429 Rate Limit, 500 Internal Server Error) et fournir une expérience utilisateur dégradée mais fonctionnelle. - +2. **Gestion Robuste des Erreurs** : Encadrez toujours vos appels API dans des blocs `try...except` pour gérer les erreurs réseau, les erreurs de l'API (ex: 429 Rate Limit, 500 Internal Server Error) et fournir une expérience utilisateur dégradée mais fonctionnelle. ```python from openai import APIError, APITimeoutError diff --git a/docs/llmaas/faq.md b/docs/llmaas/faq.md index 44cf5d0c..2c2c3222 100644 --- a/docs/llmaas/faq.md +++ b/docs/llmaas/faq.md @@ -1,92 +1,91 @@ -# FAQ sur le produit LLMaaS Cloud Temple +# FAQ sur l'offre de service LLMaaS Cloud Temple ## Offre et Capacités ### **Quelle est la proposition de valeur de votre service LLMaaS ?** - Notre service vous offre un accès **souverain et sécurisé** à un large catalogue de modèles d'IA de pointe, via une API compatible OpenAI. Nous gérons toute la complexité de l'infrastructure qualifiée **SecNumCloud 3.2**, vous permettant de vous concentrer sur la création de valeur pour vos applications, tout en maîtrisant vos coûts grâce à un modèle économique prévisible et en accélérant vos développements grâce à des standards ouverts. ### **Quel type de modèles proposez-vous et comment le catalogue évolue-t-il ?** - -Nous proposons un catalogue riche de 45 modèles open-source, incluant les familles **Llama (Meta), Qwen, Deepseek, Mistral, Gemma (Google), Cogito et Granite (IBM)**. Nos modèles sont spécialisés pour divers cas d'usage : - -* **Raisonnement complexe et conversationnel**. -* **Génération et analyse de code**. -* **Analyse de documents longs** (jusqu'à 128k tokens avec des modèles comme `Gemma 3` ou `Qwen2.5-VL`). -* **Capacités multimodales** (analyse d'image avec les séries `Granite Vision`, `Gemma 3`, `Qwen2.5-VL` et `Mistral Small`). -* **Support multilingue avancé** (avec des modèles comme `Llama 3.3` et la famille `Qwen`). +Nous proposons un catalogue riche de **58 modèles open-source**, incluant les familles **Llama (Meta), Qwen, Mistral, Gemma (Google), NVIDIA Nemotron, Cogito et Granite (IBM)**. Nos modèles couvrent 8 catégories : +* **Chat & Raisonnement** — dialogue, analyse, agents avec function calling. +* **Programmation & Agents** — génération de code, refactoring, agents autonomes. +* **Vision & Multimodal** — analyse d'images, OCR, vidéo, contextes jusqu'à 1M tokens. +* **Embedding** — vectorisation pour RAG sémantique (BGE-M3, Granite, Qwen3-Embedding). +* **Reranking** — réordonnancement de résultats RAG (API compatible Cohere `/v1/rerank`). +* **Sécurité** — filtrage de contenus, guardrails (Granite3-Guardian). +* **Traduction** — 55 langues (TranslateGemma). +* **Audio & Image** — transcription temps réel (Voxtral), génération d'images (z-image). Ce catalogue est **revu chaque trimestre** pour intégrer les modèles les plus performants, avec une politique de cycle de vie transparente (préavis de 3 mois avant tout retrait) pour garantir la stabilité de vos applications. ### **Quelles sont les principales capacités fonctionnelles de votre API ?** - Notre API, 100% compatible avec le standard OpenAI, vous permet de construire facilement des fonctionnalités avancées comme : - -* Des **chatbots/assistants** conversationnels. -* Des systèmes de **Recherche Augmentée par Génération (RAG)** en utilisant notre endpoint d'embedding. -* Des applications d'**analyse d'images et de documents visuels** sans OCR préalable. -* La **transcription audio** via un service dédié. +* Des **chatbots/assistants** conversationnels avec streaming et function calling. +* Des systèmes de **Recherche Augmentée par Génération (RAG)** complets : embedding (`/v1/embeddings`) + reranking (`/v1/rerank`) + génération augmentée. +* Des applications d'**analyse d'images et de documents visuels** (OCR, graphiques, PDF) sans prétraitement. +* La **transcription audio** batch ou temps réel via WebSocket. +* Le **traitement en lot (Batch API)** asynchrone pour les workloads volumineux, avec une tarification réduite de 50%. +* La **génération d'images** via API compatible OpenAI. ## Sécurité et Souveraineté ### **Comment garantissez-vous la souveraineté et la confidentialité de nos données ?** - -La souveraineté est au cœur de notre produit. Elle repose sur plusieurs piliers : - -1. **Hébergement en France** : Notre infrastructure est exclusivement en France, opérée par Cloud Temple, une société de droit français. Cela nous soustrait aux lois extraterritoriales comme le **CLOUD Act américain**. -2. **Qualification SecNumCloud 3.2** : Le plus haut visa de sécurité de l'ANSSI garantit ce positionnement. -3. **Non-conservation des données** : Nous ne stockons **ni vos prompts, ni les réponses**. Les données sont traitées de manière volatile en mémoire le temps de l'inférence. -4. **Chiffrement de bout en bout** : Toutes les communications avec l'API sont chiffrées en **TLS 1.3**. +La souveraineté est au cœur de notre offre. Elle repose sur plusieurs piliers : +1. **Hébergement en France** : Notre infrastructure est exclusivement en France, opérée par Cloud Temple, une société de droit français. Cela nous soustrait aux lois extraterritoriales comme le **CLOUD Act américain**. +2. **Qualification SecNumCloud 3.2** : Le plus haut visa de sécurité de l'ANSSI garantit ce positionnement. +3. **Non-conservation des données** : Nous ne stockons **ni vos prompts, ni les réponses**. Les données sont traitées de manière volatile en mémoire le temps de l'inférence. +4. **Chiffrement de bout en bout** : Toutes les communications avec l'API sont chiffrées en **TLS 1.3**. ### **Comment gérez-vous les accès, les droits (RBAC) et l'authentification (SSO, MFA) ?** - Notre service s'intègre à votre politique de sécurité selon un modèle de responsabilité partagée : - -* **Pour vos utilisateurs finaux** : La gestion des identités, des droits (RBAC) et de l'authentification forte (SSO, MFA) est de la responsabilité de **votre application**. -* **Pour vos administrateurs** : Les accès à la **Console Cloud Temple** pour le pilotage du service (gestion des clés, supervision) peuvent être connectés à votre SSO d'entreprise (via OpenID Connect) pour bénéficier de vos politiques de sécurité, y compris le MFA. -* **Pour vos applications** : Vous pouvez créer différentes clés d'API avec des quotas de consommation distincts pour segmenter les droits au niveau applicatif. +* **Pour vos utilisateurs finaux** : La gestion des identités, des droits (RBAC) et de l'authentification forte (SSO, MFA) est de la responsabilité de **votre application**. +* **Pour vos administrateurs** : Les accès à la **Console Cloud Temple** pour le pilotage du service (gestion des clés, supervision) peuvent être connectés à votre SSO d'entreprise (via OpenID Connect) pour bénéficier de vos politiques de sécurité, y compris le MFA. +* **Pour vos applications** : Vous pouvez créer différentes clés d'API avec des quotas de consommation distincts pour segmenter les droits au niveau applicatif. ### **Comment la plateforme est-elle sécurisée ?** - Nous appliquons une défense en profondeur : - -* **Authentification forte** par clé d'API pour chaque requête. -* **Chiffrement TLS 1.3** de tous les flux. -* **Protection réseau** par pare-feu de nouvelle génération et systèmes de détection/prévention d'intrusion (IDS/IPS). -* **"Guardrails" applicatifs** pour se prémunir contre les menaces spécifiques aux LLMs, comme l'injection de prompts et les tentatives d'exploitation des modèles. -* **Tests d'intrusion réguliers** réalisés par des auditeurs qualifiés (PASSI) dans le cadre de notre qualification SecNumCloud 3.2. +* **Authentification forte** par clé d'API pour chaque requête. +* **Chiffrement TLS 1.3** de tous les flux. +* **Protection réseau** par pare-feu de nouvelle génération et systèmes de détection/prévention d'intrusion (IDS/IPS). +* **"Guardrails" applicatifs** pour se prémunir contre les menaces spécifiques aux LLMs, comme l'injection de prompts et les tentatives d'exploitation des modèles. +* **Tests d'intrusion réguliers** réalisés par des auditeurs qualifiés (PASSI) dans le cadre de notre qualification SecNumCloud 3.2. ## Intégration et Usage ### **Comment s'intègre votre API ?** - Notre service est "API-first". Étant **compatible avec l'API OpenAI**, vous pouvez utiliser tous les SDK (Python, Node.js, etc.) et frameworks standards du marché comme **LangChain** ou **LlamaIndex** pour une intégration rapide. Nous fournissons une documentation technique complète (OpenAPI) et des exemples de code. ### **Peut-on personnaliser l'expérience utilisateur ?** - Oui, totalement. Notre service étant une API "headless", vous avez un contrôle total sur l'interface et l'expérience de vos utilisateurs finaux, y compris l'intégration de votre charte graphique et l'affichage de messages de conformité, qui sont de votre responsabilité. ### **Comment gérez-vous les risques liés à la propriété intellectuelle (PI) ?** - Vous avez le contrôle total sur les modèles que votre application appelle. Pour les cas d'usage sensibles à la PI, nous mettons en avant les modèles **Granite d'IBM**, qui bénéficient d'une **indemnisation contractuelle sans plafond** contre les réclamations de PI, une garantie unique sur le marché. ## Modèle Économique et Support ### **Quel est votre modèle économique ?** +Notre modèle est basé sur la consommation réelle pour refléter le coût de calcul exact. La tarification par type d'usage : -Notre modèle est basé sur la consommation réelle (**tokens** pour le langage, **minutes** pour l'audio) pour refléter le coût de calcul réel. Pour garantir la prévisibilité et la maîtrise budgétaire, nous proposons des **Tiers de service** avec des budgets plafonnés et des **contrats sur mesure**. Vous pouvez suivre votre consommation en temps réel depuis la Console Cloud Temple pour une transparence totale. De plus, le nombre d'utilisateurs est toujours illimité, quel que soit le plan choisi. +| Usage | Tarif | +|-------|-------| +| **Tokens d'entrée (chat)** | 1.8 € / million | +| **Tokens de sortie (chat)** | 8.0 € / million | +| **Tokens de raisonnement** | 8.0 € / million | +| **Reranking** | 4.0 € / million de tokens rerankés | +| **Batch (entrée)** | 0.9 € / million (−50%) | +| **Batch (sortie)** | 4.0 € / million (−50%) | +| **Audio ASR** | 0.01 € / minute de transcription | -### **Quel niveau de support et de SLA proposez-vous ?** +Pour garantir la prévisibilité et la maîtrise budgétaire, nous proposons des **Tiers de service** avec des budgets plafonnés et des **contrats sur mesure**. Vous pouvez suivre votre consommation en temps réel depuis la Console Cloud Temple pour une transparence totale. Le nombre d'utilisateurs est toujours illimité, quel que soit le plan choisi. -Notre produit standard inclut un support technique en Français et Anglais, accessible via notre portail client, avec un engagement de première réponse en jour ouvré. La plateforme bénéficie d'un engagement de disponibilité de **99%**. Pour les besoins les plus critiques, nos **Services Professionnels** optionnels vous donnent accès à des SLAs renforcés, incluant un support prioritaire avec un temps de réponse jusqu'à 4h pour les incidents critiques, et un accompagnement stratégique sur mesure (ateliers d'innovation, gouvernance ITIL). +### **Quel niveau de support et de SLA proposez-vous ?** +Notre offre standard inclut un support technique en Français et Anglais, accessible via notre portail client, avec un engagement de première réponse en jour ouvré. La plateforme bénéficie d'un engagement de disponibilité de **99%**. Pour les besoins les plus critiques, nos **Services Professionnels** optionnels vous donnent accès à des SLAs renforcés, incluant un support prioritaire avec un temps de réponse jusqu'à 4h pour les incidents critiques, et un accompagnement stratégique sur mesure (ateliers d'innovation, gouvernance ITIL). ### **Comment puis-je suivre l'état de santé de la plateforme LLMaaS ?** - Nous croyons en une transparence totale sur la disponibilité de nos services. Vous pouvez consulter en temps réel le statut opérationnel de chaque modèle d'IA sur notre page de statut publique : **[https://llmaas.status.cloud-temple.app/](https://llmaas.status.cloud-temple.app/)**. Cette page fournit des informations détaillées sur : - -* L'état général de la plateforme. -* La disponibilité de chaque modèle individuellement. -* Les métriques de performance comme le temps de réponse (TTFB) et le débit (tokens/s). -* L'historique des incidents pour un suivi complet. +* L'état général de la plateforme. +* La disponibilité de chaque modèle individuellement. +* Les métriques de performance comme le temps de réponse (TTFB) et le débit (tokens/s). +* L'historique des incidents pour un suivi complet. diff --git a/docs/llmaas/llmaas.md b/docs/llmaas/llmaas.md index bbf1aa05..12bc8de0 100644 --- a/docs/llmaas/llmaas.md +++ b/docs/llmaas/llmaas.md @@ -27,13 +27,12 @@ L'API LLMaaS inclut les headers suivants dans chaque réponse : ## Exemples ### Requête cURL - ```bash curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_API_KEY" \ -d '{ - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "messages": [ { "role": "user", @@ -46,7 +45,6 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ ``` ### Réponse - ```json { "backend": { @@ -65,7 +63,7 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ ], "created": 1749110753, "id": "chatcmpl-ollama-14b812ef-b21f-430c-b93c-d0d1bf653806", - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "object": "chat.completion", "usage": { "completion_tokens": 200, @@ -91,7 +89,6 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ ## URL de base L'URL de base pour toutes les requêtes API est : - ``` https://api.ai.cloud-temple.com/v1/ ``` @@ -100,7 +97,11 @@ https://api.ai.cloud-temple.com/v1/ - `/chat/completions` : Génération de réponses conversationnelles - `/completions` : Complétion de texte simple -- `/embeddings` : Crée un vecteur d'embedding représentant le texte d'entrée +- `/embeddings` : Vectorisation pour la recherche sémantique et RAG +- `/rerank` et `/v2/rerank` : Réordonnancement de résultats (compatible Cohere SDK) +- `/audio/transcriptions` : Transcription audio batch (Whisper) +- `/audio/speech` : Synthèse vocale (TTS) +- `/images/generations` : Génération d'images - `/models` : Liste des modèles disponibles ### Exemple : Liste des modèles @@ -111,18 +112,17 @@ curl -X GET "https://api.ai.cloud-temple.com/v1/models" \ ``` **Réponse** : - ```json { "object": "list", "data": [ { - "id": "granite3.3:8b", + "id": "gpt-oss:120b", "object": "model", "created": 1749110897, "owned_by": "CloudTemple", - "root": "granite3.3:8b", - "aliases": ["granite3.3:8b"], + "root": "gpt-oss:120b", + "aliases": ["gpt-oss:120b"], "parent": null, "max_model_len": 60000, "permission": [ diff --git a/docs/llmaas/models.md b/docs/llmaas/models.md index 778f28e2..55c96854 100644 --- a/docs/llmaas/models.md +++ b/docs/llmaas/models.md @@ -7,15 +7,15 @@ sidebar_position: 2 ## Vue d'ensemble -Cloud Temple LLMaaS propose **46 modèles de langage large** soigneusement sélectionnés et optimisés pour répondre aux exigences **SecNumCloud** les plus strictes. Notre catalogue couvre l'ensemble du spectre, des micro-modèles ultra-efficaces aux modèles extrêmement volumineux. +Cloud Temple LLMaaS propose **56 modèles de langage large** soigneusement sélectionnés et optimisés pour répondre aux exigences **SecNumCloud** les plus strictes. Notre catalogue couvre l'ensemble du spectre, des micro-modèles ultra-efficaces aux modèles extrêmement volumineux. ### Statistiques Globales | Métrique | Valeur | |----------|--------| -| **Nombre total de modèles** | 46 modèles | -| **Contexte minimum** | 2,048 tokens | -| **Contexte maximum** | 262,144 tokens | +| **Nombre total de modèles** | 56 modèles | +| **Contexte minimum** | 512 tokens | +| **Contexte maximum** | 1,000,000 tokens | | **Conformité** | SecNumCloud ✅ HDS ✅ Souveraineté ✅ C5 ✅ | | **Localisation** | 100% France 🇫🇷 | @@ -23,23 +23,26 @@ Cloud Temple LLMaaS propose **46 modèles de langage large** soigneusement séle | Type d'utilisation | Prix | |-------------------|------| -| **Tokens d'entrée** | 1.9€ / million de tokens | +| **Tokens d'entrée** | 1.8€ / million de tokens | | **Tokens de sortie** | 8€ / million de tokens | | **Raisonnement avancé** | 8€ / million de tokens | +| **Reranking de documents** | 4€ / million de tokens rerankés | +| **Batch asynchrone (input)** | 0.9€ / million de tokens | +| **Batch asynchrone (output)** | 4€ / million de tokens | -## Modèles de Grande Taille +## Modèles Chat & Raisonnement -### cogito:32b +Modèles généralistes pour le dialogue, l'analyse, le raisonnement et les tâches multilingues. +### cogito:32b **Deep Cogito • 32B paramètres • Contexte : 32,000 tokens** -Version avancée du modèle Cogito offrant des capacités de raisonnement et d'analyse considérablement amplifiées, conçue pour les applications les plus exigeantes en matière d'intelligence artificielle analytique. +Modèle de raisonnement analytique avancé, conçu pour la décomposition de problèmes complexes et la vérification logique. **Spécifications techniques:** - -- **Vitesse** : 20 tokens/seconde -- **Consommation** : 6.67 kWh/million tokens -- **Licence** : LLAMA 3.2 Community Licence +- **Vitesse** : 21 tokens/seconde +- **Consommation** : 6.32 kWh/million tokens +- **Licence** : [LLAMA 3.2 Community Licence](./licences/llama_3.2_community_licence.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** @@ -48,53 +51,43 @@ Version avancée du modèle Cogito offrant des capacités de raisonnement et d'a **Tags :** `Agent` `Raisonnement` `Compréhension` `Analyse` **Cas d'usage :** - -- Analyse de scénarios multi-factoriels avec évaluation probabiliste des résultats -- Résolution de problèmes scientifiques avec démonstration formelle des étapes -- Applications à haute criticité nécessitant précision et vérifiabilité des résultats -- Systèmes experts dans des domaines spécialisés (juridique, médical, technique) -- Analyse avec raisonnement multi-étapes et explicabilité complète des conclusions +- Analyse de scénarios multi-factoriels +- Résolution de problèmes scientifiques avec démonstration formelle +- Systèmes experts (juridique, médical, technique) --- ### gemma3:27b - **Google • 27B paramètres • Contexte : 120,000 tokens** -Modèle révolutionnaire de Google offrant un équilibre optimal entre puissance et efficacité, avec un rapport performance/coût exceptionnel pour les applications professionnelles exigeantes. +Modèle multimodal de Google avec vision intégrée et support de 140+ langues. Contexte de 120K tokens. **Spécifications techniques:** - -- **Vitesse** : 21 tokens/seconde -- **Consommation** : 6.35 kWh/million tokens -- **Licence** : Google Gemma Terms of Use +- **Vitesse** : 23 tokens/seconde +- **Consommation** : 5.80 kWh/million tokens +- **Licence** : [Google Gemma Terms of Use](./licences/google_gemma_terms_of_use.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** ✅ Outils/Agent • ✅ Vision • ❌ Raisonnement • ❌ Sécurité -**Tags :** `Vision` `Agent` `Grand contexte` +**Tags :** `Vision` `Agent` `Grand Contexte` **Cas d'usage :** - -- Analyse de documents avec contexte étendu jusqu'à 120K tokens (environ 400 pages) -- Indexation et recherche sémantique dans des bases documentaires volumineuses -- Traitement d'images et texte en simultané grâce aux capacités multimodales -- Extraction structurée de données à partir de PDF et documents scannés -- Intégration avec des outils externes via l'API function calling +- Analyse de documents avec contexte étendu (120K tokens) +- Traitement simultané d'images et de texte +- Extraction structurée à partir de PDF et documents scannés --- ### glm-4.7-flash:30b - **Zhipu AI • 30B paramètres • Contexte : 120,000 tokens** -Version Flash du modèle GLM-4.7, optimisée pour la vitesse et l'efficacité. +Modèle rapide avec un excellent équilibre performance/latence pour le raisonnement et l'analyse. **Spécifications techniques:** - -- **Vitesse** : 103 tokens/seconde -- **Consommation** : 1.41 kWh/million tokens +- **Vitesse** : 88 tokens/seconde +- **Consommation** : 1.58 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 @@ -104,79 +97,67 @@ Version Flash du modèle GLM-4.7, optimisée pour la vitesse et l'efficacité. **Tags :** `Agent` `Rapide` `Grand Contexte` `Multilingue` **Cas d'usage :** - - Assistants conversationnels rapides -- Analyse de documents longs (200k) +- Analyse de documents longs (120k tokens) - Tâches de raisonnement avec faible latence --- -### glm-4.7:358b -> -> ⚠️ **ATTENTION : Ce modèle est déprécié.** Modèle supprimé du catalogue le 30/03/2026. - -**Zhipu AI • 358B paramètres • Contexte : 120,000 tokens** +### gpt-oss:120b +**OpenAI • 120B paramètres • Contexte : 120,000 tokens** -Modèle polyvalent de haute performance conçu par Zhipu AI, excellent dans le raisonnement logique, la compréhension multilingue et les tâches complexes. +Modèle open-weight de pointe d'OpenAI avec raisonnement configurable et chaîne de pensée transparente. **Spécifications techniques:** - -- **Vitesse** : 18 tokens/seconde -- **Consommation** : 7.41 kWh/million tokens +- **Vitesse** : 94 tokens/seconde +- **Consommation** : 2.37 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** ✅ Outils/Agent • ❌ Vision • ✅ Raisonnement • ❌ Sécurité -**Tags :** `Agent` `Raisonnement` `Grand Contexte` `Multilingue` +**Tags :** `MoE` `Agent` `Raisonnement` `Open-Source` `Très Large` **Cas d'usage :** - -- Tâches de raisonnement complexe -- Analyse de documents longs -- Assistants conversationnels avancés +- Agents conversationnels avancés avec raisonnement complexe +- Applications nécessitant une transparence du processus de raisonnement +- Scénarios commerciaux nécessitant une licence permissive --- -### gpt-oss:120b - -**OpenAI • 120B paramètres • Contexte : 120,000 tokens** +### gpt-oss:20b +**OpenAI • 20B paramètres • Contexte : 120,000 tokens** -Modèle de langage open-weight de pointe d'OpenAI, offrant de solides performances avec une licence flexible Apache 2.0. +Version compacte du modèle OpenAI, optimisée pour l'inférence rapide avec de bonnes capacités de raisonnement. **Spécifications techniques:** - -- **Vitesse** : 104 tokens/seconde -- **Consommation** : 2.19 kWh/million tokens +- **Vitesse** : 41 tokens/seconde +- **Consommation** : 3.25 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** ✅ Outils/Agent • ❌ Vision • ✅ Raisonnement • ❌ Sécurité -**Tags :** `MoE` `Agent` `Raisonnement` `Open-Source` `Très Large` +**Tags :** `MoE` `Agent` `Raisonnement` `Open-Source` `Compact` `Rapide` **Cas d'usage :** - -- Agents conversationnels avancés avec raisonnement complexe et intégration d'outils. -- Applications nécessitant une transparence totale du processus de raisonnement (chain-of-thought). -- Scénarios commerciaux nécessitant une licence permissive (Apache 2.0). -- Fine-tuning pour des tâches spécialisées nécessitant un modèle de base puissant. +- Inférence rapide avec bonnes capacités de raisonnement +- Cas d'usage agentiques (appel de fonctions, navigation web, exécution de code) +- Applications à budget de calcul limité --- ### llama3.3:70b - **Meta • 70B paramètres • Contexte : 132,000 tokens** -Modèle multilingue de pointe développé par Meta, conçu pour exceller dans le dialogue naturel, le raisonnement complexe et la compréhension nuancée des instructions. +Modèle multilingue de Meta, excellent en dialogue naturel et compréhension nuancée dans 8 langues. **Spécifications techniques:** - -- **Vitesse** : 29 tokens/seconde -- **Consommation** : 7.85 kWh/million tokens -- **Licence** : LLAMA 3.3 Community Licence +- **Vitesse** : 10 tokens/seconde +- **Consommation** : 13.33 kWh/million tokens +- **Licence** : [LLAMA 3.3 Community Licence](./licences/llama_3.3_community_licence.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** @@ -185,850 +166,903 @@ Modèle multilingue de pointe développé par Meta, conçu pour exceller dans le **Tags :** `Agent` `Dialogue` `Multilingue` **Cas d'usage :** - -- Chatbots multilingues prenant en charge 8 langues simultanément -- Exécution d'instructions complexes enchaînées (prompt chaining) -- Traitement d'une fenêtre de dialogue de 60K tokens pour historique conversationnel -- Analyse de documents juridiques ou techniques volumineux (>100 pages) -- Génération de textes structurés avec fidélité aux consignes stylistiques +- Chatbots multilingues (8 langues) +- Analyse de documents juridiques ou techniques volumineux +- Génération de textes structurés avec fidélité stylistique --- ### ministral-3:14b - **Mistral AI • 14B paramètres • Contexte : 250,000 tokens** -Le plus puissant de la famille Ministral, conçu pour les tâches complexes sur infrastructure locale. +Le plus puissant de la famille Ministral, avec raisonnement et codage avancés. Contexte de 250K tokens. **Spécifications techniques:** - -- **Vitesse** : 31 tokens/seconde -- **Consommation** : 4.30 kWh/million tokens +- **Vitesse** : 28 tokens/seconde +- **Consommation** : 4.74 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** ✅ Outils/Agent • ❌ Vision • ✅ Raisonnement • ❌ Sécurité -**Tags :** `Haute Performance` `Edge` `Raisonnement` `Code` +**Tags :** `Haute Performance` `Raisonnement` `Code` **Cas d'usage :** - -- Résolution de problèmes complexes en local +- Résolution de problèmes complexes - Assistants de codage et d'ingénierie - Analyse approfondie de documents avec raisonnement --- -### nemotron-3-nano:30b - -**NVIDIA • 30B paramètres • Contexte : 250,000 tokens** +### ministral-3:3b +**Mistral AI • 3B paramètres • Contexte : 250,000 tokens** -Modèle NVIDIA optimisé pour le raisonnement complexe et l'utilisation d'outils, déployé avec un contexte étendu. +Modèle compact Mistral, performant malgré sa petite taille. Contexte de 250K tokens. **Spécifications techniques:** - -- **Vitesse** : 89 tokens/seconde -- **Consommation** : 1.62 kWh/million tokens -- **Licence** : NVIDIA Community License +- **Vitesse** : 22 tokens/seconde +- **Consommation** : 1.75 kWh/million tokens +- **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -✅ Outils/Agent • ❌ Vision • ✅ Raisonnement • ❌ Sécurité +✅ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité -**Tags :** `Agent` `Raisonnement` `Grand Contexte` +**Tags :** `Compact` `Efficient` **Cas d'usage :** - -- Agents autonomes complexes avec appels d'outils multiples -- Raisonnement logique et résolution de problèmes -- Analyse de documents longs avec extraction précise +- Assistants personnels réactifs +- Classification et routage rapides +- Tâches simples avec grand contexte --- -### olmo-3:32b - -**AllenAI • 32B paramètres • Contexte : 65,536 tokens** +### ministral-3:8b +**Mistral AI • 8B paramètres • Contexte : 250,000 tokens** -Le premier modèle de raisonnement entièrement ouvert à cette échelle, rivalisant avec les meilleurs modèles propriétaires. +Modèle intermédiaire Ministral avec un excellent compromis performance/vitesse. Contexte de 250K tokens. **Spécifications techniques:** - -- **Vitesse** : 19 tokens/seconde -- **Consommation** : 7.02 kWh/million tokens +- **Vitesse** : 40 tokens/seconde +- **Consommation** : 3.33 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -❌ Outils/Agent • ❌ Vision • ✅ Raisonnement • ❌ Sécurité +✅ Outils/Agent • ❌ Vision • ✅ Raisonnement • ❌ Sécurité -**Tags :** `Open-Source` `Grand Contexte` `Raisonnement` `Transparent` `Code` `Haute Performance` +**Tags :** `Efficient` `Raisonnement` **Cas d'usage :** - -- Raisonnement complexe et résolution de problèmes multi-étapes -- Développement logiciel avancé et génération de code -- Analyse approfondie nécessitant une transparence sur le processus de décision +- Assistants conversationnels avancés +- Analyse de documents et extraction d'informations +- Bon compromis vitesse/qualité --- -### olmo-3:7b - -**AllenAI • 7B paramètres • Contexte : 65,536 tokens** +### mistral-small3.2:24b +**Mistral AI • 24B paramètres • Contexte : 128,000 tokens** -Modèle "Fully Open" de référence, offrant une transparence totale (données, code, poids) et une efficacité remarquable. +Modèle Mistral avec suivi d'instructions amélioré, function calling robuste et capacités vision. Détection de contenus problématiques intégrée. **Spécifications techniques:** - -- **Vitesse** : 37 tokens/seconde -- **Consommation** : 1.65 kWh/million tokens +- **Vitesse** : 28 tokens/seconde +- **Consommation** : 5.05 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -❌ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité +✅ Outils/Agent • ✅ Vision • ❌ Raisonnement • ✅ Sécurité -**Tags :** `Open-Source` `Grand Contexte` `Transparent` `Efficient` `Maths` `Code` +**Tags :** `Vision` `Agent` `Sécurité` `Instruction Following` **Cas d'usage :** - -- Recherche académique et scientifique nécessitant une reproductibilité totale -- Tâches de programmation et résolution de problèmes mathématiques -- Analyse de documents moyens avec traçabilité complète +- Agents conversationnels fiables avec suivi d'instructions précis +- Intégration d'outils externes via function calling +- Applications nécessitant filtrage de sécurité natif --- -### qwen-coder-next:80b - -**Qwen Team • 80B paramètres • Contexte : 250,000 tokens** +### mistral-small4:119b +**Mistral AI • 119B paramètres • Contexte : 262,144 tokens** -Modèle MoE de pointe optimisé pour le code et le raisonnement complexe. +Modèle Mistral haute performance (119B) avec vision, sécurité intégrée et contexte de 262K tokens. Rapide (100 t/s). **Spécifications techniques:** - -- **Vitesse** : 98 tokens/seconde -- **Consommation** : 1.47 kWh/million tokens +- **Vitesse** : 100 tokens/seconde +- **Consommation** : 2.00 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -✅ Outils/Agent • ❌ Vision • ✅ Raisonnement • ❌ Sécurité +✅ Outils/Agent • ✅ Vision • ❌ Raisonnement • ✅ Sécurité -**Tags :** `Agent` `Programmation` `MoE` `Grand Contexte` `AWQ` +**Tags :** `Vision` `Agent` `Sécurité` `Grand Contexte` `Rapide` **Cas d'usage :** - -- Assistant de programmation avancé (Repo-scale) -- Analyse et refactorisation de code complexe -- Agents autonomes d'ingénierie logicielle +- Agents conversationnels haute performance avec vision +- Analyse de documents très longs (262K tokens) +- Applications critiques nécessitant fiabilité et sécurité --- -### qwen3-2507:235b - -**Qwen Team • 235B paramètres • Contexte : 130,000 tokens** +### nemotron-3-super:120b +**NVIDIA • 120B paramètres • Contexte : 1,000,000 tokens** -Modèle MoE massif de 235 milliards de paramètres, avec seulement 22 milliards actifs, offrant des performances de pointe. +Modèle NVIDIA optimisé pour les agents collaboratifs, le raisonnement long et les charges de travail à fort volume. Contexte de 1M tokens. **Spécifications techniques:** - -- **Vitesse** : 58 tokens/seconde -- **Consommation** : 3.93 kWh/million tokens -- **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Vitesse** : 72 tokens/seconde +- **Consommation** : 1.93 kWh/million tokens +- **Licence** : [NVIDIA Community License](./licences/nvidia_community_license.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** ✅ Outils/Agent • ❌ Vision • ✅ Raisonnement • ❌ Sécurité -**Tags :** `MoE` `Agent` `Raisonnement` `Très Large` +**Tags :** `Agent` `Raisonnement` `Grand Contexte` **Cas d'usage :** - -- Résolution de problèmes mathématiques et logiques complexes -- Tâches nécessitant une vaste base de connaissances -- Assistant de codage avancé -- Analyse approfondie de documents +- Agents autonomes avec appels d'outils multiples +- Automatisation de workflows à fort volume +- Analyse de documents longs avec extraction précise --- -### qwen3-2507:30b-a3b - -**Qwen Team • 30B paramètres • Contexte : 250,000 tokens** +### nemotron-cascade:30b +**NVIDIA • 30B paramètres • Contexte : 1,000,000 tokens** -Version améliorée du mode non-pensée de Qwen3-30B, avec des capacités générales, une couverture de connaissances et un alignement utilisateur améliorés. +Modèle NVIDIA spécialisé dans les mathématiques (médaille d'or IMO 2025) et la décomposition de problèmes. Contexte 1M tokens. **Spécifications techniques:** - -- **Vitesse** : 104 tokens/seconde -- **Consommation** : 1.39 kWh/million tokens -- **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Vitesse** : 130 tokens/seconde +- **Consommation** : 1.93 kWh/million tokens +- **Licence** : [NVIDIA Community License](./licences/nvidia_community_license.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -✅ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité +✅ Outils/Agent • ❌ Vision • ✅ Raisonnement • ❌ Sécurité -**Tags :** `Agent` `Grand Contexte` `MoE` `Multilingue` +**Tags :** `Agent` `Raisonnement` `Grand Contexte` `Maths` **Cas d'usage :** - -- Tâches complexes nécessitant un suivi d'instructions précis et un raisonnement logique. -- Applications multilingues avec une large couverture de connaissances. -- Génération de texte de haute qualité pour des tâches ouvertes et subjectives. -- Analyse de documents très volumineux grâce au contexte de 250k tokens. +- Résolution de problèmes mathématiques complexes +- Agents avec appels d'outils multiples +- Analyse de documents longs --- -### qwen3-coder:30b -> -> ⚠️ **ATTENTION : Ce modèle est déprécié.** Préconisation de migration vers qwen-coder-next:80b. +### nemotron3-nano:30b +**NVIDIA • 30B paramètres • Contexte : 1,000,000 tokens** -**Qwen Team • 30B paramètres • Contexte : 250,000 tokens** - -Modèle MoE optimisé pour les tâches d'ingénierie logicielle, avec un contexte très long. +Modèle NVIDIA ultra-rapide (160 t/s) avec raisonnement et function calling. Contexte de 1M tokens. **Spécifications techniques:** - -- **Vitesse** : 104 tokens/seconde -- **Consommation** : 1.39 kWh/million tokens -- **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Vitesse** : 160 tokens/seconde +- **Consommation** : 1.56 kWh/million tokens +- **Licence** : [NVIDIA Community License](./licences/nvidia_community_license.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** ✅ Outils/Agent • ❌ Vision • ✅ Raisonnement • ❌ Sécurité -**Tags :** `Agent` `Programmation` `Grand Contexte` `MoE` +**Tags :** `Agent` `Raisonnement` `Grand Contexte` `Rapide` **Cas d'usage :** - -- Agents d'ingénierie logicielle pour explorer et modifier des bases de code -- Génération de code complexe avec compréhension à l'échelle du dépôt (repository-scale) -- Tâches de raisonnement sur des contextes étendus -- Amélioration de code via apprentissage par renforcement +- Agents autonomes nécessitant une réponse rapide +- Raisonnement logique et résolution de problèmes +- Analyse de documents longs avec extraction précise --- -### qwen3-next:80b - -**Qwen Team • 80B paramètres • Contexte : 250,000 tokens** +### olmo-3:32b +**AllenAI • 32B paramètres • Contexte : 65,536 tokens** -Modèle Next 80B de Qwen, optimisé pour les grands contextes et le raisonnement. +Premier modèle de raisonnement entièrement ouvert à cette échelle. Transparence totale (données, code, poids). **Spécifications techniques:** - -- **Vitesse** : 98 tokens/seconde -- **Consommation** : 1.47 kWh/million tokens +- **Vitesse** : 22 tokens/seconde +- **Consommation** : 5.98 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -✅ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité +❌ Outils/Agent • ❌ Vision • ✅ Raisonnement • ❌ Sécurité -**Tags :** `Agent` `Raisonnement` `Grand Contexte` `MoE` +**Tags :** `Open-Source` `Grand Contexte` `Raisonnement` `Transparent` `Code` `Haute Performance` **Cas d'usage :** - -- Agents conversationnels avancés avec intégration d'outils -- Analyse de documents très volumineux (jusqu'à 260k tokens) -- Génération de code et tâches complexes nécessitant raisonnement structuré +- Raisonnement complexe et résolution de problèmes multi-étapes +- Développement logiciel avec transparence du processus de décision +- Tâches critiques nécessitant une auditabilité complète --- -### qwen3-omni:30b - -**Qwen Team • 30B paramètres • Contexte : 32,768 tokens** +### olmo-3:7b +**AllenAI • 7B paramètres • Contexte : 65,536 tokens** -Qwen3-Omni 30B est un modèle omnimodal natif, capable de comprendre le texte, l'image, la vidéo et l'audio dans un même flux. +Modèle entièrement ouvert et efficient, excellent en mathématiques et programmation avec transparence totale. **Spécifications techniques:** - -- **Vitesse** : 86 tokens/seconde -- **Consommation** : 2.65 kWh/million tokens +- **Vitesse** : 35 tokens/seconde +- **Consommation** : 1.13 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -✅ Outils/Agent • ✅ Vision • ✅ Raisonnement • ❌ Sécurité +❌ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité -**Tags :** `Omni` `Audio` `Vision` `Agent` `Multimodal` `BF16` +**Tags :** `Open-Source` `Grand Contexte` `Transparent` `Efficient` `Maths` `Code` **Cas d'usage :** - -- Interactions multimodales fluides (parle, voit, écoute) -- Analyse vidéo et audio combinée -- Assistants intelligents de nouvelle génération +- Recherche académique nécessitant une reproductibilité totale +- Programmation et résolution de problèmes mathématiques +- Analyse de documents avec traçabilité complète --- -### qwen3-vl:235b - -**Qwen Team • 235B paramètres • Contexte : 200,000 tokens** +### qwen3-2507-think:4b +**Qwen Team • 4B paramètres • Contexte : 250,000 tokens** -Le modèle multimodal le plus puissant du catalogue, alliant une compréhension visuelle de pointe à des capacités de raisonnement exceptionnelles. +Modèle compact optimisé pour le raisonnement profond (logique, maths, science, code). Contexte de 250K tokens. **Spécifications techniques:** - -- **Vitesse** : 31 tokens/seconde -- **Consommation** : 7.35 kWh/million tokens +- **Vitesse** : 55 tokens/seconde +- **Consommation** : 2.42 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -✅ Outils/Agent • ✅ Vision • ✅ Raisonnement • ❌ Sécurité +✅ Outils/Agent • ❌ Vision • ✅ Raisonnement • ❌ Sécurité -**Tags :** `Agent` `Raisonnement` `Grand Contexte` `NVFP4` `Blackwell` `Vision` +**Tags :** `Agent` `Raisonnement` `Grand Contexte` `Compact` `Rapide` **Cas d'usage :** - -- Automatisation de processus documentaires complexes (OCR multilingue, extraction structurée) -- Agents visuels intelligents pour l'interaction logicielle et l'automatisation d'interface -- Analyse scientifique et technique avancée (STEM, raisonnement spatial 3D) -- RAG Multimodal sur documents volumineux (>200k tokens) et vidéos +- Raisonnement complexe (logique, maths, science, code) +- Agents avec grand historique de conversation (250K tokens) +- Analyse de documents volumineux avec raisonnement profond --- -### qwen3-vl:30b - -**Qwen Team • 30B paramètres • Contexte : 250,000 tokens** +### qwen3-2507:235b +**Qwen Team • 235B paramètres • Contexte : 200,000 tokens** -Modèle multimodal de pointe (Qwen3-VL) offrant une compréhension visuelle exceptionnelle et un raisonnement temporel précis. +Modèle le plus puissant du catalogue (235B paramètres, 22B actifs). Excelle en mathématiques, codage et raisonnement logique. **Spécifications techniques:** - -- **Vitesse** : 43 tokens/seconde -- **Consommation** : 3.10 kWh/million tokens +- **Vitesse** : 56 tokens/seconde +- **Consommation** : 3.97 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -✅ Outils/Agent • ✅ Vision • ❌ Raisonnement • ❌ Sécurité +✅ Outils/Agent • ❌ Vision • ✅ Raisonnement • ❌ Sécurité -**Tags :** `Vision` `Agent` `Grand Contexte` `Multimodal` `Vidéo` `OCR` +**Tags :** `MoE` `Agent` `Raisonnement` `Très Large` **Cas d'usage :** - -- Analyse approfondie de vidéos longues et surveillance intelligente -- Extraction de données structurées complexes (documents, tableaux, graphiques) -- Assistants visuels avancés avec compréhension spatiale -- Raisonnement multimodal sur des séquences d'événements +- Résolution de problèmes mathématiques et logiques complexes +- Tâches nécessitant une vaste base de connaissances +- Assistant de codage avancé --- -### qwen3-vl:32b - -**Qwen Team • 32B paramètres • Contexte : 250,000 tokens** +### qwen3-omni:30b +**Qwen Team • 30B paramètres • Contexte : 32,768 tokens** -Variante haute performance de Qwen3-VL, optimisée pour les tâches de vision les plus exigeantes. +Modèle omnimodal natif — comprend simultanément le texte, l'image, la vidéo et l'audio. **Spécifications techniques:** - -- **Vitesse** : 17 tokens/seconde -- **Consommation** : 7.84 kWh/million tokens +- **Vitesse** : 19 tokens/seconde +- **Consommation** : 7.43 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -✅ Outils/Agent • ✅ Vision • ❌ Raisonnement • ❌ Sécurité +✅ Outils/Agent • ✅ Vision • ✅ Raisonnement • ❌ Sécurité -**Tags :** `Vision` `Agent` `Grand Contexte` `Multimodal` `Vidéo` `OCR` +**Tags :** `Omni` `Audio` `Vision` `Agent` `Multimodal` **Cas d'usage :** - -- Analyse scientifique et technique d'images haute résolution -- Automatisation de processus visuels complexes -- Compréhension détaillée de scènes dynamiques +- Interactions multimodales (texte + image + audio + vidéo) +- Analyse vidéo et audio combinée +- Assistants intelligents de nouvelle génération --- -### qwen3:14b - -**Qwen Team • 14B paramètres • Contexte : 131,072 tokens** +### qwen3.5:0.8b +**Qwen Team • 0.8B paramètres • Contexte : 250,000 tokens** -Modèle Qwen3 14B équilibré, offrant de solides performances générales avec une bonne vitesse d'inférence. +Modèle ultra-léger avec un contexte exceptionnel de 250K tokens — remarquable pour un modèle de cette taille. **Spécifications techniques:** - -- **Vitesse** : 68.2 tokens/seconde -- **Consommation** : 0.90 kWh/million tokens +- **Vitesse** : 16 tokens/seconde +- **Consommation** : 2.39 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** ✅ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité -**Tags :** `Agent` `Polyvalent` `Multilingue` +**Tags :** `Compact` `Efficient` `Grand Contexte` `Multilingue` **Cas d'usage :** - -- Assistants virtuels performants -- Génération de contenu de qualité -- Tâches de classification et d'extraction +- Traitement de texte avec très grand contexte (250K tokens) +- Classification et tri rapide +- Assistants légers avec grand historique --- -## Modèles Spécialisés - -### bge-m3:567m - -**BAAI • 567M paramètres • Contexte : 8,192 tokens** +### qwen3.5:4b +**Qwen Team • 4B paramètres • Contexte : 250,000 tokens** -Modèle d'embedding multilingue de pointe (BGE-M3), offrant des capacités de recherche sémantique exceptionnelles sur plus de 100 langues. +Modèle Qwen3.5 compact avec un bon compromis performance/efficacité et contexte de 250K tokens. **Spécifications techniques:** - -- **Vitesse** : 171 tokens/seconde -- **Consommation** : 0.36 kWh/million tokens -- **Licence** : MIT +- **Vitesse** : 37 tokens/seconde +- **Consommation** : 3.64 kWh/million tokens +- **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -❌ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité +✅ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité -**Tags :** `Embedding` `Multilingue` `Efficient` +**Tags :** `Compact` `Efficient` `Grand Contexte` `Multilingue` **Cas d'usage :** - -- Recherche sémantique multilingue -- Retrieval-Augmented Generation (RAG) -- Clustering et classification de documents +- Assistants conversationnels avec grand contexte +- Résumé de texte et classification +- Tâches de codage simples --- -### deepseek-ocr - -**DeepSeek AI • 3B paramètres • Contexte : 8,192 tokens** +### qwen3.5:9b +**Qwen Team • 9B paramètres • Contexte : 250,000 tokens** -Modèle OCR spécialisé de DeepSeek, conçu pour une extraction de texte haute précision avec préservation de la mise en forme. +Modèle Qwen3.5 intermédiaire avec raisonnement solide et contexte étendu à 250K tokens. **Spécifications techniques:** - -- **Vitesse** : 79 tokens/seconde -- **Consommation** : 1.01 kWh/million tokens -- **Licence** : MIT licence +- **Vitesse** : 32 tokens/seconde +- **Consommation** : 4.23 kWh/million tokens +- **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -❌ Outils/Agent • ✅ Vision • ❌ Raisonnement • ❌ Sécurité +✅ Outils/Agent • ❌ Vision • ✅ Raisonnement • ❌ Sécurité -**Tags :** `Vision` `OCR` `Efficient` +**Tags :** `Efficient` `Grand Contexte` `Multilingue` `Raisonnement` **Cas d'usage :** - -- Extraction de texte structuré (Markdown/latex) depuis des images/PDF -- Numérisation de documents avec tableaux et formules complexes +- Assistants conversationnels avancés +- Analyse de documents et extraction d'informations +- Tâches de raisonnement de complexité moyenne --- -### devstral-small-2:24b - -**Mistral AI & All Hands AI • 24B paramètres • Contexte : 200,000 tokens** +### qwen3.6:27b +**Qwen Team • 27B paramètres • Contexte : 1,000,000 tokens** -Seconde itération de Devstral (Small 2), modèle agentique de pointe pour l'ingénierie logicielle, déployé sur serveur GPU haute performance. +Modèle généraliste de référence avec un contexte natif de 1M tokens. Excelle en raisonnement, suivi d'instructions et multilingue. **Spécifications techniques:** - -- **Vitesse** : 38 tokens/seconde -- **Consommation** : 3.80 kWh/million tokens +- **Vitesse** : 80 tokens/seconde +- **Consommation** : 2.78 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -✅ Outils/Agent • ✅ Vision • ❌ Raisonnement • ✅ Sécurité +✅ Outils/Agent • ✅ Vision • ✅ Raisonnement • ❌ Sécurité -**Tags :** `Agent` `Programmation` `Vision` `Open-Source` `Grand Contexte` `FP8` `Rapide` +**Tags :** `Agent` `Grand Contexte` `Multilingue` `Vision` `Raisonnement` **Cas d'usage :** - -- Agents de codage autonomes nécessitant une faible latence -- Refactoring rapide de code -- Tâches d'ingénierie itératives - ->>>>>>> +++++++ REPLACE +- Assistants polyvalents avec suivi d'instructions précis +- Analyse de documents très volumineux (1M tokens) +- Applications multilingues avec raisonnement logique +- Programmation et génération de code --- -### devstral:24b -> -> ⚠️ **ATTENTION : Ce modèle est déprécié.** Préconisation de migration vers devstral-small-2:24b. - -**Mistral AI & All Hands AI • 24B paramètres • Contexte : 120,000 tokens** +### qwen3:0.6b +**Qwen Team • 0.6B paramètres • Contexte : 40,000 tokens** -Devstral 24b est un LLM agentique spécialisé pour l'ingénierie logicielle, co-développé par Mistral AI et All Hands AI. +Micro-modèle ultra-rapide pour les tâches simples et le routage. 40K tokens de contexte. **Spécifications techniques:** - -- **Vitesse** : 44 tokens/seconde -- **Consommation** : 3.28 kWh/million tokens +- **Vitesse** : 46 tokens/seconde +- **Consommation** : 1.33 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -✅ Outils/Agent • ❌ Vision • ❌ Raisonnement • ✅ Sécurité +✅ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité -**Tags :** `Agent` `Programmation` `Open-Source` `Grand Contexte` `FP8` +**Tags :** `Compact` `Rapide` `Efficient` `Multilingue` **Cas d'usage :** - -- Exploration et modification de bases de code -- Agents autonomes d'ingénierie logicielle -- Refactoring et génération de code complexe +- Classification et tri rapide +- Assistants légers avec faible latence +- Routage dans des architectures multi-modèles --- -### embeddinggemma:300m +## Modèles Programmation & Agents -**Google • 300M paramètres • Contexte : 2,048 tokens** +Modèles spécialisés dans le code, l'ingénierie logicielle et les agents autonomes. -Modèle d'embedding de pointe de Google, optimisé pour sa taille, idéal pour les tâches de recherche et de récupération sémantique. +### devstral-small-2:24b +**Mistral AI & All Hands AI • 24B paramètres • Contexte : 200,000 tokens** -**Spécifications techniques:** +Modèle agentique de pointe pour l'ingénierie logicielle. Performances proches des modèles >100B pour le code. Vision intégrée. -- **Vitesse** : 175 tokens/seconde -- **Consommation** : 0.35 kWh/million tokens -- **Licence** : Google Gemma Terms of Use +**Spécifications techniques:** +- **Vitesse** : 33 tokens/seconde +- **Consommation** : 4.23 kWh/million tokens +- **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -❌ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité +✅ Outils/Agent • ✅ Vision • ❌ Raisonnement • ✅ Sécurité -**Tags :** `Embedding` `Compact` `Sémantique` `Efficient` `Multilingue` +**Tags :** `Agent` `Programmation` `Vision` `Open-Source` `Grand Contexte` `Rapide` **Cas d'usage :** - -- Recherche et récupération d'informations (Retrieval) -- Classification et clustering de documents -- Recherche de similarité sémantique -- Déploiement sur des appareils à ressources limitées (mobile, laptop) +- Agents de codage autonomes +- Refactoring rapide de code +- Tâches d'ingénierie itératives --- -### gemma3:1b +### functiongemma:270m +**Google • 270M paramètres • Contexte : 32,768 tokens** -**Google • 1B paramètres • Contexte : 120,000 tokens** - -Micro-modèle Gemma 3, ultra-rapide et efficace. +Micro-modèle spécialisé dans la détection d'appels de fonctions. Idéal comme routeur dans une architecture agentique. **Spécifications techniques:** - -- **Vitesse** : 53 tokens/seconde -- **Consommation** : 1.15 kWh/million tokens -- **Licence** : Google Gemma Terms of Use +- **Vitesse** : 40 tokens/seconde +- **Consommation** : 0.97 kWh/million tokens +- **Licence** : [Google Gemma Terms of Use](./licences/google_gemma_terms_of_use.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -❌ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité +✅ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité -**Tags :** `Compact` `Efficient` `Edge` +**Tags :** `Agent` `Compact` `Efficient` `Function Calling` **Cas d'usage :** - -- Classification de texte rapide -- Chatbots simples -- Prototypage rapide +- Routeur d'outils dans une architecture agentique +- Détection d'intentions d'appels de fonctions +- Pré-filtrage rapide avant routage --- -### gemma3:4b - -**Google • 4B paramètres • Contexte : 120,000 tokens** +### qwen-coder-next:80b +**Qwen Team • 80B paramètres • Contexte : 250,000 tokens** -Modèle compact Gemma 3 4B, offrant un excellent ratio performance/taille. +Modèle de pointe pour le code et le raisonnement complexe. Contexte de 250K tokens. **Spécifications techniques:** - -- **Vitesse** : 48.0 tokens/seconde -- **Consommation** : 1.27 kWh/million tokens -- **Licence** : Google Gemma Terms of Use +- **Vitesse** : 97 tokens/seconde +- **Consommation** : 2.29 kWh/million tokens +- **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -❌ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité +✅ Outils/Agent • ❌ Vision • ✅ Raisonnement • ❌ Sécurité -**Tags :** `Compact` `Efficient` `Edge` +**Tags :** `Agent` `Programmation` `MoE` `Grand Contexte` **Cas d'usage :** - -- Assistants personnels sur laptop -- Résumé de texte -- Traduction légère +- Assistant de programmation avancé (échelle dépôt) +- Analyse et refactorisation de code complexe +- Agents autonomes d'ingénierie logicielle --- -### gpt-oss:20b - -**OpenAI • 20B paramètres • Contexte : 120,000 tokens** +### qwen3-next:80b +**Qwen Team • 80B paramètres • Contexte : 250,000 tokens** -Modèle de langage open-weight d'OpenAI, optimisé pour l'efficacité et le déploiement sur du matériel grand public. +Modèle polyvalent 80B optimisé pour les grands contextes, le function calling et le raisonnement structuré. **Spécifications techniques:** - -- **Vitesse** : 9 tokens/seconde -- **Consommation** : 14.81 kWh/million tokens +- **Vitesse** : 67 tokens/seconde +- **Consommation** : 2.09 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -✅ Outils/Agent • ❌ Vision • ✅ Raisonnement • ❌ Sécurité +✅ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité -**Tags :** `MoE` `Agent` `Raisonnement` `Open-Source` `Compact` `Rapide` +**Tags :** `Agent` `Grand Contexte` `MoE` **Cas d'usage :** - -- Déploiements sur des appareils à ressources limitées (edge devices) ou des serveurs à faible coût. -- Applications nécessitant une inférence rapide avec de bonnes capacités de raisonnement. -- Cas d'usage agentiques avec appel de fonctions, navigation web et exécution de code. -- Fine-tuning pour des tâches spécialisées sur du matériel grand public. +- Agents conversationnels avancés avec intégration d'outils +- Analyse de documents très volumineux +- Génération de code et raisonnement structuré --- -### granite-embedding:278m - -**IBM • 278M paramètres • Contexte : 8,192 tokens** +### qwen3.6:35b +**Qwen Team • 35B paramètres • Contexte : 1,000,000 tokens** -Modèle d'embedding IBM Granite ultra-compact, conçu pour une efficacité maximale. +Leader en ingénierie logicielle agentique (SWE-bench 73.4%). Contexte de 1M tokens, vision et tool calling intégrés. **Spécifications techniques:** - -- **Vitesse** : 196.3 tokens/seconde -- **Consommation** : 0.31 kWh/million tokens +- **Vitesse** : 121 tokens/seconde +- **Consommation** : 2.07 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -❌ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité +✅ Outils/Agent • ✅ Vision • ✅ Raisonnement • ❌ Sécurité -**Tags :** `Embedding` `Compact` `Efficient` +**Tags :** `Agent` `Programmation` `Grand Contexte` `MoE` `Vision` `Raisonnement` **Cas d'usage :** +- Assistant de codage agentique dans IDE (Cursor, Continue.dev, VS Code Copilot) +- Analyse de bases de code complètes (1M tokens) +- Revue de code automatisée et CI/CD intelligents +- Résolution de bugs complexes avec raisonnement multi-étapes -- Recherche sémantique -- Clustering de documents +--- + +### rnj-1:8b +**Essential AI • 8B paramètres • Contexte : 32,000 tokens** + +Modèle spécialisé STEM — excelle en code (83.5% HumanEval+), mathématiques et sciences. + +**Spécifications techniques:** +- **Vitesse** : 23 tokens/seconde +- **Consommation** : 1.69 kWh/million tokens +- **Licence** : [Open Weights](./licences/open_weights.licence.md) +- **Localisation** : FR 🇫🇷 + +**Capacités:** +❌ Outils/Agent • ❌ Vision • ✅ Raisonnement • ❌ Sécurité + +**Tags :** `Code` `Maths` `STEM` `Raisonnement` `Efficient` + +**Cas d'usage :** +- Génération de code avancé +- Résolution de problèmes mathématiques complexes +- Tâches scientifiques et techniques --- -### granite4-small-h:32b +## Modèles Vision & Multimodal -**IBM • 32B (9B actifs) paramètres • Contexte : 128,000 tokens** +Modèles pour l'analyse d'images, vidéos, OCR et documents visuels. -Modèle MoE (Mixture-of-Experts) d'IBM, conçu comme un "cheval de bataille" pour les tâches d'entreprise quotidiennes, avec une excellente efficacité pour les longs contextes. +### deepseek-ocr +**DeepSeek AI • 3B paramètres • Contexte : 8,192 tokens** + +Modèle OCR spécialisé pour l'extraction de texte haute précision avec préservation de la mise en forme (tableaux, formules). **Spécifications techniques:** +- **Vitesse** : 84 tokens/seconde +- **Consommation** : 0.66 kWh/million tokens +- **Licence** : [MIT licence](./licences/mit_licence.licence.md) +- **Localisation** : FR 🇫🇷 -- **Vitesse** : 49 tokens/seconde -- **Consommation** : 2.95 kWh/million tokens +**Capacités:** +❌ Outils/Agent • ✅ Vision • ❌ Raisonnement • ❌ Sécurité + +**Tags :** `Vision` `OCR` `Efficient` + +**Cas d'usage :** +- Extraction de texte structuré (Markdown/LaTeX) depuis des images/PDF +- Numérisation de documents avec tableaux et formules + +--- + +### gemma4:31b +**Google • 31B paramètres • Contexte : 250,000 tokens** + +Modèle dense multimodal de Google, classé 3e mondial sur Arena AI. Vision avancée, raisonnement et codage. Contexte 250K tokens. + +**Spécifications techniques:** +- **Vitesse** : 59 tokens/seconde +- **Consommation** : 3.77 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -✅ Outils/Agent • ❌ Vision • ✅ Raisonnement • ✅ Sécurité +✅ Outils/Agent • ✅ Vision • ✅ Raisonnement • ❌ Sécurité -**Tags :** `Agent` `Raisonnement` `Sécurité` `MoE` `Grand Contexte` `Efficient` +**Tags :** `Agent` `Grand Contexte` `Vision` `Raisonnement` `Multilingue` `Open-Source` **Cas d'usage :** - -- Agents conversationnels pour le support client avec accès à des bases de connaissances étendues. -- Automatisation de workflows d'entreprise nécessitant l'utilisation de plusieurs outils. -- Analyse de documents longs avec une consommation de ressources optimisée. -- Déploiements sur des infrastructures de taille moyenne grâce à son efficacité. +- Agents autonomes avec raisonnement et appels d'outils +- Analyse de documents volumineux avec vision +- Compréhension visuelle (OCR, graphiques, documents scannés) --- -### granite4-tiny-h:7b - -**IBM • 7B (1B actif) paramètres • Contexte : 128,000 tokens** +### gemma4:e2b +**Google • 31B (E2B) paramètres • Contexte : 128,000 tokens** -Modèle MoE hybride ultra-efficace d'IBM, conçu pour la faible latence, les applications "edge" et locales, et comme brique de base pour les workflows agentiques. +Variante ultra-rapide (125 t/s) de Gemma 4 avec vision. Excellente efficacité énergétique. **Spécifications techniques:** - -- **Vitesse** : 58 tokens/seconde -- **Consommation** : 2.30 kWh/million tokens +- **Vitesse** : 125 tokens/seconde +- **Consommation** : 1.11 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -✅ Outils/Agent • ❌ Vision • ✅ Raisonnement • ✅ Sécurité +✅ Outils/Agent • ✅ Vision • ❌ Raisonnement • ❌ Sécurité -**Tags :** `Agent` `Raisonnement` `Sécurité` `MoE` `Grand Contexte` `Efficient` `Rapide` `Compact` +**Tags :** `Vision` `Rapide` `Efficient` **Cas d'usage :** - -- Applications embarquées et "edge" nécessitant une faible latence. -- Tâches rapides au sein de workflows agentiques plus larges (ex : function calling). -- Analyse de documents sur du matériel grand public. -- Déploiements nécessitant une empreinte mémoire minimale. +- Analyse d'images avec faible latence +- Documents volumineux avec empreinte réduite --- -### medgemma:27b +### gemma4:e4b +**Google • 31B (E4B) paramètres • Contexte : 128,000 tokens** -**Google • 27B paramètres • Contexte : 128,000 tokens** - -MedGemma est un modèle ouvert parmis les plus performants de Google pour la compréhension de textes et d'images médicales, basés sur Gemma 3. +Variante de Gemma 4 avec meilleur compromis qualité/vitesse que la version E2B. Vision intégrée. **Spécifications techniques:** - -- **Vitesse** : 22 tokens/seconde -- **Consommation** : 6.56 kWh/million tokens -- **Licence** : Google Gemma Terms of Use +- **Vitesse** : 85 tokens/seconde +- **Consommation** : 1.63 kWh/million tokens +- **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** ✅ Outils/Agent • ✅ Vision • ❌ Raisonnement • ❌ Sécurité -**Tags :** `Médical` `Vision` `Spécialisé` `Grand Contexte` +**Tags :** `Vision` `Rapide` **Cas d'usage :** - -- Interprétation d'images médicales (Génération de rapports et VQA) -- Compréhension de textes médicaux et raisonnement clinique (Aide à la décision) -- Interaction patient (Entretien et triage médical) -- Synthèse de dossiers médicaux et recherche dans la littérature +- Analyse de documents et images avec bon compromis qualité/vitesse +- Alternative rapide pour les tâches de vision --- -### ministral-3:3b - -**Mistral AI • 3B paramètres • Contexte : 250,000 tokens** +### granite3.2-vision:2b +**IBM • 2B paramètres • Contexte : 16,384 tokens** -Modèle compact de pointe de Mistral AI, conçu pour l'efficacité sur les déploiements locaux et edge. +Modèle vision compact IBM Granite pour l'OCR rapide et l'extraction de données depuis des documents scannés. **Spécifications techniques:** - -- **Vitesse** : 50 tokens/seconde -- **Consommation** : 1.22 kWh/million tokens +- **Vitesse** : 49 tokens/seconde +- **Consommation** : 0.80 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -✅ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité +❌ Outils/Agent • ✅ Vision • ❌ Raisonnement • ❌ Sécurité -**Tags :** `Compact` `Efficient` `Edge` +**Tags :** `Vision` `Compact` `Efficient` `OCR` **Cas d'usage :** - -- Inférence locale sur appareils mobiles ou edge devices -- Assistants personnels réactifs -- Tâches de routage et classification rapides +- OCR rapide sur documents légers +- Extraction de données depuis des images +- Analyse visuelle à faible consommation --- -### ministral-3:8b - -**Mistral AI • 8B paramètres • Contexte : 250,000 tokens** +### qwen3-vl:235b +**Qwen Team • 235B paramètres • Contexte : 200,000 tokens** -Modèle de taille intermédiaire de la famille Ministral, offrant un équilibre optimal entre performance et ressources. +Le modèle multimodal le plus puissant du catalogue. Compréhension visuelle de pointe et raisonnement exceptionnel. **Spécifications techniques:** - -- **Vitesse** : 55 tokens/seconde -- **Consommation** : 2.42 kWh/million tokens +- **Vitesse** : 24 tokens/seconde +- **Consommation** : 5.56 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -✅ Outils/Agent • ❌ Vision • ✅ Raisonnement • ❌ Sécurité +✅ Outils/Agent • ✅ Vision • ✅ Raisonnement • ❌ Sécurité -**Tags :** `Efficient` `Edge` `Raisonnement` +**Tags :** `Agent` `Raisonnement` `Grand Contexte` `Vision` **Cas d'usage :** - -- Assistants conversationnels avancés en local -- Analyse de documents et extraction d'informations -- Tâches nécessitant un bon compromis vitesse/qualité +- Automatisation documentaire complexe (OCR multilingue, extraction structurée) +- Agents visuels intelligents +- Analyse scientifique avancée (STEM, raisonnement spatial) +- RAG Multimodal sur documents et vidéos --- -### mistral-small3.2:24b - -**Mistral AI • 24B paramètres • Contexte : 128,000 tokens** +### qwen3-vl:2b +**Qwen Team • 2B paramètres • Contexte : 250,000 tokens** -Mise à jour mineure de Mistral Small 3.1, améliorant le suivi d'instructions, la robustesse du function calling et réduisant les erreurs de répétition. +Modèle vision ultra-compact pour l'OCR rapide, la détection d'objets et les applications embarquées. **Spécifications techniques:** - -- **Vitesse** : 27 tokens/seconde -- **Consommation** : 5.35 kWh/million tokens +- **Vitesse** : 64 tokens/seconde +- **Consommation** : 0.95 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -✅ Outils/Agent • ✅ Vision • ❌ Raisonnement • ✅ Sécurité +✅ Outils/Agent • ✅ Vision • ❌ Raisonnement • ❌ Sécurité -**Tags :** `Vision` `Agent` `Sécurité` `Instruction Following` +**Tags :** `Vision` `Compact` `Efficient` `Multimodal` `OCR` **Cas d'usage :** +- Analyse d'images en temps réel +- OCR et lecture de documents légers +- Tri et classification visuelle rapide + +--- + +### qwen3-vl:30b +**Qwen Team • 30B paramètres • Contexte : 250,000 tokens** + +Modèle multimodal performant pour l'OCR, la détection d'objets, l'analyse de vidéos et le raisonnement spatio-temporel. -- Agents conversationnels avec un suivi d'instructions amélioré -- Intégration robuste avec des outils externes via function calling -- Applications nécessitant une grande fiabilité pour éviter les répétitions -- Cas d'usage identiques à Mistral Small 3.1 avec des performances accrues +**Spécifications techniques:** +- **Vitesse** : 39 tokens/seconde +- **Consommation** : 3.39 kWh/million tokens +- **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localisation** : FR 🇫🇷 + +**Capacités:** +✅ Outils/Agent • ✅ Vision • ❌ Raisonnement • ❌ Sécurité + +**Tags :** `Vision` `Agent` `Grand Contexte` `Multimodal` `Vidéo` `OCR` + +**Cas d'usage :** +- Analyse de vidéos longues et surveillance intelligente +- Extraction de données structurées (documents, tableaux, graphiques) +- Assistants visuels avec compréhension spatiale --- -### qwen3-2507-think:4b +### qwen3-vl:32b +**Qwen Team • 32B paramètres • Contexte : 250,000 tokens** + +Variante haute performance pour les tâches de vision les plus exigeantes. Contexte 250K tokens. + +**Spécifications techniques:** +- **Vitesse** : 17 tokens/seconde +- **Consommation** : 7.75 kWh/million tokens +- **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localisation** : FR 🇫🇷 + +**Capacités:** +✅ Outils/Agent • ✅ Vision • ❌ Raisonnement • ❌ Sécurité + +**Tags :** `Vision` `Agent` `Grand Contexte` `Multimodal` `Vidéo` `OCR` + +**Cas d'usage :** +- Analyse scientifique et technique d'images haute résolution +- Automatisation de processus visuels complexes +- Compréhension détaillée de scènes dynamiques +--- + +### qwen3-vl:4b **Qwen Team • 4B paramètres • Contexte : 250,000 tokens** -Modèle Qwen3-4B optimisé pour le raisonnement, avec des performances améliorées sur les tâches logiques, les mathématiques, la science et le code, et un contexte étendu à 250K tokens. +Modèle vision compact et rapide pour l'analyse documentaire et la compréhension vidéo. **Spécifications techniques:** - -- **Vitesse** : 52 tokens/seconde -- **Consommation** : 2.56 kWh/million tokens +- **Vitesse** : 57 tokens/seconde +- **Consommation** : 2.34 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -✅ Outils/Agent • ❌ Vision • ✅ Raisonnement • ❌ Sécurité +✅ Outils/Agent • ✅ Vision • ❌ Raisonnement • ❌ Sécurité -**Tags :** `Agent` `Raisonnement` `Grand Contexte` `Compact` `Rapide` +**Tags :** `Vision` `Compact` `Multimodal` `Efficient` `Vidéo` `OCR` **Cas d'usage :** +- Analyse documentaire automatisée (factures, formulaires) +- Compréhension de contenu vidéo +- Assistants visuels interactifs + +--- + +### qwen3-vl:8b +**Qwen Team • 8B paramètres • Contexte : 250,000 tokens** + +Modèle vision intermédiaire — bon compromis entre performance et empreinte. Contexte 250K tokens. + +**Spécifications techniques:** +- **Vitesse** : 39 tokens/seconde +- **Consommation** : 3.38 kWh/million tokens +- **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localisation** : FR 🇫🇷 -- Tâches de raisonnement très complexes (logique, maths, science, code). -- Agents conversationnels avec un historique de conversation très étendu (256k tokens). -- Analyse de documents très volumineux avec raisonnement profond. -- Intégration avec des outils externes via function calling sur de très grands contextes. +**Capacités:** +✅ Outils/Agent • ✅ Vision • ❌ Raisonnement • ❌ Sécurité + +**Tags :** `Vision` `Multimodal` `Efficient` `Vidéo` `OCR` + +**Cas d'usage :** +- Analyse documentaire automatisée +- Compréhension de contenu vidéo +- Assistants visuels interactifs --- -### qwen3-2507:4b -> -> ⚠️ **ATTENTION : Ce modèle est déprécié.** Déprécié. +## Modèles d'Embedding -**Qwen Team • 4B paramètres • Contexte : 250,000 tokens** +Modèles pour la recherche sémantique et le Retrieval-Augmented Generation (RAG). + +### bge-m3:567m +**BAAI • 567M paramètres • Contexte : 8,192 tokens** -Version mise à jour du mode non-pensée de Qwen3-4B, avec des améliorations significatives des capacités générales, une couverture de connaissances étendue et un meilleur alignement avec les préférences des utilisateurs. +Embedding multilingue de pointe (100+ langues). Supporte les recherches dense, sparse et multi-vectorielle. **Spécifications techniques:** +- **Vitesse** : 171 tokens/seconde +- **Consommation** : 0.36 kWh/million tokens +- **Licence** : [MIT](./licences/mit.licence.md) +- **Localisation** : FR 🇫🇷 -- **Vitesse** : 30 tokens/seconde -- **Consommation** : 4.44 kWh/million tokens -- **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) +**Capacités:** +❌ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité + +**Tags :** `Embedding` `Multilingue` `Efficient` + +**Cas d'usage :** +- Recherche sémantique multilingue +- Retrieval-Augmented Generation (RAG) +- Clustering et classification de documents + +--- + +### embeddinggemma:300m +**Google • 300M paramètres • Contexte : 2,048 tokens** + +Embedding Google multilingue (100+ langues), optimisé pour la recherche et la récupération sémantique. + +**Spécifications techniques:** +- **Vitesse** : 175 tokens/seconde +- **Consommation** : 0.35 kWh/million tokens +- **Licence** : [Google Gemma Terms of Use](./licences/google_gemma_terms_of_use.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -✅ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité +❌ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité -**Tags :** `Agent` `Grand Contexte` `Compact` `Rapide` `Multilingue` +**Tags :** `Embedding` `Compact` `Sémantique` `Efficient` `Multilingue` **Cas d'usage :** +- Recherche et récupération d'informations +- Classification et clustering de documents +- Recherche de similarité sémantique -- Tâches générales nécessitant un suivi d'instructions précis et un raisonnement logique. -- Applications multilingues avec une large couverture de connaissances. -- Génération de texte de haute qualité pour des tâches ouvertes et subjectives. -- Analyse de documents très volumineux grâce au contexte de 256k tokens. +--- + +### granite-embedding:278m +**IBM • 278M paramètres • Contexte : 512 tokens** + +Embedding IBM ultra-compact pour une recherche sémantique à latence minimale. + +**Spécifications techniques:** +- **Vitesse** : 196.3 tokens/seconde +- **Consommation** : 0.31 kWh/million tokens +- **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localisation** : FR 🇫🇷 + +**Capacités:** +❌ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité + +**Tags :** `Embedding` `Compact` `Efficient` + +**Cas d'usage :** +- Recherche sémantique haute fréquence +- Clustering de documents --- ### qwen3-embedding:0.6b - **Qwen Team • 0.6B paramètres • Contexte : 32,768 tokens** -Modèle d'embedding Qwen3 ultra-léger, optimisé pour la vitesse et l'efficacité sur les infrastructures à ressources limitées. +Embedding ultra-léger et rapide pour la recherche sémantique à faible latence. **Spécifications techniques:** - - **Vitesse** : N/A - **Consommation** : 0.57 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) @@ -1040,20 +1074,17 @@ Modèle d'embedding Qwen3 ultra-léger, optimisé pour la vitesse et l'efficacit **Tags :** `Embedding` `Compact` `Efficient` **Cas d'usage :** - - Recherche sémantique rapide - Classification de texte en temps réel --- ### qwen3-embedding:4b - **Qwen Team • 4B paramètres • Contexte : 40,000 tokens** -Modèle d'embedding Qwen3-4B ultra-performant, offrant une compréhension sémantique profonde et une fenêtre de contexte étendue. +Embedding haute performance avec compréhension sémantique profonde et contexte étendu (40K tokens). **Spécifications techniques:** - - **Vitesse** : N/A - **Consommation** : 0.57 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) @@ -1065,154 +1096,186 @@ Modèle d'embedding Qwen3-4B ultra-performant, offrant une compréhension séman **Tags :** `Embedding` `Grand Contexte` `Efficient` **Cas d'usage :** - - Recherche sémantique sur documents longs -- RAG avec fenêtres de contexte étendues +- RAG avec contexte étendu - Analyse sémantique de précision --- -### qwen3-vl:2b - -**Qwen Team • 2B paramètres • Contexte : 250,000 tokens** +### qwen3-embedding:8b +**Qwen Team • 8B paramètres • Contexte : 40,000 tokens** -Modèle multimodal ultra-compact Qwen3-VL, apportant des capacités de vision avancées sur edge devices. +Embedding haute capacité avec la meilleure compréhension sémantique de la famille Qwen3. Contexte étendu (40K tokens). **Spécifications techniques:** - -- **Vitesse** : 64 tokens/seconde -- **Consommation** : 0.95 kWh/million tokens +- **Vitesse** : N/A +- **Consommation** : 0.57 kWh/million tokens - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -✅ Outils/Agent • ✅ Vision • ❌ Raisonnement • ❌ Sécurité +❌ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité -**Tags :** `Vision` `Compact` `Efficient` `Multimodal` `Edge` `OCR` +**Tags :** `Embedding` `Grand Contexte` `Haute Performance` **Cas d'usage :** - -- Analyse d'images en temps réel sur appareils mobiles -- OCR et lecture de documents légers -- Tri et classification visuelle rapide +- Recherche sémantique de haute précision +- RAG avancé avec contexte étendu +- Analyse sémantique de documents complexes --- -### qwen3-vl:4b +## Modèles de Reranking -**Qwen Team • 4B paramètres • Contexte : 250,000 tokens** +Modèles pour le réordonnancement de résultats dans les pipelines RAG. -Modèle multimodal Qwen3-VL équilibré, offrant de solides performances de vision avec une empreinte réduite. +### bge-reranker-large +**BAAI • 335M paramètres • Contexte : 512 tokens** -**Spécifications techniques:** +Modèle de reranking haute performance de la famille BGE, multilingue. -- **Vitesse** : 57 tokens/seconde -- **Consommation** : 2.34 kWh/million tokens -- **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) +**Spécifications techniques:** +- **Vitesse** : N/A +- **Consommation** : N/A +- **Licence** : [MIT](./licences/mit.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -✅ Outils/Agent • ✅ Vision • ❌ Raisonnement • ❌ Sécurité +❌ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité -**Tags :** `Vision` `Compact` `Multimodal` `Efficient` `Vidéo` `OCR` +**Tags :** `Reranker` `Haute Performance` **Cas d'usage :** - -- Analyse documentaire automatisée (factures, formulaires) -- Compréhension de contenu vidéo -- Assistants visuels interactifs +- Réordonnancement multilingue pour RAG --- -### qwen3-vl:8b - -**Qwen Team • 8B paramètres • Contexte : 250,000 tokens** +### nvidia/llama-nemotron-rerank-vl-1b-v2 +**NVIDIA • 1B paramètres • Contexte : 4,096 tokens** -Modèle multimodal Qwen3-VL (8B), offrant des performances de vision avancées avec une empreinte raisonnable. +Modèle de reranking compatible API Cohere (/v1/rerank et /v2/rerank). Ordonne les documents par pertinence vis-à-vis d'une requête. **Spécifications techniques:** +- **Vitesse** : N/A +- **Consommation** : N/A +- **Licence** : [NVIDIA Open Model License](./licences/nvidia_open_model_license.licence.md) +- **Localisation** : FR 🇫🇷 -- **Vitesse** : 44 tokens/seconde -- **Consommation** : 3.03 kWh/million tokens +**Capacités:** +❌ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité + +**Tags :** `Rerank` `RAG` `Compact` + +**Cas d'usage :** +- Réordonnancement de résultats de recherche sémantique +- Affinage de la pertinence dans les pipelines RAG + +--- + +### qwen3-reranker:0.6b +**Qwen Team • 0.6B paramètres • Contexte : 4,096 tokens** + +Modèle de reranking compact et efficace pour le réordonnancement rapide. + +**Spécifications techniques:** +- **Vitesse** : N/A +- **Consommation** : N/A - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -✅ Outils/Agent • ✅ Vision • ❌ Raisonnement • ❌ Sécurité +❌ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité -**Tags :** `Vision` `Compact` `Multimodal` `Efficient` `Vidéo` `OCR` +**Tags :** `Reranker` `Compact` `Efficient` **Cas d'usage :** - -- Analyse documentaire automatisée -- Compréhension de contenu vidéo -- Assistants visuels interactifs +- Réordonnancement rapide pour RAG --- -### qwen3:0.6b - -**Qwen Team • 0.6B paramètres • Contexte : 40,000 tokens** +### qwen3-reranker:4b +**Qwen Team • 4B paramètres • Contexte : 4,096 tokens** -Modèle Qwen3 ultra-léger de 0.6 milliard de paramètres, offrant une vitesse d'inférence exceptionnelle pour les tâches simples et rapides. +Modèle de reranking performant avec une grande capacité de compréhension contextuelle. **Spécifications techniques:** - -- **Vitesse** : 46 tokens/seconde -- **Consommation** : 1.33 kWh/million tokens +- **Vitesse** : N/A +- **Consommation** : N/A - **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -✅ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité +❌ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité -**Tags :** `Compact` `Rapide` `Efficient` `Multilingue` +**Tags :** `Reranker` `Performance` **Cas d'usage :** - -- Tâches de traitement de texte simples -- Classification et tri rapide -- Assistants légers avec faible latence +- Réordonnancement haute qualité pour RAG --- -### rnj-1:8b +## Modèles de Sécurité -**Essential AI • 8B paramètres • Contexte : 32,000 tokens** +Modèles pour le filtrage de contenu, la conformité et les guardrails. -Modèle 8B "Open Weight" spécialisé dans le code, les mathématiques et les sciences (STEM). +### granite3-guardian:2b +**IBM • 2B paramètres • Contexte : 8,192 tokens** -**Spécifications techniques:** +Version compacte du modèle de sécurité Granite Guardian pour le filtrage à faible latence. -- **Vitesse** : 31 tokens/seconde -- **Consommation** : 1.97 kWh/million tokens -- **Licence** : Open Weights +**Spécifications techniques:** +- **Vitesse** : 60 tokens/seconde +- **Consommation** : 0.65 kWh/million tokens +- **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** -❌ Outils/Agent • ❌ Vision • ✅ Raisonnement • ❌ Sécurité +❌ Outils/Agent • ❌ Vision • ❌ Raisonnement • ✅ Sécurité -**Tags :** `Code` `Maths` `STEM` `Raisonnement` `Efficient` +**Tags :** `Sécurité` `Guardrails` `Compact` `Efficient` **Cas d'usage :** +- Guardrails à faible latence dans les workflows agentiques +- Filtrage de sécurité en temps réel -- Assistant de programmation avancé et génération de code -- Résolution de problèmes mathématiques complexes -- Tâches scientifiques et techniques (STEM) +--- + +### granite3-guardian:8b +**IBM • 8B paramètres • Contexte : 8,192 tokens** + +Modèle de sécurité spécialisé dans la détection de contenus problématiques, le jailbreak et la conformité réglementaire. + +**Spécifications techniques:** +- **Vitesse** : 45 tokens/seconde +- **Consommation** : 3.09 kWh/million tokens +- **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localisation** : FR 🇫🇷 + +**Capacités:** +❌ Outils/Agent • ❌ Vision • ❌ Raisonnement • ✅ Sécurité + +**Tags :** `Sécurité` `Guardrails` `Conformité` `Filtrage` + +**Cas d'usage :** +- Détection de contenus problématiques et jailbreak +- Filtrage de sécurité pré/post-génération +- Conformité réglementaire (RGPD, HDS) --- -### translategemma:12b +## Modèles de Traduction +Modèles spécialisés dans la traduction multilingue haute fidélité. + +### translategemma:12b **Google • 12B paramètres • Contexte : 128,000 tokens** -Modèle de traduction ouvert de pointe basé sur Gemma 3, couvrant 55 langues. +Traduction haute fidélité pour 55 langues avec contexte de 128K tokens. **Spécifications techniques:** - -- **Vitesse** : 30 tokens/seconde -- **Consommation** : 4.44 kWh/million tokens -- **Licence** : Gemma Terms of Use +- **Vitesse** : 27 tokens/seconde +- **Consommation** : 4.87 kWh/million tokens +- **Licence** : [Gemma Terms of Use](./licences/gemma_terms_of_use.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** @@ -1221,7 +1284,6 @@ Modèle de traduction ouvert de pointe basé sur Gemma 3, couvrant 55 langues. **Tags :** `Traduction` `Multilingue` `Spécialisé` **Cas d'usage :** - - Traduction de documents longs - Communication inter-langues - Localisation de contenu @@ -1229,16 +1291,14 @@ Modèle de traduction ouvert de pointe basé sur Gemma 3, couvrant 55 langues. --- ### translategemma:27b - **Google • 27B paramètres • Contexte : 120,000 tokens** -Modèle de traduction haute performance basé sur Gemma 3 27B. +Traduction haute performance pour 55 langues. Qualité supérieure pour les contenus complexes et techniques. **Spécifications techniques:** - -- **Vitesse** : 44 tokens/seconde -- **Consommation** : 6.35 kWh/million tokens -- **Licence** : Gemma Terms of Use +- **Vitesse** : 17 tokens/seconde +- **Consommation** : 7.84 kWh/million tokens +- **Licence** : [Gemma Terms of Use](./licences/gemma_terms_of_use.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** @@ -1247,7 +1307,6 @@ Modèle de traduction haute performance basé sur Gemma 3 27B. **Tags :** `Traduction` `Multilingue` `Spécialisé` `Haute Performance` **Cas d'usage :** - - Traduction de haute précision - Traduction de documents techniques - Nuances littéraires et culturelles @@ -1255,16 +1314,14 @@ Modèle de traduction haute performance basé sur Gemma 3 27B. --- ### translategemma:4b - **Google • 4B paramètres • Contexte : 128,000 tokens** -Version compacte du modèle de traduction TranslateGemma, optimisée pour la rapidité. +Traduction rapide et efficace pour 55 langues. Idéal pour la localisation en temps réel. **Spécifications techniques:** - -- **Vitesse** : 38 tokens/seconde -- **Consommation** : 1.27 kWh/million tokens -- **Licence** : Gemma Terms of Use +- **Vitesse** : 31 tokens/seconde +- **Consommation** : 1.25 kWh/million tokens +- **Licence** : [Gemma Terms of Use](./licences/gemma_terms_of_use.licence.md) - **Localisation** : FR 🇫🇷 **Capacités:** @@ -1273,10 +1330,59 @@ Version compacte du modèle de traduction TranslateGemma, optimisée pour la rap **Tags :** `Traduction` `Multilingue` `Spécialisé` `Efficient` **Cas d'usage :** - - Traduction rapide de textes -- Traduction sur appareils à ressources limitées - Localisation en temps réel +- Traduction à budget limité + +--- + +## Modèles Audio & Image + +Modèles pour la transcription audio et la génération d'images. + +### voxtral +**Mistral AI • 4B paramètres • Contexte : 32,768 tokens** + +Transcription audio en temps réel via WebSocket. Reconnaissance vocale streaming avec faible latence. + +**Spécifications techniques:** +- **Vitesse** : N/A +- **Consommation** : N/A +- **Licence** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localisation** : FR 🇫🇷 + +**Capacités:** +❌ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité + +**Tags :** `ASR` `Audio` `Realtime` `WebSocket` + +**Cas d'usage :** +- Transcription audio en temps réel (streaming) +- Assistants vocaux +- Sous-titrage en direct + +--- + +### z-image:16b +**Community • 16B paramètres • Contexte : 0 tokens** + +Génération d'images à partir de prompts textuels, compatible API OpenAI /v1/images/generations. + +**Spécifications techniques:** +- **Vitesse** : N/A +- **Consommation** : N/A +- **Licence** : [Open Weights](./licences/open_weights.licence.md) +- **Localisation** : FR 🇫🇷 + +**Capacités:** +❌ Outils/Agent • ❌ Vision • ❌ Raisonnement • ❌ Sécurité + +**Tags :** `Image Generation` `Créatif` `Multimodal` + +**Cas d'usage :** +- Génération d'images à partir de descriptions textuelles +- Création de contenu visuel +- Prototypage visuel rapide --- @@ -1284,67 +1390,74 @@ Version compacte du modèle de traduction TranslateGemma, optimisée pour la rap ### Dialogue multilingue -Chatbots et assistants capables de communiquer dans plusieurs langues avec détection automatique, maintien du contexte sur l'ensemble de la conversation et compréhension des spécificités linguistiques +Chatbots et assistants capables de communiquer dans plusieurs langues avec détection automatique et maintien du contexte **Modèles recommandés:** -- Llama 3.3 -- Mistral Small 3.2 -- Qwen 3 -- Openai OSS -- Granite 4 +- nemotron-3-super:120b +- qwen3.6:27b +- nemotron3-nano:30b +- gpt-oss:120b ### Analyse de documents longs -Traitement de documents volumineux (>100 pages) avec maintien du contexte sur l'ensemble du texte, extraction d'informations clés, génération de résumés pertinents et réponse à des questions spécifiques sur le contenu +Traitement de documents volumineux (>100 pages) avec extraction d'informations clés, résumés et réponses à des questions **Modèles recommandés:** -- Gemma 3 -- Qwen next -- Qwen 3 -- Granite 4 +- nemotron-3-super:120b +- qwen3.6:27b +- qwen3-2507:235b ### Programmation et développement -Génération et optimisation de code dans multiples langages, débogage, refactoring, développement de fonctionnalités complètes, compréhension des implémentations algorithmiques complexes et création de tests unitaires +Génération, optimisation et débogage de code dans multiples langages, refactoring et création de tests **Modèles recommandés:** -- DeepCoder -- Qwen3 coder -- Granite 4 -- Devstral +- qwen3.6:35b +- qwen-coder-next:80b +- devstral-small-2:24b +- nemotron-3-super:120b ### Analyse visuelle -Traitement direct d'images et documents visuels sans pré-traitement OCR, interprétation de diagrammes techniques, graphiques, tableaux, dessins et photos avec génération d'explications textuelles détaillées du contenu visuel +Traitement d'images et documents visuels, OCR, interprétation de graphiques et tableaux **Modèles recommandés:** -- deepseek-OCR -- Mistral Small 3.2 -- Gemma 3 -- Qwen 3 VL +- qwen3-vl:235b +- gemma4:31b +- deepseek-ocr +- qwen3-vl:30b ### Sécurité et conformité -Applications nécessitant des capacités spécifiques en matière de sécurité ; filtrage de contenu sensible, traçabilité des raisonnements, vérification RGPD/HDS, minimisation des risques, analyse des vulnérabilités et respect des réglementations sectorielles +Filtrage de contenu sensible, détection de jailbreak, conformité RGPD/HDS **Modèles recommandés:** -- Granite Guardian -- Granite 4 -- Devstral -- Mistral Small 3.2 -- Magistral small +- granite3-guardian:8b +- granite3-guardian:2b +- mistral-small4:119b -### Déploiements légers et embarqués +### Déploiements légers -Applications nécessitant une empreinte minimale en ressources, déploiement sur appareils à capacité limitée, inférence en temps réel sur CPU standard et intégration dans des systèmes embarqués ou IoT +Applications nécessitant une empreinte minimale, faible latence et faible consommation **Modèles recommandés:** -- Gemma 3n -- Granite 4 tiny -- Qwen 3 VL (2B) +- qwen3.5:0.8b +- qwen3-vl:2b +- ministral-3:3b + +### RAG (Retrieval-Augmented Generation) + +Pipelines complets de recherche sémantique, réordonnancement et génération augmentée par la récupération + +**Modèles recommandés:** + +- bge-m3:567m +- nvidia/llama-nemotron-rerank-vl-1b-v2 +- qwen3.6:27b + diff --git a/docs/llmaas/ocr.md b/docs/llmaas/ocr.md index b8b7c062..b8c718d6 100644 --- a/docs/llmaas/ocr.md +++ b/docs/llmaas/ocr.md @@ -12,14 +12,11 @@ Ce guide détaille l'utilisation du modèle **DeepSeek-OCR**, une solution de po Contrairement aux OCR traditionnels, DeepSeek-OCR est un modèle Vision-Langage de bout en bout conçu pour "lire" et "comprendre" visuellement les documents. ### Architecture technique - Il combine deux composants innovants : - -1. **DeepEncoder (380M)** : Un encodeur visuel hybride qui combine **SAM-base** (pour la perception locale) et **CLIP-large** (pour la connaissance globale), reliés par un compresseur convolutif 16x. Cela permet de traiter des images haute résolution avec très peu de tokens visuels. -2. **Décodeur MoE (3B)** : Basé sur DeepSeek3B-MoE (570M paramètres actifs), il génère le texte structuré à partir des tokens visuels compressés. +1. **DeepEncoder (380M)** : Un encodeur visuel hybride qui combine **SAM-base** (pour la perception locale) et **CLIP-large** (pour la connaissance globale), reliés par un compresseur convolutif 16x. Cela permet de traiter des images haute résolution avec très peu de tokens visuels. +2. **Décodeur MoE (3B)** : Basé sur DeepSeek3B-MoE (570M paramètres actifs), il génère le texte structuré à partir des tokens visuels compressés. ### Modes de résolution et consommation - Le modèle adapte sa consommation de tokens à la résolution de l'image. Plus l'image est grande, plus elle consomme de tokens, mais meilleure est la précision. | Mode | Résolution (px) | Vision Tokens | Usage Recommandé | @@ -30,12 +27,11 @@ Le modèle adapte sa consommation de tokens à la résolution de l'image. Plus l | **Large** | 1280 x 1280 | 400 | Documents denses, petits caractères | | **Gundam** | Dynamique | ~800 | Journaux, plans, scans complexes | -:::tip[Optimisation] +:::tip Optimisation Pour optimiser vos coûts et la latence, redimensionnez vos images à la résolution minimale nécessaire pour que le texte reste lisible. ::: ### Support multilingue - Le modèle a été entraîné sur un vaste corpus de documents multilingues et supporte la reconnaissance de près de **100 langues** (dont le français, l'anglais, le chinois, l'arabe, etc.), avec ou sans préservation de la mise en page. ## Guide des prompts (Prompt engineering) @@ -43,7 +39,6 @@ Le modèle a été entraîné sur un vaste corpus de documents multilingues et s La qualité du résultat dépend directement du prompt utilisé. DeepSeek-OCR réagit à des instructions spécifiques pour activer ses différentes capacités. ### 1. OCR standard (Markdown) - Pour extraire le texte avec sa structure (titres, paragraphes, tableaux). **Prompt :** @@ -52,20 +47,17 @@ Pour extraire le texte avec sa structure (titres, paragraphes, tableaux). **Résultat :** Texte structuré, tableaux formatés, mise en page préservée. ### 2. "Deep parsing" (Figures, graphiques, formules) - Pour analyser le contenu sémantique de graphiques, de formules chimiques ou géométriques. **Prompt :** > `Parse the figure.` **Capacités :** - -- **Graphiques (Bar/Line/Pie)** : Convertit en table HTML ou Markdown. -- **Formules Chimiques** : Convertit en format SMILES. -- **Géométrie** : Décrit les éléments géométriques. +- **Graphiques (Bar/Line/Pie)** : Convertit en table HTML ou Markdown. +- **Formules Chimiques** : Convertit en format SMILES. +- **Géométrie** : Décrit les éléments géométriques. ### 3. Grounding (localisation) - Pour trouver les coordonnées d'un élément spécifique dans l'image. **Prompt :** @@ -75,7 +67,6 @@ Pour trouver les coordonnées d'un élément spécifique dans l'image. **Résultat :** Retourne les coordonnées de la boîte englobante (bounding box) de l'élément. ### 4. Détection d'objets - Pour lister et localiser tous les objets visibles. **Prompt :** @@ -86,14 +77,12 @@ Pour lister et localiser tous les objets visibles. Voici un exemple complet montrant comment structurer votre appel API pour utiliser ces capacités. ### Prérequis : format de l'image et dépendances - -- **Format** : JPEG ou PNG. -- **Mode** : RGB (pas de transparence Alpha). -- **PDF** : Doivent être convertis en images au préalable (150-300 DPI). -- **Taille** : Il est recommandé de redimensionner les images très haute résolution pour éviter les erreurs de limite de taille (413 Payload Too Large). +- **Format** : JPEG ou PNG. +- **Mode** : RGB (pas de transparence Alpha). +- **PDF** : Doivent être convertis en images au préalable (150-300 DPI). +- **Taille** : Il est recommandé de redimensionner les images très haute résolution pour éviter les erreurs de limite de taille (413 Payload Too Large). Installez les librairies nécessaires : - ```bash pip install requests Pillow ``` @@ -102,7 +91,7 @@ pip install requests Pillow Prenons l'exemple de ce ticket de caisse suisse : -![Ticket de caisse exemple](./images/ReceiptSwiss.jpg) +![Ticket de caisse exemple](@site/docs/llmaas/images/ReceiptSwiss.jpg) Voici un script robuste qui gère le redimensionnement et l'encodage optimal de l'image : @@ -181,7 +170,6 @@ else: ``` **Exemple de sortie :** - ```markdown # Berghotel **Grosse Scheidegg** @@ -214,15 +202,13 @@ Le modèle retournera une représentation textuelle ou tabulaire des données du ## Cas d'usage avancés ### Extraction de tableaux complexes - DeepSeek-OCR excelle dans la conversion de tableaux, même sans lignes de démarcation claires. **Image Entrée :** -![Tableau financier](./images/tableau.png) +![Tableau financier](@site/docs/llmaas/images/tableau.png) **Sortie Modèle (Prompt: "Convert the document to markdown table.") :** - ```markdown # RESSOURCES PaaS @@ -264,12 +250,11 @@ DeepSeek-OCR excelle dans la conversion de tableaux, même sans lignes de démar ``` ### Formules mathématiques (LaTeX) - Idéal pour les documents académiques. Le modèle reconnaît les équations et les sort en syntaxe LaTeX standard. **Image Entrée :** -![Equation](./images/equation.png) +![Equation](@site/docs/llmaas/images/equation.png) **Sortie Modèle (Prompt: "Convert to latex.") :** @@ -303,6 +288,6 @@ $$ ## Limitations connues -- **Orientation** : Le modèle ne gère pas la rotation automatique. Assurez-vous que vos images sont bien orientées (texte horizontal). -- **Texte manuscrit** : Bien que performant, le taux d'erreur est plus élevé sur l'écriture manuscrite cursive complexe que sur le texte imprimé. -- **Très haute résolution** : Les images dépassant les dimensions du mode "Gundam" (~2000x2000) sont redimensionnées, ce qui peut rendre illisible le texte microscopique. Découpez les très grands plans en plusieurs images. +- **Orientation** : Le modèle ne gère pas la rotation automatique. Assurez-vous que vos images sont bien orientées (texte horizontal). +- **Texte manuscrit** : Bien que performant, le taux d'erreur est plus élevé sur l'écriture manuscrite cursive complexe que sur le texte imprimé. +- **Très haute résolution** : Les images dépassant les dimensions du mode "Gundam" (~2000x2000) sont redimensionnées, ce qui peut rendre illisible le texte microscopique. Découpez les très grands plans en plusieurs images. diff --git a/docs/llmaas/quickstart.md b/docs/llmaas/quickstart.md index f27af98d..bce6f3cb 100644 --- a/docs/llmaas/quickstart.md +++ b/docs/llmaas/quickstart.md @@ -39,7 +39,7 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer VOTRE_CLE_API" \ -d '{ - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "messages": [ { "role": "user", @@ -75,7 +75,7 @@ headers = { # Requête payload = { - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "messages": [ { "role": "user", @@ -106,14 +106,14 @@ Pour votre premier test, utilisez un de ces modèles recommandés : | Modèle | Usage | Vitesse | Note | |--------|--------|---------|------| -| `granite3.3:8b` | Usage général, équilibré | Rapide | Recommandé pour débuter | -| `qwen3:14b` | Tâches complexes | Moyen | Mode "thinking" visible | -| `gemma3:4b` | Tests rapides, prototypage | Très rapide | Réponses détaillées | +| `gpt-oss:120b` | Usage général, équilibré | Moyen | **LTS** — recommandé pour la production | +| `qwen3-2507-think:4b` | Raisonnement complexe | Rapide | **LTS** — compact avec raisonnement profond | +| `qwen3.5:9b` | Chat et analyse | Rapide | Bon compromis taille/qualité | -Consultez le [catalogue complet des modèles](./models) pour plus d'options. +Consultez le [catalogue complet des modèles](./models) pour plus d'options. Préférez les modèles marqués **LTS** pour vos applications en production. -:::tip[Astuce pour les modèles Qwen] -Certains modèles de la famille **Qwen** (comme `qwen3:14b` ou `qwen3:30b-a3b`) disposent d'un mode de raisonnement avancé. Vous pouvez forcer son activation en ajoutant `/think` au début de votre prompt, ou le désactiver pour une réponse plus directe et rapide avec `/nothink`. +:::tip Astuce pour les modèles Qwen avec raisonnement +Certains modèles de la famille **Qwen** (comme `qwen3-2507-think:4b`, `qwen3.5:9b` ou `qwen3.6:27b`) disposent d'un mode de raisonnement avancé. Vous pouvez forcer son activation en ajoutant `/think` au début de votre prompt, ou le désactiver pour une réponse plus directe et rapide avec `/nothink`. ::: ## Paramètres recommandés @@ -132,33 +132,26 @@ Pour débuter, utilisez ces paramètres : ## Gestion des erreurs courantes ### Erreur 401 - Non autorisé - ```json {"error": {"message": "Invalid API key", "type": "invalid_request_error"}} ``` - **Solution** : Vérifiez votre clé API dans la Console Cloud Temple. ### Erreur 400 - Modèle non trouvé - ```json {"error": {"message": "Model not found", "type": "invalid_request_error"}} ``` - **Solution** : Utilisez `/v1/models` pour lister les modèles disponibles. ### Erreur 429 - Limite de débit - ```json {"error": {"message": "Rate limit exceeded", "type": "rate_limit_error"}} ``` - **Solution** : Attendez quelques secondes et réessayez. ## Monitoring de l'usage Dans la Console Cloud Temple, vous pouvez : - - Voir vos requêtes en temps réel - Consulter votre consommation de tokens - Configurer des alertes de coût @@ -179,31 +172,28 @@ Cette section fournit des exemples de scripts Python simples et autonomes pour i Le "Tool Calling" (ou appel de fonction) permet à un modèle de langage de demander l'exécution d'une fonction que vous avez définie dans votre code. C'est une fonctionnalité puissante pour connecter les LLMs à des outils externes (API, bases de données, etc.). Le flux est le suivant : - -1. L'utilisateur pose une question qui nécessite un outil (ex: "quel temps fait-il ?"). -2. Vous envoyez la question et la liste des outils disponibles à l'API. -3. Le modèle, au lieu de répondre directement, renvoie une requête `tool_calls` demandant d'exécuter une fonction spécifique avec certains arguments. -4. Votre code exécute la fonction demandée. -5. Vous renvoyez le résultat de la fonction au modèle. -6. Le modèle utilise ce résultat pour formuler une réponse finale à l'utilisateur. +1. L'utilisateur pose une question qui nécessite un outil (ex: "quel temps fait-il ?"). +2. Vous envoyez la question et la liste des outils disponibles à l'API. +3. Le modèle, au lieu de répondre directement, renvoie une requête `tool_calls` demandant d'exécuter une fonction spécifique avec certains arguments. +4. Votre code exécute la fonction demandée. +5. Vous renvoyez le résultat de la fonction au modèle. +6. Le modèle utilise ce résultat pour formuler une réponse finale à l'utilisateur. **Structure des fichiers** Pour cet exemple, créez un répertoire `simple_tool_calling` avec les fichiers suivants : -- `test_tool_calling.py`: Le script principal. -- `requirements.txt`: Les dépendances Python. -- `.env`: Un modèle pour votre fichier de configuration. +- `test_tool_calling.py`: Le script principal. +- `requirements.txt`: Les dépendances Python. +- `.env`: Un modèle pour votre fichier de configuration. **`requirements.txt`** - ```txt httpx python-dotenv ``` **`.env`** - ```env # URL de base de l'API LLMaaS API_URL="https://api.ai.cloud-temple.com/v1" @@ -213,7 +203,7 @@ API_KEY="votre_cle_api_ici" # Optionnel: Modèle par défaut à utiliser pour le test # Assurez-vous que ce modèle est compatible avec le "tool calling" -DEFAULT_MODEL="qwen3:30b-a3b" +DEFAULT_MODEL="gpt-oss:120b" ``` **Code Source (`test_tool_calling.py`)** @@ -239,7 +229,7 @@ load_dotenv() API_URL = os.getenv("API_URL", "https://api.ai.cloud-temple.com/v1") API_KEY = os.getenv("API_KEY") # Utiliser un modèle connu pour bien gérer le tool calling -MODEL = os.getenv("DEFAULT_MODEL", "qwen3:30b-a3b") +MODEL = os.getenv("DEFAULT_MODEL", "gpt-oss:120b") # --- Définition de l'outil --- @@ -415,16 +405,13 @@ if __name__ == "__main__": **Utilisation** -1. **Installez les dépendances :** - +1. **Installez les dépendances :** ```bash pip install -r tests/llmaas/requirements.txt ``` - -2. **Configurez votre clé API :** +2. **Configurez votre clé API :** Copiez `tests/llmaas/.env.example` en `tests/llmaas/.env` et remplacez `"votre_cle_api_ici"` par votre clé API LLMaaS. -3. **Exécutez le script :** - +3. **Exécutez le script :** ```bash python tests/llmaas/test_tool_calling.py ``` @@ -437,13 +424,12 @@ Les modèles multimodaux peuvent analyser à la fois du texte et des images. Cet Créez un répertoire `simple_vision` avec les fichiers suivants : -- `test_vision.py`: Le script principal. -- `requirements.txt`: Les dépendances (incluant `Pillow` pour générer l'image). -- `.env.example`: Le modèle de configuration. -- `image_example.png`: L'image à analyser (le script la générera pour vous si elle manque). +- `test_vision.py`: Le script principal. +- `requirements.txt`: Les dépendances (incluant `Pillow` pour générer l'image). +- `.env.example`: Le modèle de configuration. +- `image_example.png`: L'image à analyser (le script la générera pour vous si elle manque). **`requirements.txt`** - ```txt httpx python-dotenv @@ -451,7 +437,6 @@ Pillow ``` **`.env.example`** - ```env # URL de base de l'API LLMaaS API_URL="https://api.ai.cloud-temple.com/v1" @@ -604,24 +589,19 @@ if __name__ == "__main__": **Utilisation** -1. **Installez les dépendances :** - +1. **Installez les dépendances :** ```bash pip install -r tests/llmaas/requirements.txt ``` - -2. **Configurez votre clé API :** +2. **Configurez votre clé API :** Copiez `tests/llmaas/.env.example` en `tests/llmaas/.env` et remplacez `"votre_cle_api_ici"` par votre clé API LLMaaS. -3. **Exécutez le script :** - +3. **Exécutez le script :** ```bash python tests/llmaas/test_vision.py ``` - Le script générera automatiquement une image `image_example.png` si elle n'existe pas. --- - ## Prochaines étapes Une fois votre premier test réussi : @@ -634,7 +614,6 @@ Une fois votre premier test réussi : ## Support En cas de problème : - - Consultez la [documentation API complète](./api) - Vérifiez le statut du service dans la Console - Contactez le support via la Console Cloud Temple diff --git a/docs/llmaas/rag_explained.md b/docs/llmaas/rag_explained.md index ee3f7a21..3ec25e7e 100644 --- a/docs/llmaas/rag_explained.md +++ b/docs/llmaas/rag_explained.md @@ -2,7 +2,7 @@ Ce document explique les concepts fondamentaux derrière la technique de **Retrieval-Augmented Generation (RAG)**. -:::tip[Code d'Exemple Disponible] +:::tip Code d'Exemple Disponible Les concepts abordés ici sont illustrés dans un démonstrateur complet et fonctionnel disponible sur notre GitHub. Il constitue une excellente base de départ pour comprendre le fonctionnement pratique d'un pipeline RAG. ➡️ **[Accéder au code du Simple RAG Demo](https://github.com/Cloud-Temple/product-llmaas-how-to/tree/main/simple_rag_demo)** @@ -15,29 +15,28 @@ Un grand modèle de langage (LLM) comme Mistral ou Granite est très puissant, m Le **RAG** est une technique qui permet de donner au LLM un "mémoire externe" en lui fournissant, au moment de la question, les extraits de documents les plus pertinents pour l'aider à formuler sa réponse. Le processus se déroule en deux temps : - -1. **Retrieval (Récupération)** : Trouver les bons documents. -2. **Augmented Generation (Génération Augmentée)** : Utiliser ces documents pour générer une réponse. +1. **Retrieval (Récupération)** : Trouver les bons documents. +2. **Augmented Generation (Génération Augmentée)** : Utiliser ces documents pour générer une réponse. C'est cette étape de **Retrieval** qui est au cœur de notre sujet. Comment un ordinateur parvient-il à "comprendre" qu'une question et un paragraphe parlent de la même chose ? La magie opère grâce aux **vecteurs**. -![Schéma conceptuel du RAG](./images/rag_concept_overview.png) +![Schéma conceptuel du RAG](@site/docs/llmaas/images/rag_concept_overview.png) ## Étape 1 : L'Embedding : Transformer les Mots en Nombres Un ordinateur ne comprend pas les mots, mais il est excellent pour manipuler les nombres. L'**embedding** est le processus qui traduit un texte (un mot, une phrase, un document) en une liste de nombres, appelée **vecteur**. -:::tip[Qu'est-ce qu'un vecteur ?] +:::tip Qu'est-ce qu'un vecteur ? En termes simples, un vecteur est une liste de nombres qui représente un point dans un espace à plusieurs dimensions. Chaque nombre dans le vecteur correspond à une coordonnée sur un "axe" de cet espace. Pour les embeddings de texte, ces axes ne sont pas `x`, `y`, `z` mais des dimensions sémantiques abstraites (par exemple, un axe pourrait représenter le concept de "royauté", un autre celui de "félin", etc.). ::: `"Le chat est sur le tapis."` → `[-0.01, 0.98, 0.45, ..., -0.33]` -![Exemple de vecteur d'embedding](./images/embedding_vector_example.png) +![Exemple de vecteur d'embedding](@site/docs/llmaas/images/embedding_vector_example.png) Ce vecteur n'est pas aléatoire. Il représente la "position" du texte dans un espace sémantique multidimensionnel. Des textes ayant un sens similaire auront des vecteurs qui pointent dans des directions similaires. -:::tip[Analogie Géographique] +:::tip Analogie Géographique Imaginez une carte géographique. "Paris" et "France" seraient très proches, tout comme "Rome" et "Italie". "Paris" serait plus éloigné de "Rome" que de "France", mais plus proche que de "Tokyo". L'embedding fait la même chose, mais avec des milliers de "dimensions" au lieu de deux, pour capturer des nuances de sens complexes. ::: @@ -53,19 +52,19 @@ Alors que les deux dernières années ont vu la prolifération de LLM autorégre Les nouveaux modèles **Granite Embedding** d'IBM, que nous mettons à votre disposition, sont une évolution améliorée de la famille Slate de modèles de langage encodeurs uniquement basés sur RoBERTa. Ils se distinguent sur plusieurs points cruciaux pour un usage en entreprise : -1. **Entraînement Éthique et Commercialement Sûr** : Alors que la grande majorité des modèles d'embedding ouverts du classement MTEB Hugging Face s'appuient sur des ensembles de données d'entraînement uniquement sous licence à des fins de recherche (comme MS-MARCO), IBM a vérifié l'éligibilité commerciale de toutes les sources de données utilisées pour entraîner Granite Embedding. -2. **Indemnisation de Propriété Intellectuelle** : Soulignant le soin apporté à son utilisation en entreprise, IBM prend en charge Granite Embedding avec le même niveau d’indemnisation non plafonnée pour les réclamations de tiers liées à la propriété intellectuelle que celle prévue pour l’utilisation d’autres modèles développés par IBM. -3. **Performance et Efficacité** : Les efforts d’IBM dans l’organisation et le filtrage des données d’entraînement n’ont pas empêché les modèles Granite Embedding de suivre le rythme des principaux modèles d’embedding open source de taille similaire. +1. **Entraînement Éthique et Commercialement Sûr** : Alors que la grande majorité des modèles d'embedding ouverts du classement MTEB Hugging Face s'appuient sur des ensembles de données d'entraînement uniquement sous licence à des fins de recherche (comme MS-MARCO), IBM a vérifié l'éligibilité commerciale de toutes les sources de données utilisées pour entraîner Granite Embedding. +2. **Indemnisation de Propriété Intellectuelle** : Soulignant le soin apporté à son utilisation en entreprise, IBM prend en charge Granite Embedding avec le même niveau d’indemnisation non plafonnée pour les réclamations de tiers liées à la propriété intellectuelle que celle prévue pour l’utilisation d’autres modèles développés par IBM. +3. **Performance et Efficacité** : Les efforts d’IBM dans l’organisation et le filtrage des données d’entraînement n’ont pas empêché les modèles Granite Embedding de suivre le rythme des principaux modèles d’embedding open source de taille similaire. Les benchmarks ci-dessous illustrent deux avantages clés : -- **Précision de la Recherche** : Le premier graphique montre que les modèles Granite (en bleu) sont très compétitifs, voire supérieurs, à des modèles de taille similaire sur des tâches de recherche sémantique (`Retrieval Tasks`). -- **Vitesse d'Inférence** : Le second graphique montre que les modèles Granite sont **nettement plus rapides** (temps par requête plus faible) que la plupart des alternatives populaires, ce qui est un avantage considérable pour les applications nécessitant des réponses en temps réel. +- **Précision de la Recherche** : Le premier graphique montre que les modèles Granite (en bleu) sont très compétitifs, voire supérieurs, à des modèles de taille similaire sur des tâches de recherche sémantique (`Retrieval Tasks`). +- **Vitesse d'Inférence** : Le second graphique montre que les modèles Granite sont **nettement plus rapides** (temps par requête plus faible) que la plupart des alternatives populaires, ce qui est un avantage considérable pour les applications nécessitant des réponses en temps réel. -![Benchmark de Performance des Modèles Granite](./images/granite_benchmark_performance.png) +![Benchmark de Performance des Modèles Granite](@site/docs/llmaas/images/granite_benchmark_performance.png) *Comparaison des performances sur des tâches de recherche (BEIR) et de recherche de code (CoIR).* -![Benchmark de Vitesse des Modèles Granite](./images/granite_benchmark_speed.png) +![Benchmark de Vitesse des Modèles Granite](@site/docs/llmaas/images/granite_benchmark_speed.png) *Comparaison de la latence (temps par requête en secondes) entre différents modèles d'embedding.* C'est pour cet équilibre entre **performance, vitesse, sécurité juridique et éthique** que nous avons choisi d'intégrer le modèle `granite-embedding:278m` (la version multilingue la plus puissante) comme service d'embedding par défaut. @@ -78,32 +77,30 @@ Il existe plusieurs façons de mesurer cette "proximité". Notre script en utili ### La Similarité Cosinus (Le Standard) -- **Concept** : Elle ne mesure pas la distance, mais l'**angle** entre deux vecteurs. Un angle faible (proche de 0°) signifie que les vecteurs pointent dans la même direction, et donc que les textes ont un sens très similaire. -- **Score** : Le cosinus d'un angle de 0° est 1 (similarité parfaite). Le cosinus d'un angle de 90° est 0 (aucune similarité). -- **Pourquoi est-elle si utilisée ?** Pour le texte, la *direction* sémantique est beaucoup plus importante que la *magnitude* (la longueur) du vecteur. La similarité cosinus ignore la magnitude et se concentre uniquement sur la direction. +- **Concept** : Elle ne mesure pas la distance, mais l'**angle** entre deux vecteurs. Un angle faible (proche de 0°) signifie que les vecteurs pointent dans la même direction, et donc que les textes ont un sens très similaire. +- **Score** : Le cosinus d'un angle de 0° est 1 (similarité parfaite). Le cosinus d'un angle de 90° est 0 (aucune similarité). +- **Pourquoi est-elle si utilisée ?** Pour le texte, la *direction* sémantique est beaucoup plus importante que la *magnitude* (la longueur) du vecteur. La similarité cosinus ignore la magnitude et se concentre uniquement sur la direction. **Exemple simple en 2D :** - -- Question : `v_q = [2, 2]` -- Doc A : `v_a = [4, 4]` (même sens, plus long) -- Doc B : `v_b = [-2, 2]` (direction différente) +- Question : `v_q = [2, 2]` +- Doc A : `v_a = [4, 4]` (même sens, plus long) +- Doc B : `v_b = [-2, 2]` (direction différente) Le calcul de la similarité cosinus donnera : +- `cos(v_q, v_a) = 1.0` → Angle de 0°. Similarité parfaite. +- `cos(v_q, v_b) = 0.0` → Angle de 90°. Aucune similarité. -- `cos(v_q, v_a) = 1.0` → Angle de 0°. Similarité parfaite. -- `cos(v_q, v_b) = 0.0` → Angle de 90°. Aucune similarité. - -![Illustration de la Similarité Cosinus](./images/cosine_similarity_concept.png) +![Illustration de la Similarité Cosinus](@site/docs/llmaas/images/cosine_similarity_concept.png) C'est le résultat que nous voulons : le Document A est sémantiquement identique à la question, même si sa formulation est plus longue. ### La Distance Euclidienne (La Règle) -- **Concept** : C'est la distance "à vol d'oiseau" entre les points terminaux des deux vecteurs. -- **Score** : Un score de 0 signifie que les vecteurs sont identiques. Plus le score est élevé, plus ils sont éloignés. -- **Inconvénient pour le texte** : Elle est sensible à la magnitude. Dans notre exemple ci-dessus, la distance entre `v_q` et `v_a` ne serait pas nulle, car les vecteurs n'ont pas la même longueur, même s'ils ont le même sens. +- **Concept** : C'est la distance "à vol d'oiseau" entre les points terminaux des deux vecteurs. +- **Score** : Un score de 0 signifie que les vecteurs sont identiques. Plus le score est élevé, plus ils sont éloignés. +- **Inconvénient pour le texte** : Elle est sensible à la magnitude. Dans notre exemple ci-dessus, la distance entre `v_q` et `v_a` ne serait pas nulle, car les vecteurs n'ont pas la même longueur, même s'ils ont le même sens. -![Illustration de la Distance Euclidienne](./images/euclidean_distance_concept.png) +![Illustration de la Distance Euclidienne](@site/docs/llmaas/images/euclidean_distance_concept.png) ## Conclusion diff --git a/docs/llmaas/rerank.md b/docs/llmaas/rerank.md new file mode 100644 index 00000000..92e4033e --- /dev/null +++ b/docs/llmaas/rerank.md @@ -0,0 +1,371 @@ +--- +title: Reranking +sidebar_position: 5 +--- + +# Reranking de Documents + +## Qu'est-ce que le Reranking ? + +Le **reranking** est une étape cruciale dans les pipelines RAG (Retrieval-Augmented Generation). Après une recherche vectorielle initiale (embedding), un modèle de reranking prend les `N` documents candidats et les **réordonne** par pertinence sémantique fine vis-à-vis de la requête de l'utilisateur. + +### Pourquoi le Reranking améliore-t-il les résultats ? + +``` +Requête utilisateur + │ + ▼ + ┌─────────────┐ ┌────────────────────────────────────┐ + │ Embedding │──────►│ Top-100 documents (recherche │ + │ + Vector │ │ vectorielle approximative/ANN) │ + │ Search │ └────────────────────────────────────┘ + └─────────────┘ │ + ▼ + ┌────────────────────┐ + │ Reranker │ + │ (analyse précise │ + │ requête↔document) │ + └────────────────────┘ + │ + ▼ + Top-5 documents triés + par pertinence réelle +``` + +- La **recherche vectorielle** (embedding) est rapide mais approximative — elle calcule une similarité cosinus dans un espace multidimensionnel +- Le **reranker** fait une analyse croisée fine de chaque paire (requête, document) et produit un score de pertinence précis +- Résultat : un RAG avec reranking a typiquement **+15 à +30% de précision** sur les réponses générées + +## Modèles Disponibles + +| Modèle | Éditeur | Contexte | LTS | Usage recommandé | +|--------|---------|----------|-----|-----------------| +| `nvidia/llama-nemotron-rerank-vl-1b-v2` | NVIDIA | 4 096 | Non | **Recommandé** — précision maximale, DSP 30/06/2027 | +| `qwen3-reranker:4b` | Qwen Team | 4 096 | Non | Haute qualité, compréhension contextuelle approfondie | +| `qwen3-reranker:0.6b` | Qwen Team | 4 096 | Non | Compact et rapide, idéal pour faible latence | +| `bge-reranker-large` | BAAI | 512 | Non | Multilingue, haute performance | + +:::tip Quel modèle choisir ? +- **Production RAG** : `nvidia/llama-nemotron-rerank-vl-1b-v2` — meilleure précision +- **Faible latence** : `qwen3-reranker:0.6b` — le plus rapide +- **Multilingue** : `bge-reranker-large` — optimisé pour de nombreuses langues +::: + +## Tarification + +**4.00 € / million de tokens rerankés** — environ **50% moins cher** que les tokens de génération standard. + +Le nombre de tokens rerankés correspond à la somme des tokens de la requête et de chaque document traité. + +## Endpoints + +L'API LLMaaS expose deux endpoints compatibles avec le SDK Cohere : + +| Endpoint | Version | Compatible | +|----------|---------|------------| +| `POST /v1/rerank` | Cohere v1 | SDK Cohere v4, appels directs | +| `POST /v2/rerank` | Cohere v2 | SDK Cohere v5+ | + +## Format de la Requête + +```bash +curl -X POST "https://api.ai.cloud-temple.com/v1/rerank" \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ + -d '{ + "model": "nvidia/llama-nemotron-rerank-vl-1b-v2", + "query": "Quelles sont les garanties de souveraineté de LLMaaS ?", + "documents": [ + "Cloud Temple est hébergé exclusivement en France.", + "Les tarifs débutent à 1.8€ par million de tokens.", + "LLMaaS est qualifié SecNumCloud 3.2 par l'\''ANSSI.", + "L'\''API est compatible avec le standard OpenAI.", + "Les données ne sont ni stockées ni transférées hors de France." + ], + "top_n": 3 + }' +``` + +### Paramètres + +| Paramètre | Type | Obligatoire | Description | +|-----------|------|-------------|-------------| +| `model` | string | ✅ | ID du modèle de reranking | +| `query` | string | ✅ | La requête de recherche | +| `documents` | array of strings | ✅ | Les documents à réordonner | +| `top_n` | integer | ❌ | Nombre de résultats à retourner (défaut : tous) | +| `return_documents` | boolean | ❌ | Inclure le texte des documents dans la réponse (défaut : true) | + +### Format de la Réponse + +```json +{ + "id": "rerank-7f3a2b1c4e5d", + "results": [ + { + "index": 0, + "relevance_score": 0.9821, + "document": { + "text": "Cloud Temple est hébergé exclusivement en France." + } + }, + { + "index": 2, + "relevance_score": 0.9743, + "document": { + "text": "LLMaaS est qualifié SecNumCloud 3.2 par l'ANSSI." + } + }, + { + "index": 4, + "relevance_score": 0.9512, + "document": { + "text": "Les données ne sont ni stockées ni transférées hors de France." + } + } + ], + "usage": { + "billed_units": { + "search_units": 5 + } + } +} +``` + +- `results` : Documents triés par score décroissant +- `index` : Position originale dans le tableau `documents` envoyé +- `relevance_score` : Score de pertinence entre 0 et 1 (plus c'est élevé, plus c'est pertinent) +- `search_units` : Nombre de documents rerankés (pour la facturation) + +## Exemples d'Implémentation + +### Python — Appel direct (httpx) + +```python +import httpx +import os + +API_KEY = os.getenv("LLMAAS_API_KEY") +BASE_URL = "https://api.ai.cloud-temple.com/v1" + +def rerank(query: str, documents: list[str], top_n: int = 5, model: str = "nvidia/llama-nemotron-rerank-vl-1b-v2") -> list[dict]: + """ + Réordonne des documents par pertinence vis-à-vis d'une requête. + + Args: + query: La requête de l'utilisateur + documents: Liste de documents candidats + top_n: Nombre de résultats à retourner + model: Modèle de reranking à utiliser + + Returns: + Liste de documents triés par pertinence décroissante + """ + payload = { + "model": model, + "query": query, + "documents": documents, + "top_n": top_n + } + + with httpx.Client(timeout=30.0) as client: + response = client.post( + f"{BASE_URL}/rerank", + headers={"Authorization": f"Bearer {API_KEY}"}, + json=payload + ) + response.raise_for_status() + + return response.json()["results"] + +# Utilisation +query = "Quelles sont les garanties de souveraineté ?" +documents = [ + "Cloud Temple est une société française.", + "LLMaaS est qualifié SecNumCloud 3.2.", + "L'API supporte le streaming SSE.", + "Les données ne quittent jamais la France.", + "La facturation est basée sur les tokens consommés." +] + +results = rerank(query, documents, top_n=3) +for result in results: + print(f"Score: {result['relevance_score']:.4f} | {result['document']['text']}") +``` + +### Python — SDK Cohere + +```python +import cohere +import os + +# Le SDK Cohere pointe vers l'API LLMaaS +co = cohere.Client( + api_key=os.getenv("LLMAAS_API_KEY"), + base_url="https://api.ai.cloud-temple.com" +) + +results = co.rerank( + model="nvidia/llama-nemotron-rerank-vl-1b-v2", + query="Quelles sont les garanties de souveraineté ?", + documents=[ + "Cloud Temple est une société française.", + "LLMaaS est qualifié SecNumCloud 3.2.", + "L'API supporte le streaming SSE.", + ], + top_n=2 +) + +for result in results.results: + print(f"Index: {result.index} | Score: {result.relevance_score:.4f}") +``` + +### Intégration dans un Pipeline RAG Complet + +```python +import httpx +import os +from typing import List + +API_KEY = os.getenv("LLMAAS_API_KEY") +BASE_URL = "https://api.ai.cloud-temple.com/v1" +HEADERS = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"} + +def embed_query(query: str) -> list[float]: + """Vectorise la requête pour la recherche sémantique.""" + with httpx.Client(timeout=30.0) as client: + r = client.post( + f"{BASE_URL}/embeddings", + headers=HEADERS, + json={"model": "granite-embedding:278m", "input": query} + ) + r.raise_for_status() + return r.json()["data"][0]["embedding"] + +def vector_search(query_vector: list[float], top_k: int = 20) -> list[str]: + """ + Recherche vectorielle dans votre base de données (FAISS, Qdrant, etc.). + Retourne les top_k documents candidats. + [Implémentation spécifique à votre stack vectorielle] + """ + # Exemple fictif — remplacez par votre logique de recherche + return [f"Document candidat {i}" for i in range(top_k)] + +def rerank_documents(query: str, documents: list[str], top_n: int = 5) -> list[str]: + """Réordonne les documents candidats par pertinence fine.""" + with httpx.Client(timeout=30.0) as client: + r = client.post( + f"{BASE_URL}/rerank", + headers=HEADERS, + json={ + "model": "nvidia/llama-nemotron-rerank-vl-1b-v2", + "query": query, + "documents": documents, + "top_n": top_n + } + ) + r.raise_for_status() + + results = r.json()["results"] + # Retourne les documents dans l'ordre de pertinence + return [documents[res["index"]] for res in results] + +def generate_answer(query: str, context_docs: list[str]) -> str: + """Génère une réponse basée sur les documents rerankés.""" + context = "\n\n".join([f"[Doc {i+1}]: {doc}" for i, doc in enumerate(context_docs)]) + + with httpx.Client(timeout=60.0) as client: + r = client.post( + f"{BASE_URL}/chat/completions", + headers=HEADERS, + json={ + "model": "gpt-oss:120b", + "messages": [ + { + "role": "system", + "content": "Tu es un assistant qui répond aux questions basé uniquement sur le contexte fourni." + }, + { + "role": "user", + "content": f"Contexte:\n{context}\n\nQuestion: {query}" + } + ], + "max_tokens": 500, + "temperature": 0.1 + } + ) + r.raise_for_status() + + return r.json()["choices"][0]["message"]["content"] + +def rag_pipeline(query: str) -> str: + """Pipeline RAG complet : Embed → Search → Rerank → Generate.""" + print(f"📝 Requête : {query}") + + # 1. Vectorisation de la requête + print("🔢 Vectorisation...") + query_vector = embed_query(query) + + # 2. Recherche vectorielle (top-20 candidats) + print("🔍 Recherche vectorielle (top-20)...") + candidates = vector_search(query_vector, top_k=20) + + # 3. Reranking (sélection des top-5) + print("📊 Reranking (→ top-5)...") + top_docs = rerank_documents(query, candidates, top_n=5) + + # 4. Génération de la réponse + print("✍️ Génération de la réponse...") + answer = generate_answer(query, top_docs) + + return answer + +# Exemple d'utilisation +if __name__ == "__main__": + question = "Quelles sont les garanties de conformité RGPD de Cloud Temple ?" + reponse = rag_pipeline(question) + print(f"\n💬 Réponse : {reponse}") +``` + +## Bonnes Pratiques + +### Optimisation des Coûts + +```python +# ✅ BON : Reranker sur un sous-ensemble raisonnable (20-50 docs) +candidates = vector_search(query_vector, top_k=20) +top_docs = rerank_documents(query, candidates, top_n=5) + +# ❌ MAUVAIS : Reranker toute la base de données (1000+ docs) +# candidates = all_documents # Trop lent et coûteux +``` + +### Choix du `top_n` + +| Cas d'usage | `top_k` (search) | `top_n` (rerank) | +|------------|-----------------|-----------------| +| Chat/QA simple | 10-20 | 3-5 | +| Analyse de document | 20-50 | 5-10 | +| Synthèse complexe | 50-100 | 10-15 | + +### Seuil de Pertinence + +```python +# Filtre les documents peu pertinents (score < 0.3) +RELEVANCE_THRESHOLD = 0.3 + +def rerank_with_threshold(query: str, documents: list[str]) -> list[str]: + results = rerank_documents(query, documents, top_n=len(documents)) + return [ + documents[r["index"]] + for r in results + if r["relevance_score"] >= RELEVANCE_THRESHOLD + ] +``` + +## Ressources + +- **Code d'exemple complet** : [`exemples/simple_rerank/`](https://github.com/Cloud-Temple/product-llmaas-how-to/tree/main/simple_rerank) +- **Catalogue modèles** : [Modèles de Reranking](./models#modèles-de-reranking) +- **API Reference** : [POST /v1/rerank](./api#post-v1rerank) +- **RAG Explained** : [Guide complet RAG](./rag_explained) diff --git a/docs/llmaas/tutorials.md b/docs/llmaas/tutorials.md index d516c6f9..4eed3f04 100644 --- a/docs/llmaas/tutorials.md +++ b/docs/llmaas/tutorials.md @@ -325,7 +325,7 @@ Ce tutoriel adapte le pipeline RAG précédent pour utiliser Qdrant. * **`force_recreate=True`** : Pour ce tutoriel, nous utilisons ce paramètre pour nous assurer que la collection est vide à chaque exécution. En production, vous le mettriez à `False` pour conserver vos données. 3. **Le reste du pipeline** (configuration du LLM, création de la chaîne `RetrievalQA`) est identique, ce qui démontre la flexibilité de LangChain : il suffit de changer la source du `retriever` (le chercheur d'informations) pour passer de FAISS à Qdrant. -:::info[Prérequis : Lancer Qdrant] +:::info Prérequis : Lancer Qdrant Pour ce tutoriel, vous aurez besoin d'une instance Qdrant. Vous pouvez la lancer facilement avec Docker : ```bash @@ -335,7 +335,6 @@ docker pull qdrant/qdrant # 2. Démarrer le conteneur Qdrant docker run -p 6333:6333 -p 6334:6334 qdrant/qdrant ``` - ::: Le code ci-dessous montre comment adapter le pipeline RAG pour utiliser Qdrant comme base de données vectorielle. @@ -670,7 +669,7 @@ def semantic_kernel_simulation(): text_to_summarize = """ L'intelligence artificielle (IA) transforme de nombreux secteurs industriels en automatisant les tâches, en optimisant les processus et en permettant des analyses prédictives avancées. - Cloud Temple, avec son produit LLMaaS souveraine et certifiée SecNumCloud, permet aux entreprises + Cloud Temple, avec son offre LLMaaS souveraine et certifiée SecNumCloud, permet aux entreprises d'intégrer ces capacités d'IA tout en garantissant la sécurité et la confidentialité de leurs données. """ @@ -873,7 +872,7 @@ def setup_and_run_llamaindex(): # 6. Création du moteur de requête et interrogation de la base de connaissances print("6. Création du moteur de requête et interrogation...") query_engine = index.as_query_engine() - question = "Quelles sont les garanties de souveraineté de le produit LLMaaS ?" + question = "Quelles sont les garanties de souveraineté de l'offre LLMaaS ?" response = query_engine.query(question) print(f"\nQuestion: {question}") @@ -897,18 +896,18 @@ Ce tutoriel vous guide pour configurer l'extension CLINE dans Visual Studio Code 2. **Créer un nouveau modèle** : Ajoutez une nouvelle configuration de modèle. 3. **Remplir les champs** : Configurez les champs comme suit, en vous basant sur l'image ci-dessous. - ![Configuration de CLINE pour LLMaaS](./images/cline_configuration.png) + ![Configuration de CLINE pour LLMaaS](@site/docs/llmaas/images/cline_configuration.png) * **API Provider**: Sélectionnez `OpenAI Compatible`. * **Base URL**: Entrez l'endpoint de l'API LLMaaS de Cloud Temple : `https://api.ai.cloud-temple.com/v1`. * **OpenAI Compatible API Key**: Collez la clé d'API que vous avez générée depuis la console Cloud Temple. - + :::tip Génération de la clé API Pour générer votre clé API, rendez-vous dans la console Cloud Temple, section **LLMaaS** > **Clés API**, puis cliquez sur **"Créer une clé API"**. - - ![Création d'une clé API depuis la console](./images/console_create_api_key.png) + + ![Création d'une clé API depuis la console](@site/docs/llmaas/images/console_create_api_key.png) ::: - + * **Model ID**: Spécifiez le modèle que vous souhaitez utiliser, par exemple `qwen3-coder:30b`. Vous pouvez trouver la liste des modèles disponibles dans la section [Modèles](./models.md). * **Model Configuration**: * **Supports Images**: Cochez cette case si le modèle supporte les images. @@ -928,18 +927,17 @@ Vous trouverez dans le répertoire GitHub ci-dessous une collection d'exemples d [Cloud-Temple/product-llmaas-how-to](https://github.com/Cloud-Temple/product-llmaas-how-to/tree/main) Vous y trouverez des guides pratiques pour : +- __Extraction d'Informations et Analyse de Texte :__ Capacité à analyser des documents pour en extraire des données structurées telles que des entités, des événements, des relations et des attributs, en s'appuyant sur des ontologies spécifiques à des domaines (ex: juridique, RH, IT). -* **Extraction d'Informations et Analyse de Texte :** Capacité à analyser des documents pour en extraire des données structurées telles que des entités, des événements, des relations et des attributs, en s'appuyant sur des ontologies spécifiques à des domaines (ex: juridique, RH, IT). - -* **Interaction Conversationnelle et Chatbots :** Développement d'agents conversationnels capables de dialoguer, de maintenir un historique d'échange, d'utiliser des instructions système (prompts système) et d'invoquer des outils externes. +- __Interaction Conversationnelle et Chatbots :__ Développement d'agents conversationnels capables de dialoguer, de maintenir un historique d'échange, d'utiliser des instructions système (prompts système) et d'invoquer des outils externes. -* **Transcription Audio (Speech-to-Text) :** Conversion de contenu audio en texte, y compris pour des fichiers volumineux, grâce à des techniques de découpage, de normalisation et de traitement par lots. +- __Transcription Audio (Speech-to-Text) :__ Conversion de contenu audio en texte, y compris pour des fichiers volumineux, grâce à des techniques de découpage, de normalisation et de traitement par lots. -* **Traduction de Texte :** Traduction de documents d'une langue à une autre, en gérant le contexte sur plusieurs segments pour améliorer la cohérence. +- __Traduction de Texte :__ Traduction de documents d'une langue à une autre, en gérant le contexte sur plusieurs segments pour améliorer la cohérence. -* **Gestion et Évaluation des Modèles :** Listage des modèles de langage disponibles via l'API, consultation de leurs spécifications et exécution de tests pour comparer leurs performances. +- __Gestion et Évaluation des Modèles :__ Listage des modèles de langage disponibles via l'API, consultation de leurs spécifications et exécution de tests pour comparer leurs performances. -* **Streaming de Réponses en Temps Réel :** Démonstration de la capacité à recevoir et afficher les réponses des modèles de manière progressive (token par token), essentielle pour les applications interactives. -* **Pipeline RAG avec Base de Connaissances en Mémoire :** Démonstrateur RAG pédagogique pour illustrer le fonctionnement du Retrieval-Augmented Generation. Utilise l'API LLMaaS pour l'embedding et la génération, avec stockage des vecteurs en mémoire (FAISS) pour une compréhension claire du processus. -* **Pipeline RAG avec Base de Données Vectorielle (Qdrant) :** Démonstrateur RAG complet et conteneurisé utilisant Qdrant comme base de données vectorielle. L'API LLMaaS est utilisée pour l'embedding des documents et la génération de réponses augmentées. -* **OCR & Analyse de Documents (DeepSeek-OCR) :** Guide complet et outil de démonstration pour convertir des images et PDF en Markdown structuré, extraire des tableaux et transcrire des formules mathématiques. Voir la [documentation dédiée](./ocr). +- __Streaming de Réponses en Temps Réel :__ Démonstration de la capacité à recevoir et afficher les réponses des modèles de manière progressive (token par token), essentielle pour les applications interactives. +- __Pipeline RAG avec Base de Connaissances en Mémoire :__ Démonstrateur RAG pédagogique pour illustrer le fonctionnement du Retrieval-Augmented Generation. Utilise l'API LLMaaS pour l'embedding et la génération, avec stockage des vecteurs en mémoire (FAISS) pour une compréhension claire du processus. +- __Pipeline RAG avec Base de Données Vectorielle (Qdrant) :__ Démonstrateur RAG complet et conteneurisé utilisant Qdrant comme base de données vectorielle. L'API LLMaaS est utilisée pour l'embedding des documents et la génération de réponses augmentées. +- __OCR & Analyse de Documents (DeepSeek-OCR) :__ Guide complet et outil de démonstration pour convertir des images et PDF en Markdown structuré, extraire des tableaux et transcrire des formules mathématiques. Voir la [documentation dédiée](./ocr). diff --git a/docs/managed_kubernetes/concepts.md b/docs/managed_kubernetes/concepts.md index 9b07d08c..a6058479 100644 --- a/docs/managed_kubernetes/concepts.md +++ b/docs/managed_kubernetes/concepts.md @@ -2,10 +2,10 @@ title: Concepts --- -import cillium from './images/cillium.png' -import grafana from './images/grafana.png' -import archi_overview from './images/archi_overview.png' -import archi_overview_1az from './images/archi_overview_1az.png' +import cillium from '@site/docs/managed_kubernetes/images/cillium.png' +import grafana from '@site/docs/managed_kubernetes/images/grafana.png' +import archi_overview from '@site/docs/managed_kubernetes/images/archi_overview.png' +import archi_overview_1az from '@site/docs/managed_kubernetes/images/archi_overview_1az.png' ## Nos offres Managed Kubernetes diff --git a/docs/managed_kubernetes/managed_core_kubernetes.md b/docs/managed_kubernetes/managed_core_kubernetes.md index 60961792..cf2d0e89 100644 --- a/docs/managed_kubernetes/managed_core_kubernetes.md +++ b/docs/managed_kubernetes/managed_core_kubernetes.md @@ -1,8 +1,8 @@ --- title: Vue d'ensemble --- -import archiOverview1az from './images/archi_overview_1az.png' -import archiOverview from './images/archi_overview.png' +import archiOverview1az from '@site/docs/managed_kubernetes/images/archi_overview_1az.png' +import archiOverview from '@site/docs/managed_kubernetes/images/archi_overview.png' # Managed Core Kubernetes diff --git a/docs/managed_kubernetes/managed_kubernetes.md b/docs/managed_kubernetes/managed_kubernetes.md index d7b05de3..d0bf441c 100644 --- a/docs/managed_kubernetes/managed_kubernetes.md +++ b/docs/managed_kubernetes/managed_kubernetes.md @@ -61,7 +61,7 @@ Idéale pour les environnements de POC, cette architecture compacte déploie tou - Ne bénéficie pas de SLA de haute disponibilité. - aucune restriction de sécurité -Architecture Mono-AZ +Architecture Mono-AZ ### Architecture Production (Multi-AZ) @@ -75,7 +75,7 @@ Conçue pour la production et les applications critiques, cette architecture dis - **Nœuds Bare Metal (Optionnel)** : Intégration possible de nœuds workers de type **"Bare Metal"** pour des besoins de performance spécifiques, notamment le **support des GPU**. - **SLA de 99.90%**. -Architecture Multi-AZ +Architecture Multi-AZ --- diff --git a/docs/managed_kubernetes/tutorials/networking.md b/docs/managed_kubernetes/tutorials/networking.md index 31df9ce5..81add07d 100644 --- a/docs/managed_kubernetes/tutorials/networking.md +++ b/docs/managed_kubernetes/tutorials/networking.md @@ -1,226 +1,229 @@ ---- -title: le réseau dans Kubernetes Managé ---- - -import cillium from './images/cillium.png' - ---- - -## Objectifs - -Ce tutoriel a pour objectif de vous familiariser avec les concepts réseau fondamentaux de l'offre **Managed Kubernetes**. À la fin de ce guide, vous serez en mesure de : - -- Comprendre le plan d'adressage IP de votre cluster (nœuds, pods, services). -- Connaître les différents mécanismes pour exposer vos applications (Ingress, LoadBalancer). -- Visualiser les flux réseau et les politiques de sécurité avec Hubble. - -Nous prendrons comme **exemple** un cluster **"ctodev"**, dont le range attribué est **10.20.0.0/22** - -:::warning[définition des ranges ] - Ce range d'IP privées X.Y.Z.0/22 (RFC 1918) est défini avec le client lors de la mise en place du cluster. Il ne peut pas être modifié plus tard. -::: - -## Plan d'adressage IP - -Votre cluster Kubernetes Managé dispose d'un VLAN multi-zonal avec un range d'adresses IPv4 en /22. - -Le range de notre **exemple** 10.20.0.0/22 est découpé de manière logique en sous-ranges. - - - 10.20.0.0/24 est attribué aux Noeuds du cluster: - - - 10.20.0.10 : ctodev-gitrunner (la machine qui pilote l'infrastructure) - - - 10.20.0.20 : IP virtuelle (load balancée) du service API Kubernetes - - 10.20.0.21 : ctodev-cp-01 (control plane 01) - - 10.20.0.22 : ctodev-cp-02 (control plane 02) - - 10.20.0.23 : ctodev-cp-03 (control plane 03) - - - 10.20.0.41 : ctodev-ceph-01 (Ceph Storage 01) - - 10.20.0.42 : ctodev-ceph-02 (Ceph Storage 02) - - 10.20.0.43 : ctodev-ceph-03 (Ceph Storage 03) - - - 10.20.0.51 : ctodev-wrk-01 (Worker 01) - - 10.20.0.52 : ctodev-wrk-02 (Worker 02) - - 10.20.0.53 : ctodev-wrk-03 (Worker 03) - - ... - - 10.20.0.151 : ctodev-wrk-100 (Worker 100) - - - MetalLB interne : 10.20.1.1 – 10.20.1.127 - - - 10.20.1.1 : ingress `nginx-internal` - - - MetalLB externe : 10.20.1.128 – 10.20.1.254 - - - 10.20.1.128 : ingress `nginx-external` - - 10.20.1.129 : ingress `nginx-external-secure` - - - Pods: 10.241.0.0/16 - - - Services: 10.95.0.0/12 - -:::warning[Ranges Pods et Services ] -Les ranges Pods et Services sont définis avec le client lors de la mise en place du cluster. Ils ne peuvent pas être modifiés plus tard. -::: - -## Utilisation de MetalLB - -MetalLB est le composant qui permet d'exposer des services de couche 3 (non web / L7) directement sur une adresse IP, qu'elle soit interne ou externe, en utilisant le type de service `LoadBalancer`. C'est une alternative aux Ingress pour les applications non-HTTP ou pour des cas d'usage spécifiques. - -Pour utiliser MetalLB, il vous suffit de créer un service de type `LoadBalancer`. MetalLB lui assignera automatiquement une adresse IP depuis les plages préconfigurées. La distinction entre les plages `interne` et `externe` est une mesure de sécurité pour garantir qu'une application destinée à un usage interne ne soit pas exposée sur un réseau public par erreur. - -**Exemple : Exposer un service sur le réseau interne** - -```yaml -apiVersion: v1 -kind: Service -metadata: - name: mon-service-interne - namespace: mon-namespace -spec: - selector: - app: mon-app - ports: - - protocol: TCP - port: 8080 - targetPort: 80 - type: LoadBalancer -``` - -Après avoir appliqué ce manifeste, votre service se verra attribuer une adresse IP dans la plage `10.20.1.1 – 10.20.1.127` et sera accessible depuis votre réseau interne connecté au cluster. - -**Exemple : Exposer un service sur le réseau externe** - -Pour demander une adresse IP depuis la plage externe (`10.20.1.128 – 10.20.1.254`), vous devez ajouter le label `lb-type: external` à votre service. - -```yaml -apiVersion: v1 -kind: Service -metadata: - name: mon-service-externe - namespace: mon-namespace - labels: - lb-type: external -spec: - selector: - app: mon-app - ports: - - protocol: TCP - port: 8080 - targetPort: 80 - type: LoadBalancer -``` - -> **Important** : Cette plage reste **dans un espace d’adressage privé**. Pour une **exposition publique**, il est nécessaire de créer une **règle NAT (DNAT)** sur le firewall de votre infrastructure afin de rediriger le trafic d'une de vos IP publiques externes vers l’adresse IP privée attribuée par MetalLB. - -## IP Publiques - -Votre cluster Kubernetes Managé a été livré d'origine avec 2 adresses IPv4 publiques. - -La 1ère IP est utilisée sur le port 6443 pour l'API Kubernetes (dans notre exemple ctodev.mk.ms-cloud-temple.com:6443) - -Cette même IP est aussi NATée sur l'ingress controller *"nginx-external-secured"* pour le port 443. Ceci permet l'exposition des différentes consoles mises à votre disposition (voir le guide quickstart). Les accès à cette IP publique sont **filtrés** avec une liste d'IP autorisées. - ---- -La 2ème IP publique est NAtée sur l'ingress controller *"nginx-external"*, sur les ports 80 et 443. - -Les applications exposées avec l'ingress class *"nginx-external"* seront donc directement accessible depuis Internet sur cette IP. - -*Si vous souhaitez une modification des règles de firewall (ajout/retrait d'IP autorisées), vous devez faire une demande de support.* - -*Il est possible d'ajouter d'autres IP publiques si vous le souhaitez.* - -## DNS - -Pour le DNS interne (CoreDNS), le cluster aura ces paramètres: - -- Nom du cluster : `` -- Domaine interne : `-cluster.local` (dans notre exemple : ctodev-cluster.local) - -Ce domaine interne est crucial pour la communication inter-services au sein du cluster. Il permet à une application de contacter une autre application en utilisant simplement son nom de service Kubernetes, sans avoir à connaître son adresse IP interne. - -Par exemple, un service nommé `api-backend` dans le namespace `production` sera automatiquement résolvable à l'adresse `api-backend.production.svc.ctodev-cluster.local`. - ---- - -La zone DNS publique utilisée pour les clusters Kubernetes Managé est `.mk.ms-cloud-temple.com` - -L'ingress *"nginx-external"* (mappé sur l'IP publique n°2) est accessible sur `"*.external..mk.ms-cloud-temple.com"`. -Si vous publiez une application avec cet ingress-class, vous pourrez y accéder directement via ce nom de domaine. Voir le tutoriel : [Déployer votre première application](./firstdeploy) - -## Hubble : L'observabilité réseau à portée de main - -Hubble est une interface graphique et en ligne de commande pour visualiser et comprendre les flux réseau de votre cluster. Basé sur Cilium, il vous offre une cartographie détaillée des services, des dépendances et des politiques réseau en temps réel. - -Avec Hubble, vous pouvez : - -- **Visualiser les flux de trafic** entre vos pods et services. -- **Identifier les problèmes de connectivité** et les erreurs réseau. -- **Vérifier l'application de vos politiques de sécurité** (Network Policies). -- **Explorer les dépendances** entre vos différentes applications. - -### Accéder à l'interface Hubble - -L'interface graphique de Hubble est exposée sur une URL interne de votre cluster. L'accès n'est pas possible via un port-forwarding `kubectl` car les utilisateurs ne disposent pas des droits suffisants sur le namespace `kube-system`. - -Pour y accéder, vous devez être connecté au réseau interne du cluster (par exemple, via un bastion ou un VPN). L'URL à utiliser est la suivante : - -`http://hubble.internal..mk.ms-cloud-temple.com` - -Pour que cette URL soit résolvable par votre poste de travail, vous devrez probablement ajouter une entrée dans votre fichier `hosts` ou dans votre DNS interne. Vous pouvez obtenir l'adresse IP interne de l'Ingress Hubble avec la commande suivante : - -```bash -kubectl get ingress hubble-ui -n kube-system -``` - - - -### Création de zones DNS internes (cluster privé) - -Pour renforcer la sécurité et simplifier l'accès à vos services et à l'API Kubernetes depuis votre réseau interne, il est recommandé de créer une zone DNS interne. Cette zone permettra de résoudre les noms de domaine de vos Ingress et de l'API Kubernetes vers leurs adresses IP privées respectives, évitant ainsi de transiter par des réseaux publics. - -**Exemple de configuration avec notre cluster "ctodev", dont le range attribué est** **10.20.0.0/22 :** - -En vous basant sur les URLs fournies dans le guide de démarrage, vous pouvez configurer votre DNS interne comme suit : - -1. **Créez la zone DNS privée** sur vos serveurs DNS internes pour `..mk.ms-cloud-temple.com` - -2. **Ajoutez les enregistrements de type A** suivants : - - - **Pour l'API Kubernetes :** - - `. -> 10.20.0.20` (IP virtuelle de l'API) - - - **Pour les services internes (via l'Ingress `nginx-internal`) :** - - `hubble.internal -> 10.20.1.1` - - `argocd.internal -> 10.20.1.1` - - `ceph.internal -> 10.20.1.1` - - - **Pour les services sécurisés (via l'Ingress `nginx-external-secure`) :** - - `k10.external-secured -> 10.20.1.129` - - `grafana.external-secured -> 10.20.1.129` - - `harbor.external-secured -> 10.20.1.129` - - `opencost.external-secured -> 10.20.1.129` - - `opencost-mcp.external-secured -> 10.20.1.129` - -Cette configuration garantit que le trafic vers l'API et les services internes reste confiné à votre réseau privé, conformément aux meilleures pratiques de sécurité. - -
-
-

Tutoriel : Déployer votre première application

-
-
-

- Suivez notre guide détaillé pour apprendre à exposer une application en utilisant un Ingress. -

-
- -
- -:::warning[Pour aller plus loin : la sécurité en production ] -Ce document explique les concepts réseau fondamentaux. Pour un déploiement en production, il est crucial d'appliquer des mesures de sécurité supplémentaires : - -- **Utilisez des images sécurisées** : Privilégiez des images provenant de votre registre d'entreprise sécurisé comme **Harbor** plutôt que des images publiques. -- **Contrôlez les flux réseau** : Mettez en place des `NetworkPolicies` pour contrôler les communications aux seuls flux nécessaires entre vos applications. -- **Appliquez des politiques de gouvernance** : Utilisez des outils comme **Kyverno** pour imposer des règles de sécurité (ex: interdire les conteneurs "root", exiger des `requests` et `limits` de ressources, etc.). -::: +--- +title: le réseau dans Kubernetes Managé +--- + +import cillium from '@site/docs/managed_kubernetes/tutorials/images/cillium.png' + +--- + +## Objectifs + +Ce tutoriel a pour objectif de vous familiariser avec les concepts réseau fondamentaux de l'offre **Managed Kubernetes**. À la fin de ce guide, vous serez en mesure de : + +- Comprendre le plan d'adressage IP de votre cluster (nœuds, pods, services). +- Connaître les différents mécanismes pour exposer vos applications (Ingress, LoadBalancer). +- Visualiser les flux réseau et les politiques de sécurité avec Hubble. + +Nous prendrons comme **exemple** un cluster **"ctodev"**, dont le range attribué est **10.20.0.0/22** + +:::warning[définition des ranges +] + Ce range d'IP privées X.Y.Z.0/22 (RFC 1918) est défini avec le client lors de la mise en place du cluster. Il ne peut pas être modifié plus tard. +::: + +## Plan d'adressage IP + +Votre cluster Kubernetes Managé dispose d'un VLAN multi-zonal avec un range d'adresses IPv4 en /22. + +Le range de notre **exemple** 10.20.0.0/22 est découpé de manière logique en sous-ranges. + + - 10.20.0.0/24 est attribué aux Noeuds du cluster: + + - 10.20.0.10 : ctodev-gitrunner (la machine qui pilote l'infrastructure) + + - 10.20.0.20 : IP virtuelle (load balancée) du service API Kubernetes + - 10.20.0.21 : ctodev-cp-01 (control plane 01) + - 10.20.0.22 : ctodev-cp-02 (control plane 02) + - 10.20.0.23 : ctodev-cp-03 (control plane 03) + + - 10.20.0.41 : ctodev-ceph-01 (Ceph Storage 01) + - 10.20.0.42 : ctodev-ceph-02 (Ceph Storage 02) + - 10.20.0.43 : ctodev-ceph-03 (Ceph Storage 03) + + - 10.20.0.51 : ctodev-wrk-01 (Worker 01) + - 10.20.0.52 : ctodev-wrk-02 (Worker 02) + - 10.20.0.53 : ctodev-wrk-03 (Worker 03) + - ... + - 10.20.0.151 : ctodev-wrk-100 (Worker 100) + + - MetalLB interne : 10.20.1.1 – 10.20.1.127 + + - 10.20.1.1 : ingress `nginx-internal` + + - MetalLB externe : 10.20.1.128 – 10.20.1.254 + + - 10.20.1.128 : ingress `nginx-external` + - 10.20.1.129 : ingress `nginx-external-secure` + + - Pods: 10.241.0.0/16 + + - Services: 10.95.0.0/12 + +:::warning[Ranges Pods et Services +] +Les ranges Pods et Services sont définis avec le client lors de la mise en place du cluster. Ils ne peuvent pas être modifiés plus tard. +::: + +## Utilisation de MetalLB + +MetalLB est le composant qui permet d'exposer des services de couche 3 (non web / L7) directement sur une adresse IP, qu'elle soit interne ou externe, en utilisant le type de service `LoadBalancer`. C'est une alternative aux Ingress pour les applications non-HTTP ou pour des cas d'usage spécifiques. + +Pour utiliser MetalLB, il vous suffit de créer un service de type `LoadBalancer`. MetalLB lui assignera automatiquement une adresse IP depuis les plages préconfigurées. La distinction entre les plages `interne` et `externe` est une mesure de sécurité pour garantir qu'une application destinée à un usage interne ne soit pas exposée sur un réseau public par erreur. + +**Exemple : Exposer un service sur le réseau interne** + +```yaml +apiVersion: v1 +kind: Service +metadata: + name: mon-service-interne + namespace: mon-namespace +spec: + selector: + app: mon-app + ports: + - protocol: TCP + port: 8080 + targetPort: 80 + type: LoadBalancer +``` + +Après avoir appliqué ce manifeste, votre service se verra attribuer une adresse IP dans la plage `10.20.1.1 – 10.20.1.127` et sera accessible depuis votre réseau interne connecté au cluster. + +**Exemple : Exposer un service sur le réseau externe** + +Pour demander une adresse IP depuis la plage externe (`10.20.1.128 – 10.20.1.254`), vous devez ajouter le label `lb-type: external` à votre service. + +```yaml +apiVersion: v1 +kind: Service +metadata: + name: mon-service-externe + namespace: mon-namespace + labels: + lb-type: external +spec: + selector: + app: mon-app + ports: + - protocol: TCP + port: 8080 + targetPort: 80 + type: LoadBalancer +``` + +> **Important** : Cette plage reste **dans un espace d’adressage privé**. Pour une **exposition publique**, il est nécessaire de créer une **règle NAT (DNAT)** sur le firewall de votre infrastructure afin de rediriger le trafic d'une de vos IP publiques externes vers l’adresse IP privée attribuée par MetalLB. + +## IP Publiques + +Votre cluster Kubernetes Managé a été livré d'origine avec 2 adresses IPv4 publiques. + +La 1ère IP est utilisée sur le port 6443 pour l'API Kubernetes (dans notre exemple ctodev.mk.ms-cloud-temple.com:6443) + +Cette même IP est aussi NATée sur l'ingress controller *"nginx-external-secured"* pour le port 443. Ceci permet l'exposition des différentes consoles mises à votre disposition (voir le guide quickstart). Les accès à cette IP publique sont **filtrés** avec une liste d'IP autorisées. + +--- +La 2ème IP publique est NAtée sur l'ingress controller *"nginx-external"*, sur les ports 80 et 443. + +Les applications exposées avec l'ingress class *"nginx-external"* seront donc directement accessible depuis Internet sur cette IP. + +*Si vous souhaitez une modification des règles de firewall (ajout/retrait d'IP autorisées), vous devez faire une demande de support.* + +*Il est possible d'ajouter d'autres IP publiques si vous le souhaitez.* + +## DNS + +Pour le DNS interne (CoreDNS), le cluster aura ces paramètres: + +- Nom du cluster : `` +- Domaine interne : `-cluster.local` (dans notre exemple : ctodev-cluster.local) + +Ce domaine interne est crucial pour la communication inter-services au sein du cluster. Il permet à une application de contacter une autre application en utilisant simplement son nom de service Kubernetes, sans avoir à connaître son adresse IP interne. + +Par exemple, un service nommé `api-backend` dans le namespace `production` sera automatiquement résolvable à l'adresse `api-backend.production.svc.ctodev-cluster.local`. + +--- + +La zone DNS publique utilisée pour les clusters Kubernetes Managé est `.mk.ms-cloud-temple.com` + +L'ingress *"nginx-external"* (mappé sur l'IP publique n°2) est accessible sur `"*.external..mk.ms-cloud-temple.com"`. +Si vous publiez une application avec cet ingress-class, vous pourrez y accéder directement via ce nom de domaine. Voir le tutoriel : [Déployer votre première application](./firstdeploy) + +## Hubble : L'observabilité réseau à portée de main + +Hubble est une interface graphique et en ligne de commande pour visualiser et comprendre les flux réseau de votre cluster. Basé sur Cilium, il vous offre une cartographie détaillée des services, des dépendances et des politiques réseau en temps réel. + +Avec Hubble, vous pouvez : + +- **Visualiser les flux de trafic** entre vos pods et services. +- **Identifier les problèmes de connectivité** et les erreurs réseau. +- **Vérifier l'application de vos politiques de sécurité** (Network Policies). +- **Explorer les dépendances** entre vos différentes applications. + +### Accéder à l'interface Hubble + +L'interface graphique de Hubble est exposée sur une URL interne de votre cluster. L'accès n'est pas possible via un port-forwarding `kubectl` car les utilisateurs ne disposent pas des droits suffisants sur le namespace `kube-system`. + +Pour y accéder, vous devez être connecté au réseau interne du cluster (par exemple, via un bastion ou un VPN). L'URL à utiliser est la suivante : + +`http://hubble.internal..mk.ms-cloud-temple.com` + +Pour que cette URL soit résolvable par votre poste de travail, vous devrez probablement ajouter une entrée dans votre fichier `hosts` ou dans votre DNS interne. Vous pouvez obtenir l'adresse IP interne de l'Ingress Hubble avec la commande suivante : + +```bash +kubectl get ingress hubble-ui -n kube-system +``` + + + +### Création de zones DNS internes (cluster privé) + +Pour renforcer la sécurité et simplifier l'accès à vos services et à l'API Kubernetes depuis votre réseau interne, il est recommandé de créer une zone DNS interne. Cette zone permettra de résoudre les noms de domaine de vos Ingress et de l'API Kubernetes vers leurs adresses IP privées respectives, évitant ainsi de transiter par des réseaux publics. + +**Exemple de configuration avec notre cluster "ctodev", dont le range attribué est** **10.20.0.0/22 :** + +En vous basant sur les URLs fournies dans le guide de démarrage, vous pouvez configurer votre DNS interne comme suit : + +1. **Créez la zone DNS privée** sur vos serveurs DNS internes pour `..mk.ms-cloud-temple.com` + +2. **Ajoutez les enregistrements de type A** suivants : + + - **Pour l'API Kubernetes :** + - `. -> 10.20.0.20` (IP virtuelle de l'API) + + - **Pour les services internes (via l'Ingress `nginx-internal`) :** + - `hubble.internal -> 10.20.1.1` + - `argocd.internal -> 10.20.1.1` + - `ceph.internal -> 10.20.1.1` + + - **Pour les services sécurisés (via l'Ingress `nginx-external-secure`) :** + - `k10.external-secured -> 10.20.1.129` + - `grafana.external-secured -> 10.20.1.129` + - `harbor.external-secured -> 10.20.1.129` + - `opencost.external-secured -> 10.20.1.129` + - `opencost-mcp.external-secured -> 10.20.1.129` + +Cette configuration garantit que le trafic vers l'API et les services internes reste confiné à votre réseau privé, conformément aux meilleures pratiques de sécurité. + +
+
+

Tutoriel : Déployer votre première application

+
+
+

+ Suivez notre guide détaillé pour apprendre à exposer une application en utilisant un Ingress. +

+
+ +
+ +:::warning[Pour aller plus loin : la sécurité en production +] +Ce document explique les concepts réseau fondamentaux. Pour un déploiement en production, il est crucial d'appliquer des mesures de sécurité supplémentaires : + +- **Utilisez des images sécurisées** : Privilégiez des images provenant de votre registre d'entreprise sécurisé comme **Harbor** plutôt que des images publiques. +- **Contrôlez les flux réseau** : Mettez en place des `NetworkPolicies` pour contrôler les communications aux seuls flux nécessaires entre vos applications. +- **Appliquez des politiques de gouvernance** : Utilisez des outils comme **Kyverno** pour imposer des règles de sécurité (ex: interdire les conteneurs "root", exiger des `requests` et `limits` de ressources, etc.). +::: diff --git a/docs/managed_kubernetes/tutorials/usingargocd.md b/docs/managed_kubernetes/tutorials/usingargocd.md index 2ead13e8..4d1e6a19 100644 --- a/docs/managed_kubernetes/tutorials/usingargocd.md +++ b/docs/managed_kubernetes/tutorials/usingargocd.md @@ -1,187 +1,188 @@ ---- -title: Utiliser ArgoCD pour vos déploiements GitOps ---- - -import argocdguestbook from './images/argocdguestbook.png' - -## Objectifs - -Ce tutoriel vous explique comment utiliser **ArgoCD**, l'outil de déploiement continu GitOps intégré à votre cluster **Managed Kubernetes**. À la fin de ce guide, vous saurez : - -- Ce qu'est l'approche GitOps. -- Comment accéder à l'interface d'ArgoCD. -- Comment déployer une application en utilisant ArgoCD pour synchroniser un dépôt Git. - -## Le principe du GitOps avec ArgoCD - -Le **GitOps** est une pratique qui consiste à utiliser un dépôt Git comme unique source de vérité pour déclarer l'état souhaité de votre infrastructure et de vos applications. - -**ArgoCD** est l'outil qui met en œuvre ce principe. Il surveille en permanence un dépôt Git et compare l'état qui y est défini (via des manifestes Kubernetes) avec l'état réel de votre cluster. S'il détecte une différence, il applique automatiquement les changements pour que le cluster corresponde à ce qui est déclaré dans Git. - -Les avantages sont nombreux : - -- **Déploiements fiables et reproductibles.** -- **Traçabilité complète** de tous les changements via l'historique Git. -- **Récupération rapide** après incident en revenant à un commit précédent. -- **Sécurité améliorée** en limitant les accès directs au cluster. - -## Accéder à l'interface ArgoCD - -L'interface web d'ArgoCD est exposée sur une URL interne de votre cluster. Pour y accéder, vous devez être connecté au réseau interne du cluster (par exemple, via un bastion ou un VPN). - -L'URL à utiliser est la suivante, en remplaçant `` : - -`http://argocd.internal..mk.ms-cloud-temple.com` - -Vous pouvez obtenir l'adresse IP interne de l'Ingress ArgoCD avec la commande suivante : - -```bash -kubectl get ingress argocd-server -n argocd -``` - -:::info -Le mot de passe pour le compte `admin` vous est fourni par les équipes Cloud Temple lors de la livraison de votre cluster. -::: - -## Déployer une application avec ArgoCD - -Nous allons maintenant déployer une application de test en utilisant l'approche GitOps. - -### 1. Le dépôt Git - -ArgoCD a besoin d'un dépôt Git contenant les manifestes Kubernetes de l'application à déployer. Pour ce tutoriel, nous utiliserons le dépôt d'exemples d'ArgoCD : `https://github.com/argoproj/argocd-example-apps`. Nous déploierons l'application `guestbook` qui se trouve dans ce dépôt. - -### 2. Préparer le Namespace de destination - -Pour que l'application puisse être déployée dans un namespace géré par Capsule, nous devons d'abord créer ce namespace et lui appliquer le label de tenant approprié. - -Exécutez la commandes suivantes : - -```bash -# Crée le namespace -kubectl create namespace guestbook - -# Applique le label pour l'associer au tenant "default" de Capsule (si besoin, car le namespace a surement déjà été associé avec votre tenant lors de sa création) -kubectl label namespace guestbook capsule.clastix.io/tenant=default -``` - -### 3. Créer l'application dans ArgoCD - -Maintenant que le namespace est prêt, nous pouvons déclarer l'application à ArgoCD. - -1. Créez un fichier nommé `app-guestbook.yaml` avec le contenu suivant : - - ```yaml - apiVersion: argoproj.io/v1alpha1 - kind: Application - metadata: - name: guestbook - namespace: argocd - spec: - project: default - source: - repoURL: https://github.com/argoproj/argocd-example-apps.git - targetRevision: HEAD - path: guestbook - destination: - server: https://kubernetes.default.svc - namespace: guestbook - syncPolicy: - automated: - prune: true - selfHeal: true - ``` - - Ce manifeste demande à ArgoCD de : - - Créer une application nommée `guestbook`. - - Surveiller le dépôt `argocd-example-apps`. - - Se concentrer sur le dossier `guestbook` de ce dépôt. - - Déployer les manifestes trouvés dans le namespace `guestbook` du cluster local. - - Maintenir la synchronisation automatiquement (`automated`). - -2. Vous avez deux options pour créer l'application dans ArgoCD : - - **Option A : Via `kubectl` (Approche GitOps)** - - Appliquez ce manifeste directement à votre cluster. C'est la méthode recommandée car elle suit le principe GitOps de gestion déclarative. - - ```bash - kubectl apply -f app-guestbook.yaml - ``` - - **Option B : Via l'interface web d'ArgoCD** - - Vous pouvez également créer l'application directement depuis l'interface graphique : - - Dans l'UI d'ArgoCD, cliquez sur **"+ NEW APP"**. - - En haut à droite de l'écran de création, cliquez sur **"EDIT AS YAML"**. - - Collez le contenu de votre fichier `app-guestbook.yaml` dans l'éditeur. - - Cliquez sur **"CREATE"**. - -### 4. Vérifier la synchronisation - -Dès que vous appliquez le manifeste, ArgoCD détecte cette nouvelle ressource `Application` et commence son travail. - -1. **Via l'interface web :** - - Connectez-vous à l'interface d'ArgoCD. - - Vous devriez voir une nouvelle carte pour l'application `guestbook`. - - Après quelques instants, son statut devrait passer à `Healthy` et `Synced`. - - En cliquant sur la carte, vous pouvez visualiser toutes les ressources Kubernetes (Deployment, Service, etc.) qui ont été créées. - - - -1. **Via la ligne de commande :** - - Vérifiez que le namespace `guestbook` a été créé : - - ```bash - kubectl get ns guestbook - ``` - - - Vérifiez que les ressources de l'application sont bien déployées dans ce namespace : - - ```bash - kubectl get all -n guestbook - NAME READY STATUS RESTARTS AGE - pod/guestbook-ui-85db984648-br6r2 1/1 Running 0 19m - - NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE - service/guestbook-ui ClusterIP 10.111.160.90 80/TCP 19m - - NAME READY UP-TO-DATE AVAILABLE AGE - deployment.apps/guestbook-ui 1/1 1 1 19m - - NAME DESIRED CURRENT READY AGE - replicaset.apps/guestbook-ui-85db984648 1 1 1 19m - ``` - -### 5. Le cycle GitOps - -Maintenant, si vous modifiez un manifeste dans le dépôt Git, ArgoCD détectera le changement et mettra automatiquement à jour l'application dans le cluster. C'est la magie du GitOps ! - -## Nettoyage - -Pour supprimer l'application et toutes les ressources associées, vous pouvez simplement supprimer la ressource `Application` d'ArgoCD. - -1. **Via l'interface web :** - - Dans l'UI d'ArgoCD, trouvez l'application `guestbook`. - - Cliquez sur les trois points (...) pour ouvrir le menu et sélectionnez **"Delete"**. - - Cochez l'option **"Foreground"** pour vous assurer que toutes les ressources managées (pods, services, etc.) sont également supprimées en cascade. -2. **Via `kubectl` :** - - Supprimez le fichier `app-guestbook.yaml` que vous avez créé : - - ```bash - kubectl delete -f app-guestbook.yaml - ``` - -ArgoCD va maintenant supprimer tous les composants de l'application `guestbook`. Une fois la synchronisation de suppression terminée, le namespace `guestbook` sera vide. Vous pouvez alors le supprimer avec la commande suivante : - -```bash -kubectl delete namespace guestbook -``` - -:::info[Pour aller plus loin : la gestion des secrets ] -Ce tutoriel utilise un dépôt public sans données sensibles. Pour vos applications en production, il est crucial de ne jamais stocker de secrets (mots de passe, clés d'API) en clair dans votre dépôt Git. Des solutions comme **Sealed Secrets** ou **HashiCorp Vault** s'intègrent avec ArgoCD pour gérer vos secrets de manière sécurisée. Un futur tutoriel détaillera cette approche. -::: - -## Conclusion - -Vous avez déployé votre première application avec ArgoCD en suivant les principes GitOps. Cette approche puissante vous permet de gérer vos déploiements de manière déclarative, fiable et sécurisée. Nous vous encourageons à l'adopter pour l'ensemble de vos applications sur Managed Kubernetes. +--- +title: Utiliser ArgoCD pour vos déploiements GitOps +--- + +import argocdguestbook from '@site/docs/managed_kubernetes/tutorials/images/argocdguestbook.png' + +## Objectifs + +Ce tutoriel vous explique comment utiliser **ArgoCD**, l'outil de déploiement continu GitOps intégré à votre cluster **Managed Kubernetes**. À la fin de ce guide, vous saurez : + +- Ce qu'est l'approche GitOps. +- Comment accéder à l'interface d'ArgoCD. +- Comment déployer une application en utilisant ArgoCD pour synchroniser un dépôt Git. + +## Le principe du GitOps avec ArgoCD + +Le **GitOps** est une pratique qui consiste à utiliser un dépôt Git comme unique source de vérité pour déclarer l'état souhaité de votre infrastructure et de vos applications. + +**ArgoCD** est l'outil qui met en œuvre ce principe. Il surveille en permanence un dépôt Git et compare l'état qui y est défini (via des manifestes Kubernetes) avec l'état réel de votre cluster. S'il détecte une différence, il applique automatiquement les changements pour que le cluster corresponde à ce qui est déclaré dans Git. + +Les avantages sont nombreux : + +- **Déploiements fiables et reproductibles.** +- **Traçabilité complète** de tous les changements via l'historique Git. +- **Récupération rapide** après incident en revenant à un commit précédent. +- **Sécurité améliorée** en limitant les accès directs au cluster. + +## Accéder à l'interface ArgoCD + +L'interface web d'ArgoCD est exposée sur une URL interne de votre cluster. Pour y accéder, vous devez être connecté au réseau interne du cluster (par exemple, via un bastion ou un VPN). + +L'URL à utiliser est la suivante, en remplaçant `` : + +`http://argocd.internal..mk.ms-cloud-temple.com` + +Vous pouvez obtenir l'adresse IP interne de l'Ingress ArgoCD avec la commande suivante : + +```bash +kubectl get ingress argocd-server -n argocd +``` + +:::info +Le mot de passe pour le compte `admin` vous est fourni par les équipes Cloud Temple lors de la livraison de votre cluster. +::: + +## Déployer une application avec ArgoCD + +Nous allons maintenant déployer une application de test en utilisant l'approche GitOps. + +### 1. Le dépôt Git + +ArgoCD a besoin d'un dépôt Git contenant les manifestes Kubernetes de l'application à déployer. Pour ce tutoriel, nous utiliserons le dépôt d'exemples d'ArgoCD : `https://github.com/argoproj/argocd-example-apps`. Nous déploierons l'application `guestbook` qui se trouve dans ce dépôt. + +### 2. Préparer le Namespace de destination + +Pour que l'application puisse être déployée dans un namespace géré par Capsule, nous devons d'abord créer ce namespace et lui appliquer le label de tenant approprié. + +Exécutez la commandes suivantes : + +```bash +# Crée le namespace +kubectl create namespace guestbook + +# Applique le label pour l'associer au tenant "default" de Capsule (si besoin, car le namespace a surement déjà été associé avec votre tenant lors de sa création) +kubectl label namespace guestbook capsule.clastix.io/tenant=default +``` + +### 3. Créer l'application dans ArgoCD + +Maintenant que le namespace est prêt, nous pouvons déclarer l'application à ArgoCD. + +1. Créez un fichier nommé `app-guestbook.yaml` avec le contenu suivant : + + ```yaml + apiVersion: argoproj.io/v1alpha1 + kind: Application + metadata: + name: guestbook + namespace: argocd + spec: + project: default + source: + repoURL: https://github.com/argoproj/argocd-example-apps.git + targetRevision: HEAD + path: guestbook + destination: + server: https://kubernetes.default.svc + namespace: guestbook + syncPolicy: + automated: + prune: true + selfHeal: true + ``` + + Ce manifeste demande à ArgoCD de : + - Créer une application nommée `guestbook`. + - Surveiller le dépôt `argocd-example-apps`. + - Se concentrer sur le dossier `guestbook` de ce dépôt. + - Déployer les manifestes trouvés dans le namespace `guestbook` du cluster local. + - Maintenir la synchronisation automatiquement (`automated`). + +2. Vous avez deux options pour créer l'application dans ArgoCD : + + **Option A : Via `kubectl` (Approche GitOps)** + + Appliquez ce manifeste directement à votre cluster. C'est la méthode recommandée car elle suit le principe GitOps de gestion déclarative. + + ```bash + kubectl apply -f app-guestbook.yaml + ``` + + **Option B : Via l'interface web d'ArgoCD** + + Vous pouvez également créer l'application directement depuis l'interface graphique : + - Dans l'UI d'ArgoCD, cliquez sur **"+ NEW APP"**. + - En haut à droite de l'écran de création, cliquez sur **"EDIT AS YAML"**. + - Collez le contenu de votre fichier `app-guestbook.yaml` dans l'éditeur. + - Cliquez sur **"CREATE"**. + +### 4. Vérifier la synchronisation + +Dès que vous appliquez le manifeste, ArgoCD détecte cette nouvelle ressource `Application` et commence son travail. + +1. **Via l'interface web :** + - Connectez-vous à l'interface d'ArgoCD. + - Vous devriez voir une nouvelle carte pour l'application `guestbook`. + - Après quelques instants, son statut devrait passer à `Healthy` et `Synced`. + - En cliquant sur la carte, vous pouvez visualiser toutes les ressources Kubernetes (Deployment, Service, etc.) qui ont été créées. + + + +1. **Via la ligne de commande :** + - Vérifiez que le namespace `guestbook` a été créé : + + ```bash + kubectl get ns guestbook + ``` + + - Vérifiez que les ressources de l'application sont bien déployées dans ce namespace : + + ```bash + kubectl get all -n guestbook + NAME READY STATUS RESTARTS AGE + pod/guestbook-ui-85db984648-br6r2 1/1 Running 0 19m + + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE + service/guestbook-ui ClusterIP 10.111.160.90 80/TCP 19m + + NAME READY UP-TO-DATE AVAILABLE AGE + deployment.apps/guestbook-ui 1/1 1 1 19m + + NAME DESIRED CURRENT READY AGE + replicaset.apps/guestbook-ui-85db984648 1 1 1 19m + ``` + +### 5. Le cycle GitOps + +Maintenant, si vous modifiez un manifeste dans le dépôt Git, ArgoCD détectera le changement et mettra automatiquement à jour l'application dans le cluster. C'est la magie du GitOps ! + +## Nettoyage + +Pour supprimer l'application et toutes les ressources associées, vous pouvez simplement supprimer la ressource `Application` d'ArgoCD. + +1. **Via l'interface web :** + - Dans l'UI d'ArgoCD, trouvez l'application `guestbook`. + - Cliquez sur les trois points (...) pour ouvrir le menu et sélectionnez **"Delete"**. + - Cochez l'option **"Foreground"** pour vous assurer que toutes les ressources managées (pods, services, etc.) sont également supprimées en cascade. +2. **Via `kubectl` :** + - Supprimez le fichier `app-guestbook.yaml` que vous avez créé : + + ```bash + kubectl delete -f app-guestbook.yaml + ``` + +ArgoCD va maintenant supprimer tous les composants de l'application `guestbook`. Une fois la synchronisation de suppression terminée, le namespace `guestbook` sera vide. Vous pouvez alors le supprimer avec la commande suivante : + +```bash +kubectl delete namespace guestbook +``` + +:::info[Pour aller plus loin : la gestion des secrets +] +Ce tutoriel utilise un dépôt public sans données sensibles. Pour vos applications en production, il est crucial de ne jamais stocker de secrets (mots de passe, clés d'API) en clair dans votre dépôt Git. Des solutions comme **Sealed Secrets** ou **HashiCorp Vault** s'intègrent avec ArgoCD pour gérer vos secrets de manière sécurisée. Un futur tutoriel détaillera cette approche. +::: + +## Conclusion + +Vous avez déployé votre première application avec ArgoCD en suivant les principes GitOps. Cette approche puissante vous permet de gérer vos déploiements de manière déclarative, fiable et sécurisée. Nous vous encourageons à l'adopter pour l'ensemble de vos applications sur Managed Kubernetes. diff --git a/docs/managed_kubernetes/tutorials/usinggapi.md b/docs/managed_kubernetes/tutorials/usinggapi.md index a491190b..c38b11ae 100644 --- a/docs/managed_kubernetes/tutorials/usinggapi.md +++ b/docs/managed_kubernetes/tutorials/usinggapi.md @@ -1,226 +1,228 @@ ---- -title: Utiliser Cilium Gateway API ---- - -import gapischema from './images/gapi.png' - -## Introduction - -L'API Gateway est la nouvelle norme Kubernetes pour la gestion du trafic entrant. Elle succède à la ressource Ingress traditionnelle en offrant plus de flexibilité, de fonctionnalités (routage avancé, répartition de charge, etc.) et une meilleure séparation des responsabilités. - -Dans votre cluster Managed Kubernetes Cloud Temple, **Cilium** est utilisé comme CNI et implémente nativement le support de Gateway API. - -:::info[Versions supportées ] -Cette documentation s'applique aux clusters utilisant **Cilium 1.8.4 ou supérieur**. -Les **Gateway API CRDs en version 1.4** sont préinstallées sur votre cluster. -::: - -## Objectifs - -Ce tutoriel vous guidera pour : - -- Comprendre les ressources de base de Gateway API (GatewayClass, Gateway, HTTPRoute). -- Déployer une application de test. -- Exposer cette application via une Gateway Cilium. -- Tester l'accès. - -## Prérequis - -- Un cluster Managed Kubernetes Cloud Temple opérationnel. -- L'outil `kubectl` configuré pour accéder à votre cluster. -- L'outil `cilium`. - -## Concepts Clés - -Gateway API décompose la configuration réseau en trois ressources principales : - -1. **GatewayClass** : Définit le type de contrôleur (ici, `io.cilium/gateway`). -2. **Gateway** : Instancie un point d'entrée réseau (load balancer). -3. **HTTPRoute** : Définit les règles de routage (chemins, headers) vers les Services Kubernetes. - -Schema GAPI - -## Étape 1 : Vérifier la version et la GatewayClass - -Vous pouvez vérifier que votre cluster utilise une version compatible de Cilium (1.8.4+) à l'aide des commandes : - -```bash -cilium status -cilium config view | grep -w "enable-gateway-api" -``` - -Assurez-vous ensuite que la `GatewayClass` de Cilium est disponible sur votre cluster : - -```bash -kubectl get gatewayclass -``` - -Vous devriez voir une sortie similaire à : - -```text -NAME CONTROLLER ACCEPTED AGE -cilium io.cilium/gateway True 2d -``` - -:::info[Note ] -Si aucune GatewayClass n'est listée, assurez-vous que la fonctionnalité Gateway API est activée dans votre installation Cilium. -::: - -## Étape 2 : Déployer une application de démonstration - -Nous allons déployer une application simple qui renvoie des informations sur le pod (echo-server). - -Créez un fichier `apps.yaml` : - -```yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - name: echo-server - labels: - app: echo-server -spec: - replicas: 2 - selector: - matchLabels: - app: echo-server - template: - metadata: - labels: - app: echo-server - spec: - containers: - - name: echo-server - image: ealen/echo-server:latest - ports: - - containerPort: 80 ---- -apiVersion: v1 -kind: Service -metadata: - name: echo-service - labels: - app: echo-server -spec: - selector: - app: echo-server - ports: - - port: 80 - targetPort: 80 -``` - -Appliquez la configuration : - -```bash -kubectl apply -f apps.yaml -``` - -## Étape 3 : Créer la Gateway - -La Gateway va demander la création d'un LoadBalancer pour recevoir le trafic. - -Créez un fichier `gateway.yaml` : - -```yaml -apiVersion: gateway.networking.k8s.io/v1 -kind: Gateway -metadata: - name: my-gateway -spec: - gatewayClassName: cilium - listeners: - - protocol: HTTP - port: 80 - name: web-gw - allowedRoutes: - namespaces: - from: Same -``` - -Appliquez la configuration : - -```bash -kubectl apply -f gateway.yaml -``` - -Vérifiez que la Gateway a obtenu une adresse IP (cela peut prendre quelques instants pour que le LoadBalancer soit provisionné par l'infrastructure Cloud Temple) : - -```bash -kubectl get gateway my-gateway -``` - -Attendez que le champ `PROGRAMMED` soit `True` et que `ADDRESS` affiche une IP. - -## Étape 4 : Créer une HTTPRoute - -Maintenant que nous avons une "porte d'entrée" (Gateway), nous devons diriger le trafic vers notre service. - -Créez un fichier `httproute.yaml` : - -```yaml -apiVersion: gateway.networking.k8s.io/v1 -kind: HTTPRoute -metadata: - name: echo-route -spec: - parentRefs: - - name: my-gateway - rules: - - matches: - - path: - type: PathPrefix - value: / - backendRefs: - - name: echo-service - port: 80 -``` - -Appliquez la configuration : - -```bash -kubectl apply -f httproute.yaml -``` - -## Étape 5 : Tester l'accès - -Récupérez l'adresse IP de votre Gateway : - -```bash -kubectl get gateway my-gateway -o jsonpath='{.status.addresses[0].value}' -``` - -Envoyez une requête sur cette IP pour tester : - -```bash -curl http://10.200.205.2 -``` - -Vous devriez recevoir une réponse JSON de l'application `echo-server` indiquant les détails du pod qui a répondu. - -## Fonctionnalités avancées (Exemple : Canary Release) - -Gateway API facilite grandement les scénarios de déploiement avancés, comme le Canary Release (répartition pondérée du trafic). - -Supposons que nous ayons une v2 de notre application. Nous pouvons répartir le trafic à 90% vers v1 et 10% vers v2 simplement en ajustant les poids dans `backendRefs` : - -```yaml -apiVersion: gateway.networking.k8s.io/v1 -kind: HTTPRoute -metadata: - name: echo-route-canary -spec: - parentRefs: - - name: my-gateway - rules: - - backendRefs: - - name: echo-service - port: 80 - weight: 90 - - name: echo-service-v2 - port: 80 - weight: 10 -``` - -## Conclusion - -Vous avez mis en place une infrastructure moderne d'exposition de services avec Cilium Gateway API. Cette approche standardisée, plus riche sémantiquement que les Ingress, est recommandée pour tirer parti des capacités avancées du réseau Kubernetes. +--- +title: Utiliser Cilium Gateway API +--- + +import gapischema from '@site/docs/managed_kubernetes/tutorials/images/gapi.png' + +## Introduction + +L'API Gateway est la nouvelle norme Kubernetes pour la gestion du trafic entrant. Elle succède à la ressource Ingress traditionnelle en offrant plus de flexibilité, de fonctionnalités (routage avancé, répartition de charge, etc.) et une meilleure séparation des responsabilités. + +Dans votre cluster Managed Kubernetes Cloud Temple, **Cilium** est utilisé comme CNI et implémente nativement le support de Gateway API. + +:::info[Versions supportées +] +Cette documentation s'applique aux clusters utilisant **Cilium 1.8.4 ou supérieur**. +Les **Gateway API CRDs en version 1.4** sont préinstallées sur votre cluster. +::: + +## Objectifs + +Ce tutoriel vous guidera pour : + +- Comprendre les ressources de base de Gateway API (GatewayClass, Gateway, HTTPRoute). +- Déployer une application de test. +- Exposer cette application via une Gateway Cilium. +- Tester l'accès. + +## Prérequis + +- Un cluster Managed Kubernetes Cloud Temple opérationnel. +- L'outil `kubectl` configuré pour accéder à votre cluster. +- L'outil `cilium`. + +## Concepts Clés + +Gateway API décompose la configuration réseau en trois ressources principales : + +1. **GatewayClass** : Définit le type de contrôleur (ici, `io.cilium/gateway`). +2. **Gateway** : Instancie un point d'entrée réseau (load balancer). +3. **HTTPRoute** : Définit les règles de routage (chemins, headers) vers les Services Kubernetes. + +Schema GAPI + +## Étape 1 : Vérifier la version et la GatewayClass + +Vous pouvez vérifier que votre cluster utilise une version compatible de Cilium (1.8.4+) à l'aide des commandes : + +```bash +cilium status +cilium config view | grep -w "enable-gateway-api" +``` + +Assurez-vous ensuite que la `GatewayClass` de Cilium est disponible sur votre cluster : + +```bash +kubectl get gatewayclass +``` + +Vous devriez voir une sortie similaire à : + +```text +NAME CONTROLLER ACCEPTED AGE +cilium io.cilium/gateway True 2d +``` + +:::info[Note +] +Si aucune GatewayClass n'est listée, assurez-vous que la fonctionnalité Gateway API est activée dans votre installation Cilium. +::: + +## Étape 2 : Déployer une application de démonstration + +Nous allons déployer une application simple qui renvoie des informations sur le pod (echo-server). + +Créez un fichier `apps.yaml` : + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: echo-server + labels: + app: echo-server +spec: + replicas: 2 + selector: + matchLabels: + app: echo-server + template: + metadata: + labels: + app: echo-server + spec: + containers: + - name: echo-server + image: ealen/echo-server:latest + ports: + - containerPort: 80 +--- +apiVersion: v1 +kind: Service +metadata: + name: echo-service + labels: + app: echo-server +spec: + selector: + app: echo-server + ports: + - port: 80 + targetPort: 80 +``` + +Appliquez la configuration : + +```bash +kubectl apply -f apps.yaml +``` + +## Étape 3 : Créer la Gateway + +La Gateway va demander la création d'un LoadBalancer pour recevoir le trafic. + +Créez un fichier `gateway.yaml` : + +```yaml +apiVersion: gateway.networking.k8s.io/v1 +kind: Gateway +metadata: + name: my-gateway +spec: + gatewayClassName: cilium + listeners: + - protocol: HTTP + port: 80 + name: web-gw + allowedRoutes: + namespaces: + from: Same +``` + +Appliquez la configuration : + +```bash +kubectl apply -f gateway.yaml +``` + +Vérifiez que la Gateway a obtenu une adresse IP (cela peut prendre quelques instants pour que le LoadBalancer soit provisionné par l'infrastructure Cloud Temple) : + +```bash +kubectl get gateway my-gateway +``` + +Attendez que le champ `PROGRAMMED` soit `True` et que `ADDRESS` affiche une IP. + +## Étape 4 : Créer une HTTPRoute + +Maintenant que nous avons une "porte d'entrée" (Gateway), nous devons diriger le trafic vers notre service. + +Créez un fichier `httproute.yaml` : + +```yaml +apiVersion: gateway.networking.k8s.io/v1 +kind: HTTPRoute +metadata: + name: echo-route +spec: + parentRefs: + - name: my-gateway + rules: + - matches: + - path: + type: PathPrefix + value: / + backendRefs: + - name: echo-service + port: 80 +``` + +Appliquez la configuration : + +```bash +kubectl apply -f httproute.yaml +``` + +## Étape 5 : Tester l'accès + +Récupérez l'adresse IP de votre Gateway : + +```bash +kubectl get gateway my-gateway -o jsonpath='{.status.addresses[0].value}' +``` + +Envoyez une requête sur cette IP pour tester : + +```bash +curl http://10.200.205.2 +``` + +Vous devriez recevoir une réponse JSON de l'application `echo-server` indiquant les détails du pod qui a répondu. + +## Fonctionnalités avancées (Exemple : Canary Release) + +Gateway API facilite grandement les scénarios de déploiement avancés, comme le Canary Release (répartition pondérée du trafic). + +Supposons que nous ayons une v2 de notre application. Nous pouvons répartir le trafic à 90% vers v1 et 10% vers v2 simplement en ajustant les poids dans `backendRefs` : + +```yaml +apiVersion: gateway.networking.k8s.io/v1 +kind: HTTPRoute +metadata: + name: echo-route-canary +spec: + parentRefs: + - name: my-gateway + rules: + - backendRefs: + - name: echo-service + port: 80 + weight: 90 + - name: echo-service-v2 + port: 80 + weight: 10 +``` + +## Conclusion + +Vous avez mis en place une infrastructure moderne d'exposition de services avec Cilium Gateway API. Cette approche standardisée, plus riche sémantiquement que les Ingress, est recommandée pour tirer parti des capacités avancées du réseau Kubernetes. diff --git a/docs/managed_kubernetes/tutorials/usinggpu.md b/docs/managed_kubernetes/tutorials/usinggpu.md index b660a192..7232d841 100644 --- a/docs/managed_kubernetes/tutorials/usinggpu.md +++ b/docs/managed_kubernetes/tutorials/usinggpu.md @@ -1,59 +1,59 @@ ---- -title: Utiliser un GPU nVidia ---- - -import nvidiasmi from './images/nvidiasmi.png' - -# Utiliser un GPU sur Managed Kubernetes - -Ce tutoriel vous montre comment déployer un pod qui utilise une ressource GPU sur un cluster Managed Kubernetes configuré avec des nœuds "Bare Metal" équipés de GPU NVIDIA. - -## Prérequis - -- Un cluster Managed Kubernetes avec au moins un nœd worker de type "Bare Metal" avec GPU. - -## Manifeste de Pod d'exemple - -Voici un exemple de manifeste de pod qui exécute la commande `nvidia-smi` pour vérifier la présence et l'état de la carte GPU. - -```yaml -apiVersion: v1 -kind: Pod -metadata: - name: nvidia-cuda-check -spec: - runtimeClassName: nvidia # Clé pour Talos NVIDIA - restartPolicy: Never - containers: - - name: nvidia-version-check - image: "nvidia/cuda:13.1.0-devel-ubuntu24.04" - imagePullPolicy: Always - command: ["nvidia-smi"] -``` - -### Explication du Manifeste - -- **`runtimeClassName: nvidia`**: C'est la partie la plus importante. Elle indique à Kubernetes d'utiliser le runtime NVIDIA. Le toolkit NVIDIA s'occupe alors d'injecter les drivers NVIDIA directement dans le pod, ce qui permet au conteneur d'accéder au GPU. -- **`restartPolicy: Never`**: Comme ce pod est juste une commande de vérification, nous ne voulons pas qu'il redémarre après son exécution. -- **`image: "nvidia/cuda:..."`**: Nous utilisons une image fournie par NVIDIA qui contient les outils nécessaires pour interagir avec le GPU. -- **`command: ["nvidia-smi"]`**: C'est la commande qui sera exécutée à l'intérieur du conteneur. `nvidia-smi` est un outil en ligne de commande qui fournit des informations sur les GPU NVIDIA. - -Pour plus d'informations sur le fonctionnement du toolkit NVIDIA, vous pouvez consulter la [documentation officielle sur GitHub](https://github.com/NVIDIA/nvidia-container-toolkit). - -## Déploiement et Vérification - -1. **Déployez le pod** en utilisant la commande `kubectl apply` : - - ```shell - kubectl apply -f nvidia-smi.yaml - ``` - -2. **Vérifiez les logs du pod** pour voir la sortie de la commande `nvidia-smi` : - - ```shell - kubectl logs nvidia-cuda-check - ``` - -Si tout est configuré correctement, vous devriez voir une sortie similaire à celle-ci, montrant les détails de votre carte GPU : - -nvidia-smi command result +--- +title: Utiliser un GPU nVidia +--- + +import nvidiasmi from '@site/docs/managed_kubernetes/tutorials/images/nvidiasmi.png' + +# Utiliser un GPU sur Managed Kubernetes + +Ce tutoriel vous montre comment déployer un pod qui utilise une ressource GPU sur un cluster Managed Kubernetes configuré avec des nœuds "Bare Metal" équipés de GPU NVIDIA. + +## Prérequis + +- Un cluster Managed Kubernetes avec au moins un nœd worker de type "Bare Metal" avec GPU. + +## Manifeste de Pod d'exemple + +Voici un exemple de manifeste de pod qui exécute la commande `nvidia-smi` pour vérifier la présence et l'état de la carte GPU. + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: nvidia-cuda-check +spec: + runtimeClassName: nvidia # Clé pour Talos NVIDIA + restartPolicy: Never + containers: + - name: nvidia-version-check + image: "nvidia/cuda:13.1.0-devel-ubuntu24.04" + imagePullPolicy: Always + command: ["nvidia-smi"] +``` + +### Explication du Manifeste + +- **`runtimeClassName: nvidia`**: C'est la partie la plus importante. Elle indique à Kubernetes d'utiliser le runtime NVIDIA. Le toolkit NVIDIA s'occupe alors d'injecter les drivers NVIDIA directement dans le pod, ce qui permet au conteneur d'accéder au GPU. +- **`restartPolicy: Never`**: Comme ce pod est juste une commande de vérification, nous ne voulons pas qu'il redémarre après son exécution. +- **`image: "nvidia/cuda:..."`**: Nous utilisons une image fournie par NVIDIA qui contient les outils nécessaires pour interagir avec le GPU. +- **`command: ["nvidia-smi"]`**: C'est la commande qui sera exécutée à l'intérieur du conteneur. `nvidia-smi` est un outil en ligne de commande qui fournit des informations sur les GPU NVIDIA. + +Pour plus d'informations sur le fonctionnement du toolkit NVIDIA, vous pouvez consulter la [documentation officielle sur GitHub](https://github.com/NVIDIA/nvidia-container-toolkit). + +## Déploiement et Vérification + +1. **Déployez le pod** en utilisant la commande `kubectl apply` : + + ```shell + kubectl apply -f nvidia-smi.yaml + ``` + +2. **Vérifiez les logs du pod** pour voir la sortie de la commande `nvidia-smi` : + + ```shell + kubectl logs nvidia-cuda-check + ``` + +Si tout est configuré correctement, vous devriez voir une sortie similaire à celle-ci, montrant les détails de votre carte GPU : + +nvidia-smi command result diff --git a/docs/managed_kubernetes/tutorials/usingkasten.md b/docs/managed_kubernetes/tutorials/usingkasten.md index a7c44f76..73da97d4 100644 --- a/docs/managed_kubernetes/tutorials/usingkasten.md +++ b/docs/managed_kubernetes/tutorials/usingkasten.md @@ -1,114 +1,117 @@ ---- -title: Sauvegarder vos applications avec Veeam Kasten ---- - -import k10dashboard from './images/k10dashboard.png' -import k10s3location from './images/k10s3location.png' -import k10infrabackups from './images/k10infrabackups.png' - -## Introduction - -Veeam Kasten K10 est une solution de sauvegarde et de restauration conçue spécifiquement pour les environnements Kubernetes. Dans le produit Managed Kubernetes de Cloud Temple, Kasten est intégré pour vous permettre de protéger vos applications, de restaurer des données en cas de besoin et d'assurer la continuité de vos activités. - -Ce tutoriel vous guidera à travers les étapes de base pour sauvegarder et restaurer une application à l'aide de Kasten. - -## Prérequis - -Avant de commencer, assurez-vous de disposer des éléments suivants : - -- Un cluster Managed Kubernetes actif. -- L'identifiant de votre cluster (par exemple, `ctodev`). -- Une application déployée dans votre cluster que vous souhaitez sauvegarder. - -## 1. Accéder au tableau de bord Kasten - -Le tableau de bord Kasten est accessible via une URL sécurisée, construite à partir de l'identifiant de votre cluster. - -1. **Construisez l'URL d'accès** : - L'URL est basée sur le modèle suivant : `https://k10.external-secured..mk.ms-cloud-temple.com/k10/` - Remplacez `` par l'identifiant de votre cluster. Par exemple, si votre identifiant est `ctodev`, l'URL sera : `https://k10.external-secured.ctodev.mk.ms-cloud-temple.com/k10/`. - -2. **Accédez à l'URL** dans votre navigateur. - - :::info Note sur la sécurité - L'accès à cette URL est restreint aux adresses IP publiques que vous avez déclarées. Si vous ne parvenez pas à vous connecter, assurez-vous que votre adresse IP est autorisée en contactant le support Cloud Temple. - ::: - - - -:::tip[Guide de démarrage rapide intégré ] -La console Kasten inclut un guide de démarrage rapide interactif sur sa page d'accueil. N'hésitez pas à le suivre pour une première prise en main directement depuis l'interface. -::: - -## 2. Comprendre le stockage des sauvegardes - -Par défaut, Kasten est préconfiguré pour utiliser le service de stockage objet (S3) de Cloud Temple pour stocker vos sauvegardes de manière sécurisée et durable. - -Vous n'avez aucune configuration à effectuer. L'emplacement de stockage est déjà défini dans le tableau de bord Kasten, sous **Settings > Locations**. Cette configuration garantit que vos données sont stockées sur une infrastructure souveraine. - - - -:::info[Modèle de coût ] -Le service Veeam Kasten est inclus dans le produit Managed Kubernetes. Le stockage des sauvegardes sur notre S3 souverain est facturé à l'usage. Consultez notre grille tarifaire pour plus de détails. -::: - -## 3. Créer une politique de sauvegarde - -Une politique de sauvegarde (`Policy`) est un ensemble de règles qui définissent quand et comment sauvegarder vos applications. - -:::warning[Politique de sauvegarde existante ] -Une politique de sauvegarde nommée `infra-backups` est déjà configurée dans votre instance Kasten. Cette politique assure la sauvegarde des composants essentiels livrés avec le cluster. - - - -**Ne modifiez pas et ne supprimez pas cette politique.** - -Vous devez créer vos propres politiques pour sauvegarder les applications que vous déployez. -::: - -1. Dans le tableau de bord Kasten, accédez à la section **Policies** et cliquez sur **Create New Policy**. - -2. **Nommez votre politique** : Donnez un nom descriptif, par exemple `backup-my-app-daily`. - -3. **Définissez la fréquence (Action)** : - - **Action**: `Snapshot` (instantané). - - **Frequency**: Choisissez la fréquence qui vous convient (par exemple, `Daily` à `02:00`). - -4. **Sélectionnez les ressources à sauvegarder** : - - **Select resources by**: Vous pouvez sélectionner des applications par nom (`Application Name`), par namespace (`Namespace`), ou par labels. - - Pour sauvegarder toutes les applications d'un namespace, choisissez `Namespace` et sélectionnez le namespace souhaité. - -5. **Cliquez sur `Create Policy`** pour enregistrer. - -La politique s'exécutera automatiquement à la fréquence définie. Vous pouvez également lancer une exécution manuelle en cliquant sur le bouton "Play" (▶️) à côté de la politique. - -## 4. Restaurer une application - -Kasten facilite la restauration d'une application à son état précédent à partir d'un point de restauration. - -1. Dans le tableau de bord, allez dans la section **Applications**. Vous y verrez la liste de vos applications et leur état de conformité par rapport aux politiques de sauvegarde. - -2. **Sélectionnez l'application** que vous souhaitez restaurer. - -3. **Choisissez un point de restauration** : - La page de l'application affiche une liste des points de restauration disponibles. Choisissez celui que vous souhaitez utiliser et cliquez sur **Restore**. - -4. **Configurez la restauration** : - - Vous pouvez choisir de restaurer dans un nouveau namespace ou de remplacer l'application existante. Pour ce tutoriel, nous allons remplacer l'application existante. - - Cliquez sur **Restore** pour lancer le processus. - -Kasten va maintenant restaurer l'application à l'état capturé dans le snapshot. Vous pouvez suivre la progression dans le tableau de bord. - -## 5. Sécurité des sauvegardes - -La protection de vos données de sauvegarde est une priorité. L'intégration de Kasten dans le produit Managed Kubernetes respecte les plus hauts standards de sécurité. - -- **Chiffrement** : Conformément aux exigences SecNumCloud, toutes vos sauvegardes sont chiffrées. Les données sont chiffrées en transit vers le stockage S3 avec le protocole **TLS 1.3** et au repos dans les buckets de stockage avec l'algorithme **AES-256**. - -- **Gestion des permissions** : L'accès à l'interface Kasten et à ses fonctionnalités est contrôlé par un système de permissions basé sur le RBAC de Kubernetes. Seuls les utilisateurs autorisés peuvent créer, modifier ou exécuter des politiques de sauvegarde et de restauration, garantissant ainsi une gouvernance stricte de vos opérations de sauvegarde. - -## Conclusion - -Vous avez appris à utiliser Veeam Kasten pour effectuer des opérations de base de sauvegarde et de restauration dans votre cluster Managed Kubernetes. Kasten offre de nombreuses fonctionnalités avancées, telles que la migration d'applications entre clusters et des politiques de rétention granulaires, que vous pouvez explorer pour renforcer votre stratégie de protection des données. - -Pour plus d'informations, consultez la [documentation officielle de Kasten K10](https://docs.kasten.io/latest/). +--- +title: Sauvegarder vos applications avec Veeam Kasten +--- + +import k10dashboard from '@site/docs/managed_kubernetes/tutorials/images/k10dashboard.png' +import k10s3location from '@site/docs/managed_kubernetes/tutorials/images/k10s3location.png' +import k10infrabackups from '@site/docs/managed_kubernetes/tutorials/images/k10infrabackups.png' + +## Introduction + +Veeam Kasten K10 est une solution de sauvegarde et de restauration conçue spécifiquement pour les environnements Kubernetes. Dans le produit Managed Kubernetes de Cloud Temple, Kasten est intégré pour vous permettre de protéger vos applications, de restaurer des données en cas de besoin et d'assurer la continuité de vos activités. + +Ce tutoriel vous guidera à travers les étapes de base pour sauvegarder et restaurer une application à l'aide de Kasten. + +## Prérequis + +Avant de commencer, assurez-vous de disposer des éléments suivants : + +- Un cluster Managed Kubernetes actif. +- L'identifiant de votre cluster (par exemple, `ctodev`). +- Une application déployée dans votre cluster que vous souhaitez sauvegarder. + +## 1. Accéder au tableau de bord Kasten + +Le tableau de bord Kasten est accessible via une URL sécurisée, construite à partir de l'identifiant de votre cluster. + +1. **Construisez l'URL d'accès** : + L'URL est basée sur le modèle suivant : `https://k10.external-secured..mk.ms-cloud-temple.com/k10/` + Remplacez `` par l'identifiant de votre cluster. Par exemple, si votre identifiant est `ctodev`, l'URL sera : `https://k10.external-secured.ctodev.mk.ms-cloud-temple.com/k10/`. + +2. **Accédez à l'URL** dans votre navigateur. + + :::info Note sur la sécurité + L'accès à cette URL est restreint aux adresses IP publiques que vous avez déclarées. Si vous ne parvenez pas à vous connecter, assurez-vous que votre adresse IP est autorisée en contactant le support Cloud Temple. + ::: + + + +:::tip[Guide de démarrage rapide intégré +] +La console Kasten inclut un guide de démarrage rapide interactif sur sa page d'accueil. N'hésitez pas à le suivre pour une première prise en main directement depuis l'interface. +::: + +## 2. Comprendre le stockage des sauvegardes + +Par défaut, Kasten est préconfiguré pour utiliser le service de stockage objet (S3) de Cloud Temple pour stocker vos sauvegardes de manière sécurisée et durable. + +Vous n'avez aucune configuration à effectuer. L'emplacement de stockage est déjà défini dans le tableau de bord Kasten, sous **Settings > Locations**. Cette configuration garantit que vos données sont stockées sur une infrastructure souveraine. + + + +:::info[Modèle de coût +] +Le service Veeam Kasten est inclus dans le produit Managed Kubernetes. Le stockage des sauvegardes sur notre S3 souverain est facturé à l'usage. Consultez notre grille tarifaire pour plus de détails. +::: + +## 3. Créer une politique de sauvegarde + +Une politique de sauvegarde (`Policy`) est un ensemble de règles qui définissent quand et comment sauvegarder vos applications. + +:::warning[Politique de sauvegarde existante +] +Une politique de sauvegarde nommée `infra-backups` est déjà configurée dans votre instance Kasten. Cette politique assure la sauvegarde des composants essentiels livrés avec le cluster. + + + +**Ne modifiez pas et ne supprimez pas cette politique.** + +Vous devez créer vos propres politiques pour sauvegarder les applications que vous déployez. +::: + +1. Dans le tableau de bord Kasten, accédez à la section **Policies** et cliquez sur **Create New Policy**. + +2. **Nommez votre politique** : Donnez un nom descriptif, par exemple `backup-my-app-daily`. + +3. **Définissez la fréquence (Action)** : + - **Action**: `Snapshot` (instantané). + - **Frequency**: Choisissez la fréquence qui vous convient (par exemple, `Daily` à `02:00`). + +4. **Sélectionnez les ressources à sauvegarder** : + - **Select resources by**: Vous pouvez sélectionner des applications par nom (`Application Name`), par namespace (`Namespace`), ou par labels. + - Pour sauvegarder toutes les applications d'un namespace, choisissez `Namespace` et sélectionnez le namespace souhaité. + +5. **Cliquez sur `Create Policy`** pour enregistrer. + +La politique s'exécutera automatiquement à la fréquence définie. Vous pouvez également lancer une exécution manuelle en cliquant sur le bouton "Play" (▶️) à côté de la politique. + +## 4. Restaurer une application + +Kasten facilite la restauration d'une application à son état précédent à partir d'un point de restauration. + +1. Dans le tableau de bord, allez dans la section **Applications**. Vous y verrez la liste de vos applications et leur état de conformité par rapport aux politiques de sauvegarde. + +2. **Sélectionnez l'application** que vous souhaitez restaurer. + +3. **Choisissez un point de restauration** : + La page de l'application affiche une liste des points de restauration disponibles. Choisissez celui que vous souhaitez utiliser et cliquez sur **Restore**. + +4. **Configurez la restauration** : + - Vous pouvez choisir de restaurer dans un nouveau namespace ou de remplacer l'application existante. Pour ce tutoriel, nous allons remplacer l'application existante. + - Cliquez sur **Restore** pour lancer le processus. + +Kasten va maintenant restaurer l'application à l'état capturé dans le snapshot. Vous pouvez suivre la progression dans le tableau de bord. + +## 5. Sécurité des sauvegardes + +La protection de vos données de sauvegarde est une priorité. L'intégration de Kasten dans le produit Managed Kubernetes respecte les plus hauts standards de sécurité. + +- **Chiffrement** : Conformément aux exigences SecNumCloud, toutes vos sauvegardes sont chiffrées. Les données sont chiffrées en transit vers le stockage S3 avec le protocole **TLS 1.3** et au repos dans les buckets de stockage avec l'algorithme **AES-256**. + +- **Gestion des permissions** : L'accès à l'interface Kasten et à ses fonctionnalités est contrôlé par un système de permissions basé sur le RBAC de Kubernetes. Seuls les utilisateurs autorisés peuvent créer, modifier ou exécuter des politiques de sauvegarde et de restauration, garantissant ainsi une gouvernance stricte de vos opérations de sauvegarde. + +## Conclusion + +Vous avez appris à utiliser Veeam Kasten pour effectuer des opérations de base de sauvegarde et de restauration dans votre cluster Managed Kubernetes. Kasten offre de nombreuses fonctionnalités avancées, telles que la migration d'applications entre clusters et des politiques de rétention granulaires, que vous pouvez explorer pour renforcer votre stratégie de protection des données. + +Pour plus d'informations, consultez la [documentation officielle de Kasten K10](https://docs.kasten.io/latest/). diff --git a/docs/managed_kubernetes/tutorials/usingopencost.md b/docs/managed_kubernetes/tutorials/usingopencost.md index 52f0a31d..e41b45f3 100644 --- a/docs/managed_kubernetes/tutorials/usingopencost.md +++ b/docs/managed_kubernetes/tutorials/usingopencost.md @@ -1,130 +1,131 @@ ---- -title: Suivre les coûts avec OpenCost ---- -import opencostui from './images/opencost.png' -import opencostgrafana from './images/opencostgrafana.png' -import opencostmcp from './images/opencostmcp.png' -import opencostmcp2 from './images/opencostmcp2.png' -import opencostmcp3 from './images/opencostmcp3.png' - -## Objectifs - -Ce tutoriel vous présente **OpenCost**, l'outil de monitoring et d'optimisation des coûts intégré à votre cluster **Managed Kubernetes**. À la fin de ce guide, vous serez capable de : - -- **Accéder** à l'interface d'OpenCost. -- **Comprendre** la structure de l'interface et les vues disponibles. -- **Analyser** la répartition des coûts de vos applications et de votre infrastructure. - -## Qu'est-ce qu'OpenCost ? - -OpenCost est une solution open-source, standard de la CNCF (Cloud Native Computing Foundation), qui fournit une visibilité en temps réel sur les coûts de vos environnements Kubernetes. Il vous aide à comprendre précisément ce qui consomme des ressources dans votre cluster et comment cela se traduit en termes de coûts. - -Dans le produit Managed Kubernetes, OpenCost est pré-installé et configuré pour vous donner une vision claire de vos dépenses. Il est directement paramétré avec les coûts réels de l'infrastructure Cloud Temple. - -## Accéder à l'interface OpenCost - -L'interface d'OpenCost est exposée sur une URL sécurisée, propre à votre cluster. Pour y accéder, utilisez l'URL suivante en remplaçant `identifiant` par celui de votre cluster (par exemple, `ctodev`) : - -`https://opencost.external-secured.identifiant.mk.ms-cloud-temple.com` - -:::info -L'accès à cette URL est restreint aux adresses IP que vous avez déclarées au support Cloud Temple. Si vous ne parvenez pas à y accéder, veuillez contacter le support pour vérifier les règles de firewall. -::: - -OpenCost UI - -## Explorer la répartition des coûts (Allocations) - -La vue principale et la plus détaillée d'OpenCost est le tableau de bord **Allocations**. C'est ici que vous pouvez visualiser la consommation de vos ressources en temps réel. - -Cette vue vous permet de décomposer les coûts par concepts natifs Kubernetes. Le menu déroulant "Aggregate by" est l'outil principal pour votre analyse, il vous permet de regrouper les coûts par : - -- **Namespace** : Pour avoir une vue par environnement ou par équipe. -- **Deployment**, **StatefulSet**, etc. : Pour analyser le coût d'une application spécifique. -- **Controller** : Pour une vue plus technique. - -### Agrégation par Labels - -Pour une analyse financière encore plus fine, OpenCost peut agréger les coûts en se basant sur les **labels Kubernetes**. Il n'y a pas une option "Label" directe dans le menu, mais OpenCost ingère vos labels et vous permet de créer des agrégations personnalisées. Pour cela, une stratégie de labeling cohérente est essentielle. Par exemple, en utilisant des labels comme `team: backend` ou `product: api-gateway`, vous pourrez analyser les coûts qui correspondent précisément à votre organisation. -Pour ce type d'analyse, vous devez passer par l'intégration IA d'opencost. - -## Dashboard Grafana - -Un dashboard Grafana est également disponible pour visualiser les données d'OpenCost. Ce dashboard offre une vue alternative et complémentaire à l'interface d'OpenCost, et il conserve l'historique complet des métriques de coûts, vous permettant d'analyser les tendances sur le long terme. - -OpenCost Grafana Dashboard - -## Utilisation Avancée : Intégration avec une IA (Serveur MCP) - -Pour les utilisateurs avancés, OpenCost peut être directement interrogé depuis l'assistant conversationnel Cline (ou autre) grâce au système de **MCP (Multi-purpose Co-processor) servers**. Cela vous permet de scripter des requêtes et d'obtenir des données de coût directement dans vos conversations. - -### 1. Configuration du MCP OpenCost dans Cline - -Pour connecter Cline à votre instance OpenCost, vous devez ajouter la configuration suivante à votre fichier `cline_mcp_settings.json`. Ce fichier se trouve généralement dans le répertoire de configuration de Cline. - -Nous conseillons de créer un serveur MCP "opencost-xxxxx" où xxxxx est le nom de votre cluster Kubernetes managé. -L'url du serveur MCP est de type `https://opencost-mcp.external-secured.identifiant.mk.ms-cloud-temple.com` -Par exemple, pour le cluster "bestie" : - -```json -{ - "mcpServers": { - "opencost-bestie": { - "disabled": false, - "timeout": 60, - "type": "streamableHttp", - "url": "https://opencost-mcp.external-secured.bestie.mk.ms-cloud-temple.com", - "headers": { - "Authorization": "Basic " - } - } - } -} -``` - -Pour générer la valeur `` à partir de vos identifiants, utilisez une des commandes suivantes : - -**Pour Linux/macOS :** - -```bash -echo -n 'finopsadm:VOTRE_MOT_DE_PASSE' | base64 -``` - -**Pour Windows (PowerShell) :** - -```powershell -$credentials = [System.Text.Encoding]::UTF8.GetBytes("finopsadm:VOTRE_MOT_DE_PASSE") -[System.Convert]::ToBase64String($credentials) -``` - -Une fois ce fichier sauvegardé, Cline chargera automatiquement le MCP `opencost-xxxxx` au démarrage. - -### 2. Interroger OpenCost avec le MCP - -:::tip[Prérequis ] -Pour interagir avec le MCP en langage naturel, l'IA sous-jacente doit avoir accès à des modèles de langage (LLMs), soit localement (LMStudio, etc), soit via une connexion à des services publics comme GPT-5 ou Gemini, soit en utilisant notre produit **[LLM-as-a-Service](pathname:///llmaas/llmaas)** souveraine. -::: - -Après configuration, vous pouvez utiliser les outils LLM pour effectuer des requetes en langage natuel sur ce serveur MCP. - -#### Exemple - -"utilise le MCP "opencost-bestie", et dis moi quelle pourcentage des couts du cluster ne sont pas alloués à des ressources" -Vous obtiendrez ceci: -réponse IA opencost - -#### Exemple 2 - -"utilise le MCP "opencost-bestie", et liste moi les couts associés aux volumes persistents sur la journée d'hier" - -réponse IA opencost 2 - -#### Exemple 3 - -"utilise le MCP opencost-bestie, et dis moi quelle pourcentage des couts du cluster alloués à l'application avec le label "nginx" . (filtre de la forme filter: "label:app:frontend" )" - -réponse IA opencost 3 - -## Conclusion - -OpenCost vous fournit des outils puissants pour une analyse fine et en temps réel des coûts de votre cluster Kubernetes. En utilisant principalement la vue **Allocations** et en la combinant avec une bonne stratégie de labeling, vous pouvez obtenir une vision claire de vos dépenses, alignée à la fois sur vos déploiements techniques et votre organisation interne. L'utilisation des LLM et du serveur MCP opencost permet d'aller plus loin dans l'exploitation des données. +--- +title: Suivre les coûts avec OpenCost +--- +import opencostui from '@site/docs/managed_kubernetes/tutorials/images/opencost.png' +import opencostgrafana from '@site/docs/managed_kubernetes/tutorials/images/opencostgrafana.png' +import opencostmcp from '@site/docs/managed_kubernetes/tutorials/images/opencostmcp.png' +import opencostmcp2 from '@site/docs/managed_kubernetes/tutorials/images/opencostmcp2.png' +import opencostmcp3 from '@site/docs/managed_kubernetes/tutorials/images/opencostmcp3.png' + +## Objectifs + +Ce tutoriel vous présente **OpenCost**, l'outil de monitoring et d'optimisation des coûts intégré à votre cluster **Managed Kubernetes**. À la fin de ce guide, vous serez capable de : + +- **Accéder** à l'interface d'OpenCost. +- **Comprendre** la structure de l'interface et les vues disponibles. +- **Analyser** la répartition des coûts de vos applications et de votre infrastructure. + +## Qu'est-ce qu'OpenCost ? + +OpenCost est une solution open-source, standard de la CNCF (Cloud Native Computing Foundation), qui fournit une visibilité en temps réel sur les coûts de vos environnements Kubernetes. Il vous aide à comprendre précisément ce qui consomme des ressources dans votre cluster et comment cela se traduit en termes de coûts. + +Dans le produit Managed Kubernetes, OpenCost est pré-installé et configuré pour vous donner une vision claire de vos dépenses. Il est directement paramétré avec les coûts réels de l'infrastructure Cloud Temple. + +## Accéder à l'interface OpenCost + +L'interface d'OpenCost est exposée sur une URL sécurisée, propre à votre cluster. Pour y accéder, utilisez l'URL suivante en remplaçant `identifiant` par celui de votre cluster (par exemple, `ctodev`) : + +`https://opencost.external-secured.identifiant.mk.ms-cloud-temple.com` + +:::info +L'accès à cette URL est restreint aux adresses IP que vous avez déclarées au support Cloud Temple. Si vous ne parvenez pas à y accéder, veuillez contacter le support pour vérifier les règles de firewall. +::: + +OpenCost UI + +## Explorer la répartition des coûts (Allocations) + +La vue principale et la plus détaillée d'OpenCost est le tableau de bord **Allocations**. C'est ici que vous pouvez visualiser la consommation de vos ressources en temps réel. + +Cette vue vous permet de décomposer les coûts par concepts natifs Kubernetes. Le menu déroulant "Aggregate by" est l'outil principal pour votre analyse, il vous permet de regrouper les coûts par : + +- **Namespace** : Pour avoir une vue par environnement ou par équipe. +- **Deployment**, **StatefulSet**, etc. : Pour analyser le coût d'une application spécifique. +- **Controller** : Pour une vue plus technique. + +### Agrégation par Labels + +Pour une analyse financière encore plus fine, OpenCost peut agréger les coûts en se basant sur les **labels Kubernetes**. Il n'y a pas une option "Label" directe dans le menu, mais OpenCost ingère vos labels et vous permet de créer des agrégations personnalisées. Pour cela, une stratégie de labeling cohérente est essentielle. Par exemple, en utilisant des labels comme `team: backend` ou `product: api-gateway`, vous pourrez analyser les coûts qui correspondent précisément à votre organisation. +Pour ce type d'analyse, vous devez passer par l'intégration IA d'opencost. + +## Dashboard Grafana + +Un dashboard Grafana est également disponible pour visualiser les données d'OpenCost. Ce dashboard offre une vue alternative et complémentaire à l'interface d'OpenCost, et il conserve l'historique complet des métriques de coûts, vous permettant d'analyser les tendances sur le long terme. + +OpenCost Grafana Dashboard + +## Utilisation Avancée : Intégration avec une IA (Serveur MCP) + +Pour les utilisateurs avancés, OpenCost peut être directement interrogé depuis l'assistant conversationnel Cline (ou autre) grâce au système de **MCP (Multi-purpose Co-processor) servers**. Cela vous permet de scripter des requêtes et d'obtenir des données de coût directement dans vos conversations. + +### 1. Configuration du MCP OpenCost dans Cline + +Pour connecter Cline à votre instance OpenCost, vous devez ajouter la configuration suivante à votre fichier `cline_mcp_settings.json`. Ce fichier se trouve généralement dans le répertoire de configuration de Cline. + +Nous conseillons de créer un serveur MCP "opencost-xxxxx" où xxxxx est le nom de votre cluster Kubernetes managé. +L'url du serveur MCP est de type `https://opencost-mcp.external-secured.identifiant.mk.ms-cloud-temple.com` +Par exemple, pour le cluster "bestie" : + +```json +{ + "mcpServers": { + "opencost-bestie": { + "disabled": false, + "timeout": 60, + "type": "streamableHttp", + "url": "https://opencost-mcp.external-secured.bestie.mk.ms-cloud-temple.com", + "headers": { + "Authorization": "Basic " + } + } + } +} +``` + +Pour générer la valeur `` à partir de vos identifiants, utilisez une des commandes suivantes : + +**Pour Linux/macOS :** + +```bash +echo -n 'finopsadm:VOTRE_MOT_DE_PASSE' | base64 +``` + +**Pour Windows (PowerShell) :** + +```powershell +$credentials = [System.Text.Encoding]::UTF8.GetBytes("finopsadm:VOTRE_MOT_DE_PASSE") +[System.Convert]::ToBase64String($credentials) +``` + +Une fois ce fichier sauvegardé, Cline chargera automatiquement le MCP `opencost-xxxxx` au démarrage. + +### 2. Interroger OpenCost avec le MCP + +:::tip[Prérequis +] +Pour interagir avec le MCP en langage naturel, l'IA sous-jacente doit avoir accès à des modèles de langage (LLMs), soit localement (LMStudio, etc), soit via une connexion à des services publics comme GPT-5 ou Gemini, soit en utilisant notre produit **[LLM-as-a-Service](pathname:///llmaas/llmaas)** souveraine. +::: + +Après configuration, vous pouvez utiliser les outils LLM pour effectuer des requetes en langage natuel sur ce serveur MCP. + +#### Exemple + +"utilise le MCP "opencost-bestie", et dis moi quelle pourcentage des couts du cluster ne sont pas alloués à des ressources" +Vous obtiendrez ceci: +réponse IA opencost + +#### Exemple 2 + +"utilise le MCP "opencost-bestie", et liste moi les couts associés aux volumes persistents sur la journée d'hier" + +réponse IA opencost 2 + +#### Exemple 3 + +"utilise le MCP opencost-bestie, et dis moi quelle pourcentage des couts du cluster alloués à l'application avec le label "nginx" . (filtre de la forme filter: "label:app:frontend" )" + +réponse IA opencost 3 + +## Conclusion + +OpenCost vous fournit des outils puissants pour une analyse fine et en temps réel des coûts de votre cluster Kubernetes. En utilisant principalement la vue **Allocations** et en la combinant avec une bonne stratégie de labeling, vous pouvez obtenir une vision claire de vos dépenses, alignée à la fois sur vos déploiements techniques et votre organisation interne. L'utilisation des LLM et du serveur MCP opencost permet d'aller plus loin dans l'exploitation des données. diff --git a/docs/managed_mariadb/managed_mariadb.md b/docs/managed_mariadb/managed_mariadb.md index 8d697b90..7386ed3b 100644 --- a/docs/managed_mariadb/managed_mariadb.md +++ b/docs/managed_mariadb/managed_mariadb.md @@ -2,10 +2,10 @@ title: Vue d'ensemble --- -import stack from './images/stack.png' -import StandAlone from './images/StandAlone.png' -import Distributed from './images/Distributed.png' -import maxscale from './images/maxscale.png' +import stack from '@site/docs/managed_mariadb/images/stack.png' +import StandAlone from '@site/docs/managed_mariadb/images/StandAlone.png' +import Distributed from '@site/docs/managed_mariadb/images/Distributed.png' +import maxscale from '@site/docs/managed_mariadb/images/maxscale.png' # MariaDB Managé Preview @@ -37,7 +37,7 @@ Les moteurs MariaDB peuvent être choisis en version 11.4 LTS ou 11.8 LTS. Toutes les sauvegardes utilisent le stockage S3 Cloud-Temple (qualifié SNC) avec chiffrement at-rest. -![Architecture stack](./images/stack.png) +![Architecture stack](@site/docs/managed_mariadb/images/stack.png) ### Bénéfices Clés @@ -61,14 +61,14 @@ Le stockage utilisé par cette instance est répliqué sur 3 AZ, et permet un re - sauvegardes physiques (`mariabackup`) et logiques (`mysqldump`) - SLA 99.9 % (hors plages de maintenance) -![Architecture StandAlone](./images/StandAlone.png) +![Architecture StandAlone](@site/docs/managed_mariadb/images/StandAlone.png) ### Distributed Le modèle ***Distributed*** déploie un cluster de 3 instances du moteur MariaDB, avec Galera en mode "single primary" et MaxScale: - un endpoint MaxScale permet un routage vers les différentes instances suivant le type de requete (read ou write). -![MaxScale](./images/maxscale.png) +![MaxScale](@site/docs/managed_mariadb/images/maxscale.png) - l'instance en lecture-écriture (RW) est accessible via un endpoint spécifique. - Les 2 instances en lecture seule (RO) sont accessibles via un autre endpoint spécifique. @@ -83,4 +83,4 @@ Ainsi, les applicatifs peuvent au choix utiliser des connexions RW ou RO, ou lai - sauvegardes PiTR et Logiques - SLA 99.9 % (hors plages de maintenance) -![Architecture Distributed](./images/Distributed.png) +![Architecture Distributed](@site/docs/managed_mariadb/images/Distributed.png) diff --git a/docs/marketplace/quickstart.md b/docs/marketplace/quickstart.md index 228e75de..37cef9e6 100644 --- a/docs/marketplace/quickstart.md +++ b/docs/marketplace/quickstart.md @@ -1,8 +1,8 @@ --- title: Guide de démarrage --- -import marketplaceCatalog from './images/marketplace_catalog.png' -import marketplaceSolutionDetails from './images/marketplace_solution_details.png' +import marketplaceCatalog from '@site/docs/marketplace/images/marketplace_catalog.png' +import marketplaceSolutionDetails from '@site/docs/marketplace/images/marketplace_solution_details.png' # QuickStart pour la Marketplace Cloud Temple diff --git a/docs/marketplace/tutorials/contact_partner.md b/docs/marketplace/tutorials/contact_partner.md index 8b24576c..0cb2595a 100644 --- a/docs/marketplace/tutorials/contact_partner.md +++ b/docs/marketplace/tutorials/contact_partner.md @@ -1,9 +1,9 @@ --- title: Contacter un partenaire --- -import marketplaceContactAccess from '../images/marketplaceContactAccess.png' -import marketplaceContactConfirm from '../images/marketplaceContactConfirm.png' -import marketplaceContactEmail from '../images/marketplaceContactEmail.png' +import marketplaceContactAccess from '@site/docs/marketplace/images/marketplaceContactAccess.png' +import marketplaceContactConfirm from '@site/docs/marketplace/images/marketplaceContactConfirm.png' +import marketplaceContactEmail from '@site/docs/marketplace/images/marketplaceContactEmail.png' Ce tutoriel vous guide pour entrer en contact avec un partenaire éditeur via la Marketplace Cloud Temple. diff --git a/docs/marketplace/tutorials/customize_image_openiaas.md b/docs/marketplace/tutorials/customize_image_openiaas.md index 1c9d50f7..4a1c5051 100644 --- a/docs/marketplace/tutorials/customize_image_openiaas.md +++ b/docs/marketplace/tutorials/customize_image_openiaas.md @@ -1,9 +1,9 @@ --- title: Customiser une image OpenIaaS --- -import marketplaceOpenIaasExportTemplate from '../images/marketplace_openiaas_export_template.png' -import marketplaceOpenIaasExportTemplateButton from '../images/marketplace_openiaas_export_template_button.png' -import marketplaceOpeniaasDeployFromTemplate from '../images/marketplace_openiaas_deploy_from_template.png' +import marketplaceOpenIaasExportTemplate from '@site/docs/marketplace/images/marketplace_openiaas_export_template.png' +import marketplaceOpenIaasExportTemplateButton from '@site/docs/marketplace/images/marketplace_openiaas_export_template_button.png' +import marketplaceOpeniaasDeployFromTemplate from '@site/docs/marketplace/images/marketplace_openiaas_deploy_from_template.png' Ce tutoriel explique comment personnaliser une image de machine virtuelle (VMI) OpenIaaS fournie par la Marketplace pour créer vos propres modèles réutilisables. diff --git a/docs/marketplace/tutorials/customize_image_vmware.md b/docs/marketplace/tutorials/customize_image_vmware.md index b4ae52ce..c2e00108 100644 --- a/docs/marketplace/tutorials/customize_image_vmware.md +++ b/docs/marketplace/tutorials/customize_image_vmware.md @@ -1,9 +1,9 @@ --- title: Customiser une image VMware --- -import marketplaceVMwareExportTemplate from '../images/marketplace_vmware_export_template.png' -import marketplaceVMwareExportTemplateButton from '../images/marketplace_vmware_export_template_button.png' -import marketplaceVMwareDeployFromTemplate from '../images/marketplace_vmware_deploy_from_template.png' +import marketplaceVMwareExportTemplate from '@site/docs/marketplace/images/marketplace_vmware_export_template.png' +import marketplaceVMwareExportTemplateButton from '@site/docs/marketplace/images/marketplace_vmware_export_template_button.png' +import marketplaceVMwareDeployFromTemplate from '@site/docs/marketplace/images/marketplace_vmware_deploy_from_template.png' Ce tutoriel explique comment personnaliser une image de machine virtuelle (VMI) VMware fournie par la Marketplace pour créer vos propres modèles réutilisables. diff --git a/docs/marketplace/tutorials/deploy_openiaas.md b/docs/marketplace/tutorials/deploy_openiaas.md index e19f7d1c..add075b0 100644 --- a/docs/marketplace/tutorials/deploy_openiaas.md +++ b/docs/marketplace/tutorials/deploy_openiaas.md @@ -1,8 +1,8 @@ --- title: Déployer une image sur OpenIaaS --- -import marketplaceOpeniaasDeployment from '../images/marketplace_openiaas_deploy.png' -import marketplaceOpeniaasConfig from '../images/marketplace_openiaas_config.png' +import marketplaceOpeniaasDeployment from '@site/docs/marketplace/images/marketplace_openiaas_deploy.png' +import marketplaceOpeniaasConfig from '@site/docs/marketplace/images/marketplace_openiaas_config.png' Ce tutoriel vous guide pour déployer une image de machine virtuelle depuis la Marketplace Cloud Temple vers votre environnement OpenIaaS. diff --git a/docs/marketplace/tutorials/deploy_vmware.md b/docs/marketplace/tutorials/deploy_vmware.md index f88f9586..49d80d8b 100644 --- a/docs/marketplace/tutorials/deploy_vmware.md +++ b/docs/marketplace/tutorials/deploy_vmware.md @@ -1,8 +1,8 @@ --- title: Déployer une image sur VMware --- -import marketplaceVmwareDeployment from '../images/marketplace_vmware_deploy.png' -import marketplaceVmwareConfig from '../images/marketplace_vmware_config.png' +import marketplaceVmwareDeployment from '@site/docs/marketplace/images/marketplace_vmware_deploy.png' +import marketplaceVmwareConfig from '@site/docs/marketplace/images/marketplace_vmware_config.png' Ce tutoriel vous guide pour déployer une image de machine virtuelle depuis la Marketplace Cloud Temple vers votre environnement VMware. diff --git a/docs/network/internet/quickstart.md b/docs/network/internet/quickstart.md index a7885ed4..9eb3dc37 100644 --- a/docs/network/internet/quickstart.md +++ b/docs/network/internet/quickstart.md @@ -1,13 +1,13 @@ --- title: Guide de démarrage --- -import shivaInet_001 from './images/shiva_inet_001.png' -import shivaInet_002 from './images/shiva_inet_002.png' -import shivaInet_003 from './images/shiva_inet_003.png' -import shivaInet_004 from './images/shiva_inet_004.png' -import shivaInet_005 from './images/shiva_inet_005.png' -import shivaInet_008 from './images/shiva_inet_008.png' -import shivaInet_007 from './images/shiva_inet_007.png' +import shivaInet_001 from '@site/docs/network/internet/images/shiva_inet_001.png' +import shivaInet_002 from '@site/docs/network/internet/images/shiva_inet_002.png' +import shivaInet_003 from '@site/docs/network/internet/images/shiva_inet_003.png' +import shivaInet_004 from '@site/docs/network/internet/images/shiva_inet_004.png' +import shivaInet_005 from '@site/docs/network/internet/images/shiva_inet_005.png' +import shivaInet_008 from '@site/docs/network/internet/images/shiva_inet_008.png' +import shivaInet_007 from '@site/docs/network/internet/images/shiva_inet_007.png' ## Gestion de vos connectivités Internet diff --git a/docs/network/internet/tutorials/forti.md b/docs/network/internet/tutorials/forti.md index 6fb82451..5bc44064 100644 --- a/docs/network/internet/tutorials/forti.md +++ b/docs/network/internet/tutorials/forti.md @@ -5,53 +5,53 @@ tags: - tutorials --- -import fortiSupport from '../images/forti_support.png'; -import fortiSupportVm01 from '../images/forti_support_vm_01.png'; -import fortiSupportVm02 from '../images/forti_support_vm_02.png'; -import asn from '../images/asn.png'; -import ipsPub from '../images/ips_pub.png'; -import ipsInterco from '../images/ips_interco.png'; -import fortiVmType01 from '../images/forti_vm_type_01.png'; -import shivaCatalogues from '../images/shiva_catalogues.png'; -import imgImport01 from '../images/img_import_01.png'; -import imgImport02 from '../images/img_import_02.png'; -import imgImport03 from '../images/img_import_03.png'; -import imgImport04 from '../images/img_import_04.png'; -import imgImport05 from '../images/img_import_05.png'; -import imgImport06 from '../images/img_import_06.png'; -import imgImport07 from '../images/img_import_07.png'; -import imgImport08 from '../images/img_import_08.png'; -import imgImport09 from '../images/img_import_09.png'; -import imgImport10 from '../images/img_import_10.png'; -import imgImport11 from '../images/img_import_11.png'; -import imgImport12 from '../images/img_import_12.png'; -import ipPlan01 from '../images/ip_plan_01.png'; -import ipPlan02 from '../images/ip_plan_02.png'; -import ipPlan03 from '../images/ip_plan_03.png'; -import ipPlan04 from '../images/ip_plan_04.png'; -import ipPlan05 from '../images/ip_plan_05.png'; -import imgDeploy01 from '../images/img_deploy_01.png'; -import imgDeploy02 from '../images/img_deploy_02.png'; -import imgDeploy03 from '../images/img_deploy_03.png'; -import imgDeploy04 from '../images/img_deploy_04.png'; -import imgDeploy05 from '../images/img_deploy_05.png'; -import imgDeploy06 from '../images/img_deploy_06.png'; -import imgDeploy07 from '../images/img_deploy_07.png'; -import imgDeploy08 from '../images/img_deploy_08.png'; -import imgDeploy09 from '../images/img_deploy_09.png'; -import imgDeploy10 from '../images/img_deploy_10.png'; -import imgDeploy11 from '../images/img_deploy_11.png'; -import imgBackup01 from '../images/img_backup_01.png'; -import imgBackup02 from '../images/img_backup_02.png'; -import imgBackup03 from '../images/img_backup_03.png'; -import imgBackup04 from '../images/img_backup_04.png'; -import vmStart01 from '../images/vm_start_01.png'; -import vmStart02 from '../images/vm_start_02.png'; -import vmConsole01 from '../images/vm_console_01.png'; -import vmBoot01 from '../images/vm_boot_01.png'; -import vmBoot02 from '../images/vm_boot_02.png'; -import vmBoot03 from '../images/vm_boot_03.png'; -import vmBoot04 from '../images/vm_boot_04.png'; +import fortiSupport from '@site/docs/network/internet/images/forti_support.png'; +import fortiSupportVm01 from '@site/docs/network/internet/images/forti_support_vm_01.png'; +import fortiSupportVm02 from '@site/docs/network/internet/images/forti_support_vm_02.png'; +import asn from '@site/docs/network/internet/images/asn.png'; +import ipsPub from '@site/docs/network/internet/images/ips_pub.png'; +import ipsInterco from '@site/docs/network/internet/images/ips_interco.png'; +import fortiVmType01 from '@site/docs/network/internet/images/forti_vm_type_01.png'; +import shivaCatalogues from '@site/docs/network/internet/images/shiva_catalogues.png'; +import imgImport01 from '@site/docs/network/internet/images/img_import_01.png'; +import imgImport02 from '@site/docs/network/internet/images/img_import_02.png'; +import imgImport03 from '@site/docs/network/internet/images/img_import_03.png'; +import imgImport04 from '@site/docs/network/internet/images/img_import_04.png'; +import imgImport05 from '@site/docs/network/internet/images/img_import_05.png'; +import imgImport06 from '@site/docs/network/internet/images/img_import_06.png'; +import imgImport07 from '@site/docs/network/internet/images/img_import_07.png'; +import imgImport08 from '@site/docs/network/internet/images/img_import_08.png'; +import imgImport09 from '@site/docs/network/internet/images/img_import_09.png'; +import imgImport10 from '@site/docs/network/internet/images/img_import_10.png'; +import imgImport11 from '@site/docs/network/internet/images/img_import_11.png'; +import imgImport12 from '@site/docs/network/internet/images/img_import_12.png'; +import ipPlan01 from '@site/docs/network/internet/images/ip_plan_01.png'; +import ipPlan02 from '@site/docs/network/internet/images/ip_plan_02.png'; +import ipPlan03 from '@site/docs/network/internet/images/ip_plan_03.png'; +import ipPlan04 from '@site/docs/network/internet/images/ip_plan_04.png'; +import ipPlan05 from '@site/docs/network/internet/images/ip_plan_05.png'; +import imgDeploy01 from '@site/docs/network/internet/images/img_deploy_01.png'; +import imgDeploy02 from '@site/docs/network/internet/images/img_deploy_02.png'; +import imgDeploy03 from '@site/docs/network/internet/images/img_deploy_03.png'; +import imgDeploy04 from '@site/docs/network/internet/images/img_deploy_04.png'; +import imgDeploy05 from '@site/docs/network/internet/images/img_deploy_05.png'; +import imgDeploy06 from '@site/docs/network/internet/images/img_deploy_06.png'; +import imgDeploy07 from '@site/docs/network/internet/images/img_deploy_07.png'; +import imgDeploy08 from '@site/docs/network/internet/images/img_deploy_08.png'; +import imgDeploy09 from '@site/docs/network/internet/images/img_deploy_09.png'; +import imgDeploy10 from '@site/docs/network/internet/images/img_deploy_10.png'; +import imgDeploy11 from '@site/docs/network/internet/images/img_deploy_11.png'; +import imgBackup01 from '@site/docs/network/internet/images/img_backup_01.png'; +import imgBackup02 from '@site/docs/network/internet/images/img_backup_02.png'; +import imgBackup03 from '@site/docs/network/internet/images/img_backup_03.png'; +import imgBackup04 from '@site/docs/network/internet/images/img_backup_04.png'; +import vmStart01 from '@site/docs/network/internet/images/vm_start_01.png'; +import vmStart02 from '@site/docs/network/internet/images/vm_start_02.png'; +import vmConsole01 from '@site/docs/network/internet/images/vm_console_01.png'; +import vmBoot01 from '@site/docs/network/internet/images/vm_boot_01.png'; +import vmBoot02 from '@site/docs/network/internet/images/vm_boot_02.png'; +import vmBoot03 from '@site/docs/network/internet/images/vm_boot_03.png'; +import vmBoot04 from '@site/docs/network/internet/images/vm_boot_04.png'; ## Objet de ce guide diff --git a/docs/network/internet/tutorials/pfSense.md b/docs/network/internet/tutorials/pfSense.md index 44cc9093..813f8573 100644 --- a/docs/network/internet/tutorials/pfSense.md +++ b/docs/network/internet/tutorials/pfSense.md @@ -4,17 +4,17 @@ tags: - internet - tutorials --- -import pfSenseWebui from '../images/pfsense_webui.png'; -import pfSenseHomePage from '../images/pfsense_home_page.png'; -import pfSenseBgpRule from '../images/pfsense_bgp_rule.png'; -import pfSenseFrrPackage from '../images/pfsense_frr_package.png'; -import pfSenseGeneralConf from '../images/pfsense_general_conf.png'; -import pfSenseNeighborConf from '../images/pfsense_neighbor_conf.png'; -import bgpBasicOptions from '../images/bgp_basic_options.png'; -import ebgpConf from '../images/ebgp_conf.png'; -import routeServerNeighbor from '../images/route_server_neighbor.png'; -import neighborsOverview from '../images/neighbors_overview.png'; -import pfSenseBgpStatus from '../images/pfsense_bgp_status.png'; +import pfSenseWebui from '@site/docs/network/internet/images/pfsense_webui.png'; +import pfSenseHomePage from '@site/docs/network/internet/images/pfsense_home_page.png'; +import pfSenseBgpRule from '@site/docs/network/internet/images/pfsense_bgp_rule.png'; +import pfSenseFrrPackage from '@site/docs/network/internet/images/pfsense_frr_package.png'; +import pfSenseGeneralConf from '@site/docs/network/internet/images/pfsense_general_conf.png'; +import pfSenseNeighborConf from '@site/docs/network/internet/images/pfsense_neighbor_conf.png'; +import bgpBasicOptions from '@site/docs/network/internet/images/bgp_basic_options.png'; +import ebgpConf from '@site/docs/network/internet/images/ebgp_conf.png'; +import routeServerNeighbor from '@site/docs/network/internet/images/route_server_neighbor.png'; +import neighborsOverview from '@site/docs/network/internet/images/neighbors_overview.png'; +import pfSenseBgpStatus from '@site/docs/network/internet/images/pfsense_bgp_status.png'; Ce guide va vous aider à déployer votre __firewall opensource pfSense__ dans le Cloud de Confiance en seulement quelques minutes. diff --git a/docs/network/private_network/quickstart.md b/docs/network/private_network/quickstart.md index c99d697e..df6db505 100644 --- a/docs/network/private_network/quickstart.md +++ b/docs/network/private_network/quickstart.md @@ -1,24 +1,24 @@ --- title: Guide de démarrage --- -import shivaNetwork_001 from './images/shiva_network_001.png' -import shivaNetwork_002 from './images/shiva_network_002.png' -import shivaNetwork_003 from './images/shiva_network_003.png' -import shivaNetwork_004 from './images/shiva_network_004.png' -import shivaNetwork_005 from './images/shiva_network_005.png' -import shivaNetwork_006 from './images/shiva_network_006.png' -import shivaNetwork_007 from './images/shiva_network_007.png' -import shivaNetwork_008 from './images/shiva_network_008.png' -import shivaNetwork_009 from './images/shiva_network_009.png' -import shivaNetwork_010 from './images/shiva_network_010.png' -import shivaNetworkVnShareEnabled from './images/shiva_network_vn_share_enabled.png' -import shivaNetworkVnShared from './images/shiva_network_vn_shared.png' -import shivaNetworkVnSharedTenant from './images/shiva_network_vn_shared_tenant.png' -import shivaNetworkVnSharedWithMe from './images/shiva_network_vn_shared_with_me.png' -import shivaNetwork_order_001 from './images/shiva_order_network_001.png' -import shivaNetworkDeletePropagation from './images/shiva_network_delete_propagation.png' -import shivaNetworkDeletePropagationOrder from './images/shiva_network_delete_propagation_order.png' -import shivaNetworkDeletePropagationOrderValidate from './images/shiva_network_delete_propagation_order_validate.png' +import shivaNetwork_001 from '@site/docs/network/private_network/images/shiva_network_001.png' +import shivaNetwork_002 from '@site/docs/network/private_network/images/shiva_network_002.png' +import shivaNetwork_003 from '@site/docs/network/private_network/images/shiva_network_003.png' +import shivaNetwork_004 from '@site/docs/network/private_network/images/shiva_network_004.png' +import shivaNetwork_005 from '@site/docs/network/private_network/images/shiva_network_005.png' +import shivaNetwork_006 from '@site/docs/network/private_network/images/shiva_network_006.png' +import shivaNetwork_007 from '@site/docs/network/private_network/images/shiva_network_007.png' +import shivaNetwork_008 from '@site/docs/network/private_network/images/shiva_network_008.png' +import shivaNetwork_009 from '@site/docs/network/private_network/images/shiva_network_009.png' +import shivaNetwork_010 from '@site/docs/network/private_network/images/shiva_network_010.png' +import shivaNetworkVnShareEnabled from '@site/docs/network/private_network/images/shiva_network_vn_share_enabled.png' +import shivaNetworkVnShared from '@site/docs/network/private_network/images/shiva_network_vn_shared.png' +import shivaNetworkVnSharedTenant from '@site/docs/network/private_network/images/shiva_network_vn_shared_tenant.png' +import shivaNetworkVnSharedWithMe from '@site/docs/network/private_network/images/shiva_network_vn_shared_with_me.png' +import shivaNetwork_order_001 from '@site/docs/network/private_network/images/shiva_order_network_001.png' +import shivaNetworkDeletePropagation from '@site/docs/network/private_network/images/shiva_network_delete_propagation.png' +import shivaNetworkDeletePropagationOrder from '@site/docs/network/private_network/images/shiva_network_delete_propagation_order.png' +import shivaNetworkDeletePropagationOrderValidate from '@site/docs/network/private_network/images/shiva_network_delete_propagation_order_validate.png' ## Réseaux privés régionaux diff --git a/docs/network/vpc/quickstart.md b/docs/network/vpc/quickstart.md index 4d77e5ba..072a6cab 100644 --- a/docs/network/vpc/quickstart.md +++ b/docs/network/vpc/quickstart.md @@ -1,19 +1,19 @@ --- title: Quickstart --- -import newTabNetwork from './images/new_tab_network.png' -import vpcCreateButton from './images/vpc_create_button.png' -import vpcCreateModal from './images/vpc_create_modale.png' -import vpcOverview from './images/vpc.png' -import vpcDetailsView from './images/vpc_details_view.png' -import vpcNewPrivateNetwork from './images/vpc_new_private_network.png' -import vpcActivateGatewayButton from './images/vpc_activate_gateway_button.png' -import vpcActivateGatewayModal from './images/vpc_activate_gatewat_modale.png' -import vpcOrders from './images/vpc_orders.png' -import vpcStaticIps from './images/vpc_static_ips.png' -import vpcNewStaticIps from './images/vpc_new_static_ips.png' -import vpcNewStaticIpsModale from './images/vpc_new_static_ips_modale.png' -import vpcStaticIpsAssociate from './images/vpc_static_ips_associate_png.png' +import newTabNetwork from '@site/docs/network/vpc/images/new_tab_network.png' +import vpcCreateButton from '@site/docs/network/vpc/images/vpc_create_button.png' +import vpcCreateModal from '@site/docs/network/vpc/images/vpc_create_modale.png' +import vpcOverview from '@site/docs/network/vpc/images/vpc.png' +import vpcDetailsView from '@site/docs/network/vpc/images/vpc_details_view.png' +import vpcNewPrivateNetwork from '@site/docs/network/vpc/images/vpc_new_private_network.png' +import vpcActivateGatewayButton from '@site/docs/network/vpc/images/vpc_activate_gateway_button.png' +import vpcActivateGatewayModal from '@site/docs/network/vpc/images/vpc_activate_gatewat_modale.png' +import vpcOrders from '@site/docs/network/vpc/images/vpc_orders.png' +import vpcStaticIps from '@site/docs/network/vpc/images/vpc_static_ips.png' +import vpcNewStaticIps from '@site/docs/network/vpc/images/vpc_new_static_ips.png' +import vpcNewStaticIpsModale from '@site/docs/network/vpc/images/vpc_new_static_ips_modale.png' +import vpcStaticIpsAssociate from '@site/docs/network/vpc/images/vpc_static_ips_associate_png.png' # Démarrage Rapide VPC diff --git a/docs/network/vpc/tutorials/vm_configuration.md b/docs/network/vpc/tutorials/vm_configuration.md index bdbe4e96..b9c79694 100644 --- a/docs/network/vpc/tutorials/vm_configuration.md +++ b/docs/network/vpc/tutorials/vm_configuration.md @@ -1,12 +1,12 @@ --- title: Configuration Réseau de la VM --- -import vpcCreateNetworkAdaptersVmModale from '../images/vpc_create_network_adapters_vm_modale.png' -import vpcCreateNetworkAdaptersVmSelectNetworks from '../images/vpc_create_network_adapters_vm_select_networks.png' -import vpcCreateNetworkAdaptersVm from '../images/vpc_create_network_adapters_vm.png' -import vpcDetailIpsPub from '../images/vpc_detail_ips_pub.png' -import vpcIpPubAssociate from '../images/vpc_ip_pub_associate.png' -import vpcMacAddressAssociateModale from '../images/vpc_mac_address_associate_modale.png' +import vpcCreateNetworkAdaptersVmModale from '@site/docs/network/vpc/images/vpc_create_network_adapters_vm_modale.png' +import vpcCreateNetworkAdaptersVmSelectNetworks from '@site/docs/network/vpc/images/vpc_create_network_adapters_vm_select_networks.png' +import vpcCreateNetworkAdaptersVm from '@site/docs/network/vpc/images/vpc_create_network_adapters_vm.png' +import vpcDetailIpsPub from '@site/docs/network/vpc/images/vpc_detail_ips_pub.png' +import vpcIpPubAssociate from '@site/docs/network/vpc/images/vpc_ip_pub_associate.png' +import vpcMacAddressAssociateModale from '@site/docs/network/vpc/images/vpc_mac_address_associate_modale.png' # Configuration Réseau de la VM diff --git a/docs/paas_openshift/concepts.md b/docs/paas_openshift/concepts.md index a4bc3ca4..1ef408c2 100644 --- a/docs/paas_openshift/concepts.md +++ b/docs/paas_openshift/concepts.md @@ -1,7 +1,7 @@ --- title: Concepts --- -import oshiftOffert from './images/oshift_offert.png' +import oshiftOffert from '@site/docs/paas_openshift/images/oshift_offert.png' ## Présentation de RedHat OpenShift diff --git a/docs/paas_openshift/quickstart.md b/docs/paas_openshift/quickstart.md index 6f568109..e634134c 100644 --- a/docs/paas_openshift/quickstart.md +++ b/docs/paas_openshift/quickstart.md @@ -1,12 +1,12 @@ --- title: Guide de démarrage --- -import oshiftMenu_001 from './images/oshift_menu_001.png' -import oshiftSubMenu_001 from './images/oshift_sub_menu_001.png' -import oshiftClusterDetail_001 from './images/oshift_cluster_detail_001.png' -import oshiftMenu_002 from './images/oshift_menu_002.png' -import oshiftMenu_003 from './images/oshift_menu_003.png' -import oshiftOrder_001 from './images/oshift_order_001.png' +import oshiftMenu_001 from '@site/docs/paas_openshift/images/oshift_menu_001.png' +import oshiftSubMenu_001 from '@site/docs/paas_openshift/images/oshift_sub_menu_001.png' +import oshiftClusterDetail_001 from '@site/docs/paas_openshift/images/oshift_cluster_detail_001.png' +import oshiftMenu_002 from '@site/docs/paas_openshift/images/oshift_menu_002.png' +import oshiftMenu_003 from '@site/docs/paas_openshift/images/oshift_menu_003.png' +import oshiftOrder_001 from '@site/docs/paas_openshift/images/oshift_order_001.png' # QuickStart pour le produit OpenShift diff --git a/docs/public_cloud/vm_instances/quickstart.md b/docs/public_cloud/vm_instances/quickstart.md index f1cc8e4d..72d2d289 100644 --- a/docs/public_cloud/vm_instances/quickstart.md +++ b/docs/public_cloud/vm_instances/quickstart.md @@ -14,17 +14,17 @@ Avant de commencer, assurez-vous de disposer des éléments suivants : Connectez-vous à la **Console Cloud Temple** et naviguez vers **Cloud Public > VM Instances** depuis le menu principal. -![Dashboard Console Cloud Temple](./images/vm_instances_dashboard_overview.png) +![Dashboard Console Cloud Temple](@site/docs/public_cloud/vm_instances/images/vm_instances_dashboard_overview.png) Le tableau de bord vous présente un aperçu des ressources VM Instances consommées (stockage, CPU, RAM) ainsi que le nombre de machines virtuelles actives. Cliquez sur **Cloud Public** dans la sidebar gauche pour déployer le sous-menu, puis sélectionnez **VM Instances**. -![Navigation vers VM Instances](./images/vm_instances_navigation_cloud_public.png) +![Navigation vers VM Instances](@site/docs/public_cloud/vm_instances/images/vm_instances_navigation_cloud_public.png) Vous arrivez sur la liste de vos VM Instances : -![Liste des VM Instances](./images/vm_instances_liste.png) +![Liste des VM Instances](@site/docs/public_cloud/vm_instances/images/vm_instances_liste.png) Le tableau affiche pour chaque VM : son nom, son statut (Allumée / Éteinte), la zone de disponibilité, la famille d'instance, le modèle, ainsi que les ressources allouées (CPU, RAM, Taille disque). @@ -34,7 +34,7 @@ Cliquez sur le bouton **+ Nouvelle machine virtuelle** en haut à droite pour ou ### Étape 1 — Famille d'instance -![Étape 1 : Famille d'instance](./images/vm_instances_creation_etape1_famille.png) +![Étape 1 : Famille d'instance](@site/docs/public_cloud/vm_instances/images/vm_instances_creation_etape1_famille.png) Choisissez la **famille d'instance** adaptée à votre charge de travail : @@ -49,13 +49,13 @@ La famille **Performance** (vCPU dédiés) est disponible via le gabarit personn ### Étape 2 — Zone de disponibilité -![Étape 2 : Zone de disponibilité](./images/vm_instances_creation_etape2_az.png) +![Étape 2 : Zone de disponibilité](@site/docs/public_cloud/vm_instances/images/vm_instances_creation_etape2_az.png) Sélectionnez la **zone de disponibilité (AZ)** dans laquelle votre VM sera hébergée (ex : `fr1-az01`). ### Étape 3 — Choisir un template -![Étape 3 : Choisir un template](./images/vm_instances_creation_etape3_template.png) +![Étape 3 : Choisir un template](@site/docs/public_cloud/vm_instances/images/vm_instances_creation_etape3_template.png) Parcourez le catalogue d'images disponibles via les onglets **OS** et **Appliances** : @@ -67,7 +67,7 @@ Sélectionnez le système d'exploitation souhaité et choisissez la version dans ### Étape 4 — Gabarit -![Étape 4 : Gabarit](./images/vm_instances_creation_etape4_gabarit.png) +![Étape 4 : Gabarit](@site/docs/public_cloud/vm_instances/images/vm_instances_creation_etape4_gabarit.png) Choisissez un **gabarit prédéfini** ou créez un **gabarit Custom** : @@ -77,7 +77,7 @@ Choisissez un **gabarit prédéfini** ou créez un **gabarit Custom** : ### Étape 5 — Nom et politique de sauvegarde -![Étape 5 : Nom et politique de sauvegarde](./images/vm_instances_creation_etape5_nom_sauvegarde.png) +![Étape 5 : Nom et politique de sauvegarde](@site/docs/public_cloud/vm_instances/images/vm_instances_creation_etape5_nom_sauvegarde.png) Renseignez : @@ -90,7 +90,7 @@ Cette étape affiche également un récapitulatif du système d'exploitation sé ### Étape 6 — Cloud Init -![Étape 6 : Cloud Init](./images/vm_instances_creation_etape6_cloudinit.png) +![Étape 6 : Cloud Init](@site/docs/public_cloud/vm_instances/images/vm_instances_creation_etape6_cloudinit.png) Cette étape est **optionnelle**. Elle permet de pré-configurer votre VM au premier démarrage via deux éditeurs : @@ -112,7 +112,7 @@ Une case à cocher permet de **supprimer le disque de configuration Cloud Init** ### Étape 7 — Disques -![Étape 7 : Disques](./images/vm_instances_creation_etape7_disques.png) +![Étape 7 : Disques](@site/docs/public_cloud/vm_instances/images/vm_instances_creation_etape7_disques.png) Configurez le ou les disques de votre VM : @@ -128,7 +128,7 @@ Deux types de stockage sont disponibles : ### Étape 8 — Adaptateurs Réseaux -![Étape 8 : Adaptateurs Réseaux](./images/vm_instances_creation_etape8_reseau.png) +![Étape 8 : Adaptateurs Réseaux](@site/docs/public_cloud/vm_instances/images/vm_instances_creation_etape8_reseau.png) Associez votre VM à un réseau depuis le menu déroulant. Deux types de réseaux sont disponibles : @@ -137,7 +137,7 @@ Associez votre VM à un réseau depuis le menu déroulant. Deux types de réseau ### Étape 9 — Sommaire -![Étape 9 : Sommaire](./images/vm_instances_creation_etape9_sommaire.png) +![Étape 9 : Sommaire](@site/docs/public_cloud/vm_instances/images/vm_instances_creation_etape9_sommaire.png) Vérifiez le récapitulatif complet avant de lancer le provisionnement : @@ -155,7 +155,7 @@ Depuis la liste, cliquez sur une VM pour déployer son panneau de détail. Quatr ### Onglet Informations -![Détail VM - Informations](./images/vm_instances_detail_informations.png) +![Détail VM - Informations](@site/docs/public_cloud/vm_instances/images/vm_instances_detail_informations.png) Consultez et modifiez les paramètres de votre VM : - Nom, UUID, zone de disponibilité @@ -167,19 +167,19 @@ Des icônes d'actions permettent de **démarrer**, **arrêter**, **redémarrer** ### Onglet Disques -![Détail VM - Disques](./images/vm_instances_detail_disques.png) +![Détail VM - Disques](@site/docs/public_cloud/vm_instances/images/vm_instances_detail_disques.png) Consultez les disques attachés et ajoutez des volumes supplémentaires via le bouton **+ Ajouter un disque**. ### Onglet Adaptateurs Réseaux -![Détail VM - Réseau](./images/vm_instances_detail_reseau.png) +![Détail VM - Réseau](@site/docs/public_cloud/vm_instances/images/vm_instances_detail_reseau.png) Consultez les interfaces réseau de la VM (nom du réseau, adresse MAC, adresse IPv4/IPv6). ### Onglet Snapshots -![Détail VM - Snapshots](./images/vm_instances_detail_snapshots.png) +![Détail VM - Snapshots](@site/docs/public_cloud/vm_instances/images/vm_instances_detail_snapshots.png) Créez et gérez des snapshots de votre VM via le bouton **+ Créer un snapshot**. diff --git a/docs/public_cloud/vm_instances/tutorials/create_vm.md b/docs/public_cloud/vm_instances/tutorials/create_vm.md index a5cc365a..43363cce 100644 --- a/docs/public_cloud/vm_instances/tutorials/create_vm.md +++ b/docs/public_cloud/vm_instances/tutorials/create_vm.md @@ -18,13 +18,13 @@ Créer une VM Linux (Debian 13) dans la zone `fr1-az01`, pré-configurée avec u Depuis la Console Cloud Temple, naviguez vers **Cloud Public > VM Instances**. -![Liste des VM Instances](../images/vm_instances_liste.png) +![Liste des VM Instances](@site/docs/public_cloud/vm_instances/images/vm_instances_liste.png) Cliquez sur **+ Nouvelle machine virtuelle** pour démarrer le wizard de création. ## Étape 2 — Sélectionner la famille d'instance -![Étape 1 : Famille d'instance](../images/vm_instances_creation_etape1_famille.png) +![Étape 1 : Famille d'instance](@site/docs/public_cloud/vm_instances/images/vm_instances_creation_etape1_famille.png) Pour cet exemple, sélectionnez **Development** — idéale pour les environnements de développement et de test avec un coût maîtrisé. @@ -32,7 +32,7 @@ Cliquez sur **Suivant**. ## Étape 3 — Choisir la zone de disponibilité -![Étape 2 : Zone de disponibilité](../images/vm_instances_creation_etape2_az.png) +![Étape 2 : Zone de disponibilité](@site/docs/public_cloud/vm_instances/images/vm_instances_creation_etape2_az.png) Sélectionnez **fr1-az01**. Cette zone est disponible dans la région FR1 (France). @@ -44,7 +44,7 @@ Cliquez sur **Suivant**. ## Étape 4 — Choisir le template -![Étape 3 : Choisir un template](../images/vm_instances_creation_etape3_template.png) +![Étape 3 : Choisir un template](@site/docs/public_cloud/vm_instances/images/vm_instances_creation_etape3_template.png) Dans l'onglet **OS**, sélectionnez **Debian** et choisissez la version **13 (Trixie)** dans le menu déroulant. @@ -52,7 +52,7 @@ Cliquez sur **Suivant**. ## Étape 5 — Configurer le gabarit -![Étape 4 : Gabarit](../images/vm_instances_creation_etape4_gabarit.png) +![Étape 4 : Gabarit](@site/docs/public_cloud/vm_instances/images/vm_instances_creation_etape4_gabarit.png) Pour ce tutoriel, sélectionnez le gabarit **dev-2** (2 vCPU / 8 Go RAM). @@ -62,7 +62,7 @@ Cliquez sur **Suivant**. ## Étape 6 — Nommer la VM et configurer la sauvegarde -![Étape 5 : Nom et politique de sauvegarde](../images/vm_instances_creation_etape5_nom_sauvegarde.png) +![Étape 5 : Nom et politique de sauvegarde](@site/docs/public_cloud/vm_instances/images/vm_instances_creation_etape5_nom_sauvegarde.png) Saisissez un nom explicite pour votre VM, par exemple : `web-server-01`. @@ -72,7 +72,7 @@ Cliquez sur **Suivant**. ## Étape 7 — Configurer Cloud Init -![Étape 6 : Cloud Init](../images/vm_instances_creation_etape6_cloudinit.png) +![Étape 6 : Cloud Init](@site/docs/public_cloud/vm_instances/images/vm_instances_creation_etape6_cloudinit.png) Cloud Init permet de pré-configurer votre VM au premier démarrage. Saisissez la configuration suivante dans l'éditeur **Cloud Config** : @@ -116,7 +116,7 @@ Cliquez sur **Suivant**. ## Étape 8 — Configurer les disques -![Étape 7 : Disques](../images/vm_instances_creation_etape7_disques.png) +![Étape 7 : Disques](@site/docs/public_cloud/vm_instances/images/vm_instances_creation_etape7_disques.png) Vous observez que **Disque 1** (le disque système `system-disk-1`) a été créé automatiquement avec la taille correspondant à l'OS Debian 13. @@ -129,7 +129,7 @@ Cliquez sur **Suivant**. ## Étape 9 — Configurer le réseau -![Étape 8 : Adaptateurs Réseaux](../images/vm_instances_creation_etape8_reseau.png) +![Étape 8 : Adaptateurs Réseaux](@site/docs/public_cloud/vm_instances/images/vm_instances_creation_etape8_reseau.png) Depuis le menu déroulant **Réseau**, sélectionnez votre réseau. Dans cet exemple, le réseau **PACKFR** (Backbone privé) est disponible. @@ -141,7 +141,7 @@ Cliquez sur **Suivant**. ## Étape 10 — Vérifier le sommaire et créer -![Étape 9 : Sommaire](../images/vm_instances_creation_etape9_sommaire.png) +![Étape 9 : Sommaire](@site/docs/public_cloud/vm_instances/images/vm_instances_creation_etape9_sommaire.png) Vérifiez attentivement le récapitulatif : diff --git a/docs/public_cloud/vm_instances/tutorials/manage_disks.md b/docs/public_cloud/vm_instances/tutorials/manage_disks.md index bca2c684..4ed26b75 100644 --- a/docs/public_cloud/vm_instances/tutorials/manage_disks.md +++ b/docs/public_cloud/vm_instances/tutorials/manage_disks.md @@ -12,7 +12,7 @@ Ce tutoriel explique comment ajouter un disque de stockage supplémentaire à un Depuis la liste des VM Instances, cliquez sur la ligne de votre VM pour ouvrir son panneau de détail. -![Détail VM - Disques](../images/vm_instances_detail_disques.png) +![Détail VM - Disques](@site/docs/public_cloud/vm_instances/images/vm_instances_detail_disques.png) Naviguez vers l'onglet **Disques** (icône disque dans le panneau latéral gauche du détail). Vous voyez la liste des disques actuellement attachés à la VM, avec pour chaque disque son nom, sa taille et son type de stockage. @@ -20,7 +20,7 @@ Naviguez vers l'onglet **Disques** (icône disque dans le panneau latéral gauch Cliquez sur le bouton **+ Ajouter un disque** en haut à droite du tableau des disques. -![Modal ajout de disque](../images/vm_instances_ajout_disque_modal.png) +![Modal ajout de disque](@site/docs/public_cloud/vm_instances/images/vm_instances_ajout_disque_modal.png) Le formulaire **Ajouter un disque** s'ouvre avec les champs suivants : diff --git a/docs/public_cloud/vm_instances/tutorials/snapshots.md b/docs/public_cloud/vm_instances/tutorials/snapshots.md index 9b95609c..cddb7577 100644 --- a/docs/public_cloud/vm_instances/tutorials/snapshots.md +++ b/docs/public_cloud/vm_instances/tutorials/snapshots.md @@ -12,7 +12,7 @@ Les snapshots permettent de capturer l'état d'une VM à un instant T. Ils sont Depuis la liste des VM Instances, cliquez sur la ligne de votre VM pour ouvrir son panneau de détail, puis naviguez vers l'onglet **Snapshots**. -![Détail VM - Snapshots](../images/vm_instances_detail_snapshots.png) +![Détail VM - Snapshots](@site/docs/public_cloud/vm_instances/images/vm_instances_detail_snapshots.png) Vous voyez la liste des snapshots existants avec pour chaque entrée : le nom, le statut et la date de création. diff --git a/docs/storage/oss/quickstart.md b/docs/storage/oss/quickstart.md index 41ddd1f5..2df4f6e2 100644 --- a/docs/storage/oss/quickstart.md +++ b/docs/storage/oss/quickstart.md @@ -1,20 +1,20 @@ --- title: Guide de démarrage --- -import S3ListBucket from './images/S3_list_bucket.png' -import S3Accounts from './images/S3_accounts.png' -import S3CreateAccount from './images/S3_create_account.png' -import S3StorageKeys from './images/S3_storage_keys.png' -import S3Keyregen from './images/S3_keyregen.png' -import S3Create from './images/S3_create.png' -import S3CreatePopup_001 from './images/S3_create_popup_001.png' -import S3AccountAssign from './images/S3_account_assign.png' -import S3AccountAccess from './images/S3_account_access.png' -import S3Files from './images/S3_files.png' -import S3Params from './images/S3_params.png' -import S3Lifecycle from './images/S3_lifecycle.png' -import S3CreatePopup_002 from './images/S3_create_popup_002.png' -import S3Delete from './images/S3_delete.png' +import S3ListBucket from '@site/docs/storage/oss/images/S3_list_bucket.png' +import S3Accounts from '@site/docs/storage/oss/images/S3_accounts.png' +import S3CreateAccount from '@site/docs/storage/oss/images/S3_create_account.png' +import S3StorageKeys from '@site/docs/storage/oss/images/S3_storage_keys.png' +import S3Keyregen from '@site/docs/storage/oss/images/S3_keyregen.png' +import S3Create from '@site/docs/storage/oss/images/S3_create.png' +import S3CreatePopup_001 from '@site/docs/storage/oss/images/S3_create_popup_001.png' +import S3AccountAssign from '@site/docs/storage/oss/images/S3_account_assign.png' +import S3AccountAccess from '@site/docs/storage/oss/images/S3_account_access.png' +import S3Files from '@site/docs/storage/oss/images/S3_files.png' +import S3Params from '@site/docs/storage/oss/images/S3_params.png' +import S3Lifecycle from '@site/docs/storage/oss/images/S3_lifecycle.png' +import S3CreatePopup_002 from '@site/docs/storage/oss/images/S3_create_popup_002.png' +import S3Delete from '@site/docs/storage/oss/images/S3_delete.png' import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; diff --git a/docs/storage/oss/tutorials/bucket-access.md b/docs/storage/oss/tutorials/bucket-access.md index 6bcba8da..9d9b873f 100644 --- a/docs/storage/oss/tutorials/bucket-access.md +++ b/docs/storage/oss/tutorials/bucket-access.md @@ -1,9 +1,9 @@ --- title: Gestion des accès aux buckets S3 depuis la Console Cloud Temple --- -import S3CustomAccess from '../images/S3_access_custom.png' -import S3PrivateAccess from '../images/S3_access_private.png' -import S3PublicAccess from '../images/S3_access_public.png' +import S3CustomAccess from '@site/docs/storage/oss/images/S3_access_custom.png' +import S3PrivateAccess from '@site/docs/storage/oss/images/S3_access_private.png' +import S3PublicAccess from '@site/docs/storage/oss/images/S3_access_public.png' L'interface de configuration des buckets propose trois modes de gestion des accès selon le type de restriction IP souhaité : diff --git a/docs/storage/oss/tutorials/cloudberry-explorer.md b/docs/storage/oss/tutorials/cloudberry-explorer.md index f1e0acb7..a8ff5ad5 100644 --- a/docs/storage/oss/tutorials/cloudberry-explorer.md +++ b/docs/storage/oss/tutorials/cloudberry-explorer.md @@ -1,9 +1,9 @@ --- title: Utiliser Cloud Berry Explorer --- -import S3Cloudberry_001 from '../images/S3_cloudberry_001.png' -import S3Cloudberry_002 from '../images/S3_cloudberry_002.png' -import S3Cloudberry_003 from '../images/S3_cloudberry_003.png' +import S3Cloudberry_001 from '@site/docs/storage/oss/images/S3_cloudberry_001.png' +import S3Cloudberry_002 from '@site/docs/storage/oss/images/S3_cloudberry_002.png' +import S3Cloudberry_003 from '@site/docs/storage/oss/images/S3_cloudberry_003.png' Vous pouvez utiliser le client graphique [Cloud Berry Explorer](https://www.msp360.com/explorer/) pour gérer vos données. diff --git a/docs/storage/oss/tutorials/winscp.md b/docs/storage/oss/tutorials/winscp.md index f4c54cb4..ea4a27b5 100644 --- a/docs/storage/oss/tutorials/winscp.md +++ b/docs/storage/oss/tutorials/winscp.md @@ -1,8 +1,8 @@ --- title: Utiliser WinSCP --- -import S3Winscp_001 from '../images/S3_winscp_001.png' -import S3Winscp_002 from '../images/S3_winscp_002.png' +import S3Winscp_001 from '@site/docs/storage/oss/images/S3_winscp_001.png' +import S3Winscp_002 from '@site/docs/storage/oss/images/S3_winscp_002.png' Vous pouvez utiliser [Winscp (version 6.3 ou supérieure)](https://winscp.net/eng/download.php) pour vous connecter à votre stockage objet. diff --git a/docs/terraform/terraform.md b/docs/terraform/terraform.md index d7b177f2..c1d41840 100644 --- a/docs/terraform/terraform.md +++ b/docs/terraform/terraform.md @@ -139,11 +139,11 @@ Pour être notifié automatiquement des nouvelles releases du provider Terraform 2. Cliquez sur le bouton **Watch** en haut à droite du repository -![Bouton Watch GitHub](./images/provider_terraform_notify.png) +![Bouton Watch GitHub](@site/docs/terraform/images/provider_terraform_notify.png) 1. Sélectionnez **Custom** puis cochez **Releases** -![Configuration des notifications](./images/provider_terraform_subscribe.png) +![Configuration des notifications](@site/docs/terraform/images/provider_terraform_subscribe.png) Vous recevrez désormais une notification par email à chaque nouvelle release du provider. diff --git a/i18n/de/docusaurus-plugin-content-docs/current/additional_content/concepts_az.md b/i18n/de/docusaurus-plugin-content-docs/current/additional_content/concepts_az.md index c8604fdd..61cf6194 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/additional_content/concepts_az.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/additional_content/concepts_az.md @@ -1,18 +1,18 @@ --- -title: Concepts - Verfügbarkeitszonen +title: Konzepte - Verfügbarkeitszonen --- -## Availability Zones +## Verfügbarkeitszonen -Each physical site within a region has one or more dedicated rooms for our infrastructure. These rooms are exclusively used by Cloud Temple. +Jeder physische Standort in einer Region verfügt über einen oder mehrere eigene Serverräume für unsere Infrastruktur. Diese Räume stehen ausschließlich Cloud Temple zur Verfügung. -__Each physical room corresponds to an availability zone (AZ / Availability Zone)__ and is completely independent in terms of power, cooling, computing, storage, and networking. -Therefore, selecting an availability zone means choosing both a physical site and a region. +__Jeder physische Raum entspricht einer Verfügbarkeitszone (AZ / Availability Zone)__ und ist in Bezug auf Stromversorgung, Kühlung, Rechenleistung, Speicher und Netzwerk vollständig autark. +Die Wahl einer Verfügbarkeitszone bedeutet somit die Wahl eines physischen Standorts und einer Region. -The Console automatically suggests availability zones located on distinct physical sites, in order to distribute your infrastructure across the maximum number of physical sites. +Die Konsole schlägt Ihnen automatisch Verfügbarkeitszonen auf verschiedenen physischen Standorten vor, um Ihre Infrastruktur auf die größtmögliche Anzahl physischer Standorte zu verteilen. -*__Note: If you require a specific configuration for a particular use case (multiple AZs on the same physical site), please submit a support request.__* +*__Hinweis: Wenn Sie eine spezifische Konfiguration für einen bestimmten Anwendungsfall benötigen (plusieurs AZ sur le même site physique), ist eine Supportanfrage erforderlich.__* -| Order Reference | Unit | SKU | -|--------------------------------------------------------|----------------|---------------------------| -| TENANT - *(REGION)* - Activation of an availability zone | 1 AZ per tenant | csp:*(REGION)*:iaas:az:v1 | +| Bestellreferenz | Einheit | SKU | +|--------------------------------------------------------------|-----------------|---------------------------| +| TENANT - *(REGION)* - Aktivierung einer Verfügbarkeitszone | 1 AZ pro Tenant | csp:*(REGION)*:iaas:az:v1 | \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/additional_content/concepts_regional.md b/i18n/de/docusaurus-plugin-content-docs/current/additional_content/concepts_regional.md index 8ead1166..d962a03f 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/additional_content/concepts_regional.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/additional_content/concepts_regional.md @@ -7,11 +7,11 @@ import iaasAz001 from '@site/docs/additional_content/images/iaas_az_001.png'; ## Regionen Die Cloud Temple-Infrastruktur ist darauf ausgelegt, die Betriebskontinuität Ihrer Anwendungen und Plattformen zu gewährleisten. -Innerhalb einer Region profitieren Sie von einer Netzwerk-Continuity der Ebene 2. +Innerhalb einer Region profitieren Sie von einer Netzwerkverfügbarkeit der Stufe 2. -Somit ist es möglich, eine technische Architektur in der Region Paris zu definieren, wobei 3 physische Standorte verwendet werden, um eine hochverfügbare Plattform mit Quorum zu implementieren. +Daher ist es möglich, eine technische Architektur in der Region Paris zu definieren, die 3 physische Standorte nutzt, um eine hochverfügbare Plattform mit Quorum einzurichten. -Im Januar 2024 verfügt die IaaS-Plattform Cloud Temple über folgende Regionen: +Im Januar 2024 bietet die IaaS-Plattform Cloud Temple die folgenden Regionen an: - Region FR1 (Paris) @@ -25,8 +25,8 @@ Die Region FR1 basiert auf drei physischen Standorten in der Region Paris: -Jeder Standort liegt mehr als 30 km in Luftlinie von den anderen entfernt. Im Durchschnitt beträgt die optische Distanz zwischen den Standorten 80 km. Die garantierte Latenz zwischen den Standorten beträgt weniger als 4 ms. +Jeder Standort befindet sich mehr als 30 km Luftlinie von den anderen entfernt. Im Durchschnitt beträgt die optische Distanz zwischen jedem Standort 80 km. Die garantierte Latenz zwischen den Standorten liegt unter 4 ms. ### Regionale Erweiterungen -Die Eröffnung neuer Regionen ist hauptsächlich mit Marktchancen verbunden. Im Januar 2024 werden die Eröffnung einer Region in Süd-Europa und einer Region in Nord-Europa geprüft. +Die Eröffnung neuer Regionen ist hauptsächlich mit Marktchancen verbunden. Im Januar 2024 werden die Eröffnung einer Region in Südeuropa und eine Region in Nordeuropa geprüft. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/bastion/bastion.md b/i18n/de/docusaurus-plugin-content-docs/current/bastion/bastion.md index 926804de..4b25853c 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/bastion/bastion.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/bastion/bastion.md @@ -2,26 +2,28 @@ title: Übersicht --- -Der **Bastion Cloud Temple** ist ein sicheres und verwaltetes Dienst, der die Administration Ihrer Infrastrukturen über RDP- oder SSH-Verbindungen vereinfacht. +# Bastion -Er ist über die Cloud Temple-Konsole zugänglich und stellt eine zentrale Verwaltung gewährleistet, während er gleichzeitig Ihre Geräte vor einer Internetexposition schützt. +Der **Bastion Cloud Temple** ist ein sicherer und verwalteter Dienst, der die Verwaltung Ihrer Infrastrukturen über RDP- oder SSH-Verbindungen vereinfacht. -Mit seiner Sicherheitsorientierung und fortschrittlichen Funktionen wie Infrastructure as Code antwortet der Bastion den Anforderungen von Cloud-, Hybrid- und On-Premises-Umgebungen. +Über die Cloud Temple-Konsole zugänglich, gewährleistet er eine zentrale Verwaltung, während er Ihre Geräte vor direktem Internetzugriff schützt. + +Mit seinem sicherheitsorientierten Ansatz und erweiterten Funktionen wie Infrastructure as Code erfüllt der Bastion die Anforderungen von Cloud-, Hybrid- und On-Premises-Umgebungen.

Konzepte

-

Entdecken Sie die Grundlagen und wichtigen Prinzipien, um unsere Infrastruktur zu verstehen und zu beherrschen.

- Konzepte entdecken → +

Erkunden Sie die Grundlagen und wesentlichen Prinzipien, um unsere Infrastruktur zu verstehen und zu beherrschen.

+ Konzepte erkunden →

Schnellstart

-

Starten Sie schnell mit unseren Ressourcen, indem Sie klare und einfache Anleitungen befolgen.

+

Starten Sie schnell mit unseren Ressourcen, indem Sie klaren und einfachen Anweisungen folgen.

Schnellstart starten →

Tutorials

-

Lernen Sie Schritt für Schritt, wie Sie unsere Dienste konfigurieren und nutzen können, mit detaillierten Anleitungen.

+

Lernen Sie Schritt für Schritt die Konfiguration und Nutzung unserer Dienste mit detaillierten Anleitungen.

Tutorials entdecken →
-
+
\ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/bastion/concepts.md b/i18n/de/docusaurus-plugin-content-docs/current/bastion/concepts.md index bc01fc77..36570505 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/bastion/concepts.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/bastion/concepts.md @@ -1,38 +1,40 @@ --- title: Konzepte --- -import bastion from '@site/docs/bastion/images/bastion.svg' +import bastion from '@site/docs/bastion/images/bastion.png' -## What is the Cloud Temple Bastion? +## Was ist das Bastion Cloud Temple? -The Cloud Temple Bastion is a managed service that provides you with secure RDP or SSH connectivity from the Cloud Temple console to your physical and virtual infrastructures, whether they are located in the trusted cloud, a public cloud, or on-premise. The Bastion solution enables you to manage your devices without exposing them to the internet. +Das Bastion Cloud Temple ist ein verwalteter Dienst, der Ihnen eine sichere RDP- oder SSH-Verbindung von der Cloud Temple-Konsole aus +ermöglicht, um auf Ihre physischen und virtuellen Infrastrukturen zuzugreifen, unabhängig davon, ob sie sich im vertrauenswürdigen Cloud, in einer +öffentlichen Cloud oder On-Premise befinden. Die Bastion-Lösung ermöglicht die Verwaltung Ihrer Geräte, ohne sie dem Internet auszusetzen. -## Vorteile +## Die Vorteile -| Vorteil | Beschreibung | +| Vorteil | Beschreibung | |------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| Zentrale Verwaltung | Der Cloud Bastion Temple ist direkt über die Console zugänglich. | -| Sicherheit | Geräte, die über den Bastion verwaltet werden, sind nicht dem Internet ausgesetzt, wodurch sie insbesondere vor Port-Scans durch schadhaften Nutzer geschützt sind. | -| Infrastructure as Code | APIs ermöglichen die vollständige Verwaltung des Cloud Bastion Temple „as Code“ (Erstellung von Sitzungen, Verbindung, Änderung und Löschung von Sitzungen). | +| Zentrale Verwaltung | Das Bastion Cloud Temple ist direkt über die Konsole zugänglich. | +| Sicherheit | Die über das Bastion verwalteten Geräte sind nicht direkt dem Internet ausgesetzt, was sie insbesondere vor der Portanalyse durch böswillige Benutzer schützt. | +| Infrastructure as Code | Über APIs kann das Bastion Cloud Temple vollständig "as Code" verwaltet werden (Erstellung, Verbindungsaufbau, Änderung und Beendigung von Sitzungen). | -## References (SKU) +## Referenzen (SKU) -| Reference | Unit | SKU | -|------------------------------------|:--------:|:-----------------------:| -| ADMINISTRATION - Bastion SSH & RDP | 1 Session | cmp:bastion:session:std | +| Referenz | Einheit | SKU | +|------------------------------------|:---------:|:-----------------------:| +| VERWALTUNG - Bastion SSH & RDP | 1 Sitzung | cmp:bastion:session:std | -### Bastion Appliance +### Die Bastion-Appliance -The Bastion Appliance is a virtual machine deployed close to your equipment. This appliance enables a secure, direct flow from the Console platform to the equipment being managed, which resides in the same virtual network. +Die Bastion-Appliance ist eine virtuelle Maschine, die in der Nähe Ihrer Geräte bereitgestellt wird. Diese Appliance ermöglicht einen sicheren und direkten Datenfluss von der Console-Plattform zu den zu verwaltenden Geräten, die sich im selben virtuellen Netzwerk befinden. -The traffic is encrypted and encapsulated within a VPN tunnel. The solution does not require opening a connection from the internet to your infrastructure. It is sufficient for the appliance to have access to the public IP address of the Bastion Console module on port 443. +Der Datenfluss wird verschlüsselt und in einem VPN-Tunnel gekapselt. Die Lösung erfordert keine Freigabe von Datenflüssen vom Internet zu Ihrer Infrastruktur. Es reicht aus, wenn die Appliance über Port 443 auf die öffentliche IP-Adresse des Console-Bastion-Moduls zugreifen kann. -A single appliance can be used to establish a quick connection to a target device. For each connection, you must specify the desired protocol, the target machine's IP address, and your credentials. To avoid entering these details repeatedly, you can create sessions associated with equipment that you regularly manage. +Eine Appliance kann verwendet werden, um eine schnelle Verbindung zu einem Gerät herzustellen. Bei jeder Verbindung müssen das gewünschte Protokoll, die IP-Adresse des Geräts und Ihre Anmeldeinformationen angegeben werden. Um diese Angaben bei jeder Verbindung nicht erneut eingeben zu müssen, können Sitzungen erstellt werden, die mit regelmäßig zu verwaltenden Geräten verknüpft sind. -### Sessions +### Sitzungen -A session is a connection configuration to a device via a Bastion. It defines the device to be managed and the Appliance used to route the traffic, enabling faster connections to that device. +Eine Sitzung ist eine Konfiguration für die Verbindung zu einem Gerät über einen Bastion. Sie besteht darin, ein zu verwaltendes Gerät und die zu verwendende Appliance zur Weiterleitung des Datenverkehrs zu definieren, wodurch sich eine schnellere Verbindung zu diesem Gerät ermöglicht. -This solution is suitable for regular connections to a device that needs to be managed. Essential information is stored, requiring only your credentials when connecting. +Diese Lösung eignet sich für regelmäßige Verbindungen zu einem zu verwaltenden Gerät. Die wesentlichen Informationen werden gespeichert, bei der Verbindung werden lediglich Ihre Zugangsdaten benötigt. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/bastion/quickstart.md b/i18n/de/docusaurus-plugin-content-docs/current/bastion/quickstart.md index 538335a8..57a3009c 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/bastion/quickstart.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/bastion/quickstart.md @@ -8,77 +8,77 @@ import creerSession3 from '@site/docs/bastion/images/creer_session3.png' import ouvrirSession from '@site/docs/bastion/images/ouvrir_session.png' import ouvrirSession2 from '@site/docs/bastion/images/ouvrir_session2.png' -Diese Schnellstartanleitung zeigt Ihnen, wie Sie die Erstellung einer Appliance anfordern und wie Sie eine neue Session erstellen und daran teilnehmen. +Diese Schnellstartanleitung zeigt Ihnen, wie Sie die Erstellung einer Appliance anfordern und wie Sie eine neue Sitzung erstellen und sich damit verbinden. ## Voraussetzungen -1. Ein Abonnement für das Cloud Temple-Angebot (Bastion Appliance-Abonnement) abgeschlossen haben. -2. Die zu verwaltenden Geräte müssen vom Netzwerk aus erreichbar sein, in dem die Bastion Appliance bereitgestellt ist. -3. Die entsprechenden Berechtigungen für das Bastion-Modul besitzen. -4. Bei einer On-Premise-Bereitstellung der Appliance müssen die entsprechenden Netzwerkflüsse freigegeben sein. +1. Das Cloud Temple-Produkt (Appliance Bastion-Abonnement) muss abonniert sein. +2. Die zu verwaltenden Geräte müssen aus dem Netzwerk erreichbar sein, in dem die Appliance Bastion bereitgestellt ist. +3. Es müssen Berechtigungen für das Bastion-Modul vorliegen. +4. Bei einer On-Premise-Bereitstellung der Appliance müssen die entsprechenden Netzwerkflüsse freigeschaltet sein. -## Required flows for the proper operation of the Bastion product +## Erforderliche Datenflüsse für den Betrieb des Bastion-Produkts -Several flows are necessary for the proper operation of the Bastion Appliance. +Mehrere Datenflüsse sind für den ordnungsgemäßen Betrieb der Bastion-Appliance erforderlich. -### Bastion Gateway +### Das Bastion-Gateway -| Source | Destination | Protocol | +| Quelle | Ziel | Protokoll | |--------------------------|---------------------------------------------|-----------| -| Client bastion appliance | 91.223.207.71 (botg.shiva.cloud-temple.com) | UDP/4242 | +| Client-Bastion-Appliance | 91.223.207.71 (botg.shiva.cloud-temple.com) | UDP/4242 | -### RDP Administration Traffic +### RDP-Verwaltungsfluss -| Source | Destination | Protocol | +| Quelle | Ziel | Protokoll | |--------------------------|-----------------------------|-----------| -| Client bastion appliance | Instances to administer | TCP/3389 | +| Client-Bastion-Appliance | Die zu verwaltenden Instanzen | TCP/3389 | -### SSH Administration Flow +### SSH-Verwaltungsfluss -| Source | Destination | Protocol | -|--------------------------|-----------------------------|-----------| -| Client bastion appliance | Instances to administer | TCP/22 | +| Quelle | Ziel | Protokoll | +|--------------------------|------------------------------|-----------| +| Client-Bastion-Appliance | Die zu verwaltenden Instanzen | TCP/22 | -## Requesting the Creation of an Appliance +## Appliance-Erstellung anfordern -Before you can deploy an Appliance, you must submit a subscription request for an Appliance via a support ticket. -The support portal is accessible from the Console using the buoy icon in the top-right corner of the window. +Bevor eine Appliance bereitgestellt werden kann, muss ein Abonnement für eine Appliance über eine Anfrage an den Support beantragt werden. +Der Support ist in der Konsole über das Rettungsring-Symbol in der oberen rechten Leiste des Fensters erreichbar. -## Gerät speichern +## Gerät registrieren -Um ein Gerät, das verwaltet werden soll, regelmäßig zu nutzen, ist es sinnvoller, eine Session zu erstellen, die Sie bei jeder Anmeldung nur mit Ihrem Benutzernamen und Ihrem Passwort authentifiziert. +Um regelmäßig auf ein zu verwaltendes Gerät zugreifen zu können, empfiehlt es sich, eine Sitzung zu erstellen, bei der bei jeder Anmeldung nur Benutzername und Passwort abgefragt werden. -Gehen Sie hierzu im Menü „Bastion“ zum Tab „Geräte“ und klicken Sie auf die Schaltfläche „Neues Gerät“. +Navigieren Sie dazu zum Reiter « Geräte » im Menü « Bastion » und klicken Sie auf die Schaltfläche « Neues Gerät ». -Geben Sie nun die erforderlichen Informationen für die Erstellung Ihres Geräts ein: +Geben Sie anschließend die für die Erstellung Ihres Geräts erforderlichen Informationen ein: -- Gerätename; -- Beschreibung; -- zugeordnete Appliance; -- Protokolltyp (SSH oder RDP); -- IP-Adresse des Hosts; -- Tastaturkonfiguration. + - Gerätename ; + - Beschreibung ; + - Zugehörige Appliance ; + - Protokolltyp (SSH oder RDP) ; + - IP-Adresse des Hosts ; + - Tastaturlayout. -Eine Benachrichtigung sollte oben rechts auf der Seite erscheinen, die die Erstellung des Geräts anzeigt. Die Session wird anschließend der Liste Ihrer Geräte hinzugefügt. +Eine Benachrichtigung über die erfolgreiche Geräteerstellung sollte oben rechts auf der Seite erscheinen. Die Sitzung wird anschließend zur Liste Ihrer Geräte hinzugefügt. -Sie können ein neues Gerät auch über den Tab „Appliances“ erstellen, indem Sie auf die Aktionsschaltfläche der Appliance klicken, der Sie ein Gerät zuordnen möchten. +Um ein neues Gerät zu erstellen, können Sie alternativ den Reiter « Appliances » aufrufen und auf die Aktionsleiste der Appliance klicken, der Sie das Gerät zuordnen möchten. -## Connect to a device +## Verbindung zu einem Gerät herstellen -Go to the "Devices" tab in the "Bastion" tab. Click on the action bar of the device you want to open, and then click the "Open" button. +Navigieren Sie zur Registerkarte „Geräte“ in der Registerkarte „Bastion“. Klicken Sie auf die Aktionsleiste des Geräts, das Sie öffnen möchten, und klicken Sie auf die Schaltfläche „Öffnen“. -For each connection to a device, you only need to provide your authentication credentials. +Bei jeder Verbindung zu einem Gerät müssen Sie lediglich Ihre Anmeldeinformationen eingeben. -After entering your credentials, a notification confirming the start of the connection to your device appears, and the console to your virtual machine opens. +Nachdem Sie Ihre Zugangsdaten eingegeben haben, erscheint eine Benachrichtigung, die den Beginn der Verbindung zu Ihrem Gerät bestätigt, und die Konsole zu Ihrer virtuellen Maschine wird geöffnet. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/bastion/tutorials.md b/i18n/de/docusaurus-plugin-content-docs/current/bastion/tutorials.md index 8eac21e9..6f278a09 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/bastion/tutorials.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/bastion/tutorials.md @@ -14,101 +14,103 @@ import modifierSession from '@site/docs/bastion/images/modifier_session.png' import modifierSession2 from '@site/docs/bastion/images/modifier_session2.png' import supprimerSession from '@site/docs/bastion/images/supprimer_session.png' -These tutorials help you deploy and manage a Cloud Temple Bastion from the Console. +Diese Tutorials helfen Ihnen, einen Bastion Cloud Temple über die Konsole bereitzustellen und zu verwalten. ## Voraussetzungen -1. Ein Abonnement für das Cloud Temple-Angebot (Bastion Appliance-Abonnement) abgeschlossen haben. -2. Die zu verwaltenden Geräte müssen vom Netzwerk aus erreichbar sein, in dem die Bastion Appliance bereitgestellt ist. -3. Die entsprechenden Berechtigungen für das Bastion-Modul besitzen. +1. Das Cloud Temple-Produkt (Appliance Bastion-Abonnement) muss abonniert sein. +2. Die zu verwaltenden Geräte müssen vom Netzwerk aus erreichbar sein, in dem die Appliance Bastion bereitgestellt ist. +3. Es müssen die Berechtigungen für das Bastion-Modul vorhanden sein. 4. Bei einer On-Premise-Bereitstellung der Appliance müssen die entsprechenden Netzwerkflüsse freigegeben sein. ## Interface -Nach der Anmeldung am Web-Portal Console gehen Sie zum Menüpunkt „Bastion“ im linken Menü. +Nach der Anmeldung im Web-Konsolenportal wechseln Sie zum Register „Bastion“ im linken Menü. -Der Reiter „Geräte“ ermöglicht Ihnen die Ansicht Ihrer Geräte. Ein Gerät entspricht einer Verbindungskonfiguration über eine Bastion-Appliance. Für jedes Gerät werden dessen Name, Tags, Beschreibung, die zugeordnete Appliance, der Verbindungstyp (SSH oder RDP), die IP-Adresse des Hosts sowie die Tastaturbelegung angezeigt. +Über das Register „Geräte“ können Sie die Liste Ihrer Geräte einsehen. Ein Gerät entspricht einer Konfiguration für die +Verbindung über eine Bastion-Appliance. Für jedes Gerät werden der Name, die Tags, die +Beschreibung, die zugehörige Appliance, der Verbindungstyp (SSH oder RDP), die Host-IP und schließlich das Tastaturlayout angezeigt. -Sie können die Liste Ihrer Geräte nach den zugeordneten Tags filtern, und ein Suchfeld ermöglicht die Suche nach einer Session anhand ihres Namens. +Sie können die Liste Ihrer Geräte nach zugewiesenen Tags filtern, und über ein Suchfeld können Sie eine Sitzung nach deren Namen suchen. -Der Reiter „Appliances“ zeigt Ihnen die Liste Ihrer Bastion-Appliances. Für jede Appliance werden deren Name und Beschreibung angegeben. +Über das Register „Appliances“ erhalten Sie die Liste Ihrer Bastion-Appliances. Für jede Appliance werden der Name und die Beschreibung angegeben. -Ein Suchfeld steht zur Verfügung, um eine Appliance anhand ihres Namens zu suchen. +Ein Suchfeld steht zur Verfügung, um eine Appliance nach deren Namen zu suchen. -## Deploy an Appliance +## Eine Appliance bereitstellen -Before you can deploy an appliance, you must submit a subscription request for an appliance via a support ticket. +Bevor eine Appliance bereitgestellt werden kann, muss ein Abonnement für eine Appliance über eine Anfrage an den Support beantragt werden. -## Open a connection to a device +## Eine Verbindung zu einem Gerät öffnen -In the **Appliances** tab, click the action bar of the appliance you want to open. Then click the **Open** button. +Im Register „Appliances“ klicken Sie auf die Aktionsleiste der Appliance, die Sie öffnen möchten. Klicken Sie anschließend auf die Schaltfläche „Öffnen“. -Next, enter the required connection information: +Geben Sie anschließend die für die Verbindung erforderlichen Informationen ein: -- Protocol selection (SSH or RDP); -- IP address of the host to manage; -- Credentials; -- Keyboard configuration. + - Auswahl des Protokolls (SSH oder RDP); + - IP-Adresse des zu verwaltenden Hosts; + - Anmeldeinformationen; + - Tastaturlayout. -Click **Connect** to open the appliance. The virtual machine's console will then open. +Klicken Sie anschließend auf „Verbinden“, um die Appliance zu öffnen. Die Konsole der zu verwaltenden virtuellen Maschine öffnet sich daraufhin. ## Gerät speichern -Um ein Gerät, das verwaltet werden soll, regelmäßig zugänglich zu machen, ist es sinnvoller, eine Gerätekonfiguration zu erstellen, die Sie bei jeder Verbindung nur mit Ihrem Benutzernamen und Passwort authentifiziert. +Um regelmäßig auf ein zu verwaltendes Gerät zugreifen zu können, ist es empfehlenswert, eine Gerätekonfiguration anzulegen, die bei jeder Verbindung nur Ihren Benutzernamen und Ihr Passwort abfragt. -Gehen Sie hierzu im Menü „Bastion“ zum Tab „Geräte“ und klicken Sie auf die Schaltfläche „Neues Gerät“. +Für diesen Zweck navigieren Sie zum Reiter « Geräte » im Menü « Bastion » und klicken Sie auf die Schaltfläche « Neues Gerät ». -Geben Sie nun die erforderlichen Informationen für die Erstellung Ihres Geräts ein: +Geben Sie anschließend die für die Erstellung Ihres Geräts erforderlichen Informationen ein: -- Gerätename; -- Beschreibung; -- zugeordnete Appliance; -- Protokolltyp (SSH oder RDP); -- IP-Adresse des Hosts; -- Tastaturbelegung. + - Gerätename ; + - Beschreibung ; + - Zugehörige Appliance ; + - Protokolltyp (SSH oder RDP) ; + - IP-Adresse des Hosts ; + - Tastatursprache. -Eine Benachrichtigung sollte oben rechts auf der Seite erscheinen, die die Erstellung Ihrer Gerätekonfiguration bestätigt. Die Konfiguration wird anschließend Ihrer Liste von Geräten hinzugefügt. +Eine Benachrichtigung über die erfolgreiche Erstellung Ihrer Gerätekonfiguration sollte oben rechts auf der Seite erscheinen. Die Konfiguration wird anschließend zur Liste Ihrer Geräte hinzugefügt. -Sie können eine neue Verbindung auch über den Tab „Appliances“ herstellen, indem Sie auf die Aktionsschaltfläche der Appliance klicken, der Sie eine Gerätekonfiguration zuordnen möchten. +Um eine neue Verbindung zu erstellen, können Sie alternativ den Reiter « Appliances » aufrufen und auf die Aktionsleiste der Appliance klicken, der Sie eine Gerätekonfiguration zuordnen möchten. -## Connect to a device +## Verbindung zu einem Gerät herstellen -Go to the "Devices" tab in the "Bastion" tab. Click on the action bar of the device you want to open, and then click the "Open" button. +Navigieren Sie zur Registerkarte „Geräte“ in der Registerkarte „Bastion“. Klicken Sie auf die Aktionsleiste des Geräts, das Sie öffnen möchten, und klicken Sie auf die Schaltfläche „Öffnen“. -For each connection to a device, you only need to provide your authentication credentials. +Bei jeder Verbindung zum Gerät müssen Sie lediglich Ihre Anmeldeinformationen eingeben. -After entering your credentials, a notification confirming the start of the session appears, and the console to your virtual machine opens. +Nach der Eingabe Ihrer Zugangsdaten erscheint eine Benachrichtigung, die den Beginn der Sitzung bestätigt, und die Konsole zu Ihrer virtuellen Maschine wird geöffnet. -## Equipment configuration editieren +## Eine Gerätekonfiguration bearbeiten -Gehen Sie zum Tab „Geräte“ im Bereich „Bastion“, klicken Sie auf die Aktionsschaltfläche des Geräts, das Sie bearbeiten möchten, und drücken Sie die Schaltfläche „Bearbeiten“. +Navigieren Sie zum Tab „Geräte“ im Bereich „Bastion“, klicken Sie auf die Aktionsleiste des Geräts, das Sie bearbeiten möchten, und klicken Sie auf die Schaltfläche „Bearbeiten“. -Anschließend können Sie den Gerätenamen, die Beschreibung, die zugeordnete Appliance, das Protokoll (SSH oder RDP), die IP-Adresse des Hosts oder die Tastaturbelegung ändern. +Anschließend können Sie den Gerätenamen, die Beschreibung, die zugehörige Appliance, das Protokoll (SSH oder RDP), die Host-IP-Adresse oder die Tastatursprache ändern. -## Delete a device configuration +## Eine Gerätekonfiguration löschen -Go to the "Devices" tab in the "Bastion" section, click the action bar of the device you want to delete, and then click the "Delete" button. +Navigieren Sie zum Tab „Geräte“ im Abschnitt „Bastion“, klicken Sie auf die Aktionsleiste des Geräts, das Sie löschen möchten, und klicken Sie auf die Schaltfläche „Löschen“. - + \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/changelog.md b/i18n/de/docusaurus-plugin-content-docs/current/changelog.md index a08adf2a..fad7c6ca 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/changelog.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/changelog.md @@ -1,165 +1,179 @@ --- -title: Änderungsprotokoll +title: Änderungsverfolgung sidebar_position: 2 --- -# Änderungsprotokoll +# Änderungsverfolgung -### 17. April 2026: VM Instances — Illustrierte Dokumentation und Tutorials +### 4 Mai 2026 : Sicherheitsupdates — Docker-Image (CVE Alpine) -- **VM Instances — Dokumentationsaktualisierung**: Vollständige Überarbeitung und Illustration der VM Instances-Dokumentation. Der Erste-Schritte-Leitfaden (`quickstart.md`) deckt nun die gesamte illustrierte Benutzerreise ab: Zugriff auf den Abschnitt, VM-Liste, 9-schrittiger Erstellungsassistent (Instanzfamilie, Verfügbarkeitszone, OS-Template, Flavor, Name/Backup, Cloud Init, Festplatten, Netzwerk, Zusammenfassung) und Verwaltung der 4 Tabs (Informationen, Festplatten, Netzwerk, Snapshots). -- **VM Instances — Tutorials**: Erstellung von 3 dedizierten Tutorials in einem `tutorials/`-Ordner: (1) **Erste VM erstellen** (vollständig illustrierter Assistent + Cloud Init + zusätzliche Festplatte), (2) **Festplatten verwalten** (Festplatte über die Console hinzufügen + Linux-Partitionierung), (3) **Snapshots aufnehmen und verwalten** (Erstellen, Wiederherstellen, Löschen + Best Practices und Snapshot/Backup-Vergleich). Die Seitennavigation wird mit 3 einzelnen Einträgen in der Kategorie Tutorials aktualisiert. +- **Sicherheit (Docker)** : Aufnahme von `apk upgrade --no-cache` in die finale Stage `nginx:stable-alpine` der Produktions-Dockerfiles (`Dockerfile` und `Dockerfile.prebuilt`). Dieses Update behebt sämtliche von Harbor/Trivy auf dem Image `3.24.3` erkannten CVEs der Schweregrade Critical und High, die mit den eingefrorenen Alpine-Paketen zusammenhängen: `libcrypto3`, `libssl3`, `libxml2`, `libxslt`, `libexpat`, `libpng`, `zlib`, `c-ares`, `musl`, `xz-libs`, `busybox`, `curl`. Der nächste Build erstellt ein Image, das alle diese Pakete in ihrer jeweils neuesten, gepatchten Version enthält. -### 17. April 2026: Übersetzung von Private Backbone und terminologische Harmonisierung +### 30. April 2026 : Präzisierungen zur Speicherperformance -- **Private Backbone**: Vollständige Übersetzung der Private-Backbone-Dokumentation ins Englische, Deutsche, Spanische und Italienische. -- **Terminologie**: Harmonisierung des Vokabulars in der französischen Dokumentation — systematische Ersetzung von „offre" und „service" durch „produit" zur Übereinstimmung mit der kommerziellen Terminologie von Cloud Temple. +- **Speicher (IaaS VMware, OpenSource, Bare Metal)** : Hinzufügen der absoluten Obergrenzen für IOPS und maximale Bandbreite für alle Speicherklassen. Diese Informationen ermöglichen eine bessere Dimensionierung der Umgebungen entsprechend den Leistungsanforderungen. -### 16. April 2026: Überarbeitung der Navigation, Vertragsdokumente und Aktualisierungen +### 24. April 2026: Erweiterung der IaaS OpenSource-Sicherungsdokumentation -- **Navigation — Compute**: VM Instances (Preview), IaaS OpenSource und IaaS VMware werden unter einer einzigen **Compute**-Kategorie in der Navigation zusammengefasst (PR #277). -- **Navigation — Network**: VPC (Preview) und Private Backbone werden unter einer einzigen **Network**-Kategorie in der Navigation zusammengefasst. -- **Vertragsdokumente**: Vollständige Neustrukturierung der Vertragsdokumentation — Erstellung einer `/contracts` Hub-Seite (allgemeine Geschäftsbedingungen, besondere Bedingungen, SecNumCloud-Servicevereinbarungen, SLA VM Instances) und einer `/shared-responsibility` Hub-Seite (RACI-Matrizen pro Dienst: IaaS, S3, PaaS, Kubernetes, LLMaaS, Netzwerk). Das vertragliche Seitenmenü wird durch eine dedizierte **Contractual**-Spalte im Footer ersetzt. Übersetzungen in EN/DE/ES/IT verfügbar. -- **VM Instances**: Aktualisierung des Service-Level-Agreements (SLA) von 99,9 % auf 99,95 %. -- **IaaS OpenSource**: Hinweis auf die maximale Aufbewahrungsdauer für Sicherungen (24 Monate, Migration zu Glacier geplant für Q1 2027). +- **IaaS OpenSource (Sauvegarde)** : Erweiterung des Sicherungsabschnitts mit Details zur technischen Architektur (sauvegarde incrémentale, impact du Thick provisioning sur le stockage), Sicherheit (chiffrement AES-256, isolation réseau), Monitoring und Zeitplanung. Übersetzungen verfügbar in EN/DE/ES/IT. -### 15. April 2026: Neue VM instances-Dokumentation (Cloud Public) +### 20. April 2026: Aktualisierung der Dimensionierung für Managed Database -- **VM instances**: Veröffentlichung der ersten Dokumentation für den VM instances-Dienst (Vorschau), Cloud Temples neues Angebot für gemeinsam genutzte virtuelle Maschinen. Die Dokumentation umfasst die Dienstübersicht, technische Konzepte (Service-Klassen Development/General Purpose/Performance, vordefinierte und Custom-Flavors, Speicher, VPC-Netzwerk, Backup) sowie einen vollständigen Leitfaden für den Einstieg. Der Dienst ist unter einer neuen Kategorie **Cloud Public** in der Navigation organisiert. +- **Managed MariaDB & PostgreSQL** : Aktualisierung der verfügbaren maximalen Dimensionierungsprofile für verwaltete Datenbankdienste. +### 17. April 2026: VM-Instanzen — illustrierte Dokumentation, Tutorials und Übersetzungen + +- **VM-Instanzen — Dokumentationserweiterung**: Vollständige Überarbeitung und Illustration der VM-Instanzen-Dokumentation. Der Schnellstartleitfaden (`quickstart.md`) deckt nun den gesamten illustrierten Benutzerpfad ab: Zugriff auf den Bereich, VM-Liste, 9-Schritte-Erstellungsassistent (Instanzfamilie, Verfügbarkeitszone, OS-Vorlage, Layout, Name/Sicherung, Cloud Init, Festplatten, Netzwerk, Übersicht) und Verwaltung der 4 Registerkarten (Informationen, Festplatten, Netzwerk, Snapshots). +- **VM-Instanzen — Tutorials**: Erstellung von 3 dedizierten Tutorials in einem `tutorials/`-Ordner: (1) **Erstellen Ihrer ersten VM** (vollständiger illustrierter Assistent + Cloud Init + zusätzliche Festplatte), (2) **Verwalten von Festplatten** (Hinzufügen über die Konsole + Linux-Partitionierung), (3) **Erstellen und Verwalten von Snapshots** (Erstellung, Wiederherstellung, Löschung + Best Practices und Snapshot/Sicherungs-Vergleich). Die Seitennavigation wird um 3 einzelne Einträge in der Kategorie Tutorials aktualisiert. + +### 17. April 2026: Vertragsdokumente, Übersetzungen und terminologische Harmonisierung + +- **Vertragsdokumente — Neustrukturierung** : Die Seite `contracts.md` wurde neu strukturiert, wobei die Hierarchie der Vertragsdokumente an den Seitenanfang gestellt wurde. Dies umfasst die Prioritätsliste der 6 Dokumente (CGVU, Convention SecNumCloud, spezifisches Übereinkommen ¹, PAS ², CPU, DPA) sowie eine Hinweisbox mit vertragsrechtlichen Präzisierungen. + +### 16. April 2026 : Neugestaltung der Navigation, Vertragsdokumente und Updates + +- **Navigation — Compute** : Zusammenfassung von VM-Instanzen (Vorschau), IaaS OpenSource und IaaS VMware unter einer einzigen Kategorie **Compute** in der Navigation (PR #277). +- **Navigation — Network** : Zusammenfassung von VPC (Vorschau) und Private Backbone unter einer einzigen Kategorie **Network** in der Navigation. +- **Vertragsdokumente** : Vollständige Neustrukturierung der Vertragsdokumentation – Erstellung einer Hub-Seite `/contracts` (Allgemeine Geschäftsbedingungen, Besondere Bedingungen, SecNumCloud-Servicevereinbarungen, SLA VM-Instanzen) und einer Hub-Seite `/shared-responsibility` (RACI-Matrizen pro Dienst: IaaS, S3, PaaS, Kubernetes, LLMaaS, Netzwerk). Das seitliche Vertragsmenü wird durch eine dedizierte Spalte **Vertraglich** im Footer ersetzt. Übersetzungen verfügbar EN/DE/ES/IT. +- **VM-Instanzen** : Aktualisierung des Service-Level-Agreements (SLA) von 99,9 % auf 99,95 %. +- **IaaS OpenSource** : Hinzufügung eines Hinweises zur maximalen Aufbewahrungsdauer von Backups (maximal 24 Monate, Migration zu Glacier im T1 2027 geplant). + +### 15. April 2026: Neue Dokumentation zu VM-Instanzen (Cloud Public) + +- **VM-Instanzen**: Veröffentlichung der Erstdokumentation zum Dienst VM-Instanzen (en preview), das neue Angebot für geteilte virtuelle Maschinen von Cloud Temple. Die Dokumentation umfasst einen Überblick über den Dienst, technische Konzepte (Service-Klassen Development/General Purpose/Performance, vordefinierte und benutzerdefinierte Vorlagen, Speicher, VPC-Netzwerk, Sicherung) sowie einen vollständigen Schnellstartleitfaden. Der Dienst ist in der Navigation unter der neuen Kategorie **Cloud Public** eingeordnet. ### 15. April 2026: Verbesserung der IaaS VMware-Dokumentation — Cluster-Metriken -- **IaaS VMware**: Detaillierte Dokumentation der in der VMware-Cluster-Ansicht der Cloud Temple Konsole angezeigten Metriken hinzugefügt. Umfasst die drei Cluster-Speicher-Diagramme: **Bereitgestellter Speicher** (insgesamt den VMs zugewiesener Speicher), **Verwendeter Speicher** (physischer Speicher, der aktiv von den VMs genutzt wird) und **Worst-Case-Zuweisung** (Projektion des maximalen gleichzeitigen Verbrauchs), mit einer präzisen Beschreibung der Bedeutung jedes Indikators zur Vorwegnahme des Ressourcenbedarfs. +- **IaaS VMware** : Hinzufügen einer detaillierten Dokumentation zu den Metriken, die in der Ansicht eines VMware-Clusters über die Cloud Temple Console angezeigt werden. Deckt die drei Speicherdiagramme des Clusters ab: **Allozierter Speicher** (quantité totale allouée aux VMs), **Verbrauchter Speicher** (mémoire physique réellement utilisée par les VMs) und **Zuweisung im Worst-Case** (projection de consommation maximale simultanée), mit einer genauen Beschreibung der Bedeutung jedes Indikators zur Vorausplanung des Ressourcenbedarfs. -### 15. April 2026: Dokumentation Managed MariaDB, Managed PostgreSQL und mehrsprachige Korrekturen +### 15. April 2026 : Dokumentation zu Managed MariaDB, Managed PostgreSQL und mehrsprachige Korrekturen -- **Managed MariaDB**: Erstveröffentlichung der Dokumentation für den Managed MariaDB-Dienst (Vorschau): Dienstübersicht, technische Konzepte (StandAlone- und Distributed-Architekturen), Schnellstartanleitung. -- **Managed PostgreSQL**: Erstveröffentlichung der Dokumentation für den Managed PostgreSQL-Dienst (Vorschau): Dienstübersicht, technische Konzepte, Schnellstartanleitung. -- **Mehrsprachige Korrekturen (Bilder)**: Korrektur der Bildreferenzen in den Übersetzungen der Abschnitte Managed Kubernetes und Managed MariaDB für alle Sprachen (EN, DE, ES, IT) — Konvertierung relativer `./images/`-Pfade in absolute `@site/docs/...`-Pfade für korrekte Darstellung in allen Sprachen. -- **Korrekturen defekter Links**: Behebung mehrerer defekter Links: LLMaaS-Lizenzreferenzen, Konsolenlink im rclone-Tutorial (OSS), IAM-Link in der Netzwerkdokumentation (EN), relative Links im Terraform-Abschnitt (EN). +- **Managed MariaDB** : Veröffentlichung der ersten Dokumentation für den Managed MariaDB-Service (Preview) : Service-Übersicht, technische Konzepte (StandAlone- und Distributed-Architekturen), Schnellstartanleitung. +- **Managed PostgreSQL** : Veröffentlichung der ersten Dokumentation für den Managed PostgreSQL-Service (Preview) : Service-Übersicht, technische Konzepte, Schnellstartanleitung. +- **Mehrsprachige Korrekturen (Bilder)** : Korrektur der Bildreferenzen in den Übersetzungen der Abschnitte Managed Kubernetes und Managed MariaDB für alle Sprachen (EN, DE, ES, IT) — Umstellung von relativen Pfaden `./images/` auf absolute Pfade `@site/docs/...`, um eine korrekte Darstellung in allen Sprachen zu gewährleisten. +- **Korrekturen defekter Links** : Behebung mehrerer defekter Links in der Dokumentation: Verweise auf LLMaaS-Lizenzen, Link zur Konsole im rclone-Tutorial (OSS), IAM-Link in der Netzwerkdokumentation (EN), relative Links im Terraform-Abschnitt (EN). -### 15. April 2026: Neues Kostenverwaltungsmodul +### 15. April 2026 : Neues Modul Kostenmanager -- **Konsole (Kostenverwaltung)**: Vollständige Dokumentation des neuen Verbrauchsverfolgungsmoduls der Cloud Temple Konsole hinzugefügt. Umfasst das Dashboard, den Gesamtverbrauch (mit Prognose für Monatsende), die Aufschlüsselung nach Produkt und Service, detaillierte Abrechnungszeilen und den Preiskatalog. +- **Konsole (Kostenmanager)** : Hinzufügen der vollständigen Dokumentation des neuen Verbrauchsverfolgungsmoduls, das über die Cloud Temple-Konsole zugänglich ist. Deckt das Dashboard, den Gesamtverbrauch (mit Monatsendprognose), die Aufschlüsselung nach Produkt und Dienstleistung, die zeilenweisen Abrechnungsdetails sowie den Preiskatalog ab. -### 26. März 2026: Aktualisierung der Unterauftragsverarbeiter-Liste (DPA) +### 26. März 2026 : Aktualisierung der Liste der Unterauftragnehmer (DPA) -- **Vertraglich**: Aktualisierung des Vertrags über die Auftragsverarbeitung (DPA) - Überarbeitung der Liste der Unterauftragsverarbeiter (Entfernung von Microsoft Azure und Amazon Web Services, Änderung der Tätigkeit für Iron Mountain) und Hinzufügung des Genehmigungsdatums. Ausbreitung der Änderungen auf Englisch, Deutsch, Spanisch und Italienisch. +- **Vertraglich** : Aktualisierung der Vertragsanlage zu personenbezogenen Daten (DPA) - Überarbeitung der Liste der Unterauftragnehmer (Streichung von Microsoft Azure und Amazon Web Services, Änderung der Tätigkeit für Iron Mountain) und Ergänzung des Genehmigungsdatums. ### 19. März 2026: Verbesserungen der IaaS- und Terraform-Dokumentation -- **IaaS OpenSource**: Vollständige Anleitung zur Erstellung einer virtuellen Maschine hinzugefügt. Das Tutorial umfasst die drei verfügbaren Bereitstellungsmethoden (Vorlage, XVA-Import, Marketplace) mit Schritt-für-Schritt-Anleitungen und Best-Practice-Empfehlungen. -- **IaaS VMware**: Indexseite mit allen verfügbaren Tutorials hinzugefügt, um die Navigation und das Auffinden der Anleitungen zu erleichtern. -- **Terraform**: Neuer Abschnitt, der erklärt, wie Sie automatisch Benachrichtigungen über neue Versionen des Terraform-Providers über GitHub erhalten können. +- **IaaS OpenSource** : Neuer vollständiger Leitfaden zum Erstellen einer virtuellen Maschine. Das Tutorial deckt die drei verfügbaren Bereitstellungsmethoden (Vorlage, XVA-Import, Marketplace) mit schrittweisen Anleitungen und Empfehlungen für Best Practices ab. +- **IaaS VMware** : Neue Seite, die alle verfügbaren Tutorials zusammenfasst, um die Navigation und das Auffinden der Leitfäden zu erleichtern. +- **Terraform** : Neuer Abschnitt, der erklärt, wie automatisch Benachrichtigungen über neue Versionen des Terraform-Providers über GitHub empfangen werden. ### 19. März 2026: DPA-Aktualisierung und HDS-Konformität -- **Contractuel** : Mise à jour de l'Annexe Contractuelle sur les Données à Caractère Personnel (DPA) vers la version 1.0. Intégration des dernières exigences de la certification HDS (Hébergeur de Données de Santé) et actualisation de la liste des sous-traitants autorisés. Traduction complète en anglais, allemand, espagnol et italien. +- **Vertraglich** : Aktualisierung des Vertragsanhangs für personenbezogene Daten (DPA) auf Version 1.0. Integration der neuesten Anforderungen der HDS-Zertifizierung (Hébergeur de Données de Santé) und Aktualisierung der Liste der zugelassenen Subunternehmer. Vollständige Übersetzung ins Englische, Deutsche, Spanische und Italienische. -### 21 Février 2026 : Amélioration du référencement SEO +### 21. Februar 2026 : SEO-Optimierung -- **SEO** : Correction de l'URL de production (`https://docs.cloud-temple.com`) et du chemin de base (`/`) dans la configuration Docusaurus, garantissant des URLs canoniques correctes pour l'indexation Google. -- **Sitemap** : Activation de la génération automatique du sitemap (`/sitemap.xml`) pour améliorer le crawling et l'indexation par les moteurs de recherche. -- **Robots.txt** : Ajout d'un fichier `robots.txt` autorisant le crawling complet du site et pointant vers le sitemap. +- **SEO** : Korrektur der Produktions-URL (`https://docs.cloud-temple.com`) und des Basispfads (`/`) in der Docusaurus-Konfiguration, um korrekte kanonische URLs für die Google-Indexierung zu gewährleisten. +- **Sitemap** : Aktivierung der automatischen Generierung der Sitemap (`/sitemap.xml`), um das Crawling und die Indexierung durch Suchmaschinen zu verbessern. +- **Robots.txt** : Hinzufügen einer `robots.txt`-Datei, die das vollständige Crawling der Website erlaubt und auf die Sitemap verweist. -### 21 Février 2026 : Concepts avancés réseau et améliorations multilingues +### 21. Februar 2026 : Erweiterte Netzwerkkonzepte und mehrsprachige Verbesserungen -- **Réseau (Internet)** : Nouvelle page de **concepts avancés** documentant les communautés BGP et le contrôle de la Local Preference sur le backbone Internet Cloud Temple (AS33930). Inclut un guide de configuration avec exemple Bird. -- **LLMaaS** : Mise à jour du catalogue de modèles et ajout du cycle de vie des modèles. Ajout des modèles LTS (Long Term Support). -- **Console (Sécurité)** : Amélioration de la qualité des traductions des alertes de sécurité (anglais, allemand, espagnol, italien). -- **Multilingue** : Traduction de la nouvelle page concepts avancés réseau vers les 4 langues (en, de, es, it) et amélioration globale de la qualité des traductions existantes. -- **IaaS Bare Metal** : Ajout de précisions sur le volume BFS (Boot from SAN) dans le guide de démarrage : le Volume 1 est dédié à l'installation de l'OS, non partageable au sein d'une même AZ, avec recommandation de stocker les données sur un volume LUN additionnel. -- **Stockage Objet (OSS)** : Ajout d'une page **FAQ** couvrant l'accès S3, les whitelists IP, les liens pré-signés et les scénarios d'usage recommandés. +- **Netzwerk (Internet)** : Neue Seite zu **erweiterten Konzepten**, die BGP-Communities und die Steuerung der Local Preference im Internet-Backbone von Cloud Temple (AS33930) dokumentiert. Enthält eine Konfigurationsanleitung mit einem Bird-Beispiel. +- **LLMaaS** : Aktualisierung des Modellkatalogs und Hinzufügung des Modell-Lebenszyklus. Aufnahme von LTS-Modellen (Long Term Support). +- **Konsole (Sicherheit)** : Verbesserung der Übersetzungsqualität von Sicherheitswarnungen (anglais, allemand, espagnol, italien). +- **Mehrsprachigkeit** : Übersetzung der neuen Seite zu erweiterten Netzwerkkonzepten in die 4 Sprachen (en, de, es, it) sowie umfassende Verbesserung der Qualität bestehender Übersetzungen. +- **IaaS Bare Metal** : Präzisierungen zum BFS-Volume (Boot from SAN) im Quickstart-Leitfaden hinzugefügt: Volume 1 ist ausschließlich für die OS-Installation vorgesehen, nicht innerhalb derselben AZ teilbar; es wird empfohlen, Daten auf einem zusätzlichen LUN-Volume zu speichern. +- **Objektspeicher (OSS)** : Hinzufügung einer **FAQ**-Seite, die den S3-Zugriff, IP-Whitelists, signierte URLs und empfohlene Anwendungsszenarien abdeckt. -### 10 Février 2026 : Mise à jour des tarifs LLMaaS +### 10. Februar 2026 : Preisanpassung LLMaaS -- **LLMaaS** : Mise à jour globale des tarifs de l'API (Input : 1,9€/M, Output : 8€/M, Raisonneur : 8€/M) dans l'ensemble de la documentation technique et commerciale. +- **LLMaaS** : Globale Aktualisierung der API-Preise (Input : 1,9€/M, Output : 8€/M, Raisonneur : 8€/M) in der gesamten technischen und kommerziellen Dokumentation. -### 5 Février 2026 : Précisions sur les engagements de service (SLA) +### 5. Februar 2026 : Klarstellungen zu den Service-Level-Agreements (SLA) -- **Managed Kubernetes** : Mise à jour complète et finalisation des engagements de niveau de service (SLA) pour l'offre Managed Kubernetes. +- **Managed Kubernetes** : Vollständige Aktualisierung und Abschluss der Service-Level-Agreements (SLA) für das Managed-Kubernetes-Angebot. -### 21 Janvier 2026 : Améliorations et traductions de sécurité +### 21. Januar 2026: Sicherheitsverbesserungen und Übersetzungen -- **Console Management** : Mise à jour des traductions internationales (anglais, allemand, espagnol, italien) pour les alertes de sécurité dans la console de gestion. +- **Console Management** : Aktualisierung der internationalen Übersetzungen (Englisch, Deutsch, Spanisch, Italienisch) für Sicherheitswarnungen in der Management-Konsole. -### 19 Janvier 2026 : Extension Managed Kubernetes et VPC +### 19. Januar 2026 : Erweiterung Managed Kubernetes und VPC -- **Managed Kubernetes** : Ajout du support pour les nœuds **Bare Metal** et les **GPUs** (NVIDIA). -- **Managed Kubernetes** : Nouveau tutoriel sur l'utilisation des GPUs dans un cluster Kubernetes. -- **Managed Kubernetes** : Remplacement de KubeCost par un guide plus récent sur **OpenCost**. -- **Network (VPC)** : Documentation complète du service Virtual Private Cloud (VPC), incluant les concepts de haute disponibilité (HA), les guides de démarrage et les tutoriels. -- **Multilingue** : Traduction intégrale du service VPC et des nouveaux contenus Kubernetes vers l'anglais, l'allemand, l'espagnol et l'italien. +- **Managed Kubernetes** : Unterstützung für Knoten **Bare Metal** und **GPUs** (NVIDIA) hinzugefügt. +- **Managed Kubernetes** : Neues Tutorial zur Verwendung von GPUs in einem Kubernetes-Cluster. +- **Managed Kubernetes** : KubeCost wurde durch einen aktuelleren Leitfaden zu **OpenCost** ersetzt. +- **Network (VPC)** : Vollständige Dokumentation des Virtual Private Cloud (VPC)-Diensts, einschließlich High-Availability-Konzepten (HA), Schnellstartanleitungen und Tutorials. +- **Mehrsprachig** : Vollständige Übersetzung des VPC-Diensts und der neuen Kubernetes-Inhalte ins Englische, Deutsche, Spanische und Italienische. -### 15 Décembre 2025 : Stabilisation et corrections multilingues +### 15. Dezember 2025: Stabilisierung und mehrsprachige Korrekturen -- **Multilingue (Terraform, LLMaaS, Harbor)** : Correction majeure des traductions en Espagnol, Italien et Allemand. Résolution des problèmes de syntaxe MDX (blocs de code vides, balises non échappées) qui empêchaient la compilation du site. -- **Multilingue (Images)** : Rétablissement des chemins d'images corrects dans les versions italienne et allemande pour les sections Bastion et IaaS VMware. -- **Build** : Validation du déploiement pour l'ensemble des 5 langues supportées. +- **Mehrsprachig (Terraform, LLMaaS, Harbor)** : Wesentliche Korrektur der spanischen, italienischen und deutschen Übersetzungen. Behebung von MDX-Syntaxproblemen (leere Codeblöcke, nicht maskierte Tags), die die Kompilierung der Website verhinderten. +- **Mehrsprachig (Bilder)** : Wiederherstellung der korrekten Bildpfade in der italienischen und deutschen Version für die Abschnitte Bastion und IaaS VMware. +- **Build** : Validierung des Deployments für alle 5 unterstützten Sprachen. -### 11 Décembre 2025 : Nouveautés Managed Kubernetes +### 11. Dezember 2025: Neuerungen im Managed Kubernetes -- **Managed Kubernetes** : Ajout d'un nouveau tutoriel sur l'utilisation de **Gateway API** pour la gestion avancée du trafic. -- **Managed Kubernetes** : Mise à jour de la documentation sur la gestion des quotas (Ceph) et optimisation des outils de gestion des coûts (OpenCost). +- **Managed Kubernetes** : Hinzufügen eines neuen Tutorials zur Verwendung der **Gateway API** für das fortgeschrittene Traffic-Management. +- **Managed Kubernetes** : Aktualisierung der Dokumentation zur Quota-Verwaltung (Ceph) und Optimierung der Tools zur Kostenverwaltung (OpenCost). -### 22 Novembre 2025 : Nouveautés LLMaaS et améliorations globales +### 22. November 2025: Neue Funktionen in LLMaaS und globale Verbesserungen -- **LLMaaS (OCR)** : Ajout d'une documentation complète pour **DeepSeek-OCR**, notre nouveau modèle spécialisé dans l'analyse de documents (PDF, images), capable d'extraire du texte structuré, des tableaux et des formules mathématiques. -- **Multilingue** : Résolution de problèmes d'accessibilité sur les versions italienne et allemande de la documentation. -- **Qualité** : Correction de l'affichage des blocs de code dans les tutoriels LLMaaS et rétablissement des images manquantes dans le guide de démarrage IaaS VMware (version italienne). +- **LLMaaS (OCR)** : Hinzufügen einer vollständigen Dokumentation für **DeepSeek-OCR**, unser neues Modell, das auf die Dokumentenanalyse (PDF, Bilder) spezialisiert ist und strukturierten Text, Tabellen sowie mathematische Formeln extrahieren kann. +- **Mehrsprachig** : Behebung von Barrierefreiheitsproblemen in der italienischen und deutschen Version der Dokumentation. +- **Qualité** : Korrektur der Anzeige von Codeblöcken in den LLMaaS-Tutorials und Wiederherstellung der fehlenden Bilder in der Schnellstartanleitung für VMware IaaS (italienische Version). -### 20 Novembre 2025 : Mise à jour majeure PaaS OpenShift +### 20. November 2025: Großes PaaS OpenShift-Update -- **PaaS OpenShift (PR #194)** : Refonte et mise à jour complète de la documentation OpenShift, incluant de nouvelles captures d'écran et une traduction intégrale en anglais, espagnol, allemand et italien pour accompagner notre expansion internationale. +- **PaaS OpenShift (PR #194)**: Neugestaltung und vollständige Aktualisierung der OpenShift-Dokumentation, einschließlich neuer Screenshots sowie einer vollständigen Übersetzung ins Englische, Spanische, Deutsche und Italienische zur Unterstützung unserer internationalen Expansion. -### 3 Novembre 2025 : Amélioration des tutoriels Kubernetes +### 3. November 2025: Verbesserung der Kubernetes-Tutorials -- **Managed Kubernetes** : Ajout d'un nouveau tutoriel sur le déploiement continu avec **ArgoCD** et l'approche GitOps. -- **Managed Kubernetes** : Revue et améioration des tutoriels existants. Les guides sur le déploiement, le réseau, la gestion des permissions (Capsule) et la sauvegarde (Kasten) ont été enrichis pour mieux adresser les questions de sécurité, de gouvernance et de coût, en réponse aux attentes des profils RSSI et Acheteur. +- **Managed Kubernetes** : Hinzufügung eines neuen Tutorials zum Continuous Deployment mit **ArgoCD** und dem GitOps-Ansatz. +- **Managed Kubernetes** : Überarbeitung und Verbesserung bestehender Tutorials. Die Anleitungen zu Bereitstellung, Netzwerk, Berechtigungsverwaltung (Capsule) und Sicherung (Kasten) wurden erweitert, um den Themen Sicherheit, Governance und Kosten besser gerecht zu werden, in Reaktion auf die Erwartungen von CISO- und Einkäuferprofilen. -### 28 Octobre 2025 : Nouvelle documentation Managed Kubernetes et améliorations diverses +### 28. Oktober 2025: Neue Managed-Kubernetes-Dokumentation und diverse Verbesserungen -- **Managed Kubernetes (PR #193 & améliorations)**: Ajout d'une documentation complète pour le nouveau service Managed Kubernetes. La section inclut une presentazione del service, i concetti tecnici, un guide di démarrage, un primo tutoriel, e la matrice di responsabilités (RACI). Le contenu a été enrichi pour mieux répondre aux attentes des différents profils d'utilisateurs. -- **Stockage Objet (PR #190, #189)**: Ajout de deux nouveaux tutoriels pour le service de Stockage Objet : un sur la gestion des accès aux buckets S3 et un autre sur l'utilisation de Restic pour les sauvegardes. -- **Contractuel (PR #191)**: Correction et mise à jour du document "Data Processing Agreement" (DPA). +- **Managed Kubernetes (PR #193 & Verbesserungen)**: Ergänzung um eine vollständige Dokumentation für den neuen Managed-Kubernetes-Dienst. Der Abschnitt umfasst eine Präsentation des Dienstes, die technischen Konzepte, eine Schnellstartanleitung, ein erstes Tutorial sowie die Verantwortlichkeitsmatrix (RACI). Der Inhalt wurde erweitert, um den Erwartungen verschiedener Nutzerprofile besser gerecht zu werden. +- **Objektspeicher (PR #190, #189)**: Zwei neue Tutorials für den Objektspeicherdienst wurden hinzugefügt: eines zur Verwaltung von S3-Bucket-Zugriffen und eines zur Nutzung von Restic für Backups. +- **Verträge (PR #191)**: Korrektur und Aktualisierung des Dokuments „Data Processing Agreement“ (DPA). -### 18 Octobre 2025 : Maintenance et nouvelles documentations +### 18. Oktober 2025 : Wartung und neue Dokumentationen -- **LLMaaS** : Ajout d'une nouvelle question à la FAQ pour présenter la page de statut publique ([llmaas.status.cloud-temple.app](https://llmaas.status.cloud-temple.app/)), permettant de suivre en temps réel la disponibilité et les performances de chaque modèle. -- **Contractuel** : Mise à jour majeure du Data Processing Agreement (DPA v2) pour refléter les dernières exigences légales et de conformité. -- **Console** : Amélioration et clarification de la documentation concernant la gestion des commandes. -- **Marketplace** : Ajout d'un tutoriel détaillé sur la personnalisation des images de machines virtuelles (VM) pour créer des templates réutilisables. -- **LLMaaS** : Ajout d'un guide pour configurer l'extension VSCode CLINE afin d'utiliser les modèles de langage de Cloud Temple directement depuis l'éditeur. -- **Stockage Objet (OSS)** : Ajout de précisions sur la politique de cycle de vie (Lifecycle) pour la suppression des données. -- **Stockage Objet (OSS)** : Ajout d'un guide de dépannage pour les erreurs de checksum (`XAmzContentSHA256Mismatch`) avec AWS CLI et Terraform. -- **LLMaaS** : Mise à jour de la liste des modèles disponibles et retraduction de plus de 50 documents pour assurer la cohérence. +- **LLMaaS** : Hinzufügen einer neuen Frage zur FAQ zur Vorstellung der öffentlichen Statusseite ([llmaas.status.cloud-temple.app](https://llmaas.status.cloud-temple.app/)), die eine Echtzeitüberwachung der Verfügbarkeit und Leistung jedes Modells ermöglicht. +- **Contractuel** : Wesentliche Aktualisierung des Data Processing Agreement (DPA v2), um den neuesten gesetzlichen und Compliance-Anforderungen zu entsprechen. +- **Console** : Verbesserung und Präzisierung der Dokumentation zur Auftragsverwaltung. +- **Marketplace** : Hinzufügen eines detaillierten Tutorials zur Anpassung von Virtual-Machine-Images (VM), um wiederverwendbare Templates zu erstellen. +- **LLMaaS** : Hinzufügen einer Anleitung zur Konfiguration der VSCode-CLINE-Erweiterung, um die Sprachmodelle von Cloud Temple direkt aus dem Editor heraus zu nutzen. +- **Objektspeicher (OSS)** : Hinzufügen von Erläuterungen zur Lifecycle-Richtlinie (Lifecycle) für die Datenlöschung. +- **Objektspeicher (OSS)** : Hinzufügen einer Fehlerbehebungsanleitung für Checksummenfehler (`XAmzContentSHA256Mismatch`) mit AWS CLI und Terraform. +- **LLMaaS** : Aktualisierung der Liste verfügbarer Modelle und Übersetzung von über 50 Dokumenten zur Sicherstellung der Konsistenz. -### 14 Août 2025 : Améliorations et corrections +### 14. August 2025 : Verbesserungen und Korrekturen -- **LLMaaS** : Mise à jour et clarification des réponses de la FAQ pour mieux adresser les questions techniques et stratégiques. Ajout de la FAQ à la navigation. -- **Général** : Correction de several liens de navigation internes à travers la documentation pour une expérience plus fluide. +- **LLMaaS** : Aktualisierung und Präzisierung der FAQ-Antworten, um technische und strategische Fragen besser zu beantworten. Integration der FAQ in die Navigation. +- **Allgemein** : Korrektur mehrerer interner Navigationslinks in der gesamten Dokumentation für eine flüssigere Nutzererfahrung. -### Juillet 2025 : Nouveautés et mises à jour majeures +### Juli 2025 : Wichtige Neuerungen und Updates -- **Stockage Objet (OSS)** : - - Refonte complète de la section tutoriels avec des guides dédiés pour des outils populaires : AWS CLI, Minio Client (`mc mirror`), Cloudberry Explorer, et le SDK Python Boto3. - - Ajout de précisions sur les concepts de comptes de stockage et le verrouillage d'objets (Object Lock). -- **IaaS OpenSource** : - - Ajout d'une documentation détaillée sur la gestion de la Haute Disponibilité (HA) pour les pools de ressources et les machines virtuelles. -- **Console** : - - Mise à jour de la page des alertes de sécurité avec les dernières vulnérabilités. -- **Réseau** : - - Ajout de nouvelles captures d'écran pour illustrer la configuration de la connectivité IPv6. +- **Objektspeicher (OSS)** : + - Komplette Überarbeitung des Tutorial-Bereichs mit dedizierten Anleitungen für beliebte Tools : AWS CLI, Minio Client (`mc mirror`), Cloudberry Explorer und das Python Boto3 SDK. + - Hinzufügen von Erläuterungen zu den Konzepten von Speicherkonten und Objektsperrung (Object Lock). +- **Open-Source-IaaS** : + - Hinzufügen einer detaillierten Dokumentation zum Management der Hochverfügbarkeit (HA) für Ressourcenpools und virtuelle Maschinen. +- **Konsole** : + - Aktualisierung der Seite für Sicherheitswarnungen mit den neuesten Schwachstellen. +- **Netzwerk** : + - Hinzufügen neuer Screenshots zur Veranschaulichung der Konfiguration der IPv6-Konnektivität. -### 29 Juin 2025 : finalisation de la documentation LLMaaS +### 29. Juni 2025: Finalisierung der LLMaaS-Dokumentation -- Validation de la suite de tests complète. -- Correction et validation des pipelines RAG with FAISS et Qdrant. -- Enrichissement des tutoriels avec des explications techniques plus détaillées. -- Ajout d'une section sur la sécurité des prompts et le cycle de vie des modèles dans les concepts. -- Amélioration de la page d'explication du RAG avec schémas et détails sur les modèles d'embedding. -- Mise à jour de la documentation de l'API, du guide de démarrage et de la présentation du service. -- Ajout du princing pour l'endpoint Transcription Audio. -- Ajout du planning prévisionnel de cycle de vie des modeles. -- Ajout de la matrice de responsabilité pour l'offre LLMaaS. +- Validierung der vollständigen Testsuite. +- Korrektur und Validierung der RAG-Pipelines mit FAISS und Qdrant. +- Erweiterung der Tutorials um detailliertere technische Erklärungen. +- Hinzufügen eines Abschnitts zur Prompt-Sicherheit und zum Modelllebenszyklus in den Konzepten. +- Verbesserung der RAG-Erklärungsseite mit Diagrammen und Details zu den Embedding-Modellen. +- Aktualisierung der API-Dokumentation, der Schnellstartanleitung und der Servicepräsentation. +- Hinzufügen des Pricings für den Audio-Transkriptions-Endpoint. +- Hinzufügen des voraussichtlichen Zeitplans für den Modelllebenszyklus. +- Hinzufügen der Verantwortlichkeitsmatrix für das LLMaaS-Angebot. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/compute_overview.md b/i18n/de/docusaurus-plugin-content-docs/current/compute_overview.md index 307562d8..25e5ba43 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/compute_overview.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/compute_overview.md @@ -1,17 +1,17 @@ --- -title: Compute +title: Berechnung displayed_sidebar: docSidebar --- # Compute -Die Compute-Dienste von Cloud Temple ermöglichen es Ihnen, virtuelle Maschinen auf einer souveränen und sicheren Infrastruktur bereitzustellen und zu betreiben. Wählen Sie die Technologie, die Ihren Anforderungen entspricht: gemeinsam genutzte Cloud-Instanzen, Open-Source-Infrastruktur oder VMware-Virtualisierung. +Die Compute-Dienste von Cloud Temple ermöglichen Ihnen das Bereitstellen und Betreiben von virtuellen Maschinen auf einer souveränen und sicheren Infrastruktur. Wählen Sie die Technologie, die Ihren Anforderungen entspricht: geteilte Cloud-Instanzen, Open-Source-Infrastruktur oder VMware-Virtualisierung.
-

VM Instances Preview

-

Gemeinsam genutzte Cloud-Instanzen, die in wenigen Minuten über den Marketplace bereitgestellt werden. Ideal für flexible Workloads.

- VM Instances entdecken → +

VM-Instanzen Vorschau

+

Geteilte Cloud-Instanzen, die in wenigen Minuten über den Marketplace bereitgestellt werden können. Ideal für flexible Workloads.

+ VM-Instanzen entdecken →

IaaS OpenSource

@@ -20,7 +20,7 @@ Die Compute-Dienste von Cloud Temple ermöglichen es Ihnen, virtuelle Maschinen

IaaS VMware

-

Verwaltete VMware-Infrastruktur. Kompatibel mit Ihrer vorhandenen vSphere-Umgebung, mit den Garantien einer qualifizierten souveränen Cloud.

+

Gemanagte VMware-Infrastruktur. Kompatibel mit Ihrer bestehenden vSphere-Umgebung, mit den Garantien eines qualifizierten souveränen Clouds.

IaaS VMware entdecken →
-
+
\ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/console/api.md b/i18n/de/docusaurus-plugin-content-docs/current/console/api.md index 0de50a29..1dd780a9 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/console/api.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/console/api.md @@ -11,173 +11,173 @@ import ShivaApi002 from '@site/docs/console/images/shiva_api_002.png' import ShivaApi003 from '@site/docs/console/images/shiva_api_003.png' import ShivaApi004 from '@site/docs/console/images/shiva_api_004.png' -## Einführung +## Introduction -Die Cloud Temple API ermöglicht es Ihnen, alle Ihre Cloud-Ressourcen programmatisch zu erstellen und zu verwalten. Alles, was Sie über die Cloud Temple Konsole tun können, kann auch über die API durchgeführt werden, von der Erstellung virtueller Maschinen bis zur Konfiguration der Identitäts- und Zugriffsverwaltung. +Die Cloud Temple API ermöglicht es Ihnen, alle Ihre Cloud-Ressourcen programmatisch zu erstellen und zu verwalten. Alles, was Sie über die Cloud Temple-Konsole tun können, lässt sich auch über die API durchführen, von der Erstellung virtueller Maschinen bis zur Konfiguration der Identitäts- und Zugriffsverwaltung. -Diese Dokumentation führt Sie durch die Verwendung der Cloud Temple API, von der Authentifizierung bis zu Best Practices, einschließlich des Lebenszyklus-Managements von Endpunkten. +Diese Dokumentation führt Sie durch die Nutzung der Cloud Temple API, von der Authentifizierung über Best Practices bis hin zum Lifecycle-Management der Endpunkte. ## Schnellstart: Ihre erste API-Anfrage -:::info[Zusammenfassung - 3 Schritte zum Starten] -1. 🔑 **PAT generieren** über die Konsole -2. 🚀 **Mit curl testen** auf `/iam/v2/roles` -3. ✅ **Antwort analysieren** JSON +:::info[Zusammenfassung - 3 Schritte zum Einstieg] +1. 🔑 **Generieren Sie Ihr PAT** über die Konsole +2. 🚀 **Testen Sie mit curl** auf `/iam/v2/roles` +3. ✅ **Analysieren Sie die JSON-Antwort** ::: ### Voraussetzungen -Bevor Sie beginnen, benötigen Sie ein Cloud Temple Konto mit den entsprechenden Berechtigungen zum Generieren von API-Schlüsseln. +Bevor Sie beginnen, benötigen Sie ein Cloud Temple-Konto mit den entsprechenden Berechtigungen, um API-Schlüssel zu generieren. ### Schritte -1. **API-Schlüssel generieren**: Melden Sie sich bei der [Cloud Temple Konsole](https://shiva.cloud-temple.com/login) an und generieren Sie Ihren Personal Access Token (siehe Abschnitt [API-Schlüssel](#api-schlüssel-personal-access-token) unten). +1. **API-Schlüssel generieren**: Melden Sie sich bei der [Cloud Temple-Konsole](https://shiva.cloud-temple.com/login) an und generieren Sie Ihren Personal Access Token (siehe Abschnitt [API-Schlüssel](#clés-api-personal-access-token) unten). -2. **Erste Anfrage testen**: Führen Sie den folgenden curl-Befehl aus und ersetzen Sie `` durch Ihren Token: +2. **Erste Anfrage testen**: Führen Sie den folgenden curl-Befehl aus, indem Sie `` durch Ihr Token ersetzen: ```bash curl -X GET \ - -H "Authorization: Bearer " \ + -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ "https://shiva.cloud-temple.com/api/iam/v2/roles" ``` -3. **Antwort analysieren**: Sie erhalten die Liste der in Ihrem Tenant verfügbaren IAM-Rollen, um die vorhandenen Berechtigungen zu verstehen. +3. **Antwort analysieren**: Sie erhalten die Liste der im Tenant verfügbaren IAM-Rollen, wodurch Sie die vorhandenen Berechtigungen nachvollziehen können. ## Authentifizierung ### API-Schlüssel (Personal Access Token) -Der __API-Schlüssel__ ermöglicht die Authentifizierung bei API-Anfragen. Die Generierung eines API-Schlüssels, auch als __Personal Access Token (PAT)__ bekannt, ist eine sichere Methode zur Verbindung mit Konsolen-APIs ohne grafische Benutzeroberfläche. Jeder dieser Token ist mit einem Tenant und dem Benutzer verknüpft, der ihn erstellt hat. +Der __API-Schlüssel__ ermöglicht die Authentifizierung, wenn Sie Anfragen an die API stellen möchten. Die Generierung eines API-Schlüssels, auch als __Personal Access Token (PAT)__ bezeichnet, ist eine sichere Methode zur Anmeldung bei der API Console ohne Verwendung einer grafischen Benutzeroberfläche. Jeder dieser Tokens ist mit einem Tenant und dem Benutzer verknüpft, der ihn erstellt hat. -Die Erstellung dieses Tokens erfolgt über Ihr Konto. Sie können mehrere Schlüssel generieren und für jeden die Berechtigungen innerhalb Ihrer Rechte konfigurieren. +Die Erstellung dieses Tokens erfolgt über Ihr Konto. Es ist möglich, mehrere Schlüssel zu generieren und für jeden einzelnen die Berechtigungen entsprechend Ihren Rechten zu konfigurieren. #### API-Schlüssel erstellen -Um einen API-Schlüssel zu erstellen, klicken Sie einfach auf __Ihr Profil__: +Um einen API-Schlüssel zu erstellen, __klicken Sie einfach auf Ihr Profil__ : -Klicken Sie im Profilmenü auf __'Personal Access Token'__ +Klicken Sie im Profilmenü auf __'Persönliches Zugriffstoken'__ -Sie sehen dann alle für diesen Benutzer in diesem Tenant erstellten API-Schlüssel. Klicken Sie auf __'Neues persönliches Zugriffstoken'__ +Auf dem Bildschirm werden nun alle API-Schlüssel angezeigt, die für diesen Benutzer in diesem Tenant erstellt wurden. Klicken Sie auf __'Neues persönliches Zugriffstoken'__ -Sie müssen dann: +Sie müssen nun: - Den Namen dieses neuen Tokens angeben, -- Ein Ablaufdatum festlegen (maximale Gültigkeit 12 Monate), -- Die mit dem Token verbundenen Berechtigungen auswählen. +- Ein Ablaufdatum angeben (maximal 12 Monate Gültigkeit), +- Die dem Token zugeordneten Berechtigungen auswählen. -Die Details Ihres Tokens werden dann angezeigt. __Warnung: Sie können später nicht mehr auf diese Details zugreifen.__ +Die Details zu Ihrem Token werden anschließend angezeigt. __Achtung, ein nachträglicher Zugriff ist nicht mehr möglich.__ -Wenn Sie diese Informationen nicht aufzeichnen, müssen Sie den Token löschen und neu erstellen. +Wenn Sie diese Informationen nicht notieren, müssen Sie das Token löschen und neu erstellen. -Aus Sicherheitsgründen wird empfohlen, mehrere Token zu erstellen, jeder mit einem bestimmten Zweck (ein Token pro Anwendung oder Geschäftsprozess), anstatt einen Token mit allen Berechtigungen zu erstellen. +Aus Sicherheitsgründen wird empfohlen, mehrere Tokens mit jeweils spezifischem Verwendungszweck zu erstellen (ein Token pro Anwendung oder pro Geschäftsprozess), anstatt ein einzelnes Token mit allen Rechten zu erstellen. -Sie sehen dann den neu erstellten Token und sein zukünftiges Ablaufdatum. +Anschließend sehen Sie das neu erstellte Token und sein zukünftiges Ablaufdatum. -:::info[Authentifizierungs-Token-Lebenszyklus] -Wenn Sie Ihren __Personal Access Token (PAT)__ zur Authentifizierung bei der API verwenden, erhalten Sie als Rückgabe einen Zugriffstoken. Es ist wichtig zu beachten, dass dieser Zugriffstoken ein __JSON Web Token (JWT)__ mit begrenzter Lebensdauer ist. +:::info[Lebenszyklus des Authentifizierungstokens] +Wenn Sie Ihr __Personal Access Token (PAT)__ zur Authentifizierung bei der API verwenden, erhalten Sie im Gegenzug ein Zugriffstoken. Es ist wichtig zu beachten, dass dieses Zugriffstoken ein __JSON Web Token (JWT)__ mit begrenzter Lebensdauer ist. -- __Lebensdauer__: Jeder JWT-Token ist __5 Minuten__ gültig. -- __Überprüfung__: Sie können das Ausstellungsdatum (`iat`) und Ablaufdatum (`exp`) Ihres Tokens durch Dekodierung überprüfen. Online-Tools wie [jwt.io](https://jwt.io) machen dies einfach. +- __Lebensdauer__ : Jedes JWT-Token ist für __5 Minuten__ gültig. +- __Überprüfung__ : Sie können das Ausstellungsdatum (`iat`) und das Ablaufdatum (`exp`) Ihres Tokens durch Dekodierung überprüfen. Online-Tools wie [jwt.io](https://jwt.io) erleichtern dies. -Sobald der Token abläuft, müssen Sie sich erneut mit Ihrem PAT authentifizieren, um einen neuen zu erhalten. Daher wird empfohlen, diesen Lebenszyklus in Ihren Skripten und Anwendungen zu verwalten, indem Sie eine automatische Token-Erneuerung planen. +Nach Ablauf des Tokens müssen Sie sich erneut mit Ihrem PAT authentifizieren, um ein neues zu erhalten. Es wird daher empfohlen, diesen Lebenszyklus in Ihren Skripten und Anwendungen zu verwalten, indem ein automatisches Token-Update eingeplant wird. ::: -## API-Portal-Zugriff +## Zugriff auf das API-Portal -Die OpenAPI 3.0 (Swagger) Dokumentation für Cloud Temple Konsolen-APIs ist direkt in der Anwendung verfügbar: +Die OpenAPI 3.0-Dokumentation (Swagger) der APIs der Cloud Temple-Konsole ist direkt in der Anwendung verfügbar: -Der API-Zugriff erfordert eine Authentifizierung. Nach der Authentifizierung müssen alle Operationen den __'Authorization'__-Header mit dem während der Authentifizierungsphase erhaltenen Bearer-Zugriffstoken enthalten. +Der Zugriff auf die APIs erfordert eine Authentifizierung. Nach der Authentifizierung müssen alle Anfragen den Header __'Authorization'__ mit dem bei der Authentifizierung erhaltenen Bearer-Access-Token enthalten. -Die Endpunkt-URLs werden direkt in __Swagger__ bereitgestellt (im "Servers"-Objekt auf jeder API-Seite). +Die URL der Endpunkte wird direkt in __Swagger__ angegeben (im Objekt "Servers" auf jeder API-Seite). ### Interaktive Dokumentation erkunden Das API-Portal ermöglicht es Ihnen: -- Alle verfügbaren Endpunkte nach Modul anzuzeigen -- Anfragen direkt über die Schnittstelle zu testen -- Datenmodelle (Schemas) für jede Ressource anzuzeigen -- Mögliche Antwortcodes für jeden Endpunkt anzuzeigen +- Alle verfügbaren Endpunkte pro Modul einsehen +- Anfragen direkt über die Oberfläche testen +- Datenmodelle (Schemata) für jede Ressource anzeigen +- Mögliche Antwortcodes für jeden Endpunkt einsehen -## Endpunkt-Struktur +## Struktur der Endpunkte ### URL-Format -Cloud Temple API-URLs folgen einer konsistenten Struktur: +Die URLs der Cloud Temple API folgen einer konsistenten Struktur: ``` -https://shiva.cloud-temple.com/api/{module}/v{version}/{resource} +https://shiva.cloud-temple.com/api/{module}/v{version}/{ressource} ``` -Dabei: -- `{module}`: Das betreffende Modul (compute, iam, network, backup, etc.) -- `{version}`: Die API-Version (v1, v2, etc.) -- `{resource}`: Die zu manipulierende Ressource (virtual-machines, users, networks, etc.) +Wobei: +- `{module}` : Das betroffene Modul (compute, iam, network, backup, etc.) +- `{version}` : Die API-Version (v1, v2, etc.) +- `{ressource}` : Die zu verwaltende Ressource (virtual-machines, users, networks, etc.) -### Endpunkt-Beispiele +### Beispiele für Endpunkte ``` -# Virtuelle Maschinen (Compute) +# Machines virtuelles (Compute) GET https://shiva.cloud-temple.com/api/compute/v1/virtual-machines POST https://shiva.cloud-temple.com/api/compute/v1/virtual-machines GET https://shiva.cloud-temple.com/api/compute/v1/virtual-machines/{id} PATCH https://shiva.cloud-temple.com/api/compute/v1/virtual-machines/{id} DELETE https://shiva.cloud-temple.com/api/compute/v1/virtual-machines/{id} -# Identität und Zugriff (IAM) +# Identité et accès (IAM) GET https://shiva.cloud-temple.com/api/iam/v1/users POST https://shiva.cloud-temple.com/api/iam/v1/users GET https://shiva.cloud-temple.com/api/iam/v1/users/{id} -# Netzwerke +# Réseaux GET https://shiva.cloud-temple.com/api/network/v1/virtual-networks POST https://shiva.cloud-temple.com/api/network/v1/virtual-networks ``` -### Modul-Organisation +### Organisation nach Modulen -Die Cloud Temple API ist in funktionale Module organisiert: +Die Cloud Temple API ist in funktionale Module unterteilt: | Modul | Beschreibung | Basis-URL | -|--------|-------------|----------| +|-------|-------------|-----------| | Cloud Temple Konsole | Allgemeine Funktionen | `/api/v1/` | -| Identität (IAM) | Benutzer- und Zugriffsverwaltung | `/iam/v1/` | -| VMware IaaS | VMware-Virtualisierungsressourcen | `/compute/v1/` | +| Identität (IAM) | Benutzerverwaltung und Zugriff | `/iam/v1/` | +| IaaS VMware | VMware Virtualisierungsressourcen | `/compute/v1/` | | OpenIaaS | Xen Orchestra-Ressourcen | `/openiaas/v1/` | | S3 | Objektspeicher | `/s3/v1/` | | OpenShift | PaaS-Plattform | `/openshift/v1/` | -| Bastion | SSH/RDP Bastion-Geräte | `/bastion/v1/` | -| Netzwerk | Level 2 und 3 Netzwerkverwaltung | `/network/v1/` | -| Housing | Colocation und Housing | `/housing/v1/` | +| Bastion | SSH/RDP-Bastion-Appliances | `/bastion/v1/` | +| Netzwerk | Netzwerkverwaltung Layer 2 und 3 | `/network/v1/` | +| Hosting | Colocation und Housing | `/housing/v1/` | | Marketplace | Lösungskatalog | `/marketplace/v1/` | | Support | Tickets und Support | `/support/v1/` | | Benachrichtigung | Benachrichtigungssystem | `/notification/v1/` | | LLMaaS | Künstliche Intelligenz | `/llmaas/v1/` | -## Aktivitäten +## Die Aktivitäten -Die Verfolgung von Schreibanfragen (POST, PUT, PATCH, DELETE) erfolgt über das Aktivitätsmanagement. Jede solche Anfrage generiert automatisch eine zugeordnete Aktivität. Ein HTTP 201 Statuscode bestätigt die erfolgreiche Erstellung der Aktivität. Die eindeutige Kennung dieser Aktivität wird in den Antwort-Headern unter dem Schlüssel 'Location' zurückgegeben. +Die Nachverfolgung von Schreibanfragen (POST, PUT, PATCH, DELETE) erfolgt über die Verwaltung der Aktivitäten. Jede Anfrage dieses Typs generiert automatisch eine zugehörige Aktivität. Ein HTTP-Statuscode 201 bestätigt die erfolgreiche Erstellung der Aktivität. Die eindeutige ID dieser Aktivität wird in den Antwort-Headern unter dem Schlüssel 'Location' zurückgegeben. -Sobald die Kennung abgerufen wurde, ist es möglich, auf die Aktivitätsdetails über die Activity-Modul-API zuzugreifen: +Sobald die ID abgerufen wurde, können die Details der Aktivität über die API des Activity-Moduls abgerufen werden: -Der Aktivitätsinhalt enthält alle wesentlichen Informationen zur Identifizierung der Operation, ihres Ausführungsdatums und ihres Fortschrittsstatus. Hier ist das Aktivitätsmodell: +Der Inhalt der Aktivität enthält alle wesentlichen Informationen zur Identifizierung der Operation, ihres Ausführungsdatums sowie ihres Fortschrittsstatus. Nachfolgend das Modell einer Aktivität: ```json { @@ -199,13 +199,13 @@ Der Aktivitätsinhalt enthält alle wesentlichen Informationen zur Identifizieru } ``` -### Aktivitätszustände +### Status einer Aktivität -Das __state__-Objekt kann je nach Aktivitätszustand unterschiedliche Formen annehmen: +Das Objekt __state__ kann je nach Status der Aktivität verschiedene Formen annehmen, nämlich: -#### waiting +#### wartend -Zustand bevor die Operation begonnen hat: +Status vor Beginn des Vorgangs: ```json waiting: {} @@ -213,7 +213,7 @@ waiting: {} #### running -Zustand wenn die Operation läuft: +Status, wenn der Vorgang ausgeführt wird: ```json running: { @@ -223,9 +223,9 @@ running: { } ``` -#### failed +#### fehlgeschlagen -Zustand wenn die Operation fehlgeschlagen ist: +Status, wenn der Vorgang fehlgeschlagen ist: ```json failed: { @@ -235,9 +235,9 @@ failed: { } ``` -#### completed +#### abgeschlossen -Zustand wenn die Operation abgeschlossen ist: +Status, wenn der Vorgang abgeschlossen ist: ```json completed: { @@ -247,48 +247,48 @@ completed: { } ``` -:::info[Erstellte Ressourcen-Kennung] -Die Kennung (UUIDv4) der erstellten Ressource ist im Aktivitätsergebnis verfügbar, sobald sie abgeschlossen ist. +:::info[Kennung der erstellten Ressource] +Die Kennung (UUIDv4) der erstellten Ressource ist im Ergebnis der Aktivität verfügbar, sobald diese abgeschlossen ist. ::: ## API-Limits ### Warum Limits? -Die Cloud Temple Konsole definiert __Obergrenzen für das Anfragevolumen__, das ein Benutzer über einen bestimmten Zeitraum an die API senden kann. Die Implementierung dieser Ratenlimits ist eine gängige Maßnahme im API-Management, die aus mehreren wesentlichen Gründen eingeführt wurde: +Die Cloud Temple-Konsole definiert __Grenzwerte für das Anfragsvolumen__, die ein Benutzer innerhalb eines bestimmten Zeitraums an die API senden kann. Die Einführung dieser Ratenbegrenzungen ist eine gängige Maßnahme im API-Management und wird aus mehreren wesentlichen Gründen ergriffen: -- __Missbrauchsverhütung__: Diese Limits helfen, die API-Integrität zu schützen, indem sie missbräuchliche oder fahrlässige Nutzung verhindern, die den Betrieb beeinträchtigen könnte. -- __Servicequalitätssicherung__: Durch die Regulierung des API-Zugriffs stellen wir eine faire Ressourcenverteilung sicher, sodass alle Benutzer von einer stabilen und leistungsstarken Erfahrung profitieren können. +- __Missbrauchsprävention__ : Diese Limits tragen zum Schutz der API-Integrität bei, indem sie missbräuchliche oder unangemessene Nutzung verhindert, die deren Funktionsweise beeinträchtigen könnte. +- __Sicherstellung der Servicequalität__ : Durch die Steuerung des API-Zugriffs gewährleisten wir eine faire Ressourcenverteilung, sodass alle Nutzer eine stabile und performante Erfahrung machen können. -Nehmen Sie zum Beispiel ein schlecht konzipiertes oder ineffizientes Skript, das wiederholte API-Aufrufe versucht und dabei das Risiko einer Ressourcensättigung und Leistungsverschlechterung birgt. Durch die Festlegung von Anfrage-Schwellenwerten verhindern wir diese Situationen und erhalten __einen reibungslosen, ununterbrochenen Service__ für alle unsere Kunden. +Nehmen wir das Beispiel eines schlecht konzipierten oder ineffizienten Skripts, das wiederholt API-Aufrufe versucht und dadurch Ressourcen überlastet sowie die Leistung beeinträchtigt. Durch die Festlegung von Anfragegrenzwerten verhindern wir derartige Situationen und gewährleisten __einen reibungslosen und unterbrechungsfreien Service__ für unsere gesamte Kundschaft. -### Was sind die Ratenlimits für die Cloud Temple Konsolen-API? +### Welche Ratenbegrenzungen gelten für die API der Cloud-Temple-Konsole? -Wir wenden quantitative Beschränkungen auf Benutzerinteraktionen mit der Konsole für jedes Produkt an. +Für jedes Produkt gelten mengenbasierte Einschränkungen für die Benutzerinteraktionen mit der Konsole. -Die Limits sind definiert in __Anfragen pro Sekunde (r/s) und pro Quell-IP__. Jenseits des Grenzwerts antwortet das System mit einem HTTP 429 Fehlercode, der anzeigt, dass das autorisierte Anfragelimit überschritten wurde. +Die Limits werden in __Anfragen pro Sekunde (r/s) pro Quell-IP__ definiert. Wird der Grenzwert überschritten, antwortet das System mit dem HTTP-Fehlercode 429, der anzeigt, dass das Limit für zulässige Anfragen überschritten wurde. -Hier sind die definierten Limits: +Nachfolgend finden Sie die festgelegten Limits: | Produkt | Grenzwert | |---|---| -| Cloud Temple Konsole | 25 r/s | +| Console Cloud Temple | 25 r/s | | Identität (IAM) | 25 r/s | -| VMware IaaS | 25 r/s | +| IaaS VMware | 25 r/s | | OpenIaaS | 25 r/s | | S3 | 25 r/s | | OpenShift | 25 r/s | | Bastion | 25 r/s | | Netzwerk | 25 r/s | -| Housing | 25 r/s | -| Marketplace | 25 r/s | +| Hosting | 25 r/s | +| Marktplatz | 25 r/s | | Support | 25 r/s | | Benachrichtigung | 25 r/s | | LLMaaS | 25 r/s | ### Spezifische Routen -Bestimmte spezifische API-Endpunkte, insbesondere solche im Zusammenhang mit Authentifizierung oder sensiblen Aktionen, haben restriktivere Limits zur Verbesserung der Sicherheit und Gewährleistung der Stabilität. +Bestimmte API-Endpunkte, insbesondere solche im Zusammenhang mit der Authentifizierung oder sensiblen Aktionen, unterliegen strengeren Limits, um die Sicherheit zu erhöhen und die Stabilität zu gewährleisten. | Route | Grenzwert | |---|---| @@ -296,9 +296,9 @@ Bestimmte spezifische API-Endpunkte, insbesondere solche im Zusammenhang mit Aut | IaaS - Speicher (Datastores) | 20 r/s | | Marketplace (Kontakt) | 1 r/min - 5 r/h | -### Wie funktionieren Ratenlimits? +### Wie funktionieren Rate-Limits? -Wenn die Anzahl der an einen API-Endpunkt gesendeten Anfragen das autorisierte Limit überschreitet, antwortet der Endpunkt mit __einem HTTP 429 Antwortcode__. Dieser Code zeigt an, dass der Benutzer die erlaubte Anzahl von Anfragen überschritten hat. Wenn dies auftritt, stellt der API-Endpunkt auch ein JSON-Objekt als Antwort bereit, das detaillierte Informationen über die angewandte Beschränkung enthält: +Wenn die Anzahl der an einen API-Endpunkt gesendeten Anfragen die zulässige Grenze überschreitet, reagiert der API-Endpunkt mit der Rückgabe von __einem HTTP-Antwortcode 429__. Dieser Code zeigt an, dass der Benutzer die erlaubte Anzahl an Anfragen überschritten hat. In diesem Fall liefert der API-Endpunkt zusätzlich ein JSON-Objekt als Antwort, das detaillierte Informationen zur angewendeten Begrenzung enthält: ```json { @@ -309,36 +309,36 @@ Wenn die Anzahl der an einen API-Endpunkt gesendeten Anfragen das autorisierte L } ``` -### Wie vermeidet man zu viele Anfragen? +### Wie vermeiden Sie zu viele Anfragen? -Es wird empfohlen, die Anzahl der von Ihrer Automatisierung vorgenommenen API-Aufrufe zu begrenzen, um unter dem für den Endpunkt festgelegten Ratenlimit zu bleiben. +Es wird empfohlen, die Anzahl der von Ihrer Automatisierung durchgeführten API-Aufrufe zu begrenzen, um unter der für den Endpunkt festgelegten Ratenbegrenzung zu bleiben. -Diese Situation tritt häufig auf, wenn mehrere Anfragen parallel mit mehreren Prozessen oder Threads ausgeführt werden. +Dies tritt häufig auf, wenn mehrere Anfragen parallel mit mehreren Prozessen oder Threads ausgeführt werden. -Es gibt mehrere Möglichkeiten, die Effizienz Ihrer Automatisierung zu verbessern, einschließlich der Verwendung von __Caching__-Mechanismen und der Implementierung __eines Wiederholungssystems mit exponentiellem Backoff__. Diese Methode beinhaltet eine kurze Pause, wenn ein Ratenlimit-Fehler auftritt, und versucht dann die Anfrage erneut. Wenn die Anfrage erneut fehlschlägt, wird die Pausendauer schrittweise erhöht, bis die Anfrage erfolgreich ist oder bis eine maximale Anzahl von Wiederholungen erreicht ist. +Es gibt mehrere Möglichkeiten, die Effizienz Ihrer Automatisierung zu verbessern, insbesondere durch die Verwendung von __Caching__ und die Implementierung eines __Systems mit Wiederholungsversuchen und Backoff__. Bei dieser Methode wird eine kurze Pause eingelegt, wenn ein Ratenbegrenzungsfehler auftritt, und die Anfrage anschließend erneut gesendet. Falls die Anfrage erneut fehlschlägt, wird die Pausendauer schrittweise erhöht, bis die Anfrage erfolgreich ist oder eine maximale Anzahl von Wiederholungsversuchen erreicht wird. -Dieser Ansatz hat viele Vorteile: +Dieser Ansatz bietet zahlreiche Vorteile: -- __Exponentielles Backoff__ stellt sicher, dass erste Versuche schnell durchgeführt werden, während längere Verzögerungen bei wiederholten Fehlern vorgesehen sind. -- Das Hinzufügen __zufälliger Variation__ zur Pause hilft zu verhindern, dass alle Versuche gleichzeitig auftreten. +- __Backoff__ stellt sicher, dass die ersten Versuche schnell ausgeführt werden, während bei wiederholtem Fehlschlag längere Verzögerungen eingeplant werden. +- Das Hinzufügen einer __zufälligen Variation__ zur Pause trägt dazu bei, zu verhindern, dass alle Versuche gleichzeitig stattfinden. -Es ist wichtig zu beachten, dass __erfolglose Anfragen Ihr Ratenlimit nicht beeinflussen__. Das kontinuierliche erneute Senden einer Anfrage ist jedoch möglicherweise keine langfristig tragfähige Lösung, da sich dieses Verhalten in Zukunft ändern könnte. Wir empfehlen daher, sich nicht ausschließlich auf diesen Mechanismus zu verlassen. +Es ist wichtig zu beachten, dass __fehlgeschlagene Anfragen Ihr Rate-Limit nicht beeinträchtigen__. Das kontinuierliche Wiederholen einer Anfrage ist jedoch möglicherweise keine langfristige Lösung, da sich dieses Verhalten in der Zukunft ändern könnte. Wir empfehlen daher, sich nicht ausschließlich auf diesen Mechanismus zu verlassen. -Die Python-Bibliotheken __[Backoff](https://pypi.org/project/backoff/)__ und __[Tenacity](https://pypi.org/project/tenacity/)__ sind gute Ausgangspunkte für die Implementierung von Abmilderungsstrategien. +Die Python-Bibliotheken __[Backoff](https://pypi.org/project/backoff/)__ und __[Tenacity](https://pypi.org/project/tenacity/)__ sind gute Ausgangspunkte zur Implementierung von Backoff-Strategien. -## Endpunkt-Lebenszyklus und Veralterung +## Lebenszyklus und Deprecation von Endpunkten -### Veraltungspolitik +### Deprecation-Richtlinie -Cloud Temple verpflichtet sich, die API-Kompatibilität im Laufe der Zeit aufrechtzuerhalten. Wenn es jedoch notwendig ist, die API weiterzuentwickeln (neue Funktionen, Optimierungen, Sicherheitskorrekturen), können einige Endpunkte veraltet und dann entfernt werden. +Cloud Temple verpflichtet sich, die Kompatibilität seiner API langfristig zu gewährleisten. Wenn es jedoch erforderlich ist, die API weiterzuentwickeln (neue Funktionen, Optimierungen, Sicherheitsupdates), können bestimmte Endpunkte deprecated und anschließend entfernt werden. -#### 3-Monats-Mindestregel +#### Regel für mindestens 3 Monate Wenn ein Endpunkt als veraltet markiert wird: -1. **Offizielle Ankündigung**: Die Veraltung wird in den Konsolen-Release-Notes angekündigt -2. **Übergangsphase**: Der Endpunkt bleibt **mindestens 3 Monate** nach der Ankündigung **zugänglich und funktionsfähig** -3. **Entfernungsdatum**: Ein spezifisches endgültiges Entfernungsdatum wird zum Zeitpunkt der Ankündigung mitgeteilt +1. **Offizielle Ankündigung**: Die Deprecation wird in den Release Notes der Konsole angekündigt +2. **Übergangsphase**: Der Endpunkt bleibt **mindestens 3 Monate nach der Ankündigung zugänglich und funktionsfähig** +3. **Löschdatum**: Ein genaues Datum für die endgültige Entfernung wird bereits bei der Ankündigung mitgeteilt 4. **Dokumentierte Alternative**: Der neue Ersatz-Endpunkt ist dokumentiert und verfügbar Diese 3-Monats-Regel gibt Ihnen die notwendige Zeit, Ihren Code anzupassen und zu den neuen Endpunkten zu migrieren. @@ -347,66 +347,65 @@ Diese 3-Monats-Regel gibt Ihnen die notwendige Zeit, Ihren Code anzupassen und z #### Im API-Portal (Swagger) -Veraltete Endpunkte erscheinen durchgestrichen in der Swagger-Dokumentation: +Veraltete Endpoints werden in der Swagger-Dokumentation durchgestrichen angezeigt: -~~POST /v1/alter/endpunkt~~ +~~POST /v1/ancien/endpoint~~ -Die Endpunkt-Beschreibung enthält: -- Das Ankündigungsdatum der Veraltung -- Das geplante Entfernungsdatum -- Den empfohlenen Ersatz-Endpunkt +Die Beschreibung des Endpoints enthält: +- Das Datum der Ankündigung der Veraltung +- Das geplante Datum der Entfernung +- Der empfohlene Ersatz-Endpoint -### Best Practices für das Management von Veraltungen +### Best Practices für den Umgang mit Deprecations -1. **Veraltete Funktionen überwachen**: Überprüfen Sie regelmäßig die veralteten Funktionen in der Konsole, um über bevorstehende Veraltungen informiert zu werden. +1. **Überwachen Sie veraltete Funktionen** : Prüfen Sie regelmäßig die in der Konsole aufgeführten veralteten Funktionen, um über bevorstehende Deprecations informiert zu bleiben. -2. **Ihre Migrationen planen**: Sobald eine Veraltung angekündigt wird, planen Sie die Migration Ihres Codes zum neuen Endpunkt innerhalb von 3 Monaten. +2. **Planen Sie Ihre Migrationen** : Sobald eine Deprecation angekündigt wird, planen Sie die Migration Ihres Codes zum neuen Endpunkt innerhalb von 3 Monaten. -3. **Neue Endpunkte testen**: Testen Sie neue Endpunkte, sobald sie verfügbar sind, auch während der Übergangsphase. +3. **Testen Sie die neuen Endpunkte** : Testen Sie die neuen Endpunkte ab deren Verfügbarkeit, auch während der Übergangsphase. -4. **Ihre Abhängigkeiten dokumentieren**: Führen Sie eine Liste der von Ihrer Anwendung verwendeten Endpunkte, um zukünftige Migrationen zu erleichtern. +4. **Dokumentieren Sie Ihre Abhängigkeiten** : Führen Sie eine Liste der Endpunkte, die Ihre Anwendung verwendet, um zukünftige Migrationen zu erleichtern. ## Best Practices ### Token-Sicherheit -:::danger[Wesentliche Sicherheitsregeln] -- 🚫 Exponieren Sie Ihre Tokens niemals in versioniertem Code (Git, etc.) -- 🔐 Verwenden Sie Umgebungsvariablen zum Speichern von Tokens -- 🎯 Erstellen Sie Tokens mit minimalen Berechtigungen (Prinzip der geringsten Rechte) -- 🔄 Erneuern Sie Ihre Tokens regelmäßig (maximal 12 Monate) -- ⚠️ Widerrufen Sie kompromittierte Tokens sofort +:::danger[Essentielle Sicherheitsregeln] +- 🚫 Tokens niemals in versioniertem Code (Git, etc.) veröffentlichen +- 🔐 Umgebungsvariablen zur Speicherung der Tokens verwenden +- 🎯 Tokens mit minimalen Berechtigungen erstellen (Prinzip der geringsten Rechte) +- 🔄 Tokens regelmäßig erneuern (maximal 12 Monate) +- ⚠️ Kompromittierte Tokens sofort widerrufen ::: ### Fehlerbehandlung -Behandeln Sie immer HTTP-Fehler in Ihrem Code. Achten Sie besonders auf die folgenden Codes: +Behandeln Sie HTTP-Fehler immer in Ihrem Code. Achten Sie besonders auf die folgenden Codes: -| Code | Beschreibung | Empfohlene Aktion | +| Code | Beschreibung | Empfohlene Maßnahme | |------|-------------|-------------------| -| **401** Unauthorized | Abgelaufener oder ungültiger Token | Erneut mit Ihrem PAT authentifizieren | -| **403** Forbidden | Unzureichende Berechtigungen | Token-Rechte überprüfen | -| **429** Too Many Requests | Ratenlimit erreicht | Warten vor erneutem Versuch (Backoff) | +| **401** Unauthorized | Token abgelaufen oder ungültig | Mit Ihrem PAT neu authentifizieren | +| **403** Forbidden | Unzureichende Berechtigungen | Token-Berechtigungen überprüfen | +| **429** Too Many Requests | Ratenbegrenzung erreicht | Vor dem erneuten Versuch warten (backoff) | | **500/503** Server Error | Temporärer Serverfehler | Später erneut versuchen | -### API-Aufruf-Optimierung - -- Paginierung für große Listen verwenden -- Daten zwischenspeichern, die sich selten ändern -- Filter verwenden, um zurückgegebene Daten zu begrenzen +### Optimierung der API-Aufrufe +- Paginierung für umfangreiche Listen verwenden +- Daten, die sich selten ändern, zwischenspeichern +- Filter verwenden, um die zurückgegebenen Daten zu begrenzen - Operationen nach Möglichkeit gruppieren -- Asynchronen Aktivitätsstatus verfolgen anstelle von intensivem Polling +- Den Status asynchroner Aktivitäten verfolgen, anstatt intensives Polling durchzuführen -### Wiederholung mit exponentiellem Backoff +### Retry mit exponentiellem Backoff -Um temporäre Fehler oder Ratenlimiting (HTTP 429) zu behandeln, implementieren Sie eine Wiederholungsstrategie mit exponentiellem Backoff: +Um temporäre Fehler oder Rate Limiting (HTTP 429) zu behandeln, implementieren Sie eine Retry-Strategie mit exponentiellem Backoff: -:::tip[Empfohlene Wiederholungsstrategie] -- ⏱️ **Progressive Wartezeit**: 1s, 2s, 4s, 8s... -- 🎲 **Zufällige Variation**: Verhindert, dass alle Clients gleichzeitig wiederholen -- 🔄 **Wiederholungslimit**: Maximal 3-5 Versuche -- 📚 **Python-Bibliotheken**: [Backoff](https://pypi.org/project/backoff/) oder [Tenacity](https://pypi.org/project/tenacity/) -::: +:::tip[Empfohlene Retry-Strategie] +- ⏱️ **Stufenweise Wartezeit** : 1s, 2s, 4s, 8s... +- 🎲 **Zufällige Variation** : Verhindert, dass alle Clients gleichzeitig erneut versuchen +- 🔄 **Anzahl der Versuche begrenzen** : Maximum 3-5 Versuche +- 📚 **Python-Bibliotheken** : [Backoff](https://pypi.org/project/backoff/) oder [Tenacity](https://pypi.org/project/tenacity/) +::: \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/console/billing/concepts.md b/i18n/de/docusaurus-plugin-content-docs/current/console/billing/concepts.md index 4d6f4d32..fccfb71d 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/console/billing/concepts.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/console/billing/concepts.md @@ -3,106 +3,83 @@ title: Kostenmanager --- import billingDashboardPreview from '@site/docs/console/billing/images/billing_dashboard_preview.png' -import billingDashboardTotal from '@site/docs/console/billing/images/billing_dashboard_consumption_total.png' -import billingDashboardPerProduct from '@site/docs/console/billing/images/billing_dashboard_consumption_per_product.png' -import billingDashboardPerService from '@site/docs/console/billing/images/billing_dashboard_consumption_per_service.png' +import billingDashboardConsumptionTotal from '@site/docs/console/billing/images/billing_dashboard_consumption_total.png' +import billingDashboardConsumptionPerProduct from '@site/docs/console/billing/images/billing_dashboard_consumption_per_product.png' +import billingDashboardConsumptionPerService from '@site/docs/console/billing/images/billing_dashboard_consumption_per_service.png' import billingConsumptionDetails from '@site/docs/console/billing/images/billing_consumption_details.png' import billingPricesList from '@site/docs/console/billing/images/billing_prices_list.png' -Der **Kostenmanager** ist über das Hauptmenü der Cloud Temple Console zugänglich. Er bietet Ihnen einen vollständigen und transparenten Überblick über Ihren Cloud-Ressourcenverbrauch, sodass Sie Ihre Ausgaben eigenständig verwalten können. +## Übersicht + +Der **Kostenmanager** ist das Modul der Cloud Temple Console, das sich der **Transparenz Ihres Verbrauchs** widmet. Er ermöglicht es Ihnen, die Nutzung Ihrer Cloud-Ressourcen innerhalb eines Tenants in Echtzeit zu verfolgen und einen klaren Überblick über Ihre Ausgaben zu erhalten. + +Dieses Modul erfüllt ein grundlegendes Bedürfnis: **zu verstehen, was Sie verbrauchen, wann Sie es verbrauchen und zu welchen Kosten**, ohne in komplexe Tabellen oder detaillierte Rechnungen navigieren zu müssen. :::info -Der Zugriff auf den Kostenmanager erfordert die entsprechenden Rechte in Ihrem Tenant. Bitte kontaktieren Sie Ihren Vertriebsansprechpartner für weitere Informationen und um die Zugangsbedingungen zum Dienst zu erfahren. +Der Kostenmanager zeigt den **tatsächlichen Verbrauch** Ihrer Ressourcen auf dem ausgewählten Tenant an. Die Daten werden regelmäßig aktualisiert, um Ihre aktuelle Nutzung widerzuspiegeln. ::: -## Dashboard - -Das Dashboard des Kostenmanagers ist die Startseite des Moduls. Es bietet eine zusammenfassende Ansicht Ihres gesamten Verbrauchs für den ausgewählten Zeitraum. +## Haupt-Dashboard -Kostenmanager Dashboard +Die Startseite des Kostenmanagers bietet eine grafische Übersicht Ihres Verbrauchs. Beim Öffnen erhalten Sie eine Gesamtsicht, die es ermöglicht, Verbrauchstrends und die größten Kostenposten schnell zu identifizieren. -Von diesem Dashboard aus können Sie: + -- **Einen Analysezeitraum auswählen** (aktueller Monat, vorheriger Monat oder ein benutzerdefinierter Datumsbereich), -- **Zwischen den verschiedenen Tabs navigieren**, um Ihre Verbrauchsanalyse zu verfeinern, -- **Ihre Verbrauchsdaten exportieren**, um sie in Ihre internen Reporting-Tools zu integrieren. +Das Dashboard gliedert sich in mehrere ergänzende Bereiche, die über die Registerkarten oben auf der Seite erreichbar sind. ## Gesamtverbrauch -Der Tab **Gesamtverbrauch** zeigt den im ausgewählten Zeitraum verbrauchten Gesamtbetrag. Er ist der Ausgangspunkt für das Verständnis der allgemeinen Entwicklung Ihrer Cloud-Ausgaben. - -Gesamtverbrauch für den Zeitraum - -Dieses Diagramm ermöglicht es Ihnen zu visualisieren: - -- Den **Gesamtbetrag**, der im Zeitraum verbraucht wurde, -- Die **zeitliche Entwicklung** Ihres Verbrauchs (täglich oder monatlich je nach gewählter Granularität), -- Etwaige **Verbrauchsspitzen**, um Anomalien oder Lastspitzen schnell zu identifizieren. - -:::info -**Diagramm für den aktuellen Monat lesen** - -Für den aktuellen Monat zeigt das Diagramm zwei visuelle Bereiche: +Der Tab **Gesamtverbrauch** bietet eine aggregierte Übersicht über Ihren gesamten Verbrauch im ausgewählten Zeitraum. Dieses Diagramm ermöglicht es Ihnen, die Entwicklung Ihrer Ausgaben im Zeitverlauf zu beobachten und eventuelle Spitzen oder Trends zu identifizieren. -- Der **blaue (ausgefüllte) Bereich** stellt den **tatsächlichen Verbrauch bis dato** dar, d.h. die seit Monatsbeginn tatsächlich verbrauchten Ressourcen, -- Der **orange (schraffierte) Bereich** stellt die **Prognose** bis zum Monatsende dar, berechnet auf Basis Ihrer aktuellen Verbrauchsrate. + -Diese Projektion ermöglicht es Ihnen, Ihr Monatsendbudget in Echtzeit zu antizipieren. -::: +Sie können den **Anzeigezeitraum** anpassen, um Ihre Analyse zu verfeinern: Tag, Woche, Monat oder benutzerdefinierter Zeitraum. Die Kurve des Gesamtverbrauchs ist direkt ablesbar und erfordert keine besonderen technischen Kenntnisse. ## Verbrauch nach Produkt -Der Tab **Verbrauch nach Produkt** ermöglicht es Ihnen, die Aufschlüsselung Ihrer Ausgaben nach den Cloud Temple-Produkten zu identifizieren, die Sie abonniert haben. - -Verbrauchsaufschlüsselung nach Produkt - -Jedes Produkt (IaaS, Speicher, Netzwerk usw.) wird präsentiert mit: +Der Tab **Verbrauch nach Produkt** unterteilt Ihren Verbrauch nach den Hauptkategorien der Cloud Temple-Dienste, die Sie abonniert haben: Compute, Speicher, Netzwerk usw. -- Seinem **relativen Anteil** am Gesamtverbrauch, -- Seinem **absoluten Betrag** für den Zeitraum, -- Der **Tendenz** im Vergleich zum vorherigen Zeitraum. + -Diese Ansicht ist besonders nützlich, um zu identifizieren, welche Produkte die größten Kostenpositionen darstellen, und um Ihre Optimierungsentscheidungen zu lenken. +Diese Ansicht ist besonders nützlich, um **die bedeutendsten Kostenposten zu identifizieren** und Optimierungsentscheidungen gezielt zu treffen. Jedes Produkt wird mit seinem relativen Anteil am Gesamtverbrauch dargestellt, was die Übersicht und den Vergleich erleichtert. -## Verbrauch nach Dienst +## Verbrauch nach Service -Der Tab **Verbrauch nach Dienst** verfeinert die Analyse, indem der Verbrauch auf der Ebene der einzelnen Dienste innerhalb jedes Produkts aufgeschlüsselt wird. +Der Tab **Verbrauch nach Service** bietet ein zusätzliches Detaillierungslevel, indem er den Verbrauch nach **spezifischem Service** innerhalb jedes Produkts aufschlüsselt. -Verbrauchsaufschlüsselung nach Dienst + -Diese detaillierte Ansicht ermöglicht es Ihnen: - -- Genau zu identifizieren, **welche Dienste** am meisten zu Ihrer Abrechnung beitragen, -- Den Verbrauch ähnlicher Dienste zu vergleichen, -- Untergenutzter oder überdimensionierter Dienste zu erkennen, um **Ihren Cloud-Fußabdruck zu optimieren**. +Dieses Granularitätsniveau ermöglicht es Ihnen, die Analyse weiter zu vertiefen: Sie können beispielsweise den Verbrauch Ihrer virtuellen Maschinen, Ihres Blockspeichers, Ihrer Snapshots oder Ihrer Netzwerkbandbreite aufschlüsseln und so genau die Ressourcen identifizieren, die die höchsten Kosten verursachen. ## Verbrauchsdetails -Der Abschnitt **Verbrauchsdetails** listet alle einzelnen Abrechnungszeilen für den ausgewählten Zeitraum auf. Es ist die detaillierteste Ansicht des Kostenmanagers. - -Details der Verbrauchszeilen +Die Ansicht **Verbrauchsdetails** zeigt eine umfassende Tabelle, die alle während des Zeitraums verbrauchten Ressourcen auflistet. Jede Zeile entspricht einer identifizierbaren Ressource (virtuelle Maschine, Speichervolumen, öffentliche IP-Adresse usw.) mit dem zugehörigen Verbrauchsniveau. -Für jede Verbrauchszeile finden Sie: + -- Den **Namen der verbrauchten Ressource**, -- Die verbrauchte **Menge** und die zugehörige **Maßeinheit** (Stunden, GB, Anfragen usw.), -- Den angewendeten **Einheitspreis**, -- Den **Gesamtbetrag** für diese Zeile im Zeitraum. +Diese Details sind wertvoll für Teams, die eine **analytische Aufschlüsselung** ihrer Kosten durchführen oder potenziell ungenutzte Ressourcen identifizieren möchten, die deaktiviert werden können, um die Ausgaben zu optimieren. -Diese Ansicht ist unerlässlich für eine genaue buchhalterische Abstimmung oder für die detaillierte Analyse der Nutzung bestimmter Ressourcen. +## Preisliste -## Preiskatalog +Der Tab **Preisliste** (oder **Preistabelle**) listet alle auf die in Ihrem Tenant verfügbaren Ressourcen anwendbaren Einheitspreise auf. Es handelt sich um den aktuellen Preiskatalog, der es Ihnen ermöglicht, die Kosten neuer Ressourcen vor deren Bereitstellung abzuschätzen. -Der **Preiskatalog** listet die Einheitspreise aller Ressourcen und Dienste auf, die in Ihrem Cloud Temple-Tenant verfügbar sind. + -Einheitspreiskatalog +Jeder Eintrag der Tabelle zeigt Folgendes an: -Dieser Katalog ermöglicht es Ihnen: - -- Die **Kosten** einer neuen Ressource vor der Bestellung zu **antizipieren**, -- **Budgetsimulationen** für Ihre Cloud-Projekte durchzuführen, -- Preise zwischen verschiedenen Ressourcentiers oder -konfigurationen zu vergleichen. +- Die **Ressourcenart** +- Die **Abrechnungseinheit** (pro Stunde, pro GB, pro Einheit usw.) +- Der **Einheitspreis** :::tip -Die im Katalog angezeigten Preise sind die Vertragspreise, die für Ihren Tenant gelten. Sie können je nach Ihrem Cloud Temple-Vertrag von den öffentlichen Preisen abweichen. +Die Preisliste dient als Referenz, um die **Kosten** einer Infrastruktur vor der Bestellung zu **simulieren**. Kombinieren Sie diese Informationen mit den Verbrauchsdaten, um Optimierungspotenziale zu identifizieren. ::: + +## Best Practices + +Um den Kostenmanager optimal zu nutzen, finden Sie hier einige Empfehlungen: + +- **Überwachen Sie regelmäßig** Ihre Nutzung, um Budgetabweichungen schnell zu erkennen. +- **Vergleichen Sie Zeiträume** : Das Tool ermöglicht es Ihnen, die Entwicklung von Monat zu Monat zu analysieren, um Trends zu identifizieren. +- **Verwenden Sie die Service-Ansicht**, um untergenutzte oder vergessene Ressourcen zu identifizieren (alte Snapshots, abgetrennte Volumes usw.). +- **Kreuzen Sie mit der Preistabelle**, um die finanziellen Auswirkungen von Infrastrukturänderungen vor der Umsetzung zu bewerten. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/console/console.md b/i18n/de/docusaurus-plugin-content-docs/current/console/console.md index c9836b02..508a3e6a 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/console/console.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/console/console.md @@ -2,39 +2,99 @@ title: Übersicht --- -## Die Cloud Temple-Konsole +## Die Cloud Temple Konsole -Die Cloud Temple-Konsole ist die integrierte Cloud-Verwaltungsplattform (**Cloud Management Platform**) von Cloud Temple. Sie bildet den zentralen Punkt zur Verwaltung all Ihrer Cloud-Ressourcen und bietet Ihnen eine einheitliche und leistungsstarke Schnittstelle. +Die Cloud Temple Konsole ist die integrierte Cloud-Management-Plattform (**Cloud Management Platform**) von Cloud Temple. Sie bildet den zentralen Anlaufpunkt zur Verwaltung aller Ihrer Cloud-Ressourcen und bietet Ihnen eine einzigartige und leistungsstarke Oberfläche. -Dank der **Konsole** können Sie Ihre Cloud-Infrastrukturen mit großer Einfachheit überwachen und nutzen. Hier eine Übersicht über ihre wichtigsten Funktionen: +Mit der **Konsole** können Sie Ihre Cloud-Infrastrukturen mit großer Einfachheit überwachen und betreiben. Hier finden Sie einen Überblick über die wichtigsten Funktionen:

Das IAM-Modul

-

Entdecken Sie das IAM-Modul (Identity and Access Management) der Cloud Temple-Konsole.

- Hier entlang → +

Erfahren Sie mehr über das IAM-Modul (Identity Access Management) der Cloud Temple Konsole.

+ Hier geht's →

Support

-

Anzeige geplanter Aktionen und Verwaltung von Incidenten

- Hier entlang → +

Visualisierung geplanter Operationen und Incident-Management

+ Hier geht's →

Infrastruktur bereitstellen

-

Neue Ressourcen bestellen und den Bereitstellungsprozess verfolgen.

+

Bestellen und verfolgen Sie die Bereitstellung neuer Ressourcen.

Menüs entdecken →

Metriken

-

Neue Ressourcen bestellen und den Bereitstellungsprozess verfolgen.

+

Bestellen und verfolgen Sie die Bereitstellung neuer Ressourcen.

Menüs entdecken →
+
-

Kostenmanager

-

Verfolgen und analysieren Sie Ihren Cloud-Ressourcenverbrauch nach Produkt und Dienst.

- Auf das Modul zugreifen → +

Kostenverwaltung

+

Verfolgen und analysieren Sie Ihren Cloud-Ressourcenverbrauch nach Produkt und Dienstleistung.

+ Zum Modul wechseln →
+ +### Verwaltung Ihrer Cloud Temple-Produkte und -Dienste + +Die Konsole ermöglicht es Ihnen, Ihre virtuellen Server, Ihren Speicher, Ihre Netzwerke und Ihre Cloud-Dienste effizient über eine zentrale Benutzeroberfläche zu verwalten. + +### Monitoring und Reporting + +Profitieren Sie von einer vollständigen Übersicht über Ihre Ressourcen dank integrierter Monitoring- und Reporting-Tools, um sicherzustellen, dass Ihre Umgebungen optimal funktionieren. + +### Automatisierung und Orchestrierung + +Mit ihrer **leistungsstarken API** vereinfacht die Konsole die Automatisierung sich wiederholender Aufgaben und die Orchestrierung komplexer Workflows. Stellen Sie Ihre Ressourcen mit wenigen Klicks bereit, verwalten und skalieren Sie sie über benutzerdefinierte Skripte. + +### Sicherheit und Compliance + +Die Konsole integriert erweiterte Funktionen für: + +- Identitäten und Zugriffe verwalten, +- Zugriffe filtern, um regulatorische Anforderungen zu erfüllen, +- Ihre Sicherheitsrichtlinien zu stärken. + +### Technischer Support und Kundenservice + +Die Konsole bietet direkten Zugriff auf Ihre Support-Ordner. Sie profitieren von: + +- einem dedizierten Kundensupport zur Lösung Ihrer technischen Probleme, +- einer Unterstützung bei der Ersteinrichtung Ihrer Dienste. + +### Professionelle Dienstleistungen + +Benötigen Sie Expertise? Nutzen Sie die Unterstützung unserer Ingenieure für: + +- Individuelle Beratung, +- Unterstützung bei der Implementierung von Cloud-Architekturen, +- Schulungen für Ihre Teams. + +Das Cloud Temple-Portal **'Console'** ist die integrierte **Cloud-Management-Plattform** (Cloud Management Plateform) von **Cloud Temple**. + +Die Cloud Temple Console ermöglicht es Ihnen, Cloud-Ressourcen wie virtuelle Server, Speicher, Netzwerke und Anwendungsdienste zu verwalten. +Es handelt sich um eine zentralisierte Management-Schnittstelle, mit der Sie Ihre Cloud-Infrastruktur entwerfen und betreiben können. + +Die Cloud Temple Console ermöglicht Ihren Teams insbesondere: + +- **Die Verwaltung Ihrer Cloud Temple-Produkte und -Dienste**, +- **Die Überwachung und Berichterstellung** zum Betrieb Ihrer Cloud-Ressourcen, +- **Automatisierung und Orchestrierung** : Die Console ermöglicht es dank ihrer API, wiederkehrende Aufgaben zu automatisieren und komplexe Workflows zu orchestrieren, um Ihre Cloud-Ressourcen bereitzustellen, zu verwalten und zu skalieren, +- **Sicherheit und Compliance** : Die Console ermöglicht die Identitätskontrolle und Zugriffsfilterung, um die Einhaltung gesetzlicher Vorschriften und Ihrer Sicherheitsrichtlinien zu gewährleisten, +- **Integration von Cloud-Adoption-Rahmenwerken** (Cloud Adoption Framework) : Dank seiner Hybridisierungsfunktionen können Sie einen kontinuierlichen Betrieb mit Drittanbieter-Cloud-Providern (Microsoft Azure et Amazon AWS) von einer einzigen Schnittstelle aus gewährleisten, was die Integration und Verwaltung Ihrer multi-Cloud-Anwendungsumgebungen erleichtert. +- **Zugriff und Verfolgung technischer Support-Tickets** : Ein dedizierter technischer Support ist ebenfalls verfügbar. Dies umfasst den Kundensupport zur Lösung technischer Probleme sowie die Unterstützung bei der Erstkonzfiguration. +- **Die Möglichkeit, professionelle Dienstleistungen zu buchen** : Um Ihre Cloud-Umgebungen effizient zu verwalten, können Ihre Teams die Unterstützung unserer Ingenieure für Beratung, Implementierungshilfe bei Architekturen oder Schulungen in Anspruch nehmen. + +## Zugriff auf Benutzerfunktionen über die API + +Der Zugriff auf alle Funktionen der Konsole ist über die Konsolen-API möglich. +Details zu den Methoden und Konfigurationen finden Sie über **'Profil'** und **'APIs'** + +## Terraform-Provider + +Cloud Temple stellt Ihnen einen [Terraform-Provider](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest) zur Verfügung, um Ihre Cloud-Plattform *"als Code"* zu steuern. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/console/console_quickstart.md b/i18n/de/docusaurus-plugin-content-docs/current/console/console_quickstart.md index ddc9824b..705ac2bb 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/console/console_quickstart.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/console/console_quickstart.md @@ -16,192 +16,191 @@ import shivaSupportCriticities from '@site/docs/console/images/shiva_incident_cr ## Voraussetzungen -- Eine Cloud Temple-Angebot abgeschlossen haben. Um einfach abzuschließen, können Sie uns [kontaktieren](https://www.cloud-temple.com/contactez-nous/) oder per E-Mail an die Adresse __contact@cloud-temple.com__ erreichen. -- Zugriff auf die Console haben. -- Ihre öffentliche IPv4-Adresse in der vertrauenswürdigen Zone von Cloud Temple angegeben haben (der Zugriff auf die Console ist auf identifizierte vertrauenswürdige Adressen beschränkt). +- Ein Cloud Temple-Produkt abonniert haben. Für eine einfache Buchung können Sie uns [uns kontaktieren](https://www.cloud-temple.com/contactez-nous/) oder per E-Mail an __contact@cloud-temple.com__. +- Zugriff auf die Konsole haben +- Die öffentliche IPv4-Adresse in der Cloud Temple-Vertrauenszone hinterlegt haben (der Zugriff auf die Konsole ist auf identifizierte vertrauenswürdige Adressen beschränkt) -## Verbindung mit Ihrem Cloud Temple-Mandanten +## Verbindung mit Ihrem Cloud Temple-Tenant -Die Konsole ist über die folgende URL erreichbar: [Console](https://shiva.cloud-temple.com) oder über die direkte URL, die Ihnen per E-Mail mitgeteilt wurde. +Die Konsole ist über die folgende URL erreichbar: [Konsole](https://shiva.cloud-temple.com) oder direkt über die URL, die Ihnen per E-Mail mitgeteilt wurde. -Auf der ersten Seite können Sie die [Organisation](iam/concepts.md#organizations) auswählen, in der Ihr Benutzer erstellt wurde. -Nach Eingabe der Firma klicken Sie auf __'Anmelden'__. +Die erste Seite ermöglicht die Auswahl der [Organisation](iam/concepts.md#organisations), in der Ihr Benutzer erstellt wurde. +Nachdem das Unternehmen angegeben wurde, klicken Sie bitte auf __'Anmelden'__. -Anschließend werden Sie auf eine Seite weitergeleitet, auf der Sie sich authentifizieren müssen. +Sie werden anschließend zu einer Seite weitergeleitet, auf der Sie sich authentifizieren müssen. Nach der Anmeldung gelangen Sie auf diese Seite. -Hier finden Sie alle Metriken zu den Produkten, die in Ihrem Bereich abonniert sind. Bei Problemen mit Ihren VMware- und/oder OpenIaaS-Produkten werden entsprechende Warnungen angezeigt; die Farbcodierung entspricht der Schwere der Meldung. +Hier finden Sie alle Metriken zu den Produkten, die in Ihrem Zuständigkeitsbereich abonniert sind. Bei Problemen mit Ihren VMware- und/oder OpenIaaS-Produkten werden Warnungen angezeigt; die Farbe entspricht ihrer Priorität. -## Language Management +## Sprachverwaltung -The console is available in __French__ and __English__. You can change the operating language using the __language__ icon located in the top-right corner of the screen. +Die Konsole ist in __Französisch__ und __Englisch__ verfügbar. Sie können die Arbeitssprache über das Symbol __Sprache__ oben rechts auf dem Bildschirm ändern. -To change a user's language, go to their __'Profile'__, in the top-right corner of the screen, and select __'User Settings'__. +Die Änderung der Sprache für einen Benutzer erfolgt in seinem __'Profil'__, oben rechts auf dem Bildschirm, unter den __'Benutzereinstellungen'__. -The configuration is set individually for each tenant [Tenant](iam/concepts.md#tenant). +Die Konfiguration wird für jeden Tenant [Tenant](iam/concepts.md#tenant) vorgenommen. -## Technischer Support +## Zugriff auf den technischen Support -Sie können jederzeit die __Cloud Temple-Support-Team__ über die __Schwimmring-Ikone__ oben rechts auf dem Bildschirm kontaktieren. +Sie können __das Cloud Temple Support-Team__ jederzeit über __das 'Rettungsring'-Symbol__ oben rechts auf dem Bildschirm kontaktieren. -Sie werden während des gesamten Support-Anfrage-Prozesses unterstützt. +Während des gesamten Vorgangs zur Supportanfrage werden Sie Schritt für Schritt geführt. -Der erste Schritt ist die Identifizierung der Art der Support-Anfrage: +Der erste Schritt besteht in der Identifizierung der Art der Supportanfrage: -- Beratung zur Nutzung eines Produkts (außer bei Incident), -- Unterstützung im Zusammenhang mit Ihrem Kundenkonto, -- Melden eines Incidents oder Anfordern technischer Unterstützung. -- Anfordern der Unterstützung eines professionellen Dienstleisters (Bereitstellung eines Cloud Temple-Engineers für ein spezifisches Problem). +- Beratung zur Nutzung eines Produkts anfordern (kein Vorfall), +- Unterstützung in Bezug auf Ihr Kundenkonto anfordern, +- Einen Vorfall melden oder technischen Support anfordern. +- Unterstützung durch einen professionellen Dienst anfordern (Bereitstellung eines Cloud Temple-Ingenieurs für ein spezifisches Problem). -Anschließend können Sie zusätzliche Informationen angeben und Dateien beifügen (z. B. Bilder oder Protokolle). +Anschließend haben Sie die Möglichkeit, Präzisierungen vorzunehmen und Dateien anzuhängen (z. B. Bilder oder Protokolle). -Der Auftraggeber kann außerdem in der Ticket-Beschreibung einen Kritikalitätsgrad (P1 bis P5) angeben, insbesondere bei Sicherheitsvorfällen, wie z. B.: +Der Kunde kann im Ticket-Description bei einem Sicherheitsvorfall zudem einen Kritikalitätsgrad (P1 bis P5) angeben, wie folgt: __KRITISCH (P1)__: -- Verdacht auf Datenleak sensibler Informationen -- Erkennung eines unerlaubten Zugriffs auf Ihre Daten -- Kompromittierung Ihrer Administratoren-Zugangsdaten -- Vollständige Unzugänglichkeit Ihrer kritischen Dienste -- Anomalies im Verhalten sensibler Daten -- Verletzung personenbezogener Daten +- Verdacht auf Datenleck sensibler Daten +- Erkennung eines unbefugten Zugriffs auf Ihre Daten +- Kompromittierung Ihrer Administrationsanmeldedaten +- Totalausfall Ihrer kritischen Dienste +- Anormale Aktivitäten bei sensiblen Daten +- Verstoß gegen den Schutz personenbezogener Daten -__HOCH (P2)__: +__HOCH (P2)h__: -- Störungen bei Benutzerzugängen -- Anomalie im Verschlüsselungsverfahren Ihrer Daten +- Fehlfunktion der Benutzerzugänge +- Anomalie in der Verschlüsselung Ihrer Daten - Verlust des Zugriffs auf bestimmte kritische Funktionen - Inkonsistenzen in den Daten -- Schwere Verzögerungen, die die Geschäftsaktivität beeinträchtigen +- Massive Verzögerungen, die den Betrieb beeinträchtigen -__MITTEL (P3)__: +__MITTLER (P3)__: - Lokal begrenztes Leistungsproblem -- Incident an einer nicht-kritischen Funktion -- Konfigurationsfehler mit begrenztem Auswirkungsumfang -- Punktuelle Zugriffsschwierigkeiten +- Vorfall bei einer nicht kritischen Funktion +- Konfigurationsfehler mit begrenzter Auswirkung +- Vorübergehende Zugriffsprobleme -__NIEDRIG (P4)__: +__GERING (P4)__: - Anfrage zur Untersuchung -- Anomalie ohne direkten Einfluss -- Frage zur Konformität +- Anomalie ohne direkte Auswirkung +- Compliance-Frage - Bedarf an technischer Klärung -__OPERATIV (P5)__: +__OPERATIVER DIENST (P5)__: -- Operativer Service ohne unmittelbares Risiko +- Betriebsbereiter Dienst ohne unmittelbares Risiko -Nach Abschluss Ihrer Anfrage können Sie Ihre Anfragen über die __Schwimmring-Ikone__ oben rechts auf dem Bildschirm wiederfinden: +Nach Einreichung Ihrer Anfrage können Sie diese über __das 'Rettungsring'-Symbol__ oben rechts auf dem Bildschirm einsehen: -## Zugriff auf Benutzerfunktionen über die Web-Oberfläche +## Zugriff auf Benutzerfunktionen über die Weboberfläche -Alle für Ihren Benutzer (abhängig von seinen Berechtigungen) verfügbaren Funktionen befinden sich auf der linken Seite des Bildschirms im grünen Bereich. Die Funktionen sind nach Modulen gruppiert. Dazu gehören hauptsächlich: +Alle Funktionen, die Ihrem Benutzer (je nach Berechtigungen) zugänglich sind, befinden sich links auf dem Bildschirm im grünen Banner. +Die Funktionen sind nach Modulen gruppiert. Dazu gehören hauptsächlich : -- Der __Bestand__ Ihrer Ressourcen, -- Die __Verfolgung von Operationen__, -- Die __Steuerung von IaaS-Ressourcen__ (Berechnung, Speicher, Netzwerk, ...), -- Die __Steuerung von OpenIaaS-Ressourcen__ (Berechnung, Speicher, Netzwerk, ...), -- Der Zugriff auf __zusätzliche Dienste__ (Bastion, Monitoring, ...), -- Die __Verwaltung Ihrer Organisation__ (Verwaltung von Mandanten, Berechtigungen, ...). +- Das __Inventar__ Ihrer Ressourcen, +- Das __Betriebstracking__, +- Das __Management der IaaS-Ressourcen__ (Compute, Storage, Netzwerk, ...) +- Das __Management der OpenIaaS-Ressourcen__ (Compute, Storage, Netzwerk, ...) +- Der Zugriff auf __Zusatzdienste__ (Bastion, Monitoring, ...) +- Die __Verwaltung Ihrer Organisation__ (Management von Tenants, Berechtigungen, ...) -Die Aktivierung eines Moduls für einen Benutzer hängt von dessen Berechtigungen ab. Zum Beispiel ist das Modul __'Bestellung'__ nicht verfügbar, wenn der Benutzer die Berechtigung __'ORDER'__ nicht besitzt. - -Im Folgenden finden Sie eine Übersicht über die verfügbaren Module. Regelmäßig werden neue Module zur Konsole hinzugefügt: +Die Aktivierung eines Moduls für einen Benutzer hängt von dessen Berechtigungen ab. So ist das Modul __'Bestellung'__ beispielsweise nicht verfügbar, wenn der Benutzer nicht über die Berechtigung __'ORDER'__ verfügt. +Nachfolgend eine Übersicht der verfügbaren Module. Die Konsole wird regelmäßig um neue Module erweitert :
-- __Dashboard__: ermöglicht eine schnelle Übersicht über den __Gesamtbestand an Rechen- und Speicherressourcen__, die Statistiken zur __Sicherung__ sowie eine __Zusammenfassung der Support-Fälle__, -- __Bestand__: bietet eine Übersicht über alle Ihre Ressourcen des Typs __'virtuelle Maschinen'__. Wenn __Tags__ verwendet werden, ermöglicht es eine Ansicht nach __Tag__ (z. B. geschäftlich, anwendungsbezogen, ...), -- __Infogérance__: gewährt Zugriff auf die Verfolgung Ihrer __Support-Anfragen__ und die __Metriken der Dienste__, -- __IaaS__: ermöglicht die __Steuerung Ihrer VMware-IaaS-Infrastrukturen__ (virtuelle Maschinen, Cluster, Hypervisoren, Replikationen, Sicherungen, ...), -- __OpenIaaS__: ermöglicht die __Steuerung der Xen Orchestra-Ressourcen__ (virtuelle Maschinen, Sicherungen, ...), -- __OpenShift__: ermöglicht die Steuerung Ihrer **RedHat OpenShift-PaaS-Architektur** sowie die Verwaltung Ihrer Container über die drei Verfügbarkeitszonen der Plattform. -- __Bastion__: ermöglicht das Bereitstellen und Steuern von Bastion-Appliances für SSH/RDP in Ihren Netzwerken, -- __Netzwerk__: ermöglicht die Steuerung von __Netzwerken der Ebene 2 und 3__, __öffentlichen IP-Adressen__ sowie Ihrer __Telekommunikationsverbindungen__, -- __Colocation__: bietet eine Übersicht über die Geräte in den Bereichen der __gemeinsamen oder dedizierten Colocation__, -- __Bestellung__: ermöglicht die Bestellung von Ressourcen und die Verfolgung der Bereitstellungen, -- __Administration__: fasst die Administrationsfunktionen für Benutzer und Mandanten sowie den Zugriff auf die globale Protokollierung zusammen. +- __Dashboard__ : ermöglicht einen schnellen Überblick über die __Gesamtzahl der Compute- und Storage-Ressourcen__, die __Backup_-Statistiken und eine __Zusammenfassung der Support-Tickets__, +- __Inventar__ : ermöglicht einen Überblick über alle Ihre Ressourcen vom Typ __'virtuelle Maschinen'__. Bei Verwendung von __Tags__ ermöglicht es eine Ansicht nach __Tag__ (z. B. Geschäftsbereich, Anwendung, ...), +- __Managed Services__ : ermöglicht den Zugriff auf das Tracking Ihrer __Support-Anfragen__ und die __Service-Metriken__, +- __IaaS__ : ermöglicht das __Management der VMware IaaS-Infrastrukturen__ (Virtuelle Maschinen, Cluster, Hypervisor, Replikationen, Backups, ...), +- __OpenIaaS__ : ermöglicht das __Management der Xen Orchestra-Ressourcen__ (Virtuelle Maschinen, Backups, ...), +- __OpenShift__ : ermöglicht das Management Ihrer **RedHat OpenShift PaaS-Architektur** und das Management Ihrer Container in den 3 Verfügbarkeitszonen der Plattform. +- __Bastion__ : Ermöglicht das Bereitstellen und Management von SSH/RDP-Bastion-Appliances in Ihren Netzwerken, +- __Netzwerk__ : ermöglicht das Management von __Layer-2- und Layer-3-Netzwerken__, __öffentlichen IPs__ und Ihren __Telekommunikationsleitungen__, +- __Colocation__ : Bietet einen Überblick über Geräte in Zonen mit __gemeinsamer oder dedizierter Colocation__, +- __Bestellung__ : Ermöglicht die Bestellung von Ressourcen und das Tracking von Bereitstellungen, +- __Administration__ : Bündelt die Verwaltungsfunktionen für Benutzer und Tenants sowie den Zugriff auf die globale Protokollierung.
+Die Symbole __'NEW'__ bedeuten, dass das betreffende Produkt bereitgestellt wurde, aber noch nicht für das __SecNumCloud-Angebot__ zertifiziert ist, und __'BETA'__ bedeuten, dass das betreffende Produkt bereitgestellt und kürzlich für das __SecNumCloud-Angebot__ zertififiziert wurde. -Die Piktogramme __'NEW'__ bedeuten, dass das betreffende Produkt bereitgestellt wurde, aber noch nicht als __SecNumCloud-Angebot__ qualifiziert ist. Die Piktogramme __'BETA'__ bedeuten, dass das betreffende Produkt bereitgestellt wurde und kürzlich als __SecNumCloud-Angebot__ qualifiziert wurde. - -__Protokollierung – Verfolgung von Aktivitäten__ +__Protokollierung - Aktivitätsverfolgung__ ===================================== -Die Seite „Aktivitäten“ dient dazu, eine vollständige Übersicht über alle Lese- und Schreibvorgänge innerhalb der Konsole bereitzustellen und so eine erhöhte Nachvollziehbarkeit und Sicherheit zu gewährleisten. Sie hebt die beiden Hauptregisterkarten „Kürzlich“ und „Archiviert“ hervor. +Die Aktivitätsseite dient dazu, einen vollständigen Überblick über alle Lese- und Schreiboperationen innerhalb der Konsole zu bieten und gewährleistet so eine verbesserte Nachverfolgbarkeit und Sicherheit. Sie hebt die beiden Hauptregisterkarten hervor : Aktuell und Archivierte. -### __Page Structure__ +### __Seitenstruktur__ -#### __Tabs__ +#### __Register__ -- __Recent__ +- __Aktuell__ -- Recent operations -- Real-time monitoring +- Aktuelle Vorgänge +- Echtzeitüberwachung -- __Archived__ +- __Archiviert__ -- Operations over a longer period -- Archived operations for traceability and compliance +- Vorgänge über einen längeren Zeitraum +- Archivierte Vorgänge zur Rückverfolgbarkeit und Compliance -#### __Displayed Information__ +#### __Angezeigte Informationen__ -- Date and Time +- Datum und Uhrzeit -- Operation Type +- Operationstyp - Status -- User -- Operation Description +- Benutzer +- Operationsbeschreibung -#### __Funktion__ +#### __Funktionalität__ -- Suche/Filter für spezifische Operationen +- Suche/Filterung für spezifische Operationen -### __Usage__ +### __Nutzung__ -- __Access:__ permission `activity_read` -- __Navigation:__ - - Select the "Recent" tab for real-time operations. - - Choose "Archived" to view the history. - - Use search and filtering features to locate specific operations. +- __Zugriff :__ Berechtigung `activity_read` +- __Navigation :__ + - Wählen Sie die Registerkarte „Aktuell“ für Echtzeitvorgänge. + - Wählen Sie „Archiviert“, um den Verlauf einzusehen. + - Nutzen Sie die Such- und Filterfunktionen, um bestimmte Vorgänge zu finden. -#### __Compliance Note__ +#### __Hinweis zur Konformität__ -In accordance with the SecNumCloud certification, the retention period for Cloud Temple console events is a minimum of __6 months__, ensuring compliance with security and traceability requirements. +Gemäß der SecNumCloud-Qualifikation beträgt die Mindestspeicherdauer der Ereignisse der Cloud-Temple-Konsole __6 Monate__, wodurch somit die Einhaltung der Sicherheits- und Rückverfolgbarkeitsanforderungen gewährleistet wird. -## Viewing the latest updates +## Anzeige der neuesten Updates -Click on the __'New Features'__ icon at the bottom left of the green banner. You will find detailed information about the changes for each version of the Cloud Temple console. +Klicken Sie unten links im grünen Banner auf das Symbol __'Neuigkeiten'__. Sie erhalten die Details der Änderungen für jede Version der Cloud Temple-Konsole. -## Zugriff auf Benutzerfunktionen über die API +## Zugriff auf die Benutzerfunktionen über die API -Der Zugriff auf alle Funktionen der Console ist über die Console-API möglich. Sie können die Verben und Konfigurationen detailliert über __'Profil'__ und __'APIs'__ einsehen: +Der Zugriff auf alle Funktionen der Konsole ist über die Konsolen-API möglich. Details zu den Verben und Konfigurationen finden Sie über __'Profil'__ und __'APIs'__ : -## Terraform Provider +## Terraform-Provider -Cloud Temple vous met à disposition un [Terraform-Provider](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest) pour piloter votre plateforme Cloud *"as code"*. +Cloud Temple stellt Ihnen einen [Terraform-Provider](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest) zur Verfügung, um Ihre Cloud-Plattform *"als Code"* zu steuern. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/console/iam/concepts.md b/i18n/de/docusaurus-plugin-content-docs/current/console/iam/concepts.md index df0ea6e2..21e8e386 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/console/iam/concepts.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/console/iam/concepts.md @@ -17,328 +17,335 @@ import shivaProfil_006 from '@site/docs/console/iam/images/shiva_profil_006.png' import shivaProfil_007 from '@site/docs/console/iam/images/shiva_profil_007.png' import shivaTenantRessources_01 from '@site/docs/console/iam/images/shiva_tenant_ressources_01.png' -## Users +## Benutzer -Access accounts for the Console are created by the sponsor's master account via invitation (regardless of the authentication repository used). -Credentials are global to your [Organization](#organizations). +Die Zugriffskonten für die Konsole werden vom Masterkonto des Auftraggebers auf Einladung erstellt (unabhängig vom Authentifizierungsspeicher). +Die Anmeldeinformationen sind für Ihre [Organisation](#organisations) global. -*__Note:__ [Identity federation is managed at the organization level](#authentication-mechanisms)* +*__Hinweis :__ [Die Identitätsföderierung wird auf Organisationsebene verwaltet](#mécanismes-dauthentification)* -### Erstellung eines Benutzerkontos in Ihrer Organisation +### Erstellen eines Benutzerkontos in Ihrer Organisation -Die Erstellung eines Benutzerkontos in Ihrer Organisation erfolgt über eine Einladung. Um einen Benutzer in einer [Organisation](#organizations) einzuladen, navigieren Sie im linken Menüband (grüner Balken) zu __'Administration'__ und dann zum Untermenü __'Benutzer'__. +Die Erstellung eines Benutzerkontos in Ihrer Organisation erfolgt per Einladung. Um einen Benutzer in eine [Organisation](#organisations) einzuladen, navigieren Sie im Menü __'Verwaltung'__ links auf Ihrem Bildschirm in der grünen Leiste und anschließend im Untermenü __'Benutzer'__. -Klicken Sie auf die Schaltfläche __'Neuer Benutzer'__ auf der Benutzerseite. +Klicken Sie auf der Benutzerseite auf die Schaltfläche __'Neuer Benutzer'__. -Geben Sie anschließend die E-Mail-Adresse des Benutzers ein. +Geben Sie anschließend die E-Mail-Adresse des Benutzers ein -Der Benutzer erhält dann eine E-Mail zur Bestätigung. +Der Benutzer erhält daraufhin eine Bestätigungs-E-Mail. -Nach Abschluss der Überprüfung kann sich der Benutzer auf der Konsole anmelden. +Nach Abschluss der Bestätigung kann sich der Benutzer bei der Konsole anmelden. ### Zuweisung von Berechtigungen an einen Benutzer -Die Verwaltung von Benutzerberechtigungen erfolgt über die Benutzerseite. +Die Verwaltung der Benutzerrechte erfolgt über die Benutzerseite. -Standardmäßig hat ein Benutzer keine Berechtigungen. Der Administrator, der die Einladung versandt hat, muss daher die erforderlichen Berechtigungen für die Tätigkeit des Benutzers erteilen. Dazu klicken Sie einfach auf das Menü __'Aktionen'__ des Benutzers und wählen die Option __'Bearbeiten'__. +Standardmäßig hat ein Benutzer keine Rechte. Daher muss der Administrator, der die Einladung gesendet hat, ihm die für seine Tätigkeit erforderlichen Rechte erteilen. Klicken Sie einfach auf das Menü __'Aktionen'__ des Benutzers und wählen Sie die Option __'Bearbeiten'__. -Das Menü zur Aktivierung von Berechtigungen wird nun angezeigt: +Das Menü zur Aktivierung der Rechte erscheint dann: -Die Konfiguration der Berechtigungen muss für jeden [Tenant](#tenant) der [Organisation](#organizations) separat durchgeführt werden. +Die Konfiguration der Berechtigungen muss für jeden [Tenant](#tenant) der [Organisation](#organisations) erfolgen. -Die Liste der Berechtigungen und ihre Definitionen ist [hier](#permissions) verfügbar. +Die Liste der Berechtigungen und deren Definitionen ist [hier](#permissions) verfügbar. -### Re-registration of a user +### Neuanmeldung eines Benutzers -When a user has been provisioned but did not validate their registration within the expiration period of the email sent by the Console, they can no longer confirm their registration. In such cases, it is possible to resend a link allowing the user to renew their initial registration. +Wenn ein Benutzer provisioniert wurde, seine Registrierung jedoch nicht innerhalb der in der von der Konsole gesendeten E-Mail angegebenen Ablaufzeit bestätigt hat, kann er seine Registrierung nicht mehr bestätigen. In diesem Fall kann ihm ein Link erneut zugesendet werden, damit er seine Erstregistrierung wiederholt. -To re-register a user, go to the __'User'__ tab in the Administration panel, located in the lower-left corner of the screen. +Die Neuanmeldung eines Benutzers erfolgt im Reiter __'Benutzer'__ im Verwaltungsbereich unten links auf dem Bildschirm. -Select the user you wish to re-register, then click the action button at the end of the corresponding row and choose __'Re-registration'__. +Wählen Sie den Benutzer aus, den Sie erneut anmelden möchten, und klicken Sie dann auf die Aktionsschaltfläche am Ende der Zeile und anschließend auf __'Neuanmeldung'__. -__Warning__: Make sure you are the original requester of the re-registration for your user account. Please report any requests that do not originate from you via a support ticket. +__Warnung__: Stellen Sie sicher, dass Sie selbst der Auslöser der Neuanmeldungsanfrage für Ihr Benutzerkonto sind. Bitte melden Sie alle Anfragen, die nicht von Ihnen stammen, über ein Support-Ticket. -### Update your profile +### Profil aktualisieren -This action is only available for local accounts (non-SSO). +Diese Aktion ist nur für lokale Konten (kein SSO) verfügbar. -Go to your __'Profile'__, located in the top right corner of the screen, then select __'User Settings'__ and choose the __'Update your profile'__ action. +Wählen Sie oben rechts auf dem Bildschirm in Ihrem __'Profil'__ die Option __'Benutzereinstellungen'__ und wählen Sie die Aktion __'Profil aktualisieren'__ aus. -Next, go to your email inbox and click on the link generated by the Console. Simply follow the steps to update your profile. +Rufen Sie anschließend Ihr Postfach auf und klicken Sie auf den von der Konsole generierten Link. Folgen Sie einfach den Schritten, um Ihr Profil zu aktualisieren. -__Warning__: Make sure you are the original requester of the profile update. Please report any requests that do not originate from you via a support ticket. +__Warnung__: Stellen Sie sicher, dass Sie die Anfrage zur Profilaktualisierung selbst gestellt haben. Bitte melden Sie alle Anfragen, die nicht von Ihnen stammen, über ein Support-Ticket. -### Password Reset +### Passwort zurücksetzen -This action is available only for local accounts (non-SSO). +Diese Aktion ist nur für ein lokales Konto (kein SSO) verfügbar. -Go to your __'Profile'__, located in the top right corner of the screen, then select __'User Settings'__ and choose the __'Reset Password'__ action. +Wählen Sie in Ihrem __'Profil'__ oben rechts auf dem Bildschirm und dann __'Benutzereinstellungen'__ aus, und wählen Sie die Aktion __'Passwort zurücksetzen'__ aus. -Next, go to your email inbox and click on the link generated by the Console. Simply follow the steps to update your password. +Rufen Sie anschließend Ihre E-Mail-Box auf und klicken Sie auf den von der Konsole generierten Link. Folgen Sie einfach den Schritten, um Ihr Passwort zu aktualisieren. -__Warning__: Make sure you are the one initiating the password reset request. Please report any requests that do not originate from you via a support ticket. +__Warnung__: Stellen Sie sicher, dass Sie selbst der Auslöser der Anfrage zum Zurücksetzen Ihres Passworts sind. Bitte melden Sie alle Anfragen, die nicht von Ihnen stammen, über ein Support-Ticket. -### Reset of Two-Factor Authentication +### Zurücksetzen der Multi-Faktor-Authentifizierung -This action is only available for local accounts (non-SSO). +Diese Aktion ist nur für einen lokalen Benutzeraccount (kein SSO) verfügbar. -Go to your __'Profile'__, located in the top right corner of the screen, then select __'User Settings'__ and choose the __'Reset MFA'__ action. +Wählen Sie oben rechts auf dem Bildschirm in Ihrem __'Profil'__ und anschließend __'Benutzereinstellungen'__ aus, und wählen Sie die Aktion __'MFA zurücksetzen'__ aus. -Next, go to your email inbox and click on the link generated by the Console. Simply follow the steps to update your two-factor authentication. +Rufen Sie anschließend Ihr E-Mail-Postfach auf und klicken Sie auf den von der Konsole generierten Link. Folgen Sie einfach den Schritten, um Ihre Multi-Faktor-Authentifizierung zu aktualisieren. -__Warning__: Make sure you are the one initiating the request to reset your two-factor authentication. Please report any requests that do not originate from you via a support ticket. +__Warnung__: Stellen Sie sicher, dass Sie die Zurücksetzungsanfrage für Ihre Multi-Faktor-Authentifizierung selbst initiiert haben. Bitte melden Sie alle Anfragen, die nicht von Ihnen stammen, über ein Support-Ticket. -### Deleting a user +### Löschen eines Benutzers -To delete a user, go to the __'Users'__ tab in the Administration panel, located in the lower-left corner of the screen. +Das Löschen eines Benutzers erfolgt im Reiter __'Benutzer'__ im Verwaltungsbereich unten links auf dem Bildschirm. -Select the user you wish to delete, then click the action button at the end of the row and choose __'Delete'__. +Wählen Sie den zu löschenden Benutzer aus, klicken Sie dann auf die Aktionsschaltfläche am Ende der Zeile und anschließend auf __'Löschen'__. -Note: You cannot delete yourself, and you cannot delete a user marked as __'Owner'__. +Hinweis: Sie können sich nicht selbst löschen und keinen Benutzer vom Typ __'Besitzer'__ löschen. -### Disconnect +### Abmelden -To log out a user, go to their __'Profile'__, located in the top right corner of the screen, and select __'Log out'__. +Die Abmeldung eines Benutzers erfolgt in seinem __'Profil'__ oben rechts auf dem Bildschirm, gefolgt von __'Abmelden'__. -Automatic logout occurs when the session's JWT token expires. +Eine automatische Abmeldung erfolgt bei Ablauf des Sitzungs-JWT-Tokens (JWT Token). -### Change the language of a user +### Sprache eines Benutzers ändern -Changing a user's language is done in their __'Profile'__, located in the top right corner of the screen, under __'User Settings'__. +Die Änderung der Sprache eines Benutzers erfolgt in seinem __'Profil'__, oben rechts auf dem Bildschirm, in den __'Benutzereinstellungen'__. -The configuration is set individually for each tenant [Tenant](#tenant). +Die Konfiguration erfolgt für jeden Tenant [Tenant](#tenant). -### Thematic Notifications Subscription +### Abonnement für themenspezifische Benachrichtigungen -Managing subscriptions allows you to receive emails related to activated themes, which are automatically sent when corresponding events occur. +Die Verwaltung der Abonnements ermöglicht den Empfang von E-Mails zu den aktivierten Themen, die automatisch bei Auftreten entsprechender Ereignisse versendet werden. -This feature is accessible in the user profile, under the "My Subscriptions" tab: +Sie ist im Benutzerprofil unter der Registerkarte "Meine Abonnements" verfügbar: -For example, in the event of an incident, specific email notifications related to this theme will be generated. + Beispielsweise werden im Falle eines Vorfalls E-Mail-Benachrichtigungen, die diesem Thema zugeordnet sind, generiert. -The list of available themes may evolve and gradually expand to adapt to changing operational needs and environment requirements. +Die Liste der verfügbaren Themen kann sich entwickeln und schrittweise erweitert werden, um sich an die Anforderungen und Veränderungen in unserem Betriebsumfeld anzupassen. -## Permissions +## Berechtigungen -The Console allows for fine-grained management of user rights within an organization, with segregation by tenant. -Initially, it is the primary account of the sponsor that enables the initial configuration of accounts and associated permissions. -Subsequently, the __'iam_write'__ permission allows an account to manage the permissions of other users. +Die Konsole ermöglicht eine feingranulare Rechteverwaltung für die Benutzer einer Organisation mit einer Tenant-Trennung. +Anfangs ermöglicht das Hauptkonto des Sponsors die Erstkonfiguration der Konten und der zugehörigen Berechtigungen. +Im weiteren Verlauf ermöglicht die Berechtigung __'iam_write'__ einem Konto, die Berechtigungen anderer Benutzer zu verwalten. -### Available permissions for users in your organization +### Verfügbare Berechtigungen für Benutzer Ihrer Organisation -When a user is created, they have no permissions by default. Each permission is assigned individually and operates in isolation, without overlap with other permissions. Permissions are applied in conjunction, meaning a user must have all required permissions to perform a specific action. +Wenn ein Benutzer erstellt wird, hat er standardmäßig keine Berechtigungen. Jede Berechtigung wird einzeln zugewiesen und funktioniert isoliert, ohne Überschneidungen mit anderen Berechtigungen. Sie werden kombiniert angewendet, was bedeutet, dass ein Benutzer über alle erforderlichen Berechtigungen verfügen muss, um eine bestimmte Aktion auszuführen. -The following permissions are configurable for each user and for each tenant in your organization: +Die folgenden Berechtigungen können für jeden Benutzer und für jeden Tenant Ihrer Organisation konfiguriert werden: -- __"read" permissions__: allow only reading resources, without the ability to modify them. -- __"write" permissions__: permit modification of configurations. -- __"management" permissions__: enable advanced management of resources. -- __"console_access" permissions__: allow PMAD-style connections to resources. -- __"virtual_machine_power" permissions__: enable power management of a virtual machine. +- Berechtigungen vom Typ „read“: Ermöglichen ausschließlich die Anzeige von Ressourcen ohne Änderungsmöglichkeit. +- Berechtigungen vom Typ „write“: Ermöglichen die Änderung von Konfigurationen. +- Berechtigungen vom Typ „management“: Ermöglichen das erweiterte Ressourcenmanagement. +- Berechtigungen vom Typ „console_access“: Ermöglichen PMAD-ähnliche Verbindungen zu Ressourcen. +- Berechtigungen vom Typ „virtual_machine_power“: Ermöglichen die Stromverwaltung einer virtuellen Maschine. -- __These are permissions, not roles.__ As such, both READ and WRITE permissions are required to modify a configuration. +- __Dies sind Berechtigungen, keine Rollen.__ In diesem Zusammenhang ist es erforderlich, sowohl die READ- als auch die WRITE-Berechtigung zu besitzen, um eine Konfiguration zu ändern. -Last updated: 20/04/2026 +Zuletzt aktualisiert am: 20.04.2026 -| Permission name | Permission description | +| Berechtigungsname | Beschreibung der Berechtigung | | --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | -| activity_read | View logs and activity records | -| activity_write | Manage logs and activity records | -| backup_iaas_opensource_read | OpenIaaS offering – View backup resources | -| backup_iaas_opensource_write | OpenIaaS offering – Modify backup resources | -| backup_iaas_spp_read | VMware offering – View backup resources | -| backup_iaas_spp_write | VMware offering – Modify backup resources | -| bastion_read | View bastion resources | -| bastion_write | Manage bastion resources (appliances, sessions, etc.) | -| bastion_console_access | Grant access to the console (SSH/RDP) of a resource protected by a bastion appliance | -| compute_iaas_opensource_console_access | OpenIaaS offering – Open the console of a virtual machine | -| compute_iaas_opensource_infrastructure_read | OpenIaaS offering – View advanced data of Xen Orchestra resources | -| compute_iaas_opensource_infrastructure_write | OpenIaaS offering – Advanced management of Xen Orchestra resources | -| compute_iaas_opensource_read | OpenIaaS offering – View virtual machine resources | -| compute_iaas_opensource_management | OpenIaaS offering – Manage virtual machine resources | -| compute_iaas_opensource_virtual_machine_power | OpenIaaS offering – Manage the power state of a virtual machine | -| compute_iaas_opensource_replication_recover | OpenIaaS offering – Manage replication | -| compute_iaas_vmware_console_access | VMware offering – Open the console of a virtual machine | -| compute_iaas_vmware_infrastructure_read | VMware offering – View advanced data of VMware resources (affinity/anti-affinity rules, DRS configuration, etc.) | -| compute_iaas_vmware_infrastructure_write | VMware offering – Advanced management of VMware resources | -| compute_iaas_vmware_read | VMware offering – View virtual machine resources | -| compute_iaas_vmware_management | VMware offering – Manage virtual machine resources (includes virtual machine encryption) | -| compute_iaas_vmware_virtual_machine_power | VMware offering – Manage the power state of a virtual machine | -| baremetal_management | Bare Metal offering – Manage bare metal resources | -| baremetal_read | Bare Metal offering – View bare metal resources | -| baremetal_console_access | Bare Metal offering – Open the console of a bare metal server | -| console_public_access_read | View IP addresses authorized to access the console | -| console_public_access_write | Add IP addresses authorized to access the console | -| documentation_read | View Confluence documentation resources | -| housing_read | View colocation resources | -| iam_offline_access | Create and delete Personal Access Tokens (PATs) | -| iam_read | View user permissions | -| iam_write | Manage user permissions | -| intervention_read | View planned changes and production deployments on the platform | -| inventory_read | View inventory resources | -| inventory_write | Manage inventory resources | -| monitoring_read | View monitoring data | -| monitoring_write | Manage monitoring | -| metric_read | View health metrics for virtual machines and hosts | -| network_read | View network resources | -| network_write | Manage network resources | -| order_read | View infrastructure orders | -| order_write | Create infrastructure orders | -| object-storage_iam_management | Manage storage accounts on the S3 product | -| object-storage_read | View buckets and bucket configurations | -| object-storage_write | Edit buckets and bucket configurations | -| openshift_management | Connect to OpenShift platforms (scoped to tenant) | -| support_management | View all support tickets for the tenant | -| support_read | View own support tickets for the tenant | -| support_write | Create a support ticket for the tenant | -| tag_read | View tags, excluding RTMS tags | -| tag_write | Manage tags, excluding RTMS tags | -| ticket_comment_read | View comments | -| ticket_comment_write | Manage comments | -| ticket_read | View tickets | -| ticket_write | Manage tickets | -| incident_management | Manage incidents | -| incident_read | View incidents | - -## Organizations - -Die Organisation ist mit Ihrem __Sponsorenkonto__ und dem zugehörigen __Cloud Temple-Vertrag__ verknüpft. Sie stellt Ihre Einheit (Unternehmen, Abteilung, Team, ...) dar, die die vertragliche Beziehung zwischen Cloud Temple und Ihnen trägt. - -### Principle of an Organization - -An organization has four major roles: - -- It represents the __contractual entity__ for tracking and billing purposes, -- It defines the __global configuration of the authentication mechanism__: authentication can be local at the Console level or remote via an identity federation service, -- It manages all __user accounts__, -- It __federates tenants__ (Production, Preproduction, Dev, Application 1, Application 2, ...) that you define for your Cloud architecture needs. - -User roles (rights/permissions) are configurable for each tenant defined within your organization. For example, a user account may be authorized to provision resources in one tenant but not in another. - -### Authentication Mechanisms - -The Console allows you to configure the __authentication mechanism at the organization level__. You can use the Console's built-in local authentication directory, or connect your organization to one of your external authentication directories. - -The following external authentication directories are supported: - -- OpenID Connect-compatible directories, -- SAML-compatible directories, -- Microsoft ADFS -- Microsoft EntraID (Microsoft Azure Active Directory) +| activity_read | Anzeige von Protokollen und Aktivitäten | +| activity_write | Verwaltung von Protokollen und Aktivitäten | +| backup_iaas_opensource_read | OpenIaaS-Angebot - Verwaltung von Backup-Ressourcen - consultation | +| backup_iaas_opensource_write | OpenIaaS-Angebot - Verwaltung von Backup-Ressourcen - Änderung | +| backup_iaas_spp_read | VMware-Angebot - Verwaltung von Backup-Ressourcen - Anzeige | +| backup_iaas_spp_write | VMware-Angebot - Verwaltung von Backup-Ressourcen - Änderung | +| bastion_read | Anzeige von Bastion-Ressourcen | +| bastion_write | Verwaltung von Bastion-Ressourcen (Appliances, Sitzungen, ...) de type Bastion | +| bastion_console_access | Berechtigung zum Zugriff auf die Konsole (SSH/RDP) einer durch eine Bastion-Appliance geschützten Ressource | +| compute_iaas_opensource_console_access | OpenIaaS-Angebot - Öffnen der Konsole einer virtuellen Maschine | +| compute_iaas_opensource_infrastructure_read | OpenIaaS-Angebot - Anzeige erweiterter Daten der Xen Orchestra-Ressourcen | +| compute_iaas_opensource_infrastructure_write | OpenIaaS-Angebot - Erweitertes Management der Xen Orchestra-Ressourcen | +| compute_iaas_opensource_read | OpenIaaS-Angebot - Anzeige von Ressourcen vom Typ Virtuelle Maschinen | +| compute_iaas_opensource_management | OpenIaaS-Angebot - Verwaltung von Ressourcen vom Typ Virtuelle Maschinen | +| compute_iaas_opensource_virtual_machine_power | OpenIaaS-Angebot - Stromverwaltung einer virtuellen Maschine | +| compute_iaas_opensource_replication_recover | OpenIaaS-Angebot - Verwaltung der Replikation | +| compute_iaas_vmware_console_access | VMware-Angebot - Öffnen der Konsole einer virtuellen Maschine | +| compute_iaas_vmware_infrastructure_read | VMware-Angebot - Anzeige erweiterter Daten der VMware-Ressourcen (Affinitäts-/Anti-Affinitätsregeln, DRS-Konfiguration, usw.) | +| compute_iaas_vmware_infrastructure_write | VMware-Angebot - Erweitertes Management der VMware-Ressourcen | +| compute_iaas_vmware_read | VMware-Angebot - Anzeige von Ressourcen vom Typ Virtuelle Maschinen | +| compute_iaas_vmware_management | VMware-Angebot - Verwaltung von Ressourcen vom Typ Virtuelle Maschinen (ermöglicht die Verschlüsselung einer virtuellen Maschine) | +| compute_iaas_vmware_virtual_machine_power | VMware-Angebot - Stromverwaltung einer virtuellen Maschine | +| baremetal_management | Bare-Metal-Angebot - Verwaltung von Bare-Metal-Ressourcen | +| baremetal_read | Bare-Metal-Angebot - Anzeige von Bare-Metal-Ressourcen | +| baremetal_console_access | Bare-Metal-Angebot - Öffnen der Konsole eines Bare-Metal-Systems | +| console_public_access_read | Anzeige der für den Konsolenzugriff zugelassenen IPs | +| console_public_access_write | Hinzufügen von IPs für den Konsolenzugriff | +| documentation_read | Anzeige von Confluence-Dokumentationsressourcen | +| housing_read | Anzeige von Colocation-Ressourcen | +| iam_offline_access | Erstellung und Löschung persönlicher Zugriffstoken (PAT) | +| iam_read | Anzeige von Benutzerrechten | +| iam_write | Verwaltung von Benutzerrechten | +| intervention_read | Anzeige von geplanten Änderungen und Produktivsetzungen auf der Plattform | +| inventory_read | Anzeige von Inventar-Ressourcen | +| inventory_write | Verwaltung von Inventar-Ressourcen | +| monitoring_read | Anzeige des Monitorings | +| monitoring_write | Verwaltung des Monitorings | +| metric_read | Anzeige von Gesundheitsdaten zu virtuellen Maschinen und Hosts | +| network_read | Anzeige von Netzwerkressourcen | +| network_write | Verwaltung von Netzwerkressourcen | +| order_read | Anzeige von Infrastrukturbestellungen | +| order_write | Erstellung von Infrastrukturbestellungen | +| object-storage_iam_management | Ermöglicht die Verwaltung von Speicherkonten im S3-Produkt | +| object-storage_read | Ermöglicht das Anzeigen von Buckets und deren Konfigurationen | +| object-storage_write | Ermöglicht das Bearbeiten von Buckets und deren Konfigurationen | +| openshift_management | Ermöglicht die Anmeldung auf OpenShift-Plattformen (auf den Tenant beschränkt) | +| support_management | Anzeige aller Support-Tickets des Tenants | +| support_read | Anzeige der eigenen Support-Tickets des Tenants | +| support_write | Erstellung eines Support-Tickets für den Tenant | +| tag_read | Anzeige von Tags, außer RTMS-Tags | +| tag_write | Verwaltung von Tags, außer RTMS-Tags | +| ticket_comment_read | Anzeige von Kommentaren | +| ticket_comment_write | Verwaltung von Kommentaren | +| ticket_read | Anzeige von Tickets | +| ticket_write | Verwaltung von Tickets | +| incident_management | Verwaltung von Incidents | +| incident_read | Anzeige von Incidents | +| billing_read | Anzeige von Verbrauchsdashboards | +| vpc_read | VPC-Angebot - Anzeige von Netzwerkressourcen vom Typ VPC | +| vpc_write | VPC-Angebot - Verwaltung von Netzwerkressourcen vom Typ VPC | +| public_cloud_vm_instances_management | VM-Instances-Angebot - Verwaltung von virtuellen Maschinen | +| public_cloud_vm_instances_read | VM-Instances-Angebot - Anzeige von virtuellen Maschinen | +| public_cloud_vm_instances_console_access | VM-Instances-Angebot - Öffnen der Konsole von virtuellen Maschinen | + +## Organisationen + +Die Organisation ist mit Ihrem __Sponsorkonto__ und dem zugehörigen __Cloud-Temple-Vertrag__ verknüpft. Sie repräsentiert Ihre Entität (Unternehmen, Abteilung, Team, ...), die die Vertragsbeziehung zwischen Cloud Temple und Ihnen vertritt. + +### Prinzip einer Organisation + +Die Organisation erfüllt vier zentrale Rollen: + +- Sie fungiert als __vertragliche Entität__ für die Aspekte der Nachverfolgung und Abrechnung, +- Sie definiert __die globale Konfiguration des Authentifizierungsmechanismus__: Die Authentifizierung kann lokal auf Konsolenebene oder remote über einen Identitätsföderationsdienst erfolgen, +- Sie verwaltet alle __Benutzerkonten__, +- Sie __bündelt die Tenants__ (Production, Préproduction, Dev, Application 1, Application 2, ...), die Sie für die Anforderungen Ihrer Cloud-Architektur definieren. + +Die Rollen (droits/permissions) der Benutzer sind für jeden in Ihrer Organisation definierten Tenant konfigurierbar. Ein Konto kann beispielsweise autorisiert sein, Ressourcen in einem Tenant zu bestellen, in einem anderen jedoch nicht. + +### Authentifizierungsmechanismen + +Auf Organisationsebene ermöglicht die Konsole __die Konfiguration des Authentifizierungsmechanismus__. Sie können +das lokale Authentifizierungs-Repository der Konsole verwenden oder Ihre Organisation mit einem +Ihrer Authentifizierungs-Repositories anbinden. + +Folgende externe Repositories werden unterstützt: + +- __OpenID Connect__-kompatible Repositories, +- __SAML__-kompatible Repositories, +- __Microsoft ADFS__ +- __Microsoft EntraID__ (Microsoft Azure Active Directory) - Amazon AWS Cognito - Okta - Auth0 -- Keycloak +- KeyCloak :::info[Important] -An email address is required for all accounts originating from an identity federation. Accounts created without an email address will not be able to log in and may be automatically deleted. +Für alle Konten aus einer Identitätsföderation ist eine E-Mail-Adresse erforderlich. Konten, die ohne E-Mail-Adresse erstellt wurden, können sich nicht anmelden und werden möglicherweise automatisch gelöscht. ::: ## Tenant -Der Tenant ist eine __Gruppierung von Ressourcen innerhalb einer Organisation__. Eine [Organisation](#organizations) verfügt mindestens über einen Tenant (der __Standard-Tenant__, der umbenannt werden kann). In der Regel werden mehrere Tenants verwendet, um Verantwortlichkeiten oder technische Bereiche zu segmentieren. +Der Tenant ist eine __Gruppierung von Ressourcen innerhalb einer Organisation__. Eine [Organisation](#organisations) verfügt über mindestens einen Tenant (als __Standardtenant__ bezeichnet, der umbenannt werden kann). In der Regel werden mehrere Tenants verwendet, um Zuständigkeiten oder technische Umfangsbereiche zu segmentieren. -Beispiele: +Beispiel: - Ein Tenant __Produktion__ - Ein Tenant __Vorproduktion__ - Ein Tenant __Test__ -- Ein Tenant __Qualifizierung__ +- Ein Tenant __Qualifikation__ -Es ist jedoch auch möglich, die Struktur anhand einer __Anwendungsperspektive__ oder nach __Kritikalität__ zu organisieren: +Es ist jedoch auch möglich, die Struktur nach einer __Anwendungssicht__ oder nach __Kritizität__ zu organisieren: -- Ein Tenant __Anwendung 1__ oder __Kritikalität 1__ -- Ein Tenant __Anwendung 2__ oder __Kritikalität 2__ +- Ein Tenant __Anwendung 1__ oder __Kritizität 1__ +- Ein Tenant __Anwendung 2__ oder __Kritizität 2__ - ... -Technische Ressourcen, die bestellt werden, werden einem bestimmten Tenant zugeordnet und sind mit anderen Tenants nicht geteilt. Zum Beispiel sind ein Hypervisor-Cluster und die zugehörigen L2-Netzwerke nur innerhalb eines einzelnen Tenants verfügbar. +Die bestellten technischen Ressourcen werden einem bestimmten Tenant zugewiesen und nicht mit anderen Tenants geteilt. Ein Hypervisor-Cluster und die zugehörigen L2-Netzwerke sind beispielsweise nur in einem Tenant verfügbar. +Bei Netzwerken ist es möglich, __'tenantübergreifende'__ Netzwerke anzufordern, um die Netzwerkkontinuität zwischen den Tenants sicherzustellen. -Bezüglich Netzwerke ist es möglich, __"cross-tenant"-Netzwerke__ anzufordern, um eine kontinuierliche Netzwerkverbindung zwischen verschiedenen Tenants sicherzustellen. +Die Berechtigungen der Benutzer sind in jedem Tenant festzulegen. Daher muss jede Organisation die gewünschten Tenants sorgfältig planen. Dieser Punkt wird in der Regel im Initialisierungsworkshop zum Zeitpunkt der Erstellung der Organisation behandelt. -Die Berechtigungen von Benutzern müssen jeweils innerhalb jedes Tenants definiert werden. Daher sollte jede Organisation sorgfältig über die gewünschten Tenants nachdenken. Dieser Punkt wird in der Regel in einem Initialisierungsworkshop behandelt, zum Zeitpunkt der Organisationserstellung. +Die Architektur kann durch Hinzufügen oder Entfernen von Tenants erweitert werden. -Es ist möglich, die Architektur durch Hinzufügen oder Entfernen von Tenants zu erweitern. +Ein Tenant darf nicht leer sein. Er muss zwingend mit mindestens einer Ressource initialisiert werden: -Ein Tenant darf nicht leer sein. Er muss zwingend mit mindestens folgenden Ressourcen initialisiert werden: - -- Eine Verfügbarkeitszone (AZ, also ein physischer Rechenzentrumsstandort), -- Ein Berechnungscluster, -- Ein Speicherplatz, +- Eine Verfügbarkeitszone (AZ, soit un datacenter physique), +- Ein Rechencluster, +- Ein Speicherbereich, - Ein VLAN-Netzwerk. -| Befehlsreferenz | Einheit | SKU | -|-----------------------------------------------------------|------------|-------------------------| -| TENANT - *(REGION)* - Aktivierung eines Tenants | 1 Tenant | csp:tenant:v1 | -| TENANT - *(REGION)* - Aktivierung einer Verfügbarkeitszone | 1 Tenant | csp:(region):iaas:az:v1 | +| Bestellreferenz | Einheit | SKU | +|--------------------------------------------------------------|----------|-------------------------| +| TENANT - *(REGION)* - Aktivierung eines Tenants | 1 Tenant | csp:tenant:v1 | +| TENANT - *(REGION)* - Aktivierung einer Verfügbarkeitszone | 1 Tenant | csp:(region):iaas:az:v1 | -### Owner Management for a Tenant +### Verwaltung der Eigentümer auf einem Tenant -Each tenant has at least one owner, ensuring clear accountability and efficient management of associated resources. Additionally, it is possible to designate multiple owners for a single tenant, enabling collaboration and shared decision-making. Below are important considerations to keep in mind when managing these owners. +Jeder Tenant verfügt über mindestens einen Eigentümer, um so eine klare Verantwortung und ein effizientes Ressourcenmanagement zu gewährleisten. Darüber hinaus können mehrere Eigentümer für denselben Tenant angegeben werden, was eine Zusammenarbeit und eine gemeinsame Entscheidungsfindung ermöglicht. Nachfolgend finden Sie wichtige Informationen, die bei der Verwaltung dieser Eigentümer zu beachten sind. -#### Important information regarding owner management +#### Wichtige Informationen zur Verwaltung der Eigentümer -#### 1. Number of Owners +#### 1. Anzahl der Eigentümer -- There is no technical limit on the number of owners that can be defined for the tenant. +- Es besteht keine technische Begrenzung für die Anzahl der Eigentümer, die auf dem Tenant definiert werden können. -- The management interface (UI) issues a warning when more than 3 owners are present, encouraging the limitation of the number of owners for security reasons and optimal access management. +- Die Verwaltungsoberfläche (IHM) zeigt eine Warnung an, wenn mehr als 3 Eigentümer vorhanden sind, um dazu anzuregen, die Anzahl der Eigentümer aus Sicherheitsgründen und für ein optimales Zugriffsmanagement zu begrenzen. -#### 2. Adding a new owner +#### 2. Hinzufügen eines neuen Besitzers -- When adding a new owner, updating their permissions may take up to 60 minutes. +- Beim Hinzufügen eines neuen Besitzers kann die Aktualisierung seiner Berechtigungen eine Verzögerung von bis zu 60 Minuten erfordern. -- This propagation time is normal and ensures that access rights are correctly applied across all associated services and resources. +- Diese Propagationszeit ist normal und stellt sicher, dass die Zugriffsrechte auf alle zugehörigen Dienste und Ressourcen korrekt angewendet werden. -#### 2. Permissions of a owner +#### 2. Berechtigungen eines Besitzers -- An owner will be assigned all permissions associated with the products enabled in their tenant. +- Einem Besitzer werden alle Berechtigungen zugewiesen, die mit den auf seinem Tenant aktivierten Produkten verknüpft sind. -- It is not possible to modify the permissions of an owner. +- Es ist nicht möglich, die Berechtigungen eines Besitzers zu ändern. -#### 3. Removal of a owner +#### 3. Entfernen eines Eigentümers -- To remove an owner from the tenant, the user must submit a request to support. +- Um einen Eigentümer aus dem Tenant zu entfernen, muss der Benutzer eine Anfrage an den Support stellen. -- This procedure ensures that changes to access rights are carried out securely and in accordance with best practices for access management. +- Dieses Verfahren stellt sicher, dass Änderungen an den Zugriffsrechten auf sichere Weise und gemäß den bewährten Verfahren für das Zugriffsmanagement durchgeführt werden. -### Access Authorization for a Tenant: Allowed IPs +### Zugriffsberechtigung für einen Tenant: Zugelassene IPs -Access to the cloud management console is strictly limited to previously authorized IP addresses, in compliance with the SecNumCloud certification requirements. This restriction ensures a heightened level of security by allowing access only from specified IP ranges, thereby minimizing the risk of unauthorized access and protecting the cloud infrastructure according to the highest security standards. +Der Zugriff auf die Cloud-Management-Konsole ist streng auf zuvor autorisierte IP-Adressen beschränkt, um den Anforderungen der SecNumCloud-Zertifizierung zu entsprechen. Diese Einschränkung gewährleistet ein erhöhtes Sicherheitsniveau, indem der Zugriff nur auf Benutzer aus angegebenen IP-Bereichen ermöglicht wird, wodurch das Risiko unbefugten Zugriffs minimiert und die Cloud-Infrastruktur nach den höchsten Sicherheitsstandards geschützt wird. -Note: *Removing an authorized IP requires a support request via the Cloud Temple console.* +Hinweis: *Das Entfernen einer zugelassenen IP-Adresse erfolgt über eine Supportanfrage in der Cloud-Temple-Konsole.* -### Resource Consumption within a Tenant +### Ressourcenverbrauch innerhalb eines Tenants -It is possible to visualize the cloud resources consumed within a tenant, providing a detailed view of the usage of various deployed services. This feature enables users to monitor resource consumption in real time, identify the most heavily used services, and optimize their usage according to their needs. +Es können die innerhalb eines Tenants verbrauchten Cloud-Ressourcen eingesehen werden, was eine detaillierte Übersicht über die Nutzung der bereitgestellten Dienste bietet. Diese Funktion ermöglicht es Benutzern, den Ressourcenverbrauch in Echtzeit zu verfolgen, die am stärksten ausgelasteten Dienste zu identifizieren und die Nutzung bedarfsgerecht zu optimieren. -In the console menu, click on "Consumption Report" and select the desired time period. You will then be able to view detailed cloud resource consumption over the specified period, allowing you to analyze service usage and optimize your management accordingly: +Klicken Sie im Konsolenmenü auf "Verbrauchsbericht" und wählen Sie den gewünschten Zeitraum aus. Sie können so den Verbrauch der Cloud-Ressourcen im festgelegten Zeitraum detailliert einsehen, was Ihnen die Analyse der Dienstnutzung und die daraus folgende Optimierung Ihrer Verwaltung ermöglicht: - + \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/console/iam/iam.md b/i18n/de/docusaurus-plugin-content-docs/current/console/iam/iam.md index c3facb6f..58f01e58 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/console/iam/iam.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/console/iam/iam.md @@ -1,26 +1,26 @@ --- -title: Identity Access Management +title: Übersicht --- -# Identity Access Management +# Identitäts- und Zugriffsverwaltung -Das IAM-Modul (Identity Access Management) der Cloud Temple-Konsole bietet eine umfassende Lösung für das Identitäts- und Zugriffsmanagement. -Es ermöglicht die Verwaltung lokaler Konten und unterstützt gleichzeitig eine Hybridisierung mit externen Konfigurationen, die mit den marktüblichen Standards wie OIDC und SAML kompatibel sind, um den Flexibilitäts- und Sicherheitsanforderungen moderner Umgebungen gerecht zu werden. +Das IAM-Modul (Identity Access Management) der Cloud Temple Console bietet eine umfassende Lösung für das Identitäts- und Zugriffsmanagement. +Es ermöglicht die Verwaltung lokaler Konten und unterstützt gleichzeitig die Hybridisierung mit externen Konfigurationen, die mit marktüblichen Standardprotokollen wie OIDC und SAML kompatibel sind, um den Anforderungen an Flexibilität und Sicherheit moderner Umgebungen gerecht zu werden.
-

Konzepten

-

Erfahren Sie die Grundlagen und wesentlichen Prinzipien, um unsere Infrastruktur zu verstehen und zu meistern.

- Entdecken Sie die Konzepte → +

Konzepte

+

Erfahren Sie die Grundlagen und wesentlichen Prinzipien, um unsere Infrastruktur zu verstehen und zu beherrschen.

+ Konzepte erkunden →
-

Quickstart

-

Beginnen Sie schnell mit unseren Ressourcen, indem Sie klaren und einfachen Anweisungen folgen.

- Starten Sie den Quickstart → +

Schnellstart

+

Starten Sie schnell mit unseren Ressourcen, indem Sie klaren und einfachen Anweisungen folgen.

+ Schnellstart starten →

Tutorials

-

Erlernen Sie Schritt für Schritt, wie Sie unsere Dienste mit detaillierten Anleitungen konfigurieren und nutzen.

- Entdecken Sie die Tutorials → +

Lernen Sie Schritt für Schritt die Konfiguration und Nutzung unserer Dienste anhand detaillierter Anleitungen.

+ Tutorials entdecken →
-
+ \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/console/iam/tutorials/sso_jumpcloud.md b/i18n/de/docusaurus-plugin-content-docs/current/console/iam/tutorials/sso_jumpcloud.md index f4eac050..5e7c4ab6 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/console/iam/tutorials/sso_jumpcloud.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/console/iam/tutorials/sso_jumpcloud.md @@ -1,72 +1,72 @@ --- -Titel: Beispiel für Identitätsfusion mit JumpCloud -Tags: +title: Beispiel für Identitätsföderation mit JumpCloud +tags: - iam - - Tutorials + - Anleitungen - Onboarding --- import ssoJumpcloud001 from '@site/docs/console/iam/tutorials/images/sso_jumpcloud_001.png'; import ssoJumpcloud002 from '@site/docs/console/iam/tutorials/images/sso_jumpcloud_002.png'; -Dieses Tutorial führt Sie durch die Konfiguration der einheitlichen Authentifizierung (SSO) zwischen JumpCloud und der Cloud-Tempel-Konsole unter Verwendung des Protokolls OpenID Connect (OIDC). +Dieses Tutorial führt Sie durch die Konfiguration der Single Sign-On (SSO)-Authentifizierung zwischen JumpCloud und der Cloud Temple-Konsole unter Verwendung des OpenID Connect (OIDC)-Protokolls. -Für detaillierte Informationen direkt aus dem offiziellen JumpCloud-Dokumentation zum SSO OIDC: [SSO mit OIDC](https://jumpcloud.com/support/sso-with-oidc). +Für weitere detaillierte Informationen direkt von JumpCloud lesen Sie bitte ihre offizielle Dokumentation zu OIDC-SSO: [SSO with OIDC](https://jumpcloud.com/support/sso-with-oidc). -## Vorbereitungen +## Voraussetzungen -Bevor Sie mit der Arbeit beginnen, stellen Sie sicher, dass Sie von Cloud Temple die spezifische URI für Ihre Redirektions-Instance Keycloak erhalten haben. +Bevor Sie beginnen, stellen Sie sicher, dass Sie die erforderlichen Informationen von Cloud Temple erhalten haben, insbesondere die spezifische Weiterleitungs-URI für Ihre Keycloak-Instanz. ## Konfiguration in JumpCloud -Befolgen Sie diesen Schritten, um eine neue Anwendung für OpenID Connect (OIDC) in Ihrer JumpCloud-Admin-Konsole zu konfigurieren: +Führen Sie die folgenden Schritte aus, um eine neue OIDC-Anwendung in Ihrer JumpCloud-Administrationskonsole zu konfigurieren: -1. **Erstellung einer neuen Anwendung:** - * Navigieren Sie zur Anwendungsliste in JumpCloud. - * Klicken Sie auf "Hinzufügen" oder "Neue Anwendung erstellen". - * Wählen Sie die Option für eine benutzerdefinierte Anwendungseintegration ("Custom Application Integration"). +1. **Neue Anwendung erstellen:** + * Navigieren Sie zum Abschnitt „Anwendungen“ in JumpCloud. + * Klicken Sie auf „Hinzufügen“ oder „Neue Anwendung erstellen“. + * Wählen Sie die Option für eine benutzerdefinierte Anwendungsintegration („Custom Application Integration“). -2. **Konfiguration des SSO OIDC:** - * Wählen Sie "Single Sign-On (SSO) verwalten". - * Wählen Sie "SSO mit OIDC konfigurieren". +2. **OIDC-SSO konfigurieren:** + * Wählen Sie „Single Sign-On (SSO) verwalten“. + * Wählen Sie „SSO mit OIDC konfigurieren“. - SSO OIDC Konfiguration JumpCloud + OIDC-SSO-Konfiguration in JumpCloud -3. **Eingabe der Redirection URIs:** - * Im entsprechenden Feld (meist als "Redirektur-URI" oder "Callback URL") geben Sie die URI ein, die von Cloud Temple bereitgestellt wird. Diese folgt normalerweise dem folgenden Muster: +3. **Weiterleitungs-URIs eingeben:** + * Geben Sie im entsprechenden Feld (oft als „Redirect URIs“ oder „Callback URLs“ bezeichnet) die von Cloud Temple bereitgestellte URI ein. Sie folgt in der Regel diesem Format: ``` https://keycloak-shiva.cloud-temple.com/auth/realms//broker//endpoint ``` - * Ersetzen Sie `` durch die spezifischen Identifikatoren Ihrer Firma, die von Cloud Temple bereitgestellt werden. + *Ersetzen Sie `` durch die von Cloud Temple bereitgestellten, unternehmensspezifischen Anmeldeinformationen.* -4. **Wahl des Authentifizierungsverfahrens für den Klient:** - * Wählen Sie `Client Secret Post` als "Klientauthentifizierungstyp". +4. **Client-Authentifizierungstyp auswählen:** + * Wählen Sie `Client Secret Post` als „Client-Authentifizierungstyp“. -5. **Eingabe der Login-URL:** - * Im Feld "Login-URL" geben Sie die URL ein, die Sie verwenden, um auf Ihre JumpCloud-Konsole zuzugreifen. Beispielsweise: +5. **Anmelde-URL eingeben:** + * Geben Sie im Feld „Login URL“ die URL ein, die Sie zum Zugriff auf Ihre Cloud Temple-Konsole verwenden. Beispiel: ``` https://.shiva.cloud-temple.com ``` - * Ersetzen Sie `` durch den eindeutigen Identifikator Ihrer Cloud Temple-Instanz. + *Ersetzen Sie `` durch die eindeutige Kennung Ihrer Cloud Temple-Instanz.* -6. **Konfiguration des Attribute-Mappings:** - * In der Abschnitt "Attribute Mapping" (oder Ähnliches) stellen Sie sicher, dass die folgenden Attribute ausgewählt werden, um an Cloud Temple weitergeleitet werden: +6. **Attributzuordnung konfigurieren:** + * Stellen Sie im Bereich „Attribute Mapping“ (oder entsprechend) sicher, dass die folgenden Attribute an Cloud Temple gesendet werden: * `Email` - * `Profile` (kann den Namen, Vorname usw. enthalten) + * `Profile` (kann Vorname, Nachname usw. umfassen) - Attribute Mapping JumpCloud + Attributzuordnung in JumpCloud -7. **Zuweisung von Gruppen:** - * Zuweisen Sie die Gruppen von JumpCloud-Benutzern, die über diese OIDC-Anwendung auf Ihre Cloud Temple-Konsole zugreifen sollen. +7. **Gruppen zuweisen:** + * Weisen Sie die JumpCloud-Benutzergruppen zu, die über diese SSO-Anwendung Zugriff auf die Cloud Temple-Konsole erhalten sollen. -8. **Aktivierung der Anwendung:** - * Klicken Sie auf "Aktivieren" oder "Speichern", um die Konfiguration abzuschließen. +8. **Anwendung aktivieren:** + * Klicken Sie auf „Activate“ oder „Save“, um die Konfiguration der Anwendung abzuschließen. -9. **Übermittlung der Identifikatoren an Cloud Temple:** - * Nach der Aktivierung erhält JumpCloud Ihnen einen Client ID und ein Client Secret. - * Übermitteln Sie diese Informationen sicher an Ihre Kontaktperson bei Cloud Temple, um die Konfiguration der Federierung auf Seiten Keycloak abzuschließen. +9. **Anmeldeinformationen an Cloud Temple übermitteln:** + * Nach der Aktivierung stellt Ihnen JumpCloud eine **Client ID** und ein **Client Secret** bereit. + * Übermitteln Sie diese beiden Informationen sicher an Ihren Ansprechpartner bei Cloud Temple, um die Konfiguration der Federation auf Keycloak-Seite abzuschließen. -Sobald Cloud-Temple die Federierung mit den bereitgestellten Identifikatoren konfiguriert hat, können die von Ihnen zugewiesenen Benutzer sich über JumpCloud an Ihre Cloud Temple-Konsole anmelden und ihre Authentifizierungskennzeichen verwenden. +Sobald Cloud Temple die Federation mit den bereitgestellten Anmeldeinformationen konfiguriert hat, können Ihre zugewiesenen Benutzer mit ihren JumpCloud-Anmeldeinformationen auf die Cloud Temple-Konsole zugreifen. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/console/metrics/concepts.md b/i18n/de/docusaurus-plugin-content-docs/current/console/metrics/concepts.md index fa8f29bd..445fc35e 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/console/metrics/concepts.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/console/metrics/concepts.md @@ -1,5 +1,5 @@ --- -title: Metrologie +title: Metriken --- import metricsHypervisorsCo2 from '@site/docs/console/metrics/images/metrics_hypervisors_co2.png' import shivaHome from '@site/docs/console/metrics/images/shiva_home.png' @@ -27,132 +27,133 @@ import grafanaDatasourceAlerting from '@site/docs/console/metrics/images/grafana import grafanaDatasourceWorking from '@site/docs/console/metrics/images/grafana_datasource_working.png' import grafanaDashboards_001 from '@site/docs/console/metrics/images/grafana_dashboards_001.png' -Die Mehrheit der __Cloud Temple__-Kunden verfügt über Tools zur Visualisierung, Überwachung und Metriken zur Verfolgung ihrer Operationen. +Die Mehrheit der __Cloud Temple__-Kunden verfügt über Tools zur Visualisierung, zum Monitoring und zur Metrikerfassung zur Verfolgung ihrer Operationen. -Die Philosophie der Console besteht darin, den Zugriff auf Daten zu ermöglichen, um sich über einen integrierten Prometheus-Proxy in diese Tools einzubinden. +Die Philosophie der Konsole besteht darin, den Datenzugriff zu ermöglichen, um sich über einen integrierten Prometheus-Proxy in dieses Tooling zu integrieren. -Dieser Proxy ermöglicht es Ihnen, Daten über ein Visualisierungstool wie [Grafana](https://grafana.com) abzufragen und zu manipulieren. +Dieser Proxy ermöglicht es Ihnen, Daten von einem Visualisierungstool wie [Grafana](https://grafana.com) abzufragen und zu manipulieren. -Es ist jedoch auch möglich, bestimmte Leistungsdaten Ihrer Cloud-Ressourcen direkt in der Web-Oberfläche der Console anzuzeigen. +Es ist jedoch möglich, bestimmte Performance-Daten Ihrer Cloud-Ressourcen in der Weboberfläche der Konsole anzuzeigen. -*__Hinweis:__ Die Philosophie von __Cloud Temple__ besteht nicht darin, ausschließlich Diagramme in der Web-Oberfläche zu integrieren, sondern auch, den maximalen Informationszugriff über die API anzubieten* +*__Hinweis:__ Die Philosophie von __Cloud Temple__ besteht nicht nur darin, Diagramme in der Weboberfläche zu integrieren, sondern auch maximal viele Informationen bereitzustellen, die über die API zugänglich sind.* -## Built-in dashboards in the web interface +## In die Web-Oberfläche integrierte Dashboards -*__Note:__ To access these dashboards, you must have the __'metric_read'__ permission* +*__Hinweis:__ Für den Zugriff auf diese Dashboards ist die Berechtigung __'metric_read'__ erforderlich.* ### Übersicht -Die Startseite der Console zeigt das Hauptdashboard an, das alle Metriken enthält, die einen Überblick über die Produkte, für die Sie in Ihrem Bereich abonniert sind, ermöglichen. Bei Problemen mit Ihren VMware- und/oder OpenIaaS-Produkten werden Warnungen angezeigt, deren Farbe mit ihrer Dringlichkeit korreliert. +Die Startseite der Konsole zeigt das Haupt-Dashboard, das alle Metriken darstellt, die eine Statusübersicht über alle Produkte ermöglichen, für die Sie in Ihrem Geltungsbereich ein Abonnement abgeschlossen haben. Bei Problemen mit Ihren VMware- und/oder OpenIaaS-Produkten werden Warnungen angezeigt, deren Farbe der Kritikalität entspricht. -Diese Warnungen sind klickbar und leiten Sie zur entsprechenden Produktseite weiter. +Diese Warnungen sind anklickbar und leiten zur entsprechenden Produktseite weiter. -### VMware Metrics - Overview +### VMware-Metriken - Gesamtübersicht -In the __'VMware'__ menu, a dedicated dashboard is available under the __'Metrics'__ submenu. It contains 4 tabs: +Im Menü __'VMware'__ ist ein spezifisches Dashboard im Untermenü __'Metriken'__ verfügbar. Es umfasst 4 Registerkarten : #### Übersicht -Auf diesem Tab finden Sie einige der bereits im globalen Dashboard enthaltenen Metriken, das zu Beginn dieses Kapitels behandelt wurde. +Auf diesem Tab finden sich ein Teil der Metriken, die bereits zu Beginn dieses Kapitels im globalen Dashboard behandelt wurden. -#### Calculation +#### Berechnung -On this tab, you will find the number of __AZs__, __Clusters__, __ESXs__, __carbon emissions__, and __power consumption estimates__, along with seven visual graphs providing a clear overview of your VMware environment. The power consumption estimate in kWh is calculated based on the average of the readings covering the selected period, normalized to a per-hour basis. +Auf diesem Tab finden Sie die Anzahl der __AZ__, der __Clusters__, der __ESXs__, die __CO₂-Emission__, die __Verbrauchsabschätzung__ sowie 7 Diagramme, +die eine sehr visuelle Bestandsaufnahme Ihrer VMware-Umgebung darstellen. Die Verbrauchsabschätzung in kw/h wird auf Basis des Durchschnitts der Messwerte berechnet, die den gewählten Zeitraum abdecken, und auf eine Stunde hochgerechnet. -You can select the date range to be displayed, as well as the data aggregation type (by default, data is aggregated across your entire environment). For example, by selecting __Host__: +Sie können den abzudeckenden Datumsbereich sowie den Typ der Datenaggregation auswählen (standardmäßig werden die Daten für Ihren gesamten Umfang aggregiert). Bei der Auswahl von __Host__ z. B.: -When hovering over each graph, details about the resource names and their values are displayed. Clicking on a graph opens a small tooltip, allowing you to easily view detailed information corresponding to the selected date: +Beim Überfahren der einzelnen Diagramme mit der Maus werden die Details der Ressourcennamen und deren Werte angezeigt. Beim Klicken auf diese Diagramme öffnet sich eine kleine Tooltip, die es Ihnen ermöglicht, die Details zum angeklickten Datum leichter einzusehen: -#### Storage +#### Speicher -Just as on the "Compute" tab, you will find various information: the number of __AZs__, __datastore clusters__, __datastores__, as well as two charts. The same filtering principles apply, but here you can group by __Cluster SDRS__ and __Datastore__. +Ebenso wie auf der Registerkarte „Berechnung“ finden sich hier verschiedene Informationen: die Anzahl der __AZ__, der __Datastore-Cluster__ und der __Datastores__ sowie 2 Diagramme. Das gleiche Filterprinzip gilt hier, jedoch können wir nach __SDRS-Cluster__ und __Datastore__ gruppieren. #### Virtuelle Maschinen -Hier finden Sie einen Überblick über den Gesundheitszustand der virtuellen Maschinen. +Hier erhalten Sie einen globalen Überblick über den Status der virtuellen Maschinen. Diese Zusammenfassung zeigt für den ausgewählten Zeitraum: -- die Anzahl der CPU-Kerne und den __durchschnittlichen CPU-Verbrauch__, -- die Anzahl an GB Arbeitsspeicher und den __durchschnittlichen Speicherverbrauch__, -- die Durchschnittswerte der __Speicherzugriffs-Latenz__ für Lese- und Schreibvorgänge, -- den durchschnittlichen __'CPU Ready'-Wert__ der virtuellen Maschine (dies entspricht der durchschnittlichen Wartezeit auf die Verfügbarkeit eines physischen CPU-Kerns durch die virtuelle Maschine). +- die Anzahl der CPUs und die __durchschnittliche CPU-Auslastung__, +- die Anzahl der GB Speicher und die __durchschnittliche Speichernutzung__, +- die durchschnittlichen __Speicherzugriffszeiten__ beim Lesen und Schreiben, +- die durchschnittliche __'CPU Ready'__-Zeit der virtuellen Maschine (entspricht der durchschnittlichen Wartezeit auf die Verfügbarkeit eines physischen Cores durch die virtuelle Maschine). -Für jede VM können Sie den Leistungsverlauf aufrufen, indem Sie auf das grüne __'Verlauf'-Symbol__ in der Spalte „Aktion“ klicken: +Für jede VM können Sie auf den Verlauf ihrer Leistungsdaten zugreifen, indem Sie auf das grüne Symbol __'Verlauf'__ in der Aktionsspalte der virtuellen Maschine klicken: -Daraufhin gelangen Sie zur Seite mit der grafischen Darstellung der historischen Daten, einschließlich einer __Umweltleistungsübersicht__: +Sie gelangen dann zur Seite zur grafischen Darstellung der historischen Daten, einschließlich einer __Umweltmetriken__-Ansicht: -### VMware Metrics - View by Resource +### VMware-Metriken - Ansicht nach Ressource -It is also possible to view a portion of the metrics related to VMware, this time more specifically for a given __Host__ or __Datastore__. +Zudem ist es möglich, einen Teil der VMware-bezogenen Metriken einzusehen, dieses Mal jedoch spezifischer für einen bestimmten __Host__ oder ein bestimmtes __Datastore__. #### Host -In der Ansicht eines Hosts können für einen bestimmten Zeitraum die __Energieverbrauchswerte__ sowie die Schätzung der __Kohlenstoffemissionen__ abgerufen werden. +In der Host-Ansicht können für einen bestimmten Zeitraum der __Energieverbrauch__ sowie die Schätzung der __Kohlenstoffemissionen__ eingesehen werden. #### Datastore -In der Ansicht eines Datastores können für einen bestimmten Zeitraum die __IOPS__ abgerufen werden. +In der Datastore-Ansicht können Sie für einen bestimmten Zeitraum die __IOPS__ einsehen. -### OpenIaaS Metrics +### OpenIaaS-Metriken -In the __'OpenIaaS'__ menu, a dedicated dashboard is available in the __'Metrics'__ submenu. It contains 3 tabs: +Im Menü __'OpenIaaS'__ ist ein spezifisches Dashboard im Untermenü __'Metriken'__ verfügbar. Es umfasst 3 Registerkarten: #### Übersicht -Auf diesem Tab finden Sie einige der bereits im globalen Dashboard enthaltenen Metriken, das zu Beginn dieses Kapitels behandelt wurde. +Auf diesem Tab finden sich ein Teil der Metriken, die bereits zu Beginn dieses Kapitels im globalen Dashboard erläutert wurden. -#### Calculation +#### Berechnung -On this tab, you will find the number of __AZs__, __Clusters__, __Hosts__, as well as 5 graphs providing a highly visual overview of your OpenIaaS environment. +Auf diesem Tab finden Sie die Anzahl der __AZ__, __Clusters__ und __Hosts__ sowie 5 Diagramme, die eine sehr visuelle Übersicht Ihrer OpenIaaS-Umgebung bieten. -You can select the date range to cover, as well as the data aggregation type (by default, data is aggregated across your entire environment). For example, by selecting __Host__: +Sie können den abzudeckenden Datumsbereich sowie den Typ der Datenaggregation auswählen (standardmäßig werden die Daten für Ihren gesamten Umfang aggregiert). Beispiel: Auswahl von __Host__: -#### Storage +#### Speicher -Just as on the "Compute" tab, you will find various information: the number of __AZs__, __Clusters__, __Datastores__, as well as a chart. The same filtering principles apply, but here we can group by __Block Storage__. +Ebenso wie auf der Registerkarte "Berechnung" finden sich hier verschiedene Informationen: die Anzahl der __AZ__, der __Clusters__ und der __Datastores__ sowie ein Diagramm. Das gleiche Filterprinzip gilt auch hier, jedoch können wir nach __Block Storage__ gruppieren. -## Usage with __Grafana__ +## Verwendung mit __Grafana__ -Integration of the Console with Grafana +Integration der Konsole mit Grafana -The Cloud Temple Console can be used as a data source for your [Grafana](https://grafana.com/) infrastructure. +Die Cloud Temple Konsole kann als Datenquelle für Ihre [Grafana](https://grafana.com/)-Infrastruktur verwendet werden. -The Console is Prometheus-compatible, allowing you to add it to Grafana as a Prometheus-type data source. You will then be able to: +Die Konsole ist Prometheus-kompatibel, sodass sie in Grafana als Datenquelle vom Typ Prometheus hinzugefügt werden kann. Sie können damit: -- Visualize all your metrics. -- Create custom dashboards tailored to your specific needs. +- Alle Ihre Metriken visualisieren. +- Eigene, an Ihre Anforderungen angepasste Dashboards erstellen. -Cloud Temple also provides a [collection of ready-to-use dashboards](https://github.com/Cloud-Temple/console-grafana-iaas) that you can use as a starting point or adapt according to your use cases. +Cloud Temple stellt zudem eine [Sammlung an Dashboards](https://github.com/Cloud-Temple/console-grafana-iaas) bereit, die sofort einsatzbereit sind und als Grundlage dienen oder an Ihre Anwendungsfälle angepasst werden können. @@ -160,22 +161,22 @@ Cloud Temple also provides a [collection of ready-to-use dashboards](https://git -### Configure the Console as a data source in Grafana +### Konfigurieren der Konsole als Datenquelle in Grafana -The goal is to enhance the observability of your Cloud infrastructure through Cloud Temple metrics. +Das Ziel ist es, die Observability Ihrer Cloud-Infrastruktur durch Cloud-Temple-Metriken zu erweitern. #### Voraussetzungen -- Eine Grafana-Instanz, die Zugriff auf die APIs der Console hat. -- Administrativer Zugriff auf die Grafana-Instanz, um *Datasources* zu konfigurieren. +- Eine Grafana-Instanz mit Zugriff auf die API der Konsole. +- Administrativer Zugriff auf die Grafana-Instanz, um die *Datenquellen* konfigurieren zu können. - Ein Personal Access Token mit mindestens der Berechtigung `metrics_read`. -#### Configuration +#### Konfiguration -In der __Konfiguration__ von Grafana gehen Sie zum Tab "__Datasources__" und klicken Sie auf "__Add datasource__". +Gehen Sie in der __Konfiguration__ von Grafana zum Reiter "__Datenquellen__" und klicken Sie auf "__Datenquelle hinzufügen__". -Geben Sie in der __URL__ die __API-URL von Console Metrics__ an, ohne die Versionsangabe und endend mit "__/prometheus__" -(z. B. [https://shiva.cloud-temple.com/api/metric/prometheus](https://shiva.cloud-temple.com/api/metric/prometheus)) +Geben Sie in das Feld URL die __URL der Console Metrics API__ ohne die Versionsnummer und endend mit "__/prometheus__" ein +(Beispiel: [https://shiva.cloud-temple.com/api/metric/prometheus](https://shiva.cloud-temple.com/api/metric/prometheus)) @@ -183,22 +184,22 @@ Aktivieren Sie in der __Authentifizierung__ die Option __Basic Auth__. -Geben Sie in der Sektion "__Basic Auth Details__" den __Benutzernamen__ und __Passwort__ ein, wobei Sie jeweils den __ID__ und __Geheimnis__ eines __persönlichen Zugriffstokens__ verwenden, das die Berechtigung __metrics_read__ besitzt. +Im Bereich "__Basic Auth Details__" konfigurieren Sie den __Benutzernamen__ und das __Passwort__ unter Verwendung der __ID__ und des __Secrets__ eines __persönlichen Zugriffstokens__ mit der Berechtigung __metrics_read__. -Konfigurieren Sie in der Sektion "__Alerting__" die Eigenschaft __HTTP Method__ auf __GET__. +Im Bereich "__Alerting__" konfigurieren Sie die Eigenschaft __HTTP Method__ auf __GET__. #### Ergebnis -Um sicherzustellen, dass die Konfiguration korrekt und funktionsfähig ist, klicken Sie auf die Schaltfläche "__Speichern & testen__". +Um zu bestätigen, dass die Konfiguration korrekt und funktionsfähig ist, klicken Sie auf die Schaltfläche "__Save & test__". -Sie sollten einen Banner sehen, der Ihnen mitteilt, dass die Konfiguration erfolgreich war. +Es sollte eine Bestätigungsmeldung angezeigt werden, die besagt, dass die Konfiguration erfolgreich war. -Sie finden eine Vielzahl von Beispielen für Grafana-Konfigurationen hier: [https://github.com/Cloud-Temple/console-grafana-iaas](https://github.com/Cloud-Temple/console-grafana-iaas) +Hier finden Sie eine Vielzahl von Konfigurationsbeispielen für Grafana: [https://github.com/Cloud-Temple/console-grafana-iaas](https://github.com/Cloud-Temple/console-grafana-iaas) - + \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/console/orders.md b/i18n/de/docusaurus-plugin-content-docs/current/console/orders.md index 0a47d303..5a36e7f7 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/console/orders.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/console/orders.md @@ -30,243 +30,243 @@ import shivaOrdersIaasCpoolMemory from '@site/docs/console/images/shiva_orders_i ## Konzept -Die Überwachung des Bereitstellungsprozesses neuer Ressourcen erfolgt im Menü __'Befehle'__, das im grünen Balken links auf dem Bildschirm zugänglich ist. +Die Nachverfolgung der Bereitstellung neuer Ressourcen erfolgt im Menü __'Bestellungen'__, das im grünen Banner links auf dem Bildschirm verfügbar ist. -Es ermöglicht die Anzeige der angeforderten Cloud-Ressourcen, der Ressourcen, die sich im Bereitstellungsprozess befinden, sowie etwaiger Fehler innerhalb eines [Tenant](iam/concepts.md#tenant) Ihrer [Organisation](iam/concepts.md#organizations). +Dies ermöglicht die Anzeige der bestellten Cloud-Ressourcen, die sich in der Bereitstellung befinden, sowie eventueller Fehler innerhalb eines [Tenant](iam/concepts.md#tenant) Ihrer [Organisation](iam/concepts.md#organisations). -*__Hinweis: Derzeit ist eine globale Übersicht über alle im Rahmen verschiedener Tenants bereitgestellten Ressourcen innerhalb einer Organisation noch nicht möglich.__ Dieses Thema wird später durch die Einführung eines speziellen Portals für den Auftraggeber (im Sinne des Unterzeichners) und die Steuerung seiner Organisation behandelt.* +*__Hinweis: Derzeit ist die globale Ansicht aller innerhalb der verschiedenen Tenants bereitgestellten Ressourcen auf Organisationsebene noch nicht möglich.__ Dieses Thema wird später durch die Implementierung eines Portals für den Auftraggeber (im Sinne des Unterzeichners) und die Steuerung seiner Organisation behandelt.* -Die Bereitstellung oder Löschung von Ressourcen erfolgt jeweils innerhalb der Produkte im Menü __'IaaS'__ und __'Netzwerk'__ im grünen Balken links auf dem Bildschirm. +Die Bereitstellung von Ressourcen oder deren Löschung erfolgt in jedem Produkt über die Menüs __'IaaS'__ und __'Netzwerk'__ links auf dem Bildschirm im grünen Banner. -Es ist ebenfalls möglich, die Bereitstellungen direkt über die Benachrichtigungen der Cloud-Temple-Konsole einzusehen: +Die Bereitstellungen können auch direkt auf Ebene der Benachrichtigungen der Cloud Temple-Konsole eingesehen werden: -Von der Befehlsseite aus können Sie den Fortschritt einer Bereitstellung einsehen und gegebenenfalls mit dem Team über Kommentare oder Ergänzungen kommunizieren: +Auf der Bestellseite können Sie den Fortschritt einer Bereitstellung einsehen und gegebenenfalls mit dem Team kommunizieren, indem Sie Kommentare oder Präzisierungen hinzufügen: -__Hinweis__: __Es ist nicht möglich, gleichzeitig mehrere Befehle derselben Ressourcentypen zu starten. Sie müssen daher warten, bis der laufende Befehl abgeschlossen ist, bevor Sie einen neuen ausführen können. Dies gewährleistet eine effiziente und geordnete Ressourcenverwaltung innerhalb Ihres Umfelds.__ +__Hinweis__: __Es ist nicht möglich, mehrere Bestellungen desselben Ressourcentyps gleichzeitig zu starten. Sie müssen daher warten, bis die aktuelle Bestellung bearbeitet und abgeschlossen ist, bevor Sie eine neue aufgeben können. Dies gewährleistet ein effizientes und geordnetes Ressourcenmanagement in Ihrer Umgebung.__ -## Order a new Availability Zone +## Eine neue Verfügbarkeitszone bestellen -It is possible to add a new availability zone by accessing the "__Order__" menu. This option allows you to expand your resources and enhance the availability and resilience of your applications with just a few clicks: +Sie können eine neue Verfügbarkeitszone hinzufügen, indem Sie das Menü „__Bestellung__“ aufrufen. Diese Option ermöglicht es Ihnen, Ihre Ressourcen zu erweitern und die Verfügbarkeit und Resilienz Ihrer Anwendungen mit nur wenigen Klicks zu verbessern: -Begin by selecting your desired location, first choosing the geographic region, then selecting the corresponding availability zone (AZ) from the available options. This step enables you to tailor your resource deployment according to your infrastructure's location and requirements: +Zunächst wählen Sie den gewünschten Standort, indem Sie zuerst die geografische Region und anschließend die entsprechende Verfügbarkeitszone (AZ) aus den verfügbaren Optionen auswählen. Dieser Schritt ermöglicht es, die Bereitstellung Ihrer Ressourcen an den Standort und die Anforderungen Ihrer Infrastruktur anzupassen: -Next, select the desired type of hypervisor cluster, choosing the one that best meets the performance and management needs of your cloud infrastructure: +Wählen Sie anschließend den gewünschten Typ des Hypervisor-Clusters aus und entscheiden Sie sich für die Variante, die am besten zu den Leistungs- und Verwaltungsanforderungen Ihrer Cloud-Infrastruktur passt: -Then, specify the number of hypervisors and the desired amount of memory to adapt resources to your workload and the specific requirements of your cloud environment: +Legen Sie anschließend die Anzahl der Hypervisor-Instanzen sowie die gewünschte Speichermenge fest, um die Ressourcen an die Workload und die spezifischen Anforderungen Ihrer Cloud-Umgebung anzupassen: -Next, select the number of datastores to provision within the cluster as well as their types. Note that the maximum number of allowed datastores is 10, with a minimum of 2 datastores required. Each different datastore type will result in the creation of an additional datastoreCluster. For example, selecting 2 "live" type datastores and 1 "mass" type datastore will create two distinct datastoreClusters: +Wählen Sie anschließend die Anzahl der im Cluster bereitzustellenden Datastores sowie deren Typen. Bitte beachten Sie, dass maximal 10 Datastores erlaubt sind, wobei mindestens 2 Datastores erforderlich sind. Jeder unterschiedliche Datastore-Typ führt zur Erstellung eines zusätzlichen datastoreClusters. Wenn Sie beispielsweise 2 Datastores vom Typ „live“ und 1 Datastore vom Typ „mass“ auswählen, werden 2 separate datastoreClusters erstellt: -Define the required storage size for backup, ensuring capacity equivalent to your production storage. Consider an average compression ratio of 2 to optimize backup space and ensure effective data protection: +Legen Sie die für die Sicherung erforderliche Speicherkapazität fest und stellen Sie sicher, dass eine Kapazität vorgesehen wird, die der Ihres Produktions-Speichers entspricht. Berücksichtigen Sie einen durchschnittlichen Komprimierungsfaktor von 2, um den Sicherungsspeicher zu optimieren und einen effektiven Schutz Ihrer Daten zu gewährleisten: -Select the networks to propagate based on your needs. You also have the option to enable "Internet Access" if required, specifying the desired number of IP addresses, with a range between 1 and a maximum of 8: +Wählen Sie die zu propagierenden Netzwerke entsprechend Ihren Anforderungen aus. Falls erforderlich, können Sie zudem die Option „Internetzugriff“ aktivieren und dabei die gewünschte Anzahl an IP-Adressen festlegen (Wahl zwischen 1 und maximal 8): -You will then receive a summary of your selected options before confirming your order: +Anschließend erhalten Sie eine Zusammenfassung der ausgewählten Optionen, bevor Sie Ihre Bestellung bestätigen. -## Request additional storage resources +## Zusätzliche Speicherressourcen bestellen -The block storage allocation logic on compute clusters is based on the __IBM SVC (San Volume Controller)__ and __IBM FlashSystem__ technologies. Storage is organized into __LUNs of at least 500 GiB__, presented according to the technology used: +Die Logik der Block-Speicherzuweisung auf den Compute-Clustern basiert auf der __IBM SVC (San Volume Controller)__- und der __IBM FlashSystem__-Technologie. Der Speicher ist in __LUNs mit mindestens 500 GiB__ unterteilt, die je nach verwendeter Technologie wie folgt bereitgestellt werden: -- For __VMware__: as __datastores__ grouped into __SDRS clusters (Storage Distributed Resource Scheduler)__ -- For __Bare Metal__: as __volumes__ -- For __Open IaaS__: as __Storage Repositories (SR)__ +- Für __VMware__: als __Datastores__, die in __SDRS-Clustern (Storage Distributed Resource Scheduler)__ gruppiert sind +- Für __Bare Metal__: als __Volumes__ +- Für __Open IaaS__: als __Storage Repository (SR)__ -Each datastore inherits a __performance class__ defined in IOPS/To (ranging from 500 to 15,000 IOPS/To for FLASH, or no guarantee for MASS STORAGE). IOPS limitations are applied __at the datastore level__ (not per VM), meaning all virtual machines sharing the same datastore share the allocated IOPS quota. +Jeder Datastore erbt eine __Performance-Klasse__, die in IOPS/To definiert ist (de 500 à 15000 IOPS/To pour le FLASH, ou sans garantie pour le MASS STORAGE). Die IOPS-Beschränkung wird __auf Datastore-Ebene__ (et non par VM), was bedeutet, dass sich alle virtuellen Maschinen, die denselben Datastore teilen, das zugewiesene IOPS-Quota teilen. -__Key points to remember__: +__Wichtige Punkte__ : -- __Minimum size__: 500 GiB per LUN -- __Performance__: Proportional to allocated volume (e.g., 2 TiB in Standard class = maximum 3,000 IOPS) -- __Organization__: Datastores of the same type are automatically grouped into datastore clusters -- __Availability__: 99.99% measured monthly, including maintenance windows -- __Required space__: Always reserve 10% free space for backup snapshots and an amount equivalent to the total RAM of VMs for .VSWP files +- __Mindestgröße__ : 500 GiB pro LUN +- __Performance__: Proportional zum zugewiesenen Volumen, __bis zu einer absoluten physikalischen Obergrenze pro LUN__ (ex: 2 To en classe Standard = 3000 IOPS, mais une LUN de 10 To plafonnera à 30 000 IOPS maximum). Diese Obergrenze variiert je nach Klasse (10 000 IOPS / 512 Mo/s pour la classe Essentiel, et 30 000 IOPS / 1024 Mo/s pour les classes supérieures). +- __Organisation__: Datastores desselben Typs werden automatisch zu Datastore-Clustern gruppiert +- __Verfügbarkeit__: 99,99 % (monatlich gemessen, inklusive Wartungsfenster) +- __Benötigter Speicherplatz__: Immer 10 % freien Speicherplatz für Backup-Snapshots sowie das Äquivalent der Summe der VM-RAMs für .VSWP-Dateien einplanen -### Deploy a new compute cluster +### Einen neuen Compute-Cluster bereitstellen -Place a cluster order by selecting the options that best suit your virtualization requirements. Define key characteristics such as the number of hypervisors, cluster type, amount of memory, and required compute resources: +Bestellen Sie einen Hypervisor-Cluster, indem Sie die Optionen auswählen, die Ihren Virtualisierungsanforderungen entsprechen. Legen Sie die wichtigsten Merkmale fest, wie die Anzahl der Hypervisoren, den Clustertyp, die Speichergröße sowie die erforderlichen Rechenressourcen: -Select the availability zone: +Wählen Sie die Verfügbarkeitszone: -Choose the compute blade type: +Wählen Sie den Typ der Compute-Lame: -You can then select existing networks to propagate, or create new networks directly at this stage, depending on your infrastructure needs. Note that the total number of configurable networks is limited to a maximum of 20: +Anschließend haben Sie die Möglichkeit, bereits vorhandene Netzwerke auszuwählen und zu propagieren, oder direkt in diesem Schritt neue zu erstellen, je nach den Anforderungen Ihrer Infrastruktur. Beachten Sie, dass die Gesamtzahl der konfigurierbaren Netzwerke auf maximal 20 begrenzt ist: -You will then receive a summary of your selected options before confirming your order, after which you can view your ongoing order: +Anschließend erhalten Sie eine Zusammenfassung der ausgewählten Optionen, bevor Sie Ihre Bestellung bestätigen, und können anschließend den Status Ihrer Bestellung einsehen: -### Deploy a new storage cluster +### Einen neuen Storage-Cluster bereitstellen -In the "__command__" menu, proceed with ordering a __new storage cluster__ for your environment by selecting the options that match your requirements in terms of capacity, performance, and redundancy. Choose the location: +Im Menü "__commande__" bestellen Sie einen __neuen Storage-Cluster__ für Ihre Umgebung, indem Sie die Optionen auswählen, die Ihren Anforderungen an Kapazität, Leistung und Redundanz entsprechen. Wählen Sie den Standort: -Define the number of datastores to provision within the cluster as well as their type, adhering to the following limits: a minimum of 2 datastores and a maximum of 10 can be configured. Select the datastore types that best meet your needs regarding performance, capacity, and usage, in order to optimize storage in your environment: +Legen Sie die Anzahl der im Cluster bereitzustellenden Datastores sowie deren Typ fest und beachten Sie dabei die folgenden Grenzen: Es können mindestens 2 und maximal 10 Datastores konfiguriert werden. Wählen Sie die Datastore-Typen, die Ihren Anforderungen an Leistung, Kapazität und Nutzung am besten entsprechen, um die Speicherung in Ihrer Umgebung zu optimieren: -Select the desired storage type from the available options: +Wählen Sie den gewünschten Speichertyp aus den verfügbaren Optionen aus: -You will then be presented with a complete summary of the options you have selected, allowing you to review all settings before definitively confirming your order: +Anschließend gelangen Sie zu einer vollständigen Zusammenfassung der von Ihnen ausgewählten Optionen, mit der Sie alle Parameter überprüfen können, bevor Sie Ihre Bestellung endgültig bestätigen: -### Deploy a new datastore within a VMware SDRS cluster +### Einen neuen Datastore in einem VMware SDRS-Cluster bereitstellen -In this example, we will add block storage for a VMware infrastructure. -To add an additional datastore to your SDRS cluster, navigate to the __'Infrastructure'__ submenu, then select __'VMware'__. -Choose the appropriate VMware stack and availability zone, then go to the __'Storage'__ submenu. +In diesem Beispiel fügen wir Block-Speicher für eine VMware-Infrastruktur hinzu. +Um einen zusätzlichen Datastore in Ihrem SDRS-Speichercluster hinzuzufügen, navigieren Sie zum Untermenü __'Infrastructure'__ und dann zu __'VMWare'__. +Wählen Sie anschließend den VMware-Stack und die Verfügbarkeitszone. Navigieren Sie dann zum Untermenü __'Stockage'__. -Select the SDRS cluster that matches your desired performance characteristics, and click the __'Add a datastore'__ button located in the table displaying the list of datastores. +Wählen Sie den SDRS-Cluster, der den gewünschten Leistungsmerkmalen entspricht, und klicken Sie auf die Schaltfläche __'Ajouter un datastore'__ in der +Tabelle mit der Liste der Datastores. -__Note__: +__Hinweis__ : -- *The smallest activatable LUN size on a cluster is __500 GiB__.* -- *Datastore performance ranges from an average of 500 IOPS/TiB up to 15,000 IOPS/TiB on average. __This is a software-based limit enforced at the storage controller level__.* -- *The disk volume consumption billing for your organization is the sum of all LUNs across all used availability zones.* -- *The __'order'__ and __'compute'__ permissions are required for the account to perform this action.* +- *Die Größe der kleinsten aktivierbaren LUN in einem Cluster beträgt __500 GiB__.* +- *Die Leistung eines Datastore reicht von durchschnittlich 500 IOPS/TiB bis zu durchschnittlich 15000 IOPS/TiB. __Dies ist eine softwareseitige Drosselung auf Ebene der Speicherkontroller__, die einem absoluten Hardware-Limit von maximal 30.000 IOPS und 1024 MB/s pro LUN unterliegt.* +- *Die Abrechnung des von Ihrer Organisation verbrauchten Datenvolumens entspricht der Summe aller LUNs in allen verwendeten AZs.* +- *Für das Konto sind die Berechtigungen __'order'__ sowie __'compute'__ erforderlich, um diese Aktion durchzuführen.* -### Order new networks +### Neue Netzwerke bestellen -The networking technology used on the Cloud Temple infrastructure is based on [VPLS](https://fr.wikipedia.org/wiki/Virtual_Private_LAN_Service). It enables you to benefit from __Layer 2 networks seamlessly connected across your availability zones within a region__. +Die in der Cloud-Temple-Infrastruktur verwendete Netzwerktechnologie basiert auf [VPLS](https://fr.wikipedia.org/wiki/Virtual_Private_LAN_Service). Sie ermöglicht Ihnen, __durchgängige Level-2-Netzwerke zwischen Ihren Verfügbarkeitszonen innerhalb einer Region__ zu nutzen. +Es ist auch möglich, Netzwerke zwischen Ihren Mandanten zu teilen und sie in einer Hosting-Zone zu terminieren. +Im Grunde können Sie sich ein Cloud-Temple-Netzwerk als ein 802.1q-VLAN vorstellen, das an jedem Punkt Ihres Mandanten verfügbar ist. -It is also possible to share networks between your tenants and terminate them in hosting zones. -In essence, you can think of a Cloud Temple network as an 802.1q VLAN available at any point within your tenant. +Die Netzwerke auf der Cloud-Temple-Plattform sind auf __Level 2 (VLANs)__ basierend auf der __VPLS-Technologie (Virtual Private LAN Service)__. Diese Technologie ermöglicht Ihnen eine __Netzwerkkontinuität zwischen Ihren Verfügbarkeitszonen__ innerhalb einer Region mit garantierten Leistungsdaten: -Networks on the Cloud Temple platform are __Layer 2 (VLANs)__ based on the __VPLS (Virtual Private LAN Service)__ technology. This technology allows you to enjoy __seamless network connectivity across your availability zones__ within a region, with guaranteed performance: +- __Intra-AZ-Latenz__ : < 3 ms +- __Inter-AZ-Latenz__ : < 5 ms -- __Intra-AZ latency__: < 3 ms -- __Inter-AZ latency__: < 5 ms +__Flexibilität der Netzwerke__ : -__Network flexibility__: +- Ein Netzwerk kann __zwischen mehreren Clustern__ derselben Verfügbarkeitszone __geteilt__ werden +- Ein Netzwerk kann __zwischen mehreren Verfügbarkeitszonen__ derselben Region __propagiert__ werden +- Ein Netzwerk kann __zwischen verschiedenen Mandanten__ Ihrer Organisation __geteilt__ werden +- Ein Netzwerk kann __in einer Hosting-Zone terminiert__ werden, um Ihre physischen Geräte anzuschließen +- __Begrenzung__ : Maximal 20 Netzwerke pro Bestellung. Sie können mehrere aufeinanderfolgende Bestellungen durchführen, um diese Anzahl nach Bedarf zu erweitern -- A network can be __shared across multiple clusters__ within the same availability zone -- A network can be __propagated across multiple availability zones__ within the same region -- A network can be __shared between different tenants__ within your organization -- A network can be __terminated in a hosting zone__ for your physical equipment -- __Limit__: Maximum of 20 networks per order. You can place multiple successive orders to extend this number according to your needs - -Ordering a new network and defining sharing options between your tenants is done in the __'Network'__ menu of the green sidebar on the left side of the screen. Networks are first created, then a separate order is generated to propagate them. You can track the progress of ongoing orders by accessing the "Order" tab in the menu, or by clicking on the information labels that redirect you to active or processing orders. +Die Bestellung eines neuen Netzwerks und die Freigabeentscheidungen zwischen Ihren Mandanten werden im Menü __'Netzwerk'__ der grünen Leiste links auf dem Bildschirm durchgeführt. Die Netzwerke werden zunächst erstellt, anschließend wird eine separate Bestellung zur Propagierung generiert. Sie können den Fortschritt laufender Bestellungen nachverfolgen, indem Sie auf die Registerkarte „Bestellung“ im Menü zugreifen oder auf die Informationslabels klicken, die Sie zu aktiven oder in Bearbeitung befindlichen Bestellungen weiterleiten. -It is also possible to propagate existing networks or to separate the two steps—first creating the network, then propagating it later as needed. The propagation option is available in the settings of the selected network: +Es ist auch möglich, bereits vorhandene Netzwerke zu propagieren oder die beiden Schritte zu trennen, indem zunächst das Netzwerk erstellt und die Propagierung später nach Bedarf durchgeführt wird. Die Propagierungsoption befindet sich in den Optionen des ausgewählten Netzwerks: -Click on the "Propagate" option for an existing network, then select your desired propagation target. This step allows you to define the location or resources where the network should be propagated: +Klicken Sie für ein bereits vorhandenes Netzwerk auf die Option „Propagieren“ und wählen Sie dann das gewünschte Propagierungsziel aus. Dieser Schritt ermöglicht es Ihnen, den Standort oder die Ressourcen festzulegen, auf die das Netzwerk propagiert werden soll: -### Deactivation of a network +### Deaktivierung eines Netzwerks -A network can also be deactivated if necessary. This option allows you to temporarily pause access to or usage of the network without permanently deleting it, providing flexibility in managing your infrastructure according to your needs. +Ein Netzwerk kann bei Bedarf ebenfalls deaktiviert werden. Diese Option ermöglicht es Ihnen, den Zugriff oder die Nutzung des Netzwerks vorübergehend zu pausieren, ohne es endgültig zu löschen, und bietet so Flexibilität bei der Verwaltung Ihrer Infrastruktur entsprechend Ihren Anforderungen. -The deactivation option is located within the settings of the selected network. +Die Deaktivierungsoption befindet sich in den Optionen des ausgewählten Netzwerks. ' -## Add additional hypervisors to a compute cluster +## Weitere Hypervisor zu einem Rechencluster hinzufügen -A __compute cluster__ is a grouping of hypervisors that must comply with the following rules: +Ein __Rechencluster__ ist eine Gruppe von Hypervisoren, die folgenden Regeln erfüllen müssen: -### For VMware ESXi clusters +### Für VMware ESXi-Cluster -__Homogeneity rules__: +__Homogenitätsregeln__ : -- All hosts within a cluster must be of the __same server type__ (ECO, STANDARD, ADVANCE, PERFORMANCE, etc.) -- All hosts must belong to the __same tenant and the same availability zone__ -- __Limit__: Maximum of 32 hypervisors per cluster +- Alle Hosts eines Clusters müssen vom __gleichen Bladentyp__ sein (ECO, STANDARD, ADVANCE, PERFORMANCE, usw.) +- Alle Hosts gehören __zum selben Tenant und zur selben Verfügbarkeitszone__ +- __Grenze__ : Maximal 32 Hypervisor pro Cluster -__Memory allocation__: +__Speicherzuweisung__ : -- Each server is delivered with __all physical memory activated from the start__ -- __Example__: A cluster of 3 STANDARD v3 servers (each with 384 GB of physical memory) = 3 × 384 GB = 1,152 GB available -- __Recommendation__: Do not exceed 85% memory utilization per server to avoid VMware's compression and ballooning mechanisms +- Jeder Blade wird ab Werk mit __der vollständigen aktivierten physischen Speicherkapazität__ ausgeliefert +- __Beispiel__ : Ein Cluster aus 3 STANDARD v3 Blades (jeweils 384 Go physisch) = 3 × 384 Go = 1152 Go verfügbar +- __Empfehlung__ : Die Speichernutzung pro Blade sollte 85 % nicht überschreiten, um den VMware-Komprimierungsmechanismus und Ballooning zu vermeiden -__High Availability__: +__Hohe Verfügbarkeit__ : -- __Recommended minimum__: 2 hypervisors per cluster to benefit from the 99.99% SLA -- Enable the __VMware HA__ (High Availability) feature to automatically restart VMs in case of host failure +- __Empfohlenes Minimum__ : 2 Hypervisor pro Cluster, um die SLA von 99,99 % zu gewährleisten +- Aktivieren Sie die Funktion __VMware HA__ (High Availability), um VMs im Falle eines Host-Ausfalls automatisch neu zu starten -Adding hypervisors to a compute cluster is done in the __'IaaS'__ menu in the green sidebar on the left side of the screen. -In the following example, we will add compute capacity to a VMware-based hypervisor cluster. +Das Hinzufügen von Hypervisor zu einem Rechencluster erfolgt im Menü __'IaaS'__ im grünen Bereich links auf dem Bildschirm. +Im folgenden Beispiel fügen wir Rechenleistung zu einem Hypervisor-Cluster hinzu, der die VMware-Technologie verwendet. -Go to the __'Infrastructure'__ submenu, then __'VMWare'__. Select the VMware stack, the availability zone, and the compute cluster. -In this example, it is __'clu001-ucs12'__. Click the __'Add host'__ button located in the top-right corner of the table listing the hosts. +Gehen Sie in das Untermenü __'Infrastructure'__ und dann __'VMWare'__. Wählen Sie anschließend den VMware-Stack, die Verfügbarkeitszone und das Rechencluster. +In diesem Beispiel handelt es sich um __'clu001-ucs12'__. Klicken Sie auf die Schaltfläche __'Host hinzufügen'__, die sich oben rechts in der Tabelle mit der Host-Liste befindet. -__Note__: +__Hinweis__ : -- *__Cluster configuration must be homogeneous*. It is not allowed to mix different hypervisor types within a cluster. All servers must be of the same type.* -- *The __'order'__ and __'compute'__ permissions are required for the account to perform this action.* +- *__Die Konfiguration eines Clusters muss homogen sein__. Daher ist es nicht erlaubt, Hypervisortypen innerhalb eines Clusters zu mischen. Alle Blades müssen vom gleichen Typ sein.* +- *Das Konto benötigt die Berechtigungen __'order'__ sowie __'compute'__, um diese Aktion durchzuführen.* -### For Open IaaS clusters +### Für Open IaaS-Cluster -Open IaaS clusters follow similar rules regarding homogeneity and high availability. Computing resource management is also performed via the __'OpenIaaS'__ menu, with the same access rights requirements. +Für Open IaaS-Cluster gelten ähnliche Regeln hinsichtlich Homogenität und Hochverfügbarkeit. Die Verwaltung der Compute-Ressourcen erfolgt ebenfalls über das Menü __'OpenIaaS'__ mit denselben Anforderungen an die Zugriffsrechte. -## Add additional memory resources to a compute cluster +## Hinzufügen zusätzlicher Speicherressourcen zu einem Compute-Cluster -Memory allocation on compute clusters works as follows: +Die Speicherallokation auf Compute-Clustern funktioniert wie folgt: -__Memory Allocation Principle__: +__Prinzip der Speicherallokation__ : -- All compute blades are delivered with the __maximum physical memory installed__ -- A __software-based limitation__ is applied at the VMware cluster level to match the billed RAM -- Each blade has access to the __full amount of physically activated memory__ within the cluster +- Alle Compute-Blades werden mit dem __physischen Maximalspeicher__ ausgeliefert +- Auf Cluster-Ebene in VMware wird eine __softwareseitige Begrenzung__ angewendet, um der abgerechneten RAM-Menge zu entsprechen +- Jede Blade verfügt über __den gesamten physischen Speicher__, der im Cluster aktiviert ist -__Cluster-Scale Memory Sizing__: +__Dimensionierung pro Cluster__ : -- __Minimum__: number of hosts × 128 GB of memory -- __Maximum__: number of hosts × physical memory capacity per blade +- __Minimum__ : Anzahl der Hosts × 128 GB Speicher +- __Maximum__ : Anzahl der Hosts × physische Speichermenge der Blade -__Example__: For a three-host cluster using `STANDARD v3` hosts (384 GB physical memory per blade) +__Beispiel__ : Für ein Cluster aus drei Hosts vom Typ `STANDARD v3` (384 GB physisch pro Blade) -- Total available memory: 3 × 384 GB = 1152 GB +- Verfügbarer Gesamtspeicher: 3 × 384 GB = 1152 GB -__Important Recommendations__: +__Wichtige Empfehlungen__ : -- Do not exceed __85% average memory utilization per blade__ to avoid VMware ballooning and compression -- Ensure sufficient disk space is available for swap files (.VSWP) created when each VM starts (size = VM memory allocation) +- Die __durchschnittliche Speichernutzung pro Blade__ sollte __85 %__ nicht überschreiten, um VMware-Ballooning und -Komprimierung zu vermeiden +- Festplattenspeicher für Swap-Dateien (.VSWP) einplanen, die beim Start jeder VM erstellt werden (Größe = Speicher der VM) -To add additional RAM to a cluster, navigate to the cluster configuration (as previously described for adding a compute host) and click on __'Modify Memory'__. +Um Arbeitsspeicher zu einem Cluster hinzuzufügen, navigieren Sie zur Cluster-Konfiguration (wie zuvor beim Hinzufügen eines Compute-Hosts beschrieben) und klicken Sie auf __'Speicher ändern'__. -__Note__: +__Hinweis__ : -- *__Machines are delivered with the full physical memory installed__. Memory resource unblocking is purely a software activation at the cluster level.* -- *It is not possible to modify the physical memory capacity of a blade type. Always consider the maximum memory capacity of a blade when creating a cluster.* -- *The __'order'__ and __'compute'__ permissions are required on the account to perform this action.* +- *__Die Maschinen werden mit dem gesamten physischen Speicher ausgeliefert__. Die Freischaltung der Speicherressource ist lediglich eine softwareseitige Aktivierung auf Cluster-Ebene.* +- *Die physische Speichermenge eines Bladetyps kann nicht geändert werden. Berücksichtigen Sie bei der Erstellung eines Clusters unbedingt die maximale Kapazität einer Blade.* +- *Das Konto benötigt die Berechtigungen __'order'__ sowie __'compute'__, um diese Aktion durchzuführen.* \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/console/security/security_alarms.md b/i18n/de/docusaurus-plugin-content-docs/current/console/security/security_alarms.md index b4343b96..65bd1368 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/console/security/security_alarms.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/console/security/security_alarms.md @@ -1,48 +1,48 @@ --- -title: Security Alerts +title: Sicherheitswarnungen --- -Find here the security alerts related to our cloud services. -This page is updated daily to account for newly identified vulnerabilities. +Hier finden Sie die Sicherheitswarnungen zu unseren Cloud-Diensten. +Diese Seite wird täglich aktualisiert, um neu identifizierte Schwachstellen zu berücksichtigen. -## Vulnerabilities +## Schwachstellen -| Date | Reference(s) | CVSS | Title | Description | Service(s) | Severity | Treatment | +| Datum | Referenz(en) | CVSS | Titel | Beschreibung | Dienst(e) | Schweregrad | Maßnahme | |---------------------|-----------------|-------------|--------------|---------|-------------|----------------|-------------| -| 06/04/2026 | [DSA-2026-143](https://www.dell.com/support/kbdoc/en-us/000449325/dsa-2026-143-security-update-for-dell-objectscale-prior-to-4-1-0-3-and-4-2-0-0-insertion-of-sensitive-information-into-log-file-vulnerability) | 7.8 | **DSA-2026-143 : Schwachstelle in Dell ObjectScale (CVE-2026-28261)** | Eine Schwachstelle (CVE-2026-28261) in Dell ObjectScale im Zusammenhang mit dem Einfügen sensibler Informationen in Protokolldateien ermöglicht es einem lokalen Angreifer, Geheimnisse offenzulegen und seine Privilegien zu erweitern, um das System zu kompromittieren. | Object Storage | 🟡 Moderat | ✅ Die Behebung Ihrer ObjectScale-Umgebungen wird von Cloud Temple übernommen. Es ist keine Aktion Ihrerseits erforderlich. | -| 23/03/2026 | [XSA-480](https://docs.vates.tech/security/advisories/2026/vates-sa-2026-005/) | 7.8 | **XCP-NG Schwachstelle (CVE-2026-23554)** | In XCP-ng 8.3 wurde eine Schwachstelle (CVE-2026-23554) identifiziert, die speziell auf Intel x86-Prozessoren basierende Systeme betrifft und es einer VM ermöglicht, den Host zu kompromittieren (Privilegienerweiterung oder DoS). | IaaS OpenSource | 🟠 Wichtig | ✅ Die Aktualisierung Ihrer XCP-ng-Instanzen ist geplant, sobald die Patches von Cloud Temple validiert wurden. Es ist keine Aktion Ihrerseits erforderlich. | -| 29/01/2026 | [Hersteller-Bulletin](https://xcp-ng.org/blog/2026/01/29/january-2026-security-and-maintenance-updates-for-xcp-ng-8-3-lts/) | 2.9 - 8.5 | **XCP-NG Schwachstellen** | In XCP-ng wurden mehrere Schwachstellen entdeckt. Die wichtigste ermöglicht eine Privilegienerweiterung von einer VM zum dom0. Andere Schwachstellen ermöglichen die Ausführung von beliebigem Code über die NVMe-Emulation oder den Abfluss vertraulicher Daten zwischen virtuellen Maschinen. | IaaS OpenSource | 🟠 Wichtig | ✅ Die Aktualisierung Ihrer XCP-ng-Instanzen ist geplant, sobald die Patches von Cloud Temple validiert wurden. Es ist keine Aktion Ihrerseits erforderlich. | -| 23/01/2026 | [DSA-2026-047](https://www.dell.com/support/kbdoc/en-us/000415880/dsa-2026-047-security-update-for-dell-ecs-and-objectscale-multiple-vulnerabilities) | 4.4 - 8.8 | **DSA-2026-047 : Schwachstellen in Dell ObjectScale** | Mehrere Schwachstellen in Dell ObjectScale im Zusammenhang mit Standard-Anmeldeinformationen und der Übertragung/Speicherung im Klartext ermöglichen lokale oder Remote-Kompromittierungen. | Object Storage | 🟠 Wichtig | ✅ Die Behebung Ihrer ObjectScale-Umgebungen wird von Cloud Temple übernommen. Es ist keine Aktion Ihrerseits erforderlich. | -| 23/12/2025 | [CVE-2025-14443](https://access.redhat.com/security/cve/CVE-2025-14443) | 8.5 | **Schwachstelle in Red Hat OpenShift (CVE-2025-14443)** | Eine Schwachstelle in der Komponente `openshift-apiserver` ermöglicht eine Ausweitung von Berechtigungen. Die Ausnutzung erfordert eine vorherige Authentifizierung. | PaaS OpenShift | 🟠 Wichtig | ✅ Die Aktualisierung Ihrer OpenShift-Instanzen ist geplant, sobald die Patches von Cloud Temple validiert wurden. Es ist keine Aktion Ihrerseits erforderlich. | -| 30/09/2025 | [VMSA-2025-0016](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/36150) | 8.5 | **VMSA-2025-0016: Schwachstelle in VMware vCenter (CVE-2025-41250)** | Eine Schwachstelle (CVE-2025-41250) ermöglicht es einem authentifizierten Angreifer, Benachrichtigungs-E-Mails für geplante Aufgaben zu ändern. | IaaS By VMware | 🟠 Wichtig | ✅ Die Aktualisierung Ihrer vCenter-Instanzen ist geplant, sobald die Patches von Cloud Temple validiert wurden. Es ist keine Aktion Ihrerseits erforderlich. Das Update wird in den Konsolen-Benachrichtigungen angezeigt. | -| 30/09/2025 | [VMSA-2025-0015](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/36149) | 7.6 | **VMSA-2025-0015: Schwachstelle in VMware Tools (Windows)** | Eine Schwachstelle (CVE-2025-41246) in VMware Tools für Windows ermöglicht eine Ausweitung von Berechtigungen (erfordert authentifizierten lokalen Zugriff). | IaaS By VMware | 🟡 Mäßig | ⚠️ Wir empfehlen Ihnen, die VMware Tools auf Ihren virtuellen Maschinen zu aktualisieren. Die korrigierten VM-Tools-Versionen sind in den von Cloud Temple bereitgestellten ESXi-Paketen enthalten. | -| 07/08/2025 | [DSA-2025-154](https://www.dell.com/support/kbdoc/en-us/000262308/dsa-2025-154-security-update-for-dell-ecs-and-objectscale-use-of-hard-coded-ssh-cryptographic-key-vulnerability) | 8.4 | **DSA-2025-154 : Schwachstelle in Dell ObjectScale (CVE-2025-26476)** | Eine Schwachstelle (CVE-2025-26476) in Dell ObjectScale (< 4.0.0.0) im Zusammenhang mit der Verwendung hartcodierter SSH-Schlüssel ermöglicht lokalen unauthentifizierten Zugriff. | Object Storage | 🟠 Wichtig | ✅ Die Behebung Ihrer ObjectScale-Umgebungen wird von Cloud Temple übernommen. Es ist keine Aktion Ihrerseits erforderlich. | -| 15/07/2025 | [VMSA-2025-0013](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/VMSA-2025-0013--VMware-ESXi--Workstation--Fusion--and-Tools-updates-address-multiple-vulnerabilities--CVE-2025-41236--CVE-2025-41237--CVE-2025-41238--CVE-2025-41239-/35877) | 9.3 | **VMSA-2025-0013 : Wichtige Schwachstellen in VMware ESXi** | Mehrere wichtige Schwachstellen betreffen VMware ESXi. Patches werden vom Hersteller bereitgestellt. | IaaS By VMware | 🟠 Wichtig | ⚠️ Wir empfehlen Ihnen, Ihre Hypervisoren zu aktualisieren. Die korrigierten ESXi-Versionen sind verfügbar, sobald sie von Cloud Temple validiert wurden. Console zeigt die ESXi an, die ein Update benötigen. | -| 15/07/2025 | [VMSA-2025-0013](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/VMSA-2025-0013--VMware-ESXi--Workstation--Fusion--and-Tools-updates-address-multiple-vulnerabilities--CVE-2025-41236--CVE-2025-41237--CVE-2025-41238--CVE-2025-41239-/35877) | 7.1 | **VMSA-2025-0013 : Schwachstelle in VMware Tools (CVE-2025-41239)** | Eine Schwachstelle (CVE-2025-41239) in VMware Tools ermöglicht die Preisgabe sensibler Informationen über nicht initialisierte vSockets. Patches werden vom Hersteller bereitgestellt. | IaaS By VMware | 🟡 Mäßig | ⚠️ Wir empfehlen Ihnen, VMware Tools auf Ihren virtuellen Maschinen zu aktualisieren. Die korrigierten VM Tools-Versionen sind in den ESXi-Paketen enthalten, die von Cloud Temple zur Verfügung gestellt werden. | -| 01/07/2025 | [XSA-470](https://xenbits.xen.org/xsa/advisory-470.html) | N/A | **XCP-NG-Schwachstelle durch fehlerhafte Ausnahmebehandlung**
[Hersteller-Bulletin](https://xcp-ng.org/blog/2025/07/03/july-2025-security-and-maintenance-update-for-xcp-ng-8-2-lts/) | Eine Schwachstelle wurde in XCP-NG entdeckt, die es privilegiertem Code innerhalb einer virtuellen Maschine ermöglicht, einen Absturz des Hypervisors zu verursachen, was zu einem Denial of Service (DoS) des gesamten Hosts führen kann. | IaaS OpenSource | 🟡 Mäßig | ✅ Das Update Ihrer XCP-ng-Instanzen ist geplant, sobald die Patches von Cloud Temple validiert wurden. Kein Handeln Ihrerseits erforderlich. | -| 23/05/2025 | [XSA-468](https://xenbits.xen.org/xsa/advisory-468.html) | 8.8-90 | **XCP-NG-Vulnerabilitäten in den PV-Windows-Treibern (XSA-468)**
[Herausgeber-Bulletin](https://xcp-ng.org/blog/2025/05/27/xsa-468-windows-pv-driver-vulnerabilities/) | Mehrere Schwachstellen (CVE-2025-27462, CVE-2025-27463, CVE-2025-27464) in den PV-Windows-Treibern ermöglichen es unprivilegierten Benutzern, Systemrechte innerhalb der Windows-VMs zu erlangen. | IaaS OpenSource | 🟠 Wichtig | ⚠️ Wir empfehlen Ihnen, die PV-Windows-Treiber Ihrer virtuellen Maschinen auf in der Sicherheitsmitteilung angegebenen korrigierten Versionen zu aktualisieren. ✅ Die Aktualisierung Ihrer XCP-ng-Instanzen ist ab der Validierung der Patches durch Cloud Temple geplant. | -| 22/05/2025 | [XSA-469, INTEL-SA](https://xcp-ng.org/blog/2025/05/14/may-2025-security-update-for-xcp-ng-8-2-83/) | 4.9-6.5 | **XCP-NG-Vulnerabilitäten im Intel-Microcode und Xen (XSA-469, INTEL-SA)**
[Herausgeber-Bulletin](https://xcp-ng.org/blog/2025/05/14/may-2025-security-update-for-xcp-ng-8-2-8-3/) | Sicherheitspatches für XCP-ng wurden veröffentlicht, die mehrere Schwachstellen im Intel-Microcode und Xen beheben. | IaaS OpenSource | 🟡 Mäßig | ✅ Die Aktualisierung Ihrer XCP-ng-Instanzen ist ab der Validierung der Patches durch Cloud Temple geplant. Keine Aktion von Ihrer Seite erforderlich. | -| 21/05/2025 | [VMSA-2025-0010](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25717) | 4.3-6.8 | **VMSA-2025-0010: Mehrere Schwachstellen in VMware ESXi (CVE-2025-41226, CVE-2025-41227, CVE-2025-41228)** | Es wurden mehrere Schwachstellen in VMware ESXi gemeldet: Denial-of-Service-Schwachstelle bei Gastoperationen (CVE-2025-41226), Denial-of-Service-Schwachstelle (CVE-2025-41227), Cross-Site-Scripting (XSS)-Schwachstelle (CVE-2025-41228). Patches werden vom Hersteller bereitgestellt. | IaaS By VMware | 🟡 Mäßig | ⚠️ Wir empfehlen Ihnen, Ihre Hypervisoren zu aktualisieren. Die gepatchten ESXi-Versionen sind verfügbar, sobald sie von Cloud Temple validiert wurden. Die Konsole zeigt Ihnen an, welche ESXi aktualisiert werden müssen. | -| 21/05/2025 | [VMSA-2025-0010](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25717) | 4.3-8.8 | **VMSA-2025-0010: Mehrere Schwachstellen in vCenter (CVE-2025-41225, CVE-2025-41228)** | Es wurden mehrere Schwachstellen in VMware vCenter gemeldet: Authentifizierte Befehlsausführung in VMware vCenter Server (CVE-2025-41225), Cross-Site-Scripting (XSS)-Schwachstelle (CVE-2025-41228). Patches werden vom Hersteller bereitgestellt. | IaaS By VMware | 🟠 Wichtig | ✅ Die Aktualisierung Ihrer vCenter-Instanzen ist eingeplant, sobald die Patches von Cloud Temple validiert wurden. Es ist keine Aktion Ihrerseits erforderlich. | -| 14/05/2025 | [VMSA-2025-0007](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25683) | 6.1 | **VMSA-2025-0007: Unsichere Dateiverwaltung in VMware Tools (CVE-2025-22247)** | Es wurde eine unsichere Dateiverwaltung in VMware Tools gemeldet. Patches werden vom Hersteller bereitgestellt. | IaaS By VMware | 🟡 Mäßig | ⚠️ Wir empfehlen Ihnen, VMware Tools auf Ihren virtuellen Maschinen zu aktualisieren. | -| 25/03/2025 | [VMSA-2025-0005](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25518) | 7.8 | **VMSA-2025-0005: Authentifizierungsumgehung in VMware Tools für Windows (CVE-2025-22230)** | Es wurde eine Schwachstelle zur Umgehung der Authentifizierung in VMware Tools für Windows gemeldet. Patches werden vom Hersteller bereitgestellt. | IaaS By VMware | 🟠 Wichtig | ⚠️ Wir empfehlen Ihnen, VMware Tools auf Ihren virtuellen Maschinen zu aktualisieren. | -| 04/03/2025 | [VMSA-2025-0004](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25390) | 7.1-9.3 | **VMSA-2025-0004: Mehrere Schwachstellen in VMware ESXi (CVE-2025-22224, CVE-2025-22225, CVE-2025-22226)** | Es wurden mehrere Schwachstellen in VMware ESXi gemeldet: Heap-Überlauf-Schwachstelle in VMCI (CVE-2025-22224), von VMware als kritisch eingestuft, Arbiträrer Schreibzugriff in VMware ESXi (CVE-2025-22225), HGFS-Informationsleck-Schwachstelle (CVE-2025-22226). Patches werden vom Hersteller bereitgestellt. | IaaS By VMware | 🟠 Wichtig | ⚠️ Wir empfehlen Ihnen, Ihre Hypervisoren zu aktualisieren. Die gepatchten ESXi-Versionen sind verfügbar, sobald sie von Cloud Temple validiert wurden. Die Konsole zeigt Ihnen an, welche ESXi aktualisiert werden müssen. | +| 06/04/2026 | [DSA-2026-143](https://www.dell.com/support/kbdoc/en-us/000449325/dsa-2026-143-security-update-for-dell-objectscale-prior-to-4-1-0-3-and-4-2-0-0-insertion-of-sensitive-information-into-log-file-vulnerability) | 7.8 | **DSA-2026-143: Schwachstelle in Dell ObjectScale (CVE-2026-28261)** | Eine Schwachstelle (CVE-2026-28261) in Dell ObjectScale, die mit der Einfügung sensibler Informationen in Protokolldateien zusammenhängt, ermöglicht es einem lokalen Angreifer, Geheimnisse offenzulegen und seine Privilegien zu erhöhen, um das System zu kompromittieren. | Object Storage | 🟡 Mittel | ✅ Die Behebung Ihrer ObjectScale-Umgebungen wird von Cloud Temple übernommen. Es sind keine Maßnahmen Ihrerseits erforderlich. | +| 23/03/2026 | [XSA-480](https://docs.vates.tech/security/advisories/2026/vates-sa-2026-005/) | 7.8 | **XCP-NG-Schwachstelle (CVE-2026-23554)** | Eine Schwachstelle (CVE-2026-23554) wurde in XCP-ng 8.3 identifiziert, die speziell Systeme auf Basis von Intel x86-Prozessoren betrifft und es einer VM ermöglicht, den Host zu kompromittieren (Privilegieneskalation oder DoS). | IaaS OpenSource | 🟠 Hoch | ✅ Das Update Ihrer XCP-ng-Instanzen ist ab der Validierung der Patches durch Cloud Temple geplant. Es sind keine Maßnahmen Ihrerseits erforderlich. | +| 29/01/2026 | [Herstellerbulletin](https://xcp-ng.org/blog/2026/01/29/january-2026-security-and-maintenance-updates-for-xcp-ng-8-3-lts/) | 2.9 - 8.5 | **XCP-NG-Schwachstellen** | Mehrere Schwachstellen wurden in XCP-ng entdeckt. Die schwerwiegendste ermöglicht eine Privilegieneskalation von einer VM auf dom0. Weitere Lücken ermöglichen die Ausführung beliebigen Codes über die NVMe-Emulation oder das Auslaufen vertraulicher Daten zwischen virtuellen Maschinen. | IaaS OpenSource | 🟠 Hoch | ✅ Das Update Ihrer XCP-ng-Instanzen ist ab der Validierung der Patches durch Cloud Temple geplant. Es sind keine Maßnahmen Ihrerseits erforderlich. | +| 23/01/2026 | [DSA-2026-047](https://www.dell.com/support/kbdoc/en-us/000415880/dsa-2026-047-security-update-for-dell-ecs-and-objectscale-multiple-vulnerabilities) | 4.4 - 8.8 | **DSA-2026-047: Schwachstellen in Dell ObjectScale** | Mehrere Schwachstellen in Dell ObjectScale, die mit Standardanmeldedaten sowie unverschlüsselter Übertragung/Speicherung im Klartext zusammenhängen, ermöglichen lokale oder remote Kompromittierungen. | Object Storage | 🟠 Hoch | ✅ Die Behebung Ihrer ObjectScale-Umgebungen wird von Cloud Temple übernommen. Es sind keine Maßnahmen Ihrerseits erforderlich. | +| 23/12/2025 | [CVE-2025-14443](https://access.redhat.com/security/cve/CVE-2025-14443) | 8.5 | **Schwachstelle in Red Hat OpenShift (CVE-2025-14443)** | Eine Schwachstelle in der Komponente `openshift-apiserver` ermöglicht eine Privilegieneskalation. Die Ausnutzung erfordert eine vorherige Authentifizierung. | PaaS OpenShift | 🟠 Hoch | ✅ Das Update Ihrer OpenShift-Instanzen ist ab der Validierung der Patches durch Cloud Temple geplant. Es sind keine Maßnahmen Ihrerseits erforderlich.| +| 30/09/2025 | [VMSA-2025-0016](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/36150) | 8.5 | **VMSA-2025-0016: Schwachstelle in VMware vCenter (CVE-2025-41250)** | Eine Schwachstelle (CVE-2025-41250) ermöglicht es einem authentifizierten Angreifer, die Benachrichtigungs-E-Mails für geplante Aufgaben zu ändern. | IaaS By VMware | 🟠 Hoch | ✅ Das Update Ihrer vCenter-Instanzen ist ab der Validierung der Patches durch Cloud Temple geplant. Es sind keine Maßnahmen Ihrerseits erforderlich. Das Update wird in den Console-Benachrichtigungen angezeigt. | +| 30/09/2025 | [VMSA-2025-0015](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/36149) | 7.6 | **VMSA-2025-0015: Schwachstelle in VMware Tools (Windows)** | Eine Schwachstelle (CVE-2025-41246) in VMware Tools für Windows ermöglicht eine Privilegieneskalation (erfordert einen authentifizierten lokalen Zugriff). | IaaS By VMware | 🟡 Mittel | ⚠️ Wir empfehlen, die VMware Tools auf Ihren virtuellen Maschinen zu aktualisieren. Die korrigierten VM Tools-Versionen sind in den von Cloud Temple bereitgestellten ESXi-Paketen enthalten. | +| 07/08/2025 | [DSA-2025-154](https://www.dell.com/support/kbdoc/en-us/000262308/dsa-2025-154-security-update-for-dell-ecs-and-objectscale-use-of-hard-coded-ssh-cryptographic-key-vulnerability) | 8.4 | **DSA-2025-154: Schwachstelle in Dell ObjectScale (CVE-2025-26476)** | Eine Schwachstelle (CVE-2025-26476) in Dell ObjectScale (< 4.0.0.0), die mit der Verwendung fest codierter SSH-Schlüssel zusammenhängt, ermöglicht einen nicht authentifizierten lokalen Zugriff. | Object Storage | 🟠 Hoch | ✅ Die Behebung Ihrer ObjectScale-Umgebungen wird von Cloud Temple übernommen. Es sind keine Maßnahmen Ihrerseits erforderlich. | +| 15/07/2025 | [VMSA-2025-0013](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/VMSA-2025-0013--VMware-ESXi--Workstation--Fusion--and-Tools-updates-address-multiple-vulnerabilities--CVE-2025-41236--CVE-2025-41237--CVE-2025-41238--CVE-2025-41239-/35877) | 9.3 | **VMSA-2025-0013: Schwerwiegende Schwachstellen in VMware ESXi** | Mehrere schwerwiegende Schwachstellen betreffen VMware ESXi. Patches werden vom Hersteller bereitgestellt. | IaaS By VMware | 🟠 Hoch | ⚠️ Wir empfehlen, Ihre Hypervisor zu aktualisieren. Die korrigierten ESXi-Versionen sind ab ihrer Validierung durch Cloud Temple verfügbar. Console weist auf ESXi-Systeme hin, die ein Update benötigen. | +| 15/07/2025 | [VMSA-2025-0013](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/VMSA-2025-0013--VMware-ESXi--Workstation--Fusion--and-Tools-updates-address-multiple-vulnerabilities--CVE-2025-41236--CVE-2025-41237--CVE-2025-41238--CVE-2025-41239-/35877) | 7.1 | **VMSA-2025-0013: Schwachstelle in VMware Tools (CVE-2025-41239)** | Eine Schwachstelle (CVE-2025-41239) in VMware Tools ermöglicht die Offenlegung sensibler Informationen über nicht initialisierte vSockets. Patches werden vom Hersteller bereitgestellt. | IaaS By VMware | 🟡 Mittel | ⚠️ Wir empfehlen, die VMware Tools auf Ihren virtuellen Maschinen zu aktualisieren. Die korrigierten VM Tools-Versionen sind in den von Cloud Temple bereitgestellten ESXi-Paketen enthalten. | +| 01/07/2025 | [XSA-470](https://xenbits.xen.org/xsa/advisory-470.html) | N/A | **XCP-NG-Schwachstelle durch fehlerhafte Ausnahmebehandlung** [Herstellerbulletin](https://xcp-ng.org/blog/2025/07/03/july-2025-security-and-maintenance-update-for-xcp-ng-8-2-lts/) | Eine Schwachstelle wurde in XCP-NG entdeckt, die es privilegiertem Code, der von einer virtuellen Maschine ausgeführt wird, ermöglicht, einen Hypervisor-Crash auszulösen und damit einen Denial-of-Service (DoS) des gesamten Hosts zu verursachen. | IaaS OpenSource | 🟡 Mittel | ✅ Das Update Ihrer XCP-ng-Instanzen ist ab der Validierung der Patches durch Cloud Temple geplant. Es sind keine Maßnahmen Ihrerseits erforderlich.| +| 23/05/2025 | [XSA-468](https://xenbits.xen.org/xsa/advisory-468.html) | 8.8-9.0 | **XCP-NG-Schwachstellen in den Windows-PV-Treibern (XSA-468)** [Herstellerbulletin](https://xcp-ng.org/blog/2025/05/27/xsa-468-windows-pv-driver-vulnerabilities/) | Mehrere Schwachstellen (CVE-2025-27462, CVE-2025-27463, CVE-2025-27464) in den Windows-PV-Treibern ermöglichen nicht privilegierten Benutzern, innerhalb von Windows-VMs Systemprivilegien zu erlangen. | IaaS OpenSource | 🟠 Hoch | ⚠️ Wir empfehlen, die Windows-PV-Treiber Ihrer virtuellen Maschinen auf die im Sicherheitsbulletin angegebenen korrigierten Versionen zu aktualisieren. ✅ Das Update Ihrer XCP-ng-Instanzen ist ab der Validierung der Patches durch Cloud Temple geplant. | +| 22/05/2025 | [XSA-469, INTEL-SA](https://xcp-ng.org/blog/2025/05/14/may-2025-security-update-for-xcp-ng-8-2-8-3/) | 4.9-6.5 | **XCP-NG-Schwachstellen im Intel-Mikrocode und Xen (XSA-469, INTEL-SA)** [Herstellerbulletin](https://xcp-ng.org/blog/2025/05/14/may-2025-security-update-for-xcp-ng-8-2-8-3/) | Sicherheitspatches für XCP-ng wurden veröffentlicht, die mehrere Schwachstellen im Intel-Mikrocode und Xen beheben. | IaaS OpenSource | 🟡 Mittel | ✅ Das Update Ihrer XCP-ng-Instanzen ist ab der Validierung der Patches durch Cloud Temple geplant. Es sind keine Maßnahmen Ihrerseits erforderlich.| +| 21/05/2025 | [VMSA-2025-0010](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25717) | 4.3-6.8 | **VMSA-2025-0010: Mehrere Schwachstellen in VMware ESXi (CVE-2025-41226, CVE-2025-41227, CVE-2025-41228)** | Mehrere Schwachstellen in VMware ESXi wurden gemeldet: Schwachstelle für Denial-of-Service bei Gastoperationen (CVE-2025-41226), Schwachstelle für Denial-of-Service (CVE-2025-41227), Cross-Site-Scripting-Schwachstelle (XSS) (CVE-2025-41228). Patches werden vom Hersteller bereitgestellt. | IaaS By VMware | 🟡 Mittel | ⚠️ Wir empfehlen, Ihre Hypervisor zu aktualisieren. Die korrigierten ESXi-Versionen sind ab ihrer Validierung durch Cloud Temple verfügbar. Console weist auf ESXi-Systeme hin, die ein Update benötigen. | +| 21/05/2025 | [VMSA-2025-0010](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25717) | 4.3-8.8 | **VMSA-2025-0010: Mehrere Schwachstellen in vCenter (CVE-2025-41225, CVE-2025-41228)** | Mehrere Schwachstellen in VMware vCenter wurden gemeldet: Schwachstelle für authentifizierte Befehlsausführung in VMware vCenter Server (CVE-2025-41225), Cross-Site-Scripting-Schwachstelle (XSS) (CVE-2025-41228). Patches werden vom Hersteller bereitgestellt. | IaaS By VMware | 🟠 Hoch | ✅ Das Update Ihrer vCenter-Instanzen ist ab der Validierung der Patches durch Cloud Temple geplant. Es sind keine Maßnahmen Ihrerseits erforderlich. Das Update wird in den Console-Benachrichtigungen angezeigt. | +| 14/05/2025 | [VMSA-2025-0007](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25683) | 6.1 | **VMSA-2025-0007: Unsichere Dateiverwaltung in VMware Tools (CVE-2025-22247)** | Eine Schwachstelle in der Dateiverwaltung von VMware Tools wurde gemeldet. Patches werden vom Hersteller bereitgestellt. | IaaS By VMware | 🟡 Mittel | ⚠️ Wir empfehlen, die VMware Tools auf Ihren virtuellen Maschinen zu aktualisieren. Die korrigierten VM Tools-Versionen sind in den von Cloud Temple bereitgestellten ESXi-Paketen enthalten. | +| 25/03/2025 | [VMSA-2025-0005](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25518) | 7.8 | **VMSA-2025-0005: Authentifizierungsumgehung in VMware Tools für Windows (CVE-2025-22230)** | Eine Schwachstelle zur Umgehung der Authentifizierung in VMware Tools für Windows wurde gemeldet. Patches werden vom Hersteller bereitgestellt. | IaaS By VMware | 🟠 Hoch | ⚠️ Wir empfehlen, die VMware Tools auf Ihren virtuellen Maschinen zu aktualisieren. Die korrigierten VM Tools-Versionen sind in den von Cloud Temple bereitgestellten ESXi-Paketen enthalten. | +| 04/03/2025 | [VMSA-2025-0004](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25390) | 7.1-9.3 | **VMSA-2025-0004: Mehrere Schwachstellen in VMware ESXi (CVE-2025-22224, CVE-2025-22225, CVE-2025-22226)** | Mehrere Schwachstellen in VMware ESXi wurden gemeldet: VMCI-Heap-Overflow-Schwachstelle (CVE-2025-22224), von VMware als kritisch eingestuft, Schwachstelle für willkürliches Schreiben in VMware ESXi (CVE-2025-22225), HGFS-Informationenoffenlegungsschwachstelle (CVE-2025-22226). Patches werden vom Hersteller bereitgestellt. | IaaS By VMware | 🟠 Hoch | ⚠️ Wir empfehlen, Ihre Hypervisor zu aktualisieren. Die korrigierten ESXi-Versionen sind ab ihrer Validierung durch Cloud Temple verfügbar. Console weist auf ESXi-Systeme hin, die ein Update benötigen. | ## Informationen -- **Datum** : Datum der ursprünglichen Veröffentlichung der Sicherheitswarnung von Cloud Temple. -- **Referenz(en)** : CVE-ID, falls verfügbar. -- **CVSS** : CVSS v3-Basisbewertung gemäß dem Herausgeber oder der CVE, nicht kontextualisiert. Die Kontextualisierung wird durch die Schwere CT ausgedrückt. Falls mehrere Schwachstellen betroffen sind, werden die minimalen und maximalen CVSS-Werte angegeben. -- **Titel** : Titel der Warnung, mit Herausgeber-Referenz, falls verfügbar. -- **Beschreibung** : Zusammenfassende Beschreibung mit Link(en) zu detaillierten Informationen. +- **Datum** : Erstveröffentlichungsdatum der Cloud Temple-Sicherheitswarnung. +- **Referenz(en)** : CVE-ID, sofern verfügbar. +- **CVSS** : Basis-CVSS-v3-Score, wie vom Anbieter oder CVE gemeldet, ohne Kontext. Die Kontextualisierung erfolgt über den CT-Schweregrad. Betrifft die Warnung mehrere Schwachstellen, werden der minimale und maximale CVSS-Score angegeben. +- **Titel** : Titel der Warnung, ggf. mit Anbieterreferenz, sofern verfügbar. +- **Beschreibung** : Zusammenfassende Beschreibung mit Link(s) zu detaillierten Informationen. - **Dienst(e)** : Cloud Temple-Dienst(e), die betroffen sein könnten. -- **Schwere** : Schweregrad im Kontext der Cloud Temple-Dienste (für die kritischste Schwachstelle bei mehreren betroffenen Schwachstellen). Die Ausnutzbarkeitskriterien werden im technischen Kontext unserer Infrastrukturen und Dienste berücksichtigt. +- **Schweregrad** : Schweregrad im Kontext der Cloud Temple-Dienste (für die kritischste Schwachstelle bei mehreren Schwachstellen). Ausnutzbarkeitskriterien werden im technischen Kontext unserer Cloud-Infrastrukturen und -Dienste berücksichtigt. -| Ebene | Beschreibung | -|-------|--------------| -| 🔴 **Kritisch** | Schwachstelle mit CVSS 7+ mit erheblichem Ausnutzungsrisiko (hohe Exposition, einfache Ausnutzbarkeit). Eine Korrektur oder Minderung der Auswirkungen wird dringend empfohlen. | -| 🟠 **Wichtig** | Schwachstelle mit CVSS 7+, die jedoch kein erhebliches Ausnutzungsrisiko darstellt (begrenzte Exposition oder Ausnutzungsbedingungen). | -| 🟡 **Mäßig** | Schwachstelle mit CVSS 4+ | -| 🔵 **Gering** | Schwachstelle mit CVSS unter 4 oder nicht ausnutzbar. | +| Schweregrad | Beschreibung | +|--------|-------------| +| 🔴 **Kritisch** | CVSS-Schwachstelle 7+ mit hohem Ausnutzungsrisiko (starke Exposition, einfache Ausnutzbarkeit). Eine Korrektur oder Minderung wird dringendst innerhalb kürzester Zeit empfohlen.| +| 🟠 **Wichtig** | CVSS-Schwachstelle 7+ ohne hohes Ausnutzungsrisiko (begrenzte Exposition oder Ausnutzungsbeschränkungen) | +| 🟡 **Mittel** | CVSS-Schwachstelle 4+ | +| 🔵 **Gering** | CVSS-Schwachstelle unter 4 oder nicht ausnutzbar. | -- **Behandlung** : Informationen und Empfehlungen im Kontext der Cloud Temple-Dienste. ⚠️ zeigt an, dass eine Aktion durch die Nutzer erforderlich ist, um die Schwachstelle zu behandeln. ✅ zeigt an, dass Cloud Temple die Behandlung der Schwachstelle übernimmt. +- **Bearbeitung** : Informationen und Empfehlungen im Kontext der Cloud Temple-Dienste. ⚠️ zeigt an, dass eine Benutzeraktion zur Behandlung der Schwachstelle erforderlich ist. ✅ zeigt an, dass die Behandlung der Schwachstelle von Cloud Temple übernommen wird. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/containers_overview.md b/i18n/de/docusaurus-plugin-content-docs/current/containers_overview.md index 9c3b2abb..472899b5 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/containers_overview.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/containers_overview.md @@ -1,55 +1,59 @@ --- -title: Overview of Containerization Offerings -sidebar_position: 10 # Position just before IaaS +title: Übersicht der Containerisierungsangebote +sidebar_position: 10 # Position direkt vor IaaS --- -# Containerization – Accelerator for Your Digital Transformation +# Containerisierung, Beschleuniger Ihrer digitalen Transformation -In the context of accelerated digital transformation, the ability to rapidly develop, deploy, and evolve applications has become a decisive competitive advantage. Containerization, orchestrated by platforms such as Kubernetes and OpenShift, addresses this challenge by delivering unmatched agility, portability, and operational efficiency. +In einem Umfeld beschleunigter digitaler Transformation ist die Fähigkeit, Anwendungen schnell zu entwickeln, bereitzustellen und weiterzuentwickeln, zu einem entscheidenden Wettbewerbsvorteil geworden. Die Containerisierung, orchestriert durch Plattformen wie Kubernetes und OpenShift, adressiert diese Herausforderung, indem sie eine unübertroffene Agilität, Portabilität und Betriebseffizienz bietet. -However, the inherent complexity of these technologies can represent a barrier. That’s why Cloud Temple has developed a range of managed, "as a Service" solutions that enable you to harness the full power of containers while relieving you of the burden of managing their complexity. Our offerings are designed to allow you to focus on your core business: application innovation, on a sovereign and trustworthy foundation. +Die inhärente Komplexität dieser Technologien kann jedoch ein Hemmnis darstellen. Aus diesem Grund hat Cloud Temple eine Palette von verwalteten "as a Service"-Lösungen entwickelt, die es Ihnen ermöglichen, die volle Leistungsfähigkeit von Containern zu nutzen, während Sie von der Komplexität ihres Managements entlastet werden. Unsere Angebote sind darauf ausgelegt, Ihnen die Konzentration auf Ihr Kerngeschäft zu ermöglichen: die Anwendungsinnovation, auf einer souveränen und vertrauenswürdigen Basis. -## Unser Lösungsportfolio: Welche Richtung für Ihr Projekt? +## Unser Lösungsportfolio: Welcher Weg für Ihr Projekt? -Diese Tabelle hebt die Stärken und das Positioning jeder Lösung hervor, um eine schnelle Entscheidungsfindung zu ermöglichen. +Diese Tabelle hebt die Stärken und die Positionierung jeder Lösung hervor, um eine schnelle Entscheidungsfindung zu ermöglichen. | Kriterium | PaaS OpenShift | Managed Kubernetes | | :--------------------------- | :---------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------- | -| **Schlüsselpositionierung** | **Vertrauen ohne Kompromisse**
_Plattform "as a Service", der schnellste Weg zur Modernisierung auf einer zertifizierten Basis._ | **Flexibilität durch Open Source**
_Ein reiner, portabler Kubernetes ohne Zusatzschicht auf einer souveränen Infrastruktur._ | -| **Service-Level** | as a Service | Managé | -| **Konformität & Sicherheit** | **100 % SecNumCloud** | Hosted auf SNC-Infrastruktur | -| **Zielgruppe** | Entwicklungsteams, DevOps | DevOps-Teams, Kubernetes-Experten | -| **Unterscheidungsmerkmal** | Einfachheit und schnelle Bereitstellung | Open Source, portabel und ohne Zusatzschicht | +| **Kernpositionierung** | **Unkompromissiges Vertrauen**
_Plattform "as a Service", der schnellste Weg zur Modernisierung auf einer zertifizierten Basis._ | **Open-Source-Flexibilität**
_Ein reines, portables und schichtenfreies Kubernetes auf einer souveränen Infrastruktur._ | +| **Servicelevel** | as a Service | Managed | +| **Compliance & Sicherheit** | **100 % SecNumCloud** | Auf SNC-Infrastruktur gehostet | +| **Ideale Zielgruppe** | Entwicklungsteams, DevOps | DevOps-Teams, Kubernetes-Experten | +| **Unterscheidungsmerkmal** | Einfachheit und schnelle Bereitstellung | Open-Source, portabel und schichtenfrei | -### Technical Component Comparison +### Vergleich der technischen Komponenten -Beyond positioning, each offering is based on distinct technological choices that address specific requirements. The table below details the fundamental software building blocks that make up each solution. +Jenseits der Positionierung setzt jedes Produkt auf unterschiedliche technologische Entscheidungen, die spezifische Anforderungen erfüllen. Die folgende Tabelle listet die grundlegenden Softwarekomponenten auf, aus denen jede Lösung besteht. -| Technical Component | PaaS OpenShift | Managed Kubernetes | -| :------------------------- | :--------------------------------- | :-------------------------- | -| **OS Base** | Red Hat CoreOS (RHCOS) | Talos OS (immutable) | +| Technische Komponente | PaaS OpenShift | Managed Kubernetes | +| :--------------------------- | :--------------------------------- | :-------------------------- | +| **OS-Grundlage** | Red Hat CoreOS (RHCOS) | Talos OS (immutable) | | **Orchestrator** | Red Hat OpenShift | Kubernetes (CNCF) | -| **Persistent Storage** | OpenShift Data Foundation | Rook-Ceph | -| **Networking (CNI)** | OVN-Kubernetes | Cilium | -| **Ingress / Load Balancing** | HAProxy / MetalLB | NGINX Ingress / MetalLB | -| **Security (Policy Engine)** | Security Context Constraints (SCC) | PSA + Kyverno + Capsule | -| **Backup** | Veeam Kasten K10 (optional) | Veeam Kasten K10 (included) | -| **Automation (GitOps)** | OpenShift Pipelines | ArgoCD | +| **Persistenter Speicher** | OpenShift Data Foundation | Rook-Ceph | +| **Netzwerk (CNI)** | OVN-Kubernetes | Cilium | +| **Ingress / Lastverteilung**| HAProxy / MetalLB | NGINX Ingress / MetalLB | +| **Sicherheit (Policy Engine)** | Security Context Constraints (SCC) | PSA + Kyverno + Capsule | +| **Backup** | Veeam Kasten K10 (optional) | Veeam Kasten K10 (inklusive)| +| **Automatisierung (GitOps)** | OpenShift Pipelines | ArgoCD | | **Observability** | Prometheus / Grafana | Prometheus / Grafana / Loki | -## Which solution for your project? +--- + +## Welche Lösung für Ihr Projekt? -Choosing a containerization platform is a strategic decision. Here are some key points to help you select the most suitable offering for your context. +Die Wahl der Containerisierungsplattform ist eine strategische Entscheidung. Hier sind einige Orientierungshilfen, um Sie zum für Ihren Kontext passendsten Produkt zu führen. -* **If regulatory compliance is your absolute priority...** - ...and you operate in a highly regulated sector (public, healthcare, finance) or need to certify your own solution, the **OpenShift PaaS offering** is the reference solution, providing the highest level of market assurance. +* **Wenn die regulatorische Compliance Ihre absolute Priorität ist...** + ...und Sie in einem stark regulierten Sektor (Öffentlicher Dienst, Gesundheitswesen, OIV) tätig sein müssen oder Ihre eigene Lösung für den Produktiveinsatz qualifizieren wollen, ist das **OpenShift PaaS-Angebot** die Referenzlösung, die Ihnen das höchste Maß an Marktgarantien bietet. -* **If you value open source, modernity, and "zero-trust" security...** - ...and your company culture strongly emphasizes open source, independence from vendors, and next-generation security approaches (immutable systems, API-driven management), the **Managed Kubernetes offering** best aligns with your vision. +* **Wenn Sie Open Source, Modernität und "Zero-Trust"-Sicherheit bevorzugen...** + und Ihre Unternehmenskultur stark auf Open Source, Herstellerunabhängigkeit sowie Sicherheitsansätze der neuen Generation (immutable Systeme, API-gesteuertes Management) ausgerichtet ist, ist das **Managed Kubernetes-Angebot** am besten mit Ihrer Vision vereinbar. -Our advisory role is to support you in making this decision. Our architects are available to analyze your context and define the optimal path together with you. +Unsere Beratungsrolle besteht darin, Sie bei dieser Entscheidung zu begleiten. Unsere Architekten stehen Ihnen gerne zur Verfügung, um Ihren Kontext zu analysieren und gemeinsam mit Ihnen den optimalen Weg zu definieren. + +--- -## Unsere Lösungen entdecken +## Entdecken Sie unsere Lösungen
@@ -59,7 +63,7 @@ Our advisory role is to support you in making this decision. Our architects are

- Entdecken Sie unsere „as a Service“-Plattform zur Modernisierung Ihrer Anwendungen auf einer zertifizierten SecNumCloud-Infrastruktur. + Entdecken Sie unsere "as a Service"-Plattform zur Modernisierung Ihrer Anwendungen auf einer SecNumCloud-zertifizierten Basis.

@@ -74,7 +78,7 @@ Our advisory role is to support you in making this decision. Our architects are

- Erkunden Sie unser reines, portables und schichtfreies Kubernetes-Angebot, betrieben auf einer souveränen Infrastruktur. + Entdecken Sie unser reines, portables Kubernetes-Produkt ohne Overhead, das auf einer souveränen Infrastruktur gehostet wird.

@@ -82,4 +86,4 @@ Our advisory role is to support you in making this decision. Our architects are
- + \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/contractual/contracts.md b/i18n/de/docusaurus-plugin-content-docs/current/contractual/contracts.md index 9fccb254..a5dc4187 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/contractual/contracts.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/contractual/contracts.md @@ -1,99 +1,97 @@ --- -title: Vertragsunterlagen +title: Vertragsdokumente slug: /contracts hide_table_of_contents: true --- import { ContractCard } from '@site/src/components/ContractCard'; -## Hierarchie der Vertragsunterlagen +## Rangfolge der Vertragsdokumente | | Referenzen | | --------- | -------------------------- | | Referenz | CT.AM.JUR.HDC 20250502_3.0 | -| Datum | 17. April 2026 | +| Datum | 17. April 2026. | -Die Hierarchie der Vertragsunterlagen wird nach einer definierten Prioritätsreihenfolge festgelegt: +Die Rangfolge der Vertragsdokumente wird gemäß einer festgelegten Prioritätsreihenfolge festgelegt: -1. [Allgemeine Verkaufs- und Nutzungsbedingungen (AGB)](/contractual/files/CT.AM.JUR.CGVU_Conditions%20Generales%20de%20Vente%20et%20d'Utilisation_v1.pdf) -2. [SecNumCloud Servicevereinbarung](/contractual/files/CT.AM.JUR.ANX%20-Annexe_Convention%20de%20Services_SNC_v2.pdf) -3. Spezifische Besondere Vereinbarung ¹ -4. Besondere Nutzungsbedingungen (BNB) -5. [Datenschutzvereinbarung](/contractual/files/CT.AM.JANX%20-%20Annexe_DPA_v1.pdf) +1. [Conditions Générales de Vente et Utilisation (CGVU)](/contractual/files/CT.AM.JUR.CGVU_Conditions%20Generales%20de%20Vente%20et%20d'Utilisation_v1.pdf) +2. [Convention de Service SecNumCloud](/contractual/files/CT.AM.JUR.ANX%20-Annexe_Convention%20de%20Services_SNC_v2.pdf) +3. Spezifische Sondervereinbarung ¹ +4. Plan d'Assurance Sécurité (PAS) ² +5. Conditions Particulières d'Utilisation (CPU) +6. [Data Protection Agreement](/contractual/files/CT.AM.JANX%20-%20Annexe_DPA_v1.pdf) -:::info[Vertragliche Hinweise] +:::info[Vertragliche Präzisierungen] -**¹** Spezifische Vereinbarung, die auf die besonderen Merkmale des Projekts abgestimmt ist. +**¹** Spezifische Vereinbarung, die auf die Besonderheiten des Projekts abgestimmt ist. -**²** Nicht öffentliches Dokument. +**²** Nicht-öffentliches Dokument. ::: -_Hinweis: Die übersetzten Versionen auf Englisch, Italienisch und Spanisch dienen ausschließlich dem besseren Verständnis des Angebots._ +_Hinweis: Die Übersetzungen in Englisch, Italienisch, Deutsch und Spanisch werden ausschließlich zur besseren Verständlichkeit des Angebots bereitgestellt._ --- -# Vertragsunterlagen +# Vertragsdokumente -Hier finden Sie alle Vertragsunterlagen von Cloud Temple: Allgemeine Geschäftsbedingungen, Datenschutzvertrag (DPA), Bestellprozess, besondere Bedingungen je Dienst, SecNumCloud-Dienstvereinbarungen und Service-Level-Agreements. +Hier finden Sie alle Vertragsdokumente von Cloud Temple: Allgemeine Geschäftsbedingungen, Datenschutzvereinbarung (DPA), SecNumCloud-Dienstvereinbarungen und Service Level Agreements (SLA). --- -## Allgemeine Geschäftsbedingungen +## Allgemeine Bedingungen
--- -## SecNumCloud-Dienstvereinbarungen +## Dienstvereinbarungen SecNumCloud -Dienstvereinbarungen definieren den Vertragsrahmen für die Bereitstellung SecNumCloud-qualifizierter Dienste: Umfang, operative Verpflichtungen, Verantwortlichkeiten und Dienstbedingungen. +Die Dienstvereinbarungen legen den vertraglichen Rahmen für die Bereitstellung qualifizierter SecNumCloud-Dienste fest: Geltungsbereich, operative Verpflichtungen, Verantwortlichkeiten und Servicebedingungen.
--- -## Service-Level-Agreements (SLA) +## Service Level Agreements (SLA) -SLAs definieren Verfügbarkeitsverpflichtungen, Messmethoden, Ausnahmen und Servicegutschriften, die bei Nichteinhaltung gelten. +SLAs definieren die Verfügbarkeitsverpflichtungen, Messmethoden, Ausschlüsse und Serviceguthaben, die bei Nichteinhaltung gelten. + \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/contractual/iaas/raci.md b/i18n/de/docusaurus-plugin-content-docs/current/contractual/iaas/raci.md index 8ebe2bdd..3ceaa6a7 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/contractual/iaas/raci.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/contractual/iaas/raci.md @@ -1,226 +1,225 @@ --- -title: Matrice de responsabilité IaaS +title: IaaS-Verantwortlichkeitsmatrix +displayed_sidebar: docSidebar --- -Voici le modèle **RACI** définissant la répartition des responsabilités entre le client et Cloud Temple pour l'utilisation des infrastructures IaaS de Cloud Temple. -## Définition des différents rôles +Hier finden Sie das **RACI**-Modell, das die Aufteilung der Verantwortlichkeiten zwischen dem Kunden und Cloud Temple für die Nutzung der IaaS-Infrastrukturen von Cloud Temple definiert. -Nous rappelons ici les différents rôles du RACI : +## Definition der verschiedenen Rollen -| Rôle | Description | +Hier werden die verschiedenen Rollen des RACI-Modells erläutert: + +| Rolle | Beschreibung | |--------------|---------------------------------------------------------------------------------------| -| (R) Réalise | __R__éalise le processus | -| (A) Approuve | __A__pprouve la réalisation du processus | -| (C) Consulte | __C__onsulté pendant le processus | -| (I) Informé | __I__nformé des résultats du processus (via l'outillage, le portail ou la messagerie) | - -## Définition votre besoin - -| Activité | Rôle Client | Rôle Cloud Temple | -|------------------------------------------------------------------------------------------------|-------------|-------------------| -| Définir l'architecture globale de votre plateforme Cloud Temple | **RA** | **CI** | -| Définir le nombre de tenants et le nombre de zone de disponibilité pour chaque tenant | **RA** | **CI** | -| Définir votre stratégie globale de reprise ou de continuité d'activité | **RA** | **CI** | -| Dimensionner correctement votre plateforme Cloud Temple (calcul, stockage, réseau, backup,...) | **RA** | **CI** | -| Souscrire aux services avec les informations nécessaires | **RA** | **I** | - -## Mise en œuvre initiale de vos tenants Cloud Temple - -| Activité | Rôle Client | Rôle Cloud Temple | -|--------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer la mise en oeuvre des **datacenters physiques** | | **RA** | -| Assurer la mise en oeuvre des infrastructures **calcul** | **I** | **RA** | -| Assurer la mise en oeuvre des infrastructures **stockage** | **I** | **RA** | -| Assurer la mise en oeuvre de la connectivité au **réseau backbone(1)** | **I** | **RA** | -| Acquérir et maintenir les licences logiciels essentiels pour le fonctionnement de la plateforme Cloud Temple | | **RA** | -| Implémenter la configuration de base de vos tenants Cloud Temple | **CI** | **RA** | -| Implémenter la configuration initiale pour le service de sauvegarde | **CI** | **RA** | -| *S'ils sont souscrit :* implémenter la configuration réseau initiale pour les services Internet et Firewall | **CI** | **RA** | -| Offrir l'assistance requise pour la prise en main de vos environnements Cloud Temple | **I** | **RA** | -| Effectuer les ajustements de configuration finaux du service après sa livraison | **RA** | **C** | -| Configurer un référentiel d'authentification externe pour la console Cloud Temple | **RA** | **C** | -| Créer les utilisateurs de chaque tenant dans la console Cloud Temple et affecter les droits | **RA** | | -| Valider la conformité de la plateforme livrée avec le référentiel SecNumCloud | **I** | **RA** | -| Valider la conformité de la plateforme livrée avec les spécifications requises | **RA** | **CI** | - -*(1) Le réseau backbone constitue l'infrastructure centrale de Cloud Temple, offrant une colonne vertébrale sur laquelle -reposent les réseaux clients spécifiques, lesquels sont intégrés et pris en charge par cette infrastructure principale.* - -## Intégrer votre système d'information dans vos environnements Cloud Temple - -| Activité | Rôle Client | Rôle Cloud Temple | +| (R) Durchführend | __R__ealisiert den Prozess | +| (A) Genehmigend | __A__genehmigt die Durchführung des Prozesses | +| (C) Beraten | __C__onsultiert während des Prozesses | +| (I) Informiert | __I__nformiert über die Ergebnisse des Prozesses (über die Tools, das Portal oder die Messaging-Dienste) | + +## Definition Ihrer Anforderungen + +| Aktivität | Rolle Kunde | Rolle Cloud Temple | +|------------------------------------------------------------------------------------------------|-------------|--------------------| +| Definition der Gesamtarchitektur Ihrer Cloud Temple-Plattform | **RA** | **CI** | +| Definition der Anzahl der Tenants und der Verfügbarkeitszonen pro Tenant | **RA** | **CI** | +| Definition Ihrer gesamten Strategie zur Wiederherstellung oder Geschäftskontinuität | **RA** | **CI** | +| Korrekte Dimensionierung Ihrer Cloud Temple-Plattform (Compute, Storage, Netzwerk, Backup, ...) | **RA** | **CI** | +| Bezug der Dienste mit den erforderlichen Informationen | **RA** | **I** | + +## Initiale Implementierung Ihrer Cloud Temple Tenants + +| Aktivität | Kundenrolle | Cloud-Temple-Rolle | +|--------------------------------------------------------------------------------------------------------------|-------------|--------------------| +| Gewährleistung der Implementierung der **physischen Rechenzentren** | | **RA** | +| Gewährleistung der Implementierung der **Rechen**-Infrastruktur | **I** | **RA** | +| Gewährleistung der Implementierung der **Speicher**-Infrastruktur | **I** | **RA** | +| Gewährleistung der Implementierung der Konnektivität zum **Backbone-Netzwerk(1)** | **I** | **RA** | +| Erwerb und Wartung der essenziellen Softwarelizenzen für den Betrieb der Cloud-Temple-Plattform | | **RA** | +| Implementierung der Basiskonfiguration Ihrer Cloud Temple Tenants | **CI** | **RA** | +| Implementierung der Anfangskonfiguration für den Backup-Dienst | **CI** | **RA** | +| *Falls abonniert:* Implementierung der Anfangskonfiguration für die Internet- und Firewall-Dienste | **CI** | **RA** | +| Bereitstellung der erforderlichen Unterstützung für die Inbetriebnahme Ihrer Cloud-Temple-Umgebungen | **I** | **RA** | +| Durchführung der abschließenden Konfigurationsanpassungen des Dienstes nach dessen Bereitstellung | **RA** | **C** | +| Konfiguration eines externen Authentifizierungsverzeichnisses für die Cloud-Temple-Konsole | **RA** | **C** | +| Erstellung der Benutzer für jeden Tenant in der Cloud-Temple-Konsole und Zuweisung der Berechtigungen | **RA** | | +| Validierung der Konformität der gelieferten Plattform mit dem SecNumCloud-Referenzrahmen | **I** | **RA** | +| Validierung der Konformität der gelieferten Plattform mit den erforderlichen Spezifikationen | **RA** | **CI** | + +*(1) Das Backbone-Netzwerk bildet die zentrale Infrastruktur von Cloud Temple und bietet ein Rückgrat, auf dem die spezifischen Client-Netzwerke aufsetzen, die in diese Hauptinfrastruktur integriert und von ihr unterstützt werden.* + +## Integrieren Sie Ihr Informationssystem in Ihre Cloud-Temple-Umgebungen + +| Tätigkeit | Kundenrolle | Cloud-Temple-Rolle | |-------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Créer, installer, mettre à jour vos machines virtuelles | **RA** | | -| Installer et configurer les logiciels et middlewares sur vos machines virtuelles | **RA** | | -| Acheter et détenir les licences et les droits d'utilisation pour les systèmes d'exploitation de vos machines virtuelles | **RA** | | -| Configurer le réseau pour chacune vos machines virtuelles | **RA** | | -| S'assurer que chaque machine virtuelle est associée à un plan de sauvegarde cohérent | **RA** | **C** | -| S'assurer que chaque machine virtuelle est associée à un plan de reprise d'activité ou de continuité d'activité cohérent | **RA** | **C** | -| Implémenter une stratégie de protection antivirale sur vos machines virtuelles | **RA** | | -| Mettre en place une solution de métrologie et de surveillance sur vos machines virtuelles | **RA** | | -| Définir la politique de TAG de vos machines virtuelles | **RA** | | - -## Opérations récurrentes - -### Gestion des accès et des identités - -| Activité | Rôle Client | Rôle Cloud Temple | -|--------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer l'accessibilité du service Console Cloud Temple et de l'API associée | | **RA** | -| Assurer l'accessibilité du système d'information déployé sur vos machines virtuelles | **RA** | | -| Gérer les habilitations physiques et logiques des équipes Cloud Temple aux infrastructures SecNumCloud. | | **RA** | -| Administrer les accès et la politique de sécurité associée liés à l'interface de la console Cloud Temple et à son API | **RA** | | -| Administrer les accès et la politique de sécurité associée au système d'information hébergé au sein de vos tenants Cloud Temple | **RA** | | - -### maintien en condition opérationnelle et en condition de sécurité - -Les activités visant à maintenir en condition opérationnelle et sécuritaire pour les infrastructures et services -proposés par Cloud Temple, dans le cadre de son offre IaaS, sont réalisées dans l'objectif de conformité à la qualification SecNumCloud. - -| Activité | Rôle Client | Rôle Cloud Temple | +| Erstellen, Installieren und Aktualisieren Ihrer virtuellen Maschinen | **RA** | | +| Installieren und Konfigurieren von Software und Middleware auf Ihren virtuellen Maschinen | **RA** | | +| Erwerben und Halten von Lizenzen und Nutzungsrechten für die Betriebssysteme Ihrer virtuellen Maschinen | **RA** | | +| Konfigurieren des Netzwerks für jede Ihrer virtuellen Maschinen | **RA** | | +| Sicherstellen, dass jede virtuelle Maschine einem konsistenten Sicherungsplan zugeordnet ist | **RA** | **C** | +| Sicherstellen, dass jede virtuelle Maschine einem konsistenten Plan für die Geschäftskontinuität oder das Disaster Recovery zugeordnet ist | **RA** | **C** | +| Implementieren einer Antivirenschutzstrategie auf Ihren virtuellen Maschinen | **RA** | | +| Implementieren einer Metriken- und Überwachungslösung auf Ihren virtuellen Maschinen | **RA** | | +| Definieren der TAG-Richtlinie für Ihre virtuellen Maschinen | **RA** | | + +## Wiederkehrende Operationen + +### Verwaltung von Zugriffen und Identitäten + +| Aktivität | Kundenrolle | Cloud-Temple-Rolle | +|--------------------------------------------------------------------------------------------------------------------------------------|-------------|--------------------| +| Sicherstellung der Verfügbarkeit des Cloud Temple Console-Dienstes und der zugehörigen API | | **RA** | +| Sicherstellung der Verfügbarkeit des auf Ihren virtuellen Maschinen bereitgestellten Informationssystems | **RA** | | +| Verwaltung der physischen und logischen Berechtigungen der Cloud Temple-Teams für die SecNumCloud-Infrastrukturen. | | **RA** | +| Verwaltung der Zugriffe und der zugehörigen Sicherheitsrichtlinie für die Cloud Temple Console-Oberfläche und deren API | **RA** | | +| Verwaltung der Zugriffe und der zugehörigen Sicherheitsrichtlinie für das Informationssystem, das in Ihren Cloud Temple-Tenants gehostet wird | **RA** | | + +### Betriebssicherheit und Sicherheitsbereitschaft + +Die Aktivitäten zur Aufrechterhaltung der Betriebs- und Sicherheitsbereitschaft der von Cloud Temple im Rahmen seines IaaS-Angebots bereitgestellten Infrastrukturen und Dienste werden mit dem Ziel der Konformität zur SecNumCloud-Qualifikation durchgeführt. + +| Aktivität | Rolle Kunde | Rolle Cloud Temple | |-------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer le maintien en condition opérationnelle des infrastructures **datacenters physiques** | **I** | **RA** | -| Assurer le maintien en condition de sécurité des infrastructures **datacenters physiques** | **I** | **RA** | -| Assurer le maintien en condition opérationnelle des infrastructures **calcul** | **I** | **RA** | -| Assurer le maintien en condition de sécurité des infrastructures **calcul (2)** | **RA** | **CI** | -| Assurer le maintien en condition opérationnelle des infrastructures **stockage** | **I** | **RA** | -| Assurer le maintien en condition de sécurité des infrastructures **stockage** | **I** | **RA** | -| Assurer le maintien en condition opérationnelle des infrastructures **réseaux backbone** | **I** | **RA** | -| Assurer le maintien en condition de sécurité des infrastructures **réseaux backbone** | **I** | **RA** | -| Assurer le maintien en condition opérationnelle des machines virtuelles déployées dans les tenants client **(3)** | **RA** | | -| Assurer le maintien en condition de sécurité des machines virtuelles déployées dans les tenants client **(3)** | **RA** | | -| Assurer le maintien en condition opérationnelle des middleswares déployées dans les tenants client | **RA** | | -| Assurer le maintien en condition de sécurité des middleswares déployées dans les tenants client | **RA** | | - -*(2) Cloud Temple fournit régulièrement les versions les plus récentes du système d'exploitation pour vos hyperviseurs. -Néanmoins, étant donné que Cloud Temple n'est pas informé des spécificités de vos environnements de production et des exigences -liées à vos charges de travail, **la décision de procéder à la mise à jour du système d'exploitation de vos hyperviseurs, -entraînant ainsi un redémarrage, vous revient**. Cette opération peut être réalisée à travers la console Cloud Temple ou via l'API. -Des services professionnels sont disponibles si vous souhaitez que Cloud Temple prenne en charge certaines opérations.* - -*(3) Cloud Temple propose des packs de licences pour pare-feu (Fortinet, Stormshield) et répartiteurs de charge (HAProxy), et -travaille en collaboration avec vos équipes pour la configuration initiale lors de la phase de mise en œuvre. Toutefois, -la responsabilité du maintien en condition opérationnelle et sécuritaire repose sur vous durant la phase d'exploitation -courante. Des services professionnels sont disponibles si vous souhaitez que Cloud Temple prenne en charge certaines opérations.* - -### Gestion des changements, des incidents, des problèmes et des capacités - -| Activité | Rôle Client | Rôle Cloud Temple | -|-----------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Gérer les incidents sur les infrastructures **datacenters physiques** | **I** | **RA** | -| Gérer les problèmes sur les infrastructures **datacenters physiques** | | **RA** | -| Gérer les capacités sur les infrastructures **datacenters physiques** | | **RA** | -| Gérer les incidents sur les infrastructures **calcul** | **I** | **RA** | -| Gérer les problèmes sur les infrastructures **calcul** | | **RA** | -| Gérer les capacités sur les infrastructures **calcul** | **RA** | **CI** | -| Gérer les incidents sur les infrastructures **stockage** | **I** | **RA** | -| Gérer les problèmes sur les infrastructures **stockage** | | **RA** | -| Gérer les capacités sur les infrastructures **stockage** | **RA** | **CI** | -| Gérer les incidents sur les infrastructures **réseau backbone** | **I** | **RA** | -| Gérer les problèmes sur les infrastructures **réseau backbone** | | **RA** | -| Gérer les capacités sur les infrastructures **réseau backbone** | | **RA** | -| Mettre en place une nouvelle machine virtuelle ou créer un nouvel environnement applicatif au sein d'un tenant client | **RA** | | -| Modifier la configuration des machines virtuelles déployées | **RA** | | -| Supprimer une machine virtuelle déployée | **RA** | | -| Prendre la décision d'ajouter, de modifier ou de retirer des ressources sur la plateforme Cloud Temple | **RA** | **CI** | -| Exécuter la décision de modification des ressources sur la plateforme Cloud Temple | **I** | **RA** | -| Appliquer les tags aux machines virtuelles conformément à la politique définie | **RA** | | - -### Gestion de la performance - -| Activité | Rôle Client | Rôle Cloud Temple | -|-------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer la surveillance du bon fonctionnement et de la fiabilité de tous les équipements impliqués dans la prestation du service qualifié SecNumCloud | **I** | **RA** | -| Assurer le suivi de la performance des ressources physiques de calcul, stockage et réseau mises à disposition de vos tenants **(4)** | **RI** | **A** | -| Superviser les performances des machines virtuelles soutenant vos environnements | **RA** | **I** | - -*(4) La plateforme Cloud Temple adopte une philosophie centrée sur **la fourniture d'infrastructures dédiées** pour les besoins de **calcul** (avec des lames physiques), de **stockage** (via des LUNs dédiées sur les SANs) -et de **réseau** (incluant des pare-feu et des répartiteurs de charge). Ces ressources dédiées sont mises à la disposition du client, dont l'utilisation -et la charge résultante dépendent directement de l'usage qu'il en fait. Il incombe donc au client de mettre en place et de gérer les systèmes de supervision -et de métrologie nécessaires pour assurer le suivi du fonctionnement optimal de son système d'information.* - -### Gestion de la sauvegarde et de la reprise d'activité sur la sauvegarde intégrée - -| Activité | Rôle Client | Rôle Cloud Temple | -|-------------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer le maintien en condition opérationnelle sur les infrastructures de **sauvegarde** intégrées à la plateforme Cloud Temple **(5)** | | **RA** | -| Assurer le maintien en condition de sécurité des infrastructures de **sauvegarde** intégrées à la plateforme Cloud Temple | **I** | **RA** | -| Gérer les incidents sur les infrastructures **sauvegarde** intégrées à la plateforme Cloud Temple | **I** | **RA** | -| Gérer les problèmes sur les infrastructures **sauvegarde** intégrées à la plateforme Cloud Temple | | **RA** | -| Gérer les capacités sur les infrastructures **sauvegarde** intégrées à la plateforme Cloud Temple | **AI** | **RC** | -| Assurer le maintien en condition opérationnelle sur la solution de sauvegarde choisie au sein de ses tenants par le client **(6)** | **RA** | | -| Assurer le maintien en condition de sécurité sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les incidents sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les problèmes sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les capacités sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | **CI** | -| Gérer le cycle des vies des politiques de sauvegarde | **RA** | | -| S'assurer que les politiques de sauvegarde sont cohérentes avec le cycle de vie de la donnée | **RA** | | -| S'assurer que les plans de continuité d'activité ou de reprise d'activité sont cohérents avec le cycle de vie de la donnée | **RA** | | -| Effectuer des tests périodiques pour évaluer l'efficacité de la stratégie de sauvegarde | **RA** | | -| Effectuer des tests périodiques pour évaluer l'efficacité de la stratégie de reprise d'activité ou de continuité d'activité | **RA** | **CI** | - -*(5) Au 1er janvier 2024, la solution de sauvegarde intégrée à la plateforme Cloud Temple est IBM Spectrum Protect Plus. -Cette solution est entièrement automatisée et peut être gérée via la console Cloud Temple ou l'API Cloud Temple.* - -### Gestion de la sauvegarde et de la reprise d'activité pour les plateformes tierces au sein d'un tenant client - -| Activité | Rôle Client | Rôle Cloud Temple | -|-------------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer le maintien en condition opérationnelle sur la solution de sauvegarde choisie au sein de ses tenants par le client **(6)** | **RA** | | -| Assurer le maintien en condition de sécurité sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les incidents sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les problèmes sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les capacités sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | **CI** | -| Gérer le cycle des vies des politiques de sauvegarde | **RA** | | -| S'assurer que les politiques de sauvegarde sont cohérentes avec le cycle de vie de la donnée | **RA** | | -| S'assurer que les plans de continuité d'activité ou de reprise d'activité sont cohérents avec le cycle de vie de la donnée | **RA** | | -| Effectuer des tests périodiques pour évaluer l'efficacité de la stratégie de sauvegarde | **RA** | | -| Effectuer des tests périodiques pour évaluer l'efficacité de la stratégie de reprise d'activité ou de continuité d'activité | **RA** | **CI** | - -*(6) Ceci concerne toute solution de sauvegarde supplémentaire mise en place dans les environnements du client et gérée par celui-ci. -Cloud Temple propose des services professionnels pour ceux qui souhaitent déléguer certaines opérations à Cloud Temple.* - -### Gestion de la documentation et du contrat - -| Activité | Rôle Client | Rôle Cloud Temple | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer la gestion commerciale et contractuelle du client, incluant l'établissement de devis, le traitement des commandes et la gestion de la facturation | **I** | **RA** | -| Assurer le suivi contractuel de la prestation, incluant la validation des devis, le suivi des livraisons et la surveillance de la facturation | **RA** | **I** | -| Assurer la maintenance et la disponibilité de l'inventaire des ressources fournies par Cloud Temple relative à l'offre SecNumCloud | **I** | **RA** | -| Assurer la maintenance et la mise à disposition de la documentation technique relative à l'offre SecNumCloud | **I** | **RA** | -| Assurer le suivi du cycle de vie des machines virtuelles déployées dans vos environnements Cloud Temple via votre CMDB (Configuration Management Database) | **RA** | | -| Maintenir à jour la politique d'accès à l'interface de la console Cloud Temple ou à l'API Cloud Temple | **RA** | | - -### Gestion des journaux - -| Activité | Rôle Client | Rôle Cloud Temple | +| Aufrechterhaltung der Betriebsbereitschaft der **physischen Rechenzentrum-Infrastrukturen** | **I** | **RA** | +| Aufrechterhaltung der Sicherheitsbereitschaft der **physischen Rechenzentrum-Infrastrukturen** | **I** | **RA** | +| Aufrechterhaltung der Betriebsbereitschaft der **Compute-Infrastrukturen** | **I** | **RA** | +| Aufrechterhaltung der Sicherheitsbereitschaft der **Compute-Infrastrukturen (2)** | **RA** | **CI** | +| Aufrechterhaltung der Betriebsbereitschaft der **Storage-Infrastrukturen** | **I** | **RA** | +| Aufrechterhaltung der Sicherheitsbereitschaft der **Storage-Infrastrukturen** | **I** | **RA** | +| Aufrechterhaltung der Betriebsbereitschaft der **Backbone-Netzwerk-Infrastrukturen** | **I** | **RA** | +| Aufrechterhaltung der Sicherheitsbereitschaft der **Backbone-Netzwerk-Infrastrukturen** | **I** | **RA** | +| Aufrechterhaltung der Betriebsbereitschaft der in den Kunden-Mandanten bereitgestellten virtuellen Maschinen **(3)** | **RA** | | +| Aufrechterhaltung der Sicherheitsbereitschaft der in den Kunden-Mandanten bereitgestellten virtuellen Maschinen **(3)** | **RA** | | +| Aufrechterhaltung der Betriebsbereitschaft der in den Kunden-Mandanten bereitgestellten Middleware | **RA** | | +| Aufrechterhaltung der Sicherheitsbereitschaft der in den Kunden-Mandanten bereitgestellten Middleware | **RA** | | + +*(2) Cloud Temple stellt regelmäßig die neuesten Versionen des Betriebssystems für Ihre Hypervisor bereit. +Da Cloud Temple jedoch nicht über die Spezifika Ihrer Produktionsumgebungen und die Anforderungen +Ihrer Workloads informiert ist, **liegt die Entscheidung zur Aktualisierung des Betriebssystems Ihrer Hypervisor, +die einen Neustart nach sich zieht, bei Ihnen**. Dieser Vorgang kann über die Cloud Temple-Konsole oder die API +durchgeführt werden. Professionelle Dienstleistungen stehen zur Verfügung, falls Sie möchten, dass Cloud Temple +bestimmte Operationen übernimmt.* + +*(3) Cloud Temple bietet Lizenzpakete für Firewalls (Fortinet, Stormshield) und Lastverteiler (HAProxy) an und +arbeitet mit Ihren Teams an der Erstkonsfiguration während der Implementierungsphase. Die Verantwortung für +die Aufrechterhaltung der Betriebs- und Sicherheitsbereitschaft liegt jedoch während der laufenden Betriebsphase +bei Ihnen. Professionelle Dienstleistungen stehen zur Verfügung, falls Sie möchten, dass Cloud Temple bestimmte Operationen übernimmt.* + +### Änderung, Vorfall, Problem und Kapazitätsmanagement + +| Aktivität | Kundenrolle | Cloud-Temple-Rolle | +|-----------------------------------------------------------------------------------------------------------------------|-------------|--------------------| +| Vorfälle auf der Infrastruktur **physischer Rechenzentren** verwalten | **I** | **RA** | +| Probleme auf der Infrastruktur **physischer Rechenzentren** verwalten | | **RA** | +| Kapazitäten auf der Infrastruktur **physischer Rechenzentren** verwalten | | **RA** | +| Vorfälle auf der Infrastruktur **Compute** verwalten | **I** | **RA** | +| Probleme auf der Infrastruktur **Compute** verwalten | | **RA** | +| Kapazitäten auf der Infrastruktur **Compute** verwalten | **RA** | **CI** | +| Vorfälle auf der Infrastruktur **Storage** verwalten | **I** | **RA** | +| Probleme auf der Infrastruktur **Storage** verwalten | | **RA** | +| Kapazitäten auf der Infrastruktur **Storage** verwalten | **RA** | **CI** | +| Vorfälle auf der Infrastruktur **Backbone-Netzwerk** verwalten | **I** | **RA** | +| Probleme auf der Infrastruktur **Backbone-Netzwerk** verwalten | | **RA** | +| Kapazitäten auf der Infrastruktur **Backbone-Netzwerk** verwalten | | **RA** | +| Eine neue virtuelle Maschine bereitstellen oder eine neue Anwendungsumgebung innerhalb eines Kunden-Mandanten erstellen | **RA** | | +| Die Konfiguration bereitgestellter virtueller Maschinen ändern | **RA** | | +| Eine bereitgestellte virtuelle Maschine löschen | **RA** | | +| Die Entscheidung treffen, Ressourcen auf der Cloud-Temple-Plattform hinzuzufügen, zu ändern oder zu entfernen | **RA** | **CI** | +| Die Entscheidung zur Ressourcenänderung auf der Cloud-Temple-Plattform umsetzen | **I** | **RA** | +| Tags für virtuelle Maschinen gemäß der definierten Richtlinie anwenden | **RA** | | + +### Leistungsmanagement + +| Tätigkeit | Kundenrolle | Cloud-Temple-Rolle | +|-------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|--------------------| +| Überwachung des ordnungsgemäßen Betriebs und der Zuverlässigkeit aller Geräte, die an der Erbringung des SecNumCloud-zertifizierten Dienstes beteiligt sind | **I** | **RA** | +| Überwachung der Leistung der physischen Compute-, Speicher- und Netzwerkressourcen, die Ihren Tenants **(4)** zur Verfügung gestellt werden | **RI** | **A** | +| Überwachung der Leistung der virtuellen Maschinen, die Ihre Umgebungen unterstützen | **RA** | **I** | + +*(4) Die Cloud-Temple-Plattform verfolgt eine Philosophie, die sich auf **die Bereitstellung dedizierter Infrastrukturen** für die Anforderungen an **Rechenleistung** (mit physischen Blades), **Speicher** (über dedizierte LUNs auf SANs) +und **Netzwerk** (einschließlich Firewalls und Load Balancer). Diese dedizierten Ressourcen stehen dem Kunden zur Verfügung, wobei Nutzung +und daraus resultierende Last direkt von dessen Verwendung abhängen. Es liegt daher in der Verantwortung des Kunden, die erforderlichen Monitoring- und Metriksysteme +einzurichten und zu verwalten, um den optimalen Betrieb seines Informationssystems sicherzustellen.* + +### Verwaltung der Datensicherung und der Disaster-Recovery-Strategie auf der integrierten Sicherung + +| Aktivität | Kundenrolle | Cloud-Temple-Rolle | +|-------------------------------------------------------------------------------------------------------------------------------------------|-------------|--------------------| +| Betriebsbereitschaft der in die Cloud-Temple-Plattform integrierten **Sicherungs**-Infrastrukturen gewährleisten **(5)** | | **RA** | +| Sicherheitsbereitschaft der in die Cloud-Temple-Plattform integrierten **Sicherungs**-Infrastrukturen gewährleisten | **I** | **RA** | +| Incidentmanagement für die in die Cloud-Temple-Plattform integrierten **Sicherungs**-Infrastrukturen durchführen | **I** | **RA** | +| Problemmanagement für die in die Cloud-Temple-Plattform integrierten **Sicherungs**-Infrastrukturen durchführen | | **RA** | +| Kapazitätsmanagement für die in die Cloud-Temple-Plattform integrierten **Sicherungs**-Infrastrukturen durchführen | **AI** | **RC** | +| Betriebsbereitschaft der vom Kunden in seinen Tenants gewählten Sicherungslösung gewährleisten **(6)** | **RA** | | +| Sicherheitsbereitschaft der vom Kunden in seinen Tenants gewählten Sicherungslösung gewährleisten | **RA** | | +| Incidentmanagement für die vom Kunden in seinen Tenants gewählte Sicherungslösung durchführen | **RA** | | +| Problemmanagement für die vom Kunden in seinen Tenants gewählte Sicherungslösung durchführen | **RA** | | +| Kapazitätsmanagement für die vom Kunden in seinen Tenants gewählte Sicherungslösung durchführen | **RA** | **CI** | +| Lebenszyklusverwaltung der Sicherungsrichtlinien durchführen | **RA** | | +| Sicherstellen, dass die Sicherungsrichtlinien mit dem Datenlebenszyklus konsistent sind | **RA** | | +| Sicherstellen, dass die Geschäftskontinuitäts- oder Disaster-Recovery-Pläne mit dem Datenlebenszyklus konsistent sind | **RA** | | +| Regelmäßige Tests zur Bewertung der Wirksamkeit der Sicherungsstrategie durchführen | **RA** | | +| Regelmäßige Tests zur Bewertung der Wirksamkeit der Disaster-Recovery- oder Geschäftskontinuitäts-Strategie durchführen | **RA** | **CI** | + +*(5) Stand 1. Januar 2024 ist die in die Cloud-Temple-Plattform integrierte Sicherungslösung IBM Spectrum Protect Plus. +Diese Lösung ist vollständig automatisiert und kann über die Cloud-Temple-Konsole oder die Cloud-Temple-API verwaltet werden.* + +### Verwaltung der Datensicherung und Geschäftskontinuität für Drittanbieterplattformen innerhalb eines Kunden-Tenants + +| Aktivität | Kundenrolle | Cloud Temple-Rolle | +|-------------------------------------------------------------------------------------------------------------------------------------------|-------------|--------------------| +| Betriebssicherheit der vom Kunden in seinen Mandanten gewählten Backup-Lösung gewährleisten **(6)** | **RA** | | +| Sicherheitsstatus der vom Kunden in seinen Mandanten gewählten Backup-Lösung gewährleisten | **RA** | | +| Störungen auf der vom Kunden in seinen Mandanten gewählten Backup-Lösung verwalten | **RA** | | +| Probleme auf der vom Kunden in seinen Mandanten gewählten Backup-Lösung verwalten | **RA** | | +| Kapazitäten auf der vom Kunden in seinen Mandanten gewählten Backup-Lösung verwalten | **RA** | **CI** | +| Lebenszyklus der Backup-Richtlinien verwalten | **RA** | | +| Sicherstellen, dass die Backup-Richtlinien mit dem Datenlebenszyklus übereinstimmen | **RA** | | +| Sicherstellen, dass die Geschäftskontinuitäts- oder Disaster-Recovery-Pläne mit dem Datenlebenszyklus übereinstimmen | **RA** | | +| Regelmäßige Tests zur Bewertung der Effektivität der Backup-Strategie durchführen | **RA** | | +| Regelmäßige Tests zur Bewertung der Effektivität der Disaster-Recovery- oder Geschäftskontinuitätsstrategie durchführen | **RA** | **CI** | + +*(6) Dies betrifft alle zusätzlichen Backup-Lösungen, die in den Umgebungen des Kunden bereitgestellt und von diesem verwaltet werden. Cloud Temple bietet professionelle Dienstleistungen für diejenigen, die bestimmte Operationen an Cloud Temple delegieren möchten.* + +### Verwaltung der Dokumentation und des Vertrags + +| Aktivität | Rolle Kunde | Rolle Cloud Temple | +|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|--------------------| +| Sicherstellung der kaufmännischen und vertraglichen Betreuung des Kunden, einschließlich der Angebotserstellung, Auftragsabwicklung und Rechnungsstellung | **I** | **RA** | +| Sicherstellung der vertraglichen Überwachung der Dienstleistung, einschließlich der Angebotsvalidierung, Lieferungsverfolgung und Rechnungsüberwachung | **RA** | **I** | +| Sicherstellung der Wartung und Verfügbarkeit des Inventars der von Cloud Temple bereitgestellten Ressourcen im Zusammenhang mit dem SecNumCloud-Angebot | **I** | **RA** | +| Sicherstellung der Wartung und Bereitstellung der technischen Dokumentation im Zusammenhang mit dem SecNumCloud-Angebot | **I** | **RA** | +| Sicherstellung der Überwachung des Lebenszyklus der in Ihren Cloud Temple-Umgebungen bereitgestellten virtuellen Maschinen über Ihre CMDB (Configuration Management Database) | **RA** | | +| Aktualisierung der Zugriffsrichtlinie für die Cloud Temple-Konsolenschnittstelle oder die Cloud Temple-API | **RA** | | + +### Logverwaltung + +| Aktivität | Kundenrolle | Cloud-Temple-Rolle | |--------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Conserver et mettre à disposition les journaux de la plateforme IaaS Cloud Temple **(7)** | | **RA** | -| Conserver et mettre à disposition les journaux du système d'information hébergé au sein de vos tenants Cloud Temple | **RA** | | +| Aufbewahrung und Bereitstellung der Protokolle der IaaS-Cloud-Temple-Plattform **(7)** | | **RA** | +| Aufbewahrung und Bereitstellung der Protokolle des Informationssystems, das in Ihren Cloud-Temple-Tenants gehostet wird | **RA** | | -*(7) Au premier janvier 2024, la durée de rétention des journaux de la plateforme est d'une année.* +*(7) Stand 1. Januar 2024 beträgt die Aufbewahrungsdauer der Plattformprotokolle ein Jahr.* -## Connectivité au réseau client (mpls, fibre dédiée, ipsec, ...) +## Konnektivität zum Client-Netzwerk (mpls, fibre dédiée, ipsec, ...) -| Activité | Rôle Client | Rôle Cloud Temple | +| Aktivität | Rolle Kunde | Rolle Cloud Temple | |------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Souscrire à une connectivité réseau opérateur pour accéder à un datacenter physique Cloud Temple (8) | **RA** | **CI** | -| Gérer le plan d'adressage IP | **RA** | **I** | -| Gérer les incidents sur les liens réseaux opérateurs client | **RA** | | -| Gérer les problèmes sur les liens réseaux opérateurs client | **RA** | **CI** | -| Gérer les capacités sur les liens réseaux opérateurs client | **RA** | **CI** | - -*(8) Cloud Temple assume la responsabilité du réseau concernant son infrastructure backbone, ses points de collecte ainsi que -les points d'interconnexion datacenter, garantissant ainsi la connectivité entre ces points et son réseau backbone. -Dans l'offre d'hébergement en baie physique, Cloud Temple assume la responsabilité à partir de l'équipement situé en haut du rack, communément appelé "top of rack".* - -## Réversibilité - -| Activité | Rôle Client | Rôle Cloud Temple | -|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Planifier le projet de réversibilité et choisir les infrastructures cibles | **RA** | **I** | -| Mettre en oeuvre les opérations de transition, qu'elles impliquent une extraction manuelle, l'utilisation d'API ou toute autre méthode tierce compatible avec la plateforme Cloud Temple. | **RA** | **I** | -| Transférer les données tout en contrôlant les répercussions de la migration sur la qualité du service fourni par le système d'information du client. | **RA** | | -| Procéder au démantèlement des configurations du Cloud Privé et des options associées au client, à la suite de la résiliation du contrat. | **I** | **RA** | -| Réaliser l'effacement sécurisé des données sur les supports de stockage et fournir une attestation | **I** | **RA** | +| Abschluss einer Operator-Netzwerkkonnektivität zum Zugriff auf ein physisches Cloud Temple Rechenzentrum (8) | **RA** | **CI** | +| Verwaltung des IP-Adressplans | **RA** | **I** | +| Verwaltung von Incidents auf den Operator-Netzwerkverbindungen des Kunden | **RA** | | +| Verwaltung von Problemen auf den Operator-Netzwerkverbindungen des Kunden | **RA** | **CI** | +| Verwaltung der Kapazitäten auf den Operator-Netzwerkverbindungen des Kunden | **RA** | **CI** | + +*(8) Cloud Temple übernimmt die Netzwerkverantwortung für seine Backbone-Infrastruktur, seine Sammelpunkte sowie die Rechenzentrums-Interkonnektionspunkte und gewährleistet damit die Konnektivität zwischen diesen Punkten und seinem Backbone-Netzwerk. +Im Angebot für physisches Rack-Hosting übernimmt Cloud Temple die Verantwortung ab dem Gerät oben im Rack, allgemein als „Top of Rack“ bezeichnet.* + +## Rückholbarkeit + +| Aktivität | Kundenrolle | Rolle Cloud Temple | +|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|--------------------| +| Das Rückholbarkeitsprojekt planen und die Ziel-Infrastrukturen auswählen | **RA** | **I** | +| Die Übergangsvorgänge durchführen, ob manuelle Extraktion, API-Nutzung oder eine andere mit der Cloud-Temple-Plattform kompatible Drittanbietermethode. | **RA** | **I** | +| Daten übertragen und dabei die Auswirkungen der Migration auf die Servicequalität des Informationssystems des Kunden überwachen. | **RA** | | +| Nach Vertragskündigung den Abbau der Konfigurationen der Privaten Cloud und der damit verbundenen Kundenoptionen vornehmen. | **I** | **RA** | +| Die sichere Löschung der Daten auf den Speichermedien durchführen und eine Löschbescheinigung ausstellen | **I** | **RA** | \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/contractual/iaas/raci_s3.md b/i18n/de/docusaurus-plugin-content-docs/current/contractual/iaas/raci_s3.md index 1db9a33f..fe6a8aeb 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/contractual/iaas/raci_s3.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/contractual/iaas/raci_s3.md @@ -1,74 +1,77 @@ --- -title: Matrice de responsabilité IaaS - Stockage Objet S3 +title: IaaS-Verantwortlichkeitsmatrix - S3-Objektspeicher +slug: /contractual/storage/raci +displayed_sidebar: docSidebar --- -Voici le RACI du partage de responsabilité entre le client et Cloud Temple pour l'usage de la plateforme de Stockage Objets S3 Cloud Temple. -## Définition des différents rôles +Dies ist die RACI-Matrix zur Aufteilung der Verantwortlichkeiten zwischen dem Kunden und Cloud Temple für die Nutzung der Cloud Temple S3-Objektspeicher-Plattform. -Nous rappelons ici les différents rôle du RACI : +## Definition der verschiedenen Rollen -| Rôle | Description | +Hier werden die verschiedenen Rollen des RACI-Modells erläutert: + +| Rolle | Beschreibung | |--------------|------------------------------------------| -| (R) Réalise | __R__éalise le processus | -| (A) Approuve | __A__pprouve la réalisation du processus | -| (C) Consulte | __C__onsulté pendant le processus | -| (I) Informé | __I__nformé des résultats du processus | +| (R) Durchführt | __D__urchführt den Prozess | +| (A) Genehmigt | __G__enehmigt die Durchführung des Prozesses | +| (C) Beratend | __B__eratend während des Prozesses | +| (I) Informiert | __I__nformiert über die Ergebnisse des Prozesses | -## Définir votre besoin +## Definieren Sie Ihre Anforderungen -| Activité | Rôle Client | Rôle Cloud Temple | +| Aktivität | Kundenrolle | Cloud Temple-Rolle | |----------------------------------------------------------------------------------|-------------|-------------------| -| Valider que le produit Stockage Objet S3 est conforme au besoin de l'application | __RA__ | __CI__ | -| Souscrire au service avec les informations nécessaires | __RA__ | __I__ | +| Überprüfen, ob das Produkt S3-Objektspeicher den Anforderungen der Anwendung entspricht | __RA__ | __CI__ | +| Service mit den erforderlichen Informationen abonnieren | __RA__ | __I__ | -## Mettre en oeuvre le service +## Service implementieren -| Activité | Rôle Client | Rôle Cloud Temple | -|------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer le maintien en condition opérationnelle de la plateforme Stockage Objet S3 | __I__ | __RA__ | -| Assurer le maintien en condition de sécurité de la plateforme Stockage Objet S3 | __I__ | __RA__ | -| Créer les objets | __RA__ | | -| Créer les clefs d'accès et affecter les droits associés | __RA__ | | +| Aktivität | Kundenrolle | Rolle Cloud Temple | +|---------------------------------------------------------------------------------------|-------------|--------------------| +| Betriebssicherheit der S3-Objektspeicher-Plattform gewährleisten | __I__ | __RA__ | +| Sicherheitszustand der S3-Objektspeicher-Plattform gewährleisten | __I__ | __RA__ | +| Objekte erstellen | __RA__ | | +| Zugriffsschlüssel erstellen und zugehörige Berechtigungen zuweisen | __RA__ | | -## Opérations récurrentes +## Wiederkehrende Operationen -| Activité | Rôle Client | Rôle Cloud Temple | +| Wiederkehrende Operationen | Rolle Kunde | Rolle Cloud Temple | |------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer le maintien en condition opérationnelle de la plateforme Stockage Objet S3 | __I__ | __RA__ | -| Assurer le maintien en condition de sécurité de la plateforme Stockage Objet S3 | __I__ | __RA__ | -| Assurer l'accessibilité du service Stockage Objet S3 | __I__ | __RA__ | -| Conserver et mettre à disposition les journaux de la plateforme Stockage Objet S3 | | __RA__ | -| Superviser le bon fonctionnement de la plateforme Stockage Objet S3 | __I__ | __RA__ | -| Suivre le cycle de vie des objets | __RA__ | | -| Suivre le cycle de vie des droits sur les objets | __RA__ | | -| Gérer la sécurité logique des objets | __RA__ | | -| Gérer les incidents sur le service Stockage objets S3 | __I__ | __RA__ | -| Gérer les problèmes sur le service Stockage objets S3 | __I__ | __RA__ | -| Gérer la capacité sur le service Stockage objets S3 | __I__ | __RA__ | -| Gérer les évolutions sur le service Stockage objets S3 | __I__ | __RA__ | - -## Gestion du chiffrement - -| Activité | Rôle Client | Rôle Cloud Temple | -|------------------------------------------------------------------------------------------|-------------|-------------------| -| Gérer le chiffrement des données avant déploiement sur le service Stockage Objet S3 | __RA__ | | -| Gérer le chiffrement sur l'espace de stockage alloué par le service Stockage objet S3 | __A__ | __R__ | - -## Continuité d'activité - -| Activité | Rôle Client | Rôle Cloud Temple | -|-------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer la continuité d'activité du service de stockage objets S3 | __I__ | __RA__ | -| Assurer la sauvegarde des données | __RA__ | | -| Réaliser des tests périodiques de restauration des données | __RA__ | | -| maintenir le plan de continuité d'activité et de reprise d'activité pour les applications | __RA__ | | - -## Réversibilité - -| Activité | Rôle Client | Rôle Cloud Temple | -|-------------------------------------------------------------------------------------------|-------------|-------------------| -| Mettre en oeuvre le projet de réversibilité (planification, outils, méthodes, cibles,...) | __RA__ | | -| Exporter les données depuis le service de Stockage Objets S3 | __RA__ | | -| Supprimer les données sur le service de Stockage Objets S3 | __RA__ | | -| Détruite les supports de stockage en fin de vie ou en erreur | | __RA__ | +| Aufrechterhaltung der Betriebsbereitschaft der S3-Objektspeicherplattform | __I__ | __RA__ | +| Aufrechterhaltung des Sicherheitsstatus der S3-Objektspeicherplattform | __I__ | __RA__ | +| Sicherstellung der Zugänglichkeit des S3-Objektspeicherdienstes | __I__ | __RA__ | +| Aufbewahrung und Bereitstellung der Protokolle der S3-Objektspeicherplattform | | __RA__ | +| Überwachung des ordnungsgemäßen Betriebs der S3-Objektspeicherplattform | __I__ | __RA__ | +| Überwachung des Objekt-Lebenszyklus | __RA__ | | +| Überwachung des Lebenszyklus der Objektzugriffsrechte | __RA__ | | +| Verwaltung der logischen Sicherheit von Objekten | __RA__ | | +| Incidentmanagement auf dem S3-Objektspeicherdienst | __I__ | __RA__ | +| Problemmanagement auf dem S3-Objektspeicherdienst | __I__ | __RA__ | +| Kapazitätsmanagement auf dem S3-Objektspeicherdienst | __I__ | __RA__ | +| Änderungsmanagement auf dem S3-Objektspeicherdienst | __I__ | __RA__ | + +## Verschlüsselungsverwaltung + +| Aktivität | Rolle Kunde | Rolle Cloud Temple | +|------------------------------------------------------------------------------------------|-------------|--------------------| +| Verschlüsselung der Daten vor der Bereitstellung auf dem S3-Objektspeicherdienst verwalten | __RA__ | | +| Verschlüsselung des vom S3-Objektspeicherdienst zugewiesenen Speicherplatzes verwalten | __A__ | __R__ | + +## Geschäftskontinuität + +| Aktivität | Kundenrolle | Rolle Cloud Temple | +|-------------------------------------------------------------------------------------------|-------------|--------------------| +| Sicherstellung der Geschäftskontinuität des S3-Objektspeicherdienstes | __I__ | __RA__ | +| Sicherstellung der Datensicherung | __RA__ | | +| Durchführung regelmäßiger Tests zur Datenwiederherstellung | __RA__ | | +| Pflege des Geschäftskontinuitäts- und Notfallwiederherstellungsplans für Anwendungen | __RA__ | | + +## Reversibilität + +| Aktivität | Kundenrolle | Rolle Cloud Temple | +|--------------------------------------------------------------------------------------------|-------------|--------------------| +| Umsetzung des Reversibilitätsprojekts (Planung, Tools, Methoden, Ziele,...) | __RA__ | | +| Daten aus dem S3-Objektspeicherdienst exportieren | __RA__ | | +| Daten im S3-Objektspeicherdienst löschen | __RA__ | | +| Speichermedien am Ende ihrer Lebensdauer oder bei Fehlern sicher vernichten | | __RA__ | \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/contractual/kubernetes/raci.md b/i18n/de/docusaurus-plugin-content-docs/current/contractual/kubernetes/raci.md index 61f5409b..19fb138d 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/contractual/kubernetes/raci.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/contractual/kubernetes/raci.md @@ -1,156 +1,157 @@ --- title: Verantwortlichkeitsmatrix (RACI) - Managed Kubernetes +displayed_sidebar: docSidebar --- ## RACI -### Architecture & Infrastructure +### Architektur & Infrastruktur -| **Activity** | **Client** | **Cloud Temple** | +| **Aufgabe** | **Kunde** | **Cloud Temple** | | ------------------------------------------------------------------- | ---------- | ---------------- | -| Define the overall architecture of the Kubernetes service | C | RA | -| Size the Kubernetes service (number of nodes, resources) | C | RA | -| Install the Kubernetes service with default configuration | I | RA | -| Configure the Kubernetes service | C | RA | -| Set up the base network for the Kubernetes service | I | RA | -| Deploy initial configuration for identities and access | C | RA | -| Define scaling and high availability strategy | C | RA | +| Globale Architektur des Kubernetes-Dienstes festlegen | C | RA | +| Kubernetes-Dienst dimensionieren (Anzahl der Knoten, Ressourcen) | C | RA | +| Kubernetes-Dienst mit Standardkonfiguration installieren | I | RA | +| Konfiguration des Kubernetes-Dienstes | C | RA | +| Basisnetzwerk des Kubernetes-Dienstes konfigurieren | I | RA | +| Bereitstellung der initialen Konfiguration für Identitäten und Zugriffe | C | RA | +| Strategie für Skalierung und Hochverfügbarkeit festlegen | C | RA | -### Project and Business Application Management +### Verwaltung von Projekten und Geschäftsanwendungen -| **Activity** | **Client** | **Cloud Temple** | -| -------------------------------------------------- | ---------- | ---------------- | -| Create and manage Kubernetes projects | RA | I* | -| Deploy and manage applications in Kubernetes | RA | I* | -| Configure CI/CD pipelines | RA | I* | -| Manage container images and registries | RA | I* | +| **Aktivität** | **Kunde** | **Cloud Temple** | +| -------------------------------------------------- | --------- | ---------------- | +| Kubernetes-Projekte erstellen und verwalten | RA | I* | +| Anwendungen in Kubernetes bereitstellen und verwalten | RA | I* | +| CI/CD-Pipelines konfigurieren | RA | I* | +| Container-Images und -Registries verwalten | RA | I* | -*These responsibilities may be delegated to Cloud Temple via a complementary managed services contract.* +*Diese Verantwortlichkeiten können über einen zusätzlichen Managed-Services-Vertrag an Cloud Temple delegiert werden. -### Monitoring and performance +### Überwachung und Leistung -| **Activity** | **Client** | **Cloud Temple** | +| **Aktivität** | **Kunde** | **Cloud Temple** | | ----------------------------------------------- | ---------- | ---------------- | -| Monitor Kubernetes service performance | I | RA | -| Monitor application performance | RA | | -| Manage alerts related to the Kubernetes service | I | RA | -| Manage alerts related to applications | RA | | +| Leistung des Kubernetes-Dienstes überwachen | I | RA | +| Leistung der Anwendungen überwachen | RA | | +| Warnmeldungen für den Kubernetes-Dienst verwalten | I | RA | +| Warnmeldungen für die Anwendungen verwalten | RA | | -### Infrastructure Maintenance and Updates +### Wartung und Updates der Infrastrukturen -| **Activity** | **Client** | **Cloud Temple** | -| ------------------------------------------------------ | ---------- | ---------------- | -| Update Kubernetes/OS service | C | RA | -| Apply security patches to Kubernetes | C | RA | -| Update deployed applications (operators*) | C | RA | +| **Aufgabe** | **Kunde** | **Cloud Temple** | +| ---------------------------------------------------- | --------- | ---------------- | +| Kubernetes/OS-Dienst aktualisieren | C | RA | +| Sicherheitspatches für Kubernetes anwenden | C | RA | +| Bereitgestellte Anwendungen aktualisieren (Operatoren*) | C | RA | -*Operator package included in Managed Kube – see sections: Managed Helm Packages +*Operator-Paket auf Managed Kube enthalten – siehe Kapitel: Verwaltete Helm-Pakete -### Security +### Sicherheit -| **Activity** | **Client** | **Cloud Temple** | +| **Aktivität** | **Client** | **Cloud Temple** | | -------------------------------------------------------------------------- | ---------- | ---------------- | -| Manage security for the Kubernetes service | RA | RA | -| Configure and manage pod security policies | RA | I* | -| Manage SSL/TLS certificates for the Kubernetes service | C | RA | -| Manage SSL/TLS certificates for applications | RA | I* | -| Implement and manage Role-Based Access Control (RBAC) | C | R | -| Implement and manage Client-Based Role-Based Access Control (RBAC) | RA | I* | +| Sicherheit des Kubernetes-Dienstes verwalten | RA | RA | +| Pod-Sicherheitsrichtlinien konfigurieren und verwalten | RA | I* | +| SSL/TLS-Zertifikate für den Kubernetes-Dienst verwalten | C | RA | +| SSL/TLS-Zertifikate für Anwendungen verwalten | RA | I* | +| Implementieren und Verwalten der grundlegenden rollenbasierten Zugriffskontrolle (RBAC) | C | R | +| Implementieren und Verwalten der kundenspezifischen rollenbasierten Zugriffskontrolle (RBAC) | RA | I* | -*These responsibilities may be delegated to Cloud Temple via a complementary managed services contract. +*Diese Verantwortlichkeiten können über einen zusätzlichen Managed-Service-Vertrag an Cloud Temple delegiert werden. -### Backup and Disaster Recovery +### Sicherung und Disaster Recovery -| **Activity** | **Client** | **Cloud Temple** | +| **Aktivität** | **Client** | **Cloud Temple** | | -------------------------------------------------------------------------- | ---------- | ---------------- | -| Define the backup strategy for the Kubernetes service | I | RA | -| Implement and manage backups for the Kubernetes service | I | RA | -| Define the backup strategy for applications | RA* | I* | -| Implement and manage backups for applications | RA* | I* | -| Test disaster recovery procedures for the Kubernetes service | CI | RA | -| Test disaster recovery procedures for applications | RA* | CI* | +| Backup-Strategie für den Kubernetes-Dienst festlegen | I | RA | +| Backups des Kubernetes-Dienstes implementieren und verwalten | I | RA | +| Backup-Strategie für die Anwendungen festlegen | RA* | I* | +| Backups der Anwendungen implementieren und verwalten | RA* | I* | +| Disaster-Recovery-Verfahren für den Kubernetes-Dienst testen | CI | RA | +| Disaster-Recovery-Verfahren für die Anwendungen testen | RA* | CI* | -*These responsibilities may be delegated to Cloud Temple via a complementary managed services contract. +*Diese Verantwortlichkeiten können über einen zusätzlichen Managed-Services-Vertrag an Cloud Temple delegiert werden. -### Support and Troubleshooting +### Support und Problembehebung -| **Activity** | **Client** | **Cloud Temple** | -| --------------------------------------------------------- | ---------- | ---------------- | -| Provide level 1 support for infrastructure | I | RA | -| Provide level 2 and 3 support for infrastructure | I | RA | -| Resolve issues related to the Kubernetes service | C | RA | -| Resolve issues related to applications | RA | I | +| **Aktivität** | **Kunde** | **Cloud Temple** | +| --------------------------------------------------------- | --------- | ---------------- | +| Level-1-Support für die Infrastruktur bereitstellen | I | RA | +| Level-2- und Level-3-Support für die Infrastruktur bereitstellen | I | RA | +| Probleme mit dem Kubernetes-Dienst beheben | C | RA | +| Probleme mit Anwendungen beheben | RA | I | -### Capacity Management and Evolution +### Kapazitätsmanagement und -entwicklung -| **Activity** | **Client** | **Cloud Temple** | -| ------------------------------------------------------ | ---------- | ---------------- | -| Monitor Kubernetes resource usage | C | RA | -| Plan service capacity evolution | RA | C | -| Implement capacity changes | I | RA | -| Manage application and resource evolution | RA | I | +| **Aktivität** | **Kunde** | **Cloud Temple** | +| ------------------------------------------------------ | --------- | ---------------- | +| Überwachung der Kubernetes-Ressourcennutzung | C | RA | +| Planung der Kapazitätserweiterung des Dienstes | RA | C | +| Umsetzung der Kapazitätsanpassungen | I | RA | +| Verwaltung der Anwendungsentwicklung und ihrer Ressourcen | RA | I | -### Documentation and Compliance +### Dokumentation und Compliance -| **Activity** | **Client** | **Cloud Temple** | +| **Aktivität** | **Kunde** | **Cloud Temple** | | ------------------------------------------------ | ---------- | ---------------- | -| Maintain Kubernetes service documentation | I | RA | -| Maintain application documentation | RA | I | -| Ensure Kubernetes service compliance | I | RA | -| Ensure application compliance | RA | I | -| Conduct Kubernetes service audits | I | RA | -| Conduct application audits | RA | I | +| Kubernetes-Dokumentation pflegen | I | RA | +| Anwendungsdokumentation pflegen | RA | I | +| Compliance des Kubernetes-Dienstes gewährleisten | I | RA | +| Compliance der Anwendungen gewährleisten | RA | I | +| Audits des Kubernetes-Dienstes durchführen | I | RA | +| Audits der Anwendungen durchführen | RA | I | -### Basic Kubernetes Operators/CRD Management +### Verwaltung der Basis-Kubernetes-Operatoren/CRDs -| **Activity** | **Client** | **Cloud Temple** | +| **Tätigkeit** | **Kunde** | **Cloud Temple** | | ----------------------------------------------------------- | ---------- | ---------------- | -| Provisioning of default Operator catalog | CI | RA | -| Updating Operators | CI | RA | -| Monitoring Operator status | CI | RA | -| Troubleshooting Operator-related issues | CI | RA | -| Managing Operator permissions | CI | RA | -| Managing Operator resources (addition/removal) | CI | RA | -| Backup of Operator resource data | CI | RA | -| Monitoring Operator resources | CI | RA | -| Restoration of Operator resource data | CI | RA | -| Security auditing of Operators | CI | RA | -| Operator support | CI | RA | -| License management for Operators | CI | RA | -| Management of specific support plans for Operators | CI | RA | - -*Operator package included in Managed Kube – see chapters: Managed Helm Packages - -### Management of Kubernetes Applications/Operators/CRDs (Business) - -| **Activity** | **Client** | **Cloud Temple** | +| Bereitstellung des Standard-Operator-Katalogs | CI | RA | +| Aktualisierung der Operatoren | CI | RA | +| Überwachung des Operator-Status | CI | RA | +| Fehlerbehebung bei Operatoren | CI | RA | +| Verwaltung der Operator-Berechtigungen | CI | RA | +| Verwaltung der Operator-Ressourcen (Hinzufügen/Entfernen) | CI | RA | +| Sicherung der Operator-Ressourcendaten | CI | RA | +| Überwachung der Operator-Ressourcen | CI | RA | +| Wiederherstellung der Operator-Ressourcendaten | CI | RA | +| Sicherheitsaudit der Operatoren | CI | RA | +| Support für Operatoren | CI | RA | +| Lizenzverwaltung für Operatoren | CI | RA | +| Verwaltung spezifischer Supportverträge für Operatoren | CI | RA | + +* Operator-Paket auf Managed Kube enthalten - siehe Kapitel: Verwaltete Helm-Pakete + +### Verwaltung von Kubernetes-Anwendungen/Operatoren/CRDs (Fachbereich) + +| **Aktivität** | **Kunde** | **Cloud Temple** | | ----------------------------------------------------------- | ---------- | ---------------- | -| Deployment of CRDs | RA* | I* | -| Update of Operators | RA | I | -| Monitoring of Operator status | RA | I | -| Troubleshooting issues related to Operators | RA | I | -| Management of Operator permissions | RA | I | -| Management of Operator resources (addition/removal) | RA | I | -| Backup of Operator resource data | RA | I | -| Monitoring of Operator resources | RA | I | -| Restoration of Operator resource data | RA | I | -| Security audit of Operators | RA | I | -| Support for Operators | RA | I | -| License management for Operators | RA | I | -| Management of specific support plans for Operators | RA | I | - -*These responsibilities may be delegated to Cloud Temple via a complementary managed services contract.* - -### Application Support - -| **Activity** | **Client** | **Cloud Temple** | -| ------------------------------------------- | ---------- | ---------------- | -| Application Support (external service) | RA | I | - -Application support may also be provided as part of an additional service. - -### RACI (synthetic) - -- Cloud Temple: responsible and accountable (RA) for the Kubernetes foundation, cluster security, infrastructure backups, and monitoring. -- Client: responsible and accountable (RA) for application projects, business operators, CI/CD pipelines, and application backups. -- "Gray zone": adaptations and extensions (IAM, specific operators, cluster compliance/security hardening) – billed on a project basis. +| Bereitstellung der CRDs | RA* | I* | +| Aktualisierung der Operatoren | RA | I | +| Überwachung des Status der Operatoren | RA | I | +| Behebung von Problemen mit Operatoren | RA | I | +| Verwaltung der Berechtigungen der Operatoren | RA | I | +| Verwaltung der Ressourcen der Operatoren (Hinzufügen/Entfernen) | RA | I | +| Sicherung der Daten der Operatoren-Ressourcen | RA | I | +| Überwachung der Operator-Ressourcen | RA | I | +| Wiederherstellung der Daten der Operatoren-Ressourcen | RA | I | +| Sicherheitsaudit der Operatoren | RA | I | +| Support für Operatoren | RA | I | +| Verwaltung der Lizenzen für Operatoren | RA | I | +| Verwaltung spezifischer Supportverträge für Operatoren | RA | I | + +*Diese Verantwortlichkeiten können über einen zusätzlichen Managed-Services-Vertrag an Cloud Temple delegiert werden. + +### Anwendungsunterstützung + +| **Tätigkeit** | **Kunde** | **Cloud Temple** | +| ------------------------------------------- | --------- | ---------------- | +| Anwendungsunterstützung (externe Leistung) | RA | I | + +Eine Anwendungsunterstützung kann auch im Rahmen einer Zusatzleistung erbracht werden. + +### RACI (Zusammenfassung) + +- Cloud Temple : verantwortlich und ausführend (RA) für die Kubernetes-Basis, Cluster-Sicherheit, Infrastruktur-Backup, Monitoring. +- Kunde : verantwortlich und ausführend (RA) für die Anwendungsprojekte, Fachbereichsoperatoren, CI/CD-Pipelines, Anwendungssicherungen. +- Zone "grise" : Anpassungen und Erweiterungen (IAM, spezifische Operatoren, Härtung der Compliance/Sicherheit des Clusters) - im Projektmodus abgerechnet. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/contractual/llmaas/raci.md b/i18n/de/docusaurus-plugin-content-docs/current/contractual/llmaas/raci.md index dd89870c..99a29755 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/contractual/llmaas/raci.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/contractual/llmaas/raci.md @@ -1,70 +1,72 @@ --- -title: Matrice de responsabilité - LLMaaS +title: Verantwortlichkeitsmatrix - LLMaaS +displayed_sidebar: docSidebar --- -Voici le RACI du partage de responsabilité entre le client et Cloud Temple pour l'usage de la plateforme LLM as a Service (LLMaaS). -## Définition des différents rôles +Dies ist die RACI-Matrix zur Aufteilung der Verantwortlichkeiten zwischen dem Kunden und Cloud Temple für die Nutzung der LLM as a Service (LLMaaS)-Plattform. -Nous rappelons ici les différents rôle du RACI : +## Definition der verschiedenen Rollen -| Rôle | Description | +Hier werden die verschiedenen Rollen des RACI noch einmal erläutert: + +| Rolle | Beschreibung | | ------------ | ---------------------------------------- | -| (R) Réalise | __R__éalise le processus | -| (A) Approuve | __A__pprouve la réalisation du processus | -| (C) Consulte | __C__onsulté pendant le processus | -| (I) Informé | __I__nformé des résultats du processus | +| (R) Durchführt | __D__urchführt den Prozess | +| (A) Genehmigt | __G__enehmigt die Durchführung des Prozesses | +| (C) Konsultiert | __K__onsultiert während des Prozesses | +| (I) Informiert | __I__nformiert über die Ergebnisse des Prozesses | -## Définir votre besoin +## Definieren Sie Ihre Anforderungen -| Activité | Rôle Client | Rôle Cloud Temple | +| Aktivität | Kundenrolle | Cloud Temple-Rolle | | --------------------------------------------------------------------- | ----------- | ----------------- | -| Valider que le service LLMaaS est conforme au besoin de l'application | __RA__ | __CI__ | -| Souscrire au service et sélectionner un tier de facturation | __RA__ | __I__ | +| Validieren, dass der LLMaaS-Service den Anforderungen der Anwendung entspricht | __RA__ | __CI__ | +| Service abonnieren und eine Abrechnungsebene auswählen | __RA__ | __I__ | -## Mettre en oeuvre le service +## Service implementieren -| Activité | Rôle Client | Rôle Cloud Temple | -| ---------------------------------------------------------------------------------- | ----------- | ----------------- | -| Assurer le maintien en condition opérationnelle de la plateforme LLMaaS (API, GPU) | __I__ | __RA__ | -| Assurer le maintien en condition de sécurité de la plateforme LLMaaS | __I__ | __RA__ | -| Gérer les clés d'accès API (création, rotation, révocation) | __RA__ | | -| Développer et maintenir le code de l'application cliente | __RA__ | | +| Aktivität | Kundenrolle | Cloud Temple-Rolle | +| ---------------------------------------------------------------------------------- | ----------- | ------------------ | +| Betrieb der LLMaaS-Plattform (API, GPU) gewährleisten | __I__ | __RA__ | +| Sicherheit der LLMaaS-Plattform gewährleisten | __I__ | __RA__ | +| Verwaltung von API-Zugriffsschlüsseln (Erstellung, Rotation, Widerruf) | __RA__ | | +| Entwicklung und Wartung des Codes der Client-Anwendung | __RA__ | | -## Opérations récurrentes +## Wiederkehrende Operationen -| Activité | Rôle Client | Rôle Cloud Temple | -| ---------------------------------------------------------------- | ----------- | ----------------- | -| Assurer la disponibilité de l'API LLMaaS | __I__ | __RA__ | -| Superviser le bon fonctionnement de la plateforme et des modèles | __I__ | __RA__ | -| Gérer les incidents sur la plateforme LLMaaS | __I__ | __RA__ | -| Gérer les problèmes sur la plateforme LLMaaS | __I__ | __RA__ | -| Gérer la capacité de l'infrastructure GPU | __I__ | __RA__ | -| Gérer les évolutions des modèles (ajout, dépréciation) | __C, I__ | __RA__ | -| Suivre la consommation et la facturation | __RA__ | __I__ | +| Tätigkeit | Kundenrolle | Cloud Temple-Rolle | +| ---------------------------------------------------------------- | ----------- | ------------------ | +| Verfügbarkeit der LLMaaS-API gewährleisten | __I__ | __RA__ | +| Funktionstüchtigkeit der Plattform und der Modelle überwachen | __I__ | __RA__ | +| Incidents auf der LLMaaS-Plattform verwalten | __I__ | __RA__ | +| Probleme auf der LLMaaS-Plattform verwalten | __I__ | __RA__ | +| Kapazität der GPU-Infrastruktur verwalten | __I__ | __RA__ | +| Modellentwicklungen verwalten (Hinzufügung, Deprecation) | __C, I__ | __RA__ | +| Verbrauch und Abrechnung nachverfolgen | __RA__ | __I__ | -## Gestion de la sécurité +## Sicherheitsmanagement -| Activité | Rôle Client | Rôle Cloud Temple | +| Aufgabe | Kundenrolle | Rolle Cloud Temple | | --------------------------------------------------------------------------- | ----------- | ----------------- | -| Sécuriser l'infrastructure physique et la plateforme LLMaaS | __I__ | __RA__ | -| Gérer les accès et les permissions des utilisateurs finaux de l'application | __RA__ | | -| Sécuriser les données et les prompts envoyés à l'API | __RA__ | __C__ | -| Assurer la confidentialité des données traitées par les modèles | __R__ | __A__ | -| Gérer la conformité de l'application finale (RGPD, etc.) | __RA__ | __I__ | +| Absichern der physischen Infrastruktur und der LLMaaS-Plattform | __I__ | __RA__ | +| Verwalten der Zugriffsrechte und Berechtigungen der Endanwender der Anwendung | __RA__ | | +| Absichern der an die API gesendeten Daten und Prompts | __RA__ | __C__ | +| Gewährleistung der Vertraulichkeit der von den Modellen verarbeiteten Daten | __R__ | __A__ | +| Sicherstellung der Konformität der Endanwendung (RGPD, etc.) | __RA__ | __I__ | -## Continuité d'activité +## Geschäftskontinuität -| Activité | Rôle Client | Rôle Cloud Temple | +| Aktivität | Rolle Kunde | Rolle Cloud Temple | | --------------------------------------------------------------------- | ----------- | ----------------- | -| Assurer la continuité d'activité de la plateforme LLMaaS | __I__ | __RA__ | -| Assurer la sauvegarde des données de l'application cliente | __RA__ | | -| Maintenir le plan de continuité d'activité pour l'application cliente | __RA__ | | +| Sicherstellung der Geschäftskontinuität der LLMaaS-Plattform | __I__ | __RA__ | +| Sicherstellung der Datensicherung der Kundenanwendung | __RA__ | | +| Aufrechterhaltung des Geschäftskontinuitätsplans für die Kundenanwendung | __RA__ | | -## Réversibilité +## Reversibilität -| Activité | Rôle Client | Rôle Cloud Temple | +| Aktivität | Kundenrolle | Cloud-Tempel-Rolle | | --------------------------------------------------------------------------- | ----------- | ----------------- | -| Mettre en oeuvre le projet de réversibilité (planification, outils, cibles) | __RA__ | __C__ | -| Exporter les données et le code de l'application cliente | __RA__ | | -| Supprimer les clés d'API et les accès au service | __RA__ | | +| Umsetzung des Reversibilitätsprojekts (Planung, Tools, Ziele) | __RA__ | __C__ | +| Exportieren der Daten und des Codes der Client-Anwendung | __RA__ | | +| Löschen der API-Schlüssel und des Dienstzugriffs | __RA__ | | \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/contractual/network/raci.md b/i18n/de/docusaurus-plugin-content-docs/current/contractual/network/raci.md index 26147c57..b6c5a6a6 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/contractual/network/raci.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/contractual/network/raci.md @@ -1,16 +1,15 @@ --- -title: Matrice de responsabilité Réseau +title: Netzwerk-Verantwortlichkeitsmatrix +displayed_sidebar: docSidebar --- -### Connectivité réseau client +### Clientnetzwerkverbindung -| Activité | Rôle Client | Rôle Cloud Temple | -|------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Souscrire à une connectivité réseau opérateur pour accéder à un datacenter physique Cloud Temple (6) | __RA__ | __CI__ | -| Gérer les incidents sur les liens réseaux opérateurs client | __RA__ | | -| Gérer les problèmes sur les liens réseaux opérateurs client | __RA__ | __I__ | -| Gérer les capacités sur les liens réseaux opérateurs client | __RA__ | __CI__ | +| Aktivität | Rolle Client | Rolle Cloud Temple | +|------------------------------------------------------------------------------------------------------|--------------|--------------------| +| Bezug einer Operator-Netzwerkverbindung zum Zugriff auf ein physisches Cloud-Temple-Rechenzentrum (6) | __RA__ | __CI__ | +| Verwaltung von Incidents auf den Client-Operator-Netzwerklinks | __RA__ | | +| Verwaltung von Problemen auf den Client-Operator-Netzwerklinks | __RA__ | __I__ | +| Verwaltung der Kapazitäten auf den Client-Operator-Netzwerklinks | __RA__ | __CI__ | -*(6) Cloud Temple assume la responsabilité du réseau concernant son infrastructure backbone, ses points de collecte ainsi que -les points d'interconnexion datacenter, garantissant ainsi la connectivité entre ces points et son réseau backbone. -Dans l'offre d'hébergement en baie physique, Cloud Temple assume la responsabilité à partir de l'équipement situé en haut du rack, communément appelé "top of rack".* +*(6) Cloud Temple übernimmt die Verantwortung für das Netzwerk in Bezug auf seine Backbone-Infrastruktur, seine Sammelpunkte sowie die Datacenter-Interkonnektionspunkte und gewährleistet so die Konnektivität zwischen diesen Punkten und seinem Backbone-Netzwerk. Im Angebot für physisches Rack-Hosting übernimmt Cloud Temple die Verantwortung ab dem Gerät oben im Rack, allgemein als „Top of Rack“ bezeichnet.* \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/contractual/network/raci_vpc.md b/i18n/de/docusaurus-plugin-content-docs/current/contractual/network/raci_vpc.md index e7b2c220..f56305e0 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/contractual/network/raci_vpc.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/contractual/network/raci_vpc.md @@ -1,188 +1,192 @@ --- -title: Modell der geteilten Verantwortung — VPC +title: Modell der gemeinsamen Verantwortung — VPC slug: /contractual/network/raci-vpc --- -# Modell der geteilten Verantwortung — VPC (Virtual Private Cloud) +# Shared-Responsibility-Modell — VPC (Virtual Private Cloud) -Dieses **RACI**-Modell definiert die Verteilung der Verantwortlichkeiten zwischen dem Kunden und Cloud Temple für den **VPC (Virtual Private Cloud)**-Dienst. +Hier ist das **RACI**-Modell, das die Aufteilung der Verantwortlichkeiten zwischen dem Kunden und Cloud Temple für die Nutzung des **VPC (Virtual Private Cloud)**-Services definiert. -> **Besonderheiten des VPC-Dienstes** -> Der VPC ist ein **vollständig von Cloud Temple verwalteter** Netzwerkdienst mit einer cloud-nativen Erfahrung: automatisches Routing, integrierte Hochverfügbarkeit und natives IPAM/DHCP-Management. Cloud Temple garantiert den Betrieb und die Verfügbarkeit der zugrunde liegenden Netzwerkinfrastruktur (VPC-Router, Inter-AZ-Backbone, externe Gateway). Der Kunde ist für das Design, die Konfiguration und die Sicherheit seines Netzwerkraums verantwortlich: Subnetze, Adressierung, Filterrichtlinien und Verbindungen. +> **Besonderheit des VPC-Angebots** +> Das VPC ist ein Netzwerk-Service, der **vollständig von Cloud Temple verwaltet wird** und eine cloud-native Erfahrung bietet: automatisches Routing, integrierte Hochverfügbarkeit und native IPAM/DHCP-Verwaltung. Cloud Temple garantiert den Betrieb und die Verfügbarkeit der zugrunde liegenden Netzwerkinfrastruktur (VPC-Router, inter-AZ-Backbone, externes Gateway). Der Kunde ist verantwortlich für das Design, die Konfiguration und die Sicherheit seines Netzwerksegments: Subnetze, Adressierung, Filterrichtlinien und Interconnections. --- -## Rollendefinitionen +## Definition der Rollen -| Rolle | Beschreibung | -|-------------------|-----------------------------------------------------------------------------------------------| -| (R) Responsible | __R__ealisiert den Prozess | -| (A) Accountable | __V__erantwortlich für die erfolgreiche Durchführung des Prozesses | -| (C) Consulted | Wird __k__onsultiert während des Prozesses | -| (I) Informed | Wird über die Ergebnisse des Prozesses __i__nformiert | +| Rolle | Beschreibung | +|--------------|---------------------------------------------------------------------------------------| +| (R) Realisiert | __R__ealisiert den Prozess | +| (A) Genehmigt | __G__enehmigt die Prozessdurchführung | +| (C) Konsultiert | __K__onsultiert während des Prozesses | +| (I) Informiert | __I__nformiert über die Ergebnisse des Prozesses (über die Tools, das Portal oder die Messaging-Plattform) | --- -## Physische Netzwerkinfrastruktur & Backbone +## Physische Netzwerk-Infrastruktur & Backbone -| Aktivität | Kunde | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|--------|--------------| -| Implementierung und Wartung der **physischen Netzwerkinfrastruktur** sicherstellen | | **RA** | -| **Inter-Datacenter / Inter-AZ**-Backbone-Konnektivität von Cloud Temple sicherstellen | **I** | **RA** | -| **Backbone-Netzwerk** betriebsbereit halten | **I** | **RA** | -| **Backbone-Netzwerk** sicherheitstechnisch in Betrieb halten | **I** | **RA** | -| Vorfälle, Probleme und Kapazitäten des Backbone-Netzwerks verwalten | **I** | **RA** | -| Notwendige **Lizenzen** für den Betrieb der Netzwerkinfrastruktur erwerben und aufrechterhalten | | **RA** | +Cloud Temple ist vollständig für die physische Infrastruktur und das Netzwerk-Backbone verantwortlich, auf dem das VPC basiert. + +| Tätigkeit | Kunde | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| Bereitstellung und Wartung der **physischen Netzwerk-Infrastrukturen** (Switches, Backbone-Router) | | **RA** | +| Sicherstellung der **Rechenzentrum-übergreifenden / AZ-übergreifenden** Konnektivität des Cloud Temple Backbones | **I** | **RA** | +| Sicherstellung der Betriebsbereitschaft des **Cloud Temple Netzwerk-Backbones** | **I** | **RA** | +| Sicherstellung der Sicherheitskonformität des **Cloud Temple Netzwerk-Backbones** | **I** | **RA** | +| Verwaltung von Incidents, Problemen und Kapazitäten des Netzwerk-Backbones | **I** | **RA** | +| Beschaffung und Aufrechterhaltung der für den Betrieb der Netzwerk-Infrastruktur erforderlichen Lizenzen | | **RA** | --- ## VPC-Infrastruktur (Router, Gateway & IPAM) -| Aktivität | Kunde | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|--------|--------------| -| **VPC-Router** betriebsbereit halten *(1)* | **I** | **RA** | -| **Hochverfügbarkeit** des VPC-Routers sicherstellen | **I** | **RA** | -| **Externe Gateway** betriebsbereit halten *(1)* | **I** | **RA** | -| **Hochverfügbarkeit** der externen Gateway sicherstellen | **I** | **RA** | -| Betrieb des zugrunde liegenden **IPAM & DHCP**-Dienstes sicherstellen | **I** | **RA** | -| Vorfälle und Probleme bei VPC-Kernkomponenten verwalten | **I** | **RA** | -| VPC-Kernkomponenten aktualisieren und sicherheitstechnisch warten | **I** | **RA** | +Cloud Temple gewährleistet den Betrieb der Kernkomponenten des VPC. Der Kunde konfiguriert seinen Netzwerkbereich innerhalb dieser Infrastruktur. + +| Aktivität | Kunde | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|-------|--------------| +| Sicherstellung der Betriebsbereitschaft des **VPC-Routers** *(1)* | **I** | **RA** | +| Sicherstellung der **Hochverfügbarkeit** des VPC-Routers | **I** | **RA** | +| Sicherstellung der Betriebsbereitschaft des **Externen Gateways (External Gateway)** *(1)* | **I** | **RA** | +| Sicherstellung der **Hochverfügbarkeit** des Externen Gateways | **I** | **RA** | +| Sicherstellung des Betriebs des zugrunde liegenden **IPAM & DHCP**-Diensts | **I** | **RA** | +| Verwaltung von Störungen und Problemen bei den Kernkomponenten des VPC | **I** | **RA** | +| Aktualisierung und Aufrechterhaltung des Sicherheitszustands der Kernkomponenten des VPC | **I** | **RA** | -*(1) VPC-Router und externe Gateway sind vollständig von Cloud Temple verwaltete Komponenten. Ihre Verfügbarkeit wird von Cloud Temple im Rahmen des VPC-Service-SLA garantiert.* +*(1) Der VPC-Router und das Externe Gateway sind vollständig von Cloud Temple verwaltete Komponenten. Ihre Verfügbarkeit wird von Cloud Temple im Rahmen des SLA des VPC-Dienstes garantiert.* --- -## VPC-Bereitstellung & Konfiguration +## VPC-Provisionierung und -Konfiguration + +Der Kunde ist für die Erstellung und Konfiguration seines VPC sowie der darin enthaltenen Netzwerkressourcen verantwortlich. -| Aktivität | Kunde | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|--------|--------------| -| **VPC** erstellen, ändern und löschen | **RA** | **I** | -| VPC-Netzwerkarchitektur definieren (Anzahl der Subnetze, Topologie) | **RA** | | -| **Private Netzwerke (Private Networks / VLANs)** im VPC erstellen, ändern und löschen | **RA** | **I** | -| **IP-Adressierungsplan** (CIDR-Bereiche) der privaten Netzwerke definieren | **RA** | **I** | -| **DHCP-Pools** konfigurieren (dynamische Bereiche, DNS, Gateway) | **RA** | **C** | -| **Externe Gateway** aktivieren und konfigurieren (Internet-Zugang, NAT, DNAT) *(2)* | **RA** | **C** | -| **Statische Routen** innerhalb des VPC verwalten | **RA** | | +| Aktivität | Kunde | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| **VPC** erstellen, ändern und löschen | **RA** | **I** | +| VPC-Netzwerkarchitektur festlegen (nombre de sous-réseaux, topologie) | **RA** | | +| **Private Networks / VLANs** im VPC erstellen, ändern und löschen | **RA** | **I** | +| **IP-Adressplan** der privaten Netzwerke festlegen (plages CIDR) | **RA** | **I** | +| **DHCP-Pools** konfigurieren (plages dynamiques, DNS, gateway) | **RA** | **C** | +| **Externe Gateway** aktivieren und konfigurieren (accès Internet, NAT, DNAT) *(2)* | **RA** | **C** | +| **Statische Routen** innerhalb des VPC verwalten | **RA** | | -*(2) Die Aktivierung der externen Gateway öffnet den Internet-Zugang für den VPC. Der Kunde ist für die zugehörigen Filterregeln und die Verkehrskontrolle verantwortlich.* +*(2) Die Aktivierung des externen Gateways ermöglicht den Internetzugriff für das VPC. Der Kunde ist für die Filterregeln und die Steuerung der damit verbundenen Datenflüsse verantwortlich.* --- ## Öffentliche IPs & Internet-Exposition -| Aktivität | Kunde | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|--------|--------------| -| **Pool öffentlicher IPs** auf der Plattform bereitstellen | **I** | **RA** | -| **Öffentliche IPs (Floating IPs)** bestellen und dem VPC zuweisen | **RA** | **I** | -| **NAT / DNAT**-Regeln für die Dienstexposition konfigurieren | **RA** | | -| Lebenszyklus öffentlicher IPs verwalten (Zuordnung, Freigabe, Verschiebung) | **RA** | **I** | -| Sicherstellen, dass im Internet exponierte Dienste die geltenden Sicherheitsrichtlinien einhalten | **RA** | | +| Aktivität | Client | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| Zuweisung des **Pools öffentlicher IPs**, der auf der Plattform verfügbar ist | **I** | **RA** | +| Anforderung und Zuordnung **öffentlicher IPs (Floating IPs)** an das eigene VPC | **RA** | **I** | +| Konfiguration der **NAT-/DNAT-Regeln** für die Exposition von Diensten | **RA** | | +| Verwaltung des Lebenszyklus öffentlicher IPs (Zuordnung, Freigabe, Änderung) | **RA** | **I** | +| Gewährleistung, dass die über das Internet exponierten Dienste die geltenden Sicherheitsrichtlinien einhalten | **RA** | | --- ## Netzwerksicherheit -| Aktivität | Kunde | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|--------|--------------| -| **Mandantenübergreifende Netzwerkisolierung** auf Plattformebene sicherstellen *(3)* | | **RA** | -| **Mikrosegmentierungsrichtlinien** (Sicherheitsgruppen) definieren und konfigurieren *(4)* | **RA** | | -| **Verkehrsfilterung** ein-/ausgehend implementieren (Anwendungs-Firewall, IDS/IPS) *(5)* | **RA** | | -| **TLS-Zertifikate** und SSL-Terminierung exponierter Dienste verwalten | **RA** | | -| **Penetrationstests** für im VPC gehostete Ressourcen durchführen *(6)* | **RA** | **C** | -| **Anomales Verhalten** bei Mandantennetzwerkflüssen überwachen | **RA** | | +| Aufgabe | Kunde | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|-------|--------------| +| Sicherstellung der **Netzwerktrennung zwischen Mandanten** auf Plattformebene *(3)* | | **RA** | +| Definition und Konfiguration der **Richtlinien zur Mikrosegmentierung** (security groups) *(4)* | **RA** | | +| Einrichtung einer **Datenflussfilterung** ein-/ausgehend (pare-feu applicatif, IDS/IPS) *(5)* | **RA** | | +| Verwaltung der **TLS-Zertifikate** und SSL-Terminierung exponierter Dienste | **RA** | | +| Durchführung von **Penetrationstests** auf den im VPC gehosteten Ressourcen *(6)* | **RA** | **C** | +| Überwachung **anomaler Verhaltensweisen** im Mandantendatenverkehr | **RA** | | -*(3) Cloud Temple garantiert die strikte Isolierung zwischen VPCs verschiedener Mandanten.* -*(4) Mikrosegmentierung (Sicherheitsgruppen) wird im H1 2026 verfügbar sein.* -*(5) Die Filterung von Anwendungsverkehr im VPC liegt in der Verantwortung des Kunden.* -*(6) Penetrationstests müssen Cloud Temple vorab gemeldet werden.* - ---- +*(3) Cloud Temple garantiert die strikte Trennung zwischen VPCs verschiedener Mandanten. Kein Datenverkehr kann diese Barriere ohne explizite Aktion des Kunden durchlaufen.* +*(4) Die Mikrosegmentierung (security groups) ist im S1 2026 verfügbar. Vor dieser Verfügbarkeit geltende Filterrichtlinien sind vom Kunden über eine dedizierte Sicherheitsinfrastruktur umzusetzen.* +*(5) Die anwendungsbezogene Filterung des Datenverkehrs innerhalb des VPC liegt in der Verantwortung des Kunden. Cloud Temple führt keine Inhaltsprüfung des Mandantendatenverkehrs durch.* +*(6) Penetrationstests sind gemäß den Allgemeinen Geschäftsbedingungen vorab bei Cloud Temple anzumelden.* -## Verbindung zu externen Netzwerken +## Interkonnektion mit externen Netzwerken -| Aktivität | Kunde | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|--------|--------------| -| **Verbindungsstrategie** mit On-Premise-Umgebungen oder anderen Clouds definieren | **RA** | **C** | -| **Site-to-Site-VPN**-Zugang abonnieren und konfigurieren *(verfügbar H2 2026)* | **RA** | **C** | -| **Cloud Connect** (dedizierter Link) abonnieren und konfigurieren *(verfügbar H2 2026)* | **RA** | **C** | -| **BGP / Routen** für Betreiberverbindungen verwalten | **RA** | **CI** | -| **Sicherheit der Datenströme** über Verbindungen sicherstellen | **RA** | | +| Aktivität | Client | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| Strategie für die **Interkonnektion** mit On-Premise-Umgebungen oder anderen Clouds festlegen | **RA** | **C** | +| Zugang zu einem **Site-to-Site-VPN** abonnieren und konfigurieren *(disponible S2 2026)* | **RA** | **C** | +| Zugang zu **Cloud Connect** (lien dédié) abonnieren und konfigurieren *(disponible S2 2026)* | **RA** | **CI** | +| Verwaltung der **BGP / Routes** im Zusammenhang mit Operator-Interkonnektionen | **RA** | **CI** | +| Gewährleistung der **Sicherheit der Datenflüsse** über die Interkonnektionen | **RA** | | --- -## Ressourcenverbindung mit dem VPC +## Anbindung von Ressourcen an das VPC -| Aktivität | Kunde | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|--------|--------------| -| **VM-Instanzen** mit einem privaten VPC-Netzwerk verbinden | **RA** | **I** | -| **IaaS-Ressourcen** (VMware-VMs, OpenIaaS) mit privaten VPC-Netzwerken verbinden | **RA** | **C** | -| **Netzwerkschnittstellen** der mit dem VPC verbundenen Ressourcen konfigurieren | **RA** | | -| Sicherstellen, dass verbundene Ressourcen **konsistente Netzwerkkonfigurationen** anwenden | **RA** | | +| Aktivität | Client | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| **VM-Instanzen** an ein privates VPC-Netzwerk anbinden | **RA** | **I** | +| **IaaS-Ressourcen** (VMware-VMs, OpenIaaS) an die privaten VPC-Netzwerke anbinden | **RA** | **C** | +| **Netzwerkschnittstellen** der mit dem VPC verbundenen Ressourcen konfigurieren | **RA** | | +| Sicherstellen, dass die verbundenen Ressourcen **konsistente Netzwerkkonfigurationen** (Gateway, DNS) | **RA** | | --- -## Netzwerküberwachung & Beobachtbarkeit +## Netzwerküberwachung & Observability -| Aktivität | Kunde | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|--------|--------------| -| Betrieb der **VPC-Kernkomponenten** (Router, Gateway) überwachen | **I** | **RA** | -| **Performance des Cloud Temple**-Netzwerk-Backbones überwachen | **I** | **RA** | -| **Netzwerkflussprotokolle** (Flow Logs) des VPC sammeln und analysieren *(verfügbar H1 2026)* | **RA** | **I** | -| **Überwachung von Anwendungsflüssen** im VPC implementieren | **RA** | | -| **Latenz und Bandbreite** der Datenströme im VPC überwachen | **RA** | **I** | +| Aktivität | Kunde | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|-------|--------------| +| Überwachung des Betriebs der **Kernkomponenten des VPC** (routeur, gateway) | **I** | **RA** | +| Überwachung der **Backbone-Performance** des Cloud Temple-Netzwerks | **I** | **RA** | +| Sammlung und Analyse der **Netzwerkfluss-Logs** (flow logs) des VPC *(disponible S1 2026)* | **RA** | **I** | +| Einrichtung eines **Monitorings der Anwendungsflüsse** im VPC | **RA** | | +| Überwachung der **Latenz und Bandbreite** der Flüsse innerhalb des VPC | **RA** | **I** | --- -## Änderungsmanagement & Kapazitäten +## Änderungs- und Kapazitätsmanagement -| Aktivität | Kunde | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|--------|--------------| -| Entscheidung über Hinzufügen, Ändern oder Entfernen von Netzwerkressourcen im VPC | **RA** | **CI** | -| Kapazitäten und Skalierbarkeit der Backbone-Netzwerkinfrastruktur verwalten | | **RA** | -| Wachstum des IP-Adressierungsplans im VPC planen und verwalten | **RA** | **C** | +| Aktivität | Client | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| Entscheidung treffen, Netzwerkressourcen im eigenen VPC hinzuzufügen, zu ändern oder zu entfernen | **RA** | **CI** | +| Kapazitäten und Skalierbarkeit der Backbone-Netzwerkinfrastruktur verwalten | | **RA** | +| Wachstum des IP-Adressplans im VPC planen und verwalten | **RA** | **C** | --- -## Zugriffs- & Identitätsverwaltung +## Zugriffs- & Identitätsmanagement -| Aktivität | Kunde | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|--------|--------------| -| Zugänglichkeit der **Cloud Temple Console** und Netzwerk-API sicherstellen | | **RA** | -| Berechtigungen der Cloud Temple Teams zur Netzwerkinfrastruktur verwalten | | **RA** | -| VPC-Zugriffsrechte in der Cloud Temple Console (IAM) verwalten | **RA** | | +| Aktivität | Client | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| Sicherstellung der Erreichbarkeit der **Cloud Temple Console** und der Netzwerk-API | | **RA** | +| Verwaltung der Berechtigungen der Cloud Temple-Teams für die Netzwerk-Infrastruktur | | **RA** | +| Verwaltung der Zugriffsrechte auf das VPC in der Cloud Temple Console (IAM) | **RA** | | --- ## Protokolle (Logs) -| Aktivität | Kunde | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|--------|--------------| -| **VPC-Plattformprotokolle** aufbewahren und bereitstellen *(7)* | | **RA** | -| **Fluss- und Anwendungsprotokolle** des Mandanten sammeln und aufbewahren | **RA** | | +| Aktivität | Client | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| Speichern und Bereitstellen der **VPC-Plattformprotokolle** *(7)* | | **RA** | +| Sammeln und Speichern der **Flow-Logs** und Anwendungsprotokolle des Tenants | **RA** | | -*(7) Die Aufbewahrungsdauer der VPC-Plattformprotokolle ist in der entsprechenden Dienstvereinbarung festgelegt.* +*(7) Die Aufbewahrungsdauer der VPC-Plattformprotokolle wird in der entsprechenden Servicevereinbarung festgelegt.* --- ## Dokumentation & Vertragliches -| Aktivität | Kunde | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|--------|--------------| -| Kaufmännisches und vertragliches Management sicherstellen | **I** | **RA** | -| Vertragliche Leistungserbringung überwachen | **RA** | **I** | -| Technische VPC-Servicedokumentation pflegen und bereitstellen | **I** | **RA** | -| Im Mandanten bereitgestellte Netzwerkarchitektur dokumentieren (Diagramme, CMDB) | **RA** | | +| Aktivität | Kunde | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|-------|--------------| +| Übernahme des kommerziellen und vertraglichen Managements (devis, commandes, facturation) | **I** | **RA** | +| Sicherstellung des vertraglichen Monitorings der Dienstleistung | **RA** | **I** | +| Sicherstellung der Wartung und Verfügbarkeit der technischen Dokumentation des VPC-Dienstes | **I** | **RA** | +| Dokumentation der im Tenant bereitgestellten Netzwerkarchitektur (schémas, CMDB) | **RA** | | --- ## Reversibilität -| Aktivität | Kunde | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|--------|--------------| -| Netzwerk-Reversibilitätsprojekt planen und Zielarchitekturen auswählen | **RA** | **I** | -| VPC-Konfiguration und Netzwerkressourcen über API oder bereitgestellte Tools exportieren | **RA** | **I** | -| VPC-Konfigurationen nach Vertragsbeendigung abbauen | **I** | **RA** | +| Aktivität | Kunde | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|-------|--------------| +| Das Projekt zur Netzwerk-Reversibilität planen und die Zielarchitekturen auswählen | **RA** | **I** | +| VPC-Konfiguration und Netzwerkressourcen über die API oder die bereitgestellten Tools exportieren | **RA** | **I** | +| VPC-Konfigurationen nach Vertragsbeendigung zurückbauen | **I** | **RA** | --- -> *Professional Services stehen zur Verfügung, wenn Sie einige oder alle Verantwortlichkeiten an Cloud Temple delegieren möchten. Wenden Sie sich an Ihren Cloud Temple Account Manager.* +> *Professionelle Dienstleistungen stehen zur Verfügung, wenn Sie die als Kundenverantwortung aufgeführten Aufgaben ganz oder teilweise delegieren möchten. Kontaktieren Sie Ihren Cloud Temple-Vertriebspartner.* \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/contractual/network/sla_vpc.md b/i18n/de/docusaurus-plugin-content-docs/current/contractual/network/sla_vpc.md index 5f80bc37..8e188a53 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/contractual/network/sla_vpc.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/contractual/network/sla_vpc.md @@ -8,81 +8,81 @@ displayed_sidebar: docSidebar | | | | :--- | :--- | -| **Letzte Aktualisierung** | 17. April 2026 | +| **Letztes Änderungsdatum** | 17. April 2026 | -Dieses Dokument definiert die Service Level Agreements (SLA) für das **Virtual Private Cloud (VPC)**-Produkt von **Cloud Temple** (nachfolgend „Anbieter" oder „Cloud Temple" genannt). Es ergänzt die Allgemeinen Geschäftsbedingungen von Cloud Temple und bildet mit diesen eine untrennbare Einheit. +Dieses Dokument definiert die Service Level Agreements (SLA) für das Produkt **Virtual Private Cloud (VPC)**, das von **Cloud Temple** (nachfolgend „der Anbieter“ oder „Cloud Temple“) bereitgestellt wird. Es ergänzt die Allgemeinen Verkaufs- und Servicebedingungen von Cloud Temple und bildet mit diesen ein untrennbares Ganzes. --- ## 1. Definitionen -Im Rahmen dieser SLA haben die folgenden groß geschriebenen Begriffe die nachstehende Bedeutung: +Im Rahmen dieser SLA haben die folgenden Begriffe mit Großschreibung die nachstehende Bedeutung : -- **Monatliche Verfügbarkeitsrate**: Der garantierte Betriebszeitanteil für die Datenebene des VPC-Dienstes in einem Kalendermonat. -- **VPC-Dienst**: Alle von Cloud Temple verwalteten Komponenten des Virtual Private Cloud: VPC-Router, Private Networks und External Gateway mit NAT-, DNAT- und Floating-IP-Funktionen. -- **Datenebene**: Die Netzwerktransportebene, die das Routing zwischen privaten Netzwerken innerhalb desselben VPC sowie die Internet-Konnektivität über das External Gateway sicherstellt. -- **Steuerungsebene**: Die APIs und Schnittstellen (Cloud Temple Konsole) zur Erstellung, Änderung und Löschung von VPC-Ressourcen (Netzwerke, Router, Floating IPs, Sicherheitsregeln). -- **Ausfallzeitraum**: Vollständige Unterbrechung des Routings zwischen privaten Netzwerken innerhalb desselben VPC oder vollständiger Verlust der Internet-Konnektivität über das aktivierte External Gateway, festgestellt durch Cloud Temples Monitoring-Tools. -- **Ausfallzeit**: Ununterbrochene Zeit, während der der Ausfallzeitraum besteht. Um im Rahmen dieser SLA berücksichtigt zu werden, muss eine Ausfallzeit mindestens **fünf (5) aufeinanderfolgende Minuten** betragen. +- **Monatliche Verfügbarkeitsrate** : Der garantierte Prozentsatz der Betriebszeit für den Data Plane des VPC-Dienstes während eines Kalendermonats. +- **VPC-Dienst** : Die Gesamtheit der von Cloud Temple verwalteten Komponenten, die die Virtual Private Cloud bilden : VPC-Router, Private Networks und External Gateway mit dessen NAT-, DNAT-Funktionen und Floating IPs. +- **Data Plane** : Die Netzwerkebene für den Transport, die das Routing der Datenströme zwischen den privaten Netzwerken desselben VPC sowie die Internetkonnektivität über das External Gateway gewährleistet. +- **Control Plane** : Die APIs und Schnittstellen (Cloud Temple Console), die die Erstellung, Änderung und Löschung von VPC-Ressourcen (Netzwerke, Router, Floating IPs, Sicherheitsregeln) ermöglichen. +- **Ausfallzeit** : Vollständige Unterbrechung des Routings zwischen den privaten Netzwerken desselben VPC oder vollständiger Verlust der Internetkonnektivität über das External Gateway (sofern aktiviert), festgestellt durch die Monitoring-Tools von Cloud Temple. +- **Ausfalldauer** : Ununterbrochene Zeitdauer, in der die Ausfallzeit festgestellt wird. Um für diese SLA angerechnet zu werden, muss eine Ausfalldauer mindestens **fünf (5) aufeinanderfolgende Minuten** betragen. --- -## 2. Service Level Verpflichtungen (SLA) +## 2. Service Level Agreements (SLA) -Cloud Temple verpflichtet sich zu den folgenden monatlichen Verfügbarkeitsniveaus: +Cloud Temple garantiert die folgenden monatlichen Verfügbarkeitswerte: -| Komponente | Garantierte monatliche Verfügbarkeitsrate | +| Komponente | Garantierte monatliche Verfügbarkeit | | :--- | :---: | -| **VPC-Datenebene** (Netzwerk-Routing, NAT, DNAT) | **99,99 %** | -| **VPC-Steuerungsebene** (API, Cloud Temple Konsole) | **99,9 %** | +| **VPC-Datenebene** (routage inter-réseaux, NAT, DNAT) | **99,99 %** | +| **VPC-Kontroll-Ebene** (API, Console Cloud Temple) | **99,9 %** | -Eine monatliche Verfügbarkeitsrate von **99,99 %** für die Datenebene entspricht maximal **4,4 Minuten** zulässiger Ausfallzeit pro Kalendermonat. +Eine garantierte monatliche Verfügbarkeit der **VPC-Datenebene** von **99,99 %** entspricht maximal **4,4 Minuten** zulässiger Ausfallzeit pro Kalendermonat. -Bei Nichteinhaltung dieser Verpflichtungen kann der Kunde Service-Gutschriften unter den in Artikel 5 definierten Bedingungen beanspruchen. +Bei Nichteinhaltung dieser Zusicherungen kann der Kunde unter den in Artikel 5 festgelegten Bedingungen Servicegutschriften geltend machen. --- ## 3. Messung und Umfang der Verfügbarkeit -Die Überwachung und Berechnung der monatlichen Verfügbarkeitsrate erfolgt **ausschließlich durch Cloud Temples Infrastruktur-Monitoring-Tools**. +Die Überwachung und Berechnung des monatlichen Verfügbarkeitsgrads erfolgen **ausschließlich durch die Monitoring-Tools der Cloud-Temple-Infrastruktur**. **Verantwortungsbereich:** -Diese SLA deckt nur die von Cloud Temple **verwalteten** Netzwerkkomponenten ab: -- Den VPC-Router und die interne Routing-Tabelle. -- Die Private Networks (L2-Segmente) und ihre Verfügbarkeit auf Datenebenenniveau. -- Das External Gateway, seine NAT- und DNAT-Funktionen sowie die zugehörigen Floating IPs. +Dieses SLA deckt ausschließlich die von Cloud Temple verwalteten Netzwerkkomponenten ab: +- Der VPC-Router und die interne Routing-Tabelle. +- Private Networks (segments L2) und deren Verfügbarkeit auf der Datenebene. +- Das externe Gateway (External Gateway), dessen NAT- und DNAT-Funktionen sowie die zugehörigen Floating IPs. :::info -Compute-Ressourcen (VM Instances, IaaS OpenSource, IaaS VMware), die mit dem VPC verbunden sind, unterliegen separaten SLAs und werden von diesem Dokument nicht abgedeckt. +Rechenressourcen (VM Instances, IaaS OpenSource, IaaS VMware), die mit dem VPC verbunden sind, unterliegen separaten SLAs und sind nicht durch dieses Dokument abgedeckt. ::: --- -## 4. Ausschlüsse +## 4. Garantieausschlüsse -Diese SLA stellt keine Verpflichtung bezüglich Elementen außerhalb der direkten Kontrolle von Cloud Temple dar. Folgendes wird **nicht** als Ausfallzeitraum betrachtet: +Dieses SLA begründet keine Verpflichtungen für Elemente, die außerhalb der direkten Kontrolle von Cloud Temple liegen. **Nicht** als Ausfallzeiten gelten Unterbrechungen, die folgende Ursachen haben: -1. **Kundenkonfigurationen**: Netzwerkfilterregeln (Security Groups, ACLs), die vom Kunden konfiguriert wurden und die Konnektivität blockieren, IP-Adresskonflikte, fehlerhafte Subnetz- oder statische Routenkonfigurationen. +1. **Konfigurationen des Kunden** : Vom Kunden konfigurierte Netzwerkfilterregeln (Security Groups, ACLs), die die Konnektivität blockieren, IP-Adresskonflikte, fehlerhafte Konfiguration von Subnetzen oder statischen Routen. -2. **Ausfälle verbundener Ressourcen**: Ausfälle auf Betriebssystem- oder Anwendungsebene von Compute-Instanzen (VM Instances, IaaS, Bare Metal), die mit dem VPC verbunden sind. +2. **Ausfälle verbundener Ressourcen** : Ausfälle auf Ebene des Betriebssystems oder der auf den mit dem VPC verbundenen Compute-Instanzen (VM-Instanzen, IaaS, Bare Metal) gehosteten Anwendungen. -3. **Externe Internet-Konnektivität**: Konnektivitätsunterbrechungen jenseits des Cloud Temple-Demarcationspunkts (Vorfälle bei Internet-Transit-Anbietern, BGP-Upstream-Verbindungsverschlechterungen). +3. **Externe Internetkonnektivität** : Unterbrechungen der Konnektivität jenseits des Cloud Temple-Abgrenzungspunkts (Vorfälle bei Internet-Transit-Betreibern, Beeinträchtigungen der Upstream-BGP-Leitungen). -4. **Geplante Wartung**: Wartungsarbeiten an der Netzwerkinfrastruktur, die im Rahmen der im Support-Vertrag des Kunden vorgesehenen Wartungsfenster vorab angekündigt wurden. +4. **Geplante Wartung** : Wartungsarbeiten an der Cloud Temple-Netzwerkinfrastruktur, die im Rahmen der im Supportvertrag des Kunden vorgesehenen Wartungsfenster vorher angekündigt wurden. -5. **Missbrauch oder Verstoß**: Aussetzung des VPC-Dienstes durch Cloud Temple nach einem Verstoß gegen die Allgemeinen Geschäftsbedingungen oder Sicherheitsanforderungen. +5. **Missbräuchliches Verhalten oder Verstöße** : Einstellung des VPC-Dienstes durch Cloud Temple infolge von Verstößen gegen die Allgemeinen Geschäftsbedingungen oder Sicherheitsanforderungen (z. B. bösartige Netzwerkaktivitäten, Nichteinhaltung der Akzeptablen Nutzungsbedingungen). -6. **Höhere Gewalt**: Ereignisse außerhalb der angemessenen Kontrolle von Cloud Temple. +6. **Höhere Gewalt** : Ereignisse außerhalb der zumutbaren Kontrolle von Cloud Temple (Naturkatastrophen, Kriegsereignisse, landesweite Stromausfälle usw.). --- -## 5. Service-Gutschriften und Strafen +## 5. Serviceguthaben und Vertragsstrafen ### 5.1 VPC-Datenebene -Wenn die monatliche Verfügbarkeitsrate von 99,99 % für die Datenebene nicht erreicht wird, ist der Kunde berechtigt, eine Service-Gutschrift zu erhalten: +Wenn die monatliche Verfügbarkeit von 99,99 % für die Datenebene nicht erreicht wird, hat der Kunde Anspruch auf ein Serviceguthaben, das als Prozentsatz des monatlich in Rechnung gestellten Betrags für den VPC-Dienst berechnet wird: -| Festgestellte monatliche Verfügbarkeitsrate | Service-Gutschrift | +| Festgestellte monatliche Verfügbarkeit | Serviceguthaben | | :--- | :---: | | Zwischen 99,00 % und 99,98 % | 10 % | | Zwischen 95,00 % und 98,99 % | 25 % | @@ -90,12 +90,12 @@ Wenn die monatliche Verfügbarkeitsrate von 99,99 % für die Datenebene nicht er ### 5.2 VPC-Steuerungsebene -Wenn die monatliche Verfügbarkeitsrate von 99,9 % für die Steuerungsebene nicht erreicht wird, hat der Kunde Anspruch auf eine Service-Gutschrift von **10 %** des monatlich für den VPC-Dienst berechneten Betrags. +Wenn die monatliche Verfügbarkeitsrate von 99,9 % für die Steuerungsebene nicht erreicht wird, hat der Kunde Anspruch auf ein Serviceguthaben in Höhe von **10 %** des monatlich berechneten Betrags für den betroffenen VPC-Dienst. -### 5.3 Reklamationsverfahren +### 5.3 Bedingungen für die Gutschrift -Um eine Service-Gutschrift zu erhalten, muss der Kunde innerhalb von **dreißig (30) Kalendertagen** nach dem Monat, in dem der Vorfall aufgetreten ist, eine begründete Anfrage durch Öffnen eines Tickets beim Cloud Temple Support einreichen. +Um eine Servicegutschrift zu erhalten, muss der Kunde einen begründeten Antrag stellen, indem er ein Ticket beim Cloud Temple Support erstellt. Der Antrag muss innerhalb von **dreißig (30) Kalendertagen** nach dem Monat, in dem der Vorfall eingetreten ist, eingereicht werden. -Die Anfrage muss enthalten: -- Die UUID des betroffenen VPC -- Genaue Zeitstempel des festgestellten Ausfallzeitraums +Der Antrag muss folgende Angaben enthalten: +- Die Identifikations-ID (UUID) des betroffenen VPC +- Die genauen Zeitstempel der festgestellten Ausfallzeit \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/contractual/paas/mco_mcs.md b/i18n/de/docusaurus-plugin-content-docs/current/contractual/paas/mco_mcs.md index b7323cf1..8d953b33 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/contractual/paas/mco_mcs.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/contractual/paas/mco_mcs.md @@ -1,203 +1,218 @@ --- -title: MCO/MCS +title: MCO/MCS PaaS OpenShift +slug: /contractual/paas/mco-mcs +displayed_sidebar: docSidebar --- -**Operational Readiness Policy (MCO) and Security Readiness Policy (MCS) for the OpenShift SNC PaaS Cloud Temple** + +**Richtlinie zur Aufrechterhaltung der Betriebsbereitschaft (MCO) und zur Aufrechterhaltung der Sicherheitsstandards (MCS) auf der PaaS OpenShift SNC **Cloud Temple**** ## Vorwort -Diese Richtlinie beschreibt die Verantwortlichkeiten und Empfehlungen für die Betriebsbereitschaft (MCO) und die Sicherheitsbereitschaft (MCS) Ihrer Umgebungen auf der PaaS-Plattform OpenShift SNC **Cloud Temple**. +Diese Richtlinie beschreibt detailliert die Verantwortlichkeiten und Empfehlungen für die Betriebserhaltung (MCO) und die Aufrechterhaltung der Sicherheit (MCS) Ihrer Umgebungen auf der PaaS OpenShift SNC **Cloud Temple**. + +--- -## Operational Readiness Maintenance (ORM) +## Betriebserhaltung (MCO) -### Cluster Management and Updates +### Cluster-Verwaltung und -Aktualisierung -**Responsibility of Cloud Temple:** +**Verantwortung **Cloud Temple** :** -- Full management of the underlying infrastructure, including master nodes, OpenShift version updates, and resilience of critical services deployed by **Cloud Temple**. -- Automatic minor/patch updates without downtime for hosted workloads, unless otherwise notified. -- Restriction of rights and features according to SecNumCloud requirements. -- Communication of upcoming updates and release-breaking changes for the next three months via the [**Cloud Temple Roadmap**](https://github.com/orgs/Cloud-Temple/projects/2) +- Vollständige Verwaltung der zugrunde liegenden Infrastruktur, einschließlich der Master-Knoten, OpenShift-Version-Updates und der Resilienz kritischer Dienste, die von **Cloud Temple** bereitgestellt werden. +- Automatische Minor-Updates/Patches ohne Unterbrechung für gehostete Workloads, sofern nicht anders mitgeteilt. +- Einschränkung von Rechten und Funktionen gemäß den SecNumCloud-Anforderungen. +- Kommunikation bevorstehender Updates und von Updates mit Breaking Changes für die nächsten drei Monate über die [**Cloud-Temple-Roadmap**](https://github.com/orgs/Cloud-Temple/projects/2) -**User Responsibility:** +**Verantwortung des Nutzers:** -- Management of deployed workloads (applications, CI/CD tools) and their configurations. -- Testing of workload updates in a staging environment before deployment to production. -- Ensuring workload compatibility with cluster components. +- Verwaltung der bereitgestellten Workloads (Anwendungen, CI/CD-Tools) und deren Konfigurationen. +- Tests von Workload-Updates in einer Staging-Umgebung vor der Bereitstellung in der Produktion. +- Sicherstellung der Kompatibilität der Workloads mit den Cluster-Komponenten. -**Recommendations:** +**Empfehlung:** -- Schedule application deployments outside maintenance windows to avoid conflicts with automatic cluster updates. -- Monitor **Cloud Temple** communications regarding major updates to plan necessary adjustments. -- Follow upcoming updates via the [**Product Roadmap**](https://github.com/orgs/Cloud-Temple/projects/2) -- Subscribe to [**incident notifications**](../../console/status.md#notification-management) +- Planen Sie Anwendungsbereitstellungen außerhalb der Wartungsfenster, um Konflikte mit automatischen Cluster-Updates zu vermeiden. +- Verfolgen Sie die Mitteilungen von **Cloud Temple** bezüglich Major-Updates, um erforderliche Anpassungen zu planen. +- Verfolgen Sie bevorstehende Updates über die [**Produkt-Roadmap**](https://github.com/orgs/Cloud-Temple/projects/2) +- Abonnieren Sie [**Incident-Benachrichtigungen**](../../console/status.md#gestion-des-notifications) -### Monitoring and Supervision +--- -**Responsibility of Cloud Temple:** +### Überwachung und Monitoring -- Monitoring and supervision of the infrastructure and underlying services deployed by **Cloud Temple**. +**Verantwortung **Cloud Temple** :** -**Responsibility of the user:** +- Überwachung und Monitoring der von **Cloud Temple** bereitgestellten Infrastruktur und der zugrunde liegenden Dienste. -- Monitoring and supervision of your workloads. +**Verantwortung des Benutzers :** -**Recommendation:** +- Überwachung und Monitoring seiner Workloads. -Use the **native tools provided**: +**Empfehlung :** -- Performance log and event analysis via the OpenShift console. -- Configuration of custom alerts based on cluster and pod metrics via the user interface. +Verwenden Sie die **mitgelieferten nativen Tools :** -Set critical alert thresholds: +- Analyse von Performance-Logs und Ereignissen über die OpenShift-Konsole. +- Konfiguration benutzerdefinierter Warnungen basierend auf Cluster- und Pod-Metriken über die Benutzeroberfläche. + +Konfigurieren Sie kritische Warnschwellenwerte : -- **CPU/Memory** of pods: ≥ 80%. -- **Disk space on persistent volumes**: ≥ 85%. -- **Pod startup failures**: more than X occurrences within 10 minutes. +- **CPU/Speicher** der Pods : ≥ 80 %. +- **Festplattenspeicher auf persistenten Volumes** : ≥ 85 %. +- **Startfehler von Pods** : mehr als X Vorkommnisse in 10 Minuten. + +Automatisieren Sie die Eskalation von Warnungen an Ihre Management-Tools für eine schnelle Reaktion. -Automatically escalate alerts to your management tools for rapid response. +--- -### Backups and Restoration +### Sicherungen und Wiederherstellung -Critical cluster components are automatically backed up by **Cloud Temple**. Workload and user data require dedicated management. +Die kritischen Clusterkomponenten werden automatisch von **Cloud Temple** gesichert. Workloads und Benutzerdaten erfordern ein dediziertes Management. -**Responsibility of Cloud Temple:** +**Verantwortung von Cloud Temple :** -- Automatic redundancy mechanisms within the infrastructure. -- Automatic backups of cluster configurations. +- Automatische Redundanzmechanismen innerhalb der Infrastruktur. +- Automatische Sicherungen der Clusterkonfigurationen. -**User Responsibility:** +**Verantwortung des Benutzers :** -- Back up critical workload data using solutions such as **Kasten**, available in the **Cloud Temple** catalog. +- Kritische Workload-Daten mit Lösungen wie dem Angebot **Kasten** im Katalog **Cloud Temple** sichern. -**Recommendation:** +**Empfehlung :** -- Implement regular backup policies: - - Automatic backups of Persistent Volumes (PVs) using Kasten. - - Daily backups of Kubernetes configurations, secrets, and YAML deployments. -- Regularly test restorations to validate RPOs. +- Regelmäßige Sicherungsrichtlinien implementieren : + - Automatische Sicherung von PVs mit Kasten. + - Tägliche Sicherung von Kubernetes-Konfigurationen, Secrets und YAML-Deployments. +- Wiederherstellungstests regelmäßig durchführen, um die RPOs zu validieren. -## Maintenance in Security Conditions (MCS) +--- -### Secret and Configuration Management +## Sicherheitswartung (MCS) -Use OpenShift/Kubernetes secrets and recommend integrating centralized secret management systems. +### Verwaltung von Secrets und Konfigurationen -**Responsibility of Cloud Temple:** +Verwendung von OpenShift/Kubernetes-Secrets sowie Empfehlung zur Integration zentraler Secrets-Management-Systeme. -- Management of secrets and configuration for the infrastructure and underlying services supporting the offering is the responsibility of **Cloud Temple**. +**Verantwortlichkeit **Cloud Temple** :** -**User Responsibility:** +- Die Verwaltung von Secrets und die Konfiguration der Infrastruktur und der der Angebots zugrunde liegenden Dienste liegen in der Verantwortung von **Cloud Temple**. -- Management of secrets and configuration for the **Client**'s workloads is the responsibility of the **Client**. +**Verantwortlichkeit des Benutzers :** -**Recommendation:** +- Die Verwaltung von Secrets und die Konfiguration der Workloads des **Clients** liegen in der Verantwortung des **Clients**. + +**Empfehlung :** -- Do not store secrets in plain text within YAML files. -- Use tools to encrypt sensitive information. +- Keine Secrets im Klartext in YAML-Dateien speichern. +- Tools zur Verschlüsselung sensibler Informationen verwenden. -### Access Control (IAM) +### Zugriffskontrolle (IAM) -Access reviews are carried out through the Console and the "User Management" module of the OpenShift console. +Die Zugriffsüberprüfung erfolgt über die Konsole und das Modul "User Management" der OpenShift-Konsole. -For more details on this feature, refer to our [**guide**](../../console/iam/iam.md) and the [**documentation**](https://docs.redhat.com/en/documentation/openshift_container_platform/) provided by the vendor. +Weitere Details zu dieser Funktion finden Sie in unserem [**Leitfaden**](../../console/iam/iam.md) sowie in der [**Dokumentation**](https://docs.redhat.com/en/documentation/openshift_container_platform/) des Herstellers. -**Responsibility of Cloud Temple:** +**Verantwortung **Cloud Temple** :** -- **Cloud Temple** is responsible for managing service and administrative accounts. -- **Cloud Temple** is responsible for integrating with the **Cloud Temple** identity system to manage access. -- **Cloud Temple** is responsible for the default setup of **RBAC** configuration and initial user permission restrictions. -- **Cloud Temple** is responsible for providing and maintaining the **two-factor authentication** system to strengthen access security. +- **Cloud Temple** ist für die Verwaltung der Service- und Administratorkonten verantwortlich. +- **Cloud Temple** ist für die Integration in das **Cloud Temple**-Identitätssystem zur Zugriffverwaltung verantwortlich. +- **Cloud Temple** ist für die Standardkonfiguration von **RBAC** und die anfänglichen Einschränkungen der Benutzerrechte verantwortlich. +- **Cloud Temple** ist für die Bereitstellung und Wartung des Systems zur **Zwei-Faktor-Authentifizierung** zur Absicherung der Zugriffe verantwortlich. + +**Verantwortung des Benutzers :** -**Responsibility of the User:** +- Der **Client** muss die Zugriffe seiner Benutzer regelmäßig überprüfen. +- Der **Client** ist für die Vergabe von Zugriffen an seine Benutzer sowie für deren Onboarding in der Tenant-Umgebung verantwortlich. +- Der **Client** muss seine Benutzer unter Einhaltung der vom **Cloud Temple**-System auferlegten Beschränkungen verwalten. -- The **Customer** must regularly review user access. -- The **Customer** is responsible for granting access to its users and onboarding them into the tenant. -- The **Customer** must manage its users in compliance with the limitations imposed by the **Cloud Temple** system. +### Schwachstellenmanagement -### Vulnerability Management +Schwachstellen in der Infrastruktur und den der Angebotsleistung zugrunde liegenden Diensten werden im Incident-Modul gemeldet. -Vulnerabilities on the infrastructure and underlying services supporting the offering will be communicated via the incident module. +**Verantwortung von Cloud Temple :** -**Responsibility of Cloud Temple:** +- **Cloud Temple** ist für die Meldung von Schwachstellen in der Infrastruktur und den der Angebotsleistung zugrunde liegenden Diensten ab deren Erkennung über das [**Incident**-Modul](../../console/status.md) der Konsole verantwortlich. +- **Cloud Temple** ist für die Anwendung von Patches in diesem Bereich verantwortlich. +- **Cloud Temple** ist für die Bereitstellung von Tools zur Analyse von Schwachstellen in Docker-Images verantwortlich. Standardmäßig setzt **Cloud Temple** **[Quay]** ein, um Docker-Images automatisch zu scannen. -- **Cloud Temple** is responsible for communicating vulnerabilities on the infrastructure and underlying services as soon as they are detected, through the [**incident**](../../console/status.md) module in the Console. -- **Cloud Temple** is responsible for applying patches within this scope. -- **Cloud Temple** is responsible for providing tools to analyze vulnerabilities in Docker images. By default, **Cloud Temple** deploys **[Quay]** to perform automated scanning of Docker images. +**Verantwortung des Benutzers :** -**Responsibility of the User:** +- Der **Kunde** ist für die Erkennung und Behebung von Schwachstellen in seinen Workloads verantwortlich. +- Der **Kunde** ist dafür verantwortlich, seine Workloads zu aktualisieren, um die Anwendung von Sicherheitspatches so schnell wie möglich zu ermöglichen. -- The **Customer** is responsible for detecting and remedying vulnerabilities within their workloads. -- The **Customer** is responsible for updating their workloads to enable the prompt application of security patches. +**Empfehlung :** -**Recommendation:** +- Nutzen Sie das Alerting des Clusters, das von **[Quay]** bereitgestellt wird, um Schwachstellen zu analysieren und anomales Verhalten in den vom **Kunden** genutzten Images zu erkennen. +- Abonnieren Sie die Benachrichtigungen zu [**Incidents**](../../console/status.md#gestion-des-notifications). -- Use the cluster alerting provided by **[Quay]** to analyze vulnerabilities and detect anomalous behavior in the images used by the **Customer**. -- Subscribe to notifications from [**incidents**](../../console/status.md#notification-management). +### Verschlüsselung -### Encryption +Garantie einer nativen Verschlüsselung auf der **Cloud Temple**-Infrastruktur, mit Empfehlungen für Workloads. -Guarantee of native encryption on the **Cloud Temple** infrastructure, with recommendations for workloads. +**Verantwortung von **Cloud Temple** :** -**Responsibility of Cloud Temple:** +- Redundanzmechanismen innerhalb der Infrastruktur. +- Automatische Sicherungen der Cluster-Konfigurationen. -- Redundancy mechanisms within the infrastructure. -- Automatic backups of cluster configurations. +**Verantwortung des Nutzers :** -**Responsibility of the user:** +- Kritische Daten der Workloads mit Lösungen wie dem Angebot **Kasten** im Katalog **Cloud Temple** sichern. +- Sicherstellen, dass Workloads die Resilienzmechanismen nutzen und Bereitstellungen entsprechend anpassen, um diese umzusetzen. -- Back up critical workload data using solutions such as the **Kasten** offering available in the **Cloud Temple** catalog. -- Ensure workloads use resilience mechanisms and adapt deployments accordingly. +**Empfehlung :** -**Recommendation:** +- **TLS-Verschlüsselung** für alle intra-Pod-Kommunikationen aktivieren. +- **TLS-Verschlüsselung** für alle Kommunikationen zwischen den PaaS- und IaaS-Angeboten von **Cloud Temple** aktivieren. +- Verschlüsselung von Daten im Ruhezustand über die **Cloud Temple**-Speicherlösungen sicherstellen. -- Enable **TLS encryption** for all intra-pod communications. -- Enable **TLS encryption** for all communications between **Cloud Temple** PaaS and IaaS offerings. -- Ensure data-at-rest encryption via **Cloud Temple** storage solutions. +### Protokollierung und Audit -### Logging and Auditing +Automatische Aufzeichnung kritischer Cluster-Ereignisse. -Automatic recording of critical cluster events. +**Verantwortung von Cloud Temple:** -**Responsibility **Cloud Temple** :** +- **Cloud Temple** ist für die Protokollierung und das Audit der Infrastruktur und der dem Angebot zugrunde liegenden Dienste verantwortlich. -- **Cloud Temple** is responsible for logging and auditing the infrastructure and underlying services supporting the offering. +**Verantwortung des Nutzers:** -**User Responsibility:** +- Der **Kunde** ist für die Protokollierung und das Audit seiner Workloads verantwortlich. + +**Empfehlung:** -- The **Customer** is responsible for logging and auditing their workloads. +- Konfigurieren Sie Pipelines zur Zentralisierung und Analyse der Logs Ihrer Workloads: + - Verwenden Sie Collector zur Log-Aggregation in Kombination mit einem Visualisierungstool. + - Integrieren Sie die Logs in Ihr **SIEM** (empfohlen). -**Recommendation:** +--- -- Set up pipelines to centralize and analyze your workload logs: - - Use log collectors for log aggregation, combined with a visualization tool. - - Integrate logs into your **SIEM** (recommended). +## Incidentmanagement und Geschäftskontinuitätsplan (GKP) -## Incident Management and Business Continuity Plan (BCP) +**Verantwortlichkeit von **Cloud Temple** :** -**Responsibility of Cloud Temple:** +- **Cloud Temple** ist für die Redundanzmechanismen innerhalb der Infrastruktur verantwortlich. +- **Cloud Temple** ist für die automatischen Sicherungen der Cluster-Konfigurationen verantwortlich. +- **Cloud Temple** ist für die Wiederherstellung des Betriebs nach einem Vorfall auf der Infrastruktur oder den der Dienstleistung zugrunde liegenden Diensten verantwortlich. -- **Cloud Temple** is responsible for redundancy mechanisms within the infrastructure. -- **Cloud Temple** is responsible for automated backups of cluster configurations. -- **Cloud Temple** is responsible for resuming operations after an incident affecting the infrastructure or underlying services provided. +**Verantwortlichkeit des Nutzers :** -**Responsibility of the User:** +- Der **Kunde** ist dafür verantwortlich, kritische Daten der Workloads mit Lösungen wie dem Angebot **Kasten** zu sichern, das im Katalog von **Cloud Temple** verfügbar ist. +- Der **Kunde** muss sicherstellen, dass die Workloads die Resilienzmechanismen nutzen, und seine Bereitstellungen entsprechend anpassen, um diese umzusetzen. +- Der **Kunde** ist für den Wiederherstellungsplan/Geschäftskontinuitätsplan seiner Workloads verantwortlich. -- The **Customer** is responsible for backing up critical workload data using solutions such as the **Kasten** offering available in the **Cloud Temple** catalog. -- The **Customer** must ensure that workloads utilize resilience mechanisms and adapt their deployments accordingly. -- The **Customer** is responsible for their own Business Continuity Plan (BCP) / Disaster Recovery Plan (DRP) for their workloads. +**Verfahren „Wiederherstellung nach einem Ausfall“** -**"Disaster Recovery" Procedure** +- Im Falle eines vollständigen Zugriffsverlusts auf einen Cluster muss der **Kunde** einen Vorfall über das Supportmodul der Konsole beim Support von **Cloud Temple** melden. +Siehe [**Verfahren zur Anfrage technischer Support**](../../console/console_quickstart.md#accès-au-support-technique) -- In case of complete loss of access to a cluster, the **Customer** must report an incident to **Cloud Temple** support via the support module in the console. -See the [**technical support request procedure**](../../console/console_quickstart.md#technischer-support) +--- ## Allgemeine Empfehlungen -1. **Ressourcen planen**: Stellen Sie sicher, dass der Cluster über ausreichende Kapazität verfügt, um Spitzenlasten zu bewältigen. -2. **Konfigurationen validieren**: Testen Sie Anwendungen in Staging-Umgebungen, bevor sie in die Produktion bereitgestellt werden. -3. **Regelmäßig überwachen**: Verwenden Sie integrierte Tools, um die Ressourcennutzung zu verfolgen und Probleme so früh wie möglich zu erkennen. -4. **Informiert bleiben**: Folgen Sie der Roadmap und den Anleitungen, um veraltete Funktionen zu vermeiden. -5. **Support kontaktieren**: Bei ungelösten Problemen wenden Sie sich an den Support über die [**Support-Anfrage-Prozedur**](../../console/console_quickstart.md#technischer-support) oder per E-Mail an die Adresse [**contact**](mailto:contact@cloud-temple.com). +1. **Ressourcen planen** : Eine ausreichende Clusterkapazität für Spitzenlasten sicherstellen. +2. **Konfigurationen validieren** : Anwendungen in Staging-Umgebungen testen, bevor sie in der Produktion bereitgestellt werden. +3. **Regelmäßig überwachen** : Integrierte Tools zur Überwachung der Ressourcennutzung nutzen und Probleme so früh wie möglich erkennen. +4. **Auf dem Laufenden bleiben** : Die Roadmap und Leitfäden verfolgen, um veraltete Funktionen zu vermeiden. +5. **Support kontaktieren** : Bei ungelösten Problemen den Support über das [**Verfahren zur Beantragung technischen Supports**](../../console/console_quickstart.md#accès-au-support-technique) oder per E-Mail an die Adresse [**contact**](mailto:contact@cloud-temple.com) kontaktieren. -Für detaillierte Informationen zu den Verantwortlichkeiten lesen Sie bitte unsere [**Verantwortlichkeitsmatrix**](../../contractual/paas/raci.md). +Um die Verantwortlichkeiten im Detail nachzuvollziehen, lesen Sie bitte unsere [**Verantwortlichkeitsmatrix**](../../contractual/paas/raci.md). \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/contractual/paas/raci.md b/i18n/de/docusaurus-plugin-content-docs/current/contractual/paas/raci.md index d40c87ff..a766a0b2 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/contractual/paas/raci.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/contractual/paas/raci.md @@ -1,146 +1,148 @@ --- -title: Matrice de responsabilité PaaS - OpenShift SecNumCloud +title: PaaS-Verantwortungsmatrix - OpenShift SecNumCloud +displayed_sidebar: docSidebar --- -Voici le modèle RACI définissant la répartition des responsabilités entre le client et Cloud Temple pour l'utilisation du PaaS OpenShift SecNumCloud. -## Définition des différents rôles +Dieses RACI-Modell definiert die Aufteilung der Verantwortlichkeiten zwischen dem Kunden und Cloud Temple für die Nutzung des PaaS OpenShift SecNumCloud. -Nous rappelons ici les différents rôles du RACI : +## Definition der verschiedenen Rollen -| Rôle | Description | +Hier werden die verschiedenen RACI-Rollen noch einmal erläutert: + +| Rolle | Beschreibung | | ------------ | ------------------------------------------------------------------------------------- | -| (R) Réalise | __R__éalise le processus | -| (A) Approuve | __A__pprouve la réalisation du processus | -| (C) Consulte | __C__onsulté pendant le processus | -| (I) Informé | __I__nformé des résultats du processus (via l'outillage, le portail ou la messagerie) | - -## Mise en place initiale - -| Activité | Rôle Client | Rôle Cloud Temple | -| -------------------------------------------------------------------- | ----------- | ----------------- | -| Définir l'architecture globale de la plateforme OpenShift | C | RA | -| Dimensionner la plateforme OpenShift (nombre de nœuds, ressources) | C | RA | -| Installer et configurer la plateforme OpenShift | I | RA | -| Configurer le réseau de base de la plateforme OpenShift | I | RA | -| Mettre en place la gestion des identités et des accès pour OpenShift | C | RA | -| Définir la stratégie de mise à l'échelle et de haute disponibilité | C | RA | - -## Gestion des projets et des applications - -| Activité | Rôle Client | Rôle Cloud Temple | -| ------------------------------------------------- | ----------- | ----------------- | -| Créer et gérer les projets OpenShift | RA | C | -| Déployer et gérer les applications dans OpenShift | RA | C | -| Configurer les pipelines CI/CD | RA | C | -| Gérer les images de conteneurs et les registres | RA | C | - -## Maintenance et mises à jour - -| Activité | Rôle Client | Rôle Cloud Temple | -| ------------------------------------------------ | ----------- | ----------------- | -| Mettre à jour la plateforme OpenShift | I | RA | -| Appliquer les correctifs de sécurité à OpenShift | I | RA | -| Mettre à jour les applications déployées | RA | I | -| Gérer les mises à jour des images de conteneurs | RA | I | - -## Surveillance et performance - -| Activité | Rôle Client | Rôle Cloud Temple | +| (R) Durchführt | __D__urchführt den Prozess | +| (A) Genehmigt | __G__enehmigt die Durchführung des Prozesses | +| (C) Konsultiert | __K__onsultiert während des Prozesses | +| (I) Informiert | __I__nformiert über die Ergebnisse des Prozesses (über die Tools, das Portal oder die Messaging-Dienste) | + +## Initiale Einrichtung + +| Aktivität | Kundenrolle | Rolle Cloud Temple | +| -------------------------------------------------------------------- | ----------- | ------------------ | +| Gesamtarchitektur der OpenShift-Plattform definieren | C | RA | +| OpenShift-Plattform dimensionieren (Anzahl der Knoten, Ressourcen) | C | RA | +| OpenShift-Plattform installieren und konfigurieren | I | RA | +| Basisnetzwerk der OpenShift-Plattform konfigurieren | I | RA | +| Identitäts- und Zugriffsmanagement für OpenShift einrichten | C | RA | +| Strategie für Skalierung und Hochverfügbarkeit definieren | C | RA | + +## Projekt- und Anwendungsmanagement + +| Aktivität | Kundenrolle | Rolle Cloud Temple | +| ------------------------------------------------- | ----------- | ------------------ | +| OpenShift-Projekte erstellen und verwalten | RA | C | +| Anwendungen in OpenShift bereitstellen und verwalten | RA | C | +| CI/CD-Pipelines konfigurieren | RA | C | +| Container-Images und -Registries verwalten | RA | C | + +## Wartung und Updates + +| Aktivität | Rolle Kunde | Rolle Cloud Temple | +| ------------------------------------------------ | ----------- | ------------------ | +| OpenShift-Plattform aktualisieren | I | RA | +| Sicherheitspatches für OpenShift anwenden | I | RA | +| Bereitgestellte Anwendungen aktualisieren | RA | I | +| Updates von Container-Images verwalten | RA | I | + +## Überwachung und Performance + +| Aktivität | Rolle Kunde | Rolle Cloud Temple | | ---------------------------------------------------- | ----------- | ----------------- | -| Surveiller la performance de la plateforme OpenShift | I | RA | -| Surveiller la performance des applications | RA | I | -| Gérer les alertes liées à la plateforme | I | RA | -| Gérer les alertes liées aux applications | RA | I | - -## Sécurité - -| Activité | Rôle Client | Rôle Cloud Temple | -| ------------------------------------------------------------------ | ----------- | ----------------- | -| Gérer la sécurité de la plateforme OpenShift | I | RA | -| Configurer et gérer les politiques de sécurité des pods | RA | C | -| Gérer les certificats SSL/TLS pour la plateforme | I | RA | -| Gérer les certificats SSL/TLS pour les applications | RA | C | -| Implémenter et gérer le contrôle d'accès basé sur les rôles (RBAC) | C | RA | - -## Sauvegarde et reprise après sinistre - -| Activité | Rôle Client | Rôle Cloud Temple | -| --------------------------------------------------------------------- | ----------- | ----------------- | -| Définir la stratégie de sauvegarde pour la plateforme OpenShift | C | RA | -| Mettre en œuvre et gérer les sauvegardes de la plateforme | I | RA | -| Définir la stratégie de sauvegarde pour les applications | RA | C | -| Mettre en œuvre et gérer les sauvegardes des applications | RA | I | -| Tester les procédures de reprise après sinistre pour la plateforme | I | RA | -| Tester les procédures de reprise après sinistre pour les applications | RA | C | - -## Support et résolution des problèmes - -| Activité | Rôle Client | Rôle Cloud Temple | -| ---------------------------------------------------------------- | ----------- | ----------------- | -| Fournir un support de niveau 1 pour la plateforme OpenShift | I | RA | -| Fournir un support de niveau 2 et 3 pour la plateforme OpenShift | I | RA | -| Résoudre les problèmes liés à la plateforme | I | RA | -| Résoudre les problèmes liés aux applications | RA | C | - -## Gestion des capacités et évolution - -| Activité | Rôle Client | Rôle Cloud Temple | -| -------------------------------------------------------- | ----------- | ----------------- | -| Surveiller l'utilisation des ressources de la plateforme | I | RA | -| Planifier l'évolution des capacités de la plateforme | C | RA | -| Implémenter les changements de capacité | I | RA | -| Gérer l'évolution des applications et leurs ressources | RA | C | - -## Documentation et conformité - -| Activité | Rôle Client | Rôle Cloud Temple | +| Performance der OpenShift-Plattform überwachen | I | RA | +| Performance der Anwendungen überwachen | RA | I | +| Warnmeldungen der Plattform verwalten | I | RA | +| Warnmeldungen der Anwendungen verwalten | RA | I | + +## Sicherheit + +| Aktivität | Rolle Kunde | Rolle Cloud Temple | +| ------------------------------------------------------------------ | ----------- | ------------------ | +| Sicherheit der OpenShift-Plattform verwalten | I | RA | +| Pod-Sicherheitsrichtlinien konfigurieren und verwalten | RA | C | +| SSL/TLS-Zertifikate für die Plattform verwalten | I | RA | +| SSL/TLS-Zertifikate für Anwendungen verwalten | RA | C | +| Rollenbasierten Zugriff (RBAC) implementieren und verwalten | C | RA | + +## Sicherung und Wiederherstellung nach Störfällen + +| Aktivität | Kundenrolle | Rolle Cloud Temple | +| --------------------------------------------------------------------- | ----------- | ------------------ | +| Sicherungsstrategie für die OpenShift-Plattform festlegen | C | RA | +| Sicherungen der Plattform implementieren und verwalten | I | RA | +| Sicherungsstrategie für Anwendungen festlegen | RA | C | +| Sicherungen der Anwendungen implementieren und verwalten | RA | I | +| Wiederherstellungsverfahren nach Störfällen für die Plattform testen | I | RA | +| Wiederherstellungsverfahren nach Störfällen für Anwendungen testen | RA | C | + +## Support und Fehlerbehebung + +| Aktivität | Kundenrolle | Rolle Cloud Temple | +| ----------------------------------------------------------------- | ----------- | ------------------ | +| Bereitstellung von Level-1-Support für die OpenShift-Plattform | I | RA | +| Bereitstellung von Level-2- und Level-3-Support für die OpenShift-Plattform | I | RA | +| Behebung von Problemen im Zusammenhang mit der Plattform | I | RA | +| Behebung von Problemen im Zusammenhang mit den Anwendungen | RA | C | + +## Kapazitätsmanagement und -entwicklung + +| Aktivität | Kundenrolle | Rolle Cloud Temple | +| -------------------------------------------------------- | ----------- | ------------------ | +| Überwachung der Plattformressourcennutzung | I | RA | +| Planung der Kapazitätsentwicklung der Plattform | C | RA | +| Implementierung von Kapazitätsänderungen | I | RA | +| Verwaltung der Anwendungsentwicklung und ihrer Ressourcen| RA | C | + +## Dokumentation und Compliance + +| Aktivität | Kundenrolle | Rolle Cloud Temple | | ------------------------------------------------------------- | ----------- | ----------------- | -| Maintenir la documentation de la plateforme OpenShift | I | RA | -| Maintenir la documentation des applications | RA | I | -| Assurer la conformité de la plateforme aux normes de sécurité | I | RA | -| Assurer la conformité des applications aux normes de sécurité | RA | C | -| Réaliser des audits de la plateforme | I | RA | -| Réaliser des audits des applications | RA | C | - -### Gestion des opérateurs OpenShift - -Les **opérateurs OpenShift** sont des extensions de la plateforme qui automatisent la gestion d'applications ou de services complexes sur Kubernetes. - -Seuls les **Opérateurs** provenant des catalogues **Certifiés, Red Hat et MarketPlace** seront proposés sous réserve qu'ils soient **conformes aux exigences SecNumCloud** et qu'ils respectent les limitations de l'écosystème. - -L’installation, la surveillance et la gestion des mises à jour de ces opérateurs sont gérées par **Cloud Temple**, tandis que le **Client** est responsable de l'utilisation de ces opérateurs pour gérer ses charges de travail. - -| Activité | Rôle Client | Rôle Cloud Temple | -| --------------------------------------------------------------- | ----------- | ----------------- | -| Mise à disposition des opérateurs dans le catalogue | CI | RA | -| Configuration initiale des Opérateurs via la Marketplace | CI | RA | -| Mise à jour des Opérateurs | I | RA | -| Surveillance de l’état des Opérateurs | I | RA | -| Résolution des problèmes liés aux Opérateurs | CI | RA | -| Gestion des autorisations des Opérateurs | C | RA | -| Gestion des ressources des Opérateurs (ajout/suppression) | CI | RA | -| Sauvegarde des données des ressources des Opérateurs | CI | RA | -| Supervision et monitoring des ressources Opérateurs | CI | RA | -| Restauration des données des ressources des Opérateurs | CI | RA | -| Audit de sécurité des Opérateurs | I | RA | -| Support des Opérateurs Red Hat | I | RA | -| Support des Opérateurs Certifiés | I | RA | -| Support des Opérateurs MarketPlace | I | RA | -| Gestion des licences et contrats de licenses sur les opérateurs | RA | I | -| Gestion des plans de supports spécifiques sur les opérateurs | RA | I | - -> **Note importante** : -> Seuls les opérateurs **déclaré supportés** par Cloud Temple et conformes à **SecNumCloud** sont mis à disposition. Tout opérateur non certifié ou provenant d’une source externe ne sera pas pris en charge ni validé pour être utilisé dans les environnements. -> La gestion des **licences** et des **plans de supports spécifiques** sur les opérateurs issue du catalogue **MarketPlace Red Hat** ne sont pas de la responsabilité de **Cloud Temple**. La gestion du support de ces opérateurs est déléguée défacto au partenaire fournissant le service. +| Dokumentation der OpenShift-Plattform pflegen | I | RA | +| Dokumentation der Anwendungen pflegen | RA | I | +| Einhaltung der Sicherheitsstandards durch die Plattform sicherstellen | I | RA | +| Einhaltung der Sicherheitsstandards durch die Anwendungen sicherstellen | RA | C | +| Audits der Plattform durchführen | I | RA | +| Audits der Anwendungen durchführen | RA | C | + +### Verwaltung der OpenShift-Operatoren + +Die **OpenShift-Operatoren** sind Plattform-Erweiterungen, die die Verwaltung komplexer Anwendungen oder Dienste auf Kubernetes automatisieren. + +Es werden ausschließlich **Operatoren** aus den Katalogen **Zertifiziert, Red Hat und Marketplace** angeboten, sofern sie **den SecNumCloud-Anforderungen entsprechen** und die Einschränkungen des Ökosystems beachten. + +Die Installation, Überwachung und Verwaltung der Updates dieser Operatoren werden von **Cloud Temple** übernommen, während der **Kunde** für die Nutzung dieser Operatoren zur Verwaltung seiner Workloads verantwortlich ist. + +| Aktivität | Rolle Kunde | Rolle Cloud Temple | +| ---------------------------------------------------------------- | ----------- | ------------------ | +| Bereitstellung der Operatoren im Katalog | CI | RA | +| Erstkonfiguration der Operatoren über die Marketplace | CI | RA | +| Aktualisierung der Operatoren | I | RA | +| Überwachung des Status der Operatoren | I | RA | +| Fehlerbehebung bei Operator-Problemen | CI | RA | +| Verwaltung der Berechtigungen der Operatoren | C | RA | +| Verwaltung der Ressourcen der Operatoren (Hinzufügen/Entfernen) | CI | RA | +| Sicherung der Daten der Operator-Ressourcen | CI | RA | +| Überwachung und Monitoring der Operator-Ressourcen | CI | RA | +| Wiederherstellung der Daten der Operator-Ressourcen | CI | RA | +| Sicherheitsaudit der Operatoren | I | RA | +| Support für Red Hat-Operatoren | I | RA | +| Support für zertifizierte Operatoren | I | RA | +| Support für Marketplace-Operatoren | I | RA | +| Verwaltung von Lizenzen und Lizenzverträgen für Operatoren | RA | I | +| Verwaltung spezifischer Supportpläne für Operatoren | RA | I | + +> **Wichtiger Hinweis**: +> Es werden ausschließlich Operatoren bereitgestellt, die von Cloud Temple als **unterstützt deklariert** wurden und **SecNumCloud-konform** sind. Jeder nicht zertifizierte Operator oder Operator aus externen Quellen wird weder unterstützt noch für die Nutzung in den Umgebungen freigegeben. +> Die Verwaltung der **Lizenzen** und **spezifischen Supportpläne** für Operatoren aus dem Katalog **MarketPlace Red Hat** liegt nicht in der Verantwortung von **Cloud Temple**. Die Verwaltung des Supports für diese Operatoren wird de facto an den Dienstleister-Partner delegiert. --- -### Clarification sur l'assistance applicative +### Erläuterung zur Anwendungsunterstützung -**Assistance applicative (prestation complémentaire) :** +**Anwendungsunterstützung (Zusatzleistung) :** -L'assistance applicative concernant le développement, la configuration, la gestion et la maintenance des applications **n'est pas sous la responsabilité de Cloud Temple**. Le périmètre se concentre uniquement sur la gestion de l'infrastructure OpenShift et des opérateurs. Le **support des charges de travail** (applications déployées) et des pipelines CI/CD sont de la responsabilité du client ou de tout prestataire tiers désigné pour cette tâche. +Die Anwendungsunterstützung im Zusammenhang mit der Entwicklung, Konfiguration, Verwaltung und Wartung von Anwendungen **liegt nicht in der Verantwortung von Cloud Temple**. Der Umfang konzentriert sich ausschließlich auf das Management der OpenShift-Infrastruktur und der Operatoren. Die **Unterstützung der Workloads** (bereitgestellte Anwendungen) und der CI/CD-Pipelines liegt in der Verantwortung des Kunden oder eines dafür beauftragten Drittanbieters. -| Activité | Rôle Client | Rôle Cloud Temple | +| Aktivität | Kundenrolle | Rolle Cloud Temple | | --- | --- | --- | -| Assistance applicative (prestation complémentaire) | RA | C | +| Anwendungsunterstützung (Zusatzleistung) | RA | C | \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/contractual/paas/raci_ocp_std.md b/i18n/de/docusaurus-plugin-content-docs/current/contractual/paas/raci_ocp_std.md index 514809b5..f3f1810a 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/contractual/paas/raci_ocp_std.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/contractual/paas/raci_ocp_std.md @@ -1,145 +1,147 @@ --- -title: Matrice de responsabilité - OpenShift Standard +title: Verantwortlichkeitsmatrix - OpenShift Standard +slug: /contractual/paas/raci-ocp-standard +displayed_sidebar: docSidebar --- -Voici le modèle RACI définissant la répartition des responsabilités entre le client et Cloud Temple pour l'utilisation de l'offre **OpenShift Standard**. -### Définition des différents rôles +Nachfolgend finden Sie die RACI-Matrix, die die Aufteilung der Verantwortlichkeiten zwischen dem Kunden und Cloud Temple für die Nutzung des **OpenShift Standard**-Angebots definiert. -Nous rappelons ici les différents rôles du RACI : +### Definition der verschiedenen Rollen -| Rôle | Description | +Hier werden die verschiedenen RACI-Rollen noch einmal erläutert: + +| Rolle | Beschreibung | | ------------ | ------------------------------------------------------------------------------------- | -| (R) Réalise | __R__éalise le processus | -| (A) Approuve | __A__pprouve la réalisation du processus | -| (C) Consulte | __C__onsulté pendant le processus | -| (I) Informé | __I__nformé des résultats du processus (via l'outillage, le portail ou la messagerie) | - -### Mise en place initiale - -| Activité | Rôle Client | Rôle Cloud Temple | -| ---------------------------------------------------------------------------------------- | ----------- | ----------------- | -| Définir l'architecture globale du service OpenShift | C | RA | -| Dimensionner le service OpenShift (nombre de nœuds, ressources) | C | RA | -| Installer le service OpenShift avec une configuration par défaut | I | RA | -| Configuration du service OpenShift | RA | C | -| Configurer le réseau de base du service OpenShift | I | RA | -| Déploiement de la configuration initiale des identités et des accès pour OpenShift | C | RA | -| Définir la stratégie de mise à l'échelle et de haute disponibilité sur l'infrastructure | C | RA | - -### Gestion des projets et des applications - -| Activité | Rôle Client | Rôle Cloud Temple | -| ------------------------------------------------- | ----------- | ----------------- | -| Créer et gérer les projets OpenShift | RA | C | -| Déployer et gérer les applications dans OpenShift | RA | C | -| Configurer les pipelines CI/CD | RA | C | -| Gérer les images de conteneurs et les registres | RA | C | - -### Maintenance et mises à jour - -| Activité | Rôle Client | Rôle Cloud Temple | -| ------------------------------------------------ | ----------- | ----------------- | -| Mettre à jour le service OpenShift | RA | I | -| Appliquer les correctifs de sécurité à OpenShift | RA | I | -| Mettre à jour les applications déployées | RA | I | -| Gérer les mises à jour des images de conteneurs | RA | I | - -### Surveillance et performance - -| Activité | Rôle Client | Rôle Cloud Temple | -| ---------------------------------------------------- | ----------- | ----------------- | -| Surveiller la performance du service OpenShift | RA | I | -| Surveiller la performance des applications | RA | I | -| Gérer les alertes liées au service OpenShift | RA | I | -| Gérer les alertes liées aux applications | RA | I | - -### Sécurité - -| Activité | Rôle Client | Rôle Cloud Temple | -| ------------------------------------------------------------------ | ----------- | ----------------- | -| Gérer la sécurité du service OpenShift | RA | I | -| Configurer et gérer les politiques de sécurité des pods | RA | C | -| Gérer les certificats SSL/TLS pour le service OpenShift | RA | I | -| Gérer les certificats SSL/TLS pour les applications | RA | C | -| Implémenter et gérer le contrôle d'accès basé sur les rôles (RBAC) | RA | I | - -### Sauvegarde et reprise après sinistre - -| Activité | Rôle Client | Rôle Cloud Temple | +| (R) Verantwortlich | __R__ealisiert den Prozess | +| (A) Genehmigend | __A__nordnet die Genehmigung der Prozessdurchführung | +| (C) Konsultiert | __K__onsultiert während des Prozesses | +| (I) Informiert | __I__nformiert über die Ergebnisse des Prozesses (über die Tools, das Portal oder die Nachrichten) | + +### Initiale Einrichtung + +| Aktivität | Kundenrolle | Cloud Temple Rolle | +| ---------------------------------------------------------------------------------------- | ----------- | ------------------ | +| Globale Architektur des OpenShift-Dienstes definieren | C | RA | +| OpenShift-Dienst dimensionieren (Anzahl der Knoten, Ressourcen) | C | RA | +| OpenShift-Dienst mit Standardkonfiguration installieren | I | RA | +| Konfiguration des OpenShift-Dienstes | RA | C | +| Basisnetzwerk des OpenShift-Dienstes konfigurieren | I | RA | +| Bereitstellung der initialen Identitäts- und Zugriffskonfiguration für OpenShift | C | RA | +| Skalierungs- und Hochverfügbarkeitsstrategie für die Infrastruktur festlegen | C | RA | + +### Projekt- und Anwendungsmanagement + +| Aktivität | Kundenrolle | Rolle Cloud Temple | +| ------------------------------------------------- | ----------- | ------------------ | +| OpenShift-Projekte erstellen und verwalten | RA | C | +| Anwendungen in OpenShift bereitstellen und verwalten | RA | C | +| CI/CD-Pipelines konfigurieren | RA | C | +| Container-Images und Container-Registries verwalten | RA | C | + +### Wartung und Updates + +| Aktivität | Rolle Kunde | Rolle Cloud Temple | +| ------------------------------------------------- | ----------- | ------------------ | +| OpenShift-Dienst aktualisieren | RA | I | +| Sicherheitspatches für OpenShift anwenden | RA | I | +| Bereitgestellte Anwendungen aktualisieren | RA | I | +| Updates von Container-Images verwalten | RA | I | + +### Überwachung und Leistung + +| Aktivität | Kundenrolle | Cloud-Tempel-Rolle | +| ---------------------------------------------------- | ----------- | ------------------ | +| Leistung des OpenShift-Dienstes überwachen | RA | I | +| Leistung von Anwendungen überwachen | RA | I | +| Warnungen des OpenShift-Dienstes verwalten | RA | I | +| Anwendungsbezogene Warnungen verwalten | RA | I | + +### Sicherheit +| Aktivität | Kundenrolle | Cloud Temple-Rolle | +| ------------------------------------------------------------------ | ----------- | ------------------ | +| Sicherheit des OpenShift-Dienstes verwalten | RA | I | +| Pod-Sicherheitsrichtlinien konfigurieren und verwalten | RA | C | +| SSL/TLS-Zertifikate für den OpenShift-Dienst verwalten | RA | I | +| SSL/TLS-Zertifikate für Anwendungen verwalten | RA | C | +| Rollenbasierten Zugriff (RBAC) implementieren und verwalten | RA | I | + +### Backup und Disaster Recovery + +| Aktivität | Kundenrolle | Rolle Cloud Temple | | --------------------------------------------------------------------- | ----------- | ----------------- | -| Définir la stratégie de sauvegarde pour le service OpenShift | RA | CI | -| Mettre en œuvre et gérer les sauvegardes du service OpenShift | RA | CI | -| Définir la stratégie de sauvegarde pour les applications | RA | CI | -| Mettre en œuvre et gérer les sauvegardes des applications | RA | CI | -| Tester les procédures de reprise après sinistre pour le service | RA | CI | -| Tester les procédures de reprise après sinistre pour les applications | RA | CI | +| Backup-Strategie für den OpenShift-Dienst festlegen | RA | CI | +| Backups für den OpenShift-Dienst implementieren und verwalten | RA | CI | +| Backup-Strategie für Anwendungen festlegen | RA | CI | +| Backups für Anwendungen implementieren und verwalten | RA | CI | +| Disaster-Recovery-Verfahren für den Dienst testen | RA | CI | +| Disaster-Recovery-Verfahren für Anwendungen testen | RA | CI | -### Support et résolution des problèmes +### Support und Fehlerbehebung -| Activité | Rôle Client | Rôle Cloud Temple | +| Aktivität | Kundenrolle | Rolle Cloud Temple | | ---------------------------------------------------------------- | ----------- | ----------------- | -| Fournir un support de niveau 1 pour l'infrastructure | I | RA | -| Fournir un support de niveau 2 et 3 pour l'infrastructure | I | RA | -| Résoudre les problèmes liés au service OpenShift | RA | C | -| Résoudre les problèmes liés aux applications | RA | C | +| Bereitstellung von Support der Stufe 1 für die Infrastruktur | I | RA | +| Bereitstellung von Support der Stufe 2 und 3 für die Infrastruktur | I | RA | +| Behebung von Problemen im Zusammenhang mit dem OpenShift-Dienst | RA | C | +| Behebung von Problemen im Zusammenhang mit Anwendungen | RA | C | -### Gestion des capacités et évolution +### Kapazitätsmanagement und -entwicklung -| Activité | Rôle Client | Rôle Cloud Temple | +| Aktivität | Rolle Kunde | Rolle Cloud Temple | | ------------------------------------------------------------ | ----------- | ----------------- | -| Surveiller l'utilisation des ressources du service OpenShift | RA | C | -| Planifier l'évolution des capacités du service | RA | C | -| Implémenter les changements de capacité | I | RA | -| Gérer l'évolution des applications et leurs ressources | RA | C | +| Überwachung der Ressourcennutzung des OpenShift-Dienstes | RA | C | +| Planung der Kapazitätsentwicklung des Dienstes | RA | C | +| Implementierung von Kapazitätsanpassungen | I | RA | +| Verwaltung der Weiterentwicklung von Anwendungen und deren Ressourcen | RA | C | -### Documentation et conformité +### Dokumentation und Compliance -| Activité | Rôle Client | Rôle Cloud Temple | -| ----------------------------------------------------------------- | ----------- | ----------------- | -| Maintenir la documentation du service OpenShift | I | RA | -| Maintenir la documentation des applications | RA | I | -| Assurer la conformité du service OpenShift aux normes de sécurité | RA | C | -| Assurer la conformité des applications aux normes de sécurité | RA | C | -| Réaliser des audits du service OpenShift | RA | C | -| Réaliser des audits des applications | RA | C | +| Aktivität | Kundenrolle | Cloud-Temple-Rolle | +| ------------------------------------------------------------------- | ----------- | ------------------ | +| Dokumentation des OpenShift-Dienstes pflegen | I | RA | +| Dokumentation der Anwendungen pflegen | RA | I | +| Einhaltung der Sicherheitsstandards durch den OpenShift-Dienst gewährleisten | RA | C | +| Einhaltung der Sicherheitsstandards durch die Anwendungen gewährleisten | RA | C | +| Audits des OpenShift-Dienstes durchführen | RA | C | +| Audits der Anwendungen durchführen | RA | C | -### Gestion des opérateurs OpenShift +### OpenShift-Operator-Verwaltung -Les **opérateurs OpenShift** sont des extensions du service qui automatisent la gestion d'applications ou de services complexes sur Kubernetes/OpenShift. +**OpenShift-Operatoren** sind Dienst-Erweiterungen, die die Verwaltung komplexer Anwendungen oder Dienste auf Kubernetes/OpenShift automatisieren. -Dans le cadre du service **OpenShift Standard**, aucune limitation sur les opérateurs n'est appliquée. Seul la mise à disposition de la fonctionnalité **OperatorHub** est assurée par **Cloud Temple**. Les opérateurs sont mis à disposition via le catalogue de la marketplace Red Hat. L’installation, la surveillance et la gestion des mises à jour de ces opérateurs sont gérés par le **Client**. -Le **Client** est responsable de l'utilisation de ces opérateurs pour gérer ses charges de travail. +Im Rahmen des **OpenShift Standard**-Dienstes werden keine Einschränkungen für Operatoren angewendet. Lediglich die Bereitstellung der Funktion **OperatorHub** wird von **Cloud Temple** sichergestellt. Die Operatoren werden über den Katalog des Red Hat-Marktplatzes bereitgestellt. Die Installation, Überwachung und Verwaltung der Updates dieser Operatoren werden vom **Client** verwaltet. +Der **Client** ist für die Nutzung dieser Operatoren zur Verwaltung seiner Workloads verantwortlich. | Activité | Rôle Client | Rôle Cloud Temple | | ----------------------------------------------------------------- | ----------- | ----------------- | -| Mise à disposition du catalogue d'Opérateurs par défaut | CI | RA | -| Mise à jour des Opérateurs | RA | CI | -| Surveillance de l’état des Opérateurs | RA | CI | -| Résolution des problèmes liés aux Opérateurs | RA | CI | -| Gestion des autorisations des Opérateurs | RA | CI | -| Gestion des ressources des Opérateurs (ajout/suppression) | RA | CI | -| Sauvegarde des données des ressources des Opérateurs | RA | CI | -| Supervision et monitoring des ressources Opérateurs | RA | CI | -| Restauration des données des ressources des Opérateurs | RA | CI | -| Audit de sécurité des Opérateurs | RA | CI | -| Support des Opérateurs | RA | CI | -| Gestion des licences et contrats de licenses sur les opérateurs | RA | I | -| Gestion des plans de supports spécifiques sur les opérateurs | RA | I | - -> **Note importante** : +| Bereitstellung des Standard-Operator-Katalogs | CI | RA | +| Aktualisierung der Operatoren | RA | CI | +| Überwachung des Operator-Status | RA | CI | +| Fehlerbehebung bei Operatoren | RA | CI | +| Verwaltung der Operator-Berechtigungen | RA | CI | +| Verwaltung der Operator-Ressourcen (Hinzufügen/Entfernen) | RA | CI | +| Sicherung der Daten der Operator-Ressourcen | RA | CI | +| Überwachung und Monitoring der Operator-Ressourcen | RA | CI | +| Wiederherstellung der Daten der Operator-Ressourcen | RA | CI | +| Sicherheitsaudit der Operatoren | RA | CI | +| Support für Operatoren | RA | CI | +| Verwaltung von Lizenzen und Lizenzverträgen für Operatoren | RA | I | +| Verwaltung spezifischer Supportpläne für Operatoren | RA | I | + +> **Wichtiger Hinweis** : > -> - Tout **dommage** entraîné par l'installation d'un **opérateur** ou issu d'une **opération du client** est de la responsabilité du **Client**. -> - La gestion des **licences** et des **plans de supports spécifiques** sur les opérateurs ne sont pas de la responsabilité de **Cloud Temple**. +> - Alle **Schäden**, die durch die Installation eines **Operators** oder durch eine **Client-Operation** verursacht werden, liegen in der Verantwortung des **Clients**. +> - Die Verwaltung der **Lizenzen** und **spezifischen Supportpläne** für Operatoren liegt nicht in der Verantwortung von **Cloud Temple**. --- -### Clarification sur l'assistance applicative +### Klarstellung zur Applikationsunterstützung -**Assistance applicative (prestation complémentaire) :** +**Applikationsunterstützung (ergänzende Leistung):** -L'assistance applicative concernant le développement, la configuration, la gestion et la maintenance des applications **n'est pas sous la responsabilité de Cloud Temple**. Le périmètre se concentre uniquement sur la gestion de **l'infrastructure sous-jacente au service OpenShift**. Le **support des charges de travail**, **la gestion du cluster jusqu'au système d'exploitation**, **la gestion des opérateurs** et les **pipelines CI/CD** sont de la **responsabilité du client** ou de tout **prestataire tiers désigné** pour cette tâche. +Die Applikationsunterstützung im Hinblick auf die Entwicklung, Konfiguration, Verwaltung und Wartung von Anwendungen **liegt nicht in der Verantwortung von Cloud Temple**. Der Leistungsumfang konzentriert sich ausschließlich auf die Verwaltung der **zugrunde liegenden Infrastruktur des OpenShift-Dienstes**. Die **Workload-Unterstützung**, **die Cluster-Verwaltung bis hin zum Betriebssystem**, **die Operator-Verwaltung** und die **CI/CD-Pipelines** liegen in der **Verantwortung des Kunden** oder eines **benannten Drittanbieters**, der mit dieser Aufgabe betraut ist. -| Activité | Rôle Client | Rôle Cloud Temple | +| Aktivität | Kundenrolle | Cloud-Temple-Rolle | | -------------------------------------------------- | ----------- | ----------------- | -| Assistance applicative (prestation complémentaire) | RA | C | +| Applikationsunterstützung (ergänzende Leistung) | RA | C | \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/contractual/shared-responsibility.md b/i18n/de/docusaurus-plugin-content-docs/current/contractual/shared-responsibility.md index c1f34e4b..257ba5fd 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/contractual/shared-responsibility.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/contractual/shared-responsibility.md @@ -1,5 +1,5 @@ --- -title: Modell der geteilten Verantwortung +title: Modell der gemeinsamen Verantwortung slug: /shared-responsibility hide_table_of_contents: true displayed_sidebar: docSidebar @@ -7,7 +7,7 @@ displayed_sidebar: docSidebar # Modell der geteilten Verantwortung -Cloud Temple arbeitet nach einem Modell der **geteilten Verantwortung** zwischen Anbieter und Kunde. Diese RACI-Matrizen (*Responsible, Accountable, Consulted, Informed*) legen genau fest, wer für jeden Dienst was tut. +Cloud Temple arbeitet nach einem Modell der **geteilten Verantwortung** zwischen Anbieter und Kunde. Diese RACI-Matrizen (*Responsible, Accountable, Consulted, Informed*) legen genau fest, wer für welchen Dienst welche Aufgaben übernimmt. --- @@ -16,8 +16,8 @@ Cloud Temple arbeitet nach einem Modell der **geteilten Verantwortung** zwischen
RACI IaaS (VMware & Open IaaS)
-
Verantwortungsaufteilung für VMware- und OpenStack-IaaS-Infrastrukturdienste.
- Dokument ansehen → +
Verteilung der Verantwortlichkeiten für die IaaS-Infrastrukturdienste VMware und OpenStack.
+ Dokument anzeigen →
@@ -27,9 +27,9 @@ Cloud Temple arbeitet nach einem Modell der **geteilten Verantwortung** zwischen
-
Verantwortungsmodell — VM-Instanzen
-
Verantwortungsaufteilung für den gemeinsam genutzten VM-Instanzen-Dienst.
- Dokument ansehen → +
Verantwortlichkeitsmodell — VM-Instanzen
+
Aufteilung der Verantwortlichkeiten für den Dienst der gemeinsam genutzten virtuellen Maschinen VM-Instanzen.
+ Dokument einsehen →
@@ -40,8 +40,8 @@ Cloud Temple arbeitet nach einem Modell der **geteilten Verantwortung** zwischen
RACI Object Storage (S3)
-
Verantwortungsaufteilung für den S3-kompatiblen Objektspeicherdienst.
- Dokument ansehen → +
Verantwortlichkeitsverteilung für den S3-kompatiblen Objektspeicherdienst.
+ Dokument einsehen →
@@ -52,18 +52,18 @@ Cloud Temple arbeitet nach einem Modell der **geteilten Verantwortung** zwischen
RACI PaaS OpenShift
-
Verantwortungsaufteilung für die verwaltete PaaS-OpenShift-Plattform.
- Dokument ansehen → +
Verantwortlichkeitsverteilung für die verwaltete PaaS-OpenShift-Plattform.
+ Dokument einsehen →
RACI PaaS OCP Standard
-
Verantwortungsaufteilung für das OpenShift Container Platform Standard-Angebot.
- Dokument ansehen → +
Verantwortlichkeitsverteilung für das Angebot OpenShift Container Platform Standard.
+ Dokument einsehen →
MCO / MCS PaaS OpenShift
-
Richtlinie zur Aufrechterhaltung der Betriebs- und Sicherheitsbedingungen der PaaS-Plattform.
- Dokument ansehen → +
Policy für Wartung und Sicherheit der PaaS-Plattform.
+ Dokument einsehen →
@@ -74,8 +74,8 @@ Cloud Temple arbeitet nach einem Modell der **geteilten Verantwortung** zwischen
RACI Managed Kubernetes
-
Verantwortungsaufteilung für den verwalteten Kubernetes-Dienst.
- Dokument ansehen → +
Verantwortlichkeitsverteilung für den verwalteten Kubernetes-Dienst.
+ Dokument einsehen →
@@ -86,8 +86,8 @@ Cloud Temple arbeitet nach einem Modell der **geteilten Verantwortung** zwischen
RACI LLMaaS
-
Verantwortungsaufteilung für den LLM-as-a-Service.
- Dokument ansehen → +
Aufteilung der Verantwortlichkeiten für den LLM as a Service.
+ Dokument einsehen →
@@ -98,12 +98,12 @@ Cloud Temple arbeitet nach einem Modell der **geteilten Verantwortung** zwischen
RACI Netzwerk
-
Verantwortungsaufteilung für Cloud Temple-Netzwerkdienste.
- Dokument ansehen → +
Verantwortlichkeitsverteilung für die Cloud Temple-Netzwerkdienste.
+ Dokument einsehen →
-
Verantwortungsmodell — VPC
-
Verantwortungsaufteilung für den verwalteten Virtual Private Cloud (VPC)-Dienst.
- Dokument ansehen → +
Verantwortlichkeitsmodell — VPC
+
Verantwortlichkeitsverteilung für den verwalteten Virtual Private Cloud (VPC)-Dienst.
+ Dokument einsehen →
-
+ \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/contractual/vm-instances/raci.md b/i18n/de/docusaurus-plugin-content-docs/current/contractual/vm-instances/raci.md index 407240d4..46f7a613 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/contractual/vm-instances/raci.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/contractual/vm-instances/raci.md @@ -1,25 +1,25 @@ --- -title: Modell der geteilten Verantwortung — VM-Instanzen +title: Shared-Responsibility-Modell — VM-Instanzen slug: /contractual/vm-instances/raci --- # Modell der geteilten Verantwortung — VM-Instanzen -Dieses **RACI**-Modell definiert die Verteilung der Verantwortlichkeiten zwischen dem Kunden und Cloud Temple für den **VM-Instanzen**-Dienst (gemeinsam genutzte virtuelle Maschinen). +Dies ist das **RACI**-Modell, das die Aufteilung der Verantwortlichkeiten zwischen dem Kunden und Cloud Temple für die Nutzung des **VM-Instanzen**-Services (geteilte virtuelle Maschinen) definiert. -> **Besonderheiten des VM-Instanzen-Dienstes** -> Im Gegensatz zum dedizierten IaaS-Angebot basiert der VM-Instanzen-Dienst auf einer **gemeinsam genutzten und vollständig von Cloud Temple verwalteten** Compute-Infrastruktur. Cloud Temple übernimmt das vollständige Management des Hypervisors, der Systemimages und der Infrastrukturschicht. Der Kunde trägt die volle Verantwortung für alles, was innerhalb seiner Instanzen ausgeführt wird: Gast-Betriebssystem, Anwendungen, Daten und Anwendungssicherheit. +> **Besonderheit des VM-Instanzen-Angebots** +> Im Gegensatz zum dedizierten IaaS-Angebot basiert der VM-Instanzen-Service auf einer **von Cloud Temple vollständig verwalteten und geteilten** Recheninfrastruktur. Cloud Temple übernimmt das vollständige Management des Hypervisors, der Systemimages und der Infrastrukturschicht. Der Kunde behält die volle Verantwortung für das, was innerhalb seiner Instanzen ausgeführt wird: Gastbetriebssystem, Anwendungen, Daten und Anwendungssicherheit. --- -## Rollendefinitionen +## Definition der Rollen -| Rolle | Beschreibung | -|-------------------|-----------------------------------------------------------------------------------------------| -| (R) Responsible | __R__ealisiert den Prozess | -| (A) Accountable | __V__erantwortlich für die erfolgreiche Durchführung des Prozesses | -| (C) Consulted | Wird __k__onsultiert während des Prozesses | -| (I) Informed | Wird über die Ergebnisse des Prozesses __i__nformiert (über Tools, Portal oder Messaging) | +| Rolle | Beschreibung | +|--------------|---------------------------------------------------------------------------------------| +| (R) Realisiert | __R__ealisiert den Prozess | +| (A) Genehmigt | __G__enehmigt die Prozessdurchführung | +| (C) Konsultiert | __K__onsultiert während des Prozesses | +| (I) Informiert | __I__nformiert über die Ergebnisse des Prozesses (über die Tools, das Portal oder die Messaging-Plattform) | --- @@ -27,207 +27,209 @@ Dieses **RACI**-Modell definiert die Verteilung der Verantwortlichkeiten zwische Cloud Temple ist vollständig für die Infrastruktur- und Hypervisor-Schicht verantwortlich. Der Kunde hat keinen Zugriff auf diese Schicht. -| Aktivität | Kunde | Cloud Temple | +| Aufgabe | Kunde | Cloud Temple | |--------------------------------------------------------------------------------------------------------|--------|--------------| -| Implementierung und Wartung der **physischen Rechenzentren** sicherstellen | | **RA** | -| Implementierung und Wartung der **gemeinsam genutzten Compute**-Infrastruktur sicherstellen | **I** | **RA** | -| Implementierung und Wartung der **Speicher**-Infrastruktur sicherstellen | **I** | **RA** | -| Implementierung und Wartung der **Backbone-Netzwerk**-Konnektivität sicherstellen | **I** | **RA** | -| **Hypervisoren** verwalten, aktualisieren und sicherheitstechnisch warten *(1)* | **I** | **RA** | -| **Hochverfügbarkeit** der Hypervisor-Plattform sicherstellen | **I** | **RA** | -| Vorfälle, Probleme und Kapazitäten der Infrastruktur- und Hypervisor-Schicht verwalten | **I** | **RA** | -| Für den Betrieb der Plattform notwendige **Lizenzen** erwerben und aufrechterhalten | | **RA** | +| Bereitstellung und Wartung der **physischen Rechenzentren** sicherstellen | | **RA** | +| Bereitstellung und Wartung der **gemeinsam genutzten Recheninfrastrukturen** | **I** | **RA** | +| Bereitstellung und Wartung der **Speicherinfrastrukturen** | **I** | **RA** | +| Bereitstellung und Wartung der **Backbone-Netzwerk-Konnektivität** | **I** | **RA** | +| Verwaltung, Aktualisierung und sicherer Betrieb der **Hypervisoren** *(1)* | **I** | **RA** | +| Sicherstellung der **Hochverfügbarkeit** der Hypervisor-Plattform | **I** | **RA** | +| Verwaltung von Incidents, Problemen und Kapazitäten der Infrastruktur- und Hypervisor-Schicht | **I** | **RA** | +| Beschaffung und Verwaltung der für den Plattformbetrieb erforderlichen **Lizenzen** | | **RA** | -*(1) Hypervisoren und die Virtualisierungsschicht liegen vollständig in der Verantwortung von Cloud Temple. Der Kunde hat weder Zugriff auf den Hypervisor noch auf die zugrunde liegende Verwaltungsschicht.* +*(1) Die Hypervisoren und die Virtualisierungsschicht liegen vollständig in der Verantwortung von Cloud Temple. Der Kunde hat keinen Zugriff auf den Hypervisor oder die zugrunde liegende Management-Schicht.* --- ## Images, Templates & Katalog -| Aktivität | Kunde | Cloud Temple | -|--------------------------------------------------------------------------------------------------------|--------|--------------| -| **Offizielle Katalog-Images** erstellen, veröffentlichen und pflegen *(2)* | **I** | **RA** | -| Sicherheits-Patches und Updates für **Katalog-Images** anwenden | | **RA** | -| Konformität und Sicherheit der veröffentlichten Katalog-Images validieren | | **RA** | -| Ein offizielles Katalog-Image **ableiten** um ein benutzerdefiniertes Image zu erstellen *(3)* | **RA** | **I** | -| Konformität, Lizenzen und Sicherheit jedes abgeleiteten benutzerdefinierten Images sicherstellen | **RA** | | -| Abgeleitete benutzerdefinierte Images pflegen und aktualisieren (OS-Patches, integrierte Tools) | **RA** | | +| Aktivität | Kunde | Cloud Temple | +|----------------------------------------------------------------------------------------------------------------|-------|--------------| +| Offizielle **Katalog-Images** erstellen, veröffentlichen und pflegen *(2)* | **I** | **RA** | +| Sicherheitspatches und Updates auf die **Katalog-Images** anwenden | | **RA** | +| Konformität und Sicherheit der im Katalog veröffentlichten Images validieren | | **RA** | +| Ein offizielles **Katalog-Image** zur Erstellung eines benutzerdefinierten Images **ableiten** *(3)* | **RA** | **I** | +| Konformität, Lizenzen und Sicherheit jedes abgeleiteten benutzerdefinierten Images sicherstellen | **RA** | | +| Abgeleitete benutzerdefinierte Images pflegen und aktualisieren (OS-Patches, integrierte Tools) | **RA** | | -*(2) Offizielle Katalog-Images (Linux-Distributionen, Windows Server usw.) werden von Cloud Temple erstellt, gepflegt und aktualisiert. Ihr anfängliches Sicherheitsniveau liegt in der Verantwortung von Cloud Temple.* -*(3) Der Kunde kann ein offizielles Katalog-Image ableiten, um ein benutzerdefiniertes Image zu erstellen. Ab diesem Zeitpunkt liegt die **gesamte Verantwortung** für dieses Image beim Kunden: Konformität, Lizenzen, Sicherheitsupdates, Vorhandensein und Aktualisierung der Tools sowie Hardening. Cloud Temple übernimmt keine Pflege abgeleiteter Images.* +*(2) Die offiziellen Katalog-Images (Linux-Distributionen, Windows Server usw.) werden von Cloud Temple erstellt, gepflegt und aktualisiert. Das initiale Sicherheitsniveau liegt in der Verantwortung von Cloud Temple.* +*(3) Der Kunde kann ein offizielles Katalog-Image ableiten, um ein benutzerdefiniertes Image zu erstellen. Ab diesem Zeitpunkt trägt er **die volle Verantwortung** für dieses Image: Konformität, Lizenzen, Sicherheitsupdates, Vorhandensein und Aktualisierung der Tools sowie Hardening. Cloud Temple übernimmt keine Pflege dieser abgeleiteten Images.* --- -## Bereitstellung & Instanz-Lebenszyklus +## Instanzbereitstellung & Lebenszyklus der Instanzen -| Aktivität | Kunde | Cloud Temple | +| Aktivität | Client | Cloud Temple | |--------------------------------------------------------------------------------------------------------|--------|--------------| -| **VM-Instanzen** erstellen, starten, stoppen und löschen | **RA** | **I** | -| Flavor und Start-Image der Instanz auswählen | **RA** | | -| Instanz skalieren (Flavor-Änderung) *(4)* | **RA** | **I** | -| **Metadaten und Tags** der Instanzen verwalten | **RA** | | -| **Lebenszyklus** der Instanzen verwalten (Erstellung, Änderung, Stilllegung) | **RA** | | -| Entscheidung über Hinzufügen oder Reduzieren von Ressourcen treffen | **RA** | | +| **VM-Instanzen** erstellen, starten, stoppen und löschen | **RA** | **I** | +| Instanztyp (flavor) und Start-Image der Instanz auswählen | **RA** | | +| Instanz skalieren (changement de gabarit) *(4)* | **RA** | **I** | +| **Metadaten und Tags** der Instanzen verwalten | **RA** | | +| **Lebenszyklus** der Instanzen verwalten (création, modification, décommissionnement) | **RA** | | +| Entscheidung über das Hinzufügen oder Reduzieren von Ressourcen treffen. | **RA** | | -*(4) Eine Größenänderung kann einen Neustart der Instanz erfordern. Die Verfügbarkeit der gehosteten Anwendung während dieser Operation liegt in der Verantwortung des Kunden.* +*(4) Das Skalieren kann einen Neustart der Instanz erfordern. Die Verfügbarkeit der gehosteten Anwendung während dieses Vorgangs liegt in der Verantwortung des Clients.* --- -## Gast-Betriebssystem (Guest OS) & Tools +## Gastbetriebssystem (Guest OS) & Tools Der Kunde hat die volle Kontrolle und die volle Verantwortung für das Betriebssystem innerhalb seiner Instanzen. -:::warning[SLA-Gültigkeitsbedingung — Obligatorische Tools] -Die **VM-Instanzen-Tools** (Hypervisor-Management-Agenten) werden von Cloud Temple **bei der Bereitstellung** der Instanz aus dem Katalog **vorinstalliert**. Diese Agenten sind für den ordnungsgemäßen Betrieb der Plattform und die Verfügbarkeitsmessung unverzichtbar. +:::warning[Bedingung für die SLA-Gültigkeit — Erforderliche Tools] +Die **VM-Instance-Tools** (agents de gestion de l'hyperviseur) werden von **Cloud Temple bei der Bereitstellung der Instanz aus dem Katalog vorinstalliert**. Diese Agenten sind für den ordnungsgemäßen Betrieb der Plattform und die Verfügbarkeitsmessung unerlässlich. -**Wenn der Kunde diese Tools deaktiviert oder entfernt, ist das SLA sofort hinfällig.** Cloud Temple kann die Verfügbarkeit der Instanz ohne diese Agenten weder garantieren noch messen. Das Vorhandensein und die ordnungsgemäße Funktion der Tools liegen während der gesamten Lebensdauer der Instanz in der ausschließlichen Verantwortung des Kunden. +**Wenn der Kunde diese Tools deaktiviert oder löscht, erlischt das SLA sofort.** Cloud Temple kann ohne diese Agenten die Verfügbarkeit der Instanz weder garantieren noch messen. Das Vorhandensein und der einwandfreie Betrieb der Tools liegen während des Betriebs in der alleinigen Verantwortung des Kunden. ::: -| Aktivität | Kunde | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|--------|--------------| -| **Tools vorinstallieren** (Hypervisor-Agenten, PV-Treiber) bei der Bereitstellung aus dem Katalog *(5)* | | **RA** | -| Sicherstellen, dass **Tools installiert, aktiviert und aktuell** bleiben *(6)* | **RA** | | -| **Sicherheits-Patches und Updates** des Gast-Betriebssystems anwenden | **RA** | | -| Konfiguration des Betriebssystems **absichern** (CIS, ANSSI-Empfehlungen usw.) | **RA** | | -| **Benutzerkonten, Passwörter und SSH-Schlüssel** innerhalb der Instanz verwalten *(7)* | **RA** | | -| **Monitoring-Agenten** installieren und konfigurieren (OS-Metriken, Systemprotokolle) | **RA** | | -| **Regulatorische Compliance** für gehostete OS und Daten aufrechterhalten | **RA** | | +| Activité | Client | Cloud Temple | +|-----------------------------------------------------------------------------------------------------------------|--------|--------------| +| **Tools vorinstallieren** (agents hyperviseur, PV drivers) bei der Bereitstellung aus dem Katalog *(5)* | | **RA** | +| Sicherstellen, dass die **Tools während der gesamten Lebensdauer der Instanz installiert, aktiviert und aktuell bleiben** *(6)* | **RA** | | +| **Sicherheits-Patches und Updates** des Gastbetriebssystems anwenden | **RA** | | +| **Härten** der Betriebssystemkonfiguration (CIS, recommandations ANSSI, etc.) | **RA** | | +| Verwalten der **Benutzerkonten, Passwörter und SSH-Schlüssel** innerhalb der Instanz *(7)* | **RA** | | +| Installieren und Konfigurieren der **Überwachungsagenten** (métriques OS, logs système) | **RA** | | +| Aufrechterhaltung der **gesetzlichen Konformität** für Betriebssysteme und gehostete Daten | **RA** | | -*(5) Cloud Temple stellt ein initiales Image aus dem Katalog mit vorinstallierten Tools bereit. Die Verantwortung für Konfiguration, Absicherung und nachfolgende OS-Updates liegt vollständig beim Kunden ab der ersten Verbindung zur Instanz.* -*(6) Das Entfernen oder Deaktivieren der Tools durch den Kunden führt zur sofortigen Aussetzung der Service-Level-Verpflichtungen (SLA) für die betroffene Instanz. Cloud Temple kann nicht für Fehlfunktionen verantwortlich gemacht werden, die auf das Fehlen dieser Agenten zurückzuführen sind.* -*(7) Die Zugangssicherheit zur Instanz (Passwortstärke, SSH-Schlüssel-Verwaltung, Prinzip der geringsten Berechtigung) liegt vollständig in der Verantwortung des Kunden. Cloud Temple kann nicht für eine Kompromittierung verantwortlich gemacht werden, die aus einer unzureichend gesicherten Zugriffskonfiguration resultiert.* +*(5) Cloud Temple stellt ein initiales Image im Katalogzustand mit vorinstallierten Tools bereit. Die Verantwortung für die Konfiguration, das Hardening und die nachfolgenden Updates des Betriebssystems liegt ab der ersten Verbindungsherstellung zur Instanz vollständig beim Kunden.* +*(6) Das Löschen oder Deaktivieren der Tools durch den Kunden führt zur sofortigen Aussetzung der Service-Level-Agreement-(SLA)-Verpflichtungen für die betreffende Instanz. Cloud Temple kann nicht für Störungen verantwortlich gemacht werden, die auf das Fehlen dieser Agenten zurückzuführen sind.* +*(7) Die Sicherheit des Zugriffs auf die Instanz (solidité des mots de passe, gestion des clés SSH, principe de moindre privilège) liegt in der alleinigen Verantwortung des Kunden. Cloud Temple kann nicht für eine Kompromittierung verantwortlich gemacht werden, die auf eine unzureichend gesicherte Zugriffskonfiguration zurückzuführen ist.* --- -## Instanz-Sicherheit & Internet-Exposition +## Sicherheit von Instanzen & Internet-Exposition -:::danger[Sicherheitsverantwortung des Kunden] -Cloud Temple gewährleistet nur die **mandantenübergreifende Netzwerkisolierung** auf Plattformebene. Der Schutz jeder Instanz gegen Netzwerkbedrohungen (Internet, interne Datenströme) liegt **vollständig in der Verantwortung des Kunden**. Eine Instanz, die ohne ausreichende Filterung oder mit schwachen Zugangsdaten mit dem Internet verbunden ist, setzt den Kunden Kompromittierungsrisiken aus, für die Cloud Temple nicht verantwortlich gemacht werden kann. +:::danger[Verantwortung für die Sicherheit des Kunden] +Cloud Temple gewährleistet ausschließlich die **Mandantentrennung** auf Plattformebene. Der Schutz jeder Instanz vor Netzwerkbedrohungen (Internet, interner Datenverkehr) liegt **ausschließlich in der Verantwortung des Kunden**. Eine mit dem Internet verbundene Instanz ohne angemessene Filterung oder mit schwachen Zugangsdaten setzt den Kunden Risiken einer Kompromittierung aus, für die Cloud Temple nicht haftbar gemacht werden kann. ::: -| Aktivität | Kunde | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------------|--------|--------------| -| **Mandantenübergreifende Netzwerkisolierung** auf Plattformebene sicherstellen | | **RA** | -| **Internet-exponierte Instanzen schützen** (Filterregeln, Sicherheitsgruppen, Firewalls) *(A)* | **RA** | | -| Sicherstellen, dass kein Dienst ohne **explizite Filterregel** im Internet exponiert wird | **RA** | | -| Eine **Application Firewall** (WAF, IDS/IPS) implementieren und pflegen, falls erforderlich | **RA** | | -| **Starke Passwörter und sichere SSH-Schlüssel** auf allen Instanzen konfigurieren *(B)* | **RA** | | -| Das **Prinzip der geringsten Berechtigung** bei OS-Konten und Remote-Zugriffen anwenden | **RA** | | -| Eine **Erkennungs- und Incident-Response-Lösung** (EDR, SIEM) implementieren, falls erforderlich | **RA** | | -| **Konfigurationshärtung** von Netzwerk und OS der Instanzen durchführen | **RA** | | -| Cloud Temple bei **Verdacht auf Kompromittierung** der gemeinsam genutzten Plattform benachrichtigen | **RA** | **C** | - -*(A) Jede Instanz, die ohne ausreichende Filterung über eine öffentliche IP oder NAT-Regel mit dem Internet verbunden ist, liegt ausschließlich in der Verantwortung des Kunden. Cloud Temple prüft oder filtert den eingehenden oder ausgehenden Datenverkehr des Mandanten nicht.* -*(B) Die Verwendung schwacher Passwörter, kompromittierter SSH-Schlüssel oder unbeschränkter Root-Zugänge verstößt gegen bewährte Sicherheitspraktiken. Cloud Temple kann nicht für eine Kompromittierung verantwortlich gemacht werden, die aus einer unzureichend gesicherten Zugriffskonfiguration des Kunden resultiert.* - ---- +| Aktivität | Kunde | Cloud Temple | +|-----------------------------------------------------------------------------------------------------------------------|--------|--------------| +| Gewährleistung der **Netzwerk-Mandantentrennung** auf Plattformebene | | **Cloud Temple** | +| **Schutz der über das Internet exponierten Instanzen** (Filterregeln, Security Groups, Firewall) *(A)* | **Kunde** | | +| Sicherstellen, dass keine Dienste ohne **explizite Filterregel** über das Internet exponiert sont | **Kunde** | | +| Einrichtung und Wartung eines **Application Firewalls (WAF)** (WAF, IDS/IPS) bei Bedarf je nach Kritizitätsstufe | **Kunde** | | +| Konfiguration **robuster Passwörter und sicherer SSH-Schlüssel** auf allen Instanzen *(B)* | **Kunde** | | +| Anwendung des **Prinzips der geringsten Rechte** auf OS-Konten und Remote-Zugänge (SSH, RDP) | **Kunde** | | +| Einrichtung einer Lösung zur **Ereigniserkennung und -reaktion** (EDR, SIEM) bei Bedarf | **Kunde** | | +| **Härtung der Konfiguration** von Instanzen (Netzwerk und OS) (Deaktivierung unnötiger Dienste) | **Kunde** | | +| Cloud Temple im Falle eines **Verdachts auf Kompromittierung** der gemeinsam genutzten Plattform benachrichtigen | **Kunde** | **C** | + +*(A) Jede über eine öffentliche IP oder eine NAT-Regel ohne angemessene Filterung mit dem Internet verbundene Instanz liegt in der alleinigen Verantwortung des Kunden. Cloud Temple führt keine Inspektion oder Filterung des ein- oder ausgehenden Datenverkehrs des Mandanten durch.* +*(B) Die Verwendung schwacher Passwörter, kompromittierter SSH-Schlüssel oder uneingeschränkter Root-Zugänge stellt einen Verstoß gegen die Sicherheitsbest Practices dar. Cloud Temple kann nicht für eine Kompromittierung verantwortlich gemacht werden, die auf eine vom Kunden unzureichend gesicherte Zugriffsconfigurationsresultiert.* ## Anwendungen & Middleware -| Aktivität | Kunde | Cloud Temple | -|--------------------------------------------------------------------------------------------------------|--------|--------------| -| **Anwendungen** und **Middleware** in Instanzen installieren, konfigurieren und pflegen | **RA** | | -| **Sicherheits-Patches** für Anwendungen und Middleware anwenden | **RA** | | -| **Software-Lizenzen** für gehostete Anwendungen erwerben und halten | **RA** | | -| Eine **Antiviren-Strategie** auf Instanzen implementieren | **RA** | | -| **Anwendungskontinuität** verwalten (Load Balancing, Replikation, Clustering) | **RA** | | +| Aktivität | Kunde | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|-------|--------------| +| Anwendungen und Middleware in Instanzen installieren, konfigurieren und warten | **RA** | | +| **Sicherheitsupdates** für Anwendungen und Middleware anwenden | **RA** | | +| **Softwarelizenzen** für gehostete Anwendungen erwerben und verwalten | **RA** | | +| Eine **Antivirenstrategie** auf den Instanzen implementieren | **RA** | | +| Die **Anwendungskontinuität** (Lastverteilung, Replikation, Clustering) verwalten | **RA** | | --- ## Netzwerk & Konnektivität -| Aktivität | Kunde | Cloud Temple | +| Aktivität | Kunde | Cloud Temple | |--------------------------------------------------------------------------------------------------------|--------|--------------| -| **Backbone-Netzwerk** und gemeinsam genutzte Netzwerkinfrastruktur aufrechterhalten | **I** | **RA** | -| **Netzwerkschnittstellen** der Instanzen konfigurieren | **RA** | | -| **IP-Adressierungsplan** innerhalb des Mandanten verwalten | **RA** | **I** | -| **Sicherheitsgruppen** (Filterregeln) konfigurieren und verwalten | **RA** | | -| **Internet-Zugang** abonnieren und konfigurieren (öffentliche IPs, NAT) | **RA** | | -| Vorfälle bei **Backbone**-Netzwerkverbindungen (Cloud Temple-Schicht) verwalten | **I** | **RA** | +| Sicherstellung des **Backbone-Netzwerks** und der gemeinsam genutzten Netzwerkinfrastruktur | **I** | **RA** | +| Konfiguration der **Netzwerkschnittstellen** der Instanzen | **RA** | | +| Verwaltung des **IP-Adressierungsplans** im Tenant | **RA** | **I** | +| Konfiguration und Verwaltung der **Sicherheitsgruppen** (security groups / règles de filtrage) *(6)* | **RA** | | +| Abschluss und Konfiguration des **Internetzugriffs** (IPs publiques, NAT) | **RA** | | +| Management von Störungen auf den **Backbone**-Netzwerkverbindungen (couche Cloud Temple) | **I** | **RA** | + +*(6) Die Konfiguration der für Instanzen geltenden Netzwerkfilterregeln liegt in der Verantwortung des Kunden. Cloud Temple gewährleistet ausschließlich die Mandantentrennung auf Plattformebene.* --- -## Instanz-Speicher +## Instanzspeicher -| Aktivität | Kunde | Cloud Temple | -|--------------------------------------------------------------------------------------------------------|--------|--------------| -| Gemeinsam genutzte **Speicherinfrastruktur** betriebsbereit halten | **I** | **RA** | -| Speicherinfrastruktur sicherheitstechnisch in Betrieb halten | **I** | **RA** | -| **Zusätzliche Speicher-Volumes** erstellen, anhängen und verwalten | **RA** | **I** | -| **Datenkonsistenz** in den Instanzen sicherstellen | **RA** | | -| Eine **Datenverschlüsselungsrichtlinie** innerhalb der Instanzen definieren und anwenden | **RA** | | +| Aktivität | Kunde | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|-------|--------------| +| Sicherstellung des Betriebs der **gemeinsam genutzten Speicherinfrastruktur** | **I** | **RA** | +| Sicherstellung der Sicherheit der Speicherinfrastruktur | **I** | **RA** | +| Erstellen, Anhängen und Verwalten von **zusätzlichen Speicher-Volumes** | **RA** | **I** | +| Sicherstellung der **Konsistenz der** in den Instanzen gespeicherten **Daten** | **RA** | | +| Definieren und Anwenden einer **Datenverschlüsselungsrichtlinie** innerhalb der Instanzen *(7)* | **RA** | | + +*(7) Die Verschlüsselung ruhender Daten der zugrunde liegenden Speicherinfrastruktur wird von Cloud Temple gewährleistet. Die anwendungsspezifische Verschlüsselung der Daten (auf Dateisystem- oder Datenbankebene) liegt in der Verantwortung des Kunden.* --- -## Backup & Snapshots +## Sicherung & Snapshots -| Aktivität | Kunde | Cloud Temple | -|--------------------------------------------------------------------------------------------------------|--------|--------------| -| **Backup-Infrastruktur** betriebsbereit halten | **I** | **RA** | -| **Backup-Richtlinie** für eine Instanz aktivieren und konfigurieren | **RA** | | -| **Point-in-Time-Snapshots** einer Instanz auslösen | **RA** | | -| **Konsistenz und Wiederherstellbarkeit** der durchgeführten Backups überprüfen | **RA** | | -| **Regelmäßige Wiederherstellungstests** durchführen | **RA** | | -| **Speicherkapazität** für Backups verwalten | | **RC** | -| **Kontinuitäts- oder Wiederherstellungsstrategie** für gehostete Anwendungen definieren | **RA** | | +| Aktivität | Kunde | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|-------|--------------| +| Sicherstellung des Betriebs der **Sicherungsinfrastruktur** | **I** | **RA** | +| **Aktivieren und Konfigurieren** der mit einer Instanz verknüpften Sicherungsrichtlinie | **RA** | | +| **Auslösen von einmaligen Snapshots** einer Instanz | **RA** | | +| Überprüfen der **Konsistenz und Wiederherstellbarkeit** der durchgeführten Sicherungen | **RA** | | +| Durchführen von **Wiederherstellungstests** in regelmäßigen Abständen | **RA** | | +| Verwalten der **Speicherkapazitäten** für Sicherungen | | **RC** | +| Festlegen der **Strategie für Kontinuität oder Wiederanlauf** für gehostete Anwendungen | **RA** | | --- -## Monitoring & Performance +## Monitoring & Leistung -| Aktivität | Kunde | Cloud Temple | +| Aktivität | Client | Cloud Temple | |--------------------------------------------------------------------------------------------------------|--------|--------------| -| Ordnungsgemäßes Funktionieren von **physischer Infrastruktur und Hypervisoren** überwachen | **I** | **RA** | -| Performance der **gemeinsam genutzten Ressourcen** überwachen (Compute, Storage, Netzwerk) | **I** | **RA** | -| **Instanz-Performance** überwachen (CPU, RAM, Disk I/O, Netzwerk auf Guest-Ebene) | **RA** | | -| Eine **Metriken- und Alarmlösung** für gehostete Anwendungen implementieren | **RA** | | +| Überwachung des einwandfreien Betriebs der **physischen Infrastruktur und der Hypervisor** | **I** | **RA** | +| Überwachung der **Leistung der gemeinsam genutzten Ressourcen** (Compute, Storage, Netzwerk) | **I** | **RA** | +| Überwachung der **Leistung der Instanzen** (CPU, RAM, Disk-I/O, Netzwerk auf Gast-Ebene) | **RA** | | +| Implementierung einer **Metriken- und Alarmierungslösung** für gehostete Anwendungen | **RA** | | --- ## Zugriffs- & Identitätsverwaltung -| Aktivität | Kunde | Cloud Temple | +| Aufgabe | Client | Cloud Temple | |--------------------------------------------------------------------------------------------------------|--------|--------------| -| Zugänglichkeit der **Cloud Temple Console** und API sicherstellen | | **RA** | -| **Berechtigungen** der Cloud Temple Teams zur qualifizierten SecNumCloud-Infrastruktur verwalten | | **RA** | -| Zugriff auf die **Cloud Temple Console** verwalten (Benutzer, Rollen, IAM) | **RA** | | -| Zugriff **innerhalb der Instanzen** verwalten (OS-Konten, SSH-Schlüssel, Bastion) | **RA** | | -| Ein **externes Authentifizierungsverzeichnis** (SSO, LDAP) für die Console konfigurieren | **RA** | **C** | +| Sicherstellung des Zugriffs auf die **Cloud Temple Konsole** und die API | | **RA** | +| Verwaltung der **Berechtigungen** der Cloud Temple-Teams für die SecNumCloud-zertifizierte Infrastruktur | | **RA** | +| Verwaltung der Zugriffsrechte auf die **Cloud Temple Konsole** (Benutzer, Rollen, IAM) | **RA** | | +| Verwaltung der Zugriffe **innerhalb der Instanzen** (OS-Konten, SSH-Schlüssel, Bastion) | **RA** | | +| Konfiguration einer **externen Authentifizierungsquelle** (SSO, LDAP) für die Konsole | **RA** | **C** | --- ## Protokolle (Logs) -| Aktivität | Kunde | Cloud Temple | -|--------------------------------------------------------------------------------------------------------|--------|--------------| -| **Plattformprotokolle** der VM-Instanzen aufbewahren und bereitstellen *(8)* | | **RA** | -| **System- und Anwendungsprotokolle** der Instanzen sammeln, aufbewahren und analysieren | **RA** | | +| Aktivität | Kunde | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|-------|--------------| +| **Plattformprotokolle** der VM-Instanzen speichern und bereitstellen *(8)* | | **RA** | +| **System- und Anwendungsprotokolle** der Instanzen sammeln, speichern und analysieren | **RA** | | -*(8) Die Aufbewahrungsdauer der Plattformprotokolle ist in der VM-Instanzen-Dienstvereinbarung festgelegt.* +*(8) Die Aufbewahrungsfrist für die Plattformprotokolle ist in der Servicevereinbarung für VM-Instanzen festgelegt.* --- ## Dokumentation & Vertragliches -| Aktivität | Kunde | Cloud Temple | +| Tätigkeit | Kunde | Cloud Temple | |--------------------------------------------------------------------------------------------------------|--------|--------------| -| Kaufmännisches und vertragliches Management sicherstellen (Angebote, Bestellungen, Abrechnung) | **I** | **RA** | -| Vertragliche Leistungserbringung überwachen (Lieferungen, Abrechnung) | **RA** | **I** | -| Technische Servicedokumentation pflegen und bereitstellen | **I** | **RA** | -| **CMDB** für im Mandanten bereitgestellte Instanzen aktuell halten | **RA** | | -| Zugriffsrichtlinie für Console und API aktuell halten | **RA** | | +| Übernahme des kommerziellen und vertraglichen Managements (Angebote, Bestellungen, Rechnungsstellung) | **I** | **RA** | +| Überwachung des Vertragsfortschritts der Dienstleistung (Lieferungen, Rechnungsstellung) | **RA** | **I** | +| Sicherstellung der Pflege und Verfügbarkeit der technischen Dokumentation des Dienstes | **I** | **RA** | +| Aktualisierung der **CMDB** für die in seinem Tenant bereitgestellten Instanzen | **RA** | | +| Aktualisierung der Zugriffsrichtlinie für die Konsole und die API | **RA** | | --- -## Reversibilität +## Rückübertragbarkeit -| Aktivität | Kunde | Cloud Temple | -|--------------------------------------------------------------------------------------------------------|--------|--------------| -| Reversibilitätsprojekt planen und Zielinfrastrukturen auswählen | **RA** | **I** | -| Daten und Instanz-Images über API oder bereitgestellte Tools exportieren | **RA** | **I** | -| Konfigurationen nach Vertragsbeendigung abbauen | **I** | **RA** | -| Sichere Datenlöschung auf Speichermedien durchführen und Bescheinigung ausstellen | **I** | **RA** | +| Aktivität | Kunde | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|-------|--------------| +| Das Rückübertragbarkeitsprojekt planen und die Ziel-Infrastrukturen festlegen | **RA** | **I** | +| Daten und Instanz-Images über die API oder die bereitgestellten Tools exportieren | **RA** | **I** | +| Rückbau der Konfigurationen nach Vertragsbeendigung durchführen | **I** | **RA** | +| Sichere Löschung der Daten auf den Speichermedien durchführen und eine Löschbescheinigung ausstellen | **I** | **RA** | --- -> *Professional Services stehen zur Verfügung, wenn Sie einige oder alle der als Kundenpflicht aufgeführten Verantwortlichkeiten an Cloud Temple delegieren möchten. Wenden Sie sich an Ihren Cloud Temple Account Manager.* +> *Professionelle Dienstleistungen stehen zur Verfügung, wenn Sie die als Kundenverantwortung aufgeführten Aufgaben ganz oder teilweise delegieren möchten. Wenden Sie sich an Ihren Cloud Temple-Vertriebspartner.* \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/contractual/vm-instances/sla_vm-instances.md b/i18n/de/docusaurus-plugin-content-docs/current/contractual/vm-instances/sla_vm-instances.md index 936f0bdc..68b9f50c 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/contractual/vm-instances/sla_vm-instances.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/contractual/vm-instances/sla_vm-instances.md @@ -1,81 +1,90 @@ --- -title: SLA VM-Instanzen +title: SLA-VM-Instanzen slug: /contractual/vm-instances/sla +displayed_sidebar: docSidebar --- # Service Level Agreement (SLA) – VM-Instanzen | | | | :--- | :--- | -| **Letzte Aktualisierung** | 15. April 2026 | +| **Letztes Änderungsdatum** | 15. April 2026 | -Dieses Dokument definiert die Service Level Commitments (SLA), die für das Produkt **VM-Instanzen** von **Cloud Temple** gelten. Es ergänzt die Allgemeinen Geschäftsbedingungen von Cloud Temple und bildet mit diesen eine untrennbare Einheit. +Dieses Dokument definiert die Service Level Agreements (SLAs), die für das Produkt **VM-Instanzen** gelten, das von **Cloud Temple** (nachfolgend „der Anbieter“ oder „Cloud Temple“ genannt) bereitgestellt wird. Es ergänzt die Allgemeinen Verkaufs- und Servicebedingungen von Cloud Temple und bildet mit diesen eine untrennbare Einheit. --- ## 1. Definitionen -- **Monatliche Verfügbarkeitsrate**: Der garantierte Betriebszeit-Prozentsatz für eine VM-Instanz während eines Kalendermonats. -- **VM-Instanz**: Der auf Anfrage des Kunden auf der Cloud-Infrastruktur von Cloud Temple bereitgestellte virtuelle private Server, der auf leistungsstarken gemeinsam genutzten Compute- und Speicherressourcen basiert. -- **Nichtverfügbarkeitszeitraum**: Vollständiger Verlust des Zugangs und der externen Konnektivität zur VM-Instanz, ausschließlich auf der Ebene der zugrunde liegenden Cloud Temple-Infrastruktur gemessen. -- **Nichtverfügbarkeitsdauer**: Ununterbrochene Zeit, während der der Nichtverfügbarkeitszeitraum festgestellt wird. Um im Rahmen dieses SLA angerechnet zu werden, muss eine Nichtverfügbarkeitsdauer mindestens **vier (4) aufeinanderfolgende Minuten** betragen. +Im Rahmen dieses SLA haben die folgenden Begriffe mit Großschreibung die nachstehende Bedeutung: + +- **Monatlicher Verfügbarkeitsgrad** : Der garantierte Prozentsatz der Betriebszeit für eine VM-Instanz während eines Kalendermonats. +- **VM-Instanz** : Der vom Kunden bei Bedarf bereitgestellte virtuelle private Server auf der Cloud-Infrastruktur von Cloud Temple, die auf hochleistungsfähigen, gemeinsam genutzten Rechen- und Speicherressourcen basiert. +- **Ausfallzeit** : Totaler Verlust des Zugriffs und der externen Konnektivität zur VM-Instanz, gemessen ausschließlich auf Ebene der zugrunde liegenden Infrastruktur von Cloud Temple (Instanzstatus, der vom Cloud Temple Hypervisor als inaktiv, gestoppt oder fehlerhaft gemeldet wird). +- **Ausfalldauer** : Ununterbrochene Zeit, in der die Ausfallzeit festgestellt wird. Um für dieses SLA angerechnet zu werden, muss eine Ausfalldauer mindestens **vier (4) aufeinanderfolgende Minuten** betragen. --- -## 2. Service Level Commitments (SLA) +## 2. Service Level Agreements (SLA) -Cloud Temple verpflichtet sich, eine monatliche Verfügbarkeitsrate von **99,95 %** für jede aktive, dem Kunden berechnete VM-Instanz sicherzustellen. +Cloud Temple verpflichtet sich, eine monatliche Verfügbarkeit von **99,95 %** für jede dem Kunden in Rechnung gestellte aktive VM-Instanz sicherzustellen. -Diese Rate entspricht maximal **21,9 Minuten** autorisierter Nichtverfügbarkeitsdauer pro Kalendermonat. Bei Nichteinhaltung kann der Kunde Service Credits gemäß Artikel 5 beanspruchen. +Dieser Wert entspricht maximal **21,9 Minuten** zulässiger Ausfallzeit pro Kalendermonat. Bei Nichteinhaltung dieser Verpflichtung kann der Kunde Serviceguthaben gemäß den in Artikel 5 festgelegten Bedingungen geltend machen. --- ## 3. Messung und Umfang der Verfügbarkeit -Die Überwachung und Berechnung der monatlichen Verfügbarkeitsrate erfolgt **ausschließlich durch die Infrastruktur-Monitoring-Tools von Cloud Temple**. +Die Überwachung und Berechnung der monatlichen Verfügbarkeitsrate erfolgt **ausschließlich durch die Monitoring-Tools der Cloud-Temple-Infrastruktur**, die den Status der Instanz auf der Virtualisierungsschicht abfragen. -**Verantwortungsbereich:** -Dieses SLA deckt nur den Betrieb der Compute-Ressourcen (CPU, RAM) ab, die auf der Hardware-Infrastruktur von Cloud Temple zugewiesen sind. +**Verantwortungsbereich :** +Dieses SLA deckt ausschließlich den Betrieb der auf der Cloud-Temple-Hardwareinfrastruktur bereitgestellten Compute-Ressourcen (Compute: CPU, RAM) ab. :::info -Netzwerkkonnektivität (VPC, Routing) oder persistenter Speicher sind Gegenstand separater SLA-Dokumente. +Die Netzwerkverbindung (VPC, Routing) oder der persistente Speicher sind Gegenstand separater SLA-Dokumente und werden durch diese Verpflichtung nicht abgedeckt. ::: -**Ausschlussprinzip des UP-Status:** -Sobald die VM-Instanz von der Cloud Temple-Plattform als „UP" oder „RUNNING" erkannt wird, gilt die SLA-Verpflichtung als erfüllt. +**Ausschlussprinzip bei UP-Status :** +Sobald die VM-Instanz von der Cloud-Temple-Plattform als „UP“ oder „RUNNING“ eingestuft wird, gilt die SLA-Verpflichtung als erfüllt, unabhängig von der Erreichbarkeit der Anwendungsschicht des Kunden. --- -## 4. Ausschlüsse von der Garantie +## 4. Garantieausschlüsse + +Dieses SLA stellt keine Zusicherung zur Verfügbarkeit von Elementen dar, die unter der ausschließlichen Kontrolle des Kunden stehen. Daher gelten Unterbrechungen, Zugangsverluste oder Ausfälle, die aus folgenden Gründen resultieren, **nicht** als Ausfallzeiten: -1. **Betriebssystem- oder Software-Ausfälle**: Absturz des Gast-Betriebssystems, CPU- oder RAM-Überlastung durch Kundenprozesse, interne Dateisystemkorruption. +1. **Ausfälle des Betriebssystems (OS) oder softwarebedingte Ausfälle**: Absturz des Gast-OS (z. B. *Kernel Panic*, *Blue Screen of Death*), Überlastung der CPU oder des RAM durch Prozesse des Kunden oder Beschädigung des internen Dateisystems. -2. **Kundenkonfigurationen**: Netzwerk- oder lokale Firewall-Regeln, die Zugriffe blockieren, Netzwerkkonfigurationsfehler innerhalb des Betriebssystems. +2. **Kundenkonfigurationen**: Netzwerk- oder lokale Firewall-Regeln (iptables, firewalld), die Zugriffe blockieren, sowie Netzwerk-Konfigurationsfehler innerhalb des OS über Cloud-init oder nach der Bereitstellung. -3. **Anwendungsausfälle**: Abschaltung oder Absturz eines auf der VM-Instanz gehosteten Dienstes. +3. **Anwendungsausfälle**: Stilllegung oder Absturz eines auf der VM-Instanz gehosteten Dienstes (Webserver, Datenbank, Container usw.). -4. **Geplante Wartungen**: Hardware- oder Software-Eingriffe mit vorheriger Benachrichtigung. +4. **Geplante Wartung**: Hardware- oder Softwareeingriffe auf der physischen Infrastruktur von Cloud Temple, die im Rahmen der in Ihrem Supportvertrag vorgesehenen Wartungsfenster vorher angekündigt wurden. -5. **Abwesenheit oder Deaktivierung der VM-Tools**: Die von Cloud Temple auf jeder Instanz vorinstallierten Hypervisor-Management-Agenten (*Tools*) sind für die Messung und Garantie der Verfügbarkeit unerlässlich. Wenn diese Tools vom Kunden deaktiviert, entfernt oder nicht funktionsfähig gemacht wurden, kann Cloud Temple die Instanz nicht mehr überwachen und einen Nichtverfügbarkeitszeitraum nicht objektiv feststellen. Das SLA wird **sofort ausgesetzt**, solange die Tools fehlen oder nicht betriebsbereit sind. Das Vorhandensein und die ordnungsgemäße Funktion der Tools liegen während der gesamten Lebensdauer der Instanz in der ausschließlichen Verantwortung des Kunden. +5. **Fehlen oder Deaktivierung der VM-Tools**: Die von Cloud Temple auf jeder Instanz vorinstallierten Hypervisor-Verwaltungsagenten (*tools*) sind unerlässlich für die Messung und Gewährleistung der Verfügbarkeit. Wenn diese Tools vom Kunden deaktiviert, gelöscht oder funktionsunfähig gemacht wurden, ist Cloud Temple nicht mehr in der Lage, die Überwachung der Instanz durchzuführen oder eine Ausfallzeit objektiv festzustellen. Das SLA wird **sofort ausgesetzt** für die Dauer, in der die Tools fehlen oder nicht betriebsbereit sind. Das Vorhandensein und die einwandfreie Funktion der Tools liegen während der gesamten Lebensdauer der Instanz in der alleinigen Verantwortung des Kunden. -6. **Missbräuchliches Verhalten oder Verstoß**: Aussetzung der VM-Instanz durch Cloud Temple aufgrund eines Verstoßes gegen die AGB. +6. **Missbräuchliches Verhalten oder Verstöße**: Sperrung der VM-Instanz durch Cloud Temple infolge eines Verstoßes gegen die Allgemeinen Geschäftsbedingungen oder Sicherheitsanforderungen (z. B. Kompromittierung, Nichteinhaltung der Regeln des Cloud Temple Marketplace). -7. **Höhere Gewalt**: Ereignisse außerhalb des vernünftigen Einflussbereichs von Cloud Temple. +7. **Höhere Gewalt**: Ereignisse, die außerhalb der zumutbaren Kontrolle von Cloud Temple liegen. --- -## 5. Service Credits und Strafen +## 5. Serviceguthaben und Pönalen + +Wird die monatliche Verfügbarkeitsrate von 99,95 % für eine bestimmte VM-Instanz nicht erreicht, hat der Kunde Anspruch auf eine Entschädigung in Form eines Serviceguthabens. + +Das Serviceguthaben wird als Prozentsatz des monatlich in Rechnung gestellten Betrags für die betroffene VM-Instanz berechnet: -| Festgestellte monatliche Verfügbarkeitsrate | Service Credit | +| Festgestellte monatliche Verfügbarkeitsrate | Serviceguthaben | | :--- | :---: | | Zwischen 99,00 % und 99,94 % | 10 % | | Zwischen 95,00 % und 98,99 % | 25 % | | Unter 95,00 % | 100 % | -### 5.1 Reklamationsverfahren +### 5.1 Verfahren zur Geltendmachung -Der Kunde muss eine begründete Anfrage über ein Support-Ticket bei Cloud Temple innerhalb von **dreißig (30) Kalendertagen** nach dem betreffenden Monat einreichen. +Um eine Service-Gutschrift zu erhalten, muss der Kunde diese begründet beantragen, indem er ein Ticket beim Cloud Temple Support erstellt. Der Antrag muss innerhalb von **dreißig (30) Kalendertagen** nach dem Monat, in dem der Vorfall eingetreten ist, gestellt werden. -Die Anfrage muss enthalten: -- Die UUID der betroffenen VM-Instanz -- Die genauen Zeitstempel des beobachteten Nichtverfügbarkeitszeitraums +Der Antrag muss folgende Angaben enthalten: +- Die Kennung (UUID) der betroffenen VM-Instanz +- Die genauen Zeitstempel der festgestellten Ausfallzeit \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/databases_overview.md b/i18n/de/docusaurus-plugin-content-docs/current/databases_overview.md index cd373c0a..e2e74115 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/databases_overview.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/databases_overview.md @@ -1,21 +1,21 @@ --- -title: Databases +title: Datenbanken displayed_sidebar: docSidebar --- -# Databases +# Datenbanken -Die verwalteten Datenbanken von Cloud Temple entlasten Sie vom operativen Management (Backups, Updates, Hochverfügbarkeit) und werden gleichzeitig auf einer SecNumCloud-qualifizierten souveränen Infrastruktur gehostet. +Die verwalteten Datenbanken von Cloud Temple entlasten Sie vom Betriebsmanagement (Backups, Updates, Hochverfügbarkeit), bleiben dabei jedoch auf einer von SecNumCloud qualifizierten souveränen Infrastruktur gehostet.
-

Managed MariaDB Preview

-

MariaDB-Engine auf Kubernetes mit automatischen Backups, Multi-AZ-Hochverfügbarkeit und Verschlüsselung at-rest.

- Managed MariaDB entdecken → +

Verwaltetes MariaDB Preview

+

MariaDB-Engine auf Kubernetes mit automatischen Backups, Multi-AZ-Hochverfügbarkeit und at-rest-Verschlüsselung.

+ Verwaltetes MariaDB entdecken →
-

Managed PostgreSQL Preview

-

PostgreSQL-Engine auf Kubernetes mit Point-in-Time Recovery, logischer Sicherung und StandAlone- oder Distributed-Bereitstellung.

- Managed PostgreSQL entdecken → +

Verwaltetes PostgreSQL Preview

+

PostgreSQL-Engine auf Kubernetes mit Point-in-Time Recovery, logischem Backup und StandAlone- oder Distributed-Bereitstellung.

+ Verwaltetes PostgreSQL entdecken →
-
+ \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/faq.md b/i18n/de/docusaurus-plugin-content-docs/current/faq.md index e26fe5d6..64a6f08a 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/faq.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/faq.md @@ -1,12 +1,12 @@ --- -title: FAQs +title: Häufig gestellte Fragen sidebar_position: 1 hide_table_of_contents: true --- # Häufig gestellte Fragen -Unten finden Sie die häufig gestellten Fragen zu Cloud Temple-Produkten und -Diensten. +Nachfolgend finden Sie die häufig gestellten Fragen zu den Produkten und Diensten von Cloud Temple. --- @@ -19,7 +19,7 @@ Unten finden Sie die häufig gestellten Fragen zu Cloud Temple-Produkten und -Di
LLMaaS — Large Language Models
Fragen zur Nutzung von Sprachmodellen, API-Formaten, Lizenzen und Anwendungsfällen.
-
FAQ anzeigen →
+
FAQ aufrufen →
@@ -33,15 +33,15 @@ Unten finden Sie die häufig gestellten Fragen zu Cloud Temple-Produkten und -Di
-
Object Storage
+
Objektspeicher
Fragen zur Verwaltung von Buckets, Zugriffsrechten, kompatiblen Protokollen und Service-Limits.
-
FAQ anzeigen →
+
Zur FAQ →
-::::tip[Antwort nicht gefunden?] +::::tip[Vous ne trouvez pas votre réponse ?] -Lesen Sie die [Produktdokumentation](/home) oder kontaktieren Sie den Cloud Temple Support über die [Konsole](https://console.cloud-temple.com). +Les Sie die [documentation produit](/home) ou kontaktieren Sie den Cloud Temple Support über die [console](https://console.cloud-temple.com). -:::: +:::: \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/home.md b/i18n/de/docusaurus-plugin-content-docs/current/home.md index a310113c..125ec475 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/home.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/home.md @@ -1,6 +1,7 @@ --- tags: - home + - accueil - onboarding displayed_sidebar: docSidebar hide_table_of_contents: true @@ -9,7 +10,7 @@ hide_table_of_contents: true

Cloud Temple Dokumentation

-

Alles, was Sie benötigen, um die souveränen Cloud-Dienste von Cloud Temple zu nutzen.

+

Alles, was Sie für den Betrieb der souveränen Cloud-Dienste von Cloud Temple benötigen.

@@ -59,27 +60,27 @@ hide_table_of_contents: true +
\ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/housing/housing.md b/i18n/de/docusaurus-plugin-content-docs/current/housing/housing.md index bbf8aa78..b58bfd9e 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/housing/housing.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/housing/housing.md @@ -2,16 +2,16 @@ title: Übersicht --- -# Cloud Temple Housing +# Housing Cloud Temple -**Cloud Temple Housing** bietet eine physische Hosting-Lösung für Ihre IT-Infrastrukturen in zuverlässigen und sicheren Verfügbarkeitszonen. Diese Lösung wurde entwickelt, um den Anforderungen von Unternehmen gerecht zu werden und ermöglicht es Ihnen, Ihre Geräte in gemeinsam genutzten oder dedizierten Racks zu hosten, während gleichzeitig eine leistungsstarke Netzwerkkonnektivität und professionelle Datacenter-Unterstützungsdienste gewährleistet werden. +Das **Housing Cloud Temple** bietet eine Lösung für das physische Hosting Ihrer IT-Infrastrukturen in zuverlässigen und sicheren Verfügbarkeitszonen. Entwickelt, um den Anforderungen von Unternehmen gerecht zu werden, ermöglicht dieses Produkt das Unterbringen Ihrer Geräte in gemeinsam genutzten oder dedizierten Racks und gewährleistet gleichzeitig eine leistungsstarke Netzwerkverbindung sowie professionelle Datacenter-Supportdienste. -Mit flexiblen Optionen und einem hohen Maß an Sicherheit garantiert Cloud Temple Housing die Kontinuität und Zuverlässigkeit Ihrer Betriebsabläufe, sei es beim Hosting von Appliances, Servern oder bei der Nutzung ergänzender Dienste zur Optimierung Ihrer Infrastruktur. +Mit flexiblen Optionen und einem hohen Sicherheitsniveau garantiert Housing Cloud Temple die Kontinuität und Zuverlässigkeit Ihrer Abläufe, sei es beim Hosting von Appliances und Servern oder bei der Inanspruchnahme ergänzender Dienstleistungen zur Optimierung Ihrer Infrastruktur.

Konzepte

-

Entdecken Sie die grundlegenden Prinzipien, um unsere Infrastruktur zu verstehen und zu beherrschen.

+

Entdecken Sie die Grundlagen und wesentlichen Prinzipien, um unsere Infrastruktur zu verstehen und zu beherrschen.

Konzepte erkunden →
@@ -21,7 +21,7 @@ Mit flexiblen Optionen und einem hohen Maß an Sicherheit garantiert Cloud Templ

Tutorials

-

Lernen Sie Schritt für Schritt, wie Sie unsere Dienste mit detaillierten Anleitungen konfigurieren und nutzen können.

+

Lernen Sie schrittweise die Konfiguration und Nutzung unserer Dienste anhand detaillierter Anleitungen.

Tutorials entdecken →
-
+
\ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/housing/quickstart.md b/i18n/de/docusaurus-plugin-content-docs/current/housing/quickstart.md index bba8320c..5bf03a0c 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/housing/quickstart.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/housing/quickstart.md @@ -3,39 +3,39 @@ title: Schnellstartanleitung --- -Diese **Housing Schnellstartanleitung** hilft Ihnen, schnell mit dem physischen Hosting-Angebot von Cloud Temple zu beginnen. Sie umfasst die wesentlichen Schritte zur Beantragung eines Hostings, zur Konfiguration Ihrer Geräte und zur Nutzung ergänzender Dienste. +Dieser **Quickstart Housing** Leitfaden unterstützt Sie bei der schnellen Inbetriebnahme des physischen Hosting-Produkts Cloud Temple. Er behandelt die wesentlichen Schritte zum Beantragen eines Hosting-Platzes, zur Konfiguration Ihrer Hardware und zur Inanspruchnahme zusätzlicher Dienstleistungen. -## Schritt 1: Hosting-Anfrage stellen +## Schritt 1: Hosting-Anfrage einreichen -1. Greifen Sie auf die Cloud Temple-Konsole zu. -2. Eröffnen Sie ein Service-Ticket mit folgenden Angaben: +1. Rufen Sie die Cloud Temple-Konsole auf. +2. Öffnen Sie einen Service-Ordner, indem Sie folgende Angaben machen: - Name Ihrer Organisation. - - Kontaktdaten (E-Mail und Telefon). - - Gewünschter Hosting-Typ (gemeinsam genutzt nach 'U' oder dediziert nach Rack). - - Menge und Eigenschaften der Geräte (Größe, Gewicht, Stromverbrauch usw.). + - Kontaktdaten einer Kontaktperson (E-Mail und Telefonnummer). + - Gewünschter Hosting-Typ (gemeinsam genutzte 'U'-Einheiten oder dediziertes Rack). + - Menge und Spezifikationen der Hardware (Abmessungen, Gewicht, Stromverbrauch usw.). -## Schritt 2: Ihre Geräte vorbereiten +## Schritt 2: Vorbereiten Ihrer Geräte -- Überprüfen Sie, ob Ihre Geräte die technischen Anforderungen erfüllen: +- Stellen Sie sicher, dass Ihre Geräte die technischen Anforderungen erfüllen: - Größe in Rack-Einheiten (U). - - Maximales Gewicht pro 'U' (25kg für gemeinsam genutzt, bis zu 1000kg für ein dediziertes Rack). - - Stromverbrauch (150W bis 3kW je nach abonnierter Option). + - Maximales Gewicht pro 'U' (25 kg für gemeinsam genutzt, bis zu 1000 kg für ein dediziertes Rack). + - Stromverbrauch (150 W bis 3 kW je nach gebuchter Option). -## Schritt 3: Netzwerkkonnektivität konfigurieren +## Schritt 3: Netzwerkverbindung konfigurieren -1. Wählen Sie den benötigten Port-Typ: +1. Wählen Sie den erforderlichen Porttyp aus: - Kupfer 1Gbps. - Glasfaser 1Gbps oder 10Gbps. -2. Fügen Sie bei Bedarf Meet-Me-Room-Konnektivitätsoptionen für die Betreiberintegration hinzu. +2. Fügen Sie bei Bedarf Optionen für die Meet-Me-Room-Verbindung hinzu, um die Operator-Integration zu ermöglichen. -## Schritt 4: Hands & Eyes-Dienste aktivieren +## Schritt 4: Aktivieren der Hands & Eyes-Dienste -Bei Bedarf können Sie technische Unterstützung anfordern für: +Bei Bedarf bitten Sie um technische Unterstützung für: - Installation Ihrer Geräte. - Konfiguration der Verkabelung. -- Durchführung spezifischer Aktionen (Neustart, Fotos usw.). +- Durchführung einzelner Aktionen (redémarrage, photos, etc.). -## Schritt 5: Installation validieren +## Schritt 5: Installation überprüfen -Sobald Ihre Geräte installiert sind, überprüfen Sie deren Konnektivität und ordnungsgemäße Funktion direkt über die Cloud Temple-Konsole oder in Abstimmung mit dem Support. +Sobald Ihre Geräte installiert sind, überprüfen Sie die Konnektivität und den einwandfreien Betrieb direkt über die Cloud Temple-Konsole oder in Abstimmung mit dem Support. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/housing/tutorials.md b/i18n/de/docusaurus-plugin-content-docs/current/housing/tutorials.md index 72074564..472bfd3f 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/housing/tutorials.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/housing/tutorials.md @@ -1,11 +1,13 @@ + + --- title: Tutorials --- -These tutorials help you deploy and manage a Cloud Temple Bastion from the Console portal. +Diese Tutorials unterstützen Sie bei der Bereitstellung und Verwaltung eines Bastion Cloud Temple über das Console-Portal.

Tutorials

-

No tutorials are currently available, but we are working on them actively. Please check back soon for more information!

- Go to the Home Page → -
+

Für den Moment sind keine Tutorials verfügbar, aber wir arbeiten aktiv daran. Schauen Sie bald wieder vorbei, um mehr zu erfahren!

+ Zur Startseite → + \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/iaas_bare-metal/concepts.md b/i18n/de/docusaurus-plugin-content-docs/current/iaas_bare-metal/concepts.md index 6e4b59c6..ee43cb18 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/iaas_bare-metal/concepts.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/iaas_bare-metal/concepts.md @@ -1,120 +1,135 @@ --- -title: Concepts +title: Konzepte --- -The **Bare Metal** offering from Cloud Temple provides dedicated physical servers coupled with a distributed block storage solution. -This solution offers full customization for customers who wish to manage their own software environments, whether installing a Linux or Windows system, or a hypervisor. -## A flexible and robust hardware infrastructure +Das **Bare Metal**-Angebot von Cloud Temple bietet dedizierte physische Server in Kombination mit einem verteilten Block-Speicher. +Diese Lösung bietet vollständige Anpassungsmöglichkeiten für Kunden, die ihre eigenen Softwareumgebungen verwalten möchten, sei es zur Installation eines Linux- oder Windows-Betriebssystems oder eines Hypervisors. -The Bare Metal offering is based on an architecture designed to meet the requirements of critical workloads. +--- + +## Eine physische und flexible Infrastruktur + +Das Bare-Metal-Angebot basiert auf einer Architektur, die für die Anforderungen kritischer Workloads konzipiert ist. ### Hauptkomponenten -- **Cisco UCS-Server**: Leistungsstark und zuverlässig, bilden diese Compute-Lanes die Grundlage des Angebots. -- **IBM Spectrum Virtualize-Speicher**: Ein verteiltes Blockspeichersystem, das Resilienz und hohe Leistung bietet. +- **Cisco UCS-Server** : Leistungsstark und zuverlässig bilden diese Compute-Blades die Grundlage des Angebots. +- **IBM Spectrum Virtualize Storage** : Ein verteilter Block-Speicher, der hohe Resilienz und Leistung bietet. -### Architecture +### Architektur -The distributed storage model provides a separation between computing (Bare Metal servers) and storage (distributed block), enabling: +Das verteilte Speichermodell bietet eine Trennung zwischen Compute (Bare-Metal-Servern) und Storage (verteilter Blockspeicher), was Folgendes ermöglicht: + +- Flexibilität zum Zuordnen von Storage-Volumes auf mehrere Bare-Metal-Server je nach Bedarf. +- Optimale Anpassung der Compute- und Storage-Konfigurationen. +- Erhöhte Resilienz durch den Einsatz von **Distributed RAID 6**. + +--- -- Flexibility to map storage volumes across multiple Bare Metal servers according to requirements. -- Optimal customization of computing and storage configurations. -- Enhanced resilience through the use of **Distributed RAID 6**. +## Regionen und Verfügbarkeitszonen -## Regions and Availability Zones +Das Produkt Bare Metal wird in einer Verfügbarkeitszone bereitgestellt. +Eine [Verfügbarkeitszone](../additional_content/concepts_az.md) ist Teil einer [Region](../additional_content/concepts_regional.md). -The Bare Metal product is deployed within an availability zone. -An [availability zone](../additional_content/concepts_az.md) is part of a [region](../additional_content/concepts_regional.md). +Diese Bereitstellungsart ermöglicht die Auswahl des Standorts der Bare-Metal-Server und deren Verteilung auf verschiedene Verfügbarkeitszonen (AZ). +Dies bietet eine bessere Lastverteilung, maximiert die Redundanz und erleichtert die Einrichtung eines Disaster-Recovery-Plans (DRP) im Störungsfall. -This deployment model allows you to select the location of your Bare Metal servers and distribute them across different availability zones (AZs). -This provides better load distribution, maximizes redundancy, and simplifies the implementation of a disaster recovery plan (DRP) in the event of an incident. +--- -## Compute Blade Classes +## Compute-Blade-Klassen -The available compute blades for the Bare Metal offering provide a range of performance options to meet diverse requirements: +Die für das Bare-Metal-Angebot verfügbaren Rechenklingen bieten ein Leistungsspektrum, das auf verschiedene Anforderungen zugeschnitten ist: -| Reference | RAM **(1)** | Frequency **(2)** | Number of Cores / Threads | Connectivity **(3)** | GPU **(4)** | +| Referenz | RAM **(1)** | Taktfrequenz **(2)** | Anzahl der Kerne / Threads | Konnektivität **(3)** | GPU **(4)** | |-----------------------|--------------|-------------------------------------------|---------------------------|----------------------|----------------------| -| **ECO** | 384 GB | 2.20/3.0 GHz (Silver 4114 or equivalent) | 20 / 40 threads | 2 × 10 Gbit/s | - | -| **STANDARD** | 384 GB | 2.40/3.4 GHz (Silver 4314 or equivalent) | 32 / 64 threads | 2 × 25 Gbit/s | - | -| **ADVANCE** | 768 GB | 2.80/3.5 GHz (Gold 6342 or equivalent) | 48 / 96 threads | 2 × 25 Gbit/s | - | -| **PERFORMANCE 1** | 384 GB | 3.20/3.6 GHz (Xeon E-53I5Y or equivalent) | 16 / 32 threads | 2 × 25 Gbit/s | - | -| **PERFORMANCE 2** | 768 GB | 3.00/3.6 GHz (Gold 6354 or equivalent) | 36 / 72 threads | 2 × 25 Gbit/s | - | -| **PERFORMANCE 3** | 1536 GB | 2.60/3.5 GHz (Gold 6348 or equivalent) | 56 / 112 threads | 2 × 25 Gbit/s | - | -| **PERFORMANCE 4** | 512 GB | 2.50/4.1 GHz (Intel 6426Y or equivalent) | 32 / 64 threads | 2 × 25 Gbit/s | 2 × NVIDIA L40S 48GB | +| **ECO** | 384 Go | 2.20/3.0 GHz (Silver 4114 ou équivalent) | 20 / 40 threads | 2 X 10 Gbit/s | - | +| **STANDARD** | 384 Go | 2.40/3.4 GHz (Silver 4314 ou équivalent) | 32 / 64 threads | 2 X 25 Gbit/s | - | +| **ADVANCE** | 768 Go | 2.80/3.5 GHz (Gold 6342 ou équivalent) | 48 / 96 threads | 2 X 25 Gbit/s | - | +| **PERFORMANCE 1** | 384 Go | 3.20/3.6 GHz (Xeon E-53I5Y ou équivalent) | 16 / 32 threads | 2 X 25 Gbit/s | - | +| **PERFORMANCE 2** | 768 Go | 3.00/3.6 GHz (Gold 6354 ou équivalent) | 36 / 72 threads | 2 X 25 Gbit/s | - | +| **PERFORMANCE 3** | 1536 Go | 2.60/3.5 GHz (Gold 6348 ou équivalent) | 56 / 112 threads | 2 X 25 Gbit/s | - | +| **PERFORMANCE 4** | 512 Go | 2.50/4.1 GHz (Intel 6426Y ou équivalent) | 32 / 64 threads | 2 X 25 Gbit/s | 2 x NVIDIA L40S 48Go | + +### Hinweise -### Notes +- **(1)** Die Speichermenge entspricht der physisch auf den Blades verfügbaren Kapazität und kann nicht geändert werden. +- **(2)** Die angegebenen Frequenzen entsprechen der minimalen Basistaktung und der Turbo-Taktfrequenz. +- **(3)** Die physische Konnektivität wird für den Netzwerk- und Blockspeicherzugriff gemeinsam genutzt, ermöglicht durch eine konvergierte Cisco UCS-Architektur. +- **(4)** Die verfügbaren GPUs richten sich nach dem neuesten Technologiefortschritt. Stand 1. Mai 2024 umfasst das Produkt NVIDIA LOVELACE L40S-GPUs. -- **(1)** The amount of memory is the physically available memory on the blades and cannot be modified. -- **(2)** The frequencies listed correspond to the minimum base frequency and the turbo frequency. -- **(3)** Physical connectivity is shared for network access and block storage access, thanks to a converged Cisco UCS architecture. -- **(4)** Available GPUs evolve with the latest technologies. As of May 1, 2024, the offering includes NVIDIA LOVELACE L40S GPUs. +Die Verfügbarkeit der Infrastruktur ist mit 99.9% garantiert, monatlich gemessen, inklusive Wartungsfenster. Alle SLA-bezogenen Anfragen müssen über ein Incident-Ticket gemeldet werden. -Infrastructure availability is guaranteed at 99.9%, measured monthly, including maintenance windows. Any SLA-related request must be reported via an incident ticket. +--- -## Block Storage Classes +## Block-Speicherklassen -Distributed block storage, based on **IBM Spectrum Virtualize**, offers a range of performance tiers suited for various use cases: +Der verteilte Block-Speicher, basierend auf **IBM Spectrum Virtualize**, bietet eine Palette von Leistungswerten, die auf verschiedene Anwendungsfälle zugeschnitten sind: -| Reference | IOPS/To | Primary Use Case | -|-----------------------------------|-------------------------|----------------------------------------| -| **FLASH - Essential** | 500 | Light workloads | -| FLASH - Standard - 1500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:medium:v1 | -| FLASH - Premium - 3000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:premium:v1 | -| FLASH - Enterprise - 7500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:enterprise:v1 | -| FLASH - Ultra - 15000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:ultra:v1 | -| **MASS STORAGE - Archival** | Not applicable | Cost-effective storage for archiving | +| Referenz | IOPS/To | Max. IOPS / Volume | Max. Durchsatz / Volume | Hauptanwendung | +|-----------------------------------|----------------|---------------------------|-----------------------------|----------------------------------------| +| **FLASH - Essential** | 500 | 10 000 IOPS | 512 Mo/s | Leichte Workloads | +| **FLASH - Standard** | 1500 | 30 000 IOPS | 1024 Mo/s | Standard-Workloads | +| **FLASH - Premium** | 3000 | 30 000 IOPS | 1024 Mo/s | Intensive Workloads | +| **FLASH - Enterprise** | 7500 | 30 000 IOPS | 1024 Mo/s | Kritische Workloads | +| **FLASH - Ultra** | 15000 | 30 000 IOPS | 1024 Mo/s | Ultra-intensive Workloads | +| **MASS STORAGE - Archivierung** | Nicht zutreffend | Nicht garantiert | Nicht garantiert | Kostengünstiger Speicher für die Archivierung | -### Features +### Merkmale -- **Technology**: Flash NVMe with **Distributed RAID 6** for enhanced resilience. -- **Availability**: 99.99%, measured monthly. -- **Restrictions**: No limits on reads or writes. No automatic compression or deduplication, ensuring full utilization of allocated volumes. +- **Performance** : Die effektive Leistung steigt linear mit dem zugewiesenen Volumen (selon le ratio IOPS/To), **bis zur oben definierten absoluten Hardware-Obergrenze**. (Par exemple, un volume de 10 To en classe Ultra sera physiquement limité à 30 000 IOPS et 1024 Mo/s). +- **Technologie** : NVMe-Flash mit **Distributed RAID 6** für eine erhöhte Resilienz. +- **Verfügbarkeit** : 99,99 %, monatlich gemessen. +- **Einschränkungen** : Keine Begrenzung für Lese- oder Schreibvorgänge. Keine automatische Komprimierung oder Deduplizierung, um die vollständige Auslastung der reservierten Volumes zu gewährleisten. -### Storage Block Security and Encryption +### Sicherheit und Verschlüsselung des Blockspeichers -To ensure the confidentiality of your data at rest, our entire block storage infrastructure integrates a robust hardware-based encryption. +Um die Vertraulichkeit Ihrer Daten im Ruhezustand zu gewährleisten, integriert unsere gesamte Blockspeicher-Infrastruktur eine robuste Hardware-Verschlüsselung. -- **Encryption Type**: Data is encrypted directly on the disks (`Data At Rest`) using the **XTS-AES 256** algorithm. -- **Compliance**: This encryption method complies with the **FIPS 140-2** standard, ensuring a high level of validated security. -- **Operation**: Encryption is applied at the time data is written to the physical storage medium. +- **Verschlüsselungstyp** : Die Daten werden direkt auf den Festplatten (`Data At Rest`) unter Verwendung des **XTS-AES 256**-Algorithmus verschlüsselt. +- **Konformität** : Diese Verschlüsselungsmethode entspricht dem **FIPS 140-2**-Standard und gewährleistet ein hohes, validiertes Sicherheitsniveau. +- **Funktionsweise** : Die Verschlüsselung wird zum Zeitpunkt des Schreibens der Daten auf das physische Speichermedium angewendet. -:::warning[Attention regarding replication] -It is important to note that this encryption protects data stored on disks. It is not active "on-the-fly," meaning data is not encrypted during storage replication operations between availability zones. Security of transfers is ensured through dedicated and secure communication channels. +:::warning[Hinweis zur Replikation] +Es ist wichtig zu beachten, dass diese Verschlüsselung die auf den Festplatten gespeicherten Daten schützt. Sie ist nicht "on-the-fly" aktiv, was bedeutet, dass die Daten während der Speicherreplikationsvorgänge zwischen Verfügbarkeitszonen nicht verschlüsselt werden. Die Sicherheit der Übertragungen wird durch dedizierte und gesicherte Kommunikationskanäle gewährleistet. ::: --- -## Bare Metal Console Access +## Bare-Metal-Konsolenzugriff -Access to Bare Metal servers is provided directly from the **Cloud Temple console**. This feature offers full control over the server lifecycle, including: +Der Zugriff auf Bare-Metal-Server erfolgt direkt über die **Cloud Temple-Konsole**. Diese Funktion bietet vollständige Kontrolle über den Lebenszyklus der Server, einschließlich: -- **KVM Access**: A direct interface to manage servers, as if you were physically on-site. -- **Management of common operations**: Ability to perform actions such as power management, reboots, and **ISO mapping** for operating system installation. +- **KVM-Zugriff** : Eine direkte Schnittstelle zur Verwaltung der Server, als wären Sie physisch vor Ort. +- **Verwaltung gängiger Operationen** : Möglichkeit, Aktionen wie Stromversorgungsmanagement, Neustarts oder das **ISO-Mounting** zur Installation eines Betriebssystems durchzuführen. + +Diese Zugriffsebene gewährleistet maximale Flexibilität unter Einhaltung der Sicherheitsrichtlinien. + +--- -This level of access ensures maximum flexibility while maintaining strict security requirements. +## Netzwerkkonnektivität der Bare-Metal-Server -## Bare Metal Server Networking +Bare-Metal-Server verfügen über erweiterte Netzwerkfunktionen. -Bare Metal servers come with advanced networking capabilities. +### VLAN der Ebene 2 -### Layer 2 VLANs +Es ist möglich, **VLANs der Ebene 2** auf den Netzwerkschnittstellen von Bare-Metal-Servern zu konfigurieren. +Benutzer können: -It is possible to configure **Layer 2 VLANs** on the network interfaces of Bare Metal servers. Users can: +- **VLAN-Tagging aktivieren**, um einen oder mehrere VLANs einer einzelnen Schnittstelle zuzuordnen. +- **VLANs direkt auf die Netzwerkschnittstellen der Server propagieren**. -- **Enable VLAN tagging** to associate one or more VLANs with a single interface. -- **Propagate VLANs directly** on the network interfaces of the Bare Metal servers. +### Aggregation von Netzwerkschnittstellen -### Network Interface Aggregation +Jeder Server ist mit **zwei Netzwerkschnittstellen** ausgestattet. Diese Schnittstellen können unabhängig voneinander oder kombiniert für eine höhere Leistung und Redundanz verwendet werden: -Each server is equipped with **two network interfaces**. These interfaces can be used either independently or combined to achieve improved performance and redundancy: +### Netzwerkleistung -### Network Performance +Die Leistung der Netzwerkschnittstellen hängt direkt von der gewählten Blade-Klasse ab. Beispiel: -The performance of network interfaces is directly linked to the chosen blade class. Example: +- Die **ECO**-Blades bieten eine Konnektivität von 2 x 10 Gbit/s. +- **STANDARD**-Blades und höhere Klassen verfügen über eine Konnektivität von 2 x 25 Gbit/s. -- **ECO** blades provide connectivity of 2 x 10 Gbit/s. -- **STANDARD** and higher-class blades offer connectivity of 2 x 25 Gbit/s. +Diese Netzwerkoptionen gewährleisten eine zuverlässige, flexible Konnektivität, die sich für eine Vielzahl professioneller Workloads eignet. -These network options ensure reliable, flexible, and workload-adapted connectivity for a wide range of professional workloads. +--- \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/iaas_bare-metal/iaas_bare-metal.md b/i18n/de/docusaurus-plugin-content-docs/current/iaas_bare-metal/iaas_bare-metal.md index 628828a6..c792965f 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/iaas_bare-metal/iaas_bare-metal.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/iaas_bare-metal/iaas_bare-metal.md @@ -2,13 +2,15 @@ title: Übersicht --- -Das __Bare Metal__-Angebot von Cloud Temple bietet dedizierte, vollständig anpassbare Server, um die Bedürfnisse von Kunden zu erfüllen, die vollständige Autonomie über ihre Infrastruktur suchen. +# Bare Metal -Aufgebaut auf modernsten Technologien - Cisco UCS für die Rechenleistung und IBM Spectrum Virtualize/FlashSystem für den Speicher - garantiert diese Lösung optimale Leistung und vorbildliche Zuverlässigkeit. +Das Produkt __Bare Metal__ von Cloud Temple bietet dedizierte, vollständig anpassbare Server, um den Bedürfnissen von Kunden gerecht zu werden, die nach vollständiger Autonomie in ihrer Infrastruktur streben. -Mit __Bare Metal__ profitieren Sie von exklusiver Hardware ohne gemeinsame Nutzung, die es Ihnen ermöglicht, die Software-Umgebung Ihrer Wahl zu installieren und zu verwalten: Hypervisor, Linux, Windows oder andere. +Entwickelt auf Basis modernster Cisco UCS-Technologien für die Rechenleistung und IBM Spectrum Virtualize/FlashSystem für die Datenspeicherung, gewährleistet diese Lösung optimale Leistung und beispielhafte Zuverlässigkeit. -Der direkte Zugriff auf Ihre Server erfolgt über die Cloud Temple-Konsole, die eine vereinfachte Verwaltung und sofortige Kontrolle bietet. Ob Sie nach einer Infrastruktur für Ihre kritischen Anwendungen oder nach Hardware-Ressourcen für Ihre spezifischen Projekte suchen, das Bare Metal-Angebot gewährleistet Flexibilität, vollständige Kontrolle und unübertroffene Leistung. +Mit __Bare Metal__ profitieren Sie von exklusiver Hardware ohne Ressourcen-Sharing, die es Ihnen ermöglicht, Ihre bevorzugte Softwareumgebung zu installieren und zu verwalten: Hypervisor, Linux, Windows oder andere. + +Der direkte Zugriff auf Ihre Server erfolgt über die Cloud Temple Konsole, die ein vereinfachtes Management und eine sofortige Inbetriebnahme ermöglicht. Ob Sie eine Infrastruktur für Ihre kritischen Anwendungen oder Hardware-Ressourcen für Ihre spezifischen Projekte suchen, das Produkt Bare Metal bietet Ihnen Flexibilität, volle Kontrolle und unübertroffene Leistung.
@@ -23,21 +25,21 @@ Der direkte Zugriff auf Ihre Server erfolgt über die Cloud Temple-Konsole, die

Tutorials

-

Lernen Sie Schritt für Schritt, wie Sie unsere Dienste mit detaillierten Anleitungen konfigurieren und nutzen können.

- Tutorials entdecken → +

Lernen Sie Schritt für Schritt, wie Sie unsere Dienste mit detaillierten Anleitungen konfigurieren und nutzen.

+ Anleitungen entdecken →
-## Kaufplattformen +## Einkaufsplattformen
-

Sind Sie eine Organisation des öffentlichen Sektors? Das Bare Metal-Angebot ist zugänglich über:

+

Sind Sie ein Akteur im öffentlichen Sektor? Das Produkt Bare Metal ist verfügbar über:

@@ -46,7 +48,7 @@ Der direkte Zugriff auf Ihre Server erfolgt über die Cloud Temple-Konsole, die

- Den CAIH-Markt für den medizinischen Sektor + Das CAIH-Einkaufsprogramm für den Gesundheitssektor

@@ -54,4 +56,4 @@ Der direkte Zugriff auf Ihre Server erfolgt über die Cloud Temple-Konsole, die Mehr erfahren → - + \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/iaas_bare-metal/quickstart.md b/i18n/de/docusaurus-plugin-content-docs/current/iaas_bare-metal/quickstart.md index 80c29b16..d229ab41 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/iaas_bare-metal/quickstart.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/iaas_bare-metal/quickstart.md @@ -1,70 +1,80 @@ --- -title: Schnellstartanleitung +title: Schnellstart --- import shivaBareMetalMenu from '@site/docs/iaas_bare-metal/images/shiva_bare-metal_menu.png' import shivaBareMetalList from '@site/docs/iaas_bare-metal/images/shiva_bare-metal_list.png' import shivaBareMetalDetails from '@site/docs/iaas_bare-metal/images/shiva_bare-metal_details.png' import shivaBareMetalStoragelist from '@site/docs/iaas_bare-metal/images/shiva_bare-metal_storagelist.png' -# QuickStart für das Bare-Metal-Angebot +# Schnellstart für das Bare-Metal-Angebot Diese Seite führt Sie durch die ersten Schritte zur Nutzung des **Bare-Metal**-Angebots über die Cloud Temple-Konsole. Befolgen Sie diese Anleitung, um die verfügbaren Menüs und Funktionen kennenzulernen. +--- + ## Voraussetzungen -Stellen Sie sicher, dass die folgenden Punkte erfüllt sind, bevor Sie beginnen: +Bevor Sie beginnen, stellen Sie sicher, dass folgende Punkte erfüllt sind: -1. **Aktivierte Abonnement**: Ihre Organisation muss ein Abonnement für das Angebot Bare Metal abgeschlossen haben. -2. **Benutzerberechtigungen**: Ihr Benutzerkonto muss über die erforderlichen Berechtigungen verfügen, um auf Bare-Metal-Ressourcen zuzugreifen und diese zu verwalten. +1. **Abonnement aktiviert**: Ihre Organisation muss das Bare-Metal-Angebot abonniert haben. +2. **Benutzerberechtigungen**: Ihr Benutzerkonto muss über die erforderlichen Rechte verfügen, um auf die Bare-Metal-Ressourcen zugreifen und sie verwalten zu können. -## Access to the Bare Metal Interface +--- -Once the subscription is activated and permissions are configured, a new menu titled **Bare Metal** appears in the Cloud Temple console. This menu contains two main submenus: **Bare Metal** and **Volumes**. +## Zugriff auf die Bare-Metal-Oberfläche + +Sobald das Abonnement aktiviert und die Berechtigungen konfiguriert sind, erscheint in der Cloud Temple-Konsole ein neues Menü mit der Bezeichnung **Bare Metal**. Dieses Menü enthält zwei Hauptuntermenüs: **Bare Metal** und **Volumes**. -### 1. Submenu **Bare Metal** +--- -Der Submenu **Bare Metal** zeigt Ihnen eine Tabelle mit allen verfügbaren Bare-Metal-Instanzen. Diese Tabelle enthält die wichtigsten Informationen für jede Instanz: +### 1. Untermenü **Bare Metal** -- **Name des Bare Metal** +Das Untermenü **Bare Metal** zeigt eine Tabelle mit allen verfügbaren Bare-Metal-Instanzen. Diese Tabelle enthält die wichtigsten Informationen für jede Instanz: + +- **Name der Bare-Metal-Instanz** - **Status** -- **Hardware-Konfiguration** +- **Hardwarekonfiguration** - **IP-Adresse** #### Hauptfunktionen -- **Aktionsschaltfläche**: Ermöglicht direkten Zugriff auf die Verwaltungskonsole des Bare Metal-Systems. -- **Klickbarer Name**: Durch Klicken auf den Namen einer Bare Metal-Instanz wird eine neue Seite mit den **umfassenden Details** der Instanz angezeigt: - - Hardwareinformationen (RAM, CPU, GPU usw.). +- **Aktionsschaltfläche** : Ermöglicht den direkten Zugriff auf die Bare-Metal-Verwaltungskonsole. +- **Klickbarer Name** : Beim Klicken auf den Namen einer Bare-Metal-Instanz wird eine neue Seite mit den **vollständigen Details** der Instanz angezeigt: + - Hardwareinformationen (RAM, CPU, GPU, usw.). - Netzwerkkonfiguration (zugeordnete IP-Adressen). - - Verbindungsinformationen für die Verwaltung. + - Konnektivitätsinformationen für das Management. -### 2. Submenu **Volumes** +--- + +### 2. Untermenü **Volumes** -Der Submenü **Volumes** zeigt eine Tabelle mit allen Speichervolumes, die Ihrer Bare-Metal-Unterzeichnung zugeordnet sind. Für jedes Volume sind folgende Informationen verfügbar: +Das Untermenü **Volumes** zeigt eine Tabelle mit allen Speichervolumes, die Ihrem Bare-Metal-Abonnement zugeordnet sind. Für jedes Volume stehen die folgenden Informationen zur Verfügung: -- **Volume-Name** +- **Name des Volumes** - **Kapazität** -- **Leistungsklasse** (IOPS pro To) -- **Status** (Verfügbar, Im Einsatz, usw.) +- **Leistungsklasse** (IOPS par To) +- **Status** (Verfügbar, In Bereitstellung, usw.) :::info[Volume BFS (Boot from SAN)] -Der **Volume 1** ist das **BFS-Volume (Boot from SAN)** und muss zum Installieren des Betriebssystems verwendet werden. +**Volume 1** ist das **BFS (Boot from SAN)** und muss zur Installation des Betriebssystems verwendet werden. **Wichtig:** Dieses Volume kann nicht mit anderen Bare-Metal-Instanzen in derselben Verfügbarkeitszone (AZ) geteilt werden. ::: -:::tip[Best Practice] -Bevorzugen Sie die Installation des Betriebssystems auf dem **BFS-Volume** und speichern Sie Ihre Daten auf einem zusätzlichen **LUN-Volume**. Diese Trennung erleichtert Wartung, Sicherungen und die Neinstallation des Systems bei Bedarf. +:::tip[Bonne pratique] +Installieren Sie das Betriebssystem vorzugsweise auf dem **BFS**-Volume und speichern Sie Ihre Daten auf einem zusätzlichen **LUN**-Volume. Diese Trennung erleichtert die Wartung, Sicherungen und die Neuinstallation des Systems, falls erforderlich. ::: #### Hauptfunktionen -- **Volumenverwaltung**: Von diesem Dashboard aus können Sie Volumes Ihren Bare-Metal-Instanzen zuordnen. +- **Volumenverwaltung** : Über dieses Dashboard können Sie die Volumes Ihren Bare-Metal-Instanzen zuordnen. + +--- \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/iaas_bare-metal/tutorials.md b/i18n/de/docusaurus-plugin-content-docs/current/iaas_bare-metal/tutorials.md index 0f028f15..f6e1d7ab 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/iaas_bare-metal/tutorials.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/iaas_bare-metal/tutorials.md @@ -1,3 +1,5 @@ + + --- title: Tutorials --- @@ -5,5 +7,5 @@ title: Tutorials

Tutorials

Derzeit sind keine Tutorials verfügbar, aber wir arbeiten aktiv daran. Schauen Sie bald wieder vorbei, um mehr zu erfahren!

- Zur Startseite → -
+ Zur Startseite gehen → + \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md b/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md index ceaf6b06..87cfcf90 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md @@ -1,475 +1,495 @@ --- -title: Concepts +title: Konzepte --- -The __IaaS (Infrastructure as a Service)__ offering from Cloud Temple is designed to meet the critical requirements for business continuity and disaster recovery, with a particular focus on demanding sectors such as industry, banking, and insurance. Built on cutting-edge technologies, this infrastructure ensures maximum availability and optimal performance for your critical workloads. +Das __IaaS (Infrastructure As A Service)__ von Cloud Temple wurde entwickelt, um den kritischen Anforderungen an Geschäftskontinuität und Disaster Recovery gerecht zu werden, mit besonderem Fokus auf anspruchsvolle Branchen wie Industrie, Banken und Versicherungswesen. Basierend auf modernsten Technologien gewährleistet diese Infrastruktur maximale Verfügbarkeit und optimale Leistung für Ihre kritischen Workloads. -## A trusted technology platform +## Eine vertrauenswürdige Technologieplattform -The Cloud Temple IaaS platform is built on internationally recognized technology partners: +Die IaaS-Plattform von Cloud Temple basiert auf international renommierten Technologiepartnern: -- Compute: __CISCO UCS__. -- Storage: __IBM Spectrum Virtualize__, __IBM FlashSystem__ for block storage, and __DELL ECS__ for object storage. -- Networking: __JUNIPER__. -- Virtualization: __Open source stack__, providing a reliable and proven foundation for managing your cloud environments. +- Computing : __CISCO UCS__. +- Storage : __IBM Spectrum Virtualize__, __IBM FlashSystem__ für den Blockspeicher und __DELL ECS__ für den Objektspeicher. +- Netzwerk : __JUNIPER__. +- Virtualisierung : __Stack Opensource__, das eine zuverlässige und bewährte Grundlage für die Verwaltung Ihrer Cloud-Umgebungen bietet. -This architecture is based on the __VersaStack__ model, a collaboration between Cisco and IBM, ensuring broad compatibility with major software vendors. +Diese Architektur basiert auf dem __VersaStack__-Modell, einer Partnerschaft zwischen Cisco und IBM, die eine umfassende Kompatibilität mit den führenden Softwareherstellern gewährleistet. -## A dedicated and automated infrastructure +## Eine dedizierte und automatisierte Infrastruktur -Although fully automated via APIs and a Terraform provider, Cloud Temple's IaaS offering provides a unique infrastructure: +Obwohl sie vollständig durch APIs und einen Terraform-Provider automatisiert ist, bietet das IaaS-Produkt von Cloud Temple eine einzigartige Infrastruktur: -- __Dedicated resources__: Compute blades, storage volumes, and software stacks (virtualization, backup, firewalling, etc.) are never shared among clients. -- __Maximum predictability__: You have full control over virtualization rates, storage IOPS load, and benefit from clear, consumption-based monthly billing. +- __Dedizierte Ressourcen__: Compute-Blades, Speichervolumes und Software-Stacks (Virtualisierung, Backup, Firewalling usw.) werden niemals zwischen Kunden gemeinsam genutzt. +- __Maximale Vorhersagbarkeit__: Sie haben die Kontrolle über die Virtualisierungsraten, die IOPS-Belastung des Speichers und profitieren von einer klaren, monatlichen verbrauchsabhängigen Abrechnung. -The platform is certified __SecNumCloud__ by the [ANSSI](https://www.ssi.gouv.fr/), ensuring a high level of automation and security. +Die Plattform ist von der [ANSSI](https://www.ssi.gouv.fr/) mit dem __SecNumCloud__-Label zertifiziert, was ein hohes Maß an Automatisierung und Sicherheit garantiert. ## Hauptfunktionen -- Dedicated und on-demand Rechenressourcen (CPU, RAM). -- On-demand Speicher (mehrere Klassen verfügbar). +- Dedizierte und On-Demand-Rechenressourcen (CPU, RAM). +- On-Demand-Speicher (mehrere Klassen verfügbar). - Netzwerkressourcen (Internet, private Netzwerke). -- Kreuzsicherungen mit konfigurierbarer Aufbewahrungszeit. +- Cross-Backups mit konfigurierbarer Aufbewahrungsfrist. - Asynchrone Replikation für Speicher oder virtuelle Maschinen. -- Steuerung über die [Console](../console/console.md) oder im Infrastructure-as-Code-Modus über APIs und den Terraform-Provider. +- Steuerung über die [Console](../console/console.md) oder im Infrastructure-as-Code-Modell über APIs und den Terraform-Provider. ## Vorteile -| Vorteil | Beschreibung | -|----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------| -| Digitale Vertrauenswürdigkeit | Speicherung von Daten in Frankreich und Einhaltung der DSGVO. | -| Sicherheit | Hochsichere Plattform, zertifiziert __SecNumCloud__, __HDS__ (Hospizierung sensibler Gesundheitsdaten), __ISO 27001__ und __ISAE 3402 Typ II__. | -| Hohe Verfügbarkeit | Plattformverfügbarkeit von 99,99 %, monatlich gemessen, inklusive Wartungszeiträume. | -| Resilienz | Implementierung von Kontinuitäts- oder Wiederherstellungsplänen je nach Bedarf. | -| Automatisierung | Vollständig automatisierte Plattform, entwickelt für die Integration in ein digitales Transformationsprogramm. | -| On-Demand | Ressourcen sind nach Bedarf verfügbar. | +| Vorteil | Beschreibung | +|---------------------|------------------------------------------------------------------------------------------------------------------------------------------------| +| Digitales Vertrauen | Datenhosting in Frankreich und DSGVO-Konformität. | +| Sicherheit | Hochsichere Plattform, qualifiziert nach __SecNumCloud__, __HDS__ (Hosting von Gesundheitsdaten), __ISO 27001__ und __ISAE 3402 Typ II__. | +| Hohe Verfügbarkeit | Verfügbarkeitsrate der Plattform von 99,99 %, monatlich gemessen, inklusive Wartungsfenster. | +| Resilienz | Umsetzung von Plänen zur Geschäftskontinuität oder zum Business Continuity Management je nach Bedarf. | +| Automatisierung | Vollständig automatisierte Plattform, konzipiert für die Integration in ein Programm zur digitalen Transformation. | +| On-Demand | Ressourcen bei Bedarf verfügbar. | -## Regions and Availability Zones +## Regionen und Verfügbarkeitszonen -The OpenIaaS product is deployed within an availability zone. -An availability zone is part of a region. +Das Produkt OpenIaaS wird in einer Verfügbarkeitszone bereitgestellt. +Eine Verfügbarkeitszone ist Teil einer Region. -This deployment model allows you to select the location of clusters and distribute them across different availability zones (AZ). -This provides better load distribution, maximizes redundancy, and facilitates the implementation of a disaster recovery plan (DRP) in the event of an incident. +Diese Bereitstellungsart ermöglicht die Auswahl des Standorts der Cluster und deren Verteilung auf verschiedene Verfügbarkeitszonen (AZ). +Dies bietet eine bessere Lastverteilung, maximiert die Redundanz und erleichtert die Einrichtung eines Disaster-Recovery-Plans (DRP) im Falle eines Vorfalls. -## Compute Blade Classes +--- + +## Compute-Blade-Klassen -The available compute blades for the Bare Metal offering provide a range of performance options to meet diverse requirements: +Die für das Bare-Metal-Angebot verfügbaren Compute-Blades bieten ein Leistungsspektrum, um unterschiedliche Anforderungen zu erfüllen: -| Reference | RAM __(1)__ | Frequency __(2)__ | Number of Cores / Threads | Connectivity __(3)__ | GPU __(4)__ | +| Referenz | RAM __(1)__ | Taktfrequenz __(2)__ | Anzahl der Kerne / Threads | Konnektivität __(3)__ | GPU __(4)__ | |-----------------------|--------------|-------------------------------------------|---------------------------|----------------------|----------------------| -| __ECO__ | 384 GB | 2.20/3.0 GHz (Silver 4114 or equivalent) | 20 / 40 threads | 2 × 10 Gbit/s | - | -| __STANDARD__ | 384 GB | 2.40/3.4 GHz (Silver 4314 or equivalent) | 32 / 64 threads | 2 × 25 Gbit/s | - | -| __ADVANCE__ | 768 GB | 2.80/3.5 GHz (Gold 6342 or equivalent) | 48 / 96 threads | 2 × 25 Gbit/s | - | -| __PERFORMANCE 1__ | 384 GB | 3.20/3.6 GHz (Xeon E-53I5Y or equivalent) | 16 / 32 threads | 2 × 25 Gbit/s | - | -| __PERFORMANCE 2__ | 768 GB | 3.00/3.6 GHz (Gold 6354 or equivalent) | 36 / 72 threads | 2 × 25 Gbit/s | - | -| __PERFORMANCE 3__ | 1536 GB | 2.60/3.5 GHz (Gold 6348 or equivalent) | 56 / 112 threads | 2 × 25 Gbit/s | - | -| __PERFORMANCE 4__ | 512 GB | 2.50/4.1 GHz (Intel 6426Y or equivalent) | 32 / 64 threads | 2 × 25 Gbit/s | 2 × NVIDIA L40S 48GB | +| __ECO__ | 384 GB | 2,20/3,0 GHz (Silver 4114 oder gleichwertig) | 20 / 40 Threads | 2 X 10 Gbit/s | - | +| __STANDARD__ | 384 GB | 2,40/3,4 GHz (Silver 4314 oder gleichwertig) | 32 / 64 Threads | 2 X 25 Gbit/s | - | +| __ADVANCE__ | 768 GB | 2,80/3,5 GHz (Gold 6342 oder gleichwertig) | 48 / 96 Threads | 2 X 25 Gbit/s | - | +| __PERFORMANCE 1__ | 384 GB | 3,20/3,6 GHz (Xeon E-53I5Y oder gleichwertig) | 16 / 32 Threads | 2 X 25 Gbit/s | - | +| __PERFORMANCE 2__ | 768 GB | 3,00/3,6 GHz (Gold 6354 oder gleichwertig) | 36 / 72 Threads | 2 X 25 Gbit/s | - | +| __PERFORMANCE 3__ | 1536 GB | 2,60/3,5 GHz (Gold 6348 oder gleichwertig) | 56 / 112 Threads | 2 X 25 Gbit/s | - | +| __PERFORMANCE 4__ | 512 GB | 2,50/4,1 GHz (Intel 6426Y oder gleichwertig) | 32 / 64 Threads | 2 X 25 Gbit/s | 2 x NVIDIA L40S 48 GB | -### Notes +### Hinweise -- __(1)__ The amount of memory is the physically available memory on the blades and cannot be modified. -- __(2)__ The frequencies listed correspond to the minimum base frequency and the turbo frequency. -- __(3)__ Physical connectivity is shared for network access and block storage access, thanks to a converged Cisco UCS architecture. -- __(4)__ Available GPUs evolve with the latest technologies. As of May 1, 2024, the offering includes NVIDIA LOVELACE L40S GPUs. -- __(5)__ High availability on a cluster is available only with a minimum of 2 nodes. +- __(1)__ Die Speicherkapazität entspricht dem physisch auf den Blades verfügbaren Speicher und kann nicht geändert werden. +- __(2)__ Die angegebenen Frequenzen entsprechen der minimalen Basisfrequenz und der Turbofrequenz. +- __(3)__ Die physische Konnektivität wird für den Netzwerkzugriff und den Block-Speicherzugriff gemeinsam genutzt, dank einer konvergierten Cisco UCS-Architektur. +- __(4)__ Die verfügbaren GPUs richten sich nach den neuesten Technologien. Stand 1. Mai 2024 umfasst das Produkt NVIDIA LOVELACE L40S-GPUs. +- __(5)__ Hohe Verfügbarkeit in einem Cluster ist erst ab 2 Knoten verfügbar. -Infrastructure availability is guaranteed at 99.9%, measured monthly, including maintenance windows. Any SLA-related request must be reported via an incident ticket. +Die Verfügbarkeit der Infrastruktur ist mit 99,9 % garantiert, monatlich gemessen, inklusive Wartungsfenster. Alle SLA-bezogenen Anfragen müssen über ein Incident-Ticket gemeldet werden. -## Block Storage Classes +--- -Distributed block storage, based on __IBM Spectrum Virtualize__, offers a range of performance tiers suited for various use cases: +## Speicherklassen im Blockmodus -| Reference | IOPS/To | Primary Use Case | -|-----------------------------------|-------------------------|----------------------------------------| -| __FLASH - Essential__ | 500 | Light workloads | -| FLASH - Standard - 1500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:medium:v1 | -| FLASH - Premium - 3000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:premium:v1 | -| FLASH - Enterprise - 7500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:enterprise:v1 | -| FLASH - Ultra - 15000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:ultra:v1 | -| __MASS STORAGE - Archival__ | Not applicable | Cost-effective storage for archival | +Der verteilte Blockspeicher, basierend auf __IBM Spectrum Virtualize__, bietet ein Leistungsangebot, das auf verschiedene Anwendungsfälle zugeschnitten ist: -### Features +| Referenz | IOPS/To | Max. IOPS / Volume | Max. Durchsatz / Volume | Hauptanwendung | +|-----------------------------------|----------------|---------------------------|-----------------------------|----------------------------------------| +| **FLASH - Essential** | 500 | 10 000 IOPS | 512 MB/s | Leichte Workloads | +| **FLASH - Standard** | 1500 | 30 000 IOPS | 1024 MB/s | Standard-Workloads | +| **FLASH - Premium** | 3000 | 30 000 IOPS | 1024 MB/s | Intensive Workloads | +| **FLASH - Enterprise** | 7500 | 30 000 IOPS | 1024 MB/s | Kritische Workloads | +| **FLASH - Ultra** | 15000 | 30 000 IOPS | 1024 MB/s | Ultra-intensive Workloads | +| **MASS STORAGE - Archivierung** | Nicht zutreffend | Nicht garantiert | Nicht garantiert | Kostengünstiger Speicher für die Archivierung | -- __Technology__: Flash NVMe with __Distributed RAID 6__ for enhanced resilience. -- __Availability__: 99.99%, measured monthly. -- __Restrictions__: No limits on reads or writes. No automatic compression or deduplication, ensuring full utilization of allocated volumes. +### Eigenschaften -### Storage Block Security and Encryption +- **Performance** : Die effektive Performance steigt linear mit dem zugewiesenen Volumen (gemäß dem IOPS/TB-Verhältnis), **bis zur oben definierten absoluten Hardware-Obergrenze**. (Beispielsweise ist ein 10-TB-Volumen der Ultra-Klasse physisch auf 30.000 IOPS und 1024 MB/s begrenzt). +- __Technologie__ : NVMe-Flash mit __Distributed RAID 6__ für eine erhöhte Resilienz. +- __Verfügbarkeit__ : 99,99 %, monatlich gemessen. +- __Einschränkungen__ : Keine Begrenzung bei Lese- oder Schreibvorgängen. Keine automatische Komprimierung oder Deduplizierung, um die vollständige Nutzung der reservierten Volumes zu gewährleisten. -To ensure the confidentiality of your data at rest, our entire block storage infrastructure integrates a robust hardware-based encryption. +### Sicherheit und Verschlüsselung des Blockspeichers -- __Encryption Type__: Data is encrypted directly on the disks (`Data At Rest`) using the __XTS-AES 256__ algorithm. -- __Compliance__: This encryption method complies with the __FIPS 140-2__ standard, ensuring a high level of validated security. -- __Operation__: Encryption is applied at the time data is written to the physical storage medium. +Um die Vertraulichkeit Ihrer Daten im Ruhezustand zu gewährleisten, ist unsere gesamte Blockspeicher-Infrastruktur mit einer robusten Hardware-Verschlüsselung ausgestattet. -:::warning[Attention regarding replication] -It is important to note that this encryption protects data stored on disks. It is not active "on-the-fly," meaning data is not encrypted during storage replication operations between availability zones. Security of transfers is ensured through dedicated and secure communication channels. +- __Verschlüsselungstyp__: Die Daten werden direkt auf den Festplatten (`Data At Rest`) unter Verwendung des __XTS-AES 256__-Algorithmus verschlüsselt. +- __Konformität__: Diese Verschlüsselungsmethode entspricht dem __FIPS 1-40-2__-Standard und gewährleistet ein hohes, validiertes Sicherheitsniveau. +- __Funktionsweise__: Die Verschlüsselung wird zum Zeitpunkt des Schreibens der Daten auf das physische Speichermedium angewendet. + +:::warning[Hinweis zur Replikation] +Es ist wichtig zu beachten, dass diese Verschlüsselung die auf den Festplatten gespeicherten Daten schützt. Sie ist nicht "on-the-fly" aktiv, was bedeutet, dass die Daten während der Speicherreplikationsvorgänge zwischen Verfügbarkeitszonen nicht verschlüsselt werden. Die Sicherheit der Übertragungen wird durch dedizierte und gesicherte Kommunikationskanäle gewährleistet. ::: --- -## Networks +## Netzwerke -The OpenIaaS product is compatible with [private networks](../network/private_network) and [internet access](../network/internet). +Das OpenIaaS-Produkt ist kompatibel mit [privaten Netzwerken](../network/private_network) und [Internetzugriff](../network/internet). -Two types of networks are available from the virtual machine configuration. +Zwei Netzwerktypen stehen bei der Konfiguration einer virtuellen Maschine zur Verfügung. -### VLAN networks +### VLAN-Netzwerke -VLAN networks must be deployed at a rate of one VLAN per network interface card. If you want to use multiple networks, simply create multiple network interface cards. +VLAN-Netzwerke werden im Verhältnis von einem VLAN pro Netzwerkkarte bereitgestellt. Wenn Sie mehrere Netzwerke verwenden möchten, genügt es, mehrere Netzwerkkarten zu erstellen. -A limitation exists regarding the maximum number of network cards that can be created on a VM, which is 7. +Die maximale Anzahl von Netzwerkkarten, die auf einer VM erstellt werden können, ist auf 7 beschränkt. -### VLAN Trunk +### Der VLAN-Trunk -When you need to propagate more than 7 VLANs, you must use a VLAN Trunk. -The VLAN Trunk allows all your VLANs to pass through a single network interface. VLAN ID configuration must be performed via virtual VLAN interfaces from the VM's operating system. The VLAN IDs are the same as those present and visible from the console. +Falls Sie mehr als 7 VLANs durchreichen müssen, müssen Sie den VLAN-Trunk verwenden. +Der VLAN-Trunk überträgt alle Ihre VLANs über eine einzelne Karte. Die Konfiguration der VLAN-IDs erfolgt über virtuelle VLAN-Schnittstellen im Betriebssystem der VM. Die VLAN-IDs sind dieselben, die in der Konsole angezeigt werden. -## Sicherung von virtuellen Maschinen +## Sicherung virtueller Maschinen -Das OpenIaaS-Angebot umfasst eine __native, nicht abschaltbare verteilte Backup-Architektur__, ein obligatorisches Element im Rahmen der französischen SecNumCloud-Qualifizierung. +Das OpenIaaS-Angebot integriert __eine native, nicht deaktivierbare verteilte Backup-Architektur__, die im Rahmen der französischen SecNumCloud-Qualifikation zwingend erforderlich ist. -Sicherungen werden im [SecNumCloud-qualifizierten Objektspeicher](../storage/oss) gespeichert und gewährleisten optimalen Schutz bei einem schwerwiegenden Ausfall des Produktions-Rechenzentrums. Dieser Ansatz ermöglicht die Wiederherstellung Ihrer Daten in einem sekundären Rechenzentrum, selbst bei kritischen Vorfällen wie Bränden. +Die Backups werden im [SecNumCloud-zertifizierten Objektspeicher](../storage/oss) gespeichert, was einen optimalen Schutz bei einem schwerwiegenden Ausfall des Produktionsrechenzentrums gewährleistet. Dieser Ansatz ermöglicht die Wiederherstellung Ihrer Daten in einem sekundären Rechenzentrum, selbst bei einem kritischen Vorfall wie einem Brand. -### Verfügbare Datenschutzdienste +### Verfügbare Datensicherungsdienste | Dienst | Beschreibung | |---|---| -| **Inkrementelles Backup (Agentless)** | Agentenloses Backup über native Hypervisor-Mechanismen, in ein entferntes S3-Repository. | -| **Metadaten-Backup** | Schutz der Konfigurationen des Virtualisierungspools und des Backup-Orchestrators — unverzichtbar für Disaster Recovery. | -| **Granulare Wiederherstellung** | Wiederherstellung auf Ebene einer vollständigen VM, einzelner virtueller Festplatte oder einzelner Datei. | -| **S3 Multi-AZ Offloading** | Auslagerung in den S3-Objektspeicher von Cloud Temple, repliziert über Verfügbarkeitszonen. | +| **Inkrementelle Sicherung (Agentless)** | Agentenlose Sicherung über die nativen Mechanismen des Hypervisors in ein entferntes S3-Repository. | +| **Metadatensicherung** | Schutz der Konfigurationen des Virtualisierungspools und des Sicherungsorchestrators — unverzichtbar für das Disaster Recovery. | +| **Granulare Wiederherstellung** | Wiederherstellung auf Ebene der vollständigen VM, einzelner virtueller Festplatten oder einzelner Dateien möglich. | +| **S3 Multi-AZ-Offloading** | Auslagerung in das Cloud Temple S3-Objektspeicher, der zwischen Verfügbarkeitszonen repliziert wird. | -Backup- und Wiederherstellungsgeschwindigkeiten hängen von der Änderungsrate in den Umgebungen ab. Die Backup-Richtlinie ist für jede virtuelle Maschine über die [Cloud Temple Konsole](../console/console.md) vollständig konfigurierbar. +Die Sicherungs- und Wiederherstellungsgeschwindigkeiten hängen von der Änderungsrate in den Umgebungen ab. Die Sicherungsrichtlinie ist für jede virtuelle Maschine vollständig über [die Cloud Temple-Konsole](../console/console.md) konfigurierbar. -| Referenz | Einheit | Max IOPS Limit / LUN | Max Bandbreite / LUN | SKU | -|---|---|---| -| BACKUP - Servicezugang | 1 VM | csp:(region):openiaas:backup:vm:v1 | +| Référence | Unité | SKU | +| ---------------------------------------------| ----- | ------------------------------ | +| SICHERUNG - Dienstzugriff | 1 VM | csp:(region):openiaas:backup:vm:v1 | --- -### Technische Backup-Architektur +### Technische Architektur des Backups -#### Überblick +#### Gesamtübersicht -Die Architektur basiert auf einer strikten Trennung zwischen der **Steuerungsebene** (Backup-Orchestrator) und der **Datenebene** (entfernter S3-Speicher): Der Backup-Orchestrator wird im Management-Cluster von Cloud Temple gehostet (vom Client getrennt und nicht direkt zugänglich), während die Backup-Daten in einem entfernten S3-Repository gespeichert werden, das physisch von der Produktionsinfrastruktur getrennt ist. Daten werden verschlüsselt über HTTPS/TLS 1.3 übertragen. +Die Architektur basiert auf einer strikten Trennung zwischen der **Kontrollplane** und der **Datenebene**: Der Backup-Orchestrator wird im Management-Cluster von Cloud Temple gehostet (getrennt und für den Kunden nicht zugänglich), während die Sicherungsdaten in einem entfernten S3-Repository gespeichert werden, das physisch von der Produktionsinfrastruktur getrennt ist. Die Daten werden verschlüsselt zwischen den beiden Komponenten übertragen. #### Backup-Orchestrator -Der Orchestrator wird im Management-Cluster von Cloud Temple bereitgestellt und ist **für den Client nicht direkt zugänglich**. Er koordiniert alle Backup-Jobs und verwaltet die Verschlüsselung. +Der Orchestrator wird im Management-Cluster von Cloud Temple bereitgestellt, **der für den Kunden nicht direkt zugänglich ist**. Er orchestriert alle Backup-Jobs und verwaltet die Verschlüsselung. -- **Standardrichtlinien**: Backup-Richtlinien werden standardmäßig auf jeden Mandanten angewendet. -- **Benutzerdefinierte Richtlinien**: Der Client kann spezifische Häufigkeiten oder Aufbewahrungszeiten über ein Support-Ticket in der Cloud Temple Konsole anfordern. +- **Standardrichtlinien** : Auf jeden Tenant werden standardmäßig Backup-Richtlinien angewendet. +- **Benutzerdefinierte Richtlinien** : Der Kunde kann über ein Support-Ticket in der Cloud Temple-Konsole spezifische Frequenzen oder Aufbewahrungsfristen anfordern. -#### Entfernter S3-Speicher +#### S3-Fernspeicher -Backups werden an den [SecNumCloud-qualifizierten Objektspeicher](../storage/oss) von Cloud Temple gesendet, mit Multi-AZ-Replikation für Resilienz beim Ausfall eines gesamten physischen Standorts. +Sicherungen werden an den [Qualifizierten SecNumCloud-Objektspeicher](../storage/oss) von Cloud Temple gesendet, mit Multi-AZ-Replikation, um die Resilienz gegenüber dem Verlust eines gesamten physischen Standorts zu gewährleisten. --- -### Backup-Mechanismus: Inkrementelles Backup +### Sicherungsmechanismus: Inkrementelles Backup -Der Dienst verwendet einen **inkrementellen** Backup-Modus. Dieser Modus zielt auf ein **Backup Repository** (den entfernten S3-Speicher) ab und exportiert nach dem ersten Mal nie ein vollständiges Backup: Es werden nur die **geänderten Datenblöcke** bei jedem Zyklus übertragen. +Der Dienst verwendet einen **inkrementellen** Sicherungsmodus. Dieser Modus zielt auf ein **Backup-Repository** (le stockage S3 distant) ab und exportiert nach dem ersten Durchlauf niemals ein vollständiges Backup: Es werden bei jedem Zyklus ausschließlich die **geänderten Datenblöcke** übertragen. -:::info[Inkrementelles Backup vs. Replikation] -Das **inkrementelle Backup** zielt auf ein entferntes S3-Repository ab und ist für den **Langzeitschutz** optimiert. Es sollte nicht mit der **Replikation** (Hot Disaster Recovery) verwechselt werden, die auf ein lokales Storage Repository abzielt — dieser Modus wird durch die Funktion [Replikation virtueller Maschinen](#replikation-von-virtuellen-maschinen) abgedeckt. +:::info[Sauvegarde incrémentale vs Réplication] +Die **inkrementelle Sicherung** zielt auf ein entferntes S3-Repository ab und ist für den **langfristigen Schutz** optimiert. Sie darf nicht mit der **Replikation** (Disaster Recovery à chaud) verwechselt werden, die ein lokales Storage-Repository anvisiert — dieser Modus wird durch die Funktion der [réplication de machines virtuelles](#réplication-de-machines-virtuelles) abgedeckt. ::: -#### Lebenszyklus eines inkrementellen Backups +#### Technischer Lebenszyklus einer inkrementellen Sicherung + +Dies sind die aufeinanderfolgenden Schritte, die bei jeder Ausführung eines Sicherungsjobs ausgelöst werden: **1. Erstellung des lokalen Snapshots (Quelle)** -Beim Start des Jobs fordert der Orchestrator den Hypervisor auf, einen VM-Snapshot zu erstellen. Dieser Snapshot dient als Vergleichspunkt zur Berechnung des Deltas gegenüber dem vorherigen Referenz-Snapshot. +Bei Start des Jobs fordert der Orchestrator den Hypervisor auf, einen Snapshot der VM zu erstellen. Dieser Snapshot dient als Vergleichspunkt, um das Delta im Verhältnis zum vorherigen Referenz-Snapshot zu berechnen. **2. Differenzieller Export über Changed Block Tracking (CBT)** -Der Orchestrator vergleicht den neuen Snapshot mit dem vorherigen Referenz-Snapshot anhand von CBT-Metadaten. Es werden nur Datenblöcke extrahiert, die sich seit dem letzten Backup geändert haben. +Der Orchestrator vergleicht den neuen Snapshot mit dem vorherigen Referenz-Snapshot über die CBT-Metadaten. Es werden nur die Datenblöcke extrahiert, die sich seit der letzten Sicherung geändert haben — nicht die gesamte Festplatte. **3. Verschlüsselung und Übertragung zu S3** -Geänderte Blöcke werden **vom Orchestrator on-the-fly verschlüsselt** und dann über HTTPS/TLS 1.3 an den entfernten S3-Bucket gesendet. +Die geänderten Blöcke werden **on-the-fly vom Orchestrator verschlüsselt** und anschließend über HTTPS/TLS 1.3 an das entfernte S3-Bucket gesendet. -**4. Snapshot-Rotation (Coalesce)** +**4. Rotation der Snapshots (Coalesce)** -Nach der Übertragung wird der alte Referenz-Snapshot gelöscht, und der neue Snapshot wird zur Referenz für den nächsten Zyklus. Der Hypervisor löst dann einen **Coalesce**-Prozess (Zusammenführung) aus. +Nach erfolgreicher Bestätigung des Transfers wird der alte Referenz-Snapshot gelöscht, und der neue Snapshot wird zur Referenz für den nächsten Zyklus. Der Hypervisor löst daraufhin einen **Coalesce**-Prozess (Verschmelzung) aus, um die Daten des alten Deltas wieder in die Kette der virtuellen Festplatten zu integrieren. :::warning[I/O-Auswirkung des Coalesce] -Der Coalesce-Vorgang ist **I/O-intensiv** auf dem Produktionsspeicher. Er wird automatisch nach jedem erfolgreichen Backup ausgelöst. Es wird empfohlen, Backup-Fenster in Zeiten geringer Anwendungslast zu planen. +Der Coalesce-Vorgang ist **I/O-intensiv** auf dem Produktionsspeicher. Er wird automatisch nach jeder erfolgreichen Sicherung ausgelöst. Es wird empfohlen, die Sicherungsfenster in Zeiten geringer Anwendungsbelastung zu planen. ::: -**5. S3-Aufbewahrungsverwaltung (Merge) und Key Backup Interval** +**5. Verwaltung der Aufbewahrung auf S3 (Merge) und Key Backup Interval** -Im S3-Speicher verwaltet der Orchestrator die Backup-Rotation durch das Zusammenführen alter Deltas. Ein vollständiges Backup wird **regelmäßig erzwungen** (typischerweise alle 20 Inkremente — *Key Backup Interval*). +Auf dem S3-Speicher verwaltet der Orchestrator die Rotation der Sicherungen durch **Verschmelzung** (*Merge*) der alten Deltas in die älteste aufbewahrte Vollsicherung gemäß der Aufbewahrungsrichtlinie. + +Um die Integrität der Sicherungskette zu gewährleisten, wird regelmäßig eine **Vollsicherung erzwungen** (typischerweise alle 20 Inkrementalsicherungen — *Key Backup Interval*). Dies erstellt einen neuen sauberen Ausgangspunkt und begrenzt die Auswirkungen einer möglichen Beschädigung eines Glieds der Kette. --- -### Auswirkungen auf die Dimensionierung des Produktionsspeichers +### Auswirkung auf die Dimensionierung des Produktionsspeichers -:::warning[Kritischer Hinweis — Block-Speicher (Thick Provisioning)] -Das OpenIaaS-Angebot basiert auf hochleistungsfähigem Block-Speicher (Fibre Channel / LVM). Snapshots werden im **Thick**-Modus bereitgestellt: Jeder Snapshot verbraucht auf dem Storage Repository (SR) die **vollständige Nominalgröße der VM-Festplatte**. +:::warning[Kritischer Hinweis — Blockspeicher (Thick Provisioning)] +Das OpenIaaS-Angebot basiert auf hochleistungsfähigem Blockspeicher (Fibre Channel / LVM). Die für die inkrementelle Sicherung verwendeten Snapshots werden im **Thick**-Modus bereitgestellt: Jeder Snapshot verbraucht auf dem Storage Repository (SR) die **vollständige Nenngröße der VM-Festplatte** und nicht nur das tatsächliche Delta. -**Verbrauchsbeispiel für eine VM mit einer 50-GB-Festplatte:** +**Beispiel für den Verbrauch bei einer VM mit einer 50-GB-Festplatte:** -| Element | Verbrauch auf SR | +| Komponente | Verbrauch auf dem SR | |---|---| | Aktive VM-Festplatte | 50 GB | -| Permanenter Referenz-Snapshot | 50 GB | -| Temporärer Snapshot während des Exports | 50 GB | -| **Gesamt während Backup-Fenster** | **bis zu 150 GB** | +| Dauerhafter Referenz-Snapshot (für die Delta-Berechnung) | 50 GB | +| Während des Exports erstellter temporärer Snapshot | 50 GB | +| **Gesamtbedarf während des Sicherungsfensters** | **bis zu 150 GB** | -**Empfohlene Dimensionierungsregel**: mindestens **50% freien Speicherplatz** im Produktionsspeicher einplanen. +**Empfohlene Dimensionierungsregel**: Auf dem Produktionsspeicher sollte im Verhältnis zum Gesamtvolumen der gesicherten VMs **mindestens 50 % freier Speicherplatz** vorgesehen sein, um diese inhärente Mehrbelastung durch den hochleistungsfähigen Blockspeicher zu bewältigen. ::: --- -### Backup-Sicherheit und Verschlüsselung +### Sicherheit und Verschlüsselung der Sicherungen + +#### Transportverschlüsselung -#### Verschlüsselung bei der Übertragung +Alle Kommunikationen zwischen dem Backup-Orchestrator und dem S3-Speicher werden über **HTTPS / TLS 1.3** verschlüsselt. -Alle Kommunikationen zwischen dem Backup-Orchestrator und S3-Speicher werden über **HTTPS / TLS 1.3** verschlüsselt. +#### Verschlüsselung in Ruhe (At Rest) und Schlüsselverwaltung -#### Verschlüsselung im Ruhezustand und Schlüsselverwaltung +Die Verschlüsselung wird vom Backup-Orchestrator **vor** dem Senden der Daten an S3 angewendet. | Parameter | Wert | |---|---| | **Algorithmus** | AES-256 oder ChaCha20-Poly1305 | | **Schlüsselgenerierung** | Automatisch bei der Bereitstellung des Backup-Orchestrators | -| **Schlüsselspeicherung** | Zentralisierter Vault von Cloud Temple (nie in der Client-Oberfläche sichtbar) | -| **Resilienz** | Bei Verlust des Orchestrators wird der Schlüssel aus dem Vault neu eingespielt | +| **Schlüsselspeicherung** | Zentrales Cloud Temple Vault (nicht in der Client-Oberfläche sichtbar) | +| **Resilienz** | Bei Verlust des Orchestrators wird der Schlüssel aus dem Vault zurückgespielt, um den Dienst wiederherzustellen | + +#### Netzwerkisolation (SecNumCloud-Architektur) -#### Netzwerkisolierung (SecNumCloud-Architektur) +Die Backup-Infrastruktur ist so konzipiert, dass sie **strikt abgekapselt** gegenüber den Client-Umgebungen ist : -- **Physische Trennung**: *Client*-, *Administrations*- und *Backup*-Netzwerke basieren auf separaten physischen Backbones und getrennten Routing-Kontexten (VRF). -- **Kein laterales Infektionsrisiko**: Eine kompromittierte VM kann weder den S3-Speicher noch den Backup-Orchestrator erreichen. +- **Physische Trennung** : Die Netzwerke *Client*, *Administration* und *Backup* basieren auf separaten physischen Backbones und getrennten Routing-Kontexten (VRF). +- **Unmöglichkeit einer lateralen Infektion** : Eine kompromittierte VM kann weder auf den S3-Speicher noch auf den Backup-Orchestrator zugreifen — es existiert kein Netzwerkpfad zwischen ihnen. Der S3 wird niemals in der VM « gemountet ». #### Sichere Administration +Die Administration der Backup-Plattform ist **den Backup-Teams von Cloud Temple vorbehalten** und unterliegt den SecNumCloud-Anforderungen: + | Kontrolle | Maßnahme | |---|---| -| **Zugriffsbastion** | Pflichtdurchgang über eine gehärtete interne Administrationsbastion (Ubuntu Hardened) | -| **Arbeitsstation** | Zugang nur von dedizierten und gesicherten Administrationslaptops | -| **Authentifizierung** | Pflicht-MFA über ein dediziertes LDAP-Administrationsverzeichnis | +| **Zugangsbastion** | Zwingender Zugriff über eine gehärtete interne Verwaltungsbastion (Ubuntu Hardened) | +| **Workstation** | Zugang ausschließlich von dedizierten und gesicherten Admin-Laptops | +| **Authentifizierung** | Erforderliche MFA über ein dediziertes Admin-LDAP-Verzeichnis (getrennt vom Büro-LDAP) | --- ### Monitoring und Audit -- **Backup-Protokolle**: für den Client direkt in der Cloud Temple Konsole sichtbar — Status (Erfolg/Fehler), Volumen, Zeitstempel. -- **Administratorzugriffsprotokolle**: Zugriffe auf Backup-Infrastruktur werden protokolliert und **monatlich geprüft**. -- **Penetrationstests (PASSI)**: regelmäßige Pentests durch PASSI-qualifizierte Anbieter. -- **Physische Sicherheit**: Alle Geräte in SecNumCloud-Zonen (dedizierte physische Käfige mit biometrischer Zugangskontrolle). +- **Backup-Protokolle** : für den Kunden direkt in der Cloud Temple Console sichtbar — Status (succès/échec), Datenvolumen, Zeitstempel. +- **Administrator-Zugriffsprotokolle** : Zugriffe auf die Backup-Infrastrukturen (orchestrateur, S3) werden protokolliert und **monatlich auditiert**, um Anomalien zu erkennen. +- **Penetrationstests (Pentests PASSI)** : Die Infrastruktur wird regelmäßig von qualifizierten PASSI-Dienstleistern Penetrationstests unterzogen, um die SecNumCloud-Zertifizierung aufrechtzuerhalten. +- **Physische Sicherheit** : Alle Geräte befinden sich in den SecNumCloud-Zonen (cages physiques dédiées avec contrôle d'accès biométrique) der Cloud Temple Rechenzentren. --- ### Kompatibilität und Sonderfälle -:::warning[VMs mit kontinuierlichen Festplattenschreibvorgängen] -Einige virtuelle Maschinen sind mit dieser Backup-Technologie nicht kompatibel, wenn ihre **Festplattenschreiblasten konstant** sind (aktive Datenbanken, Transaktionsprotokolle usw.). Der Hypervisor kann dann den Snapshot nicht ohne Einfrieren der VM abschließen. +:::warning[VMs mit kontinuierlichen Festplattenschreibzugriffen] +Bestimmte virtuelle Maschinen sind mit dieser Sicherungstechnologie nicht kompatibel, wenn ihre **Festplattenschreiblast konstant ist** (aktive Datenbanken, Transaktionsprotokolle usw.). Der Hypervisor kann den Snapshot dann nicht abschließen, ohne die VM einzufrieren, was mehrere Stunden dauern kann. -Für diese Workloads wird empfohlen, das Hypervisor-Backup durch ein **anwendungsbasiertes Backup zu ergänzen oder zu ersetzen**: Datenbank-Dump (pg_dump, mysqldump…), agentenbasiertes Backup oder nativer Anwendungsexport. +Für diese Workloads empfehlen wir, die **Hypervisor-Sicherung durch eine Anwendungssicherung zu ergänzen oder zu ersetzen**: Datenbank-Dumps (pg_dump, mysqldump…), agentenbasierte Sicherungen oder nativer Anwendungsexport. ::: --- -### Erstellen einer Backup-Richtlinie +### Erstellen einer Sicherungsrichtlinie -Das Erstellen einer Backup-Richtlinie ist ein Administrationsvorgang, der **ausschließlich über eine Support-Anfrage** durchgeführt wird, die über das Rettungsring-Symbol oben rechts in der Oberfläche zugänglich ist. +Das Erstellen einer Sicherungsrichtlinie ist eine Verwaltungsaufgabe, die **ausschließlich über eine Supportanfrage** durchgeführt wird, die über das Rettungsring-Symbol oben rechts in der Benutzeroberfläche aufgerufen werden kann. -Die Anfrage muss folgendes angeben: +Die Anfrage muss folgende Angaben enthalten: -- Den Namen Ihrer Organisation -- Kontaktdaten (E-Mail und Telefon) -- Den Mandantennamen -- Den Namen der Backup-Richtlinie -- Gewünschte Eigenschaften: Häufigkeit, Aufbewahrung (x Tage, y Wochen, z Monate…) +- Der Name Ihrer Organisation +- Kontaktdaten einer Ansprechperson (E-Mail und Telefonnummer) zur Fertigstellung der Konfiguration +- Der Name des Tenants +- Der Name der Sicherungsrichtlinie +- Gewünschte Eigenschaften: Häufigkeit, Aufbewahrungsfrist (x Tage, y Wochen, z Monate…) #### Planungsbeschränkungen -| Einschränkung | Wert | +| Beschränkung | Wert | |---|---| | **Mindestintervall zwischen zwei Ausführungen** | 24 Stunden | -| **Maximale Aufbewahrung** | 24 Monate | +| **Maximale Aufbewahrungsdauer** | 24 Monate | | **Gleichzeitige Ausführungen pro Richtlinie** | 1 gleichzeitig | :::warning[Eine Richtlinie kann nur einmal gleichzeitig ausgeführt werden] -Jede Backup-Richtlinie ist **Einzelinstanz**: Es kann nur eine Ausführung gleichzeitig aktiv sein. +Jede Backup-Richtlinie ist **mono-instanzig** : Es kann nur eine Ausführung gleichzeitig aktiv sein. -**Praktische Konsequenz**: Wenn das Backup des Vortags beim nächsten geplanten Auslöser noch nicht abgeschlossen ist, **wird der neue Zyklus nicht gestartet** — er wird bis zum nächsten Vorkommen übersprungen. +**Praktische Konsequenz** : Wenn Sie viele virtuelle Maschinen zu einer bestehenden Richtlinie hinzufügen und das Backup vom Vortag zum geplanten Auslösezeitpunkt noch nicht abgeschlossen ist, **wird der neue Zyklus nicht gestartet** — er wird bis zum nächsten Auslösezeitpunkt ignoriert. -Um dies zu vermeiden: Überprüfen Sie die Ausführungszeiten in den Konsolen-Protokollen, passen Sie die Häufigkeit oder Größe der Richtlinie an oder verteilen Sie VMs auf mehrere Richtlinien mit versetzten Zeitplänen. +Um dies zu vermeiden: +- überprüfen Sie die **Ausführungsdauern** Ihrer Jobs in den Protokollen der Cloud Temple Console, +- passen Sie die **Häufigkeit** oder den **Umfang der Richtlinie** an, wenn Sicherungen regelmäßig in das nächste Zeitfenster überlaufen, +- erwägen Sie, **VMs auf mehrere Richtlinien** mit versetzten Zeitplänen aufzuteilen, um große Umfänge zu bewältigen. ::: -:::info[Langzeitaufbewahrung — zukünftige Verfügbarkeit] -**Die maximale Aufbewahrung beträgt derzeit 24 Monate.** Eine Langzeitaufbewahrung (bis zu 10 Jahre) wird mit dem Start unseres Produkts **Glacier** integriert, geplant für **Q1 2027**, als ergänzendes Abonnement. +:::info[Langzeit-Aufbewahrung — zukünftige Verfügbarkeit] +**Die maximale Aufbewahrungsdauer beträgt derzeit 24 Monate.** Eine Langzeit-Aufbewahrung (bis zu 10 Jahre) wird mit dem Launch unseres Produkts **Glacier** eingeführt, der für das **erste Quartal 2027** geplant ist, als Zusatzabonnement. + +Bei derart langen Aufbewahrungsdauern empfehlen wir, **ausschließlich flache Dateien** (Rohdateien, statische Dokumente) sowie **Datenbank-Dumps** zu sichern. Die Wiederherstellung eines vollständigen Servers nach 10 Jahren ist mit erheblichen Risiken verbunden: Viele Dienste oder Abhängigkeiten könnten veraltet oder mit der aktuellen Umgebung inkompatibel sein. -**Jetzt verfügbare Alternative**: der **agentenbasierte Backup**-Dienst, als ergänzendes Abonnement verfügbar. Kontaktieren Sie den Support für weitere Informationen. +**Sofort verfügbare Alternative** : der Dienst der **agentgestützten Sicherung**, ebenfalls als Zusatzabonnement verfügbar. Wenden Sie sich für weitere Informationen an den Support. ::: -## Virtual Machines +## virtuelle Maschinen -### vCPU Resource Management +### Verwaltung von vCPU-Ressourcen -vCPU resource modifications are performed while the machine is powered off (cold). The platform supports up to 254 vCPUs per virtual machine (theoretical limit), with successful tests conducted on Linux VMs equipped with 128 vCPUs. +Änderungen an den vCPU-Ressourcen erfolgen im kalten Zustand (Maschine ausgeschaltet). Die Plattform unterstützt bis zu 254 vCPUs pro virtuelle Maschine (theoretisches Limit), wobei erfolgreiche Tests mit Linux-VMs mit 128 vCPUs durchgeführt wurden. -It is important to note that guest operating system support is a determining factor when allocating resources. Allocating resources beyond the limits supported by the guest operating system may result in significant performance issues. +Wichtig ist zu beachten, dass die Unterstützung des Gast-Betriebssystems ein entscheidender Faktor bei der Ressourcenallokation darstellt. Eine Allokation, die die vom Betriebssystem unterstützten Grenzen überschreitet, kann zu erheblichen Performance-Problemen führen. -### Memory Resource Management +### Verwaltung der Speicherressourcen -Memory modifications are also performed cold. The following limits apply: +Speicheranpassungen erfolgen ebenfalls offline. Die folgenden Grenzen gelten: -- 1.5 TiB with memory snapshot support -- 8 TiB without memory snapshot support -- 16 TiB (theoretical maximum, without security support, minus RAM allocated to Xen and the control domain) +- 1,5 TiB mit Unterstützung von Speicher-Snapshots +- 8 TiB ohne Unterstützung von Speicher-Snapshots +- 16 TiB (theoretisches Limit ohne Sicherheitsunterstützung, abzüglich des Xen und der Kontrolldomäne zugewiesenen RAM) -The actual usable memory may be limited by the guest operating system. Exceeding the limits supported by the guest OS can result in performance degradation. +Der tatsächlich nutzbare Speicher kann durch das Gastbetriebssystem begrenzt sein. Das Überschreiten der vom Gast-Betriebssystem unterstützten Grenzen kann zu Performanceeinbußen führen. -### Disk Management +### Datenträgerverwaltung -- The maximum size of a disk is 2 TB -- Disks use the standard VHD format -- The maximum number of virtual disks per virtual machine, including CD-ROM drives, is 24 +- Die maximale Größe eines Datenträgers beträgt 2 TB +- Datenträger verwenden das Standard-VHD-Format +- Die maximale Anzahl virtueller Datenträger pro virtueller Maschine, einschließlich CD-ROM-Laufwerken, beträgt 24 -It is not possible to resize disks after they have been created. To increase storage capacity, a new disk must be created. +Datenträger können nach der Erstellung nicht vergrößert werden. Um die Speicherkapazität zu erweitern, muss ein neuer Datenträger erstellt werden. -### Tools for Virtual Machines +### Tools für virtuelle Maschinen -These tools are used to ensure optimal operation of virtual machines. When you wish to perform an action requiring one of these tools, a message will appear on the Cloud Temple console. +Diese Tools werden verwendet, um einen optimalen Betrieb der virtuellen Maschinen zu gewährleisten. Wenn Sie eine Aktion durchführen möchten und eines dieser Tools erforderlich ist, wird auf der Cloud Temple-Konsole eine Meldung angezeigt. -To install these tools, you can consult the official Xen Server websites to obtain precise instructions based on your OS. +Um diese Tools zu installieren, können Sie die offiziellen Xen Server-Websites konsultieren, um eine genaue Vorgehensweise für Ihr Betriebssystem zu erhalten. -#### Management Agent +#### Management Agent -The Management Agent is a component installed on each virtual machine. It enables the hypervisor to better manage the machine by providing access to more information and allows certain actions to be performed more cleanly. +Der Management Agent ist eine Komponente, die in jeder virtuellen Maschine installiert wird. Er ermöglicht dem Hypervisor eine effizientere Verwaltung der Maschine durch den Zugriff auf mehr Informationen und erlaubt die sauberere Ausführung bestimmter Aktionen. -#### PV Treiber (Paravirtualisierungstreiber) +#### PV-Treiber (Paravirtualisierungstreiber) -Die PV-Treiber sind Treiber, die in der virtuellen Maschine installiert werden, um deren Leistung zu verbessern. -Ohne diese Treiber funktioniert die Maschine zwar, ist aber langsamer. Außerdem ermöglichen sie erweiterte Funktionen. -Die PV-Treiber sind in der Regel nativ in den meisten aktuellen Linux-Kernen enthalten. +PV-Treiber sind Treiber, die in der virtuellen Maschine installiert werden, um deren Leistung zu verbessern. +Ohne diese Treiber funktioniert die Maschine, jedoch langsamer. Darüber hinaus ermöglichen sie bestimmte erweiterte Funktionen. +PV-Treiber sind nativ in den meisten aktuellen Linux-Kernels installiert. -#### Tools +#### Tools -Tools sind eine Reihe von Softwarekomponenten, die die Integration der virtuellen Maschine mit der Virtualisierungsinfrastruktur verbessern. +Die Tools sind eine Reihe von Softwarekomponenten, die die Integration der virtuellen Maschine in die Virtualisierungsinfrastruktur verbessern. -## Catalogs +## Kataloge -The catalog allows you to manage three essential types of items: +Der Katalog ermöglicht die Verwaltung von drei wesentlichen Elementtypen: -- Disk images (ISO) -- Configuration templates -- Pre-installed virtual machine templates +- Festplatten-Images (ISO) +- Konfigurationsvorlagen +- Vorinstallierte Vorlagen für virtuelle Maschinen -In the detailed view of a virtual machine template, you can review crucial information such as location, number of disks, and number of network adapters. +In der Detailansicht einer Vorlage für virtuelle Maschinen können Sie wichtige Informationen wie den Speicherort, die Anzahl der Festplatten oder die Anzahl der Netzwerkadapter einsehen. -When the number of virtual disks is listed as 0, this indicates a configuration template without a preinstalled operating system, allowing you to deploy your own customized environment. +Wenn die Anzahl der virtuellen Festplatten als 0 angegeben ist, handelt es sich um eine Konfigurationsvorlage ohne vorinstalliertes Betriebssystem, sodass Sie Ihre eigene benutzerdefinierte Umgebung bereitstellen können. -## Virtual Machine Replication +## Replikation virtueller Maschinen -The __Virtual Machine Replication__ feature of Cloud Temple ensures the protection and continuity of your critical data by automatically creating copies of your environments in a separate availability zone. This functionality, natively integrated into the Open Source IaaS offering, meets the most stringent requirements for business continuity and disaster recovery. +Die __Replikation virtueller Maschinen__ von Cloud Temple gewährleistet den Schutz und die Kontinuität Ihrer kritischen Daten durch eine automatisierte Kopie Ihrer Umgebungen in eine separate Verfügbarkeitszone. Diese Funktion, die nativ in das IaaS Open Source Produkt integriert ist, erfüllt die strengsten Anforderungen an Geschäftskontinuität und Disaster Recovery. -### Automated and Secure Protection +### Automatisierter und sicherer Schutz -Cloud Temple replication is based on a __SecNumCloud-certified__ infrastructure, ensuring: +Die Cloud-Temple-Replikation basiert auf einer __SecNumCloud-zertifizierten Infrastruktur__, die folgende Aspekte gewährleistet: -- __Asynchronous replication__: Continuous copying of your virtual machines without impacting production performance -- __Geographic separation__: Replicas stored in a different availability zone than the source -- __Full automation__: Fully automated process via the [Cloud Temple Console](../console/console.md) -- __Regulatory compliance__: Adherence to backup and business continuity requirements +- __Asynchrone Replikation__: Kontinuierliche Kopie Ihrer virtuellen Maschinen ohne Beeinträchtigung der Produktionsleistung +- __Geografische Trennung__: Speicherung der Replikate in einer anderen Verfügbarkeitszone als der Quelle +- __Vollständige Automatisierung__: Vollständig automatisierter Prozess über die [Cloud-Temple-Konsole](../console/console.md) +- __Regulatorische Konformität__: Einhaltung der Anforderungen an Datensicherung und Geschäftskontinuität -### Benefits of Replication +### Vorteile der Replikation -| Benefit | Description | +| Vorteil | Beschreibung | |-------------------------|------------------------------------------------------------------------------------------------------------------------------------------------| -| Business Continuity | Protection of your critical services in the event of a major incident at the primary site. | -| Geographic Protection | Replication to a distinct availability zone, safeguarding against localized disasters. | -| Temporal Flexibility | Choice of replication interval according to your needs: from 1 minute to 24 hours. | -| Ease of Management | Configuration and monitoring fully integrated into the Cloud Temple Console. | -| SecNumCloud Compliance | Qualified infrastructure ensuring the highest level of security for your sensitive data. | +| Geschäftskontinuität | Schutz Ihrer kritischen Dienste bei einem schwerwiegenden Vorfall auf dem primären Standort. | +| Geografischer Schutz | Replikation in eine separate Verfügbarkeitszone zum Schutz vor lokalen Katastrophen. | +| Zeitliche Flexibilität | Wahl des Replikationsintervalls nach Ihren Anforderungen: von 1 Minute bis zu 24 Stunden. | +| Einfache Verwaltung | Konfiguration und Überwachung vollständig in die Cloud Temple Console integriert. | +| SecNumCloud-Konformität | Qualifizierte Infrastruktur, die das höchste Sicherheitsniveau für Ihre sensiblen Daten gewährleistet. | -### Replication configuration +### Konfiguration der Replikation -#### Replication Policies +#### Replikationsrichtlinien -Creating a replication policy defines the protection settings for your virtual machines: +Die Erstellung einer Replikationsrichtlinie definiert die Schutzeinstellungen für Ihre virtuellen Maschinen: -- __Destination__: Selection of the target storage within the replication availability zone -- __Frequency__: Replication interval tailored to your recovery point objective (RPO) requirements -- __Retention__: Number of recovery points to retain +- __Ziel__ : Auswahl des Zielspeichers in der Verfügbarkeitszone für die Replikation +- __Häufigkeit__ : Replikationsintervall, angepasst an Ihre Wiederherstellungsanforderungen (RPO) +- __Aufbewahrung__ : Anzahl der aufbewahrten Wiederherstellungspunkte #### Verfügbare Intervalle -| Intervall | Empfehlung für den Einsatz | RPO (maximale Datenverlustgrenze) | -|-------------------------|-------------------------------------------|------------------------------------| -| __1 bis 59 Minuten__ | Kritische Echtzeit-Anwendungen | < 1 Stunde | -| __1 bis 24 Stunden__ | Geschäftsanwendungen und Standardumgebungen | < 24 Stunden | +| Intervall | Empfohlene Verwendung | RPO (Maximaler Datenverlust) | +|-------------------------|--------------------------------------------|-----------------------------| +| __1 bis 59 Minuten__ | Kritische Echtzeitanwendungen | < 1 Stunde | +| __1 bis 24 Stunden__ | Geschäftsanwendungen und Standardumgebungen | < 24 Stunden | -#### Association of Virtual Machines +#### Zuordnung der virtuellen Maschinen -After creating the policy, you can associate your virtual machines to protect: +Sobald die Richtlinie erstellt wurde, können Sie Ihre zu schützenden virtuellen Maschinen zuordnen: -- __Single selection__: Select VMs from the Console interface -- __Automatic validation__: Compatibility and prerequisites verification -- __Immediate activation__: Automatic start of replication after configuration +- __Einfache Auswahl__ : Auswahl der VMs über die Konsole +- __Automatische Validierung__ : Überprüfung der Kompatibilität und Voraussetzungen +- __Sofortige Aktivierung__ : Automatischer Start der Replikation nach der Konfiguration -### Replica Management +### Replikmanagement -#### Policy Overview +#### Richtlinienübersicht -The Cloud Temple Console provides a centralized view of your replication policies with: +Die Cloud Temple-Konsole bietet eine zentralisierte Übersicht Ihrer Replikationsrichtlinien mit: -- Name and frequency of each policy -- Destination availability zone -- Associated pool and storage -- Available management actions +- Name und Häufigkeit jeder Richtlinie +- Ziel-Verfügbarkeitszone +- Zugehöriger Pool und Speicher +- Verfügbare Verwaltungsaktionen -#### Replica Overview +#### Replikatsansicht -The replica table allows you to visualize: +Die Replikattabelle ermöglicht es Ihnen, Folgendes anzuzeigen: -- Names of replicated virtual machines -- Source and target locations -- Associated replication policy -- Export of data in CSV format +- Name der replizierten virtuellen Maschinen +- Quell- und Zielstandort +- Zugehörige Replikationsrichtlinie +- Export der Daten im CSV-Format ### Best Practices -#### Recommendations by workload type +#### Empfehlungen nach Workload-Typ -- __Critical applications__: Replication every 1–30 minutes to minimize data loss -- __Business applications__: Hourly or bi-hourly replication depending on requirements -- __Development environments__: Daily replication typically sufficient +- __Kritische Anwendungen__ : Replikation alle 1-30 Minuten, um Datenverlust zu minimieren +- __Geschäftsanwendungen__ : Stündliche oder zweistündliche Replikation je nach Bedarf +- __Entwicklungsumgebungen__ : Tägliche Replikation ist in der Regel ausreichend -#### Policy Planning +#### Richtlinienplanung -- Create distinct policies according to the criticality of your applications -- Clearly name your policies to facilitate management -- Regularly check the status of your replicas via the console -- Document your replication strategy for your teams +- Erstellen Sie separate Richtlinien basierend auf der Kritikalität Ihrer Anwendungen +- Benennen Sie Ihre Richtlinien klar, um das Management zu erleichtern +- Überprüfen Sie regelmäßig den Status Ihrer Replikate über die Konsole +- Dokumentieren Sie Ihre Replikationsstrategie für Ihre Teams -__Important Note:__ +__Wichtiger Hinweis:__ -*Replication does not replace a full backup strategy. It serves as an essential complement to ensure business continuity in the event of a major incident at your primary site.* +*Die Replikation ersetzt keine vollständige Backup-Strategie. Sie ist eine wesentliche Ergänzung, um die Geschäftskontinuität im Falle eines schwerwiegenden Vorfalls auf Ihrem primären Standort sicherzustellen.* -## Hochverfügbarkeit +## Hohe Verfügbarkeit -Die Hochverfügbarkeit stellt die kontinuierliche Dienstverfügbarkeit virtueller Maschinen (VMs) sicher, falls ein physischer Host innerhalb eines OpenIaaS-Pools ausfällt. -Mit der Hochverfügbarkeit (HA) sendet jeder Host im Pool regelmäßig Lebenszeichen an seine Partner über den gemeinsam genutzten Speicher (Block Storage Heartbeat). Falls über einen längeren Zeitraum keine Antwort mehr erfolgt, wird der Host als ausgefallen betrachtet. +Die hohe Verfügbarkeit gewährleistet die Betriebskontinuität virtueller Maschinen (VMs) im Falle eines Ausfalls eines physischen Hosts innerhalb eines OpenIaaS-Pools. +Bei hoher Verfügbarkeit (HA) sendet jeder Host im Pool regelmäßig Lebenssignale an seine Peer-Hosts über den gemeinsamen Speicher (Block Storage Heartbeat). Bei ausbleibenden Antworten über einen längeren Zeitraum gilt der Host als ausgefallen. -Ein als Heartbeat vorgesehener Block-Speicher bedeutet, dass er als Grundlage zur Authentifizierung von Hosts dient, die nicht mehr antworten. +Ein als Heartbeat konfiguriertes Block Storage dient als Grundlage zur Überprüfung von Hosts, die nicht mehr antworten. -Damit die Hochverfügbarkeit in einem OpenIaaS-Pool korrekt konfiguriert werden kann, ist es unbedingt erforderlich, über __mindestens zwei Hosts__ zu verfügen, die miteinander verbunden sind. +Für eine korrekte Konfiguration der hohen Verfügbarkeit in einem OpenIaaS-Pool ist zwingend erforderlich, dass __mindestens zwei Hosts__ verbunden sind. -Jede VM muss mit einer Priorität für den Neustart im Rahmen der Hochverfügbarkeit konfiguriert werden: +Jede VM muss mit einer Prioritätsstufe für den Neustart im Rahmen der hohen Verfügbarkeit konfiguriert werden: -#### Disabled +#### Disabled -High availability is not configured. In the event of host failure, the virtual machine will not be restarted. + Die Hochverfügbarkeit ist nicht konfiguriert. Bei einem Ausfall des Hosts wird die virtuelle Maschine nicht neu gestartet. #### Restart -In case of host failure, the virtual machine will be automatically restarted as soon as resources become available in the pool. Virtual machines configured in "restart" mode are prioritized over those configured in "best-effort" mode. + Bei einem Host-Ausfall wird die virtuelle Maschine automatisch neu gestartet, sobald im Pool Ressourcen verfügbar sind. Virtuelle Maschinen, die im Modus "restart" konfiguriert sind, werden vorrangig behandelt, vor denen, die im Modus "best-effort" konfiguriert sind. #### Best-Effort -In the event of host failure, the virtual machine will be automatically restarted only if resources remain available after processing all virtual machines configured in "restart" mode. The "Best-effort" mode performs only a single attempt; therefore, if resources are insufficient, the virtual machine will not be restarted. + Im Falle eines Host-Ausfalls wird die virtuelle Maschine nur dann automatisch neu gestartet, wenn nach der Verarbeitung aller im Modus "restart" konfigurierten virtuellen Maschinen noch Ressourcen verfügbar sind. Der Modus "Best-Effort" unternimmt nur einen Versuch, daher wird die virtuelle Maschine nicht neu gestartet, wenn die Ressourcen nicht ausreichen. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/iaas_opensource.md b/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/iaas_opensource.md index e026d491..8642bf31 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/iaas_opensource.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/iaas_opensource.md @@ -1,26 +1,26 @@ --- -title: Übersicht +title: Überblick --- -Das Open Source IaaS-Produkt von Cloud Temple: eine einzigartige Kombination aus Leistung, Sicherheit und Transparenz. +Das **IaaS-OpenSource-Angebot von Cloud Temple**: eine einzigartige Verbindung aus Leistung, Sicherheit und Transparenz. -Dieses Angebot gewährleistet eine vollständige Kontrolle über Ihre kritischen Umgebungen und sorgt gleichzeitig für Sicherheit, Kontinuität und regulatorische Konformität. -Mit skalierbaren Ressourcen und automatisiertem Management profitieren Sie von einer leistungsstarken und bedarfsgerechten Infrastruktur. Nutzen Sie die Kraft von Open Source mit der Zuverlässigkeit und dem Support von Cloud Temple. +Dieses Produkt gewährleistet eine vollständige Kontrolle Ihrer kritischen Umgebungen und garantiert gleichzeitig Sicherheit, Kontinuität und regulatorische Konformität. +Mit skalierbaren Ressourcen und automatisiertem Management profitieren Sie von einer leistungsstarken und an Ihre Anforderungen angepassten Infrastruktur. Nutzen Sie die Leistungsfähigkeit von Open Source mit der Zuverlässigkeit und dem Support von Cloud Temple.

Konzepte

-

Entdecken Sie die grundlegenden Prinzipien und Konzepte, um unsere Infrastruktur zu verstehen und zu beherrschen.

+

Entdecken Sie die Grundlagen und wesentlichen Prinzipien, um unsere Infrastruktur zu verstehen und zu beherrschen.

Konzepte erkunden →
-

Quickstart

-

Beginnen Sie schnell mit unseren Ressourcen, indem Sie klaren und einfachen Anweisungen folgen.

- Quickstart starten → +

Schnellstart

+

Starten Sie schnell mit unseren Ressourcen, indem Sie klaren und einfachen Anweisungen folgen.

+ Schnellstart starten →
-
+

Tutorials

-

Lernen Sie Schritt für Schritt, wie Sie unsere Services mit detaillierten Anleitungen konfigurieren und nutzen.

+

Lernen Sie Schritt für Schritt die Konfiguration und Nutzung unserer Dienste mit detaillierten Anleitungen.

Tutorials entdecken →
@@ -28,22 +28,22 @@ Mit skalierbaren Ressourcen und automatisiertem Management profitieren Sie von e ## Einkaufsplattformen
-

Sie sind im öffentlichen Sektor tätig? Das IaaS-Cloud-Temple-Angebot ist über folgende Plattformen verfügbar:

+

Sind Sie ein Akteur im öffentlichen Sektor? Das Produkt IaaS Cloud Temple ist verfügbar über:

@@ -51,4 +51,4 @@ Mit skalierbaren Ressourcen und automatisiertem Management profitieren Sie von e Mehr erfahren → -
+
\ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/quickstart.md b/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/quickstart.md index ce5de3e0..6ac13440 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/quickstart.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/quickstart.md @@ -18,211 +18,212 @@ import openIaasVmConsoleBtn from '@site/docs/iaas_opensource/images/open_iaas_vm import openIaasVmConsoleOpen from '@site/docs/iaas_opensource/images/open_iaas_vm_console_open.png' import openIaasVmConsoleClipboard from '@site/docs/iaas_opensource/images/open_iaas_vm_console_clipboard.png' -## Calculation +## Berechnung -### Virtual Machine Management +### Verwaltung virtueller Maschinen -The interface for managing your virtual machines is available in the Console under the __'OpenIaaS'__ menu located on the green bar on the left side of the screen. +Die Verwaltungsoberfläche Ihrer virtuellen Maschinen ist in der Konsole im Menü __'OpenIaaS'__ verfügbar, das sich auf der grünen Leiste links auf dem Bildschirm befindet. ### Liste der virtuellen Maschinen -In der Sektion __'Virtuelle Maschinen'__ haben Sie Zugriff auf die Liste Ihrer auf Ihrem vertrauenswürdigen Cloud-System gehosteten virtuellen Maschinen. +Im Bereich __'Virtuelle Maschinen'__ haben Sie Zugriff auf die Liste Ihrer virtuellen Maschinen, die in Ihrer vertrauenswürdigen Cloud gehostet werden. -Für jede virtuelle Maschine stehen Ihnen folgende Informationen zur Verfügung: +Für jede virtuelle Maschine stehen Ihnen die folgenden Informationen zur Verfügung: - Der Name. -- Der Status (aus, an). +- Der Status (ausgeschaltet, eingeschaltet). - Die Verfügbarkeitszone (AZ). - Das Betriebssystem. -- Die Anzahl der virtuellen CPU-Kerne (vCPU). -- Die Menge an virtuellem Arbeitsspeicher (vRAM). +- Die Anzahl der virtuellen CPUs (vCPU). +- Die Größe des virtuellen Arbeitsspeichers (vRAM). ### Aktionen für virtuelle Maschinen Die folgenden Aktionen sind über diese Schnittstelle möglich: -- Aktualisieren der Liste der virtuellen Maschinen. -- Filtern der Liste. -- Suchen einer virtuellen Maschine anhand ihres Namens. -- Erstellen einer neuen virtuellen Maschine. +- Liste der virtuellen Maschinen aktualisieren. +- Liste filtern. +- Eine virtuelle Maschine nach ihrem Namen suchen. +- Eine neue virtuelle Maschine erstellen. -Wenn Sie auf den grünen Dropdown-Pfeil rechts neben einer virtuellen Maschine in der Liste klicken, erhalten Sie Zugriff auf alle verfügbaren Informationen zu dieser Maschine. +Wenn Sie auf den grünen Dropdown-Pfeil rechts der Liste für eine virtuelle Maschine klicken, erhalten Sie Zugriff auf alle Informationen zu dieser Maschine. -Ein Schnellleistenband ermöglicht die Durchführung folgender Aktionen: +Eine Schnellleiste ermöglicht die folgenden Aktionen: -- Virtuelle Maschine starten. -- Virtuelle Maschine herunterfahren. -- Virtuelle Maschine neu starten. +- Virtuelle Maschine einschalten. +- Sie ausschalten. +- Sie neu starten. - Konsole öffnen. -- ISO-Medium einlegen. -- ISO-Medium auswerfen. -- Virtuelle Maschine in ein Template konvertieren. -- Virtuelle Maschine verschieben. -- Virtuelle Maschine umbenennen. -- Virtuelle Maschine löschen. +- ISO-Image einbinden. +- ISO-Image aushängen. +- Virtuelle Maschine in eine Vorlage konvertieren. +- Sie verschieben. +- Sie umbenennen. +- Sie löschen. -Im Register __„Allgemein“__ finden Sie detaillierte Informationen zur virtuellen Maschine, wie beispielsweise ihren physischen Standort (AZ, Pool, Host), den RAM, die CPU, die IP-Adressen und weitere Angaben. +Im Reiter '__Allgemein__' finden Sie detaillierte Informationen zu Ihrer virtuellen Maschine, wie z. B. den physischen Standort (AZ, Pool, Host), den RAM, den CPU, die IP-Adressen und weitere. -Ein Register __„Erweitert“__ ermöglicht den Zugriff auf spezifischere Informationen: +Ein Reiter '__Erweitert__' ermöglicht den Zugriff auf spezifischere Informationen: - UUID der virtuellen Maschine - Guest Tools -- Gastbetriebssystem +- Gast-Betriebssystem - DVD-Laufwerk -Zusätzlich können bestimmte Einstellungen geändert werden, wie beispielsweise: +Sowie das Ändern bestimmter Optionen, wie z. B.: -- Startreihenfolge +- Die Startreihenfolge - Secure Boot -- Automatisches Starten (nicht möglich, wenn keine Sicherungspolitik mit der VM verknüpft ist) +- Der automatische Start (nicht möglich, wenn keine Sicherungsrichtlinie mit der VM verknüpft ist) -### Virtual Machine Console +### Konsole einer virtuellen Maschine -The console of a virtual machine is accessible from the list of virtual machines by clicking the __'Console'__ icon: +Die Konsole einer virtuellen Maschine ist über die Liste der virtuellen Maschinen zugänglich, indem Sie auf das Symbol __'Konsole'__ klicken: -A new tab opens in your browser, displaying the console of your machine, based on a VNC client: +Ein neuer Browser-Tab öffnet sich und zeigt die Konsole Ihrer Maschine, die auf einem VNC-Client basiert: -In the VNC menu, you can: +Im VNC-Menü ist es möglich: -- request the transmission of specific keys, -- force a keyboard mapping (in case your virtual machine uses a different keyboard layout than your web browser), -- open a text field that can be sent to the machine. This method replaces the previous non-functional clipboard, -- switch to full-screen mode, -- change the window size (scaling). +- bestimmte Tasten zu senden, +- ein Tastaturlayout zu erzwingen (falls Ihre virtuelle Maschine nicht über dasselbe Tastaturlayout wie Ihr Webbrowser verfügt), +- ein Textfeld zu öffnen, das an die Maschine gesendet werden kann. Diese Methode ersetzt den alten, nicht funktionierenden Zwischenablage-Modus, +- in den Vollbildmodus zu wechseln, +- die Fenstergröße zu ändern (Skalierung). -#### Keyboard Layout Support +#### Unterstützung von Tastaturlayouts -The input entered in the console depends on the keyboard language of your web browser, the keyboard language of the virtual machine, and whether the 'enforce keyboard' option on the left side of the screen is enabled or not. +Die in der Konsole eingegebene Eingabe hängt von der Tastatursprache Ihres Webbrowsers, der Tastatursprache +der virtuellen Maschine sowie der Aktivierung oder Deaktivierung der Option 'enforce keyboard' links auf dem Bildschirm ab. +Nachfolgend eine Übersicht der möglichen Situationen: -Below is a summary of the possible scenarios: +| Tastatursprache der physischen Maschine (Eingabe) | Tastatursprache der virtuellen Maschine | Option 'enforce keyboard' ausgewählt | Ergebnis (Ausgabe) | +| ------------------------------------------------- | ----------------------------------------- | -------------------------------------- | ------------------------ | +| Französisch | Französisch | Nein | ✅ | +| Französisch | Französisch | Ja | Nicht empfohlen | +| Französisch | Englisch | Nein | Englisch | +| Französisch | Englisch | Ja | ✅ | +| Englisch | Französisch | Nein | Französisch | +| Englisch | Französisch | Ja | ✅ | +| Englisch | Englisch | Nein | ✅ | +| Englisch | Englisch | Ja | Nicht empfohlen | -| Physical Machine Keyboard Language (input) | Virtual Machine Keyboard Language | 'Enforce Keyboard' Option Selected | Result (output) | -|--------------------------------------------|-----------------------------------|------------------------------------|------------------------| -| French | French | No | ✅ | -| French | French | Yes | Not recommended | -| French | English | No | English | -| French | English | Yes | ✅ | -| English | French | No | French | -| English | French | Yes | ✅ | -| English | English | No | ✅ | -| English | English | Yes | Not recommended | +__Hinweis__ : -__Note__: +- Falls bestimmte Zeichen bei der manuellen Eingabe nicht übernommen werden, können Sie es über die Zwischenablage versuchen. -- If certain characters do not appear during manual input, you may try copying them from the clipboard. +#### Funktionsweise der Zwischenablage -#### Clipboard Functionality - -This feature allows you to send an entire string of characters to your virtual machine. It is important to note that the "enforce keyboard" option affects how this string of characters is transmitted to your virtual machine. If you notice during console input that the "enforce keyboard" option is required, make sure to enable it before using the clipboard. -This functionality can be used to send a password, a command, or the content of a configuration file, for example: +Diese Funktion ermöglicht es Ihnen, eine gesamte Zeichenkette an Ihre virtuelle Maschine zu senden. Es ist wichtig zu beachten, dass die Schaltfläche "enforce keyboard" beeinflusst, wie diese Zeichenkette +an Ihre virtuelle Maschine übermittelt wird. Falls Sie bei der Eingabe in der Konsole feststellen, dass die Option "enforce keyboard" erforderlich ist, denken Sie daran, sie vor der Nutzung der Zwischenablage zu aktivieren. +Diese Funktion kann beispielsweise zum Senden eines Passworts, eines Befehls oder des Inhalts einer Konfigurationsdatei verwendet werden: -Upon clicking the "Paste" button, the content of your text field is sent to your virtual machine. +Nach einem Klick auf die Schaltfläche "Paste" wird der Inhalt Ihres Textfelds an Ihre virtuelle Maschine gesendet. -## Replication +## Replikation -### Access to Replication Management +### Zugriff auf die Replikationsverwaltung -The replication management interface is available in the Console under the menu __'OpenIaaS'__ > __'Replication'__, located on the green bar on the left side of the screen. +Die Verwaltungsoberfläche für die Replikation ist in der Konsole im Menü __'OpenIaaS'__ > __'Replikation'__ auf der grünen Leiste links auf dem Bildschirm verfügbar. -### Creating a replication policy +### Erstellen einer Replikationsrichtlinie -In the __'Replication'__ section, you can create policies defining the protection settings for your virtual machines. +Im Bereich __'Replikation'__ können Sie Richtlinien erstellen, die die Schutzparameter Ihrer virtuellen Maschinen definieren. -To create a new policy, click the __'Add policy'__ button. A form opens with the following steps: +Um eine neue Richtlinie zu erstellen, klicken Sie auf die Schaltfläche __'Richtlinie hinzufügen'__. Es öffnet sich ein Formular mit den folgenden Schritten: -#### Step 1: General Information +#### Schritt 1: Allgemeine Informationen -- __Name__ : Provide an explicit name for your policy -- __Frequency__ : Select the replication interval (1–59 minutes or 1–24 hours) +- __Name__ : Geben Sie Ihrer Richtlinie einen eindeutigen Namen +- __Häufigkeit__ : Wählen Sie das Replikationsintervall (1–59 Minuten oder 1–24 Stunden) -#### Step 2: Storage Selection +#### Schritt 2 : Speicherauswahl -- __Availability Zone__: Select the destination zone -- __Pool__: Choose the resource pool -- __Block Storage__: Select the destination storage +- __Verfügbarkeitszone__ : Wählen Sie die Zielzone aus +- __Pool__ : Wählen Sie den Ressourcenpool aus +- __Block Storage__ : Wählen Sie den Zielspeicher aus -#### Schritt 3: Überprüfung +#### Schritt 3 : Validierung -Überprüfen Sie die Einstellungen und klicken Sie auf __'Hinzufügen'__, um die Richtlinie zu erstellen. +Überprüfen Sie die Parameter und klicken Sie auf __'Hinzufügen'__, um die Richtlinie zu erstellen. -### Associating a VM with Replication +### Zuordnung einer VM zur Replikation -To protect a virtual machine, go to the details of your VM from the list of virtual machines. +Um eine virtuelle Maschine zu schützen, rufen Sie die Details Ihrer VM aus der Liste der virtuellen Maschinen auf. -In the VM's detailed view, you will find a __'Replication'__ section: +In der Detailansicht der VM finden Sie einen Abschnitt __'Replikation'__ : -Steps to associate a VM with replication: +Die Schritte zum Zuordnen einer VM zur Replikation: -1. Click on __'Configure a policy'__ -2. Select the desired replication policy from the dropdown list -3. Confirm your selection +1. Klicken Sie auf __'Richtlinie konfigurieren'__ +2. Wählen Sie die gewünschte Replikationsrichtlinie aus der Dropdown-Liste aus +3. Bestätigen Sie Ihre Auswahl -Replication will start automatically after confirmation. +Die Replikation startet automatisch nach der Bestätigung. -### Policy and Replica Management +### Verwaltung von Richtlinien und Replikaten -#### Policy Overview +#### Ansicht der Richtlinien -The __'Policies'__ tab allows you to view all your replication policies: +Der Reiter __'Richtlinien'__ ermöglicht es Ihnen, alle Ihre Replikationsrichtlinien anzuzeigen: -For each policy, you have access to the following information: +Für jede Richtlinie stehen Ihnen die folgenden Informationen zur Verfügung: -- Its name -- Its replication frequency -- The destination availability zone -- The associated pool -- The block storage used +- Der Name +- Die Replikationshäufigkeit +- Die Ziel-Verfügbarkeitszone +- Der zugeordnete Pool +- Der verwendete Block Storage -Available actions include: +Verfügbare Aktionen umfassen: -- View details for each policy -- Modify parameters -- Delete an unused policy +- Details jeder Richtlinie anzeigen +- Einstellungen bearbeiten +- Nicht genutzte Richtlinien löschen -#### Replica View +#### Replikate-Ansicht -The __'Replicas'__ tab displays all virtual machines currently being replicated: +Die Registerkarte __'Replikate'__ zeigt alle virtuellen Maschinen an, die gerade repliziert werden: -You can view: +Sie können einsehen: -- The names of the replicated virtual machines -- The source and target locations -- The associated replication policy +- Der Name der replizierten virtuellen Maschinen +- Der Quell- und Zielstandort +- Die zugehörige Replikationsrichtlinie -Available actions include: +Verfügbare Aktionen umfassen: -- Export data to CSV format -- View replication details -- Manage replicas by policy +- Export der Daten im CSV-Format +- Anzeigen der Replikationsdetails +- Verwaltung der Replikate nach Richtlinie \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/create_vm.md b/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/create_vm.md index 9d25c412..d5d02b34 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/create_vm.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/create_vm.md @@ -1,217 +1,217 @@ --- -title: Créer une machine virtuelle +title: Eine virtuelle Maschine erstellen --- -Ce tutoriel vous guide à travers les différentes méthodes de création d'une machine virtuelle dans votre environnement OpenIaaS. +Dieses Tutorial führt Sie durch die verschiedenen Methoden zur Erstellung einer virtuellen Maschine in Ihrer OpenIaaS-Umgebung. -## Introduction +## Einführung -La Console Cloud Temple vous propose **trois méthodes** pour créer une machine virtuelle OpenIaaS : +Die Cloud Temple-Konsole bietet **drei Methoden** zum Erstellen einer OpenIaaS-virtuellen Maschine an: -1. **Depuis un Modèle** : Déploiement rapide à partir d'un modèle préconfiguré -2. **Import XVA** : Import d'une machine virtuelle depuis un fichier XVA -3. **Depuis le Marketplace** : Déploiement d'une image certifiée du catalogue Cloud Temple +1. **Aus einem Modell** : Schnelle Bereitstellung aus einem vorkonfigurierten Modell +2. **XVA-Import** : Import einer virtuellen Maschine aus einer XVA-Datei +3. **Über den Marketplace** : Bereitstellung eines zertifizierten Images aus dem Cloud Temple-Katalog -## Prérequis +## Voraussetzungen -- Disposer d'un environnement OpenIaaS configuré -- Avoir les permissions nécessaires pour créer des machines virtuelles -- Pour le mode XVA : disposer d'un fichier XVA valide -- Pour le mode Marketplace : avoir accès au catalogue Marketplace +- Über eine konfigurierte OpenIaaS-Umgebung verfügen +- Über die erforderlichen Berechtigungen zum Erstellen virtueller Maschinen verfügen +- Für den XVA-Modus: über eine gültige XVA-Datei verfügen +- Für den Marketplace-Modus: Zugriff auf den Marketplace-Katalog haben -## Accès à la création +## Zugriff auf die Erstellung -Depuis le menu **OpenIaaS** > **Machines Virtuelles**, cliquez sur le bouton **Nouvelle machine virtuelle**. +Wählen Sie im Menü **OpenIaaS** > **Virtuelle Maschinen** die Schaltfläche **Neue virtuelle Maschine** aus. -Une fenêtre s'ouvre vous présentant les trois méthodes de déploiement disponibles. Sélectionnez la méthode souhaitée pour continuer. +Es öffnet sich ein Fenster, das Ihnen die drei verfügbaren Bereitstellungsmethoden anzeigt. Wählen Sie die gewünschte Methode aus, um fortzufahren. --- -## Méthode 1 : Déploiement depuis un Modèle +## Methode 1 : Bereitstellung aus einem Modell -Cette méthode permet de créer rapidement une machine virtuelle à partir d'un modèle préconfiguré. +Diese Methode ermöglicht die schnelle Erstellung einer virtuellen Maschine aus einem vorkonfigurierten Modell. -### Étape 1 : Sélection du Pool et du Modèle +### Schritt 1: Auswahl des Pools und des Modells -Sélectionnez d'abord le **Pool** (zone de disponibilité) où vous souhaitez déployer votre machine virtuelle, puis choisissez le **Modèle** à utiliser comme base. +Wählen Sie zunächst den **Pool** (Verfügbarkeitszone) aus, in dem Sie Ihre virtuelle Maschine bereitstellen möchten, und wählen Sie anschließend das **Modell** als Basis aus. -### Étape 2 : Informations générales +### Schritt 2: Allgemeine Informationen -Configurez les paramètres de base de votre machine virtuelle : +Konfigurieren Sie die grundlegenden Einstellungen Ihrer virtuellen Maschine: -- **Nom** : Nom unique de la machine virtuelle (caractères alphanumériques, tirets, underscores, points et espaces autorisés) -- **CPU** : Nombre de cœurs virtuels (minimum 1) -- **RAM** : Quantité de mémoire avec sélection de l'unité (Mo, Go, To) +- **Name** : Eindeutiger Name der virtuellen Maschine (alphanumerische Zeichen, Bindestriche, Unterstriche, Punkte und Leerzeichen sind erlaubt) +- **CPU** : Anzahl der virtuellen Kerne (Minimum 1) +- **RAM** : Speichermenge mit Auswahl der Einheit (MB, GB, TB) -### Étape 3 : Cloud Init (optionnel) +### Schritt 3: Cloud Init (optional) -Cloud Init permet d'automatiser la configuration initiale de votre machine virtuelle au premier démarrage. +Cloud Init ermöglicht die Automatisierung der Erstkonfiguration Ihrer virtuellen Maschine beim ersten Start. -Vous pouvez configurer : +Sie können Folgendes konfigurieren: -- **Cloud Config** : Configuration générale (hostname, utilisateurs, packages, etc.) -- **Network Config** : Configuration réseau au format Netplan v2 -- **Destroy After Boot** : Option pour supprimer la configuration Cloud Init après le premier démarrage +- **Cloud Config** : Allgemeine Konfiguration (Hostname, Benutzer, Pakete usw.) +- **Network Config** : Netzwerkkonfiguration im Netplan v2-Format +- **Destroy After Boot** : Option zum Löschen der Cloud Init-Konfiguration nach dem ersten Start :::info -Cette étape est entièrement optionnelle. Si vous n'avez pas besoin de Cloud Init, laissez les champs par défaut et passez à l'étape suivante. +Dieser Schritt ist vollständig optional. Wenn Sie Cloud Init nicht benötigen, lassen Sie die Felder auf den Standardwerten und fahren Sie mit dem nächsten Schritt fort. ::: -### Étape 4 : Configuration des disques +### Schritt 4: Konfiguration der Festplatten -Gérez les disques virtuels de votre machine virtuelle. Les disques du modèle sont automatiquement ajoutés et ne peuvent pas être supprimés. +Verwalten Sie die virtuellen Festplatten Ihrer virtuellen Maschine. Die Festplatten des Modells werden automatisch hinzugefügt und können nicht gelöscht werden. -Pour chaque disque, configurez : +Konfigurieren Sie für jede Festplatte Folgendes: -- **Nom** : Nom unique du disque -- **Capacité** : Taille du disque avec sélection de l'unité (Mo, Go, To) -- **Block Storage** : Stockage de destination +- **Name** : Eindeutiger Name der Festplatte +- **Kapazität** : Größe der Festplatte mit Auswahl der Einheit (MB, GB, TB) +- **Block Storage** : Ziel-Speicher -Vous pouvez ajouter jusqu'à 24 disques virtuels au total. Cliquez sur **Ajouter un disque** pour créer un nouveau disque. +Sie können insgesamt bis zu 24 virtuelle Festplatten hinzufügen. Klicken Sie auf **Festplatte hinzufügen**, um eine neue Festplatte zu erstellen. :::warning -Si vous configurez Cloud Init, au moins un disque est obligatoire pour stocker la configuration. +Wenn Sie Cloud-Init konfigurieren, ist mindestens eine Festplatte erforderlich, um die Konfiguration zu speichern. ::: -### Étape 5 : Configuration des adaptateurs réseau +### Schritt 5: Konfiguration der Netzwerkadapter -Configurez les interfaces réseau de votre machine virtuelle (maximum 7 adaptateurs). +Konfigurieren Sie die Netzwerkinterfaces Ihrer virtuellen Maschine (maximal 7 Adapter). -Pour chaque adaptateur réseau : +Für jeden Netzwerkadapter: -- **Réseau** : Sélectionnez le réseau virtuel (avec indication VPC ou Private Backbone) -- **Adresse MAC** : Optionnelle, générée automatiquement si non spécifiée +- **Netzwerk** : Wählen Sie das virtuelle Netzwerk (mit Hinweis auf VPC oder Private Backbone) +- **MAC-Adresse** : Optional, wird automatisch generiert, wenn nicht angegeben :::info[VPC] -La configuration des réseaux VPC n'est disponible que depuis l'onglet Réseau de la machine virtuelle une fois l'opération terminée. La configuration depuis ce formulaire sera disponible prochainement. +Die Konfiguration von VPC-Netzwerken ist erst nach Abschluss des Vorgangs über den Reiter „Netzwerk“ der virtuellen Maschine verfügbar. Die Konfiguration über dieses Formular wird in Kürze bereitgestellt. ::: -Cliquez sur **Ajouter un adaptateur réseau** pour créer une nouvelle interface. +Klicken Sie auf **Netzwerkadapter hinzufügen**, um eine neue Schnittstelle zu erstellen. -### Étape 6 : Haute disponibilité +### Schritt 6: Hohe Verfügbarkeit -Configurez le niveau de haute disponibilité de votre machine virtuelle. +Konfigurieren Sie die Hochverfügbarkeitsstufe Ihrer virtuellen Maschine. :::tip -Pour plus d'informations sur la configuration de la haute disponibilité et les différents modes disponibles, consultez le guide dédié : [Gestion de la haute disponibilité d'une machine virtuelle](./high_availability/manage_vm) +Weitere Informationen zur Konfiguration der Hochverfügbarkeit und den verfügbaren Modi finden Sie im dazugehörigen Leitfaden: [Verwaltung der Hochverfügbarkeit einer virtuellen Maschine](./high_availability/manage_vm) ::: -### Étape 7 : Résumé et validation +### Schritt 7: Zusammenfassung und Validierung -Vérifiez l'ensemble de votre configuration avant de créer la machine virtuelle. +Überprüfen Sie Ihre gesamte Konfiguration, bevor Sie die virtuelle Maschine erstellen. -Le résumé affiche tous les paramètres configurés : +Die Zusammenfassung zeigt alle konfigurierten Parameter an: -- Informations générales (nom, CPU, RAM) -- Modèle sélectionné -- Cloud Init (si configuré) -- Disques -- Adaptateurs réseau -- Haute disponibilité +- Allgemeine Informationen (Name, CPU, RAM) +- Ausgewähltes Modell +- Cloud-Init (falls konfiguriert) +- Datenträger +- Netzwerkadapter +- Hohe Verfügbarkeit -Cliquez sur **Créer** pour lancer le déploiement de votre machine virtuelle. +Klicken Sie auf **Erstellen**, um die Bereitstellung Ihrer virtuellen Maschine zu starten. --- -## Méthode 2 : Import depuis un fichier XVA +## Methode 2: Import aus einer XVA-Datei -Cette méthode permet d'importer une machine virtuelle depuis un fichier au format XVA (XenServer Virtual Appliance). +Diese Methode ermöglicht den Import einer virtuellen Maschine aus einer Datei im XVA-Format (XenServer Virtual Appliance). -### Présentation du format XVA +### Beschreibung des XVA-Formats -Le format XVA est le format d'export/import natif de XCP-ng et XenServer. Il contient une machine virtuelle complète avec ses disques et sa configuration. +Das XVA-Format ist das native Export-/Importformat von XCP-ng und XenServer. Es enthält eine vollständige virtuelle Maschine mit ihren Festplatten und ihrer Konfiguration. -### Étape 1 : Nom de la machine virtuelle +### Schritt 1: Name der virtuellen Maschine -Définissez le nom de votre machine virtuelle. +Legen Sie den Namen Ihrer virtuellen Maschine fest. -Le nom doit respecter les mêmes règles que pour le déploiement depuis un modèle (caractères alphanumériques, tirets, underscores, points et espaces). +Der Name muss denselben Regeln entsprechen wie bei der Bereitstellung aus einer Vorlage (alphanumerische Zeichen, Bindestriche, Unterstriche, Punkte und Leerzeichen). -### Étape 2 : Upload du fichier XVA +### Schritt 2: XVA-Datei hochladen -Importez votre fichier XVA depuis votre ordinateur. +Laden Sie Ihre XVA-Datei von Ihrem Computer hoch. :::info -Le fichier doit avoir l'extension `.xva`. Les noms de fichiers ne doivent contenir que des caractères alphanumériques, tirets, underscores et points (pas d'espaces). +Die Datei muss die Erweiterung `.xva` haben. Dateinamen dürfen nur alphanumerische Zeichen, Bindestriche, Unterstriche und Punkte enthalten (keine Leerzeichen). ::: -Glissez-déposez votre fichier dans la zone prévue ou cliquez pour sélectionner le fichier depuis votre explorateur. +Ziehen Sie Ihre Datei in den vorgesehenen Bereich oder klicken Sie, um die Datei über Ihren Datei-Explorer auszuwählen. -### Étape 3 : Sélection du stockage +### Schritt 3: Speicherauswahl -Choisissez le stockage de destination pour votre machine virtuelle importée. +Wählen Sie den Zielspeicher für Ihre importierte virtuelle Maschine. -Sélectionnez un Block Storage dans l'arborescence. Le système vérifie automatiquement que l'espace disponible est suffisant pour accueillir votre fichier XVA. +Wählen Sie einen Block Storage im Verzeichnisbaum aus. Das System überprüft automatisch, ob der verfügbare Speicherplatz ausreicht, um Ihre XVA-Datei aufzunehmen. -### Étape 4 : Résumé et validation +### Schritt 4: Zusammenfassung und Validierung -Vérifiez les informations avant de lancer l'import. +Überprüfen Sie die Informationen, bevor Sie den Import starten. -Le résumé affiche : +Die Zusammenfassung zeigt: -- Le nom de la VM -- Le type de déploiement (XVA) -- Le fichier XVA et sa taille -- Le stockage de destination +- Der Name der VM +- Der Bereitstellungstyp (XVA) +- Die XVA-Datei und ihre Größe +- Der Zielspeicher -Cliquez sur **Créer** pour lancer l'import de votre machine virtuelle. +Klicken Sie auf **Erstellen**, um den Import Ihrer virtuellen Maschine zu starten. -### À propos de l'option skip_set_template +### Über die Option skip_set_template -Lors de l'import d'un fichier XVA, l'option `skip_set_template` détermine si le résultat de l'import sera une machine virtuelle directement utilisable ou un modèle. Cette option est notamment utilisée avec des outils d'automatisation comme Packer. Plus d'informations : [documentation XCP-ng](https://xcp-ng.org/blog/2024/02/22/using-packer-with-xcp-ng/). +Beim Import einer XVA-Datei bestimmt die Option `skip_set_template`, ob das Importergebnis eine direkt verwendbare virtuelle Maschine oder eine Vorlage ist. Diese Option wird insbesondere mit Automatisierungstools wie Packer verwendet. Weitere Informationen: [Dokumentation XCP-ng](https://xcp-ng.org/blog/2024/02/22/using-packer-with-xcp-ng/). --- -## Méthode 3 : Déploiement depuis le Marketplace +## Methode 3: Bereitstellung über den Marketplace -Le Marketplace Cloud Temple propose des images de machines virtuelles certifiées et prêtes à l'emploi. +Der Cloud Temple Marketplace bietet zertifizierte und sofort einsatzbereite Images für virtuelle Maschinen an. -### Sélection d'une image Marketplace +### Auswahl eines Marketplace-Images -Parcourez le catalogue des images disponibles pour OpenIaaS. +Durchsuchen Sie den Katalog der für OpenIaaS verfügbaren Images. -Seules les images compatibles avec la plateforme OpenIaaS sont affichées. +Es werden nur mit der OpenIaaS-Plattform kompatible Images angezeigt. -### Configuration de la machine virtuelle +### Konfiguration der virtuellen Maschine -La configuration depuis le Marketplace suit un processus similaire au déploiement depuis un modèle, avec quelques spécificités : +Die Konfiguration über den Marketplace folgt einem ähnlichen Prozess wie die Bereitstellung aus einem Modell, mit einigen Besonderheiten: -- Les caractéristiques système (OS, CPU, RAM) sont prédéfinies par l'image Marketplace -- Vous pouvez personnaliser le nom de la VM -- Cloud Init est disponible pour la configuration initiale -- Le mapping réseau permet d'associer les interfaces réseau de l'image à vos réseaux +- Die Systemmerkmale (OS, CPU, RAM) sind durch das Marketplace-Image vorgegeben +- Sie können den Namen der VM anpassen +- Cloud Init ist für die Erstkonfiguration verfügbar +- Das Netzwerk-Mapping ermöglicht die Zuordnung der Netzwerkschnittstellen des Images zu Ihren Netzwerken :::tip -Pour un guide détaillé du déploiement Marketplace, consultez le tutoriel dédié : [Déployer une image sur OpenIaaS](../../marketplace/tutorials/deploy_openiaas) +Für eine detaillierte Anleitung zur Marketplace-Bereitstellung lesen Sie das entsprechende Tutorial: [Bereitstellen eines Images auf OpenIaaS](../../marketplace/tutorials/deploy_openiaas) ::: --- -## Bonnes pratiques +## Best Practices -### Choix de la méthode de déploiement +### Wahl der Bereitstellungsmethode -- **Modèle** : Idéal pour des déploiements standards et répétitifs au sein de votre organisation -- **XVA** : Recommandé pour migrer des VMs existantes ou utiliser des images personnalisées -- **Marketplace** : Parfait pour démarrer rapidement avec des images certifiées et maintenues +- **Modell** : Ideal für standardmäßige und wiederkehrende Bereitstellungen innerhalb Ihrer Organisation +- **XVA** : Empfohlen für die Migration bestehender VMs oder die Verwendung benutzerdefinierter Images +- **Marketplace** : Ideal für den schnellen Start mit zertifizierten und gewarteten Images -### Configuration des ressources +### Konfiguration der Ressourcen -- **CPU et RAM** : Dimensionnez selon les besoins réels de votre charge de travail -- **Disques** : Prévoyez une marge de croissance pour éviter les redimensionnements futurs +- **CPU und RAM** : Dimensionieren Sie diese entsprechend den tatsächlichen Anforderungen Ihrer Workload +- **Datenträger** : Planen Sie eine Wachstumsmarge ein, um zukünftige Größenanpassungen zu vermeiden -### Haute disponibilité +### Hohe Verfügbarkeit -- Activez le mode **Restart** pour les applications critiques -- Utilisez **Best-Effort** pour les environnements moins critiques +- Aktivieren Sie den **Restart**-Modus für kritische Anwendungen +- Verwenden Sie **Best-Effort** für weniger kritische Umgebungen ### Cloud Init -- Utilisez Cloud Init pour standardiser la configuration de vos VMs -- Documentez vos configurations Cloud Init pour faciliter leur réutilisation -- Testez vos configurations sur des VMs de test avant déploiement en production +- Verwenden Sie Cloud Init, um die Konfiguration Ihrer VMs zu standardisieren +- Dokumentieren Sie Ihre Cloud-Init-Konfigurationen, um deren Wiederverwendung zu erleichtern +- Testen Sie Ihre Konfigurationen auf Test-VMs, bevor Sie sie in der Produktion bereitstellen -### Sécurité +### Sicherheit -- Utilisez des noms explicites pour faciliter l'identification et la gestion -- Planifiez une stratégie de sauvegarde dès la création de la VM +- Verwenden Sie aussagekräftige Namen, um die Identifizierung und Verwaltung zu erleichtern +- Planen Sie eine Backup-Strategie bereits bei der Erstellung der VM \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/high_availability/manage_vm.md b/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/high_availability/manage_vm.md index 5da65c7b..1ec7c467 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/high_availability/manage_vm.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/high_availability/manage_vm.md @@ -1,3 +1,5 @@ + + --- title: Verwaltung einer virtuellen Maschine --- @@ -8,8 +10,8 @@ import open_iaas_vm_ha_filter from '@site/docs/iaas_opensource/tutorials/images/ import open_iaas_vm_ha_errors from '@site/docs/iaas_opensource/tutorials/images/open_iaas_vm_ha_errors.png' import open_iaas_vm_ha_warning from '@site/docs/iaas_opensource/tutorials/images/open_iaas_vm_ha_warning.png' -Neben der Verwaltung des Pools müssen auch virtuelle Maschinen konfiguriert werden. -Um die Konfiguration der virtuellen Maschine anzuzeigen, müssen Sie einfach zu den erweiterten Optionen gehen: +Neben der Poolverwaltung müssen auch virtuelle Maschinen konfiguriert werden. +Um die Konfiguration der virtuellen Maschine anzuzeigen, gehen Sie einfach zu den erweiterten Optionen: Um diese Konfiguration zu ändern: @@ -19,6 +21,6 @@ Um diese Konfiguration zu ändern: Um alle virtuellen Maschinen ohne Hochverfügbarkeitskonfiguration anzuzeigen: -Um alle virtuellen Maschinen anzuzeigen, die die Aktivierung der Hochverfügbarkeit im Pool behindern können: +Um alle virtuellen Maschinen anzuzeigen, die die Aktivierung der Hochverfügbarkeit im Pool verhindern könnten: - + \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/concepts.md b/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/concepts.md index da10dc59..a3098040 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/concepts.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/concepts.md @@ -1,497 +1,535 @@ --- -title: Concepts +title: Konzepte --- -The __IaaS (Infrastructure as a Service)__ offering from Cloud Temple is designed to meet the critical requirements for business continuity and disaster recovery, with a particular focus on demanding sectors such as industry, banking, and insurance. Built on cutting-edge technologies, this infrastructure ensures maximum availability and optimal performance for your critical workloads. +Das __IaaS (Infrastructure As A Service)__ von Cloud Temple wurde entwickelt, um den kritischen Anforderungen an Geschäftskontinuität und Disaster Recovery gerecht zu werden, mit besonderem Fokus auf anspruchsvolle Branchen wie Industrie, Banken und Versicherungswesen. Basierend auf modernsten Technologien gewährleistet diese Infrastruktur maximale Verfügbarkeit und optimale Leistung für Ihre kritischen Workloads. -## A trusted technology platform +## Eine vertrauenswürdige Technologieplattform -The Cloud Temple IaaS platform is built on internationally recognized technology partners: +Die IaaS-Plattform von Cloud Temple stützt sich auf international renommierte Technologiepartner: -- Compute: __CISCO UCS__. -- Storage: __IBM Spectrum Virtualize__, __IBM FlashSystem__ for block storage. -- Networking: __JUNIPER__. -- Virtualization: __VMware__, providing a reliable and proven foundation for managing your cloud environments. -- Backup: __IBM Spectrum Protect Plus__, for orchestration and storage of backups. +- Compute : __CISCO UCS__. +- Storage : __IBM Spectrum Virtualize__, __IBM FlashSystem__ für Block-Speicher. +- Netzwerk : __JUNIPER__. +- Virtualisierung : __VMware__, bietet eine zuverlässige und bewährte Grundlage zur Verwaltung Ihrer Cloud-Umgebungen. +- Backup: __IBM Spectrum Protect Plus__, für die Orchestrierung und Speicherung von Backups. -This architecture is based on the __VersaStack__ model, a collaboration between Cisco and IBM, ensuring broad compatibility with leading software vendors. +Diese Architektur basiert auf dem __VersaStack__-Modell, einer Partnerschaft zwischen Cisco und IBM, die eine umfassende Kompatibilität mit den führenden Softwareanbietern gewährleistet. -## A dedicated and automated infrastructure +## Eine dedizierte und automatisierte Infrastruktur -Although fully automated via APIs and a Terraform provider, Cloud Temple's IaaS offering provides a unique infrastructure: +Obwohl sie vollständig durch APIs und einen Terraform-Provider automatisiert ist, bietet das IaaS-Produkt von Cloud Temple eine einzigartige Infrastruktur: -- __Dedicated resources__: Compute blades, storage volumes, and software stacks (virtualization, backup, firewalling, etc.) are never shared among clients. -- __Maximum predictability__: You have full control over virtualization rates, IOPS pressure on storage, and benefit from clear, consumption-based monthly billing. +- __Dedizierte Ressourcen__ : Compute-Blades, Speichervolumes und Software-Stacks (Virtualisierung, Sicherung, Firewalling usw.) werden niemals zwischen Kunden geteilt. +- __Maximale Planbarkeit__ : Sie haben die Kontrolle über die Virtualisierungsraten, die IOPS-Belastung des Speichers und profitieren von einer klaren, monatlichen verbrauchsabhängigen Abrechnung. -The platform is certified __SecNumCloud__ by the [ANSSI](https://www.ssi.gouv.fr/), ensuring a high level of automation and security. +Die Plattform ist von der [ANSSI](https://www.ssi.gouv.fr/) als __SecNumCloud__ zertifiziert, was ein hohes Maß an Automatisierung und Sicherheit garantiert. ## Hauptfunktionen -- Dedicated und on-demand Rechenressourcen (CPU, RAM). -- On-demand Speicher (mehrere Klassen verfügbar). +- Dedizierte und On-Demand-Rechenressourcen (CPU, RAM). +- On-Demand-Speicher (mehrere Klassen verfügbar). - Netzwerkressourcen (Internet, private Netzwerke). -- Kreuzsicherungen mit konfigurierbarer Aufbewahrungszeit. +- Cross-Backups mit konfigurierbarer Aufbewahrungsfrist. - Asynchrone Replikation für Speicher oder virtuelle Maschinen. -- Steuerung über die [Console](../console/console.md) oder im Infrastructure-as-Code-Modus über APIs und den Terraform-Provider. +- Steuerung über die [Console](../console/console.md) oder im Infrastructure-as-Code-Modell über APIs und den Terraform-Provider. ## Vorteile -| Vorteil | Beschreibung | -|----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------| -| Digitale Vertrauenswürdigkeit | Speicherung von Daten in Frankreich und Einhaltung der DSGVO. | -| Sicherheit | Hochsichere Plattform, zertifiziert __SecNumCloud__, __HDS__ (Hébergement des Données de Santé), __ISO 27001__ und __ISAE 3402 Typ II__. | -| Hohe Verfügbarkeit | Plattformverfügbarkeit von 99,99 %, monatlich gemessen, inklusive Wartungszeiträume. | -| Resilienz | Implementierung von Kontinuitäts- oder Wiederherstellungsplänen je nach Bedarf. | -| Automatisierung | Vollständig automatisierte Plattform, entwickelt für die Integration in ein digitales Transformationsprogramm. | -| On-Demand | Ressourcen sind nach Bedarf verfügbar. | +| Vorteil | Beschreibung | +|---------------------|------------------------------------------------------------------------------------------------------------------------------------------------| +| Digitale Vertrauenswürdigkeit | Datenhosting in Frankreich und DSGVO-Konformität. | +| Sicherheit | Hochsichere Plattform, qualifiziert nach __SecNumCloud__, __HDS__ (Hosting von Gesundheitsdaten), __ISO 27001__ und __ISAE 3402 Typ II__. | +| Hohe Verfügbarkeit | Verfügbarkeitsgrad der Plattform von 99,99 %, monatlich gemessen, inklusive Wartungsfenster. | +| Resilienz | Umsetzung von Plänen zur Geschäftskontinuität oder zum Business Continuity Management entsprechend den Anforderungen. | +| Automatisierung | Vollständig automatisierte Plattform, konzipiert für die Integration in ein Programm zur digitalen Transformation. | +| On demand | Ressourcen bedarfsgerecht verfügbar. | -## Regions and Availability Zones +## Regionen und Verfügbarkeitszonen -The VMware IaaS product is deployed within an availability zone. -An [availability zone](../additional_content/concepts_az.md) is part of a [region](../additional_content/concepts_regional.md). +Das VMware IaaS-Produkt wird in einer Verfügbarkeitszone bereitgestellt. +Eine [Verfügbarkeitszone](../additional_content/concepts_az.md) ist Teil einer [Region](../additional_content/concepts_regional.md). -This deployment model allows you to select the location of clusters and distribute them across different availability zones (AZs). -It enables better load distribution, maximizes redundancy, and simplifies the implementation of a disaster recovery plan (DRP) in case of an incident. +Diese Bereitstellungsart ermöglicht die Auswahl des Standorts der Cluster und deren Aufteilung auf verschiedene Verfügbarkeitszonen (AZ). +Dies bietet eine bessere Lastverteilung, maximiert die Redundanz und erleichtert die Einrichtung eines Disaster-Recovery-Plans (DRP) im Falle eines Vorfalls. -## Computing +--- + +## Compute -The blades provided by Cloud Temple are of type __CISCO UCS B200__ or __CISCO UCS X210c__. They are fully managed by Cloud Temple (firmware, OS version, etc.) via the Cloud Temple console. +Die von Cloud Temple bereitgestellten Compute-Blades sind vom Typ __CISCO UCS B200__ oder __CISCO UCS X210c__. Sie werden vollständig von Cloud Temple (firmware, version d'os, ...) über die Cloud-Temple-Konsole verwaltet. -Several categories of computing blades are available in the catalog to support your workloads (virtualization, containerization, ...). These blades feature different characteristics and performance levels to best meet your needs. The computing blade catalog is regularly updated. +Im Katalog sind mehrere Kategorien von Compute-Blades verfügbar, um Ihre Workloads zu unterstützen (Virtualisation, Conteneurisation, ...). +Diese weisen unterschiedliche Merkmale und Leistungswerte auf, um Ihren Anforderungen bestmöglich gerecht zu werden. Der Katalog der Compute-Blades wird regelmäßig aktualisiert. -When using the virtualization offering, a hypervisor cluster must consist exclusively of blades of the same type (mixing different blade types within a single cluster is not allowed). +Im Zusammenhang mit der Nutzung eines Virtualisierungsangebots besteht ein Hypervisor-Cluster ausschließlich aus Compute-Blades desselben Typs (il n'est pas possible de mixer les lames de différents types dans un meme cluster). -| Reference | RAM __(1)__ | Frequency __(2)__ | Number of Cores / Threads | Connectivity __(3)__ | GPU __(4)__ | SKU for VMware Offering | -| --------------------- | ------------ | ----------------------------------------- | -------------------------- | -------------------- | -------------------- | ------------------------------- | -| ECO v3 Blade | 384 GB | 2.20/3.0 GHz (Silver 4114 or equivalent) | 20 / 40 threads | 2 × 10 Gbit/s | | csp:fr1:iaas:vmware:eco:v3 | -| STANDARD v3 Blade | 384 GB | 2.40/3.4 GHz (Silver 4314 or equivalent) | 32 / 64 threads | 2 × 25 Gbit/s | | csp:fr1:iaas:vmware:standard:v3 | -| ADVANCE v3 Blade | 768 GB | 2.80/3.5 GHz (Gold 6342 or equivalent) | 48 / 96 threads | 2 × 25 Gbit/s | | csp:fr1:iaas:vmware:advance:v3 | -| PERFORMANCE 1 v3 Blade| 384 GB | 3.20/3.6 GHz (Xeon E-53I5Y or equivalent) | 16 / 32 threads | 2 × 25 Gbit/s | | csp:fr1:iaas:vmware:perf1:v3 | -| PERFORMANCE 2 v3 Blade| 768 GB | 3.00/3.6 GHz (Gold 6354 or equivalent) | 36 / 72 threads | 2 × 25 Gbit/s | | csp:fr1:iaas:vmware:perf2:v3 | -| PERFORMANCE 3 v3 Blade| 1536 GB | 2.60/3.5 GHz (Gold 6348 or equivalent) | 56 / 112 threads | 2 × 25 Gbit/s | | csp:fr1:iaas:vmware:perf3:v3 | -| PERFORMANCE 4 v3 Blade| 512 GB | 2.50/4.1 GHz (Intel 6426Y or equivalent) | 32 / 64 threads | 2 × 25 Gbit/s | 2 × NVIDIA L40S 48 GB | csp:fr1:iaas:vmware:perf4:v3 | +| Referenz | RAM __(1)__ | Taktfrequenz __(2)__ | Anzahl Kerne / Threads | Konnektivität __(3)__ | GPU __(4)__ | SKU für das VMware-Angebot | +| ------------------- | ------------ | ----------------------------------------- | -------------------------- | --------------------- | ---------------------- | --------------------------- | +| ECO Compute-Blade v3| 384 GB | 2.20/3.0 GHz (Silver 4114 ou équivalent) | 20 / 40 Threads | 2 X 10 Gbit/s | | csp:fr1:iaas:vmware:eco:v3 | +| STANDARD Compute-Blade v3 | 384 GB | 2.40/3.4 GHz (Silver 4314 ou équivalent) | 32 / 64 Threads | 2 X 25 Gbit/s | | csp:fr1:iaas:vmware:standard:v3 | +| ADVANCE Compute-Blade v3 | 768 GB | 2.80/3.5 GHz (Gold 6342 ou équivalent) | 48 / 96 Threads | 2 X 25 Gbit/s | | csp:fr1:iaas:vmware:advance:v3 | +| PERFORMANCE 1 Compute-Blade v3 | 384 GB | 3.20/3.6 GHz (Xeon E-53I5Y ou équivalent) | 16 / 32 Threads | 2 X 25 Gbit/s | | csp:fr1:iaas:vmware:perf1:v3 | +| PERFORMANCE 2 Compute-Blade v3 | 768 GB | 3.00/3.6 GHz (Gold 6354 ou équivalent) | 36 / 72 Threads | 2 X 25 Gbit/s | | csp:fr1:iaas:vmware:perf2:v3 | +| PERFORMANCE 3 Compute-Blade v3 | 1536 GB | 2.60/3.5 GHz (Gold 6348 ou équivalent) | 56 / 112 Threads | 2 X 25 Gbit/s | | csp:fr1:iaas:vmware:perf3:v3 | +| PERFORMANCE 4 Compute-Blade v3 | 512 GB | 2.50/4.1 GHz (Intel 6426Y ou equivalent) | 32 / 64 Threads | 2 X 25 Gbit/s | 2 x NVIDIA L40S 48 GB | csp:fr1:iaas:vmware:perf4:v3 | -__Notes__: +__Hinweise__: -- __(1)__ The memory amount delivered corresponds to the physically available memory on the blades. It is not possible to change the physical memory capacity of a blade. +- __(1)__ Die gelieferte Speichermenge entspricht dem physisch auf den Blades verfügbaren Speicher. Die physische Speichermenge eines Blades kann nicht geändert werden. -- __(2)__ Minimum base frequency / turbo frequency, expressed in GHz. By default, processors are configured in the BIOS for maximum performance. +- __(2)__ Mindest-Basistakt / Turbotakt, angegeben in GHz. Standardmäßig sind die Prozessoren auf maximale Leistung im BIOS konfiguriert. -- __(3)__ Physical connectivity is shared between network and block storage access, as the underlying Cisco platform is converged. +- __(3)__ Die physische Konnektivität wird für den Netzwerk- und Block-Speicherzugriff gemeinsam genutzt, da die CISCO-Plattform konvergent ist. -- __(4)__ The available GPU offering is continuously evolving. As of May 1, 2024, the offering is based on NVIDIA LOVELACE L40S GPUs. By default, the PERF4 blade is delivered with two 48 GB L40S GPUs. Contact support for further details if needed. +- __(4)__ Das tatsächlich verfügbare GPU-Angebot unterliegt ständigen Änderungen. Stand 1. Mai 2024 basiert das Angebot auf NVIDIA LOVELACE L40S-GPUs. Standardmäßig wird das PERF4-Blade mit 2 L40S-Karten à 48 GB RAM ausgeliefert. Kontaktieren Sie bei Bedarf den Support für weitere Details. -The computing offering availability is 99.99%, calculated monthly, including maintenance windows. Eligibility for SLA non-compliance claims requires the creation of an incident ticket. You must also have at least two hosts per cluster and enable the __High Availability__ (HA) feature. -This feature allows your architecture to automatically restart your virtual machines on the second hypervisor in case of failure. If a zone of availability contains only one hypervisor, automatic restart is not possible. +Die Verfügbarkeit des Compute-Angebots beträgt 99,99 %, monatlich berechnet, inkl. Wartungsfenster. Ein Anspruch bei SLA-Verletzungen setzt die Erstellung eines Incident-Tickets voraus. Sie müssen zudem mindestens zwei Hosts pro Cluster betreiben und die Funktion __High Availability__ (HA) aktivieren. +Diese Funktion ermöglicht es Ihrer Architektur, virtuelle Maschinen automatisch auf dem zweiten Hypervisor neu zu starten. +Sollte eine Verfügbarkeitszone nur einen Hypervisor enthalten, ist ein automatischer Neustart nicht möglich. -## Network +## Netzwerk -The networking service on Cloud Temple's IaaS platform is based on a VPLS technology infrastructure, providing flexible and high-performance segmentation to meet client requirements for connectivity and network isolation. +Der Netzwerkdienst auf der IaaS-Plattform von Cloud Temple basiert auf einer Netzwerkinfrastruktur auf Basis der VPLS-Technologie, die eine flexible und leistungsstarke Segmentierung bietet, um den Anforderungen der Kunden an Konnektivität und Netzwerktrennung gerecht zu werden. -### Layer-2 VLANs +### VLANs der Ebene 2 -The VLANs provided in the IaaS offering are of __layer 2__ type, offering complete network isolation and adaptable configuration according to requirements. +Die im IaaS-Produkt bereitgestellten VLANs sind vom Typ __Ebene 2__ und bieten eine vollständige Netzwerkisolation sowie eine anpassbare Konfiguration nach Bedarf. #### Hauptkonzepte -- __VLAN-Teilung zwischen Clustern und Verfügbarkeitszonen (AZ)__: - - VLANs können zwischen verschiedenen AZs und verschiedenen Clustern, die demselben Tenant gehören, gemeinsam genutzt werden. -- __Inter-Tenant-Propagation__: - - VLANs können zwischen mehreren Teneants einer Organisation propagiert werden, was interne Kommunikation vereinfacht. +- __Freigabe zwischen Clustern und Verfügbarkeitszonen (AZ)__ : + - VLANs können zwischen den verschiedenen AZs und den verschiedenen Clustern desselben Tenants freigegeben werden. +- __Tenant-übergreifende Propagierung__ : + - VLANs können zwischen mehreren Tenants derselben Organisation propagiert werden, um die interne Kommunikation zu erleichtern. + +--- ### Netzwerkleistung -Die Netzwerkinfrastruktur gewährleistet eine geringe Latenz für optimale Leistung: +Die Netzwerkinfrastruktur gewährleistet eine niedrige Latenz für optimale Leistung: + +- __Intra-AZ-Latenz__ : Unter __3 ms__. +- __Inter-AZ-Latenz__ : Unter __5 ms__. -- __Intra-AZ-Latenz__: Unter __3 ms__. -- __Inter-AZ-Latenz__: Unter __5 ms__. +--- + +### Wichtige Punkte -### Schlüsselpunkte +1. __Flexibilität__ : VLANs können so konfiguriert werden, dass sie sich an Multi-Cluster- und Multi-Tenant-Umgebungen anpassen. +2. __Hohe Leistung__ : Eine minimale Latenz gewährleistet eine schnelle und effiziente Kommunikation zwischen Verfügbarkeitszonen. +3. __Isolation und Sicherheit__ : VLANs der Layer-2-Ebene bieten eine strenge Netzwerksegmentierung zum Schutz von Daten und Datenverkehr. -1. __Flexibilität__: VLANs können so konfiguriert werden, dass sie sich an Multi-Cluster- und Multi-Tenant-Umgebungen anpassen. -2. __Hohe Leistung__: Eine minimale Latenz gewährleistet eine schnelle und effiziente Kommunikation zwischen Verfügbarkeitszonen. -3. __Isolation und Sicherheit__: Layer-2-VLANs bieten eine strenge Netzwerksegmentierung zur Sicherung von Daten und Datenflüssen. +--- -## Block Storage +## Blockspeicher -Cloud Temple offers several classes of storage based on the [IBM FlashSystem](https://www.ibm.com/flashsystem/) and [IBM SVC](https://www.ibm.com/products/san-volume-controller) technologies. +Cloud Temple bietet mehrere Speicherklassen an, die auf der [IBM FlashSystem](https://www.ibm.com/flashsystem/) +und [IBM SVC](https://www.ibm.com/products/san-volume-controller)-Technologie basieren. -The __IBM SVC__ technology enables delivering the required performance levels for our clients' environments through the large amount of embedded memory cache in the controllers and the ability to distribute a server's total IOPS across multiple SANs. +Die __IBM SVC__-Technologie ermöglicht die Bereitstellung des für die Umgebungen unserer Kunden erforderlichen Leistungsniveaus dank des großen +im Controller integrierten Speichercaches und der Möglichkeit, die gesamten IOPS +eines Servers auf mehrere SANs zu verteilen. -It is also used to enable replication of your block storage LUNs across availability zones or to facilitate maintenance operations on storage arrays. +Sie wird zudem eingesetzt, um die Replikation Ihrer blockbasierten LUNs zwischen +den Verfügbarkeitszonen zu ermöglichen oder Wartungsarbeiten an den Storage-Arrays zu erleichtern. -The storage is primarily NVMe flash storage dedicated to professional workloads. The drives are utilized by the storage arrays in [__'Distributed RAID 6'__](https://www.ibm.com/docs/en/flashsystem-5x00/8.6.x?topic=configurations-distributed-raid-array-properties). +Bei dem Speicher handelt es sich hauptsächlich um NVMe-Flash-Speicher, der für professionelle Workloads ausgelegt ist. +Die Festplatten werden von den Storage-Arrays im [__'Distributed Raid 6'__](https://www.ibm.com/docs/en/flashsystem-5x00/8.6.x?topic=configurations-distributed-raid-array-properties)-Modus betrieben. -### Storage Block Security and Encryption +### Sicherheit und Verschlüsselung der Blockspeicherung -To ensure the confidentiality of your data at rest, our entire block storage infrastructure integrates robust hardware-based encryption. +Um die Vertraulichkeit Ihrer Daten im Ruhezustand zu gewährleisten, integriert unsere gesamte Blockspeicher-Infrastruktur eine robuste Hardware-Verschlüsselung. -- __Encryption Type__: Data is encrypted directly on the disks (`Data At Rest`) using the __XTS-AES 256__ algorithm. -- __Compliance__: This encryption method complies with the __FIPS 140-2__ standard, ensuring a high level of validated security. -- __Operation__: Encryption is applied at the time data is written to the physical storage medium. +- __Verschlüsselungstyp__ : Die Daten werden direkt auf den Festplatten (`Data At Rest`) unter Verwendung des __XTS-AES 256__-Algorithmus verschlüsselt. +- __Konformität__ : Diese Verschlüsselungsmethode entspricht dem __FIPS 140-2__-Standard und gewährleistet ein hohes, validiertes Sicherheitsniveau. +- __Funktionsweise__ : Die Verschlüsselung erfolgt beim Schreiben der Daten auf das physische Speichermedium. -:::warning[Attention regarding replication ] -It is important to note that this encryption protects data stored on disks. It is not active "on-the-fly", meaning data is not encrypted during storage replication operations between availability zones. Security of transfers is ensured through dedicated and secure communication channels. +:::warning[Aufmerksamkeit bei der Replikation] +Es ist wichtig zu beachten, dass diese Verschlüsselung die auf den Festplatten gespeicherten Daten schützt. Sie ist nicht „on-the-fly“ aktiv, was bedeutet, dass die Daten während der Speicherreplikationsvorgänge zwischen den Verfügbarkeitszonen nicht verschlüsselt werden. Die Sicherheit der Übertragungen wird durch dedizierte und gesicherte Kommunikationskanäle gewährleistet. ::: -The __'Mass Storage'__ storage class offers mechanical disks for archival needs in an economically efficient context. Several performance tiers are available: +Die Speicherkategorie __'Mass Storage'__ bietet mechanische Festplatten für Archivierungszwecke im Hinblick auf wirtschaftliche Effizienz. Mehrere Leistungsniveaus sind verfügbar : -| Reference | Unit | SKU | -|-----------------------------------|-------|----------------------------------------------| -| FLASH - Essential - 500 IOPS/To | 1 GiB | csp:(region):iaas:storage:bloc:live:v1 | -| FLASH - Standard - 1500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:medium:v1 | -| FLASH - Premium - 3000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:premium:v1 | -| FLASH - Enterprise - 7500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:enterprise:v1 | -| FLASH - Ultra - 15000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:ultra:v1 | -| MASS STORAGE - Archival | 1 TiB | csp:(region):iaas:storage:bloc:mass:v1 | +| Referenz | Einheit | Maximales IOPS-Limit / LUN | Maximale Bandbreite / LUN | SKU | +|-----------------------------------|---------|----------------------------|---------------------------|----------------------------------------------| +| FLASH - Essential - 500 IOPS/To | 1 Gio | 10 000 IOPS | 512 Mo/s | csp:(region):iaas:storage:bloc:live:v1 | +| FLASH - Standard - 1500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:medium:v1 | +| FLASH - Premium - 3000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:premium:v1 | +| FLASH - Enterprise - 7500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:enterprise:v1 | +| FLASH - Ultra - 15000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:ultra:v1 | +| MASS STORAGE - Archivierung | 1 Tio | Nicht garantiert | Nicht garantiert | csp:(region):iaas:storage:bloc:mass:v1 | -*__Note__:* +*__Hinweis__ :* -- *Actual performance for a storage class is tied to the volume actually ordered, based on the "IOPS/To" metric, meaning "maximum IOPS per allocated terabyte",* +- *Die tatsächliche Leistung einer LUN (Datastore) steigt linear in Abhängigkeit vom zugewiesenen Volumen (entsprechend ihrem IOPS/To-Verhältnis), __bis zum oben definierten absoluten Hardware-Limit__.* -> *Thus, a 0.5 To volume in the 'Standard' performance class will have an IOPS limit capped at 750 IOPS,* -> *Similarly, a 10 To volume in the 'Ultra' performance class will have an IOPS limit of 150,000 IOPS,* +> *Beispielsweise profitiert ein Volumen von 0,5 To in der Klasse 'Standard' von 750 IOPS.* +> *Ein Volumen von 10 Tio in der Klasse 'Ultra' (theoretisch 150 000 IOPS) wird hingegen durch die absolute physikalische Grenze begrenzt und auf 30 000 IOPS sowie 1024 Mo/s gedrosselt.* -- *The IOPS limit is applied per volume, thus per datastore in a VMware environment,* -- *Storage availability is 99.99% measured monthly, including maintenance windows,* -- *There are no restrictions or quotas on read or write operations,* -- *There is no billing based on IOPS,* -- *No performance commitment is provided for the __'Mass Storage'__ class,* -- *The minimum size for a storage LUN is 500 GiB,* -- *When using storage replication, performance must be identical across both availability zones,* -- *No intelligent optimization mechanisms such as compression or deduplication are implemented: when you reserve 10 TiB of storage, you physically have 10 TiB of usable storage deployed on IBM machines,* -- *Storage LUNs are dedicated to the client environment.* +- *Diese Einschränkungen (IOPS und Bandbreite) gelten auf Volumenebene, also auf Datastore-Ebene für eine VMware-Umgebung,* +- *Die Speicherverfügbarkeit beträgt 99,99 % (monatlich gemessen, inklusive Wartungsfenster),* +- *Es gibt keine Einschränkungen oder Quotas für Lese- oder Schreibvorgänge,* +- *Es erfolgt keine IOPS-basierte Abrechnung,* +- *Es gibt keine Leistungsvereinbarung für die Klasse __'Mass Storage'__,* +- *Die Mindestgröße einer Speich-LUN beträgt 500 Gio,* +- *Bei Verwendung eines Speicherreplikationsmechanismus müssen die Leistungen in beiden Verfügbarkeitszonen identisch sein,* +- *Es werden keine „intelligenten“ Optimierungsmechanismen wie Kompression oder Deduplizierung eingesetzt: Wenn Sie 10 Tio Speicher reservieren, steht Ihnen physisch 10 Tio nutzbarer Speicher auf den IBM-Maschinen zur Verfügung.* +- *Die Speich-LUNs sind der Client-Umgebung vorbehalten.* -### Usage within the VMware Compute Offering +### Verwendung im Rahmen des VMware-Compute-Angebots -Within the context of using block storage in the form of a datastore in Cloud Temple’s VMware compute offering, __you must take several important considerations into account__: +Bei der Nutzung von Block Storage als Datastore im VMware-Compute-Angebot von Cloud Temple __müssen Sie mehrere wichtige Aspekte berücksichtigen__ : -1. __Swap file (.VSWP) creation during virtual machine startup__: When a virtual machine starts up, it creates a .VSWP file equal in size to its allocated memory on disk. Therefore, to successfully start your virtual machines, you must always have free space in your datastore equivalent to the total memory size of all your virtual machines. For example, if your datastore has 1 TiB of block storage and you want to start 10 virtual machines each with 64 GiB of memory, you will need 640 GiB of free disk space. Without sufficient space, virtual machine startup will be limited by the available capacity to create swap files. +1. __Swap-Datei (.VSWP) beim Starten virtueller Maschinen__ : Wenn eine virtuelle Maschine startet, erstellt sie auf der Festplatte eine .VSWP-Datei in der Größe ihres Arbeitsspeichers. Daher müssen Sie für den Start Ihrer virtuellen Maschinen stets freien Speicherplatz in Ihrem Datastore verfügbar haben, der der Summe der Arbeitsspeichergrößen Ihrer virtuellen Maschinen entspricht. Wenn Ihr Datastore beispielsweise über 1 TiB Block Storage verfügt und Sie 10 virtuelle Maschinen mit jeweils 64 GiB Arbeitsspeicher starten möchten, werden 640 GiB Festplattenspeicher benötigt. Ohne diesen Speicherplatz wird der Start der Maschinen durch die verfügbare Kapazität zur Erstellung der Swap-Dateien begrenzt. -2. __Free space required for backup snapshots__: The backup service uses instant snapshots. You must therefore always have sufficient free space to allow the creation of a snapshot during a virtual machine backup. The size of the snapshot depends on the amount of write activity from the virtual machine and the time required to perform the backup. Generally, it is recommended to maintain at least 10 % of free space for this operation. +2. __Freier Speicherplatz für Backup-Snapshots__ : Der Backup-Dienst verwendet Snapshots. Daher müssen Sie stets ausreichend freien Speicherplatz vorhalten, um die Erstellung eines Snapshots während der Sicherung einer virtuellen Maschine zu ermöglichen. Die Größe des Snapshots hängt vom Schreibvolumen der virtuellen Maschine und der für die Sicherung benötigten Zeit ab. In der Regel wird empfohlen, für diesen Vorgang mindestens 10 % freien Speicherplatz vorzuhalten. -3. __Management of dynamic disks__: Exercise caution when using dynamic disks. If you do not properly manage their growth, a lack of physical space can result in the virtual machine freezing (in the best case), or crashing with data corruption (in the worst case). It is crucial to closely monitor available space on your datastores when using this type of disk. +3. __Verwaltung dynamischer Festplatten__ : Gehen Sie vorsichtig mit der Verwendung dynamischer Festplatten um. Wenn Sie ihr Wachstum nicht im Griff haben, kann ein Mangel an physischem Speicherplatz im besten Fall zum Einfrieren (Freeze) der virtuellen Maschine führen, im schlimmsten Fall jedoch zu einem Absturz mit Datenkorruption. Es ist entscheidend, den verfügbaren Speicherplatz auf Ihren Datastores genau zu überwachen, wenn Sie diese Art von Festplatten verwenden. -Proactive disk space management is essential to ensure the proper operation of your virtual machines and the reliability of backups. Always ensure you have sufficient space available for swap files, snapshots, and dynamic disk growth. +Ein proaktives Management des Festplattenspeichers ist unerlässlich, um den einwandfreien Betrieb Ihrer virtuellen Maschinen und die Zuverlässigkeit der Backups zu gewährleisten. Stellen Sie sicher, dass stets ausreichend Speicherplatz für Swap-Dateien, Snapshots und das Wachstum dynamischer Festplatten verfügbar ist. -## Backup Storage +## Backup-Speicher -Der von der Plattform automatisch bereitgestellte Speicher für die Sicherung Ihrer virtuellen Maschinen wird im Rahmen des bestellten Quotas bereitgestellt. +Der für die Sicherung Ihrer virtuellen Maschinen vorgesehene Speicher wird von der Plattform innerhalb des bestellten Quotas automatisch bereitgestellt. -| Referenz | Einheit | Max IOPS Limit / LUN | Max Bandbreite / LUN | SKU | -|--------------------------|-------|------------------------------------------| -| MASS STORAGE - Archivage | 1 Tio | Non garanti | Non garanti | csp:(region):iaas:storage:bloc:mass:v1 | +| Referenz | Einheit | SKU | +|-------------------------|---------|------------------------------------------| +| MASS STORAGE - Archivierung | 1 TiB | csp:(region):iaas:storage:bloc:backup:v1 | -### Block Storage Replication +### Replikation des Blockspeichers -#### Principles +#### Prinzipien -To enable the implementation of your business continuity plans, when it is not possible to maintain business continuity using application-level mechanisms and virtual machine replication is not suitable, Cloud Temple offers __block-level storage replication mechanisms between availability zones within a region__. +Um die Umsetzung Ihrer Wiederherstellungspläne zu ermöglichen, wenn eine Geschäftskontinuität mit Anwendungsmechanismen nicht möglich ist und die Replikation virtueller Maschinen +nicht geeignet ist, bietet Cloud Temple __Mechanismen zur blockweisen Speicherreplikation zwischen den Verfügbarkeitszonen einer Region an__. -These replication mechanisms are applied to the storage LUNs of your environments, complementing backup solutions. The decision to use a replication mechanism for a given environment __depends on various factors, including its criticality, acceptable data loss, and performance requirements for the application__. +Diese Replikationsmechanismen werden auf die Storage-LUNs Ihrer Umgebungen angewendet, als Ergänzung zu den Backups. +Die Entscheidung für die Verwendung eines Replikationsmechanismus in einer Umgebung __hängt von zahlreichen Faktoren ab, darunter deren Kritikalität, der tolerierbare Datenverlust sowie die angestrebte Leistung__ der Anwendung. -Cloud Temple provides two types of replication mechanisms deployed in an active/passive configuration: +Cloud Temple bietet zwei Arten von Mechanismen an, die in einer aktiv/passiv-Konfiguration bereitgestellt werden: -- __Asynchronous replication__ (or __'Global Mirror'__): *The __'Global Mirror'__ function provides an asynchronous copy process. When a host writes to the primary volume, the confirmation of the I/O completion is received before the write operation finishes on the secondary volume. If a failover operation is initiated, the application must recover and apply all updates that were not confirmed on the secondary volume. If I/O operations on the primary volume are paused briefly, the secondary volume can become an exact match of the primary volume. This function is comparable to a continuous backup process in which the latest updates are always missing. When using Global Mirror for disaster recovery purposes, you must consider how you intend to handle these missing updates.* +- Die __asynchrone__ Replikation (ou __'Global Mirror'__): *Die Funktion __'Global Mirror'__ stellt einen asynchronen Kopierprozess bereit. +Wenn ein Host auf das primäre Volume schreibt, wird die Bestätigung des E/A-Abschlusses empfangen, bevor der Schreibvorgang +für die Kopie auf das sekundäre Volume abgeschlossen ist. Wenn ein Failover initiiert wird, muss die Anwendung +alle Aktualisierungen, die auf dem sekundären Volume noch nicht bestätigt wurden, wiederherstellen und anwenden. +Wenn die E/A-Vorgänge auf dem primären Volume für kurze Zeit pausiert werden, +kann das sekundäre Volume eine exakte Kopie des primären Volumes sein. Diese Funktion ist mit einem Prozess +der kontinuierlichen Sicherung vergleichbar, bei dem die neuesten Aktualisierungen stets fehlen. +Wenn Sie Global Mirror für Disaster-Recovery-Zwecke verwenden, müssen Sie überlegen, wie Sie mit diesen fehlenden Aktualisierungen umgehen möchten.* -- __Synchronous replication__ (or __'Metro Mirror'__): *The __'Metro Mirror'__ function is a type of remote copy that creates a synchronous copy of data from a primary volume to a secondary volume. With synchronous copies, host applications write to the primary volume but do not receive confirmation that the write operation is complete until the data has been written to the secondary volume. This ensures that both volumes contain identical data once the copy operation is complete. After the initial copy operation finishes, the Metro Mirror function continuously maintains a fully synchronized copy of the source data at the target site. __As of January 1, 2024, the 'Metro Mirror' function is no longer available for sale.__* +- Die __synchrone__ Replikation (ou __'Metro Mirror'__): *Die Funktion __'Metro Mirror'__ ist eine Art der Fernkopie, die eine synchrone Kopie +der Daten von einem primären Volume auf ein sekundäres Volume erstellt. Bei synchronen Kopien schreiben Host-Anwendungen auf das primäre Volume, erhalten jedoch keine Bestätigung +dass der Schreibvorgang abgeschlossen ist, solange die Daten nicht auf das sekundäre Volume geschrieben wurden. Dies gewährleistet, dass beide Volumes identische Daten enthalten, wenn +der Kopiervorgang abgeschlossen ist. Nach Abschluss des initialen Kopiervorgangs hält die Funktion Metro Mirror +dauerhaft eine vollständig synchronisierte Kopie der Quelldaten auf dem Zielstandort aufrecht. __Seit dem 1. Januar 2024 wird die Funktion 'Metro Mirror' nicht mehr vertrieben.__* -A site is then designated as "active" (or "primary") and another as "passive" (or "standby"). The business continuity plan is activated in the event of a disaster or during a PRA test. The passive site then takes over from the active site. +Daraufhin wird ein sogenannter "aktiver" oder "primärer" Standort sowie ein "passiver" oder "Standby"-Standort definiert. +Der Wiederherstellungsplan wird im Katastrophenfall oder im Rahmen einer PRA-Testanforderung aktiviert. +Der passive Standort übernimmt anschließend die Aufgabe des aktiven Standorts. #### Asynchrone Replikation -Wenn Ihre Workloads kurze Wiederherstellungszeiten erfordern und die Verwendung von Anwendungsreplikationen oder VM-Replikationen nicht akzeptabel oder geeignet ist, können Sie eine SAN-Speicher-LUN zwischen zwei Verfügbarkeitszonen derselben Region replizieren. +Wenn Ihre Workloads kurze Wiederherstellungszeiten erfordern und die Verwendung von Mechanismen wie Anwendungsreplikation oder Replikation virtueller Maschinen nicht akzeptabel oder geeignet ist, +kann eine SAN-Speicher-LUN zwischen zwei Verfügbarkeitszonen derselben Region repliziert werden. -Diese Lösung ermöglicht ein __RPO von 15 Minuten__ und ein __RTO unter 4 Stunden__. Sie ermöglicht eine deutlich schnellere Wiederinbetriebnahme im Vergleich zur Durchführung einer Sicherungs-Wiederherstellung. +Dieses Produkt ermöglicht ein __RPO von 15 Min.__ und ein __RTO unter 4 h__. Es ermöglicht einen deutlich schnelleren Neustart als +die Implementierung einer Sicherungswiederherstellung. -Bei einem in asynchroner Replikation betriebenen Speichervolume („Global Mirror“) arbeiten die SAN-Virtualisierungscontroller beider Verfügbarkeitszonen gemeinsam, um Schreibvorgänge auf beiden Standorten durchzuführen. Der primäre Standort wartet nicht auf die Bestätigung der Schreiboperation am sekundären Standort. +Bei einem Speicher-Volumen mit asynchroner Replikation (__Global Mirror__) arbeiten die SAN-Virtualisierungscontroller beider +Verfügbarkeitszonen zusammen, um Schreibvorgänge auf beiden Standorten durchzuführen. +Der Master-Standort wartet nicht auf die Schreibbestätigung des Slave-Standorts. Die Schritte eines Schreibvorgangs sind wie folgt: -1. Ein Hypervisor möchte eine __Schreiboperation auf einem Global-Mirror-Volumen__ durchführen: Er sendet die Anfrage an den SAN-Controller seiner Verfügbarkeitszone, -2. Der lokale SAN-Controller fordert den SAN-Controller der entfernten Zone auf, die Schreiboperation durchzuführen, -3. Der lokale SAN-Controller wartet nicht auf die Bestätigung des entfernten SAN-Controllers und führt die Schreiboperation stattdessen lokal durch, -4. Er gibt die __Bestätigung__ an den Hypervisor zurück, der die Anfrage initiiert hat, -5. __Die Hypervisoren am entfernten Standort greifen nicht direkt auf die Global-Mirror-LUN zu__: Eine Dienstanforderung ist erforderlich. +1. Ein Hypervisor möchte __einen Schreibvorgang auf einem Global-Mirror-Volumen__ durchführen: Er sendet seine Anforderung an den SAN-Controller seiner Verfügbarkeitszone, +2. Der lokale SAN-Controller fordert den SAN-Controller der Remote-Zone auf, den Schreibvorgang durchzuführen, +3. Der lokale SAN-Controller wartet nicht auf die Bestätigung des Remote-SAN und führt die Schreiboperation lokal aus, +4. Er gibt die __Bestätigung__ an den anfordernden Hypervisor zurück, +5. __Die Hypervisor des Remote-Standorts greifen nicht direkt auf die Global-Mirror-LUN zu__ : Eine Dienstanforderung ist erforderlich. | SLA | Beschreibung | |-----------|---------------------------------------------------------------------------------------------------------------------------------------------------| -| RPO 15 Min | Im Falle eines Ausfalls im primären Rechenzentrum entspricht die maximal verlorene Datenmenge maximal den letzten 15 Minuten der Schreibvorgänge | -| RTO < 4 Std | Im Falle eines Ausfalls im primären Rechenzentrum ist die Wiederinbetriebnahme innerhalb von 4 Stunden garantiert, abhängig von der Komplexität der Umgebung. | +| RPO 15 Min. | Im Falle eines Ausfalls des primären Rechenzentrums entspricht die maximal verlorene Datenmenge maximal den Schreibvorgängen der letzten 15 Minuten | +| RTO < 4 h | Im Falle eines Ausfalls des primären Rechenzentrums ist die Wiederaufnahme des Betriebs je nach Komplexität der Umgebungen innerhalb von 4 Stunden garantiert. | -Im Falle der Aktivierung des Wiederherstellungsplans (PRA) führt das Cloud Temple-Team eine Präsentation der LUN __'Global Mirror'__ an die entfernten Hypervisoren durch, damit diese auf die Daten zugreifen können. Die Implementierung dieser Lösung erfordert daher, dass auf dem 'Standby'-Standort bereits Rechenressourcen und RAM reserviert sind, um im Falle eines Ausfalls die Aktivität wieder aufnehmen zu können. +Im Falle der Aktivierung des DR-Plans führt das Cloud Temple-Team eine Präsentation der LUN __'Global Mirror'__ für die Remote-Hypervisor durch, damit diese auf die Daten zugreifen können. Die Implementierung dieser Lösung erfordert daher, dass auf dem 'Standby'-Standort Rechenressourcen und RAM für den Wiederaufnahmebetrieb im Schadensfall reserviert wurden. -Die Nutzung dieser Technologie erfordert zudem eine Verdoppelung des Speicherplatzes: Es ist notwendig, dass der entfernte Standort exakt denselben Speicherplatz wie der lokale Standort bereitstellt. +Die Nutzung dieser Technologie erfordert ebenfalls eine Verdopplung des Speicherplatzes: Es muss exakt derselbe Speicherplatz auf dem Remote-Standort wie auf dem lokalen Standort verfügbar sein. -Die Nutzung dieses Mechanismus kann die Leistung der Anwendung bis zu 10 % beeinträchtigen. __Nur die Speicherklassen 500 IOPS/To, 1500 IOPS/To und 3000 IOPS/To sind kompatibel.__ +Die Nutzung dieses Mechanismus kann die Anwendungsleistung um bis zu 10 % beeinträchtigen. __Nur die Speicherklassen 500 Iops/To, 1500 Iops/To und 3000 Iops/To sind kompatibel.__ -| Referenz | Einheit | Max IOPS Limit / LUN | Max Bandbreite / LUN | SKU | +| Referenz | Einheit | SKU | |------------------------------------|--------|---------------------------------------------------| -| STORAGE - Global Replication SAN | 1 TiB | csp:(region):iaas:storage:licence:globalmirror:v1 | +| SPEICHER - Global Replication SAN | 1 Tio | csp:(region):iaas:storage:licence:globalmirror:v1 | -*__Hinweis__*: +*__Hinweis__* : -- *Da die Angebote asynchron sind, besteht bei einem Ausfall die Möglichkeit, dass bestimmte Datenträgeroperationen nicht auf dem entfernten Standort geschrieben wurden. Es kann daher ein Risiko für die Datenkonsistenz bestehen, das im Risikoanalyse-Teil des Wiederherstellungsplans berücksichtigt werden muss.* -- *Die Block-basierte Speicherreplikation erfolgt für virtuelle Maschinen und Anwendungen transparent und wird nicht sichtbar.* -- *Daher ist es wichtig, Replikations-Szenarien auf Anwendungsebene oder gegebenenfalls VM-Replikationen vorzuziehen.* -- *Berechnungsressourcen und Arbeitsspeicher am Wiederherstellungsstandort können reduziert werden, um die Kosten zu optimieren, sofern eine eingeschränkte Leistung für das Geschäft während der Wiederherstellung akzeptabel ist.* +- *Da das Angebot asynchron ist, kann es im Schadensfall vorkommen, dass bestimmte Festplattenoperationen nicht auf den Remote-Standort geschrieben wurden. Dies kann daher ein Risiko für die Datenkonsistenz darstellen, das in der Risikoanalyse des DR-Plans berücksichtigt und gemindert wird.* +- *Die Replikation des Blockspeichers erfolgt für virtuelle Maschinen und Anwendungen transparent,* +- *In diesem Zusammenhang ist es wichtig, Szenarien mit Anwendungsreplikation oder gegebenenfalls Replikation virtueller Maschinen zu bevorzugen,* +- *Die Rechenleistung und der Arbeitsspeicher auf dem Wiederherstellungsstandort können reduziert werden, um die Kosten zu optimieren, wenn ein degradierter Betriebszustand für die Fachabteilung während der Aktivierung des DR-Plans akzeptabel ist.* -## VMware Virtualization +## VMware Virtualisierung -The VMware Cloud Temple offering qualified SecNumCloud is based on the __VMware vSphere__ technology. +Das SecNumCloud-qualifizierte Virtualisierungsangebot von Cloud Temple basiert auf der __VMware vSphere__-Technologie. -The platform is managed automatically by Cloud Temple (security compliance maintenance, operational readiness maintenance, ...). -It can be controlled via the graphical interface of the Console or through the associated APIs. +Die Plattform wird von Cloud Temple automatisch verwaltet (maintien de condition de sécurité, maintien en condition opérationnelle, ...). +Sie kann über die grafische Benutzeroberfläche der Konsole oder über die zugehörigen APIs gesteuert werden. -*__Note__*: *For security reasons related to the SecNumCloud qualification, -__the customer is not allowed to access the VMware virtualization platform directly__ (no direct access to vCenter, for example). -Indeed, the SecNumCloud qualification requires __complete segregation__ between the technical asset management interfaces and the customer's interface (the Console).* +*__Hinweis__* : *Aus Sicherheitsgründen im Zusammenhang mit der SecNumCloud-Qualifikation, +__kann der Auftraggeber nicht direkt auf die VMware-Virtualisierungsplattform zugreifen__ (aucun accès direct au vCenter notamment). +Die SecNumCloud-Qualifikation erfordert __eine vollständige Trennung__ zwischen den Steuerschnittstellen der technischen Assets und der Benutzeroberfläche des Auftraggebers (la Console).* -- The implemented products are VMware ESXi, VMware vCenter, and VMware Replication. -- *The virtualization offering's network does not use VMware NSX technology, but is instead managed physically using Juniper technology and the VPLS protocol.* -- *The storage does not use VMware vSAN technology, but exclusively IBM SANs via 32G Fiber Channel.* -- *No hidden optimization techniques are applied (compression, deduplication, ...).* +- Die eingesetzten Produkte sind VMware ESXi, VMware vCenter und VMware Replication. +- *Das Netzwerk des Virtualisierungsangebots verwendet nicht die VMware-NSX-Technologie, sondern wird hardwareseitig durch die Juniper-Technologie und das VPLS-Protokoll gesteuert.* +- *Der Speicher verwendet nicht die VMware-vSAN-Technologie, sondern ausschließlich IBM-SANs mit 32G Fiber Channel.* +- *Es wird keine Form von versteckter Optimierung implementiert (compression, deduplication, ...).* -### Definition of a Compute Node Cluster ('Cpool') +### Definition eines Compute-Blade-Clusters ('Cpool') -The __'Cpool'__ is a grouping of VMware ESXi hypervisors, also known as an *'ESX cluster'*. +Der __'Cpool'__ ist eine Gruppe von VMware ESXi-Hypervisoren, auch bekannt als *'ESX-Cluster'*. -All hosts within a __'Cpool'* belong to the __same tenant and the same availability zone (AZ)__. They must necessarily have the same instance type: -__It is not possible to mix different compute node models within the same cluster__. +Alle Hosts in einem __'Cpool'__ gehören __zum selben Tenant und zur selben Verfügbarkeitszone__ (AZ). Sie müssen zwingend dieselbe Klasse haben: +__es ist nicht möglich, verschiedene Compute-Blade-Modelle innerhalb desselben Clusters zu mischen__. -Since all compute nodes are delivered with the maximum physical memory, a software-level RAM usage limit is enforced at the cluster level to ensure it matches the billed RAM. +Da alle Compute-Blades mit dem physischen Maximum an Arbeitsspeicher ausgeliefert werden, wird softwareseitig auf Clusterebene eine RAM-Nutzungsbegrenzung angewendet, um sicherzustellen, dass sie dem abgerechneten RAM entspricht. -By default, each compute node has 128 GB of memory enabled within the __'Cpool'*. +Standardmäßig verfügt jedes Blade über 128 GB aktivierten Arbeitsspeicher innerhalb des __'Cpool'__. -A __'Cpool'* can contain a maximum of 32 hypervisors. Beyond this limit, a second cluster must be created. +Ein __'Cpool'__ kann maximal 32 Hypervisor enthalten. Darüber hinaus muss ein zweiter Cluster erstellt werden. -Storage can be shared among __'Cpool'* clusters. +Der Speicher kann zwischen den __'Cpool'__ geteilt werden. -### Memory Allocation for a 'Cpool' +### RAM-Zuweisung für ein 'Cpool' -Memory reservation is configurable per cluster. You can reduce or increase the amount of RAM to match your cluster-wide requirements. +Die RAM-Zuweisung ist clusterweise konfigurierbar. Sie können die RAM-Menge reduzieren oder erhöhen, um sie an Ihre Anforderungen auf Cluster-Ebene anzupassen. -__Be careful not to exceed an average memory usage of 85% per compute node__. -Indeed, VMware's technology uses a compression-based optimization method that can significantly impact the performance of your workloads and complicate diagnostics. -Similarly, excessive memory pressure on your compute nodes will force the hypervisor to offload part of its memory to disk to meet the needs of virtual machines. +__Achten Sie darauf, einen durchschnittlichen Speicherverbrauch von 85 % pro Compute-Node nicht zu überschreiten__. +Denn die VMware-Technologie verwendet eine komprimierungsähnliche Optimierungsmethode, die die Leistung Ihrer Workloads stark beeinträchtigen und die Fehlerbehebung erschweren kann. +Ebenso wird ein zu starker Speicherdruk auf Ihren Compute-Nodes den Hypervisor dazu zwingen, einen Teil des Speichers auf die Festplatte auszulagern, um den Bedarf der virtuellen Maschinen zu decken. -This situation, known as __'Ballooning'__, severely impacts the performance of all virtual machines located on the affected datastore. -__Diagnosis becomes complicated in this context__, as your monitoring will detect issues at the CPU level rather than at the memory or storage level. -Also keep in mind that the first action the hypervisor performs when starting a virtual machine is to create a __memory swap file (.vswap)__ on disk, with a size equal to the virtual machine's memory allocation. You must __take this into account when sizing your storage__. +Dieser als __'Ballooning'__ bezeichnete Zustand beeinträchtigt die Leistung aller virtuellen Maschinen auf dem betreffenden Speicher (Datastore) erheblich. +__Die Fehlerbehebung ist in diesem Kontext erschwert__, da Ihre Monitoring-Metriken Auswirkungen auf der CPU-Ebene und nicht im Speicher- oder Speicherbereich aufzeigen werden. +Behalten Sie außerdem im Hinterkopf, dass der Hypervisor beim Starten einer virtuellen Maschine zunächst __eine Swap-Speicheldatei__ (.vswap) auf +der Festplatte in der Größe des Speichers der betreffenden virtuellen Maschine erstellt. Sie müssen dies __bei der Dimensionierung Ihres Speichers berücksichtigen__. -Each compute node is delivered with 128 GB of memory enabled at the __'Cpool'__ level, but physically has access to the full amount of allocatable memory. +Jeder Compute-Node wird mit 128 GB Software-aktiviertem Speicher auf Ebene des __'Cpool'__ geliefert, verfügt jedoch physisch über den gesamten zuweisbaren Speicher. -For example, in a cluster of three hosts of type ```vmware:standard:v2```, the RAM reservation upon activation of the __'Cpool'__ will be 3 × 128 GB = 384 GB of RAM. -You can extend it up to a maximum of 3 × 384 GB = 1,152 GB of memory. +Beispielsweise beträgt die RAM-Zuweisung bei Aktivierung des _*'Cpool'* für einen Cluster aus drei Hosts vom Typ ```vmware:standard:v2``` 3 x 128 GB = 384 GB RAM. +Dies kann maximal auf 3 x 384 GB = 1152 GB Speicher erweitert werden. - Minimum memory for a 'Cpool' = number of hosts × 128 GB of memory - Maximum memory for a 'Cpool' = number of hosts × physical memory capacity per compute node + Mindestspeicher eines 'Cpool' = Anzahl der Hosts x 128 GB Speicher + Maximalspeicher eines 'Cpool' = Anzahl der Hosts x physische Speichermenge des Compute-Nodes -### Cloud Temple Virtual Machine Catalogs +### Kataloge virtueller Maschinen von Cloud Temple -Cloud Temple provides you with a catalog of `Templates` that is regularly enriched and updated by our teams. -To date, it includes dozens of `Templates` and images ready to be deployed on your virtual machines. +Cloud Temple stellt Ihnen einen Katalog mit `Templates` zur Verfügung, der regelmäßig von unseren Teams erweitert und aktualisiert wird. +Dieser umfasst derzeit mehrere Dutzend `Templates` und Images, die auf Ihren virtuellen Maschinen bereitgestellt werden können. -### Updating Hypervisors +### Hypervisor-Updates -Cloud Temple regularly provides updates for hypervisors to ensure security patches are applied. -However, updating hypervisors remains your responsibility, as we do not have visibility into your business constraints. +Cloud Temple stellt regelmäßig Builds für Hypervisor bereit, um die Anwendung von Sicherheitsupdates sicherzustellen. +Die Aktualisierung der Hypervisor bleibt jedoch in Ihrer Verantwortung, da wir keine Einblicke in Ihre betrieblichen Anforderungen haben. -The update process is fully automated. To ensure service continuity, a minimum of two hypervisors is required per cluster during the update. Make sure you have the necessary permissions to perform these actions. +Der Aktualisierungsprozess ist vollständig automatisiert. Um die Servicekontinuität zu gewährleisten, ist während der Aktualisierung ein Mindestbestand von zwei Hypervisor pro Cluster erforderlich. Stellen Sie sicher, dass Sie über die erforderlichen Berechtigungen verfügen, um diese Aktionen durchzuführen. -### VM Affinity Management +### Verwaltung der Affinität Ihrer virtuellen Maschinen -__Affinity and anti-affinity rules__ allow you to control the placement of virtual machines (VMs) across your hypervisors. -They can be used to manage resource utilization within your __'Cpool'__. -For example, they help balance workloads across servers or isolate resource-intensive workloads. -In a __'Cpool'__ environment based on VMware, these rules are frequently used to manage VM behavior during vMotion operations. -vMotion enables the migration of virtual machines from one host to another without service interruption. +Mit __Affinitäts- und Anti-Affinitätsregeln__ können Sie den Standort Ihrer virtuellen Maschinen auf Ihren Hypervisoren steuern. +Sie können verwendet werden, um die Ressourcennutzung Ihres __'Cpool'__ zu verwalten. +Beispielsweise können sie dabei helfen, die Arbeitslast zwischen den Servern zu balancieren oder ressourcenintensive Arbeitslasten zu isolieren. +In einem __'Cpool'__ VMware werden diese Regeln häufig verwendet, um das Verhalten der virtuellen Maschinen im Zusammenhang mit vMotion zu steuern. +vMotion ermöglicht das Verschieben virtueller Maschinen von einem Host auf einen anderen ohne Dienstunterbrechung. -You can configure the following rules via the rule management interface: +Über die Regelverwaltung können Sie Folgendes konfigurieren: -- __Affinity Rules__: These rules ensure that certain virtual machines run on the same physical host. - They are used to improve performance by keeping VMs that communicate frequently together on the same server, thereby reducing network latency. - Affinity rules are particularly useful in scenarios where performance is critical—such as database systems or applications requiring fast inter-server communication. +- __Affinitätsregeln__: Diese Regeln stellen sicher, dass bestimmte virtuelle Maschinen auf demselben physischen Host ausgeführt werden. +Sie werden zur Leistungsverbesserung eingesetzt, indem häufig kommunizierende virtuelle Maschinen auf demselben Server gehalten werden, um die Netzwerklatenz zu reduzieren. Affinitätsregeln sind in Szenarien nützlich, in denen die Leistung kritisch ist, wie beispielsweise bei Datenbanken oder Anwendungen, die eine schnelle Kommunikation zwischen den Servern erfordern. -- __Anti-Affinity Rules__: Conversely, these rules ensure that certain virtual machines do not run on the same physical host. - They are essential for availability and resilience—for instance, to prevent all critical VMs from being affected in the event of a single host failure. - Anti-affinity rules are crucial for high-availability applications, such as in production environments where fault tolerance is a top priority. - For example, you would not want both of your Active Directory servers located on the same hypervisor. +- __Anti-Affinitätsregeln__: Im Gegensatz dazu stellen diese Regeln sicher, dass bestimmte virtuelle Maschinen nicht auf demselben physischen Host ausgeführt werden. Sie sind wichtig für Verfügbarkeit und Resilienz, beispielsweise um zu verhindern, dass kritische Maschinen im Falle eines einzelnen Serverausfalls alle betroffen sind. +Anti-Affinitätsregeln sind entscheidend für Anwendungen, die eine hohe Verfügbarkeit erfordern, wie in Produktionsumgebungen, in denen die Ausfalltoleranz Priorität hat. +Beispielsweise möchten Sie nicht, dass sich Ihre beiden Active Directory-Instanzen auf demselben Hypervisor befinden. -When creating a rule, you define: +Bei der Erstellung einer Regel definieren Sie den Regeltyp (Affinität / Anti-Affinität), den Namen der Regel, +ihren Aktivierungszustand (__'Status'__) und die betroffenen Maschinen Ihres Hypervisor-Clusters. -- The rule type (affinity / anti-affinity), -- The rule name, -- The activation status (__'Status'__), -- And the VMs involved within your hypervisor cluster. +*Hinweis: Die in der Konsole angebotenen Affinitäts-/Anti-Affinitätsregeln gelten für die virtuellen Maschinen untereinander (keine Regeln zwischen Hypervisoren und virtuellen Maschinen).* -*Note: The affinity/anti-affinity rules available in the console are rules between virtual machines (not between hypervisors and VMs).* +### Asynchrone Replikation Ihrer virtuellen Maschinen in VMware-Umgebungen -### Asynchronous replication of your virtual machines in a VMware environment +Die asynchrone Replikation Ihrer virtuellen Maschinen ist ein Mechanismus, bei dem Schreiboperationen auf der Standby-Stelle im regelmäßigen Zeitabstand auf Ebene des Quell-Hypervisors übertragen werden. -Asynchronous replication of your virtual machines is a mechanism that pushes write operations from the source hypervisor to the standby site at regular intervals. +Nach einer initialen Online-Kopie des gesamten aktiven Speichers auf die Standby-Stelle werden ausschließlich Schreiboperationen in regelmäßigen Abständen an die inaktive Stelle übertragen. +Dieses Intervall hängt vom Schreibvolumen ab (von stündlich bis alle 24 Stunden). -After an initial hot copy of all active storage to the standby site, only write operations are pushed at regular intervals to the dormant site. -The interval depends on the volume of writes (ranging from every hour to every 24 hours). +Die Replikation virtueller Maschinen stützt sich auf den Snapshot-Mechanismus des Hypervisors. In dieser Hinsicht, +weist diese Lösung dieselben Nachteile auf, insbesondere die Empfindlichkeit gegenüber dem Schreibvolumen der virtuellen Maschine, +da der Snapshot-Prozess ein rekursiver Mechanismus zum Abschluss eines Snapshots ist. -VM replication relies on the hypervisor’s snapshot mechanism. As such, this solution shares the same drawbacks, particularly sensitivity to the VM’s write volume, since the snapshot process is recursive and requires closing the snapshot. +Das typische Beispiel für eine Maschine, die den Mechanismus der virtuellen Maschinenreplikation nicht unterstützt, ist ein +FTP-Server, der Echtzeit-Streams von Überwachungskameras empfängt. __Die Maschine schreibt ständig und wird +nicht in der Lage sein, einen Snapshot abzuschließen, ohne das Betriebssystem für einen erheblichen Zeitraum +(mehrere Dutzend Minuten)__. Wenn der Hypervisor den Snapshot nicht abschließen kann, wird er genau das tun, +ohne dass eine Intervention möglich wäre, außer durch eine Beschädigung der virtuellen Maschine. -A typical example of a machine that does not support VM replication is an FTP server receiving real-time video streams from surveillance cameras. __The machine is constantly writing data and will not be able to close a snapshot without pausing the operating system for a significant period (several tens of minutes).__ If the hypervisor fails to close the snapshot, it will proceed to do so anyway—without the possibility of intervention, unless the virtual machine becomes corrupted. - -| SLA | Description | +| SLA | Beschreibung | |-----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------| -| RPO of 1H to 24H | In the event of a disaster at the primary datacenter, the maximum amount of data lost corresponds to the last write push to the standby site. | -| RTO < 15 min | Virtual machine startup operation on the remote site after stopping the VM at the primary site. | +| RPO von 1H bis 24H | Im Falle eines Ausfalls des primären Rechenzentrums entspricht die maximal verlorene Datenmenge der letzten Übertragung der Schreiboperationen auf die Standby-Stelle. | +| RTO < 15 Min. | Startvorgang der gestoppten virtuellen Maschine am entfernten Standort | -In case of need or failure of a machine at the primary site, the mirrored machine at the standby site is activated. -Recovery requires reserving compute and RAM capacity at the standby site. It is also necessary to have the same storage space available at the passive site as at the active site. +Bei Bedarf oder bei einem Ausfall einer Maschine im primären Standort wird die gespiegelte Maschine auf der Standby-Stelle aktiviert. +Die Wiederaufnahme des Betriebs erfordert, dass auf der Standby-Stelle Rechenleistung und RAM im Standby vorgehalten werden. Es +muss auf dem passiven Standort derselbe Speicherplatz verfügbar sein wie auf dem aktiven Standort. -| Reference | Unit | SKU | -|-----------------------------------|------|-------------------------------------------------| -| PRA - VMware replication inter-AZ | 1 VM | csp:(region):iaas:vmware:licence:replication:v1 | +| Referenz | Einheit | SKU | +|-----------------------------------|---------|-------------------------------------------------| +| DRP - VMware-Replikation zwischen AZ | 1 VM | csp:(region):iaas:vmware:licence:replication:v1 | -*__Note__: The minimum RPO must be defined based on the rate of change on the virtual machine.* +*__Hinweis__ : Die Berechnung des minimalen RPO muss basierend auf der Änderungsrate der virtuellen Maschine festgelegt werden.* -## Virtual Machine Backup +## Sicherung von virtuellen Maschinen -Cloud Temple offers a __native, non-optional cross-architecture backup solution__ (mandatory for the French secnumcloud certification). +Cloud Temple bietet __eine native und nicht deaktivierbare Cross-Sicherung-Architektur__ (diese ist für die französische secnumcloud-Zertifizierung verpflichtend). -Backups are stored in a different availability zone and on a physically separate datacenter from the one hosting the virtual machine. They are encrypted using the AES 256-bit symmetric key algorithm (cipher mode `xts-plain64`) to ensure data confidentiality. +Die Sicherungen werden in einer Verfügbarkeitszone und in einem physischen Rechenzentrum gespeichert, das sich von dem unterscheidet, das die virtuelle Maschine hostet. Sie werden mit einem symmetrischen AES-256-Bit-Schlüsselalgorithmus (Cipher-Modus `xts-plain64`) verschlüsselt, um die Vertraulichkeit der Daten zu gewährleisten. -This setup protects against major failures in the production datacenter and enables restoration on a secondary datacenter (e.g., in case of fire). +Dies schützt vor schwerwiegenden Ausfällen im Produktionsrechenzentrum und ermöglicht die Wiederherstellung in einem sekundären Rechenzentrum (z. B. bei einem Brand). -The solution includes: +Diese Lösung umfasst: -- Hot off-site backup of all disks, -- Instant presentation and booting of a virtual machine from the mass storage infrastructure, followed by hot reloading onto the production SAN, -- Partial file restoration from backup, -- Retention limited solely by allocated mass storage space. +- Die Hot-Sicherung aller Datenträger an einem externen Standort, +- Die Bereitstellung und den sofortigen Start einer virtuellen Maschine aus der Massenspeicher-Infrastruktur sowie das Hot-Loading auf die SANs des Produktionsstandorts, +- Die partielle Wiederherstellung von Dateien aus der Sicherung, +- Eine Aufbewahrungsfrist, die ausschließlich durch die Zuweisung von Massenspeicherplatz begrenzt ist. -This backup infrastructure is based on the *IBM Spectrum Protect Plus* solution — a no-agent architecture, easy to use, enabling automation of backup processes and optimization of mass storage space. +Diese Sicherungsinfrastruktur basiert auf der Lösung *IBM Spectrum Protect Plus*, einer agentenlosen Architektur-Lösung, +die einfach zu bedienen ist und die Automatisierung von Sicherungsprozessen sowie eine Optimierung des Massenspeicherplatzes ermöglicht. -Backup and restore speeds depend on the change rate within the environments. -Backup policies are configurable per virtual machine via the [Cloud Temple Console](../console/console.md). +Die Geschwindigkeiten von Sicherungen und Wiederherstellungen hängen vom Änderungsgrad der Umgebungen ab. +Die Sicherungsrichtlinie kann für jede virtuelle Maschine über [die Cloud Temple Konsole](../console/console.md) konfiguriert werden. -*__Note:__* +*__Hinweis:__* -*__Some virtual machines are incompatible with this backup technology__, which relies on the hypervisor’s snapshot mechanisms. These are typically machines with constant disk write workloads. The hypervisor cannot close the snapshot, forcing the virtual machine to be frozen to complete the closure operation. This freeze can last several hours and cannot be stopped.* +*__Bestimmte virtuelle Maschinen sind mit dieser Sicherungstechnologie nicht kompatibel__*, die auf den Snapshot-Mechanismen des Hypervisors basiert. +Dies betrifft typischerweise Maschinen, bei denen die Schreiblast auf die Festplatte konstant ist. Der Hypervisor kann den Snapshot nicht schließen, was +ein Einfrieren der virtuellen Maschine erfordert, um den Schließvorgang abzuschließen. Dieses Einfrieren kann mehrere Stunden dauern und ist nicht abbrechbar.* -*In such cases, the recommended solution is to exclude the disk subject to continuous writes and back up the data using an alternative method.* +*Die Lösung besteht darin, die Festplatte, die Ziel permanenter Schreibvorgänge ist, auszuschließen und die Daten mit einer anderen Methode zu sichern.* -| Reference | Unit | SKU | +| Referenz | Einheit | SKU | | ------------------------------------------------------- | ----- | ------------------------------ | -| BACKUP - Access to IBM Spectrum Protect Plus service | 1 VM | csp:(region):iaas:backup:vm:v1 | +| SICHERUNG - Zugriff auf den IBM Spectrum Protect Plus-Dienst | 1 VM | csp:(region):iaas:backup:vm:v1 | -#### Create a backup policy +#### Eine Backup-Richtlinie erstellen -To create a new backup policy, you must submit a request to support. Support is accessible via the buoy icon in the top-right corner of the window. +Um eine neue Backup-Richtlinie hinzuzufügen, muss eine Anfrage beim Support gestellt werden. Der Support ist über das Lifebuoy-Symbol in der oberen rechten Ecke des Fensters erreichbar. -Creating a new backup policy is done through a __service request__ specifying: +Die Erstellung einer neuen Backup-Richtlinie erfolgt über __eine Serviceanfrage__, die folgende Angaben enthält: - Your Organization's name - A contact person's name, email address, and phone number to finalize the configuration - The tenant name - The backup policy name - The retention characteristics (x days, y weeks, z months, ...) + Der Name Ihrer Organisation + Der Name eines Kontakts mit E-Mail-Adresse und Telefonnummer zur Fertigstellung der Konfiguration + Der Name des Tenants + Der Name der Backup-Richtlinie + Die Eigenschaften (x Tage, y Wochen, z Monate, ...) -## Advanced Data Protection (HSM/KMS) +## Erweiterte Datensicherheit (HSM/KMS) -Cloud Temple offers a __advanced virtual machine encryption__ solution based on hardware security modules (HSM) and a key management service (KMS). This feature enhances the protection of sensitive data through centralized and secure key management, seamlessly integrated into the SecNumCloud environment. +Cloud Temple bietet eine Lösung zur __erweiterten Verschlüsselung virtueller Maschinen__ auf Basis von Hardware-Sicherheitsmodulen (HSM) und einem Schlüsselverwaltungsdienst (KMS). Diese Funktion ermöglicht eine verstärkte Absicherung sensibler Daten durch ein zentrales und sicheres Management der Verschlüsselungsschlüssel, das direkt in die SecNumCloud-Umgebung integriert ist. ### Technische Architektur -Die Lösung basiert auf einer robusten Sicherheitsinfrastruktur, die folgende Komponenten umfasst: +Die Lösung basiert auf einer robusten Sicherheitsinfrastruktur, die aus folgenden Komponenten besteht: -- __HSM (Hardware Security Module)__ : Module __Thales Luna S790__, zertifiziert nach __FIPS 140-3 Level 3__ -- __KMS (Key Management System)__ : __Thales CipherTrust Manager__ zur zentralen Schlüsselverwaltung -- __VMware-Integration__ : Kommunikation über das Protokoll __KMIP__ (Key Management Interoperability Protocol) +- __HSM (Hardware Security Module)__ : __Thales Luna S790__-Module, die nach __FIPS 140-3 Level 3__ zertifiziert sind +- __KMS (Key Management System)__ : __Thales CipherTrust Manager__ für das zentrale Schlüsselmanagement +- __VMware-Integration__ : Kommunikation über das __KMIP__-Protokoll (Key Management Interoperability Protocol) -#### High Availability Deployment +#### Hochverfügbarkeitsbereitstellung -The HSM infrastructure is deployed across __three availability zones__ in the FR1 region: +Die HSM-Infrastruktur ist in __drei Verfügbarkeitszonen__ der Region FR1 bereitgestellt: -- PAR7S +- PAR7S - TH3S - AZ07 -This distribution ensures maximum __high availability__ and __resilience__ of the encryption service. +Diese Aufteilung gewährleistet eine __maximale Hochverfügbarkeit__ und __Resilienz__ des Verschlüsselungsdienstes. -### Operation and Key Hierarchy +### Funktionsweise und Schlüsselhierarchie -The system uses a __cryptographic key hierarchy__ to ensure data security: +Das System verwendet eine __Hierarchie kryptografischer Schlüssel__, um die Datensicherheit zu gewährleisten: -| Level | Key Type | Description | Location | -|-------|----------|-------------|----------| -| 1 | __Root of Trust (RoT)__ | Master key managed by KMS | HSM Luna | -| 2 | __Domain Key (DK)__ | Domain key per client (multi-tenant isolation) | HSM Luna | -| 3 | __Key Encryption Key (KEK)__ | Key encryption key per VM | CipherTrust Manager | -| 4 | __Data Encryption Key (DEK)__ | Data encryption key per VM | VMware ESXi | +| Ebene | Schlüsseltyp | Beschreibung | Speicherort | +|--------|-------------|-------------|--------------| +| 1 | __Root of Trust (RoT)__ | Master-Schlüssel pro KMS | HSM Luna | +| 2 | __Domain Key (DK)__ | Domänenschlüssel pro Kunde (Multi-Tenant-Isolierung) | HSM Luna | +| 3 | __Key Encryption Key (KEK)__ | Verschlüsselungsschlüssel pro VM | CipherTrust Manager | +| 4 | __Data Encryption Key (DEK)__ | Datenschlüssel pro VM | VMware ESXi | #### Verschlüsselungsprozess -1. __Generierung__: VMware ESXi generiert eine eindeutige DEK für jede virtuelle Maschine -2. __Schutz__: Die DEK wird durch die KEK verschlüsselt, die in CipherTrust Manager gespeichert ist -3. __Sicherung__: Die KEK wird ihrerseits durch die HSM-Schlüsselhierarchie geschützt -4. __Speicherung__: Die verschlüsselte DEK wird zusammen mit den VM-Konfigurationsdateien gespeichert - -### Security and Compliance +1. __Generierung__ : VMware ESXi generiert einen eindeutigen DEK für jede virtuelle Maschine +2. __Schutz__ : Der DEK wird durch die im CipherTrust Manager gespeicherte KEK verschlüsselt +3. __Absicherung__ : Die KEK wird selbst durch die HSM-Schlüsselhierarchie geschützt +4. __Speicherung__ : Der verschlüsselte DEK wird zusammen mit den Konfigurationsdateien der VM gespeichert -#### Certifications +### Sicherheit und Compliance -- __FIPS 140-3 Level 3__ : Highest level certification for HSMs -- __Common Criteria EAL4+__ : Advanced security evaluation -- __SecNumCloud__ : ANSSI qualification integrated into the Cloud Temple environment +#### Zertifizierungen +- __FIPS 140-3 niveau 3__ : Zertifizierung der höchsten Stufe für HSM +- __Common Criteria EAL4+__ : Erweiterte Sicherheitsbewertung +- __SecNumCloud__ : ANSSI-Qualifikation, integriert in die Cloud-Temple-Umgebung -#### Multi-tenant Isolation +#### Multi-Tenant-Isolation -- __Cryptographic separation__: Each client has an isolated KMS domain -- __Dedicated keys__: A specific Domain Key per client -- __Audit and traceability__: Full logging of actions per domain +- __Kryptographische Trennung__ : Jeder Kunde verfügt über eine isolierte KMS-Domäne +- __Dedizierte Schlüssel__ : Ein spezifischer Domain Key pro Kunde +- __Audit und Nachverfolgbarkeit__ : Vollständige Protokollierung der Aktionen pro Domäne -### Activation and Usage +### Aktivierung und Nutzung -VM encryption can be activated __with a single click__ from the [Console](../console/console.md). +Die Verschlüsselung virtueller Maschinen wird __mit einem einzigen Klick__ in der [Konsole](../console/console.md) aktiviert. -For a detailed step-by-step guide with screenshots, see the [VM Encryption Tutorial](tutorials/vm_encryption.md). +Für ein detailliertes Vorgehen mit Screenshots lesen Sie das [Tutorial zur Verschlüsselung virtueller Maschinen](tutorials/vm_encryption.md). #### Voraussetzungen -- __Konfigurierter Schlüsselanbieter__: Ein HSM-/KMS-Anbieter muss auf der vStack aktiviert sein -- __Deaktivierte virtuelle Maschine__: Die VM muss heruntergefahren sein, bevor die Verschlüsselung durchgeführt wird -- __Keine aktive Replikation__: Die VM darf nicht repliziert werden (nicht kompatibel mit Global Mirror) -- __Kein Snapshot__: Es darf kein Momentaufnahme vorhanden sein -- __Abonnement für den Dienst__: Der erweiterte Schutzdienst muss abonniert sein +- __Konfigurierter Schlüsselanbieter__ : Ein HSM/KMS-Anbieter muss auf der vStack aktiviert sein +- __Virtuelle Maschine ausgeschaltet__ : Die VM muss vor der Verschlüsselung gestoppt sein +- __Keine aktive Replikation__ : Die VM darf nicht repliziert werden (inkompatibel mit Global Mirror) +- __Kein Snapshot__ : Es dürfen keine Snapshots vorhanden sein +- __Serviceabonnement__ : Der Dienst für erweiterten Schutz muss abonniert sein -*__Hinweis__: Für weitere Informationen zu den Voraussetzungen und dem vollständigen Prozess siehe den [Leitfaden zur VM-Verschlüsselung](tutorials/vm_encryption.md).* +*__Hinweis__ : Weitere Details zu den Voraussetzungen und dem vollständigen Verfahren finden Sie im [Leitfaden zur VM-Verschlüsselung](tutorials/vm_encryption.md).* -### Limitations and considerations +### Einschränkungen und Überlegungen -#### Compatibility +#### Kompatibilität -- __Global Mirror__ : Encrypted virtual machines are __not compatible__ with Global Mirror replication -- __Restore__ : Backups of encrypted VMs retain their cryptographic protection -- __Export__ : Exporting encrypted VMs requires specific procedures +- __Global Mirror__ : Verschlüsselte virtuelle Maschinen sind __nicht kompatibel__ mit der Global Mirror-Replikation +- __Wiederherstellung__ : Backups verschlüsselter VMs behalten ihren kryptografischen Schutz bei +- __Export__ : Der Export verschlüsselter VMs erfordert spezifische Verfahren #### Leistung -- __Minimaler Einfluss__: Die Hardware-Verschlüsselung gewährleistet optimale Leistung -- __Transparenz__: Kein Einfluss auf das Verhalten der Anwendungen +- __Minimale Auswirkungen__ : Hardwareverschlüsselung gewährleistet optimale Leistung +- __Transparenz__ : Keine Auswirkungen auf den Betrieb der Anwendungen -### Recommended Use Cases +### Empfohlene Anwendungsfälle -This advanced protection solution is particularly suitable for: +Diese fortschrittliche Schutzlösung ist insbesondere geeignet für: -- __Sensitive Data__: Personal information, financial data, trade secrets -- __Regulatory Compliance__: GDPR, HIPAA, PCI-DSS, ISO 27001, PDIS requirements -- __Critical Sectors__: Banking, insurance, healthcare, defense -- __Digital Sovereignty__: Protection against unauthorized access, even in case of compromise +- __Sensible Daten__ : Persönliche Informationen, Finanzdaten, Geschäftsgeheimnisse +- __Einhaltung gesetzlicher Vorschriften__ : Anforderungen nach DSGVO, HIPAA, PCI-DSS, ISO 27001, PDIS +- __Kritische Sektoren__ : Banken, Versicherungen, Gesundheitswesen, Verteidigung +- __Digitale Souveränität__ : Schutz vor unbefugtem Zugriff, auch im Falle einer Kompromittierung -| Reference | Unit | SKU | -|-----------|------|-----| -| ADVANCED PROTECTION - VM Encryption via HSM/KMS | 1 VM | csp:(region):iaas:vmware:encryption:hsm:v1 | +| Referenz | Einheit | SKU | +|-----------|-------|-----| +| FORTGESCHRITTENER SCHUTZ - VM-Verschlüsselung über HSM/KMS | 1 VM | csp:(region):iaas:vmware:encryption:hsm:v1 | -*__Note__:* +*__Hinweis__ :* -- *The service requires a specific subscription and is not included in the standard IaaS offering* -- *Key management remains fully under Cloud Temple’s control within the SecNumCloud environment* -- *Encryption keys never leave the French, sovereign infrastructure* +- *Der Dienst erfordert ein spezifisches Abonnement und ist nicht im Standard-IaaS-Produkt enthalten* +- *Das Schlüsselmanagement bleibt vollständig unter der Kontrolle von Cloud Temple in der SecNumCloud-Umgebung* +- *Die Verschlüsselungsschlüssel verlassen niemals die französische und souveräne Infrastruktur* \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/iaas_vmware.md b/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/iaas_vmware.md index 14ebba01..4f7765cb 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/iaas_vmware.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/iaas_vmware.md @@ -2,22 +2,24 @@ title: Übersicht --- -Das **IaaS Cloud Temple** Angebot, betrieben von VMware, ist darauf ausgelegt, die kritischen Bedürfnisse von Unternehmen in Bezug auf Leistung, Sicherheit und Geschäftskontinuität zu erfüllen. Mit dedizierten Ressourcen, einer **SecNumCloud**-qualifizierten Infrastruktur und voll automatisierten Optionen garantiert diese Lösung eine optimale Zuverlässigkeit für sensible Workloads. +# IaaS VMware + +Das **IaaS VMware-Angebot** ist darauf ausgelegt, die kritischen Unternehmensanforderungen an Leistung, Sicherheit und Geschäftskontinuität zu erfüllen. Mit dedizierten Ressourcen, einer **SecNumCloud**-qualifizierten Infrastruktur und vollständig automatisierten Optionen gewährleistet dieser Dienst optimale Zuverlässigkeit für Ihre sensiblen Workloads.

Konzepte

-

Entdecken Sie die grundlegenden Prinzipien und Konzepte, um unsere Infrastruktur zu verstehen und zu beherrschen.

+

Erkunden Sie die Grundlagen und wesentlichen Prinzipien, um unsere Infrastruktur zu verstehen und sicher zu nutzen.

Konzepte erkunden →

Quickstart

-

Beginnen Sie schnell mit unseren Ressourcen, indem Sie klaren und einfachen Anweisungen folgen.

+

Starten Sie schnell mit unseren Ressourcen und folgen Sie dabei klaren, einfachen Anweisungen.

Quickstart starten →

Tutorials

-

Lernen Sie Schritt für Schritt, wie Sie unsere Dienste mit detaillierten Anleitungen konfigurieren und nutzen können.

+

Lernen Sie Schritt für Schritt die Konfiguration und Nutzung unserer Dienste mit detaillierten Anleitungen.

Tutorials entdecken →
@@ -25,13 +27,13 @@ Das **IaaS Cloud Temple** Angebot, betrieben von VMware, ist darauf ausgelegt, d ## Einkaufsplattformen
-

Sind Sie ein Akteur im öffentlichen Sektor? Das IaaS Cloud Temple Angebot ist über folgende Plattformen verfügbar:

+

Sind Sie im öffentlichen Sektor tätig? Das Produkt IaaS Cloud Temple ist verfügbar über:

@@ -40,7 +42,7 @@ Das **IaaS Cloud Temple** Angebot, betrieben von VMware, ist darauf ausgelegt, d

- Den CAIH-Markt für den medizinischen Sektor + Der CAIH-Rahmenvertrag für den Gesundheitssektor

@@ -48,4 +50,4 @@ Das **IaaS Cloud Temple** Angebot, betrieben von VMware, ist darauf ausgelegt, d Mehr erfahren → - + \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/quickstart.md b/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/quickstart.md index 8d57ce83..456f70b9 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/quickstart.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/quickstart.md @@ -34,7 +34,7 @@ import shivaCpool_007 from '@site/docs/iaas_vmware/images/shiva_cpool_007.png' import shivaCpool_008Build from '@site/docs/iaas_vmware/images/shiva_cpool_008_build.png' import shivaCpool_008Firm from '@site/docs/iaas_vmware/images/shiva_cpool_008_firm.png' import shivaCpool_006 from '@site/docs/iaas_vmware/images/shiva_cpool_006.png' -import shivaSupport from '@site/docs/./console/images/shiva_support.png' +import shivaSupport from '@site/docs/console/images/shiva_support.png' import shivaVmPolitiquesBackupAssignMandatory from '@site/docs/iaas_vmware/images/shiva_vm_politiques_backup_assign_mandatory.png' import shivaVmPolitiquesBackup from '@site/docs/iaas_vmware/images/shiva_vm_politiques_backup.png' import shivaVmDisquesVirtuelsPolitiques from '@site/docs/iaas_vmware/images/shiva_vm_disques_virtuels_politiques.png' @@ -52,477 +52,450 @@ import iaasVmwareClusterUsedMemory from '@site/docs/iaas_vmware/images/iaas_vmwa import iaasVmwareClusterWorstCaseAllocationMemory from '@site/docs/iaas_vmware/images/iaas_vmware_cluster_worst_case_allocation_memory.png' import iaasVmwareEsxMemory from '@site/docs/iaas_vmware/images/iaas_vmware_esx_memory.png' -## Calculation +## Berechnung -### Virtual Machine Management +### Verwaltung virtueller Maschinen -The interface for managing your virtual machines is available in the Console under the __'IaaS'__ menu located on the green bar on the left side of the screen. +Die Verwaltungsoberfläche für Ihre virtuellen Maschinen ist in der Konsole im Menü __'IaaS'__ verfügbar, das sich auf dem grünen Banner links auf dem Bildschirm befindet. ### Liste der virtuellen Maschinen -In der Sektion __'Virtuelle Maschinen'__ haben Sie Zugriff auf die Liste Ihrer auf Ihrem vertrauenswürdigen Cloud-System gehosteten virtuellen Maschinen. +Im Bereich __'Virtuelle Maschinen'__ haben Sie Zugriff auf die Liste Ihrer virtuellen Maschinen, die in Ihrer vertrauenswürdigen Cloud gehostet werden. -Für jede virtuelle Maschine stehen Ihnen folgende Informationen zur Verfügung: +Für jede virtuelle Maschine haben Sie Zugriff auf die folgenden Informationen: - ihr Name, -- die ihr zugewiesenen Tags, -- ihr Status (aus, an, in Bearbeitung, Host getrennt oder ungültig), -- ihr Manager (im VMware-Umfeld der zugehörige Vcenter), +- die zugewiesenen Tags, +- ihr Status (éteinte, allumée, en traitement, host déconnecté ou invalid), +- ihr Manager (en environnement VMware, le Vcenter associé), - ihr Betriebssystem, -- die Anzahl virtueller CPUs (vCPU), -- die Menge an virtuellem Arbeitsspeicher (vRAM). +- die Anzahl der virtuellen CPUs (vCPU), +- die Menge des virtuellen Arbeitsspeichers (vRAM). -### VM-Aktionen +### Aktionen für virtuelle Maschinen -Die folgenden Aktionen sind über diese Schnittstelle möglich: +Aus dieser Schnittstelle sind die folgenden Aktionen möglich: -- Aktualisieren der Liste der virtuellen Maschinen; -- Exportieren der Liste im CSV-Format; -- Filtern der Liste; -- Suchen einer virtuellen Maschine anhand ihres Namens; -- Erstellen einer neuen virtuellen Maschine. +- Die Liste der virtuellen Maschinen aktualisieren; +- Die Liste im CSV-Format exportieren; +- Die Liste filtern; +- Eine virtuelle Maschine nach ihrem Namen suchen; +- Eine neue virtuelle Maschine erstellen. -__Ein Warnbanner kann oben in der Liste angezeigt werden__: Es weist darauf hin, dass auf einer oder mehreren Ihrer virtuellen Maschinen kritische Alarme ausgelöst wurden. -Der Button __'Anzeigen'__ ermöglicht es, die betroffenen virtuellen Maschinen dieser Benachrichtigung zu prüfen. +__Ein Warnbalken kann oben in der Liste angezeigt werden__: Er zeigt an, dass kritische Alarme für eine oder mehrere Ihrer virtuellen Maschinen ausgelöst wurden. +Die Schaltfläche __'Anzeigen'__ ermöglicht es, die virtuellen Maschinen einzusehen, die von dieser Benachrichtigung betroffen sind. -Wenn Sie auf den grünen Dropdown-Pfeil rechts neben einer virtuellen Maschine in der Liste klicken: +Wenn Sie auf den grünen Dropdown-Pfeil rechts in der Liste für eine virtuelle Maschine klicken: -erhalten Sie Zugriff auf alle verfügbaren Informationen zu dieser Maschine: +Sie erhalten Zugriff auf alle Informationen dazu: -Ein Schnellbanner ermöglicht die Ausführung folgender Aktionen: +Ein Schnellmenü ermöglicht die folgenden Aktionen: -- Starten der virtuellen Maschine; -- Herunterfahren der virtuellen Maschine; -- Neustarten der virtuellen Maschine; -- Ändern der Gast-System-Stromversorgungseinstellungen; -- Öffnen der Konsole; -- Einhängen einer ISO-Datei; -- Ausklinken einer ISO-Datei; -- Klonen der virtuellen Maschine; -- Verschieben (vMotion); -- Umbenennen der virtuellen Maschine; -- Löschen der virtuellen Maschine. +- Die virtuelle Maschine einschalten; +- Sie ausschalten; +- Sie neu starten; +- Die Stromversorgungsoptionen des Gast-Betriebssystems ändern; +- Die Konsole öffnen; +- Ein ISO-Image einbinden; +- Ein ISO-Image aushängen; +- Die virtuelle Maschine klonen; +- Sie verschieben (vMotion); +- Sie umbenennen; +- Sie löschen. -Eine Kurzübersicht bietet eine Visualisierung des __Speichers__, des __CPU-Verbrauchs__ und des __RAM-Gebrauchs__ der virtuellen Maschine. +Eine Schnellansicht bietet eine Visualisierung des __Speichers__, der __CPU__ und des __RAMs__ der virtuellen Maschine. -Im Tab __'Allgemeine Informationen'__ finden Sie detaillierte Angaben zu Ihrer virtuellen Maschine, wie z. B. das Betriebssystem, der physische Standort (Datacenter, Datastore usw.), RAM, CPU, IP-Adressen, Protokolle und weitere Details. +Im Reiter __'Allgemeine Informationen'__ finden Sie detaillierte Informationen zu Ihrer virtuellen Maschine, wie z. B. das Betriebssystem, den physischen Standort (Rechenzentrum, Datastore usw.), den RAM, die CPU, die IP-Adressen, die Logs und weitere. -Von dieser Ansicht aus können Sie folgende Aktionen durchführen: +Von dieser Ansicht aus können Sie die folgenden Aktionen durchführen: -- Ändern des Betriebssystems (die virtuelle Maschine muss ausgeschaltet sein), -- Aktualisieren der Hardwareversion (die virtuelle Maschine muss ausgeschaltet sein), -- Ändern von RAM oder CPU. +- Das Betriebssystem ändern (die virtuelle Maschine muss ausgeschaltet sein), +- Die Hardware-Version aktualisieren (die virtuelle Maschine muss ausgeschaltet sein), +- Den RAM oder die CPU ändern. -Ein Tab __'Erweitert'__ ermöglicht den Zugriff auf spezifischere Informationen wie z. B. „VMware Tools“, Hardwareversion, Manager usw. +Ein Reiter __'Erweitert'__ ermöglicht den Zugriff auf spezifischere Informationen wie „VMware Tools“, die Hardware-Version, den Manager usw. -### Editing RAM or CPU of a virtual machine +### Ändern des RAM oder der CPU einer virtuellen Maschine -Go to the __'Virtual Machines'__ tab, display the details of a virtual machine, select the __'General Information'__ tab, and click the edit button for the variable you want to modify: +Gehen Sie zum Reiter __'Virtuelle Maschinen'__, zeigen Sie die Details einer virtuellen Maschine an, +wählen Sie den Reiter __'Allgemeine Informationen'__ und klicken Sie auf die Schaltfläche zum Bearbeiten der zu ändernden Variable : -### Disk modes +### Festplattenmodi -You can add different disk modes: +Sie können verschiedene Festplattenmodi hinzufügen: -- __Persistent__: Changes are immediately and permanently written to the virtual disk. __This is the recommended mode.__ -- __Non-persistent independent__: Changes made to the virtual disk are recorded in a new log file and deleted when the virtual machine is powered off. Not affected by snapshots. __Not supported by backup.__ -- __Persistent independent__: Changes are immediately and permanently written to the virtual disk. Not affected by snapshots. __Not supported by backup.__ +- __Persistent__ : Änderungen werden sofort und dauerhaft auf der virtuellen Festplatte gespeichert. __Dies ist der empfohlene Modus.__ +- __Unabhängig, nicht persistent__ : Änderungen an der virtuellen Festplatte werden in einem neuen Protokoll gespeichert und beim Herunterfahren gelöscht. Nicht von Snapshots betroffen. __Wird nicht von der Sicherung unterstützt.__ +- __Unabhängig, persistent__ : Änderungen werden sofort und dauerhaft auf der virtuellen Festplatte gespeichert. Nicht von Snapshots betroffen. __Wird nicht von der Sicherung unterstützt.__ -### Virtual Machine Controller Management +### Verwaltung von Controllern virtueller Maschinen -You can modify the disk controller type for your virtual machine. +Sie können den Typ des Festplatten-Controllers für Ihre virtuelle Maschine ändern. -Virtual machines can be equipped with SCSI and NVMe controllers, with a limit of 4 controllers of each type. Each controller can manage up to 15 disks. +Virtuelle Maschinen können mit SCSI- und NVME-Controllern ausgestattet werden, wobei maximal 4 Controller jedes Typs zulässig sind. Jeder Controller kann bis zu 15 Festplatten verwalten. -A SCSI controller can be configured with different subtypes: Para Virtual, Bus Logic, LSI Logic, or LSI Logic SAS. +Ein SCSI-Controller kann mit verschiedenen Untertypen konfiguriert werden: Para Virtual, Bus Logic, LSI Logic oder LSI Logic SAS. -The Para Virtual controller stands out due to its extended capabilities. It can support up to 64 disks when the virtual machine's hardware version is compatible with ESXi version 6.7 or higher. +Der Para Virtual-Controller zeichnet sich durch seine erweiterte Kapazität aus. Er kann bis zu 64 Festplatten unterstützen, wenn die Hardware-Version der virtuellen Maschine mit ESXi in Version 6.7 oder höher kompatibel ist. -> __Important__: If you want to change the type of a Para Virtual controller that has more than 15 disks, you must first detach the disks from the affected slots. +> __Wichtig__ : Wenn Sie den Typ eines Para Virtual-Controllers ändern möchten, der mehr als 15 Festplatten besitzt, müssen Sie zunächst die Festplatten an den betreffenden Slots abtrennen. -### Virtual Machine Console +### Konsole einer virtuellen Maschine -The console of a virtual machine is accessible from the list of virtual machines by clicking the __'Console'__ icon: +Die Konsole einer virtuellen Maschine ist über die Liste der virtuellen Maschinen aufrufbar, indem Sie auf das Symbol __'Konsole'__ : -A new tab opens in your browser, displaying the console of your machine, based on a __VNC__ client: +Es öffnet sich ein neuer Tab in Ihrem Browser, und die Konsole Ihrer Maschine, die auf einem __VNC__ : -In the __VNC__ menu, you can: +Im Menü __VNC__ : -- request the transmission of special keys, -- force a keyboard mapping (in case we were unable to correctly identify your keyboard), -- open a text field that can be transmitted to the machine. This method replaces the previous non-functional clipboard, -- switch to full-screen mode. +- das Senden bestimmter Tasten anzufordern, +- eine Tastaturzuordnung zu erzwingen (falls Ihre Tastatur nicht korrekt erkannt wurde), +- ein Textfeld zu öffnen, das an die Maschine gesendet werden kann. Diese Methode ersetzt den alten, nicht funktionierenden Zwischenablage-Modus, +- in den Vollbildmodus zu wechseln. -__Note__: -Window scaling is automatic. +__Hinweis__ : +Die Skalierung des Fensters erfolgt automatisch. -#### Keyboard Layout Support +#### Unterstützung von Tastatursprachen -The input entered in the console depends on the keyboard language of your web browser, the keyboard language of the virtual machine, and whether the 'enforce keyboard' option on the left side of the screen is enabled. Below is a summary of the possible scenarios: +Die in der Konsole vorgenommene Eingabe hängt von der Tastatursprache Ihres Webbrowsers, der Tastatursprache der virtuellen Maschine sowie von der Aktivierung oder Deaktivierung der Option 'enforce keyboard' links auf dem Bildschirm ab. Nachfolgend eine Übersicht der möglichen Szenarien: -| Physical Machine Keyboard Language (Input) | Virtual Machine Keyboard Language | 'Enforce Keyboard' Option Selected | Result (Output) | -|--------------------------------------------|-----------------------------------|------------------------------------|------------------------| -| French | French | No | ✅ | -| French | French | Yes | Not recommended | -| French | English | No | English | -| French | English | Yes | ✅ | -| English | French | No | French | -| English | French | Yes | ✅ | -| English | English | No | ✅ | -| English | English | Yes | Not recommended | +| Tastatursprache des physischen Computers (Eingabe) | Tastatursprache der virtuellen Maschine | Option 'enforce keyboard' ausgewählt | Ergebnis (Ausgabe) | +| ------------------------------------------------- | ----------------------------------------- | -------------------------------------- | ------------------------ | +| Französisch | Französisch | Nein | ✅ | +| Französisch | Französisch | Ja | Nicht empfohlen | +| Französisch | Englisch | Nein | Englisch | +| Französisch | Englisch | Ja | ✅ | +| Englisch | Französisch | Nein | Französisch | +| Englisch | Französisch | Ja | ✅ | +| Englisch | Englisch | Nein | ✅ | +| Englisch | Englisch | Ja | Nicht empfohlen | -__Note__: +__Hinweis__ : -- If certain characters do not appear during manual input, you may try copying them from the clipboard. +- Falls einige Zeichen bei der manuellen Eingabe nicht übernommen werden, können Sie es über die Zwischenablage versuchen. -#### Clipboard Functionality +#### Funktionsweise der Zwischenablage -This feature allows you to send an entire string of characters to your virtual machine. It is important to note that the "enforce keyboard" setting affects how this string of characters is transmitted to your virtual machine. If you notice during console input that the "enforce keyboard" option is required, make sure to enable it before using the clipboard. - -This functionality can be used to send a password, a command, or the content of a configuration file, for example: +Diese Funktion ermöglicht es Ihnen, eine gesamte Zeichenkette an Ihre virtuelle Maschine zu senden. Es ist wichtig zu beachten, dass die Taste "enforce keyboard" beeinflusst, wie diese Zeichenkette +an Ihre virtuelle Maschine übermittelt wird. Wenn Sie bei der Eingabe in der Konsole feststellen, dass die Option "enforce keyboard" erforderlich ist, denken Sie daran, sie zu aktivieren, bevor Sie die Zwischenablage verwenden. +Diese Funktion kann beispielsweise zum Senden eines Passworts, eines Befehls oder des Inhalts einer Konfigurationsdatei verwendet werden: -Upon clicking the "Paste" button, the content of your text field is sent to your virtual machine. +Nach einem Klick auf die Schaltfläche "Paste" wird der Inhalt Ihres Textfelds an Ihre virtuelle Maschine gesendet. -### Cloud Temple Virtual Machine Catalogs +### Cloud Temple Kataloge für virtuelle Maschinen -Cloud Temple provides you with a regularly updated and enriched catalog of `Templates`. To date, this catalog includes dozens of `Templates` and images ready to be deployed on your virtual machines. +Cloud Temple stellt Ihnen einen Katalog mit `Templates` zur Verfügung, der regelmäßig von unseren Teams erweitert und aktualisiert wird. +Er umfasst derzeit mehrere Dutzend `Templates` und Images, die auf Ihren virtuellen Maschinen bereitgestellt werden können. -To publish an ISO/OVF file, navigate to the __'Catalogue'__ view and click the __'Publish Files'__ button at the top of the page: +Um ein ISO/OVF zu veröffentlichen, wechseln Sie zur Ansicht __'Katalog'__ und klicken Sie oben auf der Seite auf die Schaltfläche __'Dateien veröffentlichen'__ : -You can also convert a virtual machine into a template and export it to the catalog. To do so, select a virtual machine and use the __'Clone'__ action button: +Es ist möglich, eine VM in eine Vorlage umzuwandeln und in den Katalog zu exportieren. Wählen Sie dazu eine virtuelle Maschine aus und verwenden Sie die Aktionsschaltfläche __'Klonen'__ : -Select __'Export as vm-template'__: +Wählen Sie __'Als vm-template exportieren'__ : -Then fill in the required information. Once completed, you will be able to deploy a new virtual machine from the template using the __'New Virtual Machine'__ button or from the __'Catalogues'__ page. It is also possible to export the VM in OVF format. +Geben Sie anschließend die erforderlichen Informationen ein. Anschließend können Sie eine neue VM basierend auf der Vorlage über die Schaltfläche __'Neue virtuelle Maschine'__ oder über die Seite __'Kataloge'__ bereitstellen. Es ist auch möglich, die VM im OVF-Format zu exportieren. -__Tip__: It is possible to convert between OVA and OVF files. -The most common method uses VMware Converter, but a simple alternative is available using the ```tar``` command. +__Gut zu wissen__: Es ist möglich, eine OVA-Datei in OVF und umgekehrt zu konvertieren. +Die am häufigsten verwendete Methode ist der VMware Converter, aber es gibt auch eine einfache Methode mit ```tar``` -Extracting an OVA file: +Extrahieren der OVA-Datei: ``` tar -xvf vmName.ova ``` -Creating an OVA file from an OVF file: +Erstellen einer OVA-Datei aus einer OVF-Datei: ``` tar -cvf vmName-NEW.ova vmName.ovf vmName-disk1.vmdk vmName.mf ``` -### Advanced Virtual Machine Configuration: Extra Config +### Erweiterte Einstellungen für virtuelle Maschinen: Extra Config -Extra Config provides a flexible way to include key=value pairs in a virtual machine's configuration. The keys and values are interpreted by the system when the virtual machine is deployed. +Extra Config bietet eine flexible Möglichkeit, Schlüssel-Wert-Paare in die Konfiguration einer virtuellen Maschine aufzunehmen. Schlüssel und Werte werden vom System interpretiert, wenn die virtuelle Maschine bereitgestellt wird. -You can now directly modify __Extra Config__ properties in the advanced options of a virtual machine: +Ab jetzt können Sie direkt die Eigenschaften vom Typ __Extra Config__ in den erweiterten Optionen einer virtuellen Maschine ändern: -You can add a property from a predefined list of keys. Additionally, you can modify the value of a key you have added yourself. Pre-existing key=value pairs cannot be modified. +Sie können eine Eigenschaft aus einer Liste von Schlüsseln hinzufügen. Darüber hinaus können Sie den Wert eines Schlüssels ändern, den Sie selbst hinzugefügt haben. Bereits vorhandene Schlüssel-Wert-Paare können nicht geändert werden. -Please contact support for any request to add new keys. +Bitte wenden Sie sich an den Support, wenn Sie neue Schlüssel hinzufügen möchten. -__Note__: *To enable GPU usage by the virtual machine, it is mandatory to activate the key 'pciPassthru.use64bitMMIO' and allocate the required amount of MMIO (Memory-mapped I/O) space via 'pciPassthru.64bitMMIOSizeGB'. It is strongly recommended to refer to the [official NVIDIA documentation](https://docs.nvidia.com/vgpu/17.0/grid-vgpu-release-notes-vmware-vsphere/index.html#tesla-p40-large-memory-vms).* +__Hinweis__: *Für die Nutzung einer GPU durch die virtuelle Maschine ist es zwingend erforderlich, den Schlüssel 'pciPassthru.use64bitMMIO' zu aktivieren und den erforderlichen MMIO-Speicherplatz (Memory-mapped I/O) über 'pciPassthru.64bitMMIOSizeGB' zuzuweisen. Es wird dringend empfohlen, die [offizielle Nvidia-Dokumentation](https://docs.nvidia.com/vgpu/17.0/grid-vgpu-release-notes-vmware-vsphere/index.html#tesla-p40-large-memory-vms) zu konsultieren.* -### Advanced VM Configuration: vAPP +### Erweiterte Einstellungen für virtuelle Maschinen: vApp -You can also modify __vAPP__ properties in the advanced options of a virtual machine: +Sie können außerdem die Eigenschaften vom Typ __vApp__ in den erweiterten Optionen einer virtuellen Maschine ändern: -You can add a property, modify an existing one, or remove it. Four types of properties are available: String, Number, Boolean, Password: +Sie können eine Eigenschaft hinzufügen, ändern oder löschen. Es werden vier Eigenschaftstypen angeboten: String, Zahl, Boolesch, Passwort: -__Note__: *The virtual machine must be stopped to modify its vAPP properties.* +__Hinweis__: *Die virtuelle Maschine muss gestoppt sein, um ihre vApp-Eigenschaften zu ändern.* -### Management of __'Hypervisors'__ and __'Cpool'__ (Hypervisor Clusters) +### Verwaltung der __'Hypervisor'__ und __'Cpool'__ (Hypervisor-Cluster) -The management of your hypervisors is performed in the __'Compute'__ submenu under __'IaaS'__, located in the green bar on the left side of your screen. +Die Verwaltung Ihrer Hypervisor erfolgt im Untermenü __'Compute'__ des Menüs __'IaaS'__, das sich im grünen Bereich links auf Ihrem Bildschirm befindet. -In this submenu, you have visibility on: +In diesem Untermenü haben Sie einen Überblick über: -- The hypervisor software stack, their AZs, and their resources, -- The backup software stack. +- den Software-Stack der Hypervisor, deren AZ und deren Ressourcen, +- den Software-Stack für die Sicherung. -As of January 2024, the available hypervisor offering on the Cloud Temple qualified infrastructure is based on VMware. The backup software used is IBM Spectrum Protect Plus. +Im Januar 2024 basiert die verfügbare Hypervisor-Plattform auf der qualifizierten Cloud-Temple-Infrastruktur auf VMware. Die verwendete Sicherungssoftware ist IBM Spectrum Protect Plus. -### Steuerung von VMware-Clustern +### Verwaltung der VMware-Cluster -Um die Steuerung von VMware-Clustern zu aktivieren, klicken Sie im Untermenü __'Berechnung'__ des Menüs __'IaaS'__: +Um auf die Verwaltung der VMware-Cluster zuzugreifen, klicken Sie im Untermenü __'Compute'__ des Menüs __'IaaS'__ : -Standardmäßig listet der erste Tab alle Hypervisoren (alle Cluster zusammengefasst): +Standardmäßig listet die erste Registerkarte alle Hypervisor (tous cluster confondus): -Sie können die Details eines Hypervisors anzeigen, indem Sie auf dessen Namen klicken: +Die Details eines Hypervisors können durch Klicken auf seinen Namen angezeigt werden: -Für jeden Hypervisor-Cluster steht ein separater Tab zur Verfügung, um die Details jedes einzelnen Clusters einzusehen: +Für jeden Hypervisor-Cluster steht eine eigene Registerkarte zur Verfügung, um die Details einzeln einzusehen: -Wenn Sie auf einen Cluster klicken, sehen Sie eine Zusammenfassung seiner Zusammensetzung: +Wenn Sie auf einen Cluster klicken, wird eine Zusammenfassung seiner Zusammensetzung angezeigt : -- Gesamtleistung der Berechnung in GHz, -- Gesamtspeicherplatz und Nutzungsratio, -- Gesamtspeicherplatz (alle Speichertypen zusammengefasst) sowie der Anteil der genutzten Kapazität, -- Automatisierungsmechanismen bei Ausfall eines Rechenknotens (__'vSphere DRS'__), -- Anzahl der virtuellen Maschinen, -- Anzahl der Hypervisoren. +- Die gesamte Rechenleistung in GHz, +- Der gesamte verfügbare Arbeitsspeicher und der Nutzungsgrad, +- Der gesamte Speicherplatz (tous types confondus) sowie der genutzte Anteil, +- Automatisierungsmechanismen bei Ausfall einer Rechenlame (__'Vsphere DRS'__), +- Die Anzahl der virtuellen Maschinen, +- Die Anzahl der Hypervisor. -#### Die angezeigten Verbrauchsdaten interpretieren +#### Angezeigte Verbrauchsdaten interpretieren -__Zugewiesener Speicher (Cluster):__ Dieses Diagramm zeigt die Gesamtmenge des Speichers, der dem Cluster zugewiesen ist. +__Zugewiesener Speicher (Cluster) :__ Dieses Diagramm zeigt die dem Cluster insgesamt zugewiesene Speichermenge. -__Verbrauchter Speicher (Cluster):__ Diese Ansicht zeigt den Speicher, der aktiv und ausschließlich von den virtuellen Maschinen des Clusters verbraucht wird. Dies entspricht dem physischen Speicher, der tatsächlich von den VMs für ihre Operationen genutzt wird, was ein wichtiger Indikator für die aktuelle Arbeitslast ist. +__Verbrauchter Speicher (Cluster) :__ Diese Ansicht zeigt den Speicher, der aktiv ausschließlich von den virtuellen Maschinen des Clusters verbraucht wird. Dies entspricht dem physischen Speicher, der von den VMs tatsächlich für ihre Operationen genutzt wird, und ist ein Schlüsselindikator für die aktuelle Arbeitslast. -__Zuteilung im schlimmsten Fall (Cluster):__ Dieses Diagramm veranschaulicht den Speicher, der erforderlich wäre, wenn alle virtuellen Maschinen des Clusters gleichzeitig den gesamten ihnen zugewiesenen Speicher verbrauchen würden (das Worst-Case-Szenario für den Verbrauch). Das Ergebnis umfasst auch den für den Betrieb des Clusters erforderlichen Speicher sowie verschiedene VMware-spezifische Parameter (die Berechnung ist nicht einfach die Summe des RAMs aller virtuellen Maschinen). Dies hilft dabei, den Bedarf an kritischen Ressourcen vorherzusehen und eine Erschöpfung des Speichers zu verhindern. +__Worst-Case-Zuweisung (Cluster) :__ Dieses Diagramm veranschaulicht den Speicherbedarf, falls alle virtuellen Maschinen des Clusters gleichzeitig den ihnen zugewiesenen Gesamtspeicher verbrauchen würden (le scénario de consommation maximale). Das Ergebnis berücksichtigt auch den für den Clusterbetrieb erforderlichen Speicher sowie verschiedene VMware-spezifische Parameter (le calcul n'est pas simplement égal à la somme de la RAM de toutes les machines virtuelles). Dies ermöglicht die Vorhersage kritischer Ressourcenbedarfe und verhindert ein Aufbrauchen des Speichers. -__Verbrauchter Speicher (ESX):__ Im Gegensatz zu den Cluster-Diagrammen zeigt dieses Diagramm den gesamten Speicherverbrauch auf einem bestimmten ESX-Host. Dies schließt nicht nur den Speicher ein, der von den auf diesem Host gehosteten virtuellen Maschinen verwendet wird, sondern auch den Speicher, der vom Hypervisor-System selbst verbraucht wird (ESXi-Overhead). - -#### Die angezeigten Verbrauchsdaten interpretieren - - - -__Zugewiesener Speicher (Cluster):__ Dieses Diagramm zeigt die Gesamtmenge des Speichers, der dem Cluster zugewiesen ist. - - - -__Verbrauchter Speicher (Cluster):__ Diese Ansicht zeigt den Speicher, der aktiv und ausschließlich von den virtuellen Maschinen des Clusters verbraucht wird. Dies entspricht dem physischen Speicher, der tatsächlich von den VMs für ihre Operationen genutzt wird, was ein wichtiger Indikator für die aktuelle Arbeitslast ist. - - - -__Zuteilung im schlimmsten Fall (Cluster):__ Dieses Diagramm veranschaulicht den Speicher, der erforderlich wäre, wenn alle virtuellen Maschinen des Clusters gleichzeitig den gesamten ihnen zugewiesenen Speicher verbrauchen würden (das Worst-Case-Szenario für den Verbrauch). Das Ergebnis umfasst auch den für den Betrieb des Clusters erforderlichen Speicher sowie verschiedene VMware-spezifische Parameter (die Berechnung ist nicht einfach die Summe des RAMs aller virtuellen Maschinen). Dies hilft dabei, den Bedarf an kritischen Ressourcen vorherzusehen und eine Erschöpfung des Speichers zu verhindern. - - - -__Verbrauchter Speicher (ESX):__ Im Gegensatz zu den Cluster-Diagrammen zeigt dieses Diagramm den gesamten Speicherverbrauch auf einem bestimmten ESX-Host. Dies schließt nicht nur den Speicher ein, der von den auf diesem Host gehosteten virtuellen Maschinen verwendet wird, sondern auch den Speicher, der vom Hypervisor-System selbst verbraucht wird (ESXi-Overhead). - -{/*TODO: Add missing page. */} -{/* Bei der Betrachtung einer Cluster-Seite sind mehrere Tabs verfügbar. Der Tab __'Regeln'__ ermöglicht die Definition von [Affinitäts- / Anti-Affinitätsregeln](compute.md#verwaltung-der-affinitaet-ihrer-virtuellen-maschinen)*/} +__Verbrauchter Speicher (ESX) :__ Im Gegensatz zu den Cluster-Diagrammen zeigt dieses den gesamten auf einem bestimmten ESX-Host verbrauchten Speicher. Dies umfasst nicht nur den von den auf diesem Host gehosteten virtuellen Maschinen genutzten Speicher, sondern auch den vom Hypervisor-System selbst verbrauchten Speicher (overhead de l'ESXi). -Im Tab __'Hosts'__ werden für jeden Hypervisor folgende Informationen angezeigt: +Für jeden Hypervisor im Reiter __'Hosts'__ werden folgende Informationen angezeigt: -- CPU- und Speichernutzung, -- Anzahl der zugeordneten virtuellen Maschinen, -- Verfügbarkeit eines neuen Builds für das Betriebssystem des Hypervisors (falls zutreffend), -- Status des Hypervisors (in Produktion verbunden, in Wartung, ausgeschaltet usw.), -- Aktionenmenü. +- Die __CPU__- und __Speicher__auslastung, +- Die Anzahl der zugewiesenen virtuellen Maschinen, +- Die Verfügbarkeit eines neuen Builds für das Hypervisor-Betriebssystem, falls vorhanden, +- Der Status des Hypervisors (connecté en production, en maintenance, éteint, ...), +- Ein Aktionsmenü. -Im Tab __'Hosts'__ stehen mehrere Aktionen zur Verfügung: +Mehrere Aktionen sind über den Reiter __'Hosts'__ möglich : -- Anforderung neuer Hypervisoren über die Schaltfläche __'Host hinzufügen'__: +- Neue Hypervisor über die Schaltfläche __'Host hinzufügen'__ bestellen : -- Möglichkeit, die Details eines Hypervisors einzusehen: +- Möglichkeit, __die Details eines Hypervisors__ einzusehen : -- Eingang oder Ausgang aus dem __Wartungsmodus__ eines Hypervisors, -- __Aktualisierung__ des Hypervisors, falls erforderlich; hierfür __muss__ der Hypervisor unbedingt im Wartungsmodus sein. Es gibt zwei Arten von Aktualisierungen: +- einen Hypervisor in den __Wartungsmodus__ zu versetzen oder diesen zu verlassen, +- diesen Hypervisor gegebenenfalls zu __aktualisieren__ ; dazu __muss er sich zwingend im Wartungsmodus befinden__. Es gibt zwei Arten von Updates : -1. VMware-Builds (neue Versionen des Hypervisors): +1. VMware-Builds (les nouvelles versions de l'hyperviseur): -1. Aktualisierung des Firmware-Images Ihres Rechenknotens (BIOS und Firmware von Erweiterungskarten): +1. Das Aktualisieren der Firmware Ihrer Compute-Blade (bios et firmware cartes filles): -*__Hinweis__*: +*__Hinweis__* : -- Cloud Temple stellt regelmäßig neue Builds für Hypervisoren bereit. -Es ist wichtig, Ihre Hypervisoren regelmäßig zu aktualisieren, insbesondere um Sicherheitspatches anwenden zu können. -__Allerdings führen wir die Aktualisierung Ihrer Hypervisoren nicht automatisch durch.__ Cloud Temple hat keine Sichtbarkeit über die Verfügbarkeitsverpflichtungen Ihrer Workloads. -Daher überlassen wir Ihnen die Umsetzung Ihrer Änderungsmanagement-Prozesse und die Anwendung der neuen Builds zum optimalen Zeitpunkt. -- Der Aktualisierungsprozess ist vollständig automatisiert. Sie müssen mindestens zwei Hypervisoren in Ihrem Cluster haben, um eine Update-Operation ohne Dienstunterbrechung durchführen zu können. +- *Cloud Temple stellt regelmäßig Builds für Hypervisor zur Verfügung. +Es ist wichtig, Ihre Hypervisor regelmäßig zu aktualisieren, insbesondere um die Anwendung von Sicherheitspatches zu ermöglichen. +Allerdings __aktualisieren wir Ihre Hypervisor nicht eigenständig__. Cloud Temple hat keinen Einblick in die Verfügbarkeitsvereinbarungen Ihrer Workloads. +Wir überlassen es Ihnen daher, Ihr Change-Management durchzuführen und die neuen Builds zum optimalen Zeitpunkt anzuwenden.* +- *Der Aktualisierungsprozess ist vollständig automatisiert. Sie müssen mindestens zwei Hypervisor in Ihrem Cluster vorhalten, um ein Update ohne Dienstunterbrechung zu ermöglichen.* {/*TODO: Add missing page. */} -{/* -*Für die Durchführung der verschiedenen Aktionen sind die entsprechenden Berechtigungen erforderlich [siehe hier](../console/permissions.md).**/} - -Sie sehen auch alle Affinitäts- und Anti-Affinitätsregeln für Ihren Hypervisor-Cluster im Bereich __'Regeln'__. +{/* -*Il est nécessaire d'avoir les permissions adéquates pour effectuer les différentes actions.**/} -### VM Affinity Management +Sie sehen außerdem alle Affinitäts-/Anti-Affinitätsregeln für Ihren Hypervisor-Cluster im Bereich __'Regeln'__. -__Affinity and anti-affinity rules__ allow you to control the placement of virtual machines (VMs) across your hypervisors. -They can be used to manage resource utilization within your __'Cpool'__. -For example, they help balance workloads across servers or isolate resource-intensive workloads. -In a __'Cpool'__ environment based on VMware, these rules are commonly used to manage the behavior of VMs during vMotion operations. -vMotion enables the migration of VMs from one host to another without service interruption. +### Verwaltung der Affinität Ihrer virtuellen Maschinen -You can configure the following rules via the rule management interface: +Die __Affinitäts- und Anti-Affinitätsregeln__ ermöglichen die Steuerung des Standorts Ihrer virtuellen Maschinen auf Ihren Hypervisoren. +Sie können zur Verwaltung der Ressourcennutzung Ihres __'Cpool'__ eingesetzt werden. +Beispielsweise können sie dabei helfen, die Workloads zwischen den Servern zu verteilen oder ressourcenintensive Workloads zu isolieren. +In einem __'Cpool'__ VMware werden diese Regeln häufig verwendet, um das Verhalten der virtuellen Maschinen im Zusammenhang mit vMotion zu steuern. +vMotion ermöglicht das Verschieben virtueller Maschinen von einem Host auf einen anderen ohne Dienstunterbrechung. -- __Affinity Rules__: These rules ensure that certain virtual machines run on the same physical host. - They are used to improve performance by keeping VMs that communicate frequently together on the same server, thus reducing network latency. - Affinity rules are particularly useful in scenarios where performance is critical—such as database systems or applications requiring fast inter-server communication. +Über die Regelverwaltung können Sie Folgendes konfigurieren: -- __Anti-Affinity Rules__: Conversely, these rules ensure that certain virtual machines do not run on the same physical host. - They are essential for availability and resilience—for instance, to prevent all critical VMs from being affected in the event of a single host failure. - Anti-affinity rules are crucial for high-availability applications, such as in production environments where fault tolerance is a top priority. - For example, you would not want both of your Active Directory servers located on the same hypervisor. +- __Affinitätsregeln__: Diese Regeln stellen sicher, dass bestimmte virtuelle Maschinen auf demselben physischen Host ausgeführt werden. +Sie werden zur Leistungsverbesserung eingesetzt, indem häufig kommunizierende virtuelle Maschinen auf demselben Server gehalten werden, um die Netzwerklatenz zu reduzieren. Affinitätsregeln sind in Szenarien nützlich, in denen die Leistung kritisch ist, wie beispielsweise bei Datenbanken oder Anwendungen, die eine schnelle Kommunikation zwischen den Servern erfordern. -When creating a rule, you define: +- __Anti-Affinitätsregeln__: Im Gegensatz dazu stellen diese Regeln sicher, dass bestimmte virtuelle Maschinen nicht auf demselben physischen Host ausgeführt werden. Sie sind wichtig für Verfügbarkeit und Resilienz, beispielsweise um zu verhindern, dass kritische Maschinen bei einem einzelnen Serverausfall alle betroffen sind. Anti-Affinitätsregeln sind entscheidend für Anwendungen, die eine hohe Verfügbarkeit erfordern, wie in Produktionsumgebungen, in denen Ausfalltoleranz Priorität hat. +Beispielsweise möchten Sie nicht, dass sich Ihre beiden Active Directory-Instanzen auf demselben Hypervisor befinden. -- The rule type (affinity / anti-affinity), -- The rule name, -- Its activation status (__'Status'__), -- And the VMs involved within your hypervisor cluster. +Bei der Erstellung einer Regel definieren Sie den Regeltyp (affinité / anti-affinité), den Namen der Regel, ihren Aktivierungszustand (__'Status'__) und die betroffenen Maschinen Ihres Hypervisor-Clusters. -*Note: The affinity/anti-affinity rules available in the console apply only between virtual machines (not between hypervisors and VMs).* +*Hinweis: Die in der Konsole angebotenen Affinitäts-/Anti-Affinitätsregeln gelten für die Kommunikation zwischen den virtuellen Maschinen untereinander (keine Regeln zwischen Hypervisoren und virtuellen Maschinen).* ## Backup -### Create a backup policy +### Eine Sicherungsrichtlinie erstellen -To create a new backup policy, you must submit a request to support. Support is accessible via the buoy icon in the top-right corner of the window. +Um eine neue Sicherungsrichtlinie hinzuzufügen, muss eine Anfrage an den Support gestellt werden. Der Support ist über das Rettungsring-Symbol oben rechts im Fenster erreichbar. -Creating a new backup policy is done through a __service request__ specifying: +Die Erstellung einer neuen Sicherungsrichtlinie erfolgt über __eine Serviceanfrage__ mit folgenden Angaben: - Your Organization's name - A contact person's name, email address, and phone number to finalize the configuration - The tenant name - The backup policy name - The retention characteristics (x days, y weeks, z months, ...) + Der Name Ihrer Organisation + Der Name eines Ansprechpartners mit E-Mail-Adresse und Telefonnummer zur Fertigstellung der Konfiguration + Der Name des Tenants + Der Name der Sicherungsrichtlinie + Die Eigenschaften (x Tage, y Wochen, z Monate, ...) -### Assign a backup policy to a virtual machine +### Sicherungsrichtlinie einer virtuellen Maschine zuweisen -When an SLA is assigned to a virtual machine (VM), all disks associated with this VM automatically inherit the same SLA. Subsequently, you can manually trigger a backup execution via the __Backup Policies__ tab. If no manual launch is performed, the backup will run automatically according to the schedule defined by the SLA. +Wenn einer virtuellen Maschine (VM) eine SLA zugewiesen wird, übernehmen alle mit dieser VM zugeordneten Festplatten automatisch dieselbe SLA. Anschließend kann die Sicherung manuell über die Registerkarte "Sicherungsrichtlinien" gestartet werden. Falls keine manuelle Ausführung erfolgt, wird die Sicherung automatisch gemäß dem von der SLA konfigurierten Zeitplan ausgeführt. -SecNumCloud requires that a backup policy be assigned to a virtual machine before it is started. Otherwise, you will receive the following notification: +SecNumCloud macht die Zuweisung einer Sicherungsrichtlinie an eine virtuelle Maschine vor deren Start obligatorisch. Andernfalls erhalten Sie die folgende Meldung: -Click on the __'Backup Policies'__ tab in your virtual machine's menu. You can view the backup policy or policies assigned to this VM here. +Klicken Sie auf die Registerkarte __'Sicherungsrichtlinien'__ im Menü Ihrer virtuellen Maschine. Dort können Sie die dieser Maschine zugewiesenen Sicherungsrichtlinien einsehen. -To assign a new backup policy to the virtual machine, click the __'Add Policy'__ button and select the desired backup policy. +Um der virtuellen Maschine eine neue Sicherungsrichtlinie zuzuweisen, klicken Sie auf die Schaltfläche __'Richtlinie hinzufügen'__ und wählen Sie die gewünschte Sicherungsrichtlinie aus. -### Assign a backup policy to a virtual disk +### Zuweisen einer Sicherungsrichtlinie an eine virtuelle Festplatte -It is also possible to assign an SLA directly to a specific virtual disk of a machine. In this case, the virtual machine does not inherit this SLA applied individually to the disk. However, it is not possible to manually trigger backup execution at the disk level, as this functionality is not supported in Spectrum Protect Plus. +Es ist auch möglich, eine SLA direkt einer bestimmten virtuellen Festplatte einer Maschine zuzuweisen. In diesem Fall erbt die virtuelle Maschine diese SLA nicht, die individuell der Festplatte zugewiesen wurde. Allerdings ist es nicht möglich, die Sicherung auf Festplattenebene manuell auszuführen, da diese Funktion in Spectrum Protect Plus nicht unterstützt wird. -On the other hand, it is possible to exclude certain disks from one or more backup policies (SLAs) of the VM, thereby allowing the removal of one or more SLAs on a per-disk basis. This approach provides the flexibility to manually initiate backup execution for a specific SLA without affecting all disks of the virtual machine, enabling more granular backup management. +Umgekehrt ist es möglich, bestimmte Festplatten von einer oder mehreren Sicherungsrichtlinien (SLA) der VM auszuschließen, wodurch die Zuweisung einer oder mehrerer SLA(s) festplattenweise aufgehoben werden kann. Dieser Ansatz bietet die Flexibilität, die Sicherung einer SLA manuell auszuführen, ohne alle Festplatten der virtuellen Maschine zu beeinflussen, und ermöglicht so ein feineres Backup-Management. -Click on the action bar of the disk to which you want to assign a backup policy. Then, click on __'Policies'__ and select the desired backup policy. +Klicken Sie auf die Aktionsleiste der Festplatte, der Sie eine Sicherungsrichtlinie zuweisen möchten. Klicken Sie anschließend auf __'Richtlinien'__ und wählen Sie die gewünschte Sicherungsrichtlinie aus. -*Note*: The policy to be added must reside in a different availability zone than the virtual machine. +*Hinweis*: Die hinzuzufügende Richtlinie muss sich in einer anderen Verfügbarkeitszone als die virtuelle Maschine befinden. -### Run a backup policy +### Backup-Richtlinie ausführen -In the __'Backup Policies'__ menu of your virtual machine, click the __'Run'__ button in the __'Actions'__ column for the backup policy you wish to execute. +Im Menü __'Backup-Richtlinien'__ Ihrer virtuellen Maschine klicken Sie auf die Schaltfläche __'Ausführen'__ in der Spalte __'Aktionen'__ der Backup-Richtlinie, die Sie ausführen möchten. -You can also run a backup policy from the __'Backups'__ section in your virtual machine's menu. Click the __'Run Backup'__ button, then select the backup you want to execute from the dropdown list. +Um eine Backup-Richtlinie auszuführen, können Sie auch im Menü Ihrer virtuellen Maschine in den Bereich __'Backups'__ wechseln. Klicken Sie auf die Schaltfläche __'Backup ausführen'__ und wählen Sie dann das Backup aus der Dropdown-Liste aus, das Sie ausführen möchten. -### Remove a backup policy +### Backup-Richtlinie entfernen -In the __'Backup Policies'__ menu of your virtual machine, click the __'Remove'__ button in the __'Actions'__ column for the backup policy you wish to remove. +Im Menü __'Backup-Richtlinien'__ Ihrer virtuellen Maschine klicken Sie auf die Schaltfläche __'Entfernen'__ in der Spalte __'Aktionen'__ der Backup-Richtlinie, die Sie entfernen möchten. -__Warning: It is not possible to remove the last SLA on an active virtual machine:__ +__Achtung: Es ist nicht möglich, die letzte SLA auf einer gestarteten virtuellen Maschine zu entfernen:__ -### Deleting a backup policy: case of a suspended backup policy ("held") +### Löschen einer Sicherungsrichtlinie: Fall einer angehaltenen ("held") Sicherungsrichtlinie -When the last resource is disassociated from an SLA policy, the system automatically detects this situation. As a result, all jobs associated with this SLA policy are automatically moved to the "Held" ("Suspended") state. It is important to note that direct deletion of the SLA policy is not possible at this stage due to the existence of dependent jobs. To proceed with the deletion of the policy, a specific sequence of steps must be followed. +Wenn die letzte Ressource von einer SLA-Richtlinie getrennt wird, erkennt das System diesen Zustand automatisch. Infolgedessen wechseln alle mit dieser SLA-Richtlinie verknüpften Jobs automatisch in den Status "Angehalten" ("Held"). Es ist wichtig zu beachten, dass das direkte Löschen der SLA-Richtlinie zu diesem Zeitpunkt aufgrund vorhandener abhängiger Jobs nicht möglich ist. Um die Richtlinie zu löschen, muss eine Reihe von Schritten befolgt werden. -First, verify that the affected jobs are indeed in the "Held" state. Once confirmed, these dependent jobs can be deleted. Only after removing these dependent jobs can the SLA policy be permanently erased from the system. +Es muss überprüft werden, ob die betreffenden Jobs tatsächlich den Status "Angehalten" aufweisen. Nach Abschluss dieser Überprüfung können diese Jobs gelöscht werden. Erst nach dem Löschen dieser abhängigen Jobs kann die SLA-Richtlinie endgültig aus dem System entfernt werden. -A special case requires particular attention: adding a new resource to an SLA policy whose dependent jobs have not been deleted. In this scenario, the job identifiers will be retained. However, it is crucial to note that jobs in the "Held" state will not resume automatically. Manual intervention will be required to reactivate them and allow their execution. +Ein Sonderfall erfordert besondere Aufmerksamkeit: das Hinzufügen einer neuen Ressource zu einer SLA-Richtlinie, deren abhängige Jobs nicht gelöscht wurden. In diesem Fall werden die Job-IDs beibehalten. Es ist jedoch entscheidend zu beachten, dass Jobs im Status "Angehalten" nicht automatisch fortgesetzt werden. Es ist ein manueller Eingriff erforderlich, um sie wieder zu aktivieren und ihre Ausführung zu ermöglichen. -> __Note:__ For any clarification regarding this situation, please contact Cloud Temple support. +Hinweis: Für weitere Informationen zu dieser Situation wenden Sie sich an den Cloud Temple Support. -The Cloud Temple console prevents assigning a virtual machine to a suspended policy: +Die Cloud Temple-Konsole verhindert die Zuweisung einer virtuellen Maschine an eine angehaltene Richtlinie: -Similarly, it is not possible to start a virtual machine associated with a suspended backup policy: +Ebenso ist es nicht möglich, eine virtuelle Maschine zu starten, die einer angehaltenen Sicherungsrichtlinie zugeordnet ist: -### Wiederherstellen einer Sicherung +### Backup wiederherstellen -Der Tab __'Sicherungen'__ im Menü Ihrer virtuellen Maschinen ermöglicht Ihnen den Zugriff auf die Liste der Sicherungen dieser Maschine. -Um eine Sicherung wiederherzustellen, klicken Sie auf die Schaltfläche __'Wiederherstellen'__ in der Zeile, die der Sicherung entspricht, die Sie wiederherstellen möchten. +Über die Registerkarte __'Backups'__ im Menü Ihrer virtuellen Maschinen können Sie auf die Liste der Backups dieser Maschinen zugreifen. +Um ein Backup wiederherzustellen, klicken Sie auf die Schaltfläche __'Wiederherstellen'__ in der Zeile, die dem wiederherzustellenden Backup entspricht. -1. __Produktionsmodus__: Der Produktionsmodus ermöglicht die Wiederherstellung nach einem Ausfall am lokalen Standort über den primären Speicher oder einen entfernten Wiederherstellungsstandort, wobei die ursprünglichen Maschinenabbilder durch die Wiederherstellungsabbilder ersetzt werden. Alle Konfigurationen werden im Rahmen der Wiederherstellung übertragen, einschließlich Namen und Kennungen, und alle mit der virtuellen Maschine verbundenen Datenkopierarbeiten werden weiterhin ausgeführt. Bei einer Wiederherstellung im Produktionsmodus können Sie wählen, den Speicher in der virtuellen Maschine durch einen virtuellen Datenträger aus einer vorherigen virtuellen Maschinen-Sicherung zu ersetzen. +1. __Produktionsmodus__: Der Produktionsmodus ermöglicht die Wiederherstellung nach einem Ausfall am lokalen Standort vom primären Speicher oder einem entfernten Disaster-Recovery-Standort aus, indem die ursprünglichen Maschinen-Images durch Wiederherstellungs-Images ersetzt werden. Alle Konfigurationen werden im Rahmen der Wiederherstellung übertragen, einschließlich der Namen und Kennungen, und alle mit der virtuellen Maschine verbundenen Datenkopierjobs werden weiterhin ausgeführt. Im Rahmen einer Wiederherstellung im Produktionsmodus können Sie wählen, ob der Speicher in der virtuellen Maschine durch eine virtuelle Festplatte aus einem vorherigen virtuellen Maschinen-Backup ersetzt werden soll. -2. __Testmodus__: Der Testmodus erstellt temporäre virtuelle Maschinen für Entwicklung, Tests, Überprüfung von Momentaufnahmen und Wiederherstellungstests nach einem Ausfall gemäß einem wiederholbaren Zeitplan, ohne Auswirkungen auf die Produktionsumgebungen. Testmaschinen laufen so lange, wie erforderlich, um Tests und Überprüfungen durchzuführen, und werden anschließend automatisch bereinigt. Durch die Isolation des Netzwerks können Sie eine sichere Umgebung schaffen, um Ihre Arbeiten durchzuführen, ohne die für die Produktion genutzten virtuellen Maschinen zu beeinträchtigen. Die in Testmodus erstellten virtuellen Maschinen verfügen über eindeutige Namen und Kennungen, um Konflikte in Ihrer Produktionsumgebung zu vermeiden. +2. __Testmodus__: Der Testmodus erstellt temporäre virtuelle Maschinen für Entwicklung, Tests, Snapshot-Überprüfungen und Disaster-Recovery-Tests gemäß einem wiederholbaren Zeitplan, ohne Auswirkungen auf Produktionsumgebungen. Die Testmaschinen werden so lange ausgeführt, wie für den Test und die Überprüfung erforderlich, und anschließend bereinigt. Über ein isoliertes Netzwerk können Sie eine sichere Umgebung einrichten, um Ihre Jobs zu testen, ohne die für die Produktion verwendeten virtuellen Maschinen zu beeinträchtigen. Die im Testmodus erstellten virtuellen Maschinen verfügen über eindeutige Namen und Kennungen, um Konflikte in Ihrer Produktionsumgebung zu vermeiden. -3. __Klonmodus__: Der Klonmodus erstellt Kopien von virtuellen Maschinen für Anwendungsfälle, die dauerhafte oder langfristig laufende Kopien erfordern, beispielsweise zur Datenexploration oder zur Duplizierung eines Testumfelds in einem isolierten Netzwerk. Die in Klonmodus erstellten virtuellen Maschinen verfügen über eindeutige Namen und Kennungen, um Konflikte in Ihrer Produktionsumgebung zu vermeiden. Im Klonmodus müssen Sie besonders auf die Ressourcenverbrauch achten, da dieser Modus dauerhafte oder langfristig laufende Maschinen erstellt. +3. __Klonmodus__: Der Klonmodus erstellt Kopien der virtuellen Maschinen für Anwendungsfälle, die permanente oder langlaufende Kopien zur Datenerkundung oder zur Duplizierung einer Testumgebung in einem isolierten Netzwerk erfordern. Die im Klonmodus erstellten virtuellen Maschinen verfügen über eindeutige Namen und Kennungen, um Konflikte in Ihrer Produktionsumgebung zu vermeiden. Im Klonmodus müssen Sie auf den Ressourcenverbrauch achten, da der Klonmodus permanente oder langlaufende Maschinen erstellt. -__Die Wiederherstellung ist standardmäßig im Modus "TEST" konfiguriert, um die Produktion zu schützen__, und Sie können den Namen der wiederhergestellten VM wählen: +__Die Wiederherstellung erfolgt standardmäßig im "TEST"-Modus, um die Produktion zu schützen__ und Sie können den Namen der wiederhergestellten VM wählen: -Beachten Sie, dass bei erfolgreichen Tests eine virtuelle Maschine vom Testmodus in den Produktionsmodus überführt werden kann: +Beachten Sie, dass es möglich ist, eine virtuelle Maschine vom Testmodus in den Produktionsmodus zu überführen, wenn die Tests erfolgreich waren: - + \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/backup/iaas_backup.md b/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/backup/iaas_backup.md index 63c58d74..b6ff4fc9 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/backup/iaas_backup.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/backup/iaas_backup.md @@ -22,162 +22,164 @@ import backupRestoreIaas_003 from '@site/docs/iaas_vmware/tutorials/backup/image import backupRestoreIaas_002 from '@site/docs/iaas_vmware/tutorials/backup/images/backup_restore_iaas_002.png' import backupInvIaas_001 from '@site/docs/iaas_vmware/tutorials/backup/images/backup_inv_iaas_001.png' -#### Wie klont man eine virtuelle Maschine? +#### Wie klonen Sie eine virtuelle Maschine? Es gibt 2 Möglichkeiten, eine virtuelle Maschine zu klonen: -- Die erste Option ermöglicht das Klonen einer virtuellen Maschine direkt über das __'Clone'__-Symbol Ihrer virtuellen Maschine: +- Die erste Option ermöglicht es, eine virtuelle Maschine direkt über das Symbol __'Klonen'__ Ihrer virtuellen Maschine zu klonen: -- Die zweite Lösung besteht darin, die virtuelle Maschine durch __ein Backup__ der virtuellen Maschine zu klonen und anschließend die __Klone-Wiederherstellung__ eines Backups zu verwenden. -Gehen Sie zum Abschnitt __'Backup'__ Ihrer virtuellen Maschine und wählen Sie die Aktion __'Restore'__: +- Die zweite Möglichkeit besteht darin, die virtuelle Maschine zu klonen, indem Sie eine __Sicherung__ der virtuellen Maschine verwenden und anschließend die __Klonwiederherstellung__ einer Sicherung durchführen. +Gehen Sie zum Bereich __'Sicherung'__ Ihrer virtuellen Maschine und wählen Sie die Aktion __'Wiederherstellen'__ : -Wählen Sie dann die Option __'Clone'__ zur Wiederherstellung: +Wählen Sie anschließend die Wiederherstellungsoption __'Klonen'__ : -#### Warum sehe ich auf der Seite "Backup-Richtlinien" bei Auswahl einer Richtlinie nicht dieselben virtuellen Maschinen wie auf der Seite "Backup-Berichte" bei Auswahl derselben Richtlinie? +#### Warum sehe ich auf der Seite "Sicherungsrichtlinien" nach Auswahl einer Richtlinie nicht die gleichen virtuellen Maschinen wie auf der Seite "Sicherungsberichte" nach Auswahl derselben Richtlinie? -Das bedeutet, dass die fehlenden virtuellen Maschinen die betreffende Richtlinie eine Zeit lang zugewiesen hatten (was ihre Präsenz in den Backup-Berichten erklärt), aber __derzeit nicht mehr haben__. +Dies bedeutet, dass den fehlenden virtuellen Maschinen die betreffende Richtlinie vorübergehend zugewiesen war +(was ihre Anzeige in den Sicherungsberichten erklärt), dies jedoch __derzeit nicht mehr der Fall ist__. -#### Wie füge ich einer virtuellen Maschine eine Backup-Richtlinie hinzu? +#### Wie Sie einer virtuellen Maschine eine Sicherungsrichtlinie hinzufügen? -Gehen Sie auf die Seite __'Virtuelle Maschinen'__ im Abschnitt __'IaaS'__ im grünen Menüband auf der linken Seite des Bildschirms. +Navigieren Sie zur Seite __'Virtuelle Maschinen'__ im Bereich __'IaaS'__ der grünen Menüleiste auf der linken Seite des Bildschirms. -Wählen Sie eine virtuelle Maschine und dann den Tab __'Backup-Richtlinien'__ dieser Maschine: +Wählen Sie eine virtuelle Maschine und anschließend die Registerkarte __'Sicherungsrichtlinien'__ dieser Maschine aus: -Fügen Sie die gewünschte Backup-Richtlinie hinzu: +Fügen Sie die gewünschte Sicherungsrichtlinie hinzu: -### Wie entferne ich eine Backup-Richtlinie von einer virtuellen Maschine? +### So löschen Sie eine Sicherungsrichtlinie von einer virtuellen Maschine? -Gehen Sie auf die Seite __'Virtuelle Maschinen'__, wählen Sie eine virtuelle Maschine und dann den Tab __'Backup-Richtlinien'__ dieser Maschine. +Gehen Sie zur Seite __'Virtuelle Maschinen'__, wählen Sie eine virtuelle Maschine aus und öffnen Sie dann die Registerkarte __'Sicherungsrichtlinien'__ dieser Maschine. -Entfernen Sie die gewünschte Backup-Richtlinie und bestätigen Sie die Entfernung: +Löschen Sie die gewünschte Sicherungsrichtlinie und bestätigen Sie die Löschung: -__*Hinweis:*__ *Achtung! __Secnumcloud verlangt mindestens eine Backup-Richtlinie__ für jede virtuelle Maschine.* +__*Hinweis:*__ *Achtung! __Secnumcloud schreibt vor, dass für jede virtuelle Maschine mindestens eine Sicherungsrichtlinie vorhanden sein muss.__* -### Wie erfahre ich, ob ein Backup erfolgreich durchgeführt wurde? +### Wie lässt sich prüfen, ob eine Sicherung erfolgreich ausgeführt wurde? Es gibt 2 mögliche Lösungen: -1. Gehen Sie auf die Seite __'Jobs'__ im Menü __'Backup'__ im grünen Menüband auf der linken Seite Ihres Bildschirms. Wählen Sie den Backup-Job und wählen Sie ihn aus. -Finden Sie anschließend die *jobsession*, die Ihrem Backup entspricht, und wählen Sie sie über das Menü __'Actions'__ aus. +1. Gehen Sie zur Seite __'Jobs'__ im Menü __'Sicherung'__ in der grünen Leiste links auf Ihrem Bildschirm. Wählen Sie den der Sicherung entsprechenden Job aus und markieren Sie ihn. +Suchen Sie anschließend die *Jobsitzung*, die Ihrer Sicherung entspricht, und wählen Sie sie über das Menü __'Aktionen'__ aus. -Diese Aktionen ermöglichen das Abrufen der detaillierten Logs des Backup-Vorgangs. Sie können in den Backup-Logs suchen: +Diese Aktionen ermöglichen den Zugriff auf detaillierte Protokolle der Sicherungsausführung. Sie können in den Sicherungsprotokollen suchen: -1. Gehen Sie auf die Seite __'Backup-Berichte'__ und wählen Sie die für Sie interessante Richtlinie aus: +1. Gehen Sie zur Seite __'Sicherungsberichte'__ und wählen Sie die gewünschte Richtlinie aus: -Dann können Sie nach einem Datum filtern, den Bericht im __PDF__- oder __CSV__-Format herunterladen, um ihn in Drittwerkzeugen zu verwenden. +Sie können dann nach einem Datum filtern, den Bericht im Format __PDF__ oder __CSV__ herunterladen, um ihn in externen Tools zu nutzen. -### Wie starte ich eine Wiederherstellung? +### Wie starten Sie eine Wiederherstellung? -Gehen Sie auf die Seite __'Virtuelle Maschinen'__, wählen Sie eine virtuelle Maschine und dann den Tab __'Backups'__ dieser Maschine. Um die Wiederherstellung zu starten, wählen Sie das zu wiederherstellende Backup aus. +Navigieren Sie zur Seite __'Virtuelle Maschinen'__, wählen Sie eine virtuelle Maschine aus und öffnen Sie dann die Registerkarte __'Backups'__ dieser Maschine. Um die Wiederherstellung zu starten, wählen Sie die wiederherzustellende Sicherung aus. ### Was ist die Quiescing-Option? -Das __Quiescing__ ist ein Prozess, bei dem das System benachrichtigt wird, sich vor dem Start des Snapshots in einen geeigneten Zustand zu versetzen. -Standardmäßig ist das __Quiescing aktiviert__. Es kann manuell deaktiviert werden, wenn das System den Snapshot schlecht handhabt oder wenn der Hypervisor-Agent nicht auf der virtuellen Maschine installiert ist. +__Quiescing__ ist ein Prozess, bei dem das System angewiesen wird, vor Beginn des Snapshots einen geeigneten Zustand einzunehmen. +Standardmäßig ist das __Quiescing aktiviert__. Es kann manuell deaktiviert werden, wenn das System den Snapshot nicht korrekt verarbeitet oder wenn der Hypervisor-Agent nicht auf der virtuellen Maschine installiert ist. -Um dies zu tun, gehen Sie zum Abschnitt __'Backups'__ Ihrer virtuellen Maschine, klicken Sie auf __'Optionen ändern'__ und deaktivieren Sie das __Quiescing__: +Gehen Sie dazu im Bereich __'Backups'__ Ihrer virtuellen Maschine auf __'Optionen ändern'__ und deaktivieren Sie das __Quiescing__ : ### Welche Wiederherstellungsoptionen gibt es für eine virtuelle Maschine? -3 Hauptoptionen für die Wiederherstellung einer VM auf ihrem ursprünglichen Ziel oder auf einem anderen Ziel: +3 Hauptoptionen zum Wiederherstellen einer VM, entweder auf dem ursprünglichen Ziel oder auf einem anderen Ziel: -- __'CLONE'__: Stellt die virtuelle Maschine umbenannt wieder her, ohne die Originalmaschine zu ersetzen. +- __'CLONE'__ : Stellt die virtuelle Maschine wieder her, indem sie umbenannt wird, ohne die ursprüngliche virtuelle Maschine zu ersetzen. -- __'PRODUCTION'__: Stellt die Produktionsmaschine wieder her und __ersetzt__ sie (die derzeit in Produktion befindliche virtuelle Maschine wird __zerstört__). +- __'PRODUCTION'__ : Stellt die Produktions-VM wieder und __ersetzt__ sie (die aktuell in der Produktion befindliche virtuelle Maschine wird __zerstört__) -- __'TEST'__: Stellt die Produktionsmaschine wieder her, ohne sie __zu überschreiben__. +- __'TEST'__ : Stellt die Produktions-VM wieder, __ohne sie zu überschreiben__. -### Wie stelle ich die Produktionsmaschine wieder her und ersetze sie, ohne die aktuelle Produktionsmaschine beizubehalten? +### Wie stellen Sie die Produktions-VM wieder her und ersetzen sie, ohne die aktuell in der Produktion befindliche VM zu behalten? -Wählen Sie den Wiederherstellungsmodus __'Production'__. Die Option 'virtuelle Maschine überschreiben' ist standardmäßig aktiviert. +Wählen Sie den Wiederherstellungsmodus __'Produktion'__. Die Option 'VM überschreiben' ist standardmäßig ausgewählt. -### Warum unterscheidet sich die Anzahl der virtuellen Maschinen zwischen den Backup- und Compute-Modulen? +### Warum unterscheidet sich die Anzahl der virtuellen Maschinen zwischen dem Backup- und dem Compute-Modul? -Der Unterschied in den virtuellen Maschinen kann darauf zurückzuführen sein, dass das Backup-Modul die neuesten erstellten Maschinen nicht abgerufen hat. +Die Differenz bei der Anzahl der virtuellen Maschinen kann darauf zurückzuführen sein, dass das Backup-Modul die zuletzt erstellten Maschinen nicht abgerufen hat. -Um das Backup-Modul zu aktualisieren, müssen Sie die Backup-Softwareschicht anweisen, die virtuellen Maschinen neu zu inventarisieren. -Gehen Sie dazu im Menü __'Infrastruktur'__ im grünen Menüband auf der linken Seite des Bildschirms zum Untermenü __'Spectrum Protect Plus'__ und verwenden Sie den __'Action'__-Button des Inventars: +Um das Backup-Modul zu aktualisieren, muss die Software-Schicht für Backups aufgefordert werden, die virtuellen Maschinen neu zu inventarisieren. +Navigieren Sie dazu im Menü __'Infrastructure'__ der grünen Leiste links auf dem Bildschirm zum Untermenü __'Spectrum Protect Plus'__ und verwenden Sie die Schaltfläche __'Action'__ des Inventars: -Beachten Sie, dass das Datum der letzten Inventur angegeben ist. +Beachten Sie, dass das Datum des letzten Inventars angegeben ist. -Wenn ein Unterschied bei den virtuellen Maschinen weiterhin besteht, könnte dies daran liegen, dass die virtuellen Maschinen das System hosten, das die Backups ermöglicht. -Diese Maschinen werden nicht in die Berechnung der Anzahl der Maschinen im Backup-Modul einbezogen. +Sollte eine Abweichung bei der Anzahl der virtuellen Maschinen weiterhin bestehen, kann dies an den virtuellen Maschinen liegen, die das Backup-System hosten. Diese werden bei der Berechnung der Maschinenanzahl im Backup-Modul nämlich nicht mitgezählt. -### Wie inventarisiere ich die virtuellen Maschinen im Backup-Modul? +### Wie führt man eine Inventarisierung virtueller Maschinen im Backup-Modul durch? -Um eine Inventur der virtuellen Maschinen im Backup-Modul durchzuführen, gehen Sie im Menü __'Infrastruktur'__ im grünen Menüband auf der linken Seite des Bildschirms zum Untermenü __'Spectrum Protect Plus'__ und verwenden Sie den __'Action'__-Button des Inventars: +Um eine Inventarisierung virtueller Maschinen im Backup-Modul zu starten, navigieren Sie im Menü __'Infrastruktur'__ der grünen Leiste links auf dem Bildschirm zum Untermenü __'Spectrum Protect Plus'__ und verwenden Sie die __'Aktion'__-Schaltfläche der Inventarisierung: -Beachten Sie, dass das Datum der letzten Inventur angegeben ist. +Beachten Sie, dass das Datum der letzten Inventarisierung angezeigt wird. -### Warum schlägt das Backup meiner virtuellen Maschine mit einem Snapshot-Problem fehl? +### Warum schlägt die Sicherung meiner virtuellen Maschine mit der Meldung eines Snapshot-Problems fehl? -Dieser Fehler bedeutet, dass Ihre Maschine zum ersten Mal versucht, gesichert zu werden. +Dieser Fehler bedeutet, dass Ihre Maschine zum ersten Mal gesichert werden soll. -__Bei der ersten Sicherung einer virtuellen Maschine darf kein Snapshot auf der Maschine vorhanden sein.__ +__Bei der ersten Sicherung einer virtuellen Maschine darf sich kein Snapshot auf der Maschine befinden.__ -### Wie stelle ich die Produktionsmaschine wieder her und ersetze sie, während die aktuelle Produktionsmaschine beibehalten und umbenannt wird? +### Wie stellt man die Produktions-VM wieder her und ersetzt sie, wobei die Produktions-VM beibehalten und umbenannt wird? -So gehen Sie vor: +Gehen Sie wie folgt vor: -- Wählen Sie den Modus __'CLONE'__ (der Klonmodus führt zu einer Änderung der MAC-Adresse und der UUID der virtuellen Maschine), -- Benennen Sie die wiederhergestellte virtuelle Maschine mit dem endgültigen Namen (der Produktions-VM), -- Benennen Sie die alte Produktionsmaschine (in _OLD) um. +- Wählen Sie den Modus __'KLON'__ (der Klon-Modus führt zu einer Änderung der MAC-Adresse und der UUID der virtuellen Maschine), +- Benennen Sie die wiederhergestellte virtuelle Maschine mit dem endgültigen Namen (der Produktions-VM) um, +- Benennen Sie die alte Produktions-VM um (in _OLD). -### Wie stelle ich eine virtuelle Maschine wieder her, ohne die Originalmaschine zu ersetzen? +### Wie stellt man eine virtuelle Maschine wieder her, ohne die ursprüngliche virtuelle Maschine zu ersetzen? So gehen Sie vor: - Wählen Sie den Modus __'CLONE'__ (der Klonmodus führt zu einer Änderung der MAC-Adresse und der UUID der virtuellen Maschine) -- Legen Sie den Namen des Klons fest (_REST oder andere) +- Definieren Sie den Namen des Clons (_REST oder andere) -### Warum kann ich eine Festplatte im Instant Access-Modus auf meiner virtuellen Maschine nicht löschen? +### Warum kann ich eine Festplatte im Schnellzugriffsmodus auf meiner virtuellen Maschine nicht löschen? -Führen Sie die Inventur des Backups durch: Im Menü __'Infrastruktur'__ im grünen Menüband auf der linken Seite des Bildschirms, gehen Sie zum Untermenü __'Spectrum Protect Plus'__ und verwenden Sie den __'Action'__-Button des Inventars: +Führen Sie die Inventarisierung der Sicherung aus: Navigieren Sie im Menü __'Infrastructure'__ des grünen Banners links auf dem Bildschirm +zum Untermenü __'Spectrum Protect Plus'__ und verwenden Sie die Schaltfläche __'Aktion'__ des Inventars: -Führen Sie die Entfernung der Festplatte durch, sobald die Inventur abgeschlossen ist. Aktualisieren Sie die virtuelle Maschine, um zu überprüfen, ob die Festplatte entfernt wurde. +Führen Sie die Löschung der Festplatte durch, sobald die Inventarisierung abgeschlossen ist. Aktualisieren Sie die virtuelle Maschine, um zu überprüfen, ob die Festplatte erfolgreich gelöscht wurde. + +### Warum kann ich eine virtuelle Maschine nicht mit einer Policy im Status "Held" (politique suspendue) starten? -### Warum kann ich eine virtuelle Maschine mit einer Richtlinie im Held-Status (ausgesetzte Richtlinie) nicht starten? +Eine Policy im Status "Held" ist eine Funktion, die es ermöglicht, Aufbewahrungs- und Löschvorgänge für Daten vorübergehend auszusetzen, wodurch sichergestellt wird, dass die Daten über die standardmäßige Aufbewahrungsfrist hinaus intakt und verfügbar bleiben, beispielsweise aus Compliance-Gründen oder aufgrund rechtlicher Erfordernisse. -Eine Richtlinie im "Held"-Status ist eine Funktion, die vorübergehend die Aufbewahrungs- und Löschaktionen für Daten aussetzt, um sicherzustellen, dass die Daten aus spezifischen Gründen wie der Einhaltung von Vorschriften oder rechtlichen Anforderungen über den Standardaufbewahrungszeitraum hinaus intakt und verfügbar bleiben. +Nehmen wir an, ein Unternehmen hat eine Backup-Aufbewahrungsrichtlinie von 30 Tagen für bestimmte Produktionsdaten. Aufgrund einer rechtlichen Untersuchung besteht die Anforderung, alle relevanten Backups für einen unbestimmten Zeitraum aufzubewahren. Sie können die zugehörige Backup-Policy über den Status "Held" aussetzen, um die automatische Löschung dieser Backups nach 30 Tagen zu verhindern und so sicherzustellen, dass die Daten während der gesamten Dauer der Untersuchung verfügbar bleiben. -Angenommen, ein Unternehmen hat eine Backup-Aufbewahrungsrichtlinie von 30 Tagen für bestimmte Produktionsdaten. Aufgrund einer rechtlichen Untersuchung erhalten sie die Anfrage, alle relevanten Backups für eine unbestimmte Zeit zu speichern. Sie haben die Möglichkeit, die zugehörige Backup-Richtlinie über den Held-Status auszusetzen, um das automatische Löschen dieser Backups nach 30 Tagen zu verhindern, und sicherzustellen, dass die Daten für die gesamte Dauer der Untersuchung verfügbar bleiben. -Eine angehaltene Sicherungspolitik (im Status Gehalten) wird die dem zugewiesenen Zeitplan entsprechenden Sicherungen nicht ausführen, sodass die virtuelle Maschine nicht als geschützt angesehen werden kann, was den SecNumCloud-Normen nicht entspricht. +Eine ausgesetzte Backup-Policy (en statut Held) führt keine Backups gemäß dem zugewiesenen Zeitplan aus. Die virtuelle Maschine kann daher nicht als geschützt betrachtet werden, was nicht den SecNumCloud-Standards entspricht. -Zögern Sie nicht, unser Support-Team zu diesem Thema um Rat zu fragen. +Zögern Sie nicht, sich bei Fragen zu diesem Thema an unser Support-Team zu wenden. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_template.md b/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_template.md index 687b3533..38b8d026 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_template.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_template.md @@ -1,5 +1,5 @@ --- -title: Deployment from a Template +title: Bereitstellung aus einer Vorlage tags: - iaas_vmware - tutorials @@ -8,43 +8,40 @@ import shivaCatalogsCharger from '@site/docs/iaas_vmware/tutorials/images/shiva_ import shivaCatalogsAjout from '@site/docs/iaas_vmware/tutorials/images/shiva_catalogs_ajout.png'; import shivaCatalogsDeployer from '@site/docs/iaas_vmware/tutorials/images/shiva_catalogs_deployer.png'; -This guide will enable you to deploy your first instances on the Cloud of Trust in less than 5 minutes. +Dieser Leitfaden ermöglicht es Ihnen, Ihre ersten Instanzen in der Cloud de Confiance in weniger als 5 Minuten bereitzustellen. ## __Voraussetzungen__ -1. Ein abonniertes Cloud Temple-Angebot (Unterzeichnung des IaaS-Angebots). -2. Aktivierte Berechtigungen für den Objekttreiber __'IaaS'__ +1. Das Cloud Temple-Produkt abonniert haben (Abonnement des IaaS-Produkts). +2. Die Berechtigungen für den Objekt-Treiber __'IaaS'__ aktiviert haben. -## Deploy a virtual machine from a Template +## Eine virtuelle Maschine aus einer Vorlage bereitstellen -This guide walks you through the steps to deploy a virtual machine from a Template in the Console. +Dieser Leitfaden zeigt Ihnen Schritt für Schritt, wie Sie eine virtuelle Maschine aus einer Vorlage in der Konsole bereitstellen. -In the Console portal, go to the __"Trusted Cloud"__ tab, then __"Catalogs"__. Before you can deploy a Template, it must be uploaded to your private catalog, under the __"My Catalog"__ tab. +Navigieren Sie im Konsolenportal zum Reiter "Vertrauenswürdige Cloud" und anschließend zu "Kataloge". Bevor eine Vorlage bereitgestellt werden kann, muss sie in Ihrem privaten Katalog im Reiter "Mein Katalog" hochgeladen werden. -To do this, you have two options: +Dafür haben Sie zwei Möglichkeiten: Sie können Ihre eigene Vorlage direkt in Ihren privaten Katalog importieren oder eine Vorlage aus dem öffentlichen Katalog von Cloud Temple importieren. -- Import your own Template directly into your private catalog, or -- Import a template from the public Cloud Temple catalog. +### Persönliches Template in den privaten Katalog importieren -### Import a custom template into your private catalog - -In the "My catalog" tab, click on "Publish files". +Im Tab "Mein Katalog" klicken Sie auf "Dateien veröffentlichen". -Then follow the template publishing steps by entering its name and description, and selecting its location within a library. +Führen Sie anschließend die Schritte zur Veröffentlichung des Templates durch, geben Sie seinen Namen und eine Beschreibung ein und wählen Sie den Speicherort in einer Bibliothek. -The template should then appear in your private catalog. +Das Template sollte anschließend in Ihrem privaten Katalog angezeigt werden. -### Import template from public catalog +### Template aus dem öffentlichen Katalog importieren -In the "Public catalog" tab, click the "Add to my catalog" button of the desired template to import it into your private catalog. It should then appear in your private catalog. +Im Reiter "Öffentlicher Katalog" klicken Sie auf die Schaltfläche "Zu meinem Katalog hinzufügen" des gewünschten Templates, um es in Ihren privaten Katalog zu importieren. Anschließend sollte es in Ihrem privaten Katalog erscheinen. -### Deploy Template +### Template bereitstellen -After importing the template into your private catalog, you can deploy it by clicking on "Deploy". +Nachdem das Template in Ihrem privaten Katalog importiert wurde, können Sie es durch Klicken auf "Bereitstellen" bereitstellen. -Then follow the various steps of resource deployment, selecting its physical location (datacenter, compute cluster, datastore) and other optional configuration parameters. +Folgen Sie anschließend den verschiedenen Schritten der Bereitstellung der Ressource, indem Sie den physischen Standort (Datacenter, Rechencluster, Datastore) und weitere optionale Konfigurationsparameter auswählen. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_terraform.md b/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_terraform.md index da295cd9..b80e9dd9 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_terraform.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_terraform.md @@ -7,20 +7,20 @@ tags: import statusCloudInit from '@site/docs/iaas_vmware/tutorials/images/status_cloud_init.png'; import cloudInitOutput from '@site/docs/iaas_vmware/tutorials/images/cloud-init-output.png'; -Diese Anleitung ermöglicht es Ihnen, in weniger als 5 Minuten Ihre ersten Instanzen auf der Cloud of Trust zu deployen. +Dieses Handbuch ermöglicht es Ihnen, Ihre ersten Instanzen in der Vertrauenswürdigen Cloud in weniger als 5 Minuten bereitzustellen. ## __Voraussetzungen__ -1. Ein Abonnement des Cloud Temple Angebots (IaaS-Angebot). -2. Aktivierte Berechtigungen für den __'IaaS'__-Objekttreiber +1. Das Cloud Temple-Produkt abonniert haben (Abonnement des IaaS-Produkts). +2. Die Berechtigungen für den Objekt-Treiber __'IaaS'__ aktiviert haben. ## Bereitstellen einer virtuellen Maschine über Terraform -In diesem Abschnitt werden wir sehen, wie man in wenigen Minuten eine virtuelle Maschine auf der Cloud of Trust über den Cloud Temple Terraform Provider bereitstellt. -Wenn Sie den Cloud Temple Provider noch nicht verwendet haben, folgen Sie den Anweisungen unter [dieser Adresse](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest/docs), um ihn zu installieren und sich bei Ihrem Tenant zu authentifizieren. +In diesem Abschnitt erfahren Sie, wie Sie in wenigen Minuten eine virtuelle Maschine im Cloud de Confiance über den Terraform-Provider Cloud Temple bereitstellen. +Falls Sie den Cloud Temple-Provider noch nicht verwendet haben, befolgen Sie die Anweisungen unter [folgender Adresse](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest/docs), um ihn zu installieren und sich bei Ihrem Tenant anzumelden. -Wir beginnen mit der Erstellung einer .tf-Datei, die die Instanz beschreibt, die wir bereitstellen möchten. -Das folgende Skript ermöglicht es Ihnen, eine virtuelle Maschine von Grund auf neu zu erstellen. +Wir beginnen mit der Erstellung einer .tf-Datei, die die Instanz beschreibt, die bereitgestellt werden soll. +Das folgende Skript ermöglicht das Bereitstellen einer virtuellen Maschine von Grund auf. ```hcl data "cloudtemple_compute_virtual_datacenter" "dc" { @@ -56,60 +56,60 @@ resource "cloudtemple_compute_virtual_machine" "scratch" { } ``` -Die in diesem Skript verwendeten Parameter sind wie folgt: +Die in diesem Skript verwendeten Parameter sind folgende: -- datacenter_id (erforderlich): Rechenzentrum, in dem die virtuelle Maschine bereitgestellt wird -- host_cluster_id (erforderlich): Cluster, in dem die virtuelle Maschine bereitgestellt wird -- name (erforderlich): Name der Maschine -- memory: RAM, das der Maschine zu Beginn zugewiesen wird -- cpu: Anzahl der vCPUs, die der Maschine zu Beginn zugewiesen werden -- num_cores_per_socket: Anzahl der Kerne pro Socket -- datastore_cluster_id: Datastore, an den die Maschine angeschlossen ist -- guest_operating_system_moref: Betriebssystem der Maschine +- datacenter_id (erforderlich) : Rechenzentrum, in dem die virtuelle Maschine bereitgestellt wird +- host_cluster_id (erforderlich) : Cluster, in dem die virtuelle Maschine bereitgestellt wird +- name (erforderlich) : Name der Maschine +- memory : Zu Beginn der Maschine zugewiesener RAM +- cpu : Zu Beginn der Maschine zugewiesene Anzahl an vCPUs +- num_cores_per_socket : Anzahl der Kerne pro Socket +- datastore_cluster_id : Datastore, an den die Maschine angehängt ist +- guest_operating_system_moref : Betriebssystem der Maschine -Weitere Parameter können während der Bereitstellung auf eine virtuelle Maschine angewendet werden. Sie finden alle diese Parameter auf der folgenden Seite der [Terraform-Dokumentation](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest/docs/resources/compute_virtual_machine) +Weitere Parameter können beim Bereitstellen einer virtuellen Maschine angewendet werden. Eine vollständige Übersicht dieser Parameter finden Sie auf der folgenden Seite der [Terraform-Dokumentation](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest/docs/resources/compute_virtual_machine) -Sobald die .tf-Datei erstellt und gespeichert ist, führen Sie den folgenden Befehl aus, um Ihren Code zu überprüfen: +Nachdem Sie die .tf-Datei erstellt und gespeichert haben, führen Sie den folgenden Befehl aus, um Ihren Code zu überprüfen: ``` terraform validate ``` -Planen Sie dann die Bereitstellung und überprüfen Sie, ob der Plan dem entspricht, was Sie erreichen möchten: +Planen Sie anschließend die Bereitstellung und überprüfen Sie, ob der Plan Ihren Vorstellungen entspricht: ``` terraform plan ``` -Stellen Sie schließlich die virtuelle Maschine bereit, indem Sie den folgenden Befehl ausführen: +Führen Sie abschließend den folgenden Befehl aus, um die virtuelle Maschine bereitzustellen: ``` terraform apply ``` -## Verwendung von cloud-init zur Konfiguration einer vom Terraform-Provider bereitgestellten virtuellen Maschine +## cloud-init zur Konfiguration einer über den Terraform-Provider bereitgestellten virtuellen Maschine verwenden -Das Tool __'cloud-init'__ ermöglicht es Ihnen, eine virtuelle Maschine oder eine Cloud-Instanz bei ihrem ersten Start anzupassen. Es handelt sich um einen weit verbreiteten Standard. +Das Tool __'cloud-init'__ ermöglicht die Anpassung einer virtuellen Maschine oder einer Cloud-Instanz beim ersten Start. Es handelt sich um einen weit verbreiteten Standard. Weitere Informationen finden Sie in der [Dokumentation](https://cloudinit.readthedocs.io/en/latest/) ### Kompatibilität -Um eine vom Cloud Temple Terraform-Provider bereitgestellte virtuelle Maschine über cloud-init konfigurieren zu können, muss das für die Bereitstellung verwendete __OVF__ mit __cloud-init__ __kompatibel__ sein. +Um eine über den Terraform Cloud Temple-Provider bereitgestellte virtuelle Maschine über cloud-init konfigurieren zu können, muss das __OVF__, das für deren Bereitstellung verwendet wird, mit __cloud-init__ __kompatibel__ sein. Um die Kompatibilität Ihrer virtuellen Maschine mit cloud-init zu überprüfen, geben Sie den folgenden Befehl ein: `systemctl status cloud-init.service` -Wenn cloud-init korrekt auf der Maschine installiert ist, sollten Sie eine Antwort wie diese sehen. (Siehe Screenshot unten) +Wenn cloud-init korrekt auf der Maschine installiert ist, sollten Sie eine Ausgabe wie diese erhalten. (Siehe Screenshot unten) -Bei Bedarf können Sie cloud-init-kompatible Images im Internet finden (zum Beispiel [Ubuntu Cloud Image](https://cloud-images.ubuntu.com/)) oder es selbst auf Ihrer Maschine installieren, bevor Sie sie in ein OVF umwandeln. +Falls erforderlich, können Sie cloud-init-kompatible Images im Internet finden (z. B. [Ubuntu Cloud Image](https://cloud-images.ubuntu.com/)) oder sie selbst auf Ihrer Maschine installieren, bevor Sie sie in ein OVF konvertieren. ### Bereitstellung -Nachdem Sie sicher sind, dass das bereitgestellte OVF mit cloud-init kompatibel ist, finden Sie hier ein Beispiel für eine Terraform-Datei (.tf), die Sie zur Konfiguration Ihrer virtuellen Maschine verwenden können. -Hinweis: Alle hier gezeigten Beispiele finden Sie im Ordner examples des Cloud Temple Terraform Provider Repositories hier: [Beispiele](https://github.com/Cloud-Temple/terraform-provider-cloudtemple/tree/main/examples) +Sobald Sie sichergestellt haben, dass das bereitgestellte OVF vollständig mit cloud-init kompatibel ist, finden Sie hier ein Beispiel für eine Terraform-Datei (.tf), die Sie zur Konfiguration Ihrer virtuellen Maschine verwenden können. +Hinweis: Alle hier gezeigten Beispiele finden Sie im Ordner „examples“ des Repositorys des Terraform Cloud Temple Providers hier: [Beispiele](https://github.com/Cloud-Temple/terraform-provider-cloudtemple/tree/main/examples) #### `main.tf` @@ -177,27 +177,27 @@ users: plain_text_passwd: password ``` -Das interessante Element hier ist das Vorhandensein der cloud-init-Eigenschaft, die, wie Sie sehen können, aus zwei Untereigenschaften besteht: __network-config__ und __user-data__. +Das Interessante hier ist das Vorhandensein der cloud-init-Eigenschaft. Wie Sie erkennen können, besteht sie aus zwei Unter-Eigenschaften: __network-config__ und __user-data__. -Diese gehören zu einer Gruppe von 7 Eigenschaften, die Sie zur Konfiguration Ihrer virtuellen Maschine mit cloud-init verwenden können. +Diese gehören zu einer Reihe von 7 Eigenschaften, die Sie verwenden können, um Ihre virtuelle Maschine mit cloud-init zu konfigurieren. -- __user-data__: Dieser Wert muss base64-kodiert sein und enthält Konfigurationsinformationen für die Benutzerkonten der virtuellen Maschine. Sie können auch Skripte hinzufügen, um Pakete zu installieren oder zu aktualisieren. -- __network-config__: Dieser Wert muss base64-kodiert sein und enthält Netzwerkkonfigurationsinformationen für die virtuelle Maschine. -- __public-keys__: Gibt an, dass die Instanz die 'authorized_keys' des Standardbenutzers mit diesem Wert füllen soll. -- __instance-id__: Ermöglicht die Definition einer eindeutigen Instanz-ID für cloud-init. -- __password__: Wenn definiert, wird das Passwort des Standardbenutzers auf diesen Wert gesetzt, um eine passwortbasierte Anmeldung zu ermöglichen. Das Passwort ist nur für eine einzige Anmeldung gültig. Wenn der Wert 'RANDOM' ist, wird ein zufälliges Passwort generiert und auf der Konsole angezeigt. -- __hostname__: Gibt einen Hostnamen für die bereitgestellte Instanz an. -- __seedfrom__: Ermöglicht die Definition einer URL, von der cloud-init die zu verwendenden Konfigurationsdateien abruft. -Weitere Informationen zur Funktionsweise von cloud-init finden Sie in der [offiziellen Dokumentation](https://cloudinit.readthedocs.io/en/latest/) +- __user-data__ : Dieser Wert muss base64-codiert sein und enthält unter anderem Konfigurationsinformationen für die Benutzerkonten der virtuellen Maschine. Sie können zudem Skripte hinzufügen, um Pakete zu installieren oder zu aktualisieren. +- __network-config__ : Dieser Wert muss base64-codiert sein und enthält unter anderem Netzwerkkonfigurationsinformationen der virtuellen Maschine. +- __public-keys__ : Gibt an, dass die Instanz die 'authorized_keys' des Standardbenutzers mit diesem Wert befüllen soll. +- __instance-id__ : Legt eine eindeutige Instanzkennung für cloud-init fest. +- __password__ : Falls festgelegt, wird das Passwort des Standardbenutzers auf diesen Wert gesetzt, um eine passwortbasierte Anmeldung zu ermöglichen. Das Passwort ist nur für eine einzige Anmeldung gültig. Ist der Wert 'RANDOM', wird ein zufälliges Passwort generiert und auf der Konsole angezeigt. +- __hostname__ : Legt einen Hostnamen für die bereitgestellte Instanz fest. +- __seedfrom__ : Legt eine URL fest, von der cloud-init die zu verwendenden Konfigurationsdateien bezieht. +Für weitere Informationen zur Funktionsweise von cloud-init verweisen wir auf die [offizielle Dokumentation](https://cloudinit.readthedocs.io/en/latest/) ### Ausführung -Um die erfolgreiche Ausführung von cloud-init zu überprüfen, sollten Sie sich mit dem Benutzer verbinden können, den Sie in der user-data.yml-Datei konfiguriert haben, oder sehen, dass sich der Hostname in den ändert, den Sie in 'hostname' festgelegt haben. +Um die erfolgreiche Ausführung von cloud-init zu überprüfen, sollten Sie sich mit dem in der Datei user-data.yml konfigurierten Benutzer anmelden können oder der Hostname sollte auf den in ‘hostname’ festgelegten Wert geändert worden sein. Bei Problemen können Sie die cloud-init-Logs mit dem folgenden Befehl überprüfen: `sudo cat /var/log/cloud-init-output.log` -Sie sollten verschiedene Informationen über die Ausführung von cloud-init sehen. In dem folgenden Screenshot können wir sehen, dass die Netzwerkkonfiguration erfolgreich abgeschlossen wurde. +Sie sollten verschiedene Informationen zur Ausführung von cloud-init sehen. Auf dem folgenden Screenshot ist zu erkennen, dass die Netzwerkkonfiguration erfolgreich durchgeführt wurde. - + \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/vm_encryption.md b/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/vm_encryption.md index 8f806a4b..bf8306af 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/vm_encryption.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/vm_encryption.md @@ -1,5 +1,5 @@ --- -title: Encrypt a Virtual Machine +title: Eine virtuelle Maschine verschlüsseln tags: - iaas_vmware - tutorials @@ -10,41 +10,41 @@ import shivaHsmKms_002 from '@site/docs/iaas_vmware/tutorials/images/shiva_hsm_k import shivaHsmKms_003 from '@site/docs/iaas_vmware/tutorials/images/shiva_hsm_kms_003.png' import shivaHsmKms_004 from '@site/docs/iaas_vmware/tutorials/images/shiva_hsm_kms_004.png' -This tutorial guides you through encrypting an IaaS VMware virtual machine from the Console portal. +Dieses Tutorial unterstützt Sie bei der Verschlüsselung einer IaaS-VMware-VM über das Console-Portal. -### Prerequisites +### Voraussetzungen -1. **Key Provider (HSM/KMS)**: - - A key provider must be configured on the vStack. (If no key provider is configured, please contact support via a ticket.) - - Ensure the key provider is correctly activated. +1. **Schlüsselanbieter (HSM/KMS)** : + - Ein Schlüsselanbieter muss auf der vStack konfiguriert sein. (Wenn kein Schlüsselanbieter konfiguriert ist, wenden Sie sich bitte über ein Ticket an den Support.) + - Stellen Sie sicher, dass der Schlüsselanbieter korrekt aktiviert ist. -2. **Virtual Machine Status**: - - The virtual machine must be powered off. - - The virtual machine must not be in spp mode 'test'. - - The virtual machine must not already be encrypted. - - The virtual machine must not have any snapshots. - - The virtual machine must not be replicated. +2. **Status der virtuellen Maschine** : + - Die virtuelle Maschine muss heruntergefahren sein. + - Die virtuelle Maschine darf sich nicht im spp mode 'test' befinden. + - Die virtuelle Maschine darf nicht bereits verschlüsselt sein. + - Die virtuelle Maschine darf keine Snapshots haben. + - Die virtuelle Maschine darf nicht repliziert sein. -### Schnittstelle +### Benutzeroberfläche -Nach der Anmeldung am Web-Portal Console finden Sie unter dem Menü **'IaaS'**, Untermenü **'Konfiguration'** und dem Tab **'vCenters'** Informationen darüber, ob die Verschlüsselung für die betreffende vStack aktiviert ist. +Nach der Anmeldung im Web-Portal Console finden Sie im Menü **'IaaS'**, Untermenü **'Konfiguration'** und auf der Registerkarte **'vCenters'** die Information, ob die Verschlüsselung für die betreffende vstack aktiviert ist. -Wechseln Sie anschließend zum Untermenü **'Virtuelle Maschinen'** und wählen Sie die virtuelle Maschine aus, die Sie verschlüsseln möchten. +Wechseln Sie anschließend ins Untermenü **'Virtuelle Maschinen'** und wählen Sie die Maschine aus, die Sie verschlüsseln möchten. -In den allgemeinen Informationen zur virtuellen Maschine finden Sie Hinweise, ob die Maschine bereits verschlüsselt ist oder nicht. +In den allgemeinen Informationen der virtuellen Maschine finden Sie den Hinweis, ob die Maschine bereits verschlüsselt ist oder nicht. -Wenn die virtuelle Maschine die Voraussetzungen erfüllt, können Sie die Prozedur fortsetzen, indem Sie auf die Schaltfläche mit dem Schloss-Symbol in der Werkzeugleiste klicken, die mit **'Virtuelle Maschine verschlüsseln'** beschriftet ist. +Wenn die virtuelle Maschine die Voraussetzungen erfüllt, können Sie den Vorgang fortsetzen, indem Sie auf die Schaltfläche mit dem Schloss-Symbol in der Symbolleiste klicken, die **'Virtuelle Maschine verschlüsseln'** lautet. -Es erscheint ein Bestätigungsdialogfeld. Wählen Sie **'Verschlüsseln'**. +Es erscheint ein Bestätigungsfenster. Wählen Sie **Verschlüsseln**. -Nach Abschluss der Aktion sollten Sie die aktualisierte Information sehen, die Ihnen mitteilt, dass Ihre Maschine nun verschlüsselt ist. +Nach Abschluss der Aktion sollten Sie die geänderte Information sehen, die anzeigt, dass Ihre Maschine verschlüsselt ist. - + \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/llmaas/api.md b/i18n/de/docusaurus-plugin-content-docs/current/llmaas/api.md index 340e80cb..7f2cb2f1 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/llmaas/api.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/llmaas/api.md @@ -5,55 +5,57 @@ sidebar_position: 2 # API-Dokumentation LLMaaS -## Base URL +## Basis-URL ``` https://api.ai.cloud-temple.com/v1 ``` -## Authentication +## Authentifizierung Alle Anfragen erfordern einen `Authorization`-Header mit Ihrem API-Token: ``` -Authorization: Bearer IHR_API_TOKEN +Authorization: Bearer VOTRE_TOKEN_API ``` -## Rate Limiting und Abrechnung +## Ratenbegrenzung und Abrechnung -### The Third-Party Principle: Access Tier, Budget, and Capacity +### Das Tier-Prinzip: Zugangsstufe, Budget und Kapazität -Our third-party system is designed as **complete service envelopes** that define three key aspects of your usage: +Unser Tiersystem ist als **umfassende Servicepakete** konzipiert, die drei Schlüsselaspekte Ihrer Nutzung definieren: -1. **An Access Tier (Purchase Credit):** For Tiers 1 to 4, this is an upfront amount to be paid in advance to activate the service and unlock the technical and budgetary capabilities of the selected tier. -2. **A Monthly Budget Limit:** This is the cap on your monthly consumption, ensuring full control over your costs. -3. **Technical Capacity:** These are the throughput limits (tokens per day and per hour) that guarantee stable and predictable performance for your call volume. +1. **Eine Zugangsstufe (Kaufguthaben)** : Für die Tiers 1 bis 4 handelt es sich um einen im Voraus zu zahlenden Betrag, um den Service zu aktivieren und die technischen sowie budgetären Kapazitäten der gewählten Stufe freizuschalten. +2. **Ein monatliches Budgetlimit** : Dies ist die Obergrenze Ihres monatlichen Verbrauchs und gewährleistet eine vollständige Kostenkontrolle. +3. **Eine technische Kapazität** : Dies sind die Durchsatzgrenzen (Tokens pro Tag und pro Stunde), die eine stabile und vorhersehbare Performance für Ihr Aufrufvolumen sicherstellen. -Choosing a tier therefore involves balancing your initial investment, your projected monthly budget, and the required technical capacity. Your consumption within this envelope is then billed according to the current pricing rates. +Die Wahl eines Tiers stellt somit ein Gleichgewicht zwischen der Anfangsinvestition, dem voraussichtlichen monatlichen Budget und der erforderlichen technischen Kapazität dar. Ihr Verbrauch innerhalb dieses Pakets wird anschließend nach den geltenden Tarifen abgerechnet. -### Third Parties Table +### Stufentabelle -| Tier | Purchase Credit | Monthly Limit | Tokens Output/Hour | Tokens Output/Day | Description | -|------|-----------------|----------------|--------------------|-------------------|-----------| -| **Tier 1** | 200 € | 1,000 € | 150,000 | 3,600,000 | Standard usage | -| **Tier 2** | 500 € | 3,000 € | 300,000 | 7,200,000 | Professional use | -| **Tier 3** | 1,000 € | 5,000 € | 450,000 | 10,800,000 | High volume | -| **Tier 4** | 4,000 € | 10,000 € | 600,000 | 14,400,000 | Enterprise | -| **Monthly Billing** | N/A | Unlimited | High priority | High priority | Contact sales | +| Stufe | Einkaufsguthaben | Monatliches Limit | Ausgabe-Tokens/Stunde | Ausgabe-Tokens/Tag | Beschreibung | +| ------------------------- | -------------- | ---------------- | ------------------- | ------------------ | -------------------- | +| **Stufe 1** | 200 € | 1 000 € | 150 000 | 3 600 000 | Standardnutzung | +| **Stufe 2** | 500 € | 3 000 € | 300 000 | 7 200 000 | Professionelle Nutzung | +| **Stufe 3** | 1 000 € | 5 000 € | 450 000 | 10 800 000 | Hohes Volumen | +| **Stufe 4** | 4 000 € | 10 000 € | 600 000 | 14 400 000 | Unternehmen | +| **Monatliche Abrechnung** | N/A | Unbegrenzt | Hohe Priorität | Hohe Priorität | Vertriebskontakt | -**Note**: Rate limits are calculated based on output tokens. Token pricing varies by usage: +**Hinweis**: Die Rate-Limits basieren auf den Ausgabe-Tokens. Die Preisgestaltung variiert je nach Nutzung: -- **Input tokens**: 1.90 € / million -- **Output tokens (standard)**: 8.00 € / million -- **Output tokens (reasoner)**: 8.00 € / million (applies to most advanced models for complex agent-like or reasoning tasks) +| Nutzungstyp | Preis | +| -------------------------------------- | ------------------------------------------------ | +| **Eingabe-Tokens** | 1,8 € / Million | +| **Ausgabe-Tokens (Chat/Vervollständigung)** | 8,00 € / Million | +| **Reasoning-Tokens** | 8,00 € / Million | +| **Reranking** | 4,00 € / Million gerankter Tokens | +| **Asynchroner Batch (Eingabe)** | 0,9 € / Million (−50 % gegenüber Standard) | +| **Asynchroner Batch (Ausgabe)** | 4,00 € / Million (−50 % gegenüber Standard) | +| **Audio-Transkription** | 0,01 € / Minute (jede angefangene Minute wird berechnet) | -#### **Audio Billing** +### Rate-Limit-Header -- **Audio Transcription**: 0.01 € / minute (every started minute is billable) - -### Rate Limit Headers - -Responses include informative headers: +Die Antworten enthalten informative Header: ``` X-RateLimit-Limit-Requests: 1000 @@ -66,31 +68,31 @@ X-RateLimit-Reset-Requests: 1640995200 ```json { "error": { - "message": "Ratenlimit überschritten. Bitte aktualisieren Sie Ihren Tarif oder versuchen Sie es später erneut.", + "message": "Rate limit exceeded. Please upgrade your tier or try again later.", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` -## Endpoints +## Endpunkte ### POST /v1/chat/completions -Generiert conversationalen Antworten. +Generiert konversationelle Antworten. #### Anfrage ```bash curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ -H "Content-Type: application/json" \ - -H "Authorization: Bearer IHR_API_TOKEN" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ -d '{ - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "messages": [ { "role": "user", - "content": "Erklären Sie die Photosynthese" + "content": "Expliquez la photosynthèse" } ], "max_tokens": 200, @@ -98,36 +100,36 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ }' ``` -#### Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `model` | string | ✅ | ID of the model (see [catalog](./models)) | -| `messages` | array | ✅ | Conversation (role: system/user/assistant) | -| `stream` | boolean | ❌ | Enables streaming (default: false) | -| `temperature` | float | ❌ | Creativity 0.0-2.0 (default: 0.7) | -| `max_tokens` | integer | ❌ | Token limit (default: 1024) | -| `top_p` | float | ❌ | Nucleus sampling 0.0-1.0 (default: 1.0) | -| `presence_penalty` | float | ❌ | Presence penalty -2.0 to 2.0 (default: 0) | -| `frequency_penalty` | float | ❌ | Frequency penalty -2.0 to 2.0 (default: 0) | -| `user` | string | ❌ | Unique user ID | -| `tools` | array | ❌ | List of tools the model can call. | -| `tool_choice` | string/object | ❌ | Controls whether the model should call a tool. "none", "auto", or `{"type": "function", "function": {"name": "my_function"}}`. | +#### Parameter -#### Standard Response +| Parameter | Typ | Erforderlich | Beschreibung | +| ------------------- | ------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------- | +| `model` | string | ✅ | Modell-ID (voir [catalogue](./models)) | +| `messages` | array | ✅ | Konversation (role: system/user/assistant) | +| `stream` | boolean | ❌ | Aktiviert das Streaming (défaut: false) | +| `temperature` | float | ❌ | Kreativität 0.0-2.0 (défaut: 0.7) | +| `max_tokens` | integer | ❌ | Token-Limit (défaut: 1024) | +| `top_p` | float | ❌ | Nucleus-Sampling 0.0-1.0 (défaut: 1.0) | +| `presence_penalty` | float | ❌ | Präsenzstrafe -2.0 bis 2.0 (défaut: 0) | +| `frequency_penalty` | float | ❌ | Häufigkeitsstrafe -2.0 bis 2.0 (défaut: 0) | +| `user` | string | ❌ | Eindeutige Benutzer-ID | +| `tools` | array | ❌ | Liste der Tools, die das Modell aufrufen kann. | +| `tool_choice` | string/object | ❌ | Steuert, ob das Modell ein Tool aufrufen soll. "none", "auto" oder `{"type": "function", "function": {"name": "my_function"}}`. | + +#### Standardantwort ```json { "id": "chatcmpl-bc52de347f2e4068b7bde380c0f8db37", "object": "chat.completion", "created": 1749114814, - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "choices": [ { "index": 0, "message": { "role": "assistant", - "content": "Die Photosynthese ist ein biologischer Prozess..." + "content": "La photosynthèse est un processus biologique..." }, "finish_reason": "stop" } @@ -140,16 +142,16 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ } ``` -#### Response with Tool Call +#### Antwort mit Tool-Aufruf -If the model decides to call a tool, the response will have a `finish_reason` of `tool_calls` and the message will contain a `tool_calls` array. +Wenn das Modell sich entscheidet, ein Tool aufzurufen, weist die Antwort ein `finish_reason` von `tool_calls` auf und die Nachricht enthält ein `tool_calls`-Array. ```json { "id": "chatcmpl-9f27a53f52b44a9693753f2a5e1f7a73", "object": "chat.completion", "created": 1749115200, - "model": "qwen3:14b", + "model": "gpt-oss:120b", "choices": [ { "index": 0, @@ -178,15 +180,15 @@ If the model decides to call a tool, the response will have a `finish_reason` of } ``` -After receiving a `tool_calls` response, you must execute the tool on your side and then send the result back to the model using a message with `role: "tool"`. +Nachdem Sie eine Antwort mit `tool_calls` erhalten haben, müssen Sie das Tool auf Ihrer Seite ausführen und das Ergebnis anschließend an das Modell zurücksenden, indem Sie eine Nachricht mit `role: "tool"` verwenden. ```json { - "model": "qwen3:14b", + "model": "gpt-oss:120b", "messages": [ { "role": "user", - "content": "What is the weather like in Paris?" + "content": "Quel temps fait-il à Paris ?" }, { "role": "assistant", @@ -204,7 +206,7 @@ After receiving a `tool_calls` response, you must execute the tool on your side { "role": "tool", "tool_call_id": "call_abc123", - "content": "{\"temperature\": \"22\", \"unit\": \"celsius\", \"description\": \"Sunny\"}" + "content": "{\"temperature\": \"22\", \"unit\": \"celsius\", \"description\": \"Ensoleillé\"}" } ] } @@ -212,45 +214,42 @@ After receiving a `tool_calls` response, you must execute the tool on your side #### Streaming (SSE) -Mit `"stream": true` wird die Antwort tokenweise geliefert: - -**Antwort-Header:** +Mit `"stream": true` kommt die Antwort Token für Token an: +**Antwort-Header :** ``` Content-Type: text/event-stream Cache-Control: no-cache ``` -**Format der Ereignisse:** - +**Ereignisformat :** ``` -data: {"choices":[{"delta":{"content":"Die"},"finish_reason":null,"index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"granite3.3:8b","object":"chat.completion.chunk"} +data: {"choices":[{"delta":{"content":"La"},"finish_reason":null,"index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"gpt-oss:120b","object":"chat.completion.chunk"} -data: {"choices":[{"delta":{"content":" photo"},"finish_reason":null,"index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"granite3.3:8b","object":"chat.completion.chunk"} +data: {"choices":[{"delta":{"content":" photo"},"finish_reason":null,"index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"gpt-oss:120b","object":"chat.completion.chunk"} -data: {"choices":[{"delta":{"content":""},"finish_reason":"stop","index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"granite3.3:8b","object":"chat.completion.chunk"} +data: {"choices":[{"delta":{"content":""},"finish_reason":"stop","index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"gpt-oss:120b","object":"chat.completion.chunk"} data: [DONE] ``` -**Struktur der Chunks:** +**Struktur der Chunks :** +- `choices[].delta.content` : Inkrementeller Inhalt +- `finish_reason` : `null` während des Streamings, anschließend `"stop"` +- Endsignal : `data: [DONE]` -- `choices[].delta.content`: Inkrementeller Inhalt -- `finish_reason`: `null` während des Streamings, danach `"stop"` -- Ende-Signal: `data: [DONE]` +### Multimodale Anfragen (Vision) -### Multimodal Queries (Vision) +Um Bilder zu analysieren, können Sie eine Anfrage senden, bei der das Feld `content` einer Benutzer-Nachricht ein Array (array) enthält, das sowohl Text als auch Bilder umfasst. -To analyze images, you can send a request where the `content` field of a user message is an array containing both text and images. +Das Format für ein Bild ist ein Objekt mit `type: "image_url"` und einem Feld `image_url`, das die URL des Bildes im `data URI`-Format (base64) enthält. -The format for an image is an object with `type: "image_url"` and an `image_url` field containing the image URL in `data URI` (base64) format. - -:::info[Compatibility Note] -Although the standard and recommended format is `{"type": "image_url", "image_url": {"url": "data:..."}}`, the API also supports, for flexibility, a simplified format `{"type": "image", "image": "data:..."}`. However, we recommend using the standard `image_url` format for better compatibility with the OpenAI ecosystem. +:::info Hinweis zur Kompatibilität +Obwohl das Standard- und empfohlene Format `{"type": "image_url", "image_url": {"url": "data:..."}}` lautet, unterstützt die API aus Gründen der Flexibilität auch ein vereinfachtes Format `{"type": "image", "image": "data:..."}`. Es wird jedoch empfohlen, das Standardformat `image_url` zu verwenden, um eine bessere Kompatibilität mit dem OpenAI-Ökosystem zu gewährleisten. ::: -:::tip[OCR and Document Analysis] -For specific document analysis tasks (PDFs, scans, tables), we recommend using the specialized model **DeepSeek-OCR**. See the [dedicated documentation](./ocr). +:::tip OCR und Dokumentenanalyse +Für spezifische Dokumentenanalyseaufgaben (PDF, scans, tableaux) empfehlen wir die Verwendung des spezialisierten Modells **DeepSeek-OCR**. Siehe die [dazugehörige Dokumentation](./ocr). ::: #### Beispiel für eine Vision-Anfrage @@ -258,7 +257,7 @@ For specific document analysis tasks (PDFs, scans, tables), we recommend using t ```bash curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ -H "Content-Type: application/json" \ - -H "Authorization: Bearer IHR_TOKEN_API" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ -d '{ "model": "gemma3:27b", "messages": [ @@ -267,7 +266,7 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ "content": [ { "type": "text", - "text": "Was siehst du auf diesem Bild?" + "text": "Que vois-tu sur cette image ?" }, { "type": "image_url", @@ -285,24 +284,24 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ ### POST /v1/completions :::warning -**Hinweis**: Der Endpunkt `/v1/completions` verwendet dasselbe Format wie `/v1/chat/completions` mit Nachrichten. -Für einfache Textkompletierung verwenden Sie eine Benutzer-Nachricht mit Ihrem Prompt. +**Hinweis**: Der Endpunkt `/v1/completions` verwendet dasselbe Format wie `/v1/chat/completions` mit Nachrichten. +Für die einfache Textvervollständigung verwenden Sie eine Benutzernachricht mit Ihrem Prompt. ::: -Textkompletierung über das Chat-Format. +Textvervollständigung über das Chat-Format. #### Anfrage ```bash curl -X POST "https://api.ai.cloud-temple.com/v1/completions" \ -H "Content-Type: application/json" \ - -H "Authorization: Bearer IHR_API_TOKEN" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ -d '{ - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "messages": [ { "role": "user", - "content": "Vervollständigen Sie diesen Satz: Künstliche Intelligenz ist" + "content": "Complétez cette phrase: L'intelligence artificielle est" } ], "max_tokens": 100, @@ -312,21 +311,21 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/completions" \ #### Parameter -Identisch zu `/v1/chat/completions` – siehe vorherige Section. +Identisch mit `/v1/chat/completions` - siehe vorherigen Abschnitt. -#### Answer +#### Antwort -Same format as `/v1/chat/completions`. +Format identisch mit `/v1/chat/completions`. ### POST /v1/audio/transcriptions -Audio in Text transkribieren (Whisper). +Audio-Transkription in Text (Whisper). #### Anfrage ```bash curl -X POST "https://api.ai.cloud-temple.com/v1/audio/transcriptions" \ - -H "Authorization: Bearer IHR_API_TOKEN" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ -F "file=@audio.wav" \ -F "language=fr" \ -F "response_format=json" @@ -334,26 +333,26 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/audio/transcriptions" \ #### Parameter -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `file` | binary | ✅ | Audio file (wav, mp3, m4a). | -| `language` | string | ❌ | ISO 639-1 language code (e.g., "fr"). Automatic detection if not provided. | -| `initial_prompt` | string | ❌ | Context or specific words to improve transcription accuracy. | -| `task` | string | ❌ | Task to perform: `transcribe` (default) or `translate` (translate to English). | -| `response_format` | string | ❌ | `json` (default, equivalent to `verbose_json`). Formats `text`, `srt`, `vtt` are currently not supported. | +| Parameter | Typ | Erforderlich | Beschreibung | +| ----------------- | ------ | ------------ | ------------------------------------------------------------------------------------------------------------------ | +| `file` | binary | ✅ | Audiodatei (wav, mp3, m4a). | +| `language` | string | ❌ | ISO-639-1-Sprachcode (z. B. "fr"). Automatische Erkennung, wenn nicht angegeben. | +| `initial_prompt` | string | ❌ | Kontext oder spezifische Wörter zur Verbesserung der Transkriptionsgenauigkeit. | +| `task` | string | ❌ | Auszuführende Aufgabe: `transcribe` (Standard) oder `translate` (Übersetzung ins Englische). | +| `response_format` | string | ❌ | `json` (Standard, entspricht `verbose_json`). Die Formate `text`, `srt`, `vtt` werden derzeit nicht unterstützt. | -#### Answer (`json`) +#### Antwort (`json`) ```json { - "text": "Hello, this is a test of audio transcription.", + "text": "Bonjour, ceci est un test de transcription audio.", "segments": [ { "id": 0, "seek": 0, "start": 0.0, "end": 4.0, - "text": " Hello, this is a test of audio transcription.", + "text": " Bonjour, ceci est un test de transcription audio.", "tokens": [ 50364, 40365, 33, 2373, 359, 456, 2373, 323, 1330, 2373, 2264, 50564 ], "temperature": 0.0, "avg_logprob": -0.25, @@ -361,32 +360,32 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/audio/transcriptions" \ "no_speech_prob": 0.05 } ], - "language": "en" + "language": "fr" } ``` ### POST /v1/embeddings -Creates an embedding vector representing the input text. +Erstellt einen Embedding-Vektor, der den Eingabetext repräsentiert. #### Anfrage ```bash curl -X POST "https://api.ai.cloud-temple.com/v1/embeddings" \ -H "Content-Type: application/json" \ - -H "Authorization: Bearer IHR_API_TOKEN" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ -d '{ "model": "granite-embedding:278m", - "input": "Der zu vektorisierende Text" + "input": "Le texte à vectoriser" }' ``` -#### Parameters +#### Parameter -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `model` | string | ✅ | ID of the embedding model (see [catalog](./models)) | -| `input` | string or array of strings | ✅ | The text or list of texts to vectorize. | +| Parameter | Typ | Erforderlich | Beschreibung | +| --------- | -------------------------- | ----------- | ----------------------------------------------------- | +| `model` | string | ✅ | ID des Embedding-Modells (siehe [Katalog](./models)) | +| `input` | string or array of strings | ✅ | Der Text oder die Liste der zu vektorisierenden Texte. | #### Antwort @@ -413,15 +412,105 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/embeddings" \ } ``` +### POST /v1/rerank + +Reordnet eine Liste von Dokumenten nach ihrer Relevanz in Bezug auf eine Abfrage. Kompatibel mit der Cohere-API (v1 und v2). + +**Abrechnung** : 4 € pro Million rerankter Tokens. Ideal zur Verbesserung der Genauigkeit von RAG-Pipelines. + +#### Anfrage + +```bash +curl -X POST "https://api.ai.cloud-temple.com/v1/rerank" \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ + -d '{ + "model": "nvidia/llama-nemotron-rerank-vl-1b-v2", + "query": "Quelle est la capitale de la France ?", + "documents": [ + "Paris est la capitale et la plus grande ville de France.", + "Lyon est une grande ville du sud-est de la France.", + "La France est un pays d'\''Europe occidentale." + ], + "top_n": 2 + }' +``` + +#### Parameter + +| Parameter | Typ | Erforderlich | Beschreibung | +| ----------- | ------- | ----------- | --------------------------------------------------------------------------- | +| `model` | string | ✅ | ID des Reranking-Modells (siehe [Katalog](./models#modèles-de-reranking)) | +| `query` | string | ✅ | Die Suchanfrage | +| `documents` | array | ✅ | Liste der umzuordnenden Dokumente | +| `top_n` | integer | ❌ | Anzahl der zurückzugebenden Ergebnisse (Standard: alle) | + +#### Antwort + +```json +{ + "id": "rerank-7f3a2b1c", + "results": [ + { + "index": 0, + "relevance_score": 0.9874, + "document": { + "text": "Paris est la capitale et la plus grande ville de France." + } + }, + { + "index": 2, + "relevance_score": 0.5231, + "document": { + "text": "La France est un pays d'Europe occidentale." + } + } + ], + "usage": { + "billed_units": { + "search_units": 3 + } + } +} +``` + +Der Endpunkt `/v2/rerank` (Cohere SDK v2) ist ebenfalls mit demselben Anfrageformat verfügbar. + +#### Python-Beispiel (Cohere SDK) + +```python +import cohere + +# Kompatibel mit dem Cohere SDK durch Angabe der LLMaaS-API +co = cohere.Client( + api_key="VOTRE_TOKEN_API", + base_url="https://api.ai.cloud-temple.com" +) + +results = co.rerank( + model="nvidia/llama-nemotron-rerank-vl-1b-v2", + query="Quelle est la capitale de la France ?", + documents=[ + "Paris est la capitale et la plus grande ville de France.", + "Lyon est une grande ville du sud-est de la France.", + "La France est un pays d'Europe occidentale." + ], + top_n=2 +) + +for result in results.results: + print(f"Index: {result.index}, Score: {result.relevance_score:.4f}") +``` + ### GET /v1/models -List of available models. +Liste der verfügbaren Modelle. #### Anfrage ```bash curl -X GET "https://api.ai.cloud-temple.com/v1/models" \ - -H "Authorization: Bearer IHR_API_TOKEN" + -H "Authorization: Bearer VOTRE_TOKEN_API" ``` #### Antwort @@ -431,16 +520,16 @@ curl -X GET "https://api.ai.cloud-temple.com/v1/models" \ "object": "list", "data": [ { - "id": "granite3.3:8b", + "id": "gpt-oss:120b", "object": "model", "created": 1749110897, "owned_by": "CloudTemple", - "root": "granite3.3:8b", - "aliases": ["granite3.3:8b"], + "root": "gpt-oss:120b", + "aliases": ["gpt-oss:120b"], "max_model_len": 60000, "permission": [ { - "id": "modelperm-granite3.3:8b-1749110897", + "id": "modelperm-gpt-oss:120b-1749110897", "object": "model_permission", "allow_sampling": true, "allow_view": true, @@ -452,14 +541,14 @@ curl -X GET "https://api.ai.cloud-temple.com/v1/models" \ } ``` -## Error Codes +## Fehlercodes ### 400 - Ungültige Anfrage ```json { "error": { - "message": "Ungültiger Parameter 'temperature': muss zwischen 0 und 2 liegen", + "message": "Invalid parameter 'temperature': must be between 0 and 2", "type": "invalid_request_error", "param": "temperature" } @@ -471,18 +560,18 @@ curl -X GET "https://api.ai.cloud-temple.com/v1/models" \ ```json { "error": { - "message": "Ungültiger API-Schlüssel bereitgestellt", + "message": "Invalid API key provided", "type": "authentication_error" } } ``` -### 404 - Modell Nicht Gefunden +### 404 - Modell nicht gefunden ```json { "error": { - "message": "Modell 'unknown-model' existiert nicht", + "message": "Model 'unknown-model' does not exist", "type": "invalid_request_error", "param": "model", "code": "model_not_found" @@ -495,36 +584,36 @@ curl -X GET "https://api.ai.cloud-temple.com/v1/models" \ ```json { "error": { - "message": "Ratenbegrenzung überschritten. Bitte aktualisieren Sie Ihren Tarif oder versuchen Sie es später erneut.", + "message": "Rate limit exceeded. Please upgrade your tier or try again later.", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` -### 500 - Server-Fehler +### 500 - Serverfehler ```json { "error": { - "message": "Interner Serverfehler", + "message": "Internal server error", "type": "server_error" } } ``` -### 503 - Dienst nicht verfügbar +### 503 - Service nicht verfügbar ```json { "error": { - "message": "Dienst vorübergehend nicht verfügbar", + "message": "Service temporarily unavailable", "type": "service_unavailable_error" } } ``` -## Examples by Language +## Beispiele nach Sprache ### Python mit requests @@ -533,9 +622,9 @@ import requests import json # Konfiguration -# It is recommended to protect your API key by using environment variables. +# Es wird empfohlen, Ihren API-Schlüssel mithilfe von Umgebungsvariablen zu schützen. # Beispiel: API_KEY = os.getenv("LLMAAS_API_KEY") -API_KEY = "IHRE_API_TOKEN" +API_KEY = "VOTRE_TOKEN_API" BASE_URL = "https://api.ai.cloud-temple.com/v1" headers = { @@ -543,11 +632,11 @@ headers = { "Authorization": f"Bearer {API_KEY}" } -# Chat completion +# Chat-Vervollständigung payload = { - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "messages": [ - {"role": "user", "content": "Hallo!"} + {"role": "user", "content": "Bonjour !"} ], "max_tokens": 100 } @@ -557,21 +646,21 @@ try: f"{BASE_URL}/chat/completions", headers=headers, json=payload, - timeout=30 # Hinzufügen eines Timeouts für die Anfrage + timeout=30 # Hinzufügen eines Timeouts für die Anfrage ) - response.raise_for_status() # Wirft eine Ausnahme bei HTTP-Fehlern (4xx, 5xx) + response.raise_for_status() # Löst eine Ausnahme für HTTP-Fehlercodes (4xx, 5xx) aus result = response.json() print(result["choices"][0]["message"]["content"]) except requests.exceptions.HTTPError as e: - print(f"Fehler HTTP: {e.response.status_code} - {e.response.text}") + print(f"Erreur HTTP: {e.response.status_code} - {e.response.text}") except requests.exceptions.RequestException as e: - print(f"Netzwerkfehler: {e}") + print(f"Erreur réseau: {e}") except json.JSONDecodeError: - print(f"Fehler beim Decodieren von JSON: {response.text}") + print(f"Erreur de décodage JSON: {response.text}") except Exception as e: - print(f"Ein unerwarteter Fehler ist aufgetreten: {e}") + print(f"Une erreur inattendue est survenue: {e}") ``` ### Python mit Streaming @@ -580,10 +669,10 @@ except Exception as e: import requests import json -def stream_chat(message, model="granite3.3:8b"): +def stream_chat(message, model="gpt-oss:120b"): # Es wird empfohlen, Ihren API-Schlüssel mithilfe von Umgebungsvariablen zu schützen. # Beispiel: API_KEY = os.getenv("LLMAAS_API_KEY") - API_KEY = "IHRE_API_TOKEN" + API_KEY = "VOTRE_TOKEN_API" BASE_URL = "https://api.ai.cloud-temple.com/v1" headers = { @@ -604,10 +693,10 @@ def stream_chat(message, model="granite3.3:8b"): headers=headers, json=payload, stream=True, - timeout=30 # Hinzufügen eines Timeouts für die Anfrage + timeout=30 # Hinzufügen eines Timeouts für die Anfrage ) - response.raise_for_status() # Löst eine Ausnahme für HTTP-Fehlercodes (4xx, 5xx) aus + response.raise_for_status() # Löst eine Ausnahme für HTTP-Fehlercodes (4xx, 5xx) aus for line in response.iter_lines(): if line: @@ -622,30 +711,29 @@ def stream_chat(message, model="granite3.3:8b"): if content: print(content, end='', flush=True) except json.JSONDecodeError: - print(f"Fehler beim Decodieren von JSON im Stream: {data}") + print(f"Erreur de décodage JSON dans le stream: {data}") continue - print() # Neue Zeile nach dem Stream + print() # Neue Zeile nach dem Stream except requests.exceptions.HTTPError as e: - print(f"Fehler HTTP: {e.response.status_code} - {e.response.text}") + print(f"Erreur HTTP: {e.response.status_code} - {e.response.text}") except requests.exceptions.RequestException as e: - print(f"Fehler im Netzwerk: {e}") + print(f"Erreur réseau: {e}") except Exception as e: - print(f"Ein unerwarteter Fehler ist aufgetreten: {e}") -``` - -# Usage + print(f"Une erreur inattendue est survenue: {e}") -stream_chat("Erklären Sie die Quantenphysik") +# Verwendung +stream_chat("Expliquez la physique quantique") +``` ### JavaScript/Node.js ```javascript const axios = require('axios'); -// Konfiguration -// Es wird empfohlen, Ihren API-Schlüssel durch Umgebungsvariablen zu schützen. -// Beispiel: const API_KEY = process.env.LLMAAS_API_KEY; -const API_KEY = 'IHRE_API_TOKEN'; +// Configuration +// Il est recommandé de protéger votre clé API en utilisant des variables d'environnement. +// Exemple: const API_KEY = process.env.LLMAAS_API_KEY; +const API_KEY = 'VOTRE_TOKEN_API'; const BASE_URL = 'https://api.ai.cloud-temple.com/v1'; async function chatCompletion(message) { @@ -653,7 +741,7 @@ async function chatCompletion(message) { const response = await axios.post( `${BASE_URL}/chat/completions`, { - model: 'granite3.3:8b', + model: 'gpt-oss:120b', messages: [ { role: 'user', content: message } ], @@ -664,20 +752,20 @@ async function chatCompletion(message) { 'Content-Type': 'application/json', 'Authorization': `Bearer ${API_KEY}` }, - timeout: 30000 // Hinzufügen eines Timeouts für die Anfrage (30 Sekunden) + timeout: 30000 // Ajout d'un timeout pour la requête (30 secondes) } ); return response.data.choices[0].message.content; } catch (error) { - console.error('Fehler:', error.response?.data || error.message); - // Detaillierte Fehlerbehandlung kann hier hinzugefügt werden, falls erforderlich - // Beispiel: if (error.response?.status === 429) { console.error("Rate limit exceeded"); } + console.error('Erreur:', error.response?.data || error.message); + // Gestion plus détaillée des erreurs peut être ajoutée ici si nécessaire + // Par exemple: if (error.response?.status === 429) { console.error("Rate limit exceeded"); } } } -// Verwendung -chatCompletion('Hallo!').then(response => { +// Utilisation +chatCompletion('Bonjour !').then(response => { if (response) { console.log(response); } @@ -695,7 +783,7 @@ async function fetchCompletion(message) { 'Authorization': `Bearer ${API_KEY}` }, body: JSON.stringify({ - model: 'granite3.3:8b', + model: 'gpt-oss:120b', messages: [ { role: 'user', content: message } ], @@ -724,58 +812,58 @@ def safe_api_call(payload): return response.json() except requests.exceptions.HTTPError as e: if response.status_code == 429: - print("Rate Limit erreicht, warten...") + print("Rate limit atteint, attendre...") time.sleep(60) # 1 Minute warten - return safe_api_call(payload) # Wiederholen + return safe_api_call(payload) # Erneuter Versuch else: - print(f"Fehler HTTP: {e}") + print(f"Erreur HTTP: {e}") except requests.exceptions.RequestException as e: - print(f"Fehler im Netzwerk: {e}") + print(f"Erreur réseau: {e}") ``` ### Kostenoptimierung -1. **Verwenden Sie geeignete Modelle**: Verwenden Sie kleinere Modelle für Tests -2. **Beschränken Sie max_tokens**: Vermeiden Sie zu lange Antworten -3. **Wiederverwenden von Gesprächen**: Effiziente Nutzung des Kontextfensters -4. **Überwachung**: Verfolgen Sie Ihre Nutzung in der Konsole +1. **Verwenden Sie geeignete Modelle** : Kleinere Modelle für Tests +2. **Begrenzen Sie max_tokens** : Vermeiden Sie zu lange Antworten +3. **Wiederverwenden Sie Konversationen** : Effizientes Context Window +4. **Monitoring** : Verfolgen Sie Ihre Nutzung in der Konsole -### Security +### Sicherheit -1. **Protect your token**: Environment variables -2. **Regular rotation**: Change your keys periodically -3. **Input validation**: Sanitize user data -4. **Client rate limiting**: Implement your own limits +1. **Schützen Sie Ihren Token** : Umgebungsvariablen +2. **Regelmäßige Rotation** : Wechseln Sie Ihre Schlüssel regelmäßig +3. **Eingabevalidierung** : Bereinigen Sie Benutzereingaben +4. **Clientseitiges Rate Limiting** : Implementieren Sie eigene Limits -## SDK and Integrations +## SDK und Integrationen -The LLMaaS API is compatible with existing OpenAI SDKs by simply changing the base URL: +Die LLMaaS-API ist mit den vorhandenen OpenAI-SDKs kompatibel, indem die Basis-URL geändert wird: ### OpenAI Python SDK ```python from openai import OpenAI -# It is recommended to protect your API key by using environment variables. +# Es wird empfohlen, Ihren API-Schlüssel über Umgebungsvariablen zu schützen. # Beispiel: api_key=os.getenv("LLMAAS_API_KEY") client = OpenAI( - api_key="IHRE_API_TOKEN", + api_key="VOTRE_TOKEN_API", base_url="https://api.ai.cloud-temple.com/v1" ) try: response = client.chat.completions.create( - model="granite3.3:8b", + model="gpt-oss:120b", messages=[ - {"role": "user", "content": "Hallo!"} + {"role": "user", "content": "Bonjour !"} ], - max_tokens=50 # Hinzufügen von max_tokens zur Konsistenz mit den Tests + max_tokens=50 # Hinzufügen von max_tokens zur Konsistenz mit den Tests ) print(response.choices[0].message.content) except Exception as e: - print(f"Fehler im OpenAI SDK: {e}") + print(f"Erreur OpenAI SDK: {e}") ``` ### LangChain @@ -784,41 +872,41 @@ except Exception as e: from langchain_openai import ChatOpenAI from langchain.schema import HumanMessage -# Chat Model Configuration (LLMaaS-compatible) -# It is recommended to protect your API key by using environment variables. -# Example: api_key=os.getenv("LLMAAS_API_KEY") +# Konfiguration des Chat-Modells (kompatibel mit LLMaaS) +# Es wird empfohlen, Ihren API-Schlüssel mithilfe von Umgebungsvariablen zu schützen. +# Beispiel: api_key=os.getenv("LLMAAS_API_KEY") chat = ChatOpenAI( - api_key="YOUR_API_TOKEN", + api_key="VOTRE_TOKEN_API", base_url="https://api.ai.cloud-temple.com/v1", - model="granite3.3:8b", - # Note: Parameters like max_tokens are passed via model_kwargs - # to ensure compatibility across LangChain versions. + model="gpt-oss:120b", + # Hinweis: Parameter wie max_tokens werden über model_kwargs übergeben + # um die Kompatibilität zwischen LangChain-Versionen sicherzustellen. model_kwargs={"max_tokens": 200} ) try: - # Usage with messages - messages = [HumanMessage(content="Explain AI in 3 sentences")] + # Verwendung mit Nachrichten + messages = [HumanMessage(content="Expliquez l'IA en 3 phrases")] response = chat.invoke(messages) print(response.content) - # Or with a simple string - response = chat.invoke("Hello, how are you?") + # Oder mit einer einfachen Zeichenkette + response = chat.invoke("Bonjour, comment ça va ?") print(response.content) except Exception as e: - print(f"LangChain error: {e}") + print(f"Erreur LangChain: {e}") ``` -#### Using Embeddings +#### Verwendung von Embeddings -:::warning[Incompatibility with standard LangChain clients] -Currently, using the embedding endpoint with LangChain's standard classes (`langchain_openai.OpenAIEmbeddings` or `langchain_community.OllamaEmbeddings`) is incompatible with our API. +:::warning Inkompatibilität mit Standard-LangChain-Clients +Derzeit weist die Verwendung des Embedding-Endpunkts über die Standardklassen von LangChain (`langchain_openai.OpenAIEmbeddings` oder `langchain_community.OllamaEmbeddings`) Inkompatibilitäten mit unserer API auf. -- `OpenAIEmbeddings` sends pre-computed tokens instead of raw text, which is rejected. -- `OllamaEmbeddings` does not handle the required Bearer Token authentication. +- `OpenAIEmbeddings` sendet vorab berechnete Tokens anstelle von Rohtext, was abgelehnt wird. +- `OllamaEmbeddings` unterstützt die erforderliche Bearer-Token-Authentifizierung nicht. -Until a permanent solution is available, it is recommended to create a custom embedding class or call the API directly, as demonstrated in the `examples/simple-rag-demo` example. +Bis eine dauerhafte Lösung verfügbar ist, wird empfohlen, eine benutzerdefinierte Embedding-Klasse zu erstellen oder die API direkt aufzurufen, wie im Beispiel `exemples/simple-rag-demo` gezeigt. ::: ```python @@ -828,9 +916,9 @@ import httpx class LLMaaSEmbeddings(Embeddings): """ - Custom embedding class to interact with Cloud Temple's LLMaaS API. - This class is designed to be compatible with LangChain's `Embeddings` interface, - enabling its use within LangChain pipelines while calling our specific API. + Classe d'embedding personnalisée pour interagir avec l'API LLMaaS de Cloud Temple. + Cette classe est conçue pour être compatible avec l'interface `Embeddings` de LangChain, + permettant son utilisation dans des pipelines LangChain tout en appelant notre API spécifique. """ def __init__(self, api_key: str, base_url: str = "https://api.ai.cloud-temple.com/v1", model_name: str = "granite-embedding:278m"): self.api_key = api_key @@ -848,12 +936,12 @@ class LLMaaSEmbeddings(Embeddings): response = client.post(f"{self.base_url}/embeddings", headers=self.headers, json=payload) response.raise_for_status() data = response.json()['data'] - # Sort embeddings by index to ensure correct order + # Embeddings nach ihrem Index sortieren, um die Reihenfolge zu gewährleisten data.sort(key=lambda e: e['index']) return [item['embedding'] for item in data] except httpx.HTTPStatusError as e: - print(f"HTTP error during embedding retrieval: {e.response.status_code}") - print(f"Response: {e.response.text}") + print(f"Erreur HTTP lors de la récupération de l'embedding : {e.response.status_code}") + print(f"Réponse : {e.response.text}") return [] def embed_documents(self, texts: List[str]) -> List[List[float]]: @@ -862,18 +950,17 @@ class LLMaaSEmbeddings(Embeddings): def embed_query(self, text: str) -> List[float]: return self._embed([text])[0] -# Usage +# Verwendung # embeddings = LLMaaSEmbeddings( -# api_key="YOUR_API_TOKEN", +# api_key="VOTRE_TOKEN_API", # base_url="https://api.ai.cloud-temple.com/v1", # model_name="granite-embedding:278m" # ) -# vector = embeddings.embed_query("My text to vectorize") +# vector = embeddings.embed_query("Mon texte à vectoriser") ``` ## Support - -- **Documentation** : [Quickstart Guide](./quickstart) -- **Model Catalog** : [Complete List](./models) -- **Console** : Management and monitoring via Cloud Temple Console -- **Support** : Via Cloud Temple Console +- **Dokumentation** : [Schnellstartanleitung](./quickstart) +- **Modellkatalog** : [Vollständige Liste](./models) +- **Konsole** : Verwaltung und Überwachung über die Cloud Temple Console +- **Support** : Über die Cloud Temple Console \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/llmaas/batch.md b/i18n/de/docusaurus-plugin-content-docs/current/llmaas/batch.md new file mode 100644 index 00000000..7d6f9f62 --- /dev/null +++ b/i18n/de/docusaurus-plugin-content-docs/current/llmaas/batch.md @@ -0,0 +1,536 @@ +--- +title: Batch API +sidebar_position: 6 +--- + +# Batch API — Asynchrone Verarbeitung + +:::info Verfügbarkeit +Die Batch API wird **stufenweise eingeführt**. Prüfen Sie die Verfügbarkeit auf Ihrem Konto in der [Cloud Temple Console](https://console.cloud-temple.com) oder kontaktieren Sie den kommerziellen Support. +::: + +## Was ist die Batch API? + +Die **Batch API** ermöglicht das Einreichen großer Mengen von Anfragen **asynchron**, die in Schwachlastzeiten verarbeitet werden. Im Austausch für eine Toleranz bei der Verarbeitungszeit (einige Stunden) profitieren Sie von einer **Preissenkung um 50 %** auf die Standardtarife. + +### Wann sollte die Batch API verwendet werden? + +| Anwendungsfall | Geeignet für Batch? | +|-------------|-------------------| +| Klassifizierung/Labeling von Millionen Dokumenten | ✅ Ideal | +| Massengenerierung von Zusammenfassungen | ✅ Ideal | +| Entitätsextraktion über große Korpora | ✅ Ideal | +| Vektorisierung (Embedding) in großem Umfang | ✅ Ideal | +| Modellbewertung (Benchmarks) | ✅ Ideal | +| Echtzeit-Chatbot | ❌ Verwenden Sie `/v1/chat/completions` | +| Interaktive Antwort < 2 Sekunden | ❌ Verwenden Sie die Standard-API | +| SSE-Streaming | ❌ Verwenden Sie die Standard-API | + +## Preisgestaltung + +| Nutzung | Batch | Standard | Einsparung | +|-------|-------|----------|---------| +| **Eingabetokens** | **0,9 € / Million** | 1,8 € / Million | −50% | +| **Ausgabetokens** | **4,0 € / Million** | 8,0 € / Million | −50% | + +### Beispiel für Einsparungen + +Zum Verarbeiten von 1 Million Dokumenten mit je 500 Tokens und Antworten von 200 Tokens: +- **Standard** : (500 × 1.8 + 200 × 8) / 1 = 2 500 € +- **Batch** : (500 × 0.9 + 200 × 4) / 1 = 1 250 € +- **Einsparung : 1 250 € (−50%)** + +## Architektur der Batch-Pipeline + +``` +1. Vorbereitung 2. Einreichung 3. Verarbeitung +──────────────────────── ───────────────────── ───────────────────── +Erstellen einer JSONL-Datei → POST /v1/batches → Asynchrone Verarbeitung +mit N Anfragen (gibt batch_id zurück) in Schwachlastzeiten + +4. Polling 5. Abruf +───────────────────────── ───────────────────────── +GET /v1/batches/{id} → GET /v1/files/{file_id} → JSONL-Ergebnisse +(Status: validating, (Ergebnisse herunterladen +in_progress, completed) Ergebnisse)) +``` + +## Format der Eingabedatei (JSONL) + +Jede Zeile der Datei ist eine unabhängige JSON-Anfrage: + +```json +{"custom_id": "req-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gpt-oss:120b", "messages": [{"role": "user", "content": "Résume ce texte : L'IA générative est..."}], "max_tokens": 200}} +{"custom_id": "req-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gpt-oss:120b", "messages": [{"role": "user", "content": "Classifie ce ticket : Mon accès VPN ne fonctionne plus."}], "max_tokens": 50}} +{"custom_id": "req-3", "method": "POST", "url": "/v1/embeddings", "body": {"model": "granite-embedding:278m", "input": "Texte à vectoriser pour la recherche sémantique."}} +``` + +### Erforderliche Felder pro Zeile + +| Feld | Typ | Beschreibung | +|-------|------|-------------| +| `custom_id` | string | Eindeutige Kennung Ihrer Anfrage (zur Ergebnisabfrage) | +| `method` | string | Immer `"POST"` | +| `url` | string | Ziel-Endpoint (z. B. `/v1/chat/completions`, `/v1/embeddings`) | +| `body` | object | Anfragekörper (im gleichen Format wie ein direkter Aufruf) | + +## API-Endpunkte + +### POST /v1/batches — Batch einreichen + +```bash +# 1. Upload du fichier JSONL +curl -X POST "https://api.ai.cloud-temple.com/v1/files" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ + -F "purpose=batch" \ + -F "file=@requests.jsonl" +``` + +```json +{ + "id": "file-abc123xyz", + "object": "file", + "purpose": "batch", + "filename": "requests.jsonl", + "bytes": 4096, + "created_at": 1749110753 +} +``` + +```bash +# 2. Soumission du batch +curl -X POST "https://api.ai.cloud-temple.com/v1/batches" \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ + -d '{ + "input_file_id": "file-abc123xyz", + "endpoint": "/v1/chat/completions", + "completion_window": "24h" + }' +``` + +```json +{ + "id": "batch-def456uvw", + "object": "batch", + "endpoint": "/v1/chat/completions", + "input_file_id": "file-abc123xyz", + "status": "validating", + "created_at": 1749110800, + "request_counts": { + "total": 100, + "completed": 0, + "failed": 0 + } +} +``` + +### GET /v1/batches/\{batch_id\} — Status prüfen + +```bash +curl -X GET "https://api.ai.cloud-temple.com/v1/batches/batch-def456uvw" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" +``` + +**Mögliche Status:** + +| Status | Beschreibung | +|--------|-------------| +| `validating` | Validierung der Eingabedatei läuft | +| `in_progress` | Verarbeitung der Anfragen läuft | +| `finalizing` | Zusammenstellung der Ergebnisse läuft | +| `completed` | Alle Ergebnisse sind verfügbar | +| `failed` | Gesamtfehler (siehe `errors`) | +| `cancelled` | Vom Benutzer abgebrochen | + +```json +{ + "id": "batch-def456uvw", + "status": "completed", + "output_file_id": "file-ghi789rst", + "request_counts": { + "total": 100, + "completed": 99, + "failed": 1 + }, + "completed_at": 1749118000 +} +``` + +### GET /v1/files/\{file_id\}/content — Ergebnisse abrufen + +```bash +curl -X GET "https://api.ai.cloud-temple.com/v1/files/file-ghi789rst/content" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ + -o results.jsonl +``` + +**Format der Ergebnisse (JSONL):** + +```json +{"id": "batch-def456uvw", "custom_id": "req-1", "response": {"status_code": 200, "body": {"id": "chatcmpl-...", "choices": [{"message": {"role": "assistant", "content": "Résumé : L'IA générative..."}}], "usage": {"prompt_tokens": 45, "completion_tokens": 87}}}} +{"id": "batch-def456uvw", "custom_id": "req-2", "response": {"status_code": 200, "body": {"id": "chatcmpl-...", "choices": [{"message": {"role": "assistant", "content": "Catégorie: Réseau/VPN"}}], "usage": {"prompt_tokens": 22, "completion_tokens": 8}}}} +{"id": "batch-def456uvw", "custom_id": "req-3", "error": {"code": "server_error", "message": "Processing failed"}} +``` + +## Vollständiges Python-Beispiel + +```python +""" +Exemple complet d'utilisation de la Batch API LLMaaS. +Cas d'usage : classification de tickets de support en masse. +""" +import httpx +import json +import time +import os +from pathlib import Path + +API_KEY = os.getenv("LLMAAS_API_KEY") +BASE_URL = "https://api.ai.cloud-temple.com/v1" +HEADERS = { + "Authorization": f"Bearer {API_KEY}", + "Content-Type": "application/json" +} + + +# ══════════════════════════════════════════════════════ +# SCHRITT 1 : Anfragen im JSONL-Format vorbereiten +# ══════════════════════════════════════════════════════ + +def create_batch_file(tickets: list[str], output_path: str = "batch_input.jsonl") -> str: + """ + Crée un fichier JSONL avec une requête de classification par ticket. + + Args: + tickets: Liste des tickets à classifier + output_path: Chemin du fichier JSONL de sortie + + Returns: + Chemin du fichier créé + """ + with open(output_path, "w", encoding="utf-8") as f: + for i, ticket in enumerate(tickets): + request = { + "custom_id": f"ticket-{i:04d}", + "method": "POST", + "url": "/v1/chat/completions", + "body": { + "model": "gpt-oss:120b", + "messages": [ + { + "role": "system", + "content": ( + "Tu es un expert en support IT. " + "Classifie le ticket dans une seule catégorie parmi : " + "Réseau, Sécurité, Logiciel, Matériel, Accès, Autre. " + "Réponds uniquement avec le nom de la catégorie." + ) + }, + { + "role": "user", + "content": ticket + } + ], + "max_tokens": 10, + "temperature": 0.0 + } + } + f.write(json.dumps(request, ensure_ascii=False) + "\n") + + print(f"✅ Fichier JSONL créé : {output_path} ({len(tickets)} requêtes)") + return output_path + + +# ══════════════════════════════════════════════════════ +# SCHRITT 2 : Datei hochladen +# ══════════════════════════════════════════════════════ + +def upload_batch_file(file_path: str) -> str: + """ + Upload le fichier JSONL vers l'API. + + Returns: + file_id retourné par l'API + """ + print(f"📤 Upload de {file_path}...") + + with open(file_path, "rb") as f: + with httpx.Client(timeout=60.0) as client: + response = client.post( + f"{BASE_URL}/files", + headers={"Authorization": f"Bearer {API_KEY}"}, + files={"file": (Path(file_path).name, f, "application/jsonl")}, + data={"purpose": "batch"} + ) + response.raise_for_status() + + file_id = response.json()["id"] + print(f"✅ Fichier uploadé : {file_id}") + return file_id + + +# ══════════════════════════════════════════════════════ +# SCHRITT 3 : Batch einreichen +# ══════════════════════════════════════════════════════ + +def submit_batch(file_id: str) -> str: + """ + Soumet un batch pour traitement asynchrone. + + Returns: + batch_id retourné par l'API + """ + print(f"🚀 Soumission du batch (fichier: {file_id})...") + + with httpx.Client(timeout=30.0) as client: + response = client.post( + f"{BASE_URL}/batches", + headers=HEADERS, + json={ + "input_file_id": file_id, + "endpoint": "/v1/chat/completions", + "completion_window": "24h" + } + ) + response.raise_for_status() + + data = response.json() + batch_id = data["id"] + print(f"✅ Batch soumis : {batch_id} (statut: {data['status']})") + return batch_id + + +# ══════════════════════════════════════════════════════ +# SCHRITT 4 : Polling bis zur Fertigstellung +# ══════════════════════════════════════════════════════ + +def wait_for_completion(batch_id: str, poll_interval: int = 30) -> dict: + """ + Interroge l'API jusqu'à la complétion du batch. + + Args: + batch_id: L'identifiant du batch + poll_interval: Intervalle de polling en secondes + + Returns: + Le statut final du batch + """ + print(f"⏳ En attente de la complétion du batch {batch_id}...") + + terminal_statuses = {"completed", "failed", "cancelled", "expired"} + + while True: + with httpx.Client(timeout=30.0) as client: + response = client.get( + f"{BASE_URL}/batches/{batch_id}", + headers=HEADERS + ) + response.raise_for_status() + + batch = response.json() + status = batch["status"] + counts = batch.get("request_counts", {}) + + print( + f" Statut: {status} | " + f"Complétées: {counts.get('completed', 0)}/{counts.get('total', 0)} | " + f"Échouées: {counts.get('failed', 0)}" + ) + + if status in terminal_statuses: + return batch + + time.sleep(poll_interval) + + +# ══════════════════════════════════════════════════════ +# SCHRITT 5 : Ergebnisse abrufen und parsen +# ══════════════════════════════════════════════════════ + +def download_results(output_file_id: str, save_path: str = "batch_output.jsonl") -> list[dict]: + """ + Télécharge et parse les résultats du batch. + + Returns: + Liste des résultats par custom_id + """ + print(f"📥 Téléchargement des résultats ({output_file_id})...") + + with httpx.Client(timeout=60.0) as client: + response = client.get( + f"{BASE_URL}/files/{output_file_id}/content", + headers={"Authorization": f"Bearer {API_KEY}"} + ) + response.raise_for_status() + + # Sauvegarder le fichier brut + with open(save_path, "wb") as f: + f.write(response.content) + + # Parser les résultats + results = [] + for line in response.text.strip().split("\n"): + if line: + results.append(json.loads(line)) + + print(f"✅ {len(results)} résultats récupérés → {save_path}") + return results + + +# ══════════════════════════════════════════════════════ +# HAUPTPROGRAMM +# ══════════════════════════════════════════════════════ + +def main(): + # Beispiele für IT-Support-Tickets + tickets = [ + "Mon accès VPN ne fonctionne plus depuis ce matin.", + "L'imprimante du 3ème étage n'imprime plus en couleur.", + "Je ne peux pas me connecter à mon compte Office 365.", + "Mon ordinateur est très lent depuis la mise à jour d'hier.", + "Le site web de facturation interne affiche une erreur 500.", + "Besoin d'accès au dossier partagé RH sur le serveur.", + "Mon badge ne fonctionne plus à l'entrée du datacenter.", + "Outlook ne reçoit plus d'emails depuis 2 heures.", + ] + + print(f"🎯 Traitement de {len(tickets)} tickets en mode Batch\n") + + # Vollständiger Pipeline + jsonl_file = create_batch_file(tickets) + file_id = upload_batch_file(jsonl_file) + batch_id = submit_batch(file_id) + + final_status = wait_for_completion(batch_id, poll_interval=30) + + if final_status["status"] != "completed": + print(f"❌ Batch terminé avec statut : {final_status['status']}") + return + + output_file_id = final_status.get("output_file_id") + if not output_file_id: + print("❌ Aucun fichier de sortie disponible.") + return + + results = download_results(output_file_id) + + # Ergebnisse anzeigen + print("\n" + "═" * 60) + print("📊 RÉSULTATS DE CLASSIFICATION") + print("═" * 60) + + for result in results: + custom_id = result["custom_id"] + idx = int(custom_id.split("-")[1]) + + if "error" in result: + category = f"ERREUR: {result['error']['message']}" + else: + category = result["response"]["body"]["choices"][0]["message"]["content"].strip() + + ticket_text = tickets[idx] if idx < len(tickets) else "?" + print(f"[{custom_id}] {category:12s} | {ticket_text[:60]}...") + + +if __name__ == "__main__": + main() +``` + +## Behandlung partieller Fehler + +Der Batch kann **teilweise erfolgreich** sein: Einige Anfragen werden erfolgreich verarbeitet, andere schlagen fehl. + +```python +def process_results(results: list[dict]) -> tuple[list, list]: + """Sépare les succès des échecs dans les résultats.""" + successes = [] + failures = [] + + for result in results: + if "error" in result: + failures.append({ + "custom_id": result["custom_id"], + "error": result["error"] + }) + else: + response_body = result["response"]["body"] + successes.append({ + "custom_id": result["custom_id"], + "content": response_body["choices"][0]["message"]["content"], + "usage": response_body.get("usage", {}) + }) + + print(f"✅ Succès : {len(successes)} | ❌ Échecs : {len(failures)}") + return successes, failures +``` + +## Limitationen und Einschränkungen + +| Einschränkung | Wert | +|-----------|--------| +| **Maximale Dateigröße der JSONL-Datei** | 100 MB | +| **Maximale Anzahl von Anfragen pro Batch** | 50 000 | +| **Garantierte Verarbeitungsdauer** | < 24h (typischerweise 2-4h) | +| **Aufbewahrungsdauer der Ergebnisdateien** | 7 Tage | +| **Gleichzeitige Batches pro Konto** | 10 | + +:::warning Asynchrone Verarbeitung +Der Batch garantiert keine bestimmte Reihenfolge der Verarbeitung. Die Ergebnisse können in einer anderen Reihenfolge als der Eingabereihenfolge zurückgegeben werden. Verwenden Sie das Feld `custom_id`, um jedes Ergebnis der ursprünglichen Anfrage zuzuordnen. +::: + +## Erweiterte Anwendungsfälle + +### Masseneinbettung + +```python +# Vectorisation de 10 000 documents en batch +def create_embedding_batch(documents: list[str]) -> str: + with open("embed_batch.jsonl", "w") as f: + for i, doc in enumerate(documents): + request = { + "custom_id": f"doc-{i:05d}", + "method": "POST", + "url": "/v1/embeddings", + "body": { + "model": "granite-embedding:278m", + "input": doc[:500] # Limite de contexte du modèle + } + } + f.write(json.dumps(request) + "\n") +return "embed_batch.jsonl" +``` + +### Abbruch eines Batches + +```python +def cancel_batch(batch_id: str) -> dict: + with httpx.Client(timeout=30.0) as client: + response = client.post( + f"{BASE_URL}/batches/{batch_id}/cancel", + headers=HEADERS + ) + response.raise_for_status() + return response.json() +``` + +### Batch-Liste + +```python +def list_batches(limit: int = 20) -> list[dict]: + with httpx.Client(timeout=30.0) as client: + response = client.get( + f"{BASE_URL}/batches", + headers=HEADERS, + params={"limit": limit} + ) + response.raise_for_status() + return response.json()["data"] +``` + +## Ressourcen + +- **Vollständiger Beispielcode** : [`exemples/simple_batch/`](https://github.com/Cloud-Temple/product-llmaas-how-to/tree/main/simple_batch) +- **Modellkatalog** : [Batch-kompatible Modelle](./models) +- **API-Referenz** : [Vollständige API-Dokumentation](./api) +- **Detaillierte Preisgestaltung** : [LLMaaS-Preise](./api#rate-limiting-et-facturation) \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/llmaas/concepts.md b/i18n/de/docusaurus-plugin-content-docs/current/llmaas/concepts.md index 06c4de09..9c644f80 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/llmaas/concepts.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/llmaas/concepts.md @@ -3,449 +3,381 @@ title: Konzepte sidebar_position: 3 --- -# Concepts and Architecture of LLMaaS +# Konzepte und Architektur LLMaaS -## Overview +## Übersicht -The **LLMaaS** (Large Language Models as a Service) service by Cloud Temple provides secure and sovereign access to the most advanced artificial intelligence models, with the **SecNumCloud certification** from ANSSI. +Der **LLMaaS**-Dienst (Large Language Models as a Service) von Cloud Temple bietet einen sicheren und souveränen Zugriff auf die fortschrittlichsten KI-Modelle, mit der **SecNumCloud-Zertifizierung** der ANSSI. ## 🏗️ Technische Architektur -### Cloud Infrastructure Temple +### Cloud-Tempel-Infrastruktur import ArchitectureLLMaaS from '@site/docs/llmaas/images/llmaas_architecture_001.png'; -Technical Architecture of LLMaaS Cloud Temple +Technische Architektur LLMaaS Cloud-Tempel ### Hauptkomponenten #### 1. **API Gateway LLMaaS** +- **OpenAI-kompatibel** : Nahtlose Integration in das bestehende Ökosystem +- **Rate Limiting** : Quotenverwaltung nach Abrechnungsebene +- **Load Balancing** : Intelligente Verteilung auf 12 GPU-Maschinen +- **Monitoring** : Echtzeitmetriken und Alerting -- **OpenAI-kompatibel** : Nahtlose Integration in bestehende Ökosysteme -- **Rate Limiting** : Verwaltung von Quoten je Abonnementstier -- **Load Balancing** : Intelligente Verteilung auf 12 GPU-Server -- **Monitoring** : Echtzeit-Metriken und Alarmierung +#### 2. **Authentifizierungsdienst** +- **Sichere API-Token** : Automatische Rotation +- **Zugriffskontrolle** : Granulare Berechtigungen pro Modell +- **Audit-Protokolle** : Lückenlose Nachverfolgung der Zugriffe -#### 2. **Authentication Service** +## 🤖 Modelle und Tokens -- **Secure API Tokens**: Automatic rotation -- **Access Control**: Granular permissions per model -- **Audit Trails**: Full access traceability +### Modellkatalog -## 🤖 Models and Tokens +*Vollständiger Katalog : [Modellliste](./models)* -### Model Catalog +### Token-Verwaltung -*Complete catalog: [List of models](./models)* - -### Token Management - -#### **Token Types** - -- **Input Tokens**: Your prompt and context -- **Output Tokens**: Response generated by the model -- **System Tokens**: Metadata and instructions - -#### **Cost Calculation** +#### **Token-Typen** +- **Eingabe-Token** : Prompt und Kontext +- **Ausgabe-Token** : Vom Modell generierte Antwort +- **System-Token** : Metadaten und Anweisungen +#### **Kostenberechnung** ``` -Total cost = (Input tokens × 1.9€/M) + (Output tokens × 8€/M) + (Reasoning output tokens × 8€/M) +Chat/Completion = (Tokens entrée × 1.8€/M) + (Tokens sortie × 8€/M) + (Tokens sortie Raisonnement × 8€/M) +Reranking = Documents rerankés × 4€/M +Batch (async) = (Tokens entrée × 0.9€/M) + (Tokens sortie × 4€/M) +Audio (ASR) = 0.01€ / minute de transcription ``` #### **Optimierung** - -- **Contextfenster**: Wiederverwenden Sie Gespräche, um Kosten zu sparen -- **Passende Modelle**: Wählen Sie die Größe entsprechend der Komplexität -- **Maximale Tokens**: Begrenzen Sie die Länge der Antworten +- **Context Window** : Wiederverwenden Sie Konversationen, um Kosten zu sparen +- **Passende Modelle** : Wählen Sie die Größe entsprechend der Komplexität +- **Max Tokens** : Begrenzen Sie die Antwortlänge ### Tokenisierung ```python -# Beispiel zur Schätzung von Tokens +# Beispiel zur Token-Schätzung def estimate_tokens(text: str) -> int: - """Approximative Schätzung: 1 Token ≈ 4 Zeichen""" + """Estimation approximative : 1 token ≈ 4 caractères""" return len(text) // 4 -prompt = "Erklären Sie die Photosynthese" -response_max = 200 # maximal gewünschte Tokens +prompt = "Expliquez la photosynthèse" +response_max = 200 # tokens max souhaités -estimated_input = estimate_tokens(prompt) # ~6 Tokens -total_cost = (estimated_input * 1.9 + response_max * 8) / 1_000_000 -print(f"Geschätzter Kostenbetrag: {total_cost:.6f}€") +estimated_input = estimate_tokens(prompt) # ~6 Token +total_cost = (estimated_input * 1.8 + response_max * 8) / 1_000_000 +print(f"Coût estimé: {total_cost:.6f}€") ``` -## 🔒 Security and Compliance - -### SecNumCloud Certification - -The LLMaaS service is hosted on a technical infrastructure that holds the **SecNumCloud 3.2 certification** from ANSSI, ensuring: - -#### **Data Protection** +## 🔒 Sicherheit und Compliance -- **End-to-end Encryption**: TLS 1.3 for all communications -- **Secure Storage**: Data encrypted at rest (AES-256) -- **Isolation**: Dedicated environments per tenant +### SecNumCloud-Qualifikation -#### **Digital Sovereignty** +Der LLMaaS-Dienst wird auf einer technischen Infrastruktur ausgeführt, die über die **SecNumCloud-3.2-Qualifikation** der ANSSI verfügt, was Folgendes garantiert: -- **Hosting in France**: Cloud Temple data centers certified -- **French law**: Native GDPR compliance -- **No exposure**: No data transfers to foreign clouds +#### **Datenschutz** +- **End-to-End-Verschlüsselung** : TLS 1.3 für alle Übertragungen +- **Sichere Speicherung** : Daten im Ruhezustand verschlüsselt (AES-256) +- **Isolation** : Dedizierte Umgebungen pro Mandant -#### **Audit and Traceability** +#### **Digitale Souveränität** +- **Hosting in Frankreich** : Zertifizierte Cloud-Temple-Rechenzentren +- **Französisches Recht** : Native DSGVO-Konformität +- **Keine Exposition** : Keine Übertragung in ausländische Clouds -- **Complete logs**: All interactions tracked -- **Retention**: Stored according to legal policies -- **Compliance**: Audit reports available +#### **Audit und Nachverfolgbarkeit** +- **Vollständige Logs** : Alle Interaktionen werden protokolliert +- **Aufbewahrung** : Aufbewahrung gemäß gesetzlichen Vorgaben +- **Compliance** : Auditberichte verfügbar -### Security Controls +### Sicherheitskontrollen import SecurityControls from '@site/docs/llmaas/images/llmaas_security_002.png'; -Security Controls LLMaaS +Sicherheitskontrollen LLMaaS -### Prompt Security +### Prompt-Sicherheit -Prompt analysis is a **native and integrated** security feature of the LLMaaS platform. Enabled by default, it aims to detect and prevent attempts at "jailbreaking" or injecting malicious prompts before they even reach the model. This protection is based on a multi-layered approach. +Die Prompt-Analyse ist eine **native und integrierte** Sicherheitsfunktion der LLMaaS-Plattform. Standardmäßig aktiviert, zielt sie darauf ab, Versuche von "jailbreak" oder bösartigen Prompt-Injektionen zu erkennen und zu verhindern, bevor diese das Modell erreichen. Dieser Schutz basiert auf einem mehrschichtigen Ansatz. -:::tip[Contact Support for Disabling] -It is possible to disable this security analysis for very specific use cases, although this is not recommended. For any questions regarding this or to request deactivation, please contact Cloud Temple support. +:::tip Support zur Deaktivierung kontaktieren +Diese Sicherheitsanalyse kann für sehr spezifische Anwendungsfälle deaktiviert werden, auch wenn dies nicht empfohlen wird. Für Fragen zu diesem Thema oder um eine Deaktivierung anzufordern, wenden Sie sich bitte an den Cloud Temple Support. ::: -#### 1. Strukturelle Analyse (`check_structure`) +#### 1. Strukturanalyse (`check_structure`) +- **Überprüfung auf fehlerhaftes JSON** : Das System erkennt, ob der Prompt mit einem `{` beginnt und versucht, ihn als JSON zu parsen. Wenn das Parsing erfolgreich ist und das JSON verdächtige Schlüsselwörter enthält (z. B. "system", "bypass"), oder wenn das Parsing unerwartet fehlschlägt, kann dies auf einen Injektionsversuch hindeuten. +- **Unicode-Normalisierung** : Der Prompt wird unter Verwendung von `unicodedata.normalize('NFKC', prompt)` normalisiert. Wenn der ursprüngliche Prompt von seiner normalisierten Version abweicht, kann dies auf die Verwendung irreführender Unicode-Zeichen (Homoglyphen) zum Umgehen von Filtern hindeuten. Beispielsweise "аdmin" (kyrillisch) anstelle von "admin" (lateinisch). -- **Überprüfung auf fehlerhaftes JSON**: Das System erkennt, ob der Prompt mit einem `{` beginnt und versucht, ihn als JSON zu parsen. Wenn der Parsevorgang erfolgreich ist und der JSON verdächtige Schlüsselwörter enthält (z. B. "system", "bypass"), oder wenn der Parsevorgang unerwartet fehlschlägt, kann dies auf eine Injektionsversuch hinweisen. -- **Unicode-Normalisierung**: Der Prompt wird mittels `unicodedata.normalize('NFKC', prompt)` normalisiert. Wenn sich der ursprüngliche Prompt von seiner normalisierten Version unterscheidet, kann dies auf die Verwendung von täuschenden Unicode-Zeichen (Homoglyphen) hindeuten, um Filter zu umgehen. Beispielsweise "аdmin" (kyrillisch) anstelle von "admin" (lateinisch). +#### 2. Erkennung verdächtiger Muster (`check_patterns`) +- Das System verwendet reguläre Ausdrücke (`regex`), um bekannte Muster von Prompt-Injektionsangriffen zu identifizieren, und zwar in mehreren Sprachen (Französisch, Englisch, Chinesisch, Japanisch). +- **Beispiele erkannter Muster** : + - **Systembefehle** : Schlüsselwörter wie "ignore les instructions", "ignore instructions", "忽略指令", "指示を無視". + - **HTML-Injektion** : Versteckte oder bösartige HTML-Tags, beispielsweise `
`, ``. + - **Markdown-Injektion** : Bösartige Markdown-Links, beispielsweise `[texte](javascript:...)`, `[text](data:...)`. + - **Wiederholte Sequenzen** : Übermäßige Wiederholung von Wörtern oder Sätzen wie "oublie oublie oublie", "forget forget forget". + - **Spezial-/Mischzeichen** : Verwendung ungewöhnlicher Unicode-Zeichen oder Vermischung von Skripts zum Verbergen von Befehlen (z. B. "s\u0443stème"). -#### 2. Detection von verdächtigen Mustern (`check_patterns`) +#### 3. Verhaltensanalyse (`check_behavior`) +- Der Load Balancer verwaltet einen Verlauf der jüngsten Prompts. +- **Fragmentierungserkennung** : Er kombiniert die jüngsten Prompts, um zu prüfen, ob ein Angriff auf mehrere Anfragen aufgeteilt ist. Wenn beispielsweise "ignore" in einem Prompt gesendet wird und "instructions" in der nächsten, kann das System diese gemeinsam erkennen. +- **Wiederholungserkennung** : Er erkennt, ob derselbe Prompt übermäßig häufig wiederholt wird. Der aktuelle Schwellenwert für die Wiederholungserkennung beträgt 30 aufeinanderfolgende identische Prompts. -- Das System verwendet reguläre Ausdrücke (`regex`), um bekannte Angriffsmuster bei Prompt-Attacken zu erkennen, und zwar in mehreren Sprachen (Französisch, Englisch, Chinesisch, Arbeitspraktiken). -- **Beispiele für erkannte Muster**: - - **Systembefehle**: Schlüsselwörter wie „ignore the instructions“, „ignore instructions“, „忽略指令“, „指示を無視“. - - **HTML-Injektion**: Versteckte oder schädliche HTML-Tags, beispielsweise ` -Managed **Core** Kubernetes by Cloud Temple ist eine Container-Orchestrierungslösung, die auf einer Auswahl von Open-Source-Produkten basiert und darauf ausgelegt ist, eine sichere, resiliente und automatisierte Basisschicht auf den SecNumCloud-Plattformen von Cloud Temple zu bieten. Jeder Cluster wird in einer Cloud Temple IaaS-Umgebung bereitgestellt, die vollständig dem Kunden gewidmet ist. +Managed **Core** Kubernetes von Cloud Temple ist eine Container-Orchestrierungslösung, die auf einer Auswahl Open-Source-Produkte basiert und darauf ausgelegt ist, eine sichere, resiliente und automatisierte Basis auf den SecNumCloud-Plattformen von Cloud Temple zu bieten. Jeder Cluster wird in einer vollständig dem Kunden gewidmeten IaaS-Umgebung von Cloud-Temple bereitgestellt. -Dieses Angebot richtet sich an Teams mit exzellenter Beherrschung von Kubernetes und Cloud Native-Tools, die ihre eigene Plattform auf minimalistischen und robusten Fundamenten aufbauen möchten. Es richtet sich an Open-Source-Enthusiasten, die eine schlichte, portable Lösung ohne Hersteller-Overlay suchen, auf einem minimalistischen und unveränderlichen OS, das für Automatisierung und Sicherheit ausgelegt ist. +Dieses Produkt ist für Teams konzipiert, die über hervorragende Kubernetes- und Cloud-Native-Tools-Kenntnisse verfügen und ihre eigene Plattform auf minimalistischen und robusten Grundlagen aufbauen möchten. Sie richtet sich an Open-Source-Enthusiasten, die eine aufgeräumte, portable Lösung ohne herstellerspezifische Aufschicht suchen, die auf einem minimalistischen und unveränderlichen Betriebssystem basiert, das für Automatisierung und Sicherheit konzipiert ist. -### Wesentliche Vorteile +### Hauptvorteile -- **Souveränität und Reversibilität**: Die Lösung stützt sich ausschließlich auf Open-Source-Standards (Kubernetes CNCF), um jede technologische Abhängigkeit zu vermeiden und die Portabilität Ihrer Anwendungen zu gewährleisten. -- **"Zero-Trust"-Sicherheit by design**: Die Architektur basiert auf Talos OS, einem unveränderlichen Betriebssystem ohne direkten Zugang (kein Shell, kein SSH), was die Angriffsfläche drastisch reduziert und eine solide Grundlage für eine "Zero-Trust"-Sicherheitsstrategie bildet. -- **Moderne Netzwerkfundamente**: Die Integration von Cilium für CNI und MetalLB für die Diensteexposition bietet eine leistungsstarke und standardisierte Netzwerkbasis, bereit für Ihre eigenen Sicherheits- und Filterkomponenten. +- **Souveränität und Reversibilität** : Die Lösung stützt sich ausschließlich auf Open-Source-Standards (Kubernetes CNCF), um technologische Abhängigkeiten zu vermeiden und die Portabilität Ihrer Anwendungen zu gewährleisten. +- **„Zero-Trust“-Sicherheit by design** : Die Architektur basiert auf Talos OS, einem unveränderlichen Betriebssystem ohne direkten Zugriff (weder Shell noch SSH), was die Angriffsfläche drastisch reduziert und eine solide Grundlage für eine „Zero-Trust“-Sicherheitsstrategie bildet. +- **Moderne Netzwerkinfrastruktur** : Die Integration von Cilium für das CNI und MetalLB für die Dienstexposition bietet eine leistungsstarke und standardisierte Netzwerkgrundlage, die bereit ist, Ihre eigenen Sicherheits- und Filterkomponenten aufzunehmen. ### Eine Basisplattform, bereit zur Erweiterung -Das "Managed Core"-Angebot enthält nativ einen minimalen und kohärenten Stack modernster Open-Source-Tools, um Ihnen die Grundlagen eines Kubernetes-Clusters bereitzustellen: +Das "Managed Core"-Angebot enthält nativ einen minimalen und konsistenten Stack modernster Open-Source-Tools, der Ihnen die Grundlagen für einen Kubernetes-Cluster bietet: -- **OS und Netzwerk**: Talos, Cilium, MetalLB +- **Betriebssystem und Netzwerk** : Talos, Cilium, MetalLB Auf dieser Grundlage können Sie frei Ihre eigenen Tools für Continuous Deployment, Observability, Backup und Kostenmanagement integrieren. --- -## Deployment-Architekturen +## Bereitstellungsarchitekturen -Wir bieten zwei unterschiedliche Architekturen an, um Ihren Anforderungen gerecht zu werden, sei es für Entwicklungsumgebungen oder kritische Produktionsumgebungen. +Wir bieten zwei verschiedene Architekturen an, um Ihren Anforderungen gerecht zu werden, sei es für Entwicklungs- oder kritische Produktionsumgebungen. -### "Dev/Test"-Architektur +### Architektur "Dev/Test" -Ideal für POC-Umgebungen – diese kompakte Architektur stellt alle Ressourcen innerhalb einer einzigen Verfügbarkeitszone (AZ) bereit. +Ideal für POC-Umgebungen, stellt diese kompakte Architektur alle Ressourcen innerhalb einer einzigen Verfügbarkeitszone (AZ) bereit. -- **Anwendungsfälle**: Entwicklung, Tests, Proof-of-Concept (POC). -- **Wesentliche Punkte**: - - 1 Control Plane-Knoten. +- **Anwendungsfall** : Entwicklung, Tests, Proof-of-Concept (POC). +- **Schlüsselaspekte** : + - 1 Control-Plane-Knoten. - 3 Worker-Knoten (oder mehr). - - Kein Hochverfügbarkeits-SLA. - - Keine Sicherheitsbeschränkungen. + - Kein SLA für Hochverfügbarkeit. + - Keine Sicherheitsbeschränkungen -Mono-AZ-Architektur +Architecture Mono-AZ ### Produktionsarchitektur (Multi-AZ) -Für Produktion und kritische Anwendungen konzipiert, verteilt diese Architektur Ressourcen auf drei Verfügbarkeitszonen (AZ), um hohe Verfügbarkeit und maximale Resilienz gemäß SecNumCloud-Anforderungen zu gewährleisten. +Für den Produktivbetrieb und kritische Anwendungen konzipiert, verteilt diese Architektur die Ressourcen auf drei Verfügbarkeitszonen (AZ), um eine hohe Verfügbarkeit und maximale Resilienz gemäß den SecNumCloud-Anforderungen zu gewährleisten. -- **Anwendungsfälle**: Produktionsanwendungen, kritische Dienste, Plattformen, die ein SLA benötigen. -- **Wesentliche Punkte**: - - **Hohe Verfügbarkeit**: 3 Control Plane-Knoten, verteilt auf 3 AZs. - - **Verteilte Worker**: Mindestens 3 Worker-Knoten, einer pro AZ. - - **Bare Metal-Knoten (Optional)**: Mögliche Integration von Worker-Knoten des Typs **"Bare Metal"** für spezifische Leistungsanforderungen, insbesondere **GPU-Unterstützung**. - - **SLA von 99,90%**. +- **Anwendungsfall** : Produktivanwendungen, kritische Dienste, Plattformen mit SLA-Anforderungen. +- **Schlüsselaspekte** : + - **Hohe Verfügbarkeit** : 3 Control-Plane-Knoten, verteilt auf 3 AZ. + - **Verteilte Worker** : Mindestens 3 Worker-Knoten, jeweils einer pro AZ. + - **Bare-Metal-Knoten (Optional)** : Möglichkeit zur Integration von Worker-Knoten vom Typ **"Bare Metal"** für spezifische Leistungsanforderungen, insbesondere die **GPU-Unterstützung**. + - **SLA von 99,90 %**, monatlich gemessen. -Multi-AZ-Architektur +Multi-AZ-Architektur --- ### Enthaltene technische Komponenten -Das "Managed Core"-Angebot enthält die folgenden Komponenten: +Das Angebot "Managed Core" umfasst die folgenden Komponenten: -- **Betriebssystem**: Talos OS -- **Speicher**: Rook-Ceph -- **CNI (Container Network Interface)**: Cilium -- **Load Balancer**: MetalLB +- **Betriebssystem** : Talos OS +- **Speicher** : Rook-Ceph +- **CNI (Container Network Interface)** : Cilium +- **Load Balancer** : MetalLB \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md index 2f68455f..928dcc45 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md @@ -1,5 +1,5 @@ --- -title: Managed Kubernetes Übersicht +title: Übersicht --- # Managed Kubernetes @@ -11,69 +11,69 @@ title: Managed Kubernetes Übersicht Konzepte erkunden →
-

Einstiegsleitfaden

-

Starten Sie schnell, indem Sie klaren und einfachen Anleitungen folgen.

+

Erste Schritte

+

Starten Sie schnell mit klaren und einfachen Anweisungen.

Quickstart starten →

Tutorials

-

Lernen Sie Schritt für Schritt, wie Sie unsere Dienste mit detaillierten Leitfäden konfigurieren und nutzen.

+

Lernen Sie Schritt für Schritt, unsere Dienste mit detaillierten Anleitungen zu konfigurieren und zu nutzen.

Tutorials entdecken →
-Managed Kubernetes by Cloud Temple ist eine Container-Orchestrierungslösung, die auf Open-Source-Produkten basiert und darauf ausgelegt ist, ein hohes Maß an Sicherheit, Resilienz und Automatisierung auf den SecNumCloud-Plattformen von Cloud Temple zu bieten. Jeder Cluster wird in einer Cloud Temple IaaS-Umgebung bereitgestellt, die vollständig dem Kunden gewidmet ist. +Managed Kubernetes von Cloud Temple ist eine auf Open-Source-Produkten basierende Container-Orchestrierungslösung, die entwickelt wurde, um auf den SecNumcloud-Plattformen von Cloud Temple ein hohes Maß an Sicherheit, Resilienz und Automatisierung zu bieten. Jeder Cluster wird in einer vollständig dem Kunden gewidmeten IaaS-Umgebung von Cloud-Temple bereitgestellt. -Dieses Angebot richtet sich an Teams mit guten Kubernetes-Kenntnissen und Open-Source-Enthusiasten, die eine native, portable Lösung ohne Hersteller-Overlay suchen, auf einem minimalistischen und unveränderlichen OS, das für Automatisierung und Sicherheit ausgelegt ist. +Dieses Produkt ist für Teams mit fundierten Kubernetes-Kenntnissen sowie Open-Source-Enthusiasten konzipiert, die eine native, portierbare Lösung ohne herstellerspezifische Aufsatzschicht auf einem minimalistischen und unveränderlichen Betriebssystem suchen, das für Automatisierung und Sicherheit entwickelt wurde. -### Wesentliche Vorteile +### Schlüsselvorteile -- **Souveränität und Reversibilität**: Die Lösung stützt sich auf Open-Source-Standards (Kubernetes CNCF), um jede technologische Abhängigkeit zu vermeiden und die Portabilität Ihrer Anwendungen zu gewährleisten. Das Backup-Tool Veeam Kasten, das im Angebot enthalten ist, wurde speziell entwickelt, um Migrationen von einer Cloud zur anderen zu erleichtern. -- **"Zero-Trust"-Sicherheit und Governance**: Die Architektur basiert auf Talos OS, einem unveränderlichen Betriebssystem ohne direkten Zugang (kein Shell, kein SSH), was die Angriffsfläche drastisch reduziert. Dieser Ansatz ist mit Governance-Tools wie Kyverno für das Richtlinienmanagement und Capsule für die fein granulierte Rechteverwaltung gekoppelt und bildet eine solide Grundlage für eine "Zero-Trust"-Sicherheitsstrategie. -- **Kostenkontrolle und Integration**: Die Lösung integriert nativ FinOps-Tools wie OpenCost für eine präzise Verbrauchsverfolgung. Das Preismodell ist transparent, basiert auf verbrauchten IaaS-Ressourcen, und die Verwendung anerkannter Open-Source-Komponenten (Cilium, Ceph, ArgoCD) erleichtert die Integration in Ihre bestehenden Ökosysteme. +- **Souveränität und Reversibilität** : Die Lösung stützt sich auf Open-Source-Standards (Kubernetes CNCF), um technologische Abhängigkeiten zu vermeiden und die Portabilität Ihrer Anwendungen zu gewährleisten. Das im Produkt enthaltene Backup-Tool Veeam Kasten wurde speziell entwickelt, um Migrationen von einer Cloud in eine andere zu erleichtern. +- **"Zero-Trust"-Sicherheit und Governance** : Die Architektur basiert auf Talos OS, einem unveränderlichen Betriebssystem ohne direkten Zugriff (weder Shell noch SSH), was die Angriffsfläche drastisch reduziert. Dieser Ansatz wird durch Governance-Tools wie Kyverno für die Richtlinienverwaltung und Capsule für die feingranulare Berechtigungsverwaltung ergänzt, was eine solide Grundlage für eine "Zero-Trust"-Sicherheitsstrategie bildet. +- **Kostenkontrolle und Integration** : Die Lösung integriert nativ FinOps-Tools wie OpenCost für eine präzise Verbrauchsanalyse. Das Kostenmodell ist transparent, basiert auf den verbrauchten IaaS-Ressourcen, und die Nutzung anerkannter Open-Source-Komponenten (Cilium, Ceph, ArgoCD) erleichtert die Integration in Ihre bestehenden Ökosysteme. ### Eine vollständige und einsatzbereite Plattform -Die Lösung enthält nativ einen vollständigen und kohärenten Stack modernster Open-Source-Tools, um alle Bedürfnisse des Anwendungslebenszyklus abzudecken: +Die Lösung enthält nativ einen vollständigen und konsistenten Stack aus hochmodernen Open-Source-Tools, um alle Anforderungen des Anwendungslebenszyklus abzudecken: -- **Netzwerk und Sicherheit**: Cilium, Hubble, MetalLB, Ingress Nginx, Kyverno, Capsule -- **Speicher**: Rook-Ceph -- **Continuous Deployment (GitOps)**: ArgoCD -- **Observability**: Prometheus, Grafana, Loki -- **Backup und Migration**: Veeam Kasten -- **Kostenmanagement (FinOps)**: OpenCost +- **Netzwerk und Sicherheit** : Cilium, Hubble, MetalLB, Ingress Nginx, Kyverno, Capsule +- **Speicher** : Rook-Ceph +- **Kontinuierliche Bereitstellung (GitOps)** : ArgoCD +- **Observability** : Prometheus, Grafana, Loki +- **Sicherung und Migration** : Veeam Kasten +- **Kostenmanagement (FinOps)** : OpenCost --- -## Deployment-Architekturen +## Bereitstellungsarchitekturen -Wir bieten zwei unterschiedliche Architekturen an, um Ihren Anforderungen gerecht zu werden, sei es für Entwicklungsumgebungen oder kritische Produktionsumgebungen. +Wir bieten zwei verschiedene Architekturen an, um Ihren Anforderungen gerecht zu werden, sei es für Entwicklungs- oder kritische Produktionsumgebungen. -### "Dev/Test"-Architektur +### Architektur "Dev/Test" -Ideal für POC-Umgebungen – diese kompakte Architektur stellt alle Ressourcen innerhalb einer einzigen Verfügbarkeitszone (AZ) bereit. +Ideal für POC-Umgebungen, stellt diese kompakte Architektur alle Ressourcen innerhalb einer einzigen Verfügbarkeitszone (AZ) bereit. -- **Anwendungsfälle**: Entwicklung, Tests, Proof-of-Concept (POC). -- **Wesentliche Punkte**: - - 1 Control Plane-Knoten. +- **Anwendungsfall** : Entwicklung, Tests, Proof-of-Concept (POC). +- **Wichtige Punkte** : + - 1 Control-Plane-Knoten. - 3 Worker-Knoten (oder mehr). - - Verteilter Speicher (Ceph) ist auf den Worker-Knoten co-lokalisiert. - - Kein Hochverfügbarkeits-SLA. - - Keine Sicherheitsbeschränkungen. + - Der verteilte Speicher (Ceph) ist auf den Worker-Knoten ko-lokalisiert. + - Kein SLA für hohe Verfügbarkeit. + - Keine Sicherheitsbeschränkungen -Mono-AZ-Architektur +Architecture Mono-AZ ### Produktionsarchitektur (Multi-AZ) -Für Produktion und kritische Anwendungen konzipiert, verteilt diese Architektur Ressourcen auf drei Verfügbarkeitszonen (AZ), um hohe Verfügbarkeit und maximale Resilienz gemäß SecNumCloud-Anforderungen zu gewährleisten. +Für den Produktiveinsatz und kritische Anwendungen konzipiert, verteilt diese Architektur die Ressourcen auf drei Verfügbarkeitszonen (AZ), um eine hohe Verfügbarkeit und maximale Resilienz gemäß den SecNumCloud-Anforderungen zu gewährleisten. -- **Anwendungsfälle**: Produktionsanwendungen, kritische Dienste, Plattformen, die ein SLA benötigen. -- **Wesentliche Punkte**: - - **Hohe Verfügbarkeit**: 3 Control Plane-Knoten, verteilt auf 3 AZs. - - **Dedizierter Speicher**: 3 dedizierte und verteilte Speicherknoten für Leistung und Resilienz. - - **Verteilte Worker**: Mindestens 3 Worker-Knoten, einer pro AZ. - - **Bare Metal-Knoten (Optional)**: Mögliche Integration von Worker-Knoten des Typs **"Bare Metal"** für spezifische Leistungsanforderungen, insbesondere **GPU-Unterstützung**. - - **SLA von 99,90%**. +- **Anwendungsfall** : Produktivanwendungen, kritische Dienste, Plattformen mit SLA-Anforderungen. +- **Hauptmerkmale** : + - **Hohe Verfügbarkeit** : 3 Control-Plane-Knoten, verteilt auf 3 AZ. + - **Dedizierter Speicher** : 3 dedizierte und verteilte Speicherknoten für Performance und Resilienz. + - **Verteilte Worker** : Mindestens 3 Worker-Knoten, jeweils einer pro AZ. + - **Bare-Metal-Knoten (Optionnel)** : Möglichkeit zur Integration von Worker-Knoten vom Typ **"Bare Metal"** für spezifische Leistungsanforderungen, insbesondere die **GPU-Unterstützung**. + - **SLA von 99,90 %**. Multi-AZ-Architektur @@ -83,8 +83,8 @@ Für Produktion und kritische Anwendungen konzipiert, verteilt diese Architektur Das Angebot umfasst im Detail die folgenden Komponenten: -- CNI Cilium, mit Observability-Schnittstelle (Hubble) -- Interne und externe Ingresses MetalLB und nginx +- CNI Cilium mit Observability-Schnittstelle (Hubble) +- Interne und externe Ingresses mit MetalLB und nginx - Verteilter Speicher Rook-Ceph - Cert-Manager - ArgoCD @@ -92,5 +92,5 @@ Das Angebot umfasst im Detail die folgenden Komponenten: - Container-Registry Harbor - Kostenmanagement mit OpenCost - Erweiterte Sicherheitsrichtlinien mit Kyverno und Capsule -- Veeam Kasten (Backup, umgebungsübergreifende Automatisierungen und Reversibilität) -- SSO-Authentifizierung mit einem externen OIDC Identity Provider (Microsoft Entra, FranceConnect, Okta, AWS IAM, Google, Salesforce, ...) +- Veeam Kasten (Sicherung, umgebungsübergreifende Automatisierungen und Wiederherstellbarkeit) +- SSO-Authentifizierung mit einem externen OIDC-Identity-Provider (Microsoft Entra, FranceConnect, Okta, AWS IAM, Google, Salesforce, ...) \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/quickstart.md b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/quickstart.md index 073331d1..3ec7639e 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/quickstart.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/quickstart.md @@ -1,82 +1,86 @@ --- -title: Einstiegsanleitung +title: Schnellstartanleitung --- -Willkommen bei der Einstiegsanleitung für **Managed Kubernetes** von Cloud Temple. +Willkommen zur Schnellstartanleitung für **Managed Kubernetes** Cloud Temple. -Ziel dieses Abschnitts ist es, Sie zu den notwendigen Ressourcen zu führen, um Ihren Cluster in Betrieb zu nehmen. +Ziel dieses Abschnitts ist es, Sie zu den erforderlichen Ressourcen zu leiten, damit Sie Ihren Cluster schnell in die Hand nehmen können. --- ## Bevor Sie beginnen -Für die Interaktion mit Ihrem Cluster sind mehrere Elemente unverzichtbar: +Um mit Ihrem Cluster zu interagieren, sind mehrere Elemente erforderlich: -1. **Die `kubeconfig`-Datei**: Diese Datei, die Ihnen bei der Dienstbereitstellung von den Cloud Temple-Teams übergeben wird, enthält alle Informationen für eine sichere Verbindung. -2. **Das `kubectl`-Tool**: Dies ist die Standard-Befehlszeilenschnittstelle zur Verwaltung eines Kubernetes-Clusters. -3. **Das `kubelogin`-Tool** (falls OIDC verwendet wird): Wenn Ihr Cluster für die Authentifizierung über einen OIDC-Identitätsanbieter (wie Entra ID/Azure AD) konfiguriert ist, müssen Sie das `kubelogin`-Tool installieren, um den Authentifizierungsfluss zu verwalten. Folgen Sie dem [kubelogin-Installationsleitfaden](https://github.com/int128/kubelogin). +1. **Die `kubeconfig`-Datei**: Diese Datei, die Ihnen von den Cloud Temple-Teams bei der Bereitstellung des Services bereitgestellt wird, enthält alle Informationen für eine sichere Verbindung. +2. **Das `kubectl`-Tool**: Dies ist die Standard-Befehlszeilenschnittstelle zur Steuerung eines Kubernetes-Clusters. +3. **L'outil `kubelogin`** (si OIDC est utilisé) : Wenn Ihr Cluster so konfiguriert ist, dass er sich über einen OIDC-Identitätsanbieter (wie Entra ID/Azure AD) authentifiziert, müssen Sie das `kubelogin`-Tool installieren, um den Authentifizierungsablauf zu verwalten. Folgen Sie dem [Installationsleitfaden für kubelogin](https://github.com/int128/kubelogin). -:::info[Empfohlene grafische Tools:] -Für ein visuelleres Erlebnis und eine vereinfachte Verwaltung Ihrer Ressourcen empfehlen wir die Verwendung von **Lens**. Es ist ein leistungsstarkes Tool für Kubernetes, mit dem Sie Ihren Cluster erkunden, Ihre Anwendungen verwalten und deren Status grafisch visualisieren können. -Einige unserer Tutorials werden Lens zur Veranschaulichung der Vorgehensweisen verwenden. Sie können es hier herunterladen: [https://k8slens.dev/](https://k8slens.dev/). +:::info[Empfohlene grafische Tools: +] +Für eine visuellere Darstellung und ein vereinfachtes Ressourcenmanagement empfehlen wir die Verwendung von **Lens**. Dies ist ein leistungsstarkes Tool für Kubernetes, mit dem Sie Ihren Cluster erkunden, Ihre Anwendungen verwalten und deren Status grafisch visualisieren können. +Einige unserer Tutorials verwenden Lens, um die Vorgehensweise zu veranschaulichen. Sie können es hier herunterladen: [https://k8slens.dev/](https://k8slens.dev/). ::: --- -## Zugriff auf Ihren Managed Kubernetes-Cluster +## Zugriff auf Ihren verwalteten Kubernetes-Cluster -Ihr Produktionscluster wird durch einen 5-Buchstaben-Code identifiziert (6 Buchstaben in Dev/Test). Dieser Code wird verwendet, um die URLs der verschiedenen Schnittstellen zu erstellen. In den Tutorials verwenden wir **"ctodev"**. +Ihr Produktionscluster wird durch einen Code aus 5 Buchstaben identifiziert (6 Buchstaben in Dev/Test). Dieser Code wird verwendet, um die URLs der verschiedenen Schnittstellen zu erstellen. In den Tutorials verwenden wir **"ctodev"**. -Die URLs lauten: +Die URLs sind: -- Kubernetes-API (in kubeconfig verwendet): - - **bezeichner**.mk.ms-cloud-temple.com:6443 (in unserem Beispiel also: [https://ctodev.mk.ms-cloud-temple.com:6443](https://ctodev.mk.ms-cloud-temple.com:6443) ) +- Kubernetes-API (wird in kubeconfig verwendet): + - **identifiant**.mk.ms-cloud-temple.com:6443 (also in unserem Beispiel: [https://ctodev.mk.ms-cloud-temple.com:6443](https://ctodev.mk.ms-cloud-temple.com:6443) ) - Öffentliche URLs: - - k10.external-secured.**bezeichner**.mk.ms-cloud-temple.com - - grafana.external-secured.**bezeichner**.mk.ms-cloud-temple.com - - harbor.external-secured.**bezeichner**.mk.ms-cloud-temple.com - - opencost.external-secured.**bezeichner**.mk.ms-cloud-temple.com - - opencost-mcp.external-secured.**bezeichner**.mk.ms-cloud-temple.com - -:::info[Gesicherte URLs] -Die obigen URLs sind nur von bekannten öffentlichen IPs aus zugänglich, die in der Firewall der Lösung konfiguriert sind. Wenn Sie eine öffentliche IP hinzufügen möchten, müssen Sie eine Support-Anfrage stellen. + - k10.external-secured.**identifiant**.mk.ms-cloud-temple.com + - grafana.external-secured.**identifiant**.mk.ms-cloud-temple.com + - harbor.external-secured.**identifiant**.mk.ms-cloud-temple.com + - opencost.external-secured.**identifiant**.mk.ms-cloud-temple.com + - opencost-mcp.external-secured.**identifiant**.mk.ms-cloud-temple.com + +:::info[Sichere URLs +] +Die oben genannten URLs sind nur von bekannten öffentlichen IPs aus zugänglich, die in der Firewall der Lösung konfiguriert sind. Wenn Sie eine öffentliche IP hinzufügen möchten, müssen Sie eine Supportanfrage stellen. ::: - Interne URLs: - - ceph.internal.**bezeichner**.mk.ms-cloud-temple.com - - argocd.internal.**bezeichner**.mk.ms-cloud-temple.com - - hubble.internal.**bezeichner**.mk.ms-cloud-temple.com + - ceph.internal.**identifiant**.mk.ms-cloud-temple.com + - argocd.internal.**identifiant**.mk.ms-cloud-temple.com + - hubble.internal.**identifiant**.mk.ms-cloud-temple.com -:::info[Interne URLs] -Die obigen URLs sind nicht über das Internet zugänglich. Sie sind nur im internen Managed Kubernetes-Netzwerk erreichbar. +:::info[Interne URLs +] +Die oben genannten URLs sind nicht im Internet exponiert. Sie sind nur im internen Netzwerk des verwalteten Kubernetes-Clusters zugänglich. ::: --- ## Ihre Berechtigungen -:::warning[Dev/Test] -Für **"Dev/Test"** Managed Kubernetes-Cluster verfügt das Ihnen bereitgestellte Service-Konto über alle Berechtigungen auf dem gesamten Cluster (ClusterAdmin) +:::warning[Dev/Test +] +Für verwaltete Kubernetes-Cluster im Bereich **"Dev/Test"** verfügt das Ihnen bereitgestellte Dienstkonto über alle Berechtigungen im gesamten Cluster (ClusterAdmin) ::: -Auf **"Produktions"**-Clustern sind Ihre Berechtigungen eingeschränkt. Sie verfügen über ein **"Erweitertes Lesezugriff"**-Recht auf Cluster-Ressourcen. Dieses Recht gewährt einen Nur-Lese-Zugriff auf Schlüsselressourcen, sowohl auf Cluster-Ebene als auch für Diagnosezwecke: +In **"Production"**-Clustern sind Ihre Berechtigungen eingeschränkt. Sie verfügen über ein Recht als **"Erweiterter Betrachter"** auf die Cluster-Ressourcen. Dieses Recht gewährt einen schreibgeschützten Zugriff auf Schlüsselressourcen, sowohl auf Cluster-Ebene als auch für Diagnosezwecke: -- Namespaces: ermöglichen Tenants das Auflisten von Namespaces für Tools und Dashboards. -- Pods, Deployments, Replicasets...: ermöglichen Tenants das Auflisten der im Cluster bereitgestellten Ressourcen. -- Nodes: bieten Einblick in Kapazität, Taints und Labels der Knoten, um das Verhalten des Schedulers zu verstehen. -- StorageClasses, PVs, PVCs, VolumeAttachments und CSIDrivers: ermöglichen Tenants die Identifizierung verfügbarer Storage-Klassen und die Fehlersuche bei PVC-zu-PV-Bindungsproblemen oder CSI-Treiberfehlern. -- IngressClasses: informieren Benutzer über verfügbare Ingress-Controller für das Anwendungsrouting. -- NetworkPolicies, ResourceQuotas, LimitRanges und Events: unverzichtbar für die Diagnose von Netzwerkeinschränkungen, Scheduling-Fehlern oder Ressourcenquoten-Verletzungen. +- Namespaces: Ermöglichen es Tenants, Namespaces für Tools und Dashboards aufzulisten. +- Pods, Deployments, ReplicaSets...: Ermöglichen es Tenants, auf dem Cluster bereitgestellte Ressourcen aufzulisten. +- Nodes: Bieten Einblicke in die Kapazität, Taints und Labels der Nodes, um das Verhalten des Schedulers zu verstehen. +- StorageClasses, PVs, PVCs, VolumeAttachments und CSIDrivers: Ermöglichen es Tenants, verfügbare Storage-Klassen zu identifizieren und Probleme bei der Bindung zwischen PVC und PV oder Treiberfehler (CSI) zu beheben. +- IngressClasses: Informieren Benutzer über verfügbare Ingress-Controller für das Application-Routing. +- NetworkPolicies, ResourceQuotas, LimitRanges und Events: Essentiell zur Diagnose von Netzwerkeinschränkungen, Scheduling-Fehlern oder Verletzungen von Ressourcen-Quotas. -Das Ihnen übergebene Service-Konto wurde auch zum **Eigentümer eines ersten Capsule-*Tenants*** ernannt. +Das Ihnen anvertraute Dienstkonto wurde zudem zum **Eigentümer eines ersten *Capsule*-Tenants***. Sie können Namespaces erstellen, die Ihrem Capsule-Tenant zugeordnet werden. -Externe Konten (OIDC) sind Mitglieder desselben Capsule-Tenants, was es ihnen ermöglicht, innerhalb der dem Tenant zugeordneten **Namespaces** frei zu interagieren. (Siehe Tutorial „Berechtigungen mit Capsule verwalten") +Externe Konten (OIDC) sind Mitglieder dieses gleichen Capsule-Tenants, was ihnen ermöglicht, sich frei innerhalb der **Namespaces** zu bewegen, die dem Tenant zugeordnet sind. (Siehe Tutorial „Berechtigungen mit Capsule verwalten“) -Einige Aktionen sind nicht erlaubt: +Bestimmte Aktionen sind nicht gestattet: -- Capsule-Tenants auflisten / erstellen -- CRDs erstellen: Wenn Sie eine Anwendung mit CRDs bereitstellen müssen (z. B. ein Operator-Helm-Chart), müssen Sie den Support kontaktieren, damit diese CRDs importiert werden (durch Extraktion der YAMLs aus dem Helm-Chart). Anschließend können Sie Ihr Helm-Chart mit der Option --skip-crds bereitstellen. Siehe: [Helm 3-Dokumentation](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/) +- Auflisten / Erstellen von Capsule-Tenants +- Erstellen von CRDs: Wenn Sie eine Anwendung mit CRDs bereitstellen müssen (z. B. ein Helm-Chart eines Operators), müssen Sie den Support kontaktieren, damit diese CRDs importiert werden (durch Extrahieren der YAML-Dateien aus dem Helm-Chart). Anschließend können Sie Ihr Helm-Chart mit der Option `--skip-crds` bereitstellen. Siehe: [Dokumentation Helm 3](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/) --- @@ -84,11 +88,11 @@ Einige Aktionen sind nicht erlaubt:
-

Tutorial: Ihre erste Anwendung bereitstellen

+

Tutorial: Bereitstellen Ihrer ersten Anwendung

- Folgen Sie einer detaillierten Anleitung zum Verbinden, Bereitstellen einer „Hello World"-Anwendung und deren Veröffentlichung im Internet. + Folgen Sie einer detaillierten Anleitung, um sich zu verbinden, eine „Hello World“-Anwendung bereitzustellen und im Internet freizugeben.

@@ -103,11 +107,11 @@ Einige Aktionen sind nicht erlaubt:

- Entdecken Sie den Adressierungsplan, die Ingress Controller und wie Sie Ihre Dienste sicher bereitstellen. + Erfahren Sie mehr über den Adressplan, Ingress-Controller und wie Sie Ihre Dienste sicher freigeben können.

@@ -118,7 +122,7 @@ Einige Aktionen sind nicht erlaubt:

- Erfahren Sie, wie Sie Capsule verwenden, um Tenants zu erstellen und Berechtigungen an Ihre Teams zu delegieren. + Lernen Sie, wie Sie Capsule nutzen, um Tenants zu erstellen und Berechtigungen an Ihre Teams zu delegieren.

@@ -126,4 +130,4 @@ Einige Aktionen sind nicht erlaubt:
- + \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/firstdeploy.md b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/firstdeploy.md index 4ca19fd9..f5c63ae0 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/firstdeploy.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/firstdeploy.md @@ -1,21 +1,21 @@ --- -title: Tutorial - Ihre erste Anwendung bereitstellen +title: Tutorial - Bereitstellen Ihrer ersten Anwendung --- ## Ziele -Dieses Tutorial führt Sie Schritt für Schritt durch Ihre erste Bereitstellung auf einem **Managed Kubernetes**-Cluster. Am Ende dieses Leitfadens werden Sie: +Dieses Tutorial führt Sie Schritt für Schritt durch die Bereitstellung Ihrer ersten Anwendung auf einem **Managed Kubernetes**-Cluster. Am Ende dieses Leitfadens haben Sie: -- Eine einfache Webanwendung bereitgestellt haben. -- Diese Anwendung innerhalb des Clusters über einen Service exponiert haben. -- Die Anwendung über einen Ingress aus dem Internet erreichbar gemacht haben. +- Eine einfache Webanwendung bereitgestellt. +- Diese Anwendung innerhalb des Clusters über einen Service freigegeben. +- Die Anwendung über einen Ingress von Internet aus zugänglich gemacht. ## Voraussetzungen -- Sie haben Ihren Clusterzugang wie im [Schnellstartleitfaden](../quickstart.md) beschrieben konfiguriert. -- Sie verfügen über einen Namespace, auf dem Sie Bereitstellungsrechte haben. In diesem Tutorial verwenden wir einen Namespace namens `hello-world`. +- Sie haben Ihren Zugriff auf den Cluster wie in der [Schnellstartanleitung](../quickstart.md) beschrieben konfiguriert. +- Sie verfügen über ein Namespace, in dem Sie über Bereitstellungsrechte verfügen. In diesem Tutorial verwenden wir ein Namespace mit dem Namen `hello-world`. -## Schritt 1: Einen Namespace erstellen +## Schritt 1: Namespace erstellen Falls noch nicht geschehen, erstellen Sie einen Namespace, um Ihre Anwendung zu isolieren. @@ -23,11 +23,11 @@ Falls noch nicht geschehen, erstellen Sie einen Namespace, um Ihre Anwendung zu kubectl create namespace hello-world ``` -## Schritt 2: Eine "Hello World"-Anwendung bereitstellen +## Schritt 2: Bereitstellen einer "Hello World"-Anwendung -Wir werden eine Demoanwendung bereitstellen, die eine einfache Webseite anzeigt. +Wir stellen eine Demo-Anwendung bereit, die eine einfache Webseite anzeigt. -1. Erstellen Sie eine Datei namens `deployment.yaml` mit folgendem Inhalt: +1. Erstellen Sie eine Datei namens `deployment.yaml` mit dem folgenden Inhalt: ```yaml apiVersion: apps/v1 @@ -60,11 +60,11 @@ Wir werden eine Demoanwendung bereitstellen, die eine einfache Webseite anzeigt. kubectl apply -f deployment.yaml ``` -3. Überprüfen Sie, dass das Deployment erstellt wurde und die Pods laufen: +3. Überprüfen Sie, ob das Deployment erstellt wurde und die Pods ausgeführt werden: ```bash kubectl get deployment -n hello-world - # Sie sollten Ihr Deployment mit 2/2 bereiten Replikas sehen. + # Sie sollten Ihr Deployment mit 2/2 einsatzbereiten Replikaten sehen. NAME READY UP-TO-DATE AVAILABLE AGE hello-world-deployment 2/2 2 2 102s @@ -77,9 +77,9 @@ Wir werden eine Demoanwendung bereitstellen, die eine einfache Webseite anzeigt. ## Schritt 3: Die Anwendung im Cluster exponieren (Service) -Um den verschiedenen Komponenten des Clusters die Kommunikation mit unserer Anwendung zu ermöglichen, müssen wir einen **Service** erstellen. +Um die verschiedenen Komponenten des Clusters mit unserer Anwendung kommunizieren zu lassen, müssen wir einen **Service** erstellen. -1. Erstellen Sie eine Datei namens `service.yaml`: +1. Erstellen Sie eine Datei mit dem Namen `service.yaml` : ```yaml apiVersion: v1 @@ -97,19 +97,19 @@ Um den verschiedenen Komponenten des Clusters die Kommunikation mit unserer Anwe type: ClusterIP ``` -2. Wenden Sie das Manifest an: +2. Wenden Sie das Manifest an : ```bash kubectl apply -f service.yaml ``` - Ihre Anwendung ist nun über den Namen `hello-world-service.hello-world` von jedem anderen Pod im Cluster aus erreichbar. + Ihre Anwendung ist jetzt über den Namen `hello-world-service.hello-world` von jedem anderen Pod im Cluster aus erreichbar. -## Schritt 4: Die Anwendung aus dem Internet erreichbar machen (Ingress) +## Schritt 4: Die Anwendung über das Internet zugänglich machen (Ingress) -Um unseren Service im Internet zu exponieren, verwenden wir eine **Ingress**-Ressource. Das Managed Kubernetes-Angebot stellt mehrere vorkonfigurierte `ingressClassName`-Werte bereit. Wir verwenden `nginx-external` für die öffentliche Exposition. +Um unseren Dienst im Internet zugänglich zu machen, verwenden wir eine **Ingress**-Ressource. Das Managed Kubernetes-Angebot stellt mehrere vorkonfigurierte `ingressClassName`-Werte bereit. Wir verwenden `nginx-external` für den öffentlichen Zugriff. -1. Erstellen Sie eine `ingress.yaml`-Datei. **Denken Sie daran, `ihre-cluster-id`** durch den Bezeichner Ihres Clusters zu ersetzen (z.B. `ctodev`). +1. Erstellen Sie eine Datei `ingress.yaml`. **Ersetzen Sie `votre-cluster-id`** durch die ID Ihres Clusters (z. B. `ctodev`). ```yaml apiVersion: networking.k8s.io/v1 @@ -120,7 +120,7 @@ Um unseren Service im Internet zu exponieren, verwenden wir eine **Ingress**-Res spec: ingressClassName: nginx-external rules: - - host: "hello-world.external.ihre-cluster-id.mk.ms-cloud-temple.com" # ändern Sie mich + - host: "hello-world.external.votre-cluster-id.mk.ms-cloud-temple.com" # changez moi http: paths: - path: / @@ -138,13 +138,13 @@ Um unseren Service im Internet zu exponieren, verwenden wir eine **Ingress**-Res kubectl apply -f ingress.yaml ``` -## Schritt 5: Zugang überprüfen +## Schritt 5: Zugriff überprüfen -Ein Wildcard-DNS-Eintrag leitet bereits alle URLs, die auf ".external.ihre-cluster-id.mk.ms-cloud-temple.com" enden, an die IP des "external"-Ingress weiter. +Ein DNS-Eintrag "*" leitet bereits alle URLs, die auf ".external.votre-cluster-id.mk.ms-cloud-temple.com" enden, auf die IP-Adresse des "external"-Ingresses weiter. Auf diesem DNS-Suffix veröffentlichte Anwendungen sind daher direkt erreichbar. ```bash -curl http://hello-world.external.ihre-cluster-id.mk.ms-cloud-temple.com +curl http://hello-world.external.votre-cluster-id.mk.ms-cloud-temple.com ``` Sie sollten eine Antwort vom Demo-NGINX-Server erhalten. @@ -168,20 +168,21 @@ RawContent : HTTP/1.1 200 OK Server: ng... ``` -:::warning[Weiterführend: Sicherheit in der Produktion] -Dieses Tutorial hat Ihnen die Grundlagen der Bereitstellung gezeigt. Für eine Produktionsumgebung ist es entscheidend, zusätzliche Sicherheitsmaßnahmen anzuwenden: +:::warning[Vertiefung: Sicherheit in der Produktion +] +Dieses Tutorial hat Ihnen die Grundlagen des Deployments gezeigt. Für eine Produktionsumgebung ist es entscheidend, zusätzliche Sicherheitsmaßnahmen anzuwenden: -- **Verwenden Sie sichere Images**: Bevorzugen Sie Images aus Ihrer sicheren Unternehmens-Registry wie **Harbor** anstelle von öffentlichen Images. -- **Kontrollieren Sie Netzwerkflüsse**: Implementieren Sie `NetworkPolicies`, um die Kommunikation auf die notwendigen Flüsse zwischen Ihren Anwendungen zu beschränken. -- **Wenden Sie Governance-Richtlinien an**: Verwenden Sie Tools wie **Kyverno**, um Sicherheitsregeln durchzusetzen (z.B. "root"-Container verbieten, Ressourcen `requests` und `limits` erfordern, usw.). +- **Verwenden Sie sichere Images**: Bevorzugen Sie Images aus Ihrer gesicherten Unternehmens-Registry wie **Harbor** anstelle von öffentlichen Images. +- **Steuern Sie den Netzwerkverkehr**: Richten Sie `NetworkPolicies` ein, um die Kommunikation auf die für Ihre Anwendungen erforderlichen Flüsse zu beschränken. +- **Wenden Sie Governance-Richtlinien an**: Nutzen Sie Tools wie **Kyverno**, um Sicherheitsregeln durchzusetzen (z. B. das Verbot von "root"-Containern, die Anforderung von Ressourcenanfragen (`requests`) und -grenzen (`limits`) usw.). ::: ## Bereinigung -Um alle während dieses Tutorials erstellten Ressourcen zu löschen, können Sie einfach den Namespace löschen: +Um alle Ressourcen zu löschen, die Sie während dieses Tutorials erstellt haben, können Sie einfach den Namespace löschen: ```bash kubectl delete namespace hello-world ``` -Herzlichen Glückwunsch, Sie haben Ihre erste Anwendung auf Managed Kubernetes bereitgestellt und exponiert! +Herzlichen Glückwunsch, Sie haben Ihre erste Anwendung auf Managed Kubernetes bereitgestellt und freigegeben! \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/argocdguestbook.png b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/argocdguestbook.png deleted file mode 100644 index 1ebb7ab01b50dfc30c9cd5a7341ad5b822640771..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150815 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 IYWeoR03N|)<^TWy diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/cillium.png b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/cillium.png deleted file mode 100644 index ae41ac76111528c40edad8308ffccc9a011bf1b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108152 zcmY(r2V7H0*FTQSDr*7URaE*~kS3t?7ElrC9TGtxBE5zdN+6)Cf}(;VMY{BwMCk-b zR79i(NI^=1h?EdWXdyrd`GIm9e7`dBJ53W@*#&LsJx5ceQ#LZ;N$y{c6`s{Fz@Xy!T+HiNR=0_LbAW(oya>@mb#vhU}X<4$bE0+nBY(zH6Ne8VN9rpXP|fF z-}k+J{X+nu+N_2Fza*Fv%}eRpH7^e(4==TAN?vMeURoO0v{iks-M{eP<|F-m{O*Iw$>&U2 z9y2w2%c8~3=d>;4$1MyM^jgj*%;$Ta77@w$?cYcJ@8NG#(fvBn*X`@MAz|7g=+T9Sc7Zf`>D;}=Q2TccZB|z?mFlGIr@ny zpuNlGY}7DpMX-n5Il$@vHu!(K#mtOGhj(4|QdA2r{CV9I)sAPTboTS(qW>=+_>AOh zH&t)76J7Z1sR_Kkt?} zv-Y}=k`;dRCA&$F_B0=9E`G$;WIQ-&qUi-`SZWZuGn~sM{f|@+cD!SUmPavVhj54hE%#O~U+x>re$EQ;^?9iKRcpARh1sOZ|3BQ9$^leo1*Hgd za=>)6?BJVMY#&{gEBnc>1W~j)du8*XjHA&EDU+ zx=H?luEG^{%e6HnV!d%45Ymr-UIeLo(>dhepykiZB`PS-a1Ly0mHDlhx4X=h%0fVU zzfW!Z`Gu}i;F0}~M_4^|R=_#Qax+h9$Cx{Bn-t^(C(l?_8+tCkUhoIr*Cv zHwRBvH?K_aW=`M4>FbhCckWaH+F5efK2+u_8?|6s9i#G!{nG?nGy&czDJhM9Blnq$ zBUVZ-ja7JAKHhM9;Ltr6E-x!FFBkRe)giHKRjA8} z+lF(}2KN!jUj=8SK)19%wOxY7C%hKQZe5_)_6c%knThaIk+^JHCbad7?rX5jq_lYT z?LU8CIOx)nEI2geoN6<}ip4(PqNkl*=aAo?9H<2c-~dKVppn_V-GzkAOIC^Tt$lrc zjXrKEyO%DzA&ue6*gLO*od^u#MX}!b^q+1%x6sHA)^pK zt+&%2@<_S*b%?L|V`ekwHG{uh8J4ad$#4X)MZ ztQ3k9%RKl49V8w#=xGo=7or?vp0XY7P_0LHH%VfSRc8S!&-xFFH? zj-TI?aEXGyk}VQ{5RP|f- zd4=SA`WtoZ)W7D_T9!f`2qx(aDhdwLwXU>7hW_mZ--9>5QjXtVB+-5lKmqyI9g;nY17UROSL|px7Q@Z`!@|y5Qvm1kOE^`D%-P-$QFbS- ze^BWxccN)IegDsLr44rto&VbnK4bdi`wDL~V3Dqs7md4f)#n^KSEti9smnXz+W91+ ztwoD)2*Tuclx@sYD`h-kp*N>bC44c<#vyWrppm=UrI~p$_rQ2+yT#T+rfpXq{x0-Y zam(6};xh=Y8_4G;{Z#Otml&?wd5-8l5SQPZfJL-fJj8ic^2#gy%QvrE_rqiIO80~dCa_lWT1Q97Zg~|?UR$%|}@h9maLc~YwS7Z*FTk8mKGO$31 zB?nFj!kJ72zk(ZbiD-Ym`Ba4UA3O!gPLud8HpjnSgN1dA>@L*X!3=i{5JUOp_P(#1 z{I91ritPSq%8pzpJr%i8syc@iu4p5# zRCY(0rhO@$#bSCplEc}Jo+0-C& z=i^rfRnl{^OK{ULXV!l3KOwQ3qMTU{xN+m&hlMu4(eMP)^HbdF#63u7{c&qbqpN1y zqfLc^s#hJCA%@&mhP|6Jr{zxC=ANO|xTlgpX#AWX>2YNw4W4k;=1yT~w-GFHY9~PC z$4UtA88g3VjsJe+#sw<0kGs3zxAi3q7HAxM-S7u;EjQf8khd4gz+AThtiA^3KX_o^xz&%J z-A|cx=M3S|oCF4&B|Jf^n_*O^etX+#+YfU`M7tNfGZb!?<}L&gd(aU-g(u>ED-__X zI_?f*oGK5Rs_1pV4%atT^9*Hx{{x4au}11HjBVJYl$c{K@g%&pFC)S0 z%{)Ecc$xuoGfp)kIVmVuleh-^W>~3!Vj2YNoaS~8HOe#$SnpWrQ;akXH&u2J)MJiW zmEy*VP*~eU%>D^x@X2CZvq_)ClISeoDl_cy&5zQ_{;%Lg6$z`4nkB9{&b=i#uQV&@ zY~~s4!%Ca0O6hz3WVCP0DUD+-n!3-Lkt69GO(<;y_m3|+rg%4DMaK` zWW!S{A9V|nwc!OAv%#&GRjQDUgeLfwY_~z@yV1FaCvzxe{wGz3-B7 z^K#uo{<_Iy@5&szE2_VTzzIqQK)d2ChnUpHTY*6O=)>ER>UD0dCDs8Ug*77LsZ~`( zQ8efCz8C=)kuN#9IZ3)NvMaf;>3z46{AcA1N37}-9pMsQbxRW03C!M-E=xE|sk$qm z=`g;lG2!TViH46rUp-;8B_N%!>CgCwjSj!ql5!q>Nh5e_IC^rLw_!I=N9r`ZbXCq) zZKx;Kds_rHnENPgcSp0=H%v^^3*$KaaPL*un*ZK|2Mw>29xa1Ys z`%|d_M1@Z-64#5Hub5{YIpNTfBr?4?ip?n#NJt@NnkjjoULO7oK1T3#{0C^YS84Fw zV`+73Zg+Q5y-A7)I+|3;37lT4g(MO{ae3`y8(G}QTU$B|+Kx)!BwJ!DNKez*(|x<- z=dS36#{4rd(aTXA$JPW-V3Ack7?{oKG|KGY^rBU)*xSQ1r9w<4DcX~&#?;V3Cl0}^)cq7XB`9b z3b`6GuV$xIi6IvGkfZM zlr&b;BO={d7hN=>E5!^ePUCk(%8)D#@?KCY;N0xn%;E z+ra|;{S#GABx_OrDR$@l%7@&1lB0=1oRLaA#ug0Et00|a*>%h$SRNSXPrcIt^DTx; zwSd7$WBdMzG}kvgo140G-C^Mh0i>880ACgF#FW1oqApPwo6ah#S0MN8EVenO!=5id(*57(HE?sK;euccY42+?EqM#mq-0g)Koas%GcvZZ=Q1Px|~4 zn$uM)XhUZ)!vi{nbB`4&M%K)DRMsHa{he#8Slo+wK-sS#8Q1)(-|x=tuEU`aS%mY$ ziv0~ExVmpKW&-b+E$kC9S@X-?UkcPAlc1k0S>EEF3re^?1>@?}3WB9wbrrBzQYMeo-(QhfWG8f?j(X~iBU zGCQ3~vzZkTl9;*Jh}}#5v}>~OeRbkSeRmX7mrv&^p; z```r68p<7DMcJQ{1UZ_?OZYlJD`Ise%>_8&un_q&YTD%MO#t&3D&Tui!Por_i^2Sc zVNj9Af)fY&RZ8c06s?DmVDGc>TI|)mH%bx3h3mmMIQFQf(QT1Q-N`s`IuOflER3Iq z>#OEMvvblBkB{~IejT1w__}y|yLBSbpy)S4PP2<~x07IV%;tgH{j(ui;Y&yhkSM>C zEL3Y&dPH`wZO6|FEhHk1l|G~X@)#aqG%2Tl=?B%EXNU=Qh76AF_!GTfss$v4q6pq&ntE$g_duBc_St&2>;kJS4Pa6$+hZ`;EIyC6Jx8&Rw6lA=V_Jc+Er^KjVhyy z#*eqTsJ!Bgq85KpjAFrLOOx2+WYbi*OPhif)dQj4=HrMv`D8Ci$*YMy9$jN+ZzOrA(CG9 zzU$u#G~}QPi`tCBo=Fn)6)c}v7?Msw5=tHKLYObo9KU=r&fP4+HI6P9(_cpU(+O!B zI}Hrx_*9X4w8b-66r}v}pT+bD`R+jGO3UQw5$^qhah= zFY1ZxVm<~zyn5l5!epgW;Fi2nU1m~bK+WRSyfX4`?2wpuqhy6eoJ`for@>thcxuUn zprieyoNWkAHw33aTB)iH2Z@Oa$7=K=|R2`jQe|y_Qi5rwe$-M?v11>vkq)HO% zZ?xV#VHPXD8?bxAYJXV|zNAAj5tFU*Z18(BE-0^J431xY=DxEW$ANrO@Xl49qYq{` zcxwqVMqNidG$l<75nSsXd&Yok6)M36@nTVPX`+Q=%pqVmc*(;I03rp*j9QYx~+wC(GVzQ4WG{7*51#PiqoI0a|DM?mR2m+ zwMvD)2*J)QJ&=8Lb2*9}PxdC=C&&S_(+b|P+2_n#R}(r7cYFlZFCq3!JxQ0Aa>k}Q zr5IY6;kV8SMs1asETXN41t?pYK_h{+?0~-7Q_N4l1R|}nd^wLXVq)!1ion>!ii}dH z!19r78L94M?|R^pi&gAkL-4F`r@P0r!C2p+Sq<;?TkzE{rYi-yW(|1#CdEo;sj+NW zILYn=qu?6Y(_nzK*mHTY@J7;!Ii4q^;zdz)XV?^02^TJwdaGFC6&l)(Y^IIW6Xhua zHJeWIqleGRo6(DldSa6ABh~9L@-mwv@4q8l+UobT5$+cStx_^yq@;0OJU_S>Wje5X zPJY`}*-ITCpU@*FVj$6wb#pds+Qen2oxXY6MZ?MlX+}^(p-p^Ram}`B5eh=d1^ZpU zQH5C7V&CC_o%`1H>_mPX`jkE`VYL!d__wk#1aKADa#+_|nbGX9NjlyuwjPb6%_-+$ zTwa0prx3XnvRFt3wnO#P25hNzj=OuOR-aahgE_xZ!x6rK^jYvcD~Nu>b^k(l2Wo>m z$t$9f!d#wwrJ>g7`Y^f4x`R}NKPlNc=2cE&Pyo>St2 zOAOxban+}MHuhqEcv}r=JDl3vnzO>fU$3iQEKQ@py*mtA5qUuCIF}aGGNJ`6g%S>- zAv5s?Bn7oqj8k_zjuAtT_=XmBp|`wDVUl_>P&pChhFEfnHgJo~>4T#y z%B{NgwcQ=Qy1&!h|KvYv1!H`89pFi;i35wG7LY;JH~8BXJcCn4=VIMKGJ(#h2&n%* z=ks2dv`9zdHr&>rSDSv?GHMM-w0R<0t=AS>y6ofiOAdo#2^`h9!+iqWlCF&g7gPy< z%|~pefr-m-dfQhuA8g5(+R*TJHUQN*xeTMV9iCW->~&0?*WY+DAl?HjT-bMEuQea* zoH`)YlX`DZQMtJd$_Yo89f}4Ze3b)`nrA7MEcZ_5M@CbqH!pT_%whid75ebviSJsA zS1n*zIAFp>g7-X>AJ^$aEiS;r!#gp3fwp(21gWf`k&~wtexj*a~uXK zE+x$?x$<>aOvD=`6rdS?vs32uO!w;LzTU4c6nOj=Ldv ztTe{bS3_;iac3u^OHoUaC|X&}5mV6p`95opAuu?-GVLxh0qV^}$P{5p7Yey8g+;s1 zRfVz%KPB#ipp28q)lRHm9}64s39_LvSDHDI4$&E!v~OI#UbZV3RJmAXTkRPKP5T2+ zIt=z3N;h`tSdHl1_pA^)4UA4pZuIlWop^!1o#s037ADiq9O*bcCz4@mEWhj3rw?z} zviEg|zx=n8sNVBRyT8;1DKOi^<##uU0)~G36kEae_{PFE&$nVLmJU8))eyty4p>r| zXm6iCz@8iP>oWPxxf%k*$8W#zk#0Rxpi?8Uc73v-v`4zl!N#3n{?hA>^Xv^o9cenG zFRn~F83K|WFNq!1tL~jh&#hBJflF3YFcroL%m$yhCEuwMk~uzu=WFhGN03(>-axxM z;xzhE9E?1-G6KA8iy0)05jVQ+V82Xk9swLQmVWA>>Fw*gv`aRA?qQQ@!Lc7cH$U_w z7P|$K!!{O=C6*?6ET-m})Ec#uL?(`)^x-@C;Ncx$xRSx0JzmtJ<*vrB(T#XO@0%l$ zcDHX=sQeE6xr45|sTEO+M04o|g{Pc8p!d?1`|iA{i&O)eaqc&20eZ++;00Lxe;L=kYO_5HimjAY;?v=rvU8>o9 zVaaW(eO=d5c(+WmMZc`Sqw@o32%oKMkQg#_!GjSUH6PI&Np?|c3ILmZ_v?ww5xiSf3ea^%^LOLJeu z^ipY@`-b@Lbab0De_%Xvsf1@o8;l>B6jc6>du`FWciHXK-D__xTYp@3%le@#{)*sq z8<@&&dyxjZX`Q4xxNa!Wa*MoCBfHuxC2Mn%=dWP&?gh_@4jIhobLRdzhl|K59iI*v z`EfVIF(){Qk*{xy%e%bs=*y_wAH6lro_)}c zBA)D$ya&uE8K*RB;%Er)i!JYE)b}d@XA6y+iI|QjmA=pt<#v5w(v0(Ty$a}{KArRW z`itA(EV;bFSLwR}Pwz**gtVn4`C(Pbi4sjbRvTn?(8kolgLWj**5(zsjlzB#u3vgo zV}uwT!_uH=ZXGYg+`-r>2qjmtn$Usod=0j@HzJ{oM=lr`)>6&5At997 zH#y{_$XGK++k(W!8#TK!+Lq!5)o}zFGYVz>8JeAir0;xy|7FuAT9MvKEqEWAY1QWRB2N?X9iaj3;| zp+2H8-p6l-@|#H8XN?~<7EmX~}}wn^Uk;G(!5q`R@C80l{>+(cEi)SA9#2^Y%@ z=&g~gZ?UmWUcFGhqQna-_ykX$LU_P)`=kE8o8v7MJn;csKIl?w^62Ul_P(T$omYG! zIfm1{G@(7Qp}j>NYZ?!4qSq<^=^@e;2WCItn*e$Ciy^*Uv3-qqoGCnw7*qg;5&4hA zJg((tW-r!!Ip>Yoc9KrWEcvH-EkN|o`RGI$mxl1lb+PVRaD%P!gpBbfUQkPDbl7KS z*MG<+xBk~t-R9@^UNIUA%co2B7r@9FUVL%V`64tbzA-2#r%xe5F0NY)G0@<@?F3pJ zEh`Mbd%q1q!&`SXmGO|;=*4dnOqcNYw}OW-=AaYw@+h}tYDFNs+Nv}Z7h5f%#P!Y= zy2Tm|&fap$1{SDquHRUqyt@@R=3V{%8^f1xW{|j(FTR<`pH~%jD>f{cSPjvNHr(%E z{3K$a@&9hJy?-57@hgj-$+v*EMFq5j8EgFvtTE6H@$iWPqiXST(t1`K1FU<-|uXbuUTRkYV;B>B;qltqXTw{D>(1N9| z$H#YjM(sYct9>kX*^_lvS_QoEcw=(_kwl3JtqZ9g&g+Q!IXhe1HrvM*IV)WX5M=}4 zd7dKRnKT*TQKgN{LVAJ!R~K-B{$NaThwtX8jqoNFfRTv1rKqSmM6~wfn_G7niol~` zJM|$yw^N+rcd(|1ehI`|KHQQWTE~P&{-yDrrHOC}?o)SY42S#52v)6}T+zwha8EhH zT{$A-jQO^G_aL+l_g3lTtXs`JWZR{rrLDy&bt@Eq9^U?t0-+{gyvzf}OFqBi%9`JF zjqje#IEmV>lkkp-V}OQT*TRTT6zLR>4OX{4Gt1*h%n)KS0Qq=(!oZg| zxB2+qVFLan+C|-Ez6ox5y6hO7$KMYMG{(4@oh>T;(j1mTGcX6SAazEyAi47QrZRtq zEm2TuFqy5f;Rq!0dmy^X*|D&B1zOc;Y40Ulkk}80t$;l>m_@?W{X>IZkHu2bo;#R6 zmASn&O&Tu@HeT?bbgzuNYa*}5ewCm4H6Zg|HUlZ91ypNydy*{NJO2I=OkEg1g@i-VTVwB9kEAq;rv&6xB`94yZ5Mm;XWs=qYDXTOSX(%| zcilchwAenrU;9bYW7A~P;#jb806y+juF374e`cRHUxY4{a);ZwqLr+o4kzEnKR~U3 z+lc!s#{}Q5n^gOI=5_F2O#a?yqvO3Gk<}H^VbrNo{q-e*5CR%0Hkv4E0$ZD8Of;p~ z->LFNJPkG8O|r&0!jMMZ)Ig1}pU-z^jb@=6-(y|SSlcJc$pfhuBYVaRh%r5Bu>H2P zo2&icz`=(X6>1}u>y9O?{3fvA^PqRg=Cv%nlc;rxeTqd1Kp+c_bya|t0q(t9j=>Cy zLqXk~fnKABgD|sR-H%-SsL{J}OWta-#T1~Ikvwal5hA|LQP%Zs9Wo58Qa-0+dA1NR z6sR5u8h&yyNXmyV>}g&iJS50i0?K_GkgMghM%xB_+z+9sx)wOw>XRP}Ui zzw$HUsFTi|;mK8`1KxHeJ+3v1#~)S?EQ=g@cZnqsx?5)^_9g-8dv5O;j9yaF!zsOT zu`6QWL_wiZlOm2Ydt{pKD>pbgj&?EAY6B;>h|-Hkts1h7nk+;`DP^NdY8R)Y+t(A! zaztYT#HU^9rfMdl)cqcP6RNXS#*gEZN=)kbg!td7kvwk>0rQ;NOgbMs zef-wZHQ9A=t%P?5&gWveZ=lVSv3qC9fh#MV$^;RZwX_PqvUo8(Q0tp(n{_`-rUt7L ziS(%2a+(gjy>$q_^I4mmz;!?~$BP=r+MH2_+x3`nn$+!hUH~u97+bkXCu1SgYO3pm z%a}IEtw)=Y-0M0fqR#XMi=?u;An&*PCD;;Vf=D4qUm)CHh>OHu!#)p7ginldNFCO`ZQa_O-QOjt|vuiG^a$(N4_H<(>} zhNi0sQ(so@zvGS#l|vimm&WqD6jaNDY0=bsvqEAdWmh}ONA2rua6NgY);q9xCb8AR zMt@%mkkFr#0y&ppx$v?XF^zasZbc+U+u#ID(>d(jy7XPq+_j|2X~YT zG;FX<`l$GCtj!&<2(F2X$SU?#xM)tS`O~zG!%u2S^G+x9?B@fsw1)5MSiNyT``t_T zlH<80Wugpa+b10;(og94_dp^&xmRrCrL4a6cN3$r#Nrm_ zB?=L>9ozN0-dkAs$_CmnFk(M+Vnjt_%~zrAgCk2CSv`qYNGiiu7$+x1QgafxwkwL2 z)aIiJhJRG`)%c@3HCIN@`VDYQrt$6haWQP~h_iC!h9{fO#~TSM>UB-Wx|+xI9piXQ zuT0RLs&W6q2g>k=K6R|5=nrDUsOl^m&Yjv0b~@&|8YvoRpMGBSnHWJ2tVY?$Gl?ha z4_-Y*G^D&bAI%xik*BwPm*F|#4Ws-9$XkMzQ#D!?vn}xplZqw{vZ?qyMb~h_#oA(a zB1ycV9FyBFCrX$mRLK3U9Da?z5%D)1?X$1-Aq@^$i$PleG)mhL~G|%biY; zjyzY75c;Xhn6xCH%QP}^9KD{tKC>1mQ3IfUO}W8%+d%wEv0`D?L2e^oFHZ(ArWOik zdeXk`9>(Z&G%a~{z8*E>KXOj>1&oSbNOF1en3S%SIkK!K7tGepG zA9cg}ki|HwRB;&8A6b$9_?U1np(JP8Z+t#-POnP@|99hFzU`Wr(uD0h%}#-uSg$hF z!e&WMgZ|1zg=WJWLUs8Fl`~iHOVGg0E?+J&5IZLq{xL^vO5Nr4R|6&IH;7ebI6*^U zRORF}N(77>jqV5flP8|+ZWB@JhW*1j3zw_?AAKt|z>POTK+qTAerp2|bzi5Ntq`|j z6~kRC`Q!`g?-Tzi*^L6RzJ-=2aLavAzrO%e}3CE z{kD7Lvu5n}`-<(PN8mbnhtaZTNkYR!Fn?8Gy0V_dS7B6Ja-nAVV@0V^_?jWj4C_7u z0g4C-5S+Ty2l2G^h!xC_1hU#U6a>UEOhVW{M zFNh%SW`{c^j9RnN5s`0kG@I*$bA3w_J+d!P-gV7I!rJ25{B$W4dp2>zfl^%U+d_CO zi*pEM=nwMVCytD(MJ6wVDbWmF9*M-fWgLo*oiO+zY4t+}-hdO6xV%IMp&ZzUQM6Qc z(I|q&v5A|_?aff+h!JaDB>#KFSU&t_PBW|6rvUf==;LEH~3+TUl!u zP~*bq%E*Pk+kJ;N#4fp&)e5paVZ3?}LIRkp3Ey(&{JEHR4!8ZLZ?}e{Q$c5<3gbiETo*(g9{fSKh$X;T84U?IBY7eCZY`KK zNoX<=H%?*;_e)M30nKS&2#MD zO;5@;a9T0|smMS(XGaE=ELJ6;XOcdNk@Ufa@U#gcZ^n7 zWD!CA5+2Xi|MBX@oJ<8ZWcWkykE0r>L^{Z9v?oo_!Pz;7bQuLI`f`hx5>lA3BU$e2 zBz0@SL4Z*`oA({Q)mY`YQt3D8A?YXV3NN_`Yt0V^2>v!9RtJl# z1D-esjt$v7bp=kkG?>Dzr6Xq&;6~VKGOP7TBJ^{Ozu23o;=;BLL38kd$kE zJl18C;t2PYuEVBDy~}!;T6}lU?EMN&i#aj$J2|dDc4SOODt*@r4dsW6mF(%9}fXU^$0QE{|fJ-vQ3LmL2K=$k%y} zE(G45cSh@1@2>7{_w%-Z9}>C{0!75yaCP-wJ)1bmrhwebmAto(Ex>(uom>tDr^>#p zP^`=?D3=ZN?>AUVd=cSVqHwk0$U8$ zixU*1zCnDR>-rBS<7lbTi4I{o4&Lo&sI@!Qy1%LhpI%{p*@7;uE#qLYJR_L|o39vS z3&KoMtvW9uYe29X7G_mw9&k;;3{j4>tMpAAv0zIm08;Y~((9KpH;FFwI9u#KSpY9A!8Lf$AzxAED=bQbQzmNqI+ zA3$oyAeB@Ir$_lK&%*MHZc%v|L_5ajfd=-tQ~(%ZJ;^7>+kAFZs5Im)F7-%{&LNgU zZU!fD|k#8u(Y!t5WW|eUrD2K zgGd9)KOg}3{GViY zPca(h^z?IT|LudZ`{T=ab{p7RDA`MJ2tMt5Z%ud0I#mya$-f<40JO0 zqV}Kp2WiWdX{SW_4m^iF z7pm)>TM2WF{+n zbF>{r8^U&$s6=P?en@OGh+jKQ-d&9$?+;YEBz!#2_+u{6Al^M%U&}(zLQ>VO%|(qP zNM@xSMb91ZLN)u1<&QB5!a53J^wC7=IBTvO@B&VG%%2~oZcq3WKiIE1ceOnK<&KNU zsA)FzgCZg7Is>!w#>Hm3*oYVXzKgzjalgq{smT4^_c1NGrbsL$VMDel2V<1n=UPZv zn(NoeBT?(QR~)DC$4|2dE|44L?miLv>T{3*ZkxzU%n1Emm3PWZZJikJxKV4Q8(=G7 zv=!B<-WZkyEIZvhcUBo<4taOCFy@wu`VL~@votfw7~lS_bA6A4u5fFf@8lL_nOve$kET%vCug0)KfdzSL?6?HUo(E=&=pAp z2rsULE!4t$Z^*cA%UX5(4V>B9+TA#AvxqbL?DX7vsnR|94hMWI=S+x>T=K^Igek{M zaSQWe_tX@&-r~p=$!DZShAol;S>HD@A|NWv6B}_tzxka$Rhi9Ize$}P8p(bA=Pq*$ zkjn_|1+<<&& zAGixb@6mj`TV2g5Z!1q!KkEwZ*EV4vH zfdW2SJXgQx@$i^=pv%8Vucgb_-T_7KgVvhs9ryj*ix04;JY4C;F$DxA$Zr^$IMQze zsOp`SBK*>WDMsPWC@Ds^B?qFu6qnrZZDfw>@QW)zy8_A)*2Ly*WwEJ&%XxG8Mw5Sb z5_A$PNo6QP%FEYcI(6C0g{v*IRoKPOvpq|tX0w|kWnsHxB0Owgk%NN6)6bus5_G?4 zo#`-4PU$PFTKyyT?$@5Cnst3MvM+vB>gDOo0u%!{AAms=E3bIT5nz|UWxbQ7OO{Cw z1(&?Y%u`>?Y;tk*0!2P9FR-a7D8z9(PTw5?wf?s^>?Vn|ebc9q!BKMJeT$PKTTS ziaev}*(;%Btyt7PC5tRTn`ADHJ+Wv+tv*c+Dk^o(lMHt}h9gf-t#)xYH|X&qXDg}M zb9uia(S(k$))S?71cViToMd1@$(l#&$7}SBBbIf$m$(;FHkVN*UPr_#$ckkTVM5F0 zEy_>ryvF}T3_S-nBqarn$L`9bZkcTPP-*emeU@elPEpSYH6BLBZx8SKa6B@dbQcel zXp23Ubl$TEV~Kyo?jc~1ixr~p@3wiwVE@idmv0Irj!xW4SN|{U&;+@HG*}T=P*c3i zW-ZhVd;T?4KDq0XS7@J;<2->)#7bxsygnG9 z|J->>M*0lq$}1zi5eX;3dfhHt6bl&b$KRcy+_n@!CE-pGmfLZ8L6~rSEQ{JS29)2Q zNL)ld^f)$HSXt@r;*JSYB&k4bMl%Y6H$S!-R@vM#{RrNccG+x}DlDi5E>Oy^o&735 z5MufyPs4X22;SLt-T0W@#$$Ih6WO29IvYV&1DKqhX8XF0YdW4!a%`Qw+qu545Udbd z?cXyaCWf(`9v{Lda<%V>S8^@h;9<006O-yrB`ZVA9dmFHpz1=l+uB7W{!72EVn-x` z0uMtb^hW#rV5U(E%U1gUEwoG7S@9dSNbth2#@LJD2(r;>k2hufFxH?KfLw*J$0^|@ z9q>)9!!o{io+=xZCQ}U5fUgCbsVYUw_yPUw`xBZYt40FM;Gno*G!jvtjT|k1p0@bl zGjscat(A*Eo|d*XCZm^54F12HgfR=jgQsczYO~HYQ%911W0L>yLXw_Xw#T``woiQ# zk&ucI^nk*n4QC4;9C$_<`ZVyJEQ)d7$T~AKv)AnXVS;#6yIXN_v8wl&T2T;TXy7+; zXh@u!L1Si<`~hc)i_xL`W`u4SRTwVf4qiBQutxC_EU3YOlM{g+B2NhbKFcV+UwE8vey>qi#sAN-hFP3>{_U(}2i2d@U32cL4e zGm+8Xr$VY#(+V`X{jllSbpZYv=Al$8I?qM(*?Zu@YVh%zGiPQaH$MRXz#?P>;QLiR zgKz)_Li1Mw9;3aof}sSUTQ5XxpAO zA~sQ~)79{=ojs`iqw&pa_(wIzcB;@&XL0LH;bI5SsAFl|Q#6P03fo2K{%1rYA z1ICt9me1^uOhbp9`#Qpd`T3qpNs0qo=cDCp{9B_aU{qLtLv4-|G z7*XHMWS&E1KtPTk1`3|DeWxEjioj-ezU=(e#zVk z^TyJ#S5WqyN2@hA!)Yt)b(1bW5oh173wF9o<%=h^A4kh*t4u#-RKz_}w)rRcTSIsF zK41Xx5S`e`jC$vds_FZ88}T1;Dg^>f>E22$M}9sG0lE2ndnJ3TB^DW7zVMbp`9=9Q z6^e2*K(%>%(-TIkWU}&Rr!x9mkkq3ioi|!Ev|En+&`^qVa&j;5bQa(Xjd$EX`5y%T z^{YQ!0erusJbRDTxb(QVlj~W{DwA8c=GK3WC+P!*$RbUD3<(;kk~a#(F*8#Dh4>+- zWoNn|4pDP_xK_bIV~(hk1?A)GNn`T!euUuQ^Xb_JlkenIs*FlifMj4Sw4djG({X=; zh3Nf_{R`SGK_W&G(6fnz#E4}i&+S)tETrl~*G~}Xly`Bd5zbvPZK z41!eYJ%nCE2~`Y%Ff-13-}?`I&pnS1LUPVN`>eh8D!*0EX2VzA zF)A6ie3QE>rDSVK^q6eXgMsy>FnS!HJ&`q_FRgLOqQ9Y z+K~%k75$m{NA`CF$z{=|LC!jzlOr7J#rK=`wf5NB!`Uixq(lqBBX)lQT=hG@h|L?T*|TGCnL1 z5`T!PN7Y0h1uOH{Ax)sYb$L@y>(P?lqj*C-vhJ)|N0wW{c~H!Tv_u={YkYkC0!;)L zN6utAPV}#ffY_Sje0nzbm>iM% zk;|)|C!e-~b;({h0(n=%Ays@Z47Ikf8z8M{-}l6!^`kxR!=6&U9F~K*DL1Vds&J;}#nxu#hE*xLekfk=!Q8zKRGd7uKMS>#o z5yaw>tQ|#L6TFcEG$-?0>nOa0aUGjpJ zWa`009Jas4Ny3Dz9719PTL@^Z4!L+Lmbc{xB|9RYts%jzk*) zti|o^2#S;y^+lb6r7v&ip~&Qtvk+myzD@4~QXIe8hCc?`jl=9-?r_c8Bj;FlG?@g& z(SQoJH>4fxM&C!Htf^AxnSUeS@uHNbc%7D{p&)kQy!=jvm#dR+rI{h~2^Y4?4@ULb z_I2Kc_@uzac~90kv>V&e+!Bto7SXN{5EcSkzNJRNz4v3ew|gSZrePGuqUEsEPJUyPc4Qdf!UiWjv`L#2xxoe_&VD& z;wz`%{KCJ{d)(^fDuEsqzboD;0d3%oTZ6ExZzpcgPhj!o_rTME<%0 z{D0FQ>LIhJWWGc`%&*$yV4BdyGV|NlvDODz)WJtSiSiD=wSqbQe_ui%|3?JC8~;ay z|0BYIi1`1Q6D$to>N7eNIek1#5w%mY0~&fUE*Gk_pCp$Jnae85%w&S7yL~__GnUx( zzTcItE_7WS!pPY;<5&E{VP2)zp&hk*)x-MwgF{6^t)(MqRnB^>&4gjD-DqsA(c(~5 zV`*$Kbsos2t)9|>g-kh#B3kwqrl+Q0!y9qcQxRN-7~2@#>M87krnc_%53Zd&&mZG# zwu89QQYOY>mBnG~I#+r&9`p6<6a0$L9s+a(xvqHPghH`nH?6605n8pk;HeniX}+OV z)G4*2bR>_|Q0SWC>({S`f^ma-{i%*m;d5P`rIpZCU1mw6al@t10j-INiICKgkn`8m zQ@7_C1Z@(RMsdF)O6^9Ic70DFTBh;C$;m!SzV+d&TmoFRG#gPo(Cr_e}8}(Zh!KC-^<8jcrD5Zz(Kd`p= z+?*#*V@??9g`B*xzM2yg6`oUt%o{ARHONTA!%A@QBIga*=2BHPPB-UkIJN0sv~kr9 zIW^0zg*NZekrDC55$tg3;;*s@>rv5<{jRnv9^v5;Cya!o_Jd1o@e_tZf+gicSlg@1 zH3m)W8652FKXYRE6Z32YH|?)cv2u4za}9ef2*UcbnTJZ(ZN=b|w9Fz-f0o+SR9De3 zFmNb}f}Geu#?oJXw&%O=$BC6}=2Spe1(_wi21@OoEXVu5aj3Bf2v9CY*2&{>6pVt} zrMYol3wEO=vRhl=Iao$7(lB3F8Y z^}+;sWvV<~H*;W!R@b=^Mb+ps(;_s~x_2I44X^w3spn=vIvyry3|O#wTP};g%%nuhs(;~Q@Al7@U zES#O3u%7KErU)6C*z;c}z1FjI^Fmvu$ja=NUI23H??nf~1~qdG8+YdWZ`iBrL!q^B zs&6x}#tq}Cyg}O5-dt6fDMCpp(?9EZD~qUhB9~!{X_0D71LmopYc*Ub)lSpQ?7jWy z9^nGb6StanS|;`$w5m>xg^=A)=F68Wn}dJ;8Snq2vYnQO1|~ay1CI-26w-`rV@534 z4dP@^5%89tu6o*GJBX6vVwEO#aAoP@K-zAlmnovYKU)^opA*?Kl^gKKAKH2Gqh1S3 zBUpv<@>5<5+coXc=!{-i2%_B#bSd-LTw;%Dty+o)OxV`^)3eo8T_v>PNWy+_hx)qe z_c>3Nt}foN_fb=ZrLsG&)_u2cjN?#dR?_>D)o?!EqOgdF3Byv`;Xdng!{Xz(Lh*f( zolU@rh-$bY)?d%dNVx_cI^`6;Z$DmRm$*5oo6~Gs1nbL*Ov&Cw^m&i&?)nauAkyte zX}O;CmZ)YKR9jHNTKX2N;W0w6%njsn5u>J1R(}4jx9=Xplk?A2NkfNJ^%x=hb>^TC zA8yQRPayiXYwq#9_VZH=@h1xi!$AStGz2naIM2MRp7CBNSrmQ#Bj3KpWBofCb8B`j%y=hg>%|rxanDGRyUjvwqY+<&ya)&zJQ)Es6yW z>HioqFIP>VM^7)EVLmHMi(>uUxryrix@>r+8Bu<`e#JBl>$59j|8imWVr1Cowc{^L zdUH5ywz~>>MVO~Pejp7$=af;LDt<6NSoyDCR~~<SJ!q$rQ&MjEwziWLX>HJ-H#X;zxkiV# zbZ^x){cEzM(SQ6eGGV zqX;BX-aPF(uMJA2X3T_Wb4cnB?$FSmOG39s|72z%p66g75&3Gu&a8<#9mBG;tgv42da?E58%svI<3+5j{?9c)US-tEe6Ml zHPLA$V=_0 zlrIP45kI63JKgr1pM5V7oB|G?%WmV+)nsP_vJYB@9j748nt2GT^X%EH14>x+$4l_4 zb{mkO7wL}6#M{%*FsETK4-Rh#29oahpL0H~3D`0`TqL`GU2FQN#Aa!MhpSo%o!Lcz zRL^2<&T-b=`S)!NOYFLnWc^6(%TCMWoc|itK=Kx;d;X}>Kc!L^3~*bvI%lpX2fQnu z|C{ZkaYVX8LdBQtmB=}r@M93QoOMRc-b&~n(E2<)Gd$3iQk*n|!3?N-($o z!#)M?9Zk;4(OOTF6g`E-{#70>O_X>0kNE!C-r;Tbg$hLvyNM$Y^Bk82$>|N!Gmyjd z&+CqlhUBZa@6V)@4ZjteK}t9(p8eSg*3rSmri6M>R_5>_dSDhlX4a$TOP4>Ae8X;# zyWwE8R$=?n1mT!$;`!5nf_Ft=rtU=Z8iEDhySN{p*l%Z_#){s{R_QMCdRn>??765w zygyca2U)ef{1%s@S6xkL=g$%7pR21uWYDy>bzLA{W)h2$q8!L$l{C8e{Gd4>aWNI% zf<<*0dDa$}dWwaRT3YnwhnZD#q<}W`M%1tzkT2cmxTPX9JgK&-JdcH#zuqeZdnZobBx#v=dMFYm0a z?q_LPruW@`lvyFSIx430*ZM9Wp0gqR6oQ9P}pQ{*|QC9aOt)|5QLklZK>5KRW+U9~l?_smmbhety zADz1gV&Jvn=<$*6f_7sIUHV`>9ZHBWw!|KvG>iE>DQvWJ_Yt2el?pyPb>Zf0#F1XA zWk6b=3yl_M-%DKk^Kge&Swx2`WWgiLFP!;D@mLd3+5+|r&RxE%hr7c5@%jrPQb)nR zPz#^#b0m?O&OsDE(xb8m=!Gydv#Nt#kswJnK|W56C&_}Yp(TGwG9XtjKfu}!8%&%t z>w7|6-lRn_*QO~al57H^lL25N)Ts=DR*5G&J4t7dxWFgzaD38V2R<=%Drm@Qq?Udl zcrfloXkPNVe+eEeFtw+qSPO}FzkC{N+id{4!5$9!@+6r4-^XRlLEh2f2QL{8zr1Hh zKm`&F`hShvn`P-H0Hb}%1;Sd=)WC2oq9ut-YVH3jHxCA-?jb$=;z*TYdAa-H!|x$3 z(9qC8i35QtT2aRylMdz(*L=nWRD*OdkuS|i0{@UQhtmVg_!n9v9W3TmCM_pd|NCPd z&*;lJf02RV$-xANa0oxpo{K~$aOFLsZIS6XDR13_NjmtDboW_s_rGrd`G*ADH_&g% z>+=7#gtiYxQ-Nhq+U76S{akJT<0<~jIHZsMrZe?7LA$Z!s|x=A7V1?Vu6jilcMqwP zocu%){rj~49`?Vv!uPD(;}OlRtwjgRy*@Vz+^eL2)1~gjiM}gf6rh8HfdzB;#4j)X zS6-n02I7*L7|g)G7N3Td^=3?55OKjD#FW|qvz)|VKx^_pPyu>cAP}1T;YQ$LTTSAO z@A)0*PvY<3G$J1me>v?0jOq|Gx_{4*A|oa&CdTq$<>q^mszAEO;aDVnOT3bFkaYWB ze}E_YOYy%PiO3n&e)Q=+h$ug+{4dx*73eD1XovWB_BqbI*UkHe~?sxgt3w<)8~Pq{k3FcLvKDUe0Ip zkM#2&-<_TM-mW8WQNnOv?ro4zqAO_Hr=+ahnqiOMr-ucnC?A4mXc zE;`i3C#8k~M|w27Z>VZN(!PezKTwAtN>a1sB6F{4L*x zH<&>a-M?9wB%{{n2aW$RHNm3Mg4yI(nAZQ|wCZ8O!keao(x9r*Q|@A{qi!pKxn}SO1H#f|8H%rAD_`aVr~(Bb1jSG6eQMQK`1rT zy_;@YBrk1!L1^xeB*pD2R+wOnD$1<;{dp~|YN_n4tblOWTBz*}#lpeV)V2u*32~)M z^0O){sdgUbV_`4m)~lTHhr{mNXzw{0nOw_sn6Z5`(t^wP|Bvn&A-)7BO`GY zZr;o2M*AwH4x5hU>D5SPe+p@?aSDJw?jA&35wCI1vYH&@9sTtci6~B#MiUbsYJch& z=%Tv{HUHWj2NwJ)S~W*b_+Bh`%u3J)+)_Ey_2t_|x;w>z6rGEg1Tjv+&m)yRZ2Qb4 z?g~7lj0_|uTQCVN2-#@sXZ%}h_VVVQSdB@zh%(|`o9TB7_x{s7C;RedzSh1uLs7Ii$wofVmu+9UGW|q0y8N{jRX3)RN=Dz54l% zY>J-(^i%6yh7m5K{pzdorSW)ajR~F2Ti$LaFElqJnxHEh@3uek8v|`CZ768lu@`Ft z6CiRrIAS$pK}2)>_+9hvX#^!9%;@`q++O1l6a}-$`Y$m07R<@Tk6i05QD38F|XQbQRpO&aSlO4ml0& z#n1dO2E!u|2VSs0Gn==F#tD$oN5PGO1H}dpb#h+Kt`~l%LceWg_F{MSBfT=&luK0f z#^$ug%nJ+L;>(jB;7Qs%#kE*@gs*gm+3h^c<@OdeY!Xuzn3%p1?V_h8vD$dU13JxS zJ{7)cgpXKKUun~%Kgl|Su{>=7No<=N!v-X${3Gq#ijP4Yj)MHQx?tp>x~5s%N}U`x zVWvgaNi?mRxvtnwA*0&F08{rGoqT1)?1^?+(jUjv2=V z9R~ss-Rq4>vi!eLLB;*U;=wrYo0Bc1%~2Or#T4#k;$|D4eb~z~&04wtofLJ`;% zw-&lffH2L*AU=Cz)MfHA1;aNMNeSB_E(YF#;XY^jibvetYvk^d_k9uY2)6!9LEY4N zg!@8-)kyFPoF#Tqb3HCrqN*IR>6o%C8Sw{eCY!H)PoNNa-{WOT4^M5EQ`~a7IMuQAK?4uC9va64oqR-IDCQR zO-2i=Mt&FEgP-uZaD9LLp8N)p^uUs8lROG>xI)+U{(K}yI@ZoFz-YdkO{LVNL%P(o zM;gV3*iue1NkBY`*$B_jzZzpwCLrG*N1yiD!L51VGVhPZjrUKArdeik>^pkQTd+^+ z$#R}U!)zKhJ)8}qo7;ozb$2Qvpj#_YT+>Ddi??m4(WRPH^Onekg;So|v+t|E&1J1O zPjh>Wx0oALe}zf(AhJxVrfCtCjn`La92r(-jmo*VgFwV0mxdEPhb|E$2=1{VEIs<& zR6BxI8)JD+ zaX*VAs)d_Ji@bW24RAKe@&lZb=}~0IU-0zU=a^U(Z`3TS?msWG5-Qc(tRz9|<=)1-EWyj2ie^ z-(Pm97bt-B)IO-%)Y}aHenO5rTvSEE!Cbb=0rrOn_NwU)8L>si+QyaGv2aa}># z`Tn~qipHOMDmChZmgP0%7d_s%d&WtL>w%v9)3z1696Viemh>TPY5Qw&f-z`r(M@2% zhB<81&rhEfiJYw{4;h?#5;r;&oOC=6p&>-yU|~DNM!@|LYx1s{O;CEAdl1;_XeZ-SCOJ z$g14P+p#yhzb6N@s|A~do|nfZWaSLIWqMI>QCjym2Y2G)h8R)B@FLe}ojtTH13U>e zoZUFSSu|*4-Ie+l=dzsiBAM|wb|_qWvtDXKcK|TJ+&i{d%1>@ZH0HQA9(U_ ze&)~tS4d4Q7kj!<17kct%H301>GJe#+jD-chlsGex7}2kJ!bPG)#sXdT-doAa?K<@ zVXa{qx%-yyV!5G!2b+SMnYupzd74mJ{U{HKc;M~9r57n4zR1`nR#ITBF(I%n%+s5@ z81f}xEj`AdX#lGjlLd|M$gO%t7hU>8FNzl-(J_iz_^J_7ur5X@ZkJHlez+>w!cXK# zMP@O#&|>|(%AG6~{D;ZK-khvdt}(c{L`T-3pD}3hGLI&5U&-3&kbcHb+Ezl-sF>&W zFuvT=I3e`1z0@4nDpDH<x_1c=L~1~UTZ~Yb#F#&_Ksl@0V+iS zEM;{?ta}SCv*=uT9f=~pg=7uDj`+EB1ox)nHnK=%RmPbA(`jKn1pNF^N#wOwPfuLe zZbPiwW(huX8L1RG7t(df-2gZrl={>SzRq00ahoOGO!gG4V<2J5AxbyAv1z2anTF4Xd?QhYy;{t?_<@XR7!i_e>@C#veo z+Dr?>Jno!EA$=Do9~Bf9EsMX+)k80FwWqMa_~~B9BS+Qm+sohUj`&WWtNNs4WU%;c zGz8=nk6voJQ{68sdlL2|My%(0M?&$_6iy&E|V*p}CwJ{u3s-I~V1VKdf8j z(MnCh;*xg5c0T!3b!;M^t>E<$ejPs6*$ERjqUGfhie7x%z1}W`St{Z3n2IJUXbRh9 zBSeSj?z>Yxtv`zQcbG(u@sF(x^#U_aNpgruL!H=$vO7?TRuHz%nWQtv&z1pBn0R?jWbPt|;vD4OTyL%?(Sz|JayZpdf;!@(Kq_ak@ z1U-VkD{Y$UKf6^nEM#12v|4Di*@lsWAii?ZOKDTJ&ZX|u{CXf%f_>Ey&0cv-LoRgxY4B?Di^YfS)$0`IRKe#W!lD@V9jhfjm?q{^%PPjz z6}xCw>Q*!4wX+0;w+1sP47)6NZ!Dy9$gJ{t`ei*e`uvunH9U7Ns3uu8Hy8Ko`>T}g z32;M@ z%?Iy^i|Ac?*VHv{n?`o_PESQYB2pm4<%-Pebq29N`Haf#Z*63Rd%FFF5IRIZ#<&99 z0zDU!lHCJf3#JzJ#T75g2w@u>VTv#mJ&jTCXP3OcEIy!eNh&I>%U>rXb#+H!c8D)| zeWu@;lVW|Z6vi;uoTNd9730)}z%R;Tk4cY~2#V-Pc)IAhxP)Oz)n7gy0ZBtgAegHv z-QaCT8SLJ+xh9J;oIO)aE_3$F(%`|I?Cx&$omv)}%9ACx|T zobp>&u8jN^Df``*JEGE^cIV-9$z-=O`?6Kp*W5Wny70Vx-t>$qLnW_r_cz8K6D4#6 zvuDLND9&-7DL~Wv4;~$VqV6a#_I=@84*c zK@FQuD~S0MJqVhkk7|&iZFJG8lj{W*bSNe@*$K0y4lg{?uLLa?7QdjK=bA+HaAr@- zszuIGHmgqaDG+r3K|vbV_9v!u#Cl5LFTwlN0Dk5(`FOdSyuQAk9lTG^-~^Z(M7oLw zb2Yl+3*ucDDX4X7>FY^|@FIYd;yQLOg8D+&7-dR7@Lnb5Gpe=>gJLTEL4Rl`Y_R#0 z^G&&kn&V=L(AM~?7Kz|XKb{>JY9C(`>815W;+5yr*_(NX;sYWq@;{OGm)dqqN0^0! z|H4i|LW_-{8WEEO{?sMBKZrb-TbKvDuLXl#Rt#hi)cz}Kc?gP2+tS6K^?CXXHjODG9nI~7~$l!+H;vh33bnd5(0k@@FMzmr0i1aKS|J;fb~F!!7J-x zXlNpqol!?yP@9LmQ6INOJ+FwP&en4&+^^v_=a|i9xvzaX~c&aFGuK_zUy!-zLW?6alkUxW=$&s^CRUcpJZgSbxuF7L+8wQWgKFWj+kd-StVK zW}&^2-hCKZft)68yT6a$Ab8KsG?3u&`CkbCzr#DtgEa|T<0QuWD-eD#(BUXPm(A!< z&jz%OEVMG}ZqU2Zmr#d`EOKxZHJJ~M9HvV9TqY%NGoW^^MgK=k+VZ%NTa^CPnG#aC zQP;$zI`$o}fZa$3*i!Je-*;Sk8pu5}H(%6CFfk5l+3yB`rn#D|TpD^hkG<>b`gNri zxb;3;x)QVIYJ(uw%BH`=ZUVIUdS%csU>?cd?V>LPs^p>ucf!4Y1RIptI2!G}Q*#3e z5gOXsVPH!i;&(lUFVNSCj6n0@A4d2aQ9Y&3LmkV?Sa;_ezb(gY!S${$ve6ZV4|1FF zG#qol7b2QUIWfcLLPkew9z)>FAGbOS24$X6ogoDt03@AvLNrfD$DvJq5fBj*T3F~* z%q^k=3)KpbiOCBD?}xE<$`rI6Wck5rqWz3+$!ySaPZ!hDUw3 z@qjj%iKtfC2v!RoEXMd+1N|NFYmcH@cZRPY<-+(!Sq@Il-if-U;p^A0_o4H_OKi|K z9^VOGRln-lXu^-HeQ961kmSi@f6LRy{sfvGvDb2r@UxyEsy@!Lbch)V8#`{C1$MlP z?=2AA=wWx{GPuRh-(!$1nDdq1wVYuoe%e)H?_NAoi95F>(*6F2q|f>DK~oWHyrb(% zx&F-`P-leWa!g{fuPTuJ9>h7V2~a9?q%#B_-D;r~(?=t_a*`sM=0bO>jF|Q}hrzX_ z$~uEEO-)-XmM4)zrQ{j`H(arHc6xB;=FM-yYo(hjI@8(c1JMRi4|1F)R#3rpLBiAP zR|AL^+u`EmerEw2!I%}winR$Ug>Nq9EvWU=dXuv&-aEskr#n;n`TMBa>*v}67-oSF zvc1woyKP}})>u$jQ?PvkOW$?fw>dJ>mZLK{?7WDP*Xsi!*UtGB5i?^jMc-Xx3~rWr z#wp0lV??f+Yq!ktt|dhIX;0r?wjL|8#q4>S@_`BW!>=X_5DFeqESy6>^ycWWXH+g0 zYRq`sy^59SPAU)*>`biyugw4uN_Bb$YLh&#;{swOTQ*W03J&-ThBu|A8?mzEogyZ&Kp#p zqP(YPbIMONb2>ELNwwFzxbRVkYPQCi5@r?TfY?+~22go#SL60Y>s z9ik>g*k02mS|Y?GpF<@9_ZJyX3MpHn$>Lvc(JBEvmK9BU1>` zSD89R)byx}%w}5JWo-1ClU6Z9r7n@mn)2~lM+DPeFZk=sW4u3Z*o^Rvb zf`68h?2_!Yt@DHa&_#Q)1zBXlh@YcZ^V1`MW&!<~DLsn@_pZ3o8 z>Wwc}B1~O%_N?kV1L~^#3fX%uin8lg7cy^9*x-=Q!X&+~=tffd_ekx#sT+1P;U;3O z1}iVb?hKZdsvx`DQk0B)u~id0Y==5;UXTdkf)@flrb87{iSA2zZZfmV#qB%pO2otm zzq;r_A#iani7Yw(N__m-vYN!g+-QcSRDSFXd#lHDSL%8v-TNB1FKb?$>w>+Zz8nT& z3mzL@+T9!YUP!Nb`smSB4@s7tfw*=z3s+jf!KTX19fIx#XI`dhBZOh6 z)y(BGmv@x`<0$LLgmT%}IcH5b-Eo2S+iVMs-1dC>6}S~`;)gd+_l+L3|D>;A?qyi} z(<$fCdcocZw>0wjjIc73idZU$AH(QLWE&RVP@;p>(&Aj_vS(*eeY}wI+cdNGv+Azv zlP`sA#yjHI$f81ASvdN?{&~J!W$t5Xp-cTh9S1jGc!)_ZmuK^{Xs0|_vsh|H-uI)C zMrbiip6XDsp}_OU-q){PE3*%;`vANrR?MEz2!?TIQ*WP9vSZ9CT~}P>zVAuxTtoMY zpH)>HZqXsgu3v1v{I$ay_FUXq!JEC@jCpL}j1qU$(>z=&0pD}i#$!s-u5vv0XM|6(N^IPuE#GJM;ro)bR>zyg zc$iie19Gn*F}&m{Z5<$tuz}%P@+Vu>+HZT|vG9V9u=a$HfFD;EA53L$U5F@ybF&_On>8tip*AowyXj%Ft~|<`&);}H-<+I_iWXcHq+l7SDJ*p>ELj!|I=LKaoOzGZk0}JX?O1J; zOUdAP&sl^Cb<+5G22=dEz1k&Cd6);ewVT0lYexm#gr7a%n265vLy>p+WSOczDc73L ztr{w`$}Ood!hQR6&qf!WHaq2fsLtNNk2jM;``c&$NSQko+KV#xqx zKz_#VuGiG1i;r3$K1E?I{4~rPvr7}hOHOtv^4F7w<9 z?&ilXJG|~&cA;vQgqatxAa5Fadu_itzZn5t1z!2a6VwKChPrxf=L6vzBT3fhp9It~ zNIlEXMP{gY?>{TA-c@irp*?(cN6%?*pm}T#R%|iEWqm>2c-A-r0L5PQN;xJ)4Hd{N zh}43C0BO%ZpCCK2Efyxe#XwQLb!_qHnfVudaxsEA^noO^{4osJqmQ+AG^sGz#UlnM zA+c#k2_O`BtjakgZ$vkfzQsQ*VyY)>aLWm&BC*?e`oy+!<_e1T1$vq7t2<9Os0)#{407PC3qcq%eoPu49+g zJEUbwbLgwPl56jIRDzUli?@fq-tm*43$E&WsuWGbUzjSYXv-2a5L!rbaNr>8$$|0? zxmM)HnTP~S6*#NNYwp1PTYA2@;|n$30euPFoLc>NHG7Kn_7+TlTH>*3Oa3^Q|6#T3@e2!l?BD^dK z6ElyO(%r8bF+CEVx9nEb($lA7tgy?kS_6M`a{ZyY%qK#$F>QK<6mxpgkwzi>VF9EX z>s0}Xmc!H%j^*q0ON~o@DDj2o5faANMg)o)*hZ~0k3o>eZw*5)GBT%q_;3q$0TSz2 zviv|}A)=M${COK&(VO96VYehCWF>I$%>J$7?zQgjgz5PT0R_)DI}Dvd_b=Gl-IDTK zYi+*LYHWBrogJhvCZ5WD7YxKkY=l;tUwK|%;I6=8!d)_lo~#8|0vAvURPCKV(j%>R ze@JhI@=hKHdoC$0YA}2s0qOE-Ym~^U+`aFZ@#kF?qK~q=y4U&{*SRr9{EiZ`rMwYG(&MF zNg^=iOp4a)b07BuIx-S6cW(yn&lu@w@5)EUF9-Y9Jo4#<G3u=8Hs-9HM**ZrLL~ zs@MRSti3ZtxbXuz47V{o(f$Lq^X*ZdsGJYv!j89Ux$npe52v?EPKbzACkJCr$ZSXo_` zCB4uXJnq`KD98$iI8Zv$aTD;tcZ^3ke|>;>NzX_V)|@k(&c=nL`s%AK3P0kuG^gF$ zD!dXnd&xP&}{R-$o8|TuB1lbk@wbkkN{@txr0q?yU0pZ#pDP7VwfjA5~ za1r4rVL#vnbx-w#3JLZ2{F2^MTijioerWx`7m8B=k%37WQQRn`3{a?lQ$KFj0DMZS5Ey$f4NY%ovXjV`o#& zI{+Bv5K97?NkNWhhQEeA|T2*d^h z68^uOAT?XaCnnzIXGnO0*TQO&)~puAAmp!OW%UM2%7pT<{a0coX|#iZ!Ouhe^y0;f zzVpO^t^Z?x{clTYuDeuw=UUX5U{>@z#K$xeiqqCGvEVvZOAr0u*3qCnos)wDWCmJs z9h<2fAAfw}#0mWto!=x&U&7Tg+mYDRT;s0*pR%?kIRxX`=F#Cv8+QdZu}4Wsat}f7 zn;=Ml8@G{hKxS7~iYsb9fBrmh0Wy;bauvbL!ZXe4Py*HaXWAAH6CWM8Ganwh{I&Y% z)YSVZGXTrJl%_5LNvfG3_6Kqcb$3n?{dWK&A^`DyR0)+_`cYAXBuic0$S9i_A*9cz z@%HwXSq;TJ%wr+JyAa3#F;#Z}EO=oAFk8-ilBo?mcThfG+az<4rAHbTLRu%{uQp2$ z6s6D0NAymY9|4A&i@8mWsBFI*5MAPgPy3BMcBaf-RZb3psdx-=gNx+&W>A`YjL#`Jw8o zayf>AdJi7tV>9HHb+fzNR*~xWk~~4|Xa?TB-fxr!igFe*En`7BVOqK+Mxj)#H~yie zxjDP2=#W7~3)Ffki``%anQ6qW^>Jcvg~|bQxrMM(-AIk~!QuTO+|mr+dxTV=vRiJj^p>Tbg3uI+$B|6w|0s-XG{O zE-v8&`(t+(+4Qlt&B@8>B0atSVtZ3k9es0Ct5)cZz${w@9Y&#>8L-IbpeEAbuN|x- zgp012uGW1Fy0DZjpCN8Z&;dua^Ynj95p#ZhtdXy$Sn&eZ zu3PiO3ArJhfTHoF*xb8eyWl!U3#v+&tD!g?sDfl3B4aH ztK(Xd_zVSIO=9&O0u^f_-OVe7M>)Li}Gd)$7?omR$T!`vCvTzg!}!fX7cxvvS^ zn1_$2@R!3WSwxdp$kG|=@3Zs&x#?^jDp|Hkk%Mt)zOKlX*Y!c+RL0|NSoE)_{=3Ie zb8TWw9y@V5PNIy^+R^=voSFJJMtdW24#*WC_CO<~*`lv4awPs^%G*9ZW4S>i3#nx< z;xsQMJL{iq4iUa8aGF9#%{7;d?5wttf#!_uV6%Y#o74T{AANgpIxzU+`8>%gPj;wb z;l`3wqQ5_xNL(9;CD5T{WMs6BGz}JWDwDr{FmMDFYI$G6=0b2L)LCZUb}3kVDs)23 zvuCxd0r#U%(CHWb5LQ$Hoi$%$Z~Y|RHK(aFS3rc}mmlp=Ij?fwXug`C+a+ec;+=+4 zO3sBsT3jktLx6viOnue0t25RqVY*T?^Id6UmZQOY%9yd`ai!+|hU;h}$;P7naWiJo zkc>aFnHI+^x-KL@GjHd%?{r1Krhu$ zQ-pd!Xncod`IOW4_aoBl(Smi-iD+`MV+P$&|HT$FXz17Ae`iS`Xo9VGDMG>H(ebf;4 z&cjP1UGjS30~+mr80BUktB=lKJ8EkfkukSFmO1^C!lm60F*W18wl39YU%=6P8;VQS z9lh$Zc?yx4UE%osiR%8)6h(zt&GQ#_RkswRMvC>%mPXJ2`gB5IO>j9GeFP<_Q$grl zcUzQ5j2%gF?%EW|TP@hvbKc9W!Hsn=Mz(e0mnnJ}LltgaPINjIU(#}{_{mz}5TU~p zS1t#sYHQb66P9u(X*10`kKKu#-ZIB*cqpF|NT=rIExd>?*!GbU6I0gEXr%0| z{*i;&-U}S{U+7l%_D;`p&1=y$vwQ8ai+*n*S!K*AIhwb0seZoU?dZ23XX+5lLmG)x z^4FUk=x|&0OV(YIU(z?9n>(0v%0CRWPx4~@yI+M&w$G^af|a0_drt2#S(rm^B-XU@Ku>9Rzp;gR@$ zzL`AhtpQ4GAi3^HAkX}0jjI+UV@o7peD~X7l;`Yg%hA4a7f%hO!8QvI^mLO z2RiF+J|m6Rmspr>Np*ag@!cGmUg+a6+Nzp|Qiu{$O23}1T{?Q~F3pdr?k4LlZk0{M zh@PsLHn6ob(*0yA-M{5pB>`* z)2cjN<`Q+`2#w@*Y3yLWbkmet!UR6;+(SYlt9NW3)$**G6(v*pIwL4s4TgG=)W_Ih*!g3jzmpQ5eN@L}QXKA^0o8u8=XV3N~zLI448FO|D zgM6~Yr}U2%Xx*M(R9JYC*_dz%g8YC}IE()NzQx_9P~u1QG;X^<&1pCJj)?NAy#rOt z67N-)(IH9etvRKt-6wBj)fD3xU_CdDd--dF3rOmvpl#nPm^;Avv)L~@M$Ck%`+VOF z#<$(!`|E`pvw8bNnX?=3dHp@++P#f(N(p0KJuSz+(N{6gaD#rz;{Qd7^rkn85Y2## zA4PnMn%)BOSY&!W_R_NmXv-%3(DvlH#b4~oXm;$7cr#(;aKdmo0gLU0I*=BHj z<|Y-m6ddD5_kq2D0pTd0qB9@eb+9L9Sj_9y!Xt6tZo4%}btH9shAeQ@>IeNN7d>Z# z4D@U;i-A0MTax|of(=Oqqf2}ve-8vS=X=ui4&zilIV96YCrs~=GHGduKT3#q{rfny zQpRuBdA0f&!dJs4{(NRJgCQ27kbJ#bL6X%vRFBoUwfg92tvM z4J2h^$zzMi>(m__9O6vrz{jj4BpOm%P7L3vr-Ph#U=Fe0xm-JR9Ae1?zFe1cFp+}# z@m^$POabN(uosAjWe(7gSZ_I2h(p^@!PCfFs*u~mE^jX{Hxv0A=zU) zL6!j$`9euqDMxkYcHP9y$QE<1W0+HxuZ!B;J4hEo#LN7_s?{4MK-wt%s4PK&&?C=H z)@)a`WM>Wa$3A2M{yHWaX0}HiV!MK#aU|apUX5W*Z+)xyyW3218SIS3IB(o&CT>Z8 zX!KC&z7M!NNErhoD4LkRMAxx(*+0~5a{3z4z95z;{^*jLpOpuK};+DXVS zb5hI$0+~q$3rpS${12>izn!^-g<%Wk<5zJ@wYjgt#PhO(Q z3%BaD^l}Bj4cG%E3W3y|CQ6FNB&4tMvHX?Q)hs~$OQH_r&oM1ctvZg51;4q506(!C)x3A_#er*i%Y4(M+-RMV zo^)3q=QBjwX+QTpY29%di0{JzA^FV2z0pREGJAgLwGxpLqIQb`KCctbsE=3es$X4F z7nvWqUrn=kC4uWOX#%( z7W<_!`z24{lcY;J_kUs7ug%S%g#3d4ZcSn2pL`XhpdZk?IrX&F;qx7)q5Ldud@g(6 z*VeRVF3}BT@}D_JT>!jeEOAGBf(^CH%pG;ZIq2(mZEd4u+a`AZ02o4M#&6gy6$5XX zCOdPcMDPei?WkX!DROU*L=Ui=vGchZ6|f~(7#gaC+KDGN(Tcr+GW*QGTg=&-VQBiL zBQDQ;E+)Lb7X>23Tv#J5i?Q%=h>Wf*k-o zNWja3kPM)@gC6Pe*t$e8Jxo6)>oX5;xSmxe$_ONPI4M3vhNQGsv|RUypS(TkBC4aS zy8{Ls@7K^ZAy^5Mo@jvBxB!wK%W=wtvGt$9%ip>N`Q~6m*_&ciZFtvG?9#O)lNLu;o>^Zo%yaMEbTOAfVE_ib(HG zx{B1$TObfn5wHOwAksx3K&T2K5SogL(pwTB5I{;GApvO-LOByqUw-X;=luPhxwwEl z&y#tku9;cuUiWgdw^32li9WTyII^iW6&`hai9DQ*t$fsQT1fF@mU?NliOF8NI@GYB z;87;2c^Y}k8ai?qu=@bPnvfWGq8uUj=g%G)F~1DfKWRXBqP#VqWgj)CMcTeh&YORn zjRI;(%=ZubF-tOFTb($X5(2HzYSE1j7155b_dYOlY9qbGTYz+~-t?|=h^*NuM#NOE z!fO+Q86(5~uCnh@(PsvdMsx6T?ec>287znXFaYW#ut4iQCn|Lq@6gZmZX(a@8c8!S zF}Wi;dU^qReAUCG1SdD{kQ8a!EHMz0@dk#QM4NT9(1SGp1VaxLSHzYV)hEMS-0&0C`^;6V82o}U}(E09H6!>9pVPw7aRMw2EYuZPh@V_ zE-UB$*AaX6>?v|cJMF-MxU^u6dwaS-KkBl(hEPxaDUMZAO@B&5$qo0^A0l6dJ12)6 zxckm%M4nh5Yda5b$hzh$5*0k#bHV`oX{JGI(Jsn&kn@fGsWlTDpA6FxWKGk`h6~2wGSdodLgdF^N)j?YAVrl)`dsiu+c|1%uH`Ws`Op3q*$C$mEtz4v787?sNntA)X znqIYz%cmdrluN&Ri~3{k&@vHL`&kV(c|3Zf*BOPIECRx)<-KZ3KtccR)jyv;N+TIc zzh+<_(~*By-dzi>XI9~~&VN)5M_HF<*>lu3U67m6G1%DyQNVi+bTZBpwy)5?sA13E z!%AMJ4;h%~(|*KPuX=SCD=8%msIpR#|&RpvaPGE_QBva%$qjBqchQb!y6y zfL&fTwX9n`H8lRRB&@Ddx1`0k7l|!gTH0$fJ{QC%@_F61)NMAO(QqRd3#rHD|KNiy z9YIfx!NrobKfAtD9sVlyZC|k^$`XPL$w{?TSnT;>m;!-S0 zx!Rd_1*U~~=eCN}-tIVri_E62cnz(mHL(yi`Ke_BO)*_xXxy84uRfuuMbdXdxH#Dh z<*~tVxb&1Sg)z1}dGd;AO49kBT9Z?e+^a4hE=R8}%dF1o7gnsc7?QuCFCU4qqYcFd ze4L(DDegtO$P^~dK507WE6e*B@Es+2kc3WN>i)MxMUqS30i|LP!Ue}y`R#$+VIldo zsU|lxZa0i^?|9v&L6POBRT25YtcX;t#ZqXwKM9gN@WQg>y-oPyjJx5XKcyGH$40<> zEK8I(-gFL~vg!U3dLm`R`IPP&Bq2nBvZ}0KtXS8s9wwON;>u`OQjR_)dHbcplnT@4 zn~Jz@EqN{Su#`Y(vV3r+SHxtfU^1V0&)f@e4L^4@-QhR^C8}mw?^SXqpnGo^&&fs} z+0xEhxq8B3+`|_CMJbbMmRS&Vyb>;`*mChYEUu5hCqY?&u z7L32v1Ozwi>U8-S;Y#cO-g%V!*71Qikl5CB6<3e91u^u&f)g>BlA8*~2s!=i17L6t zH{@idizO@2r(TiNZ;$`MBK_2|5#E~#(*67Q!H)eM*FVC@6WRB+rmh=RwiGx-wo7TM zc$%A;#h{+XpYF6Hch67p&KGd$)vcLklmx9l^awkniV$+|GeykGBsw>?Us8)us8DGv z;H>`=?}8zLkkF=awyT%)S3ZeR6>nq}e&)li8^2{XG4WN^m4{gmJ25Kl=1+NEZEVt? zThm*6k;&P;6FOuyDuE}o&6t}^GFV7ep5xE^KIF{8JNMuPMmQ>5VCA(L3~!e$#TMCI zI)InBaq2qvrOEc5iilyC8hO``5u!1Xd-!JYI>YOoHN3lS+IzcOibzU+{B@=y*LQ>6 z7`biBH({Lbn_}sgTp){|=K$mh$_-LLYY?^u8!5?J^)hbt)oGOHyd>N^3kdq2#JyKJ zMg-SyY2?E`?Q`ueQk1hXg2fo88a3B;NaR4utV=N0kDTktuzB8kbd{kidS|8|K}8i2 zYjv%@UXb)0^+~=|2mD0#Q{Kise`8;Aj0)|Dt9K>_Bv1Ykef%tn(rM8hP&dEqlT56B zPeA$#YJSad7Y=@f_c{Dr&|p(*^C9%hg#bwDfUsWV;tf~K&tf}fI%YmMS?R+d;3U=63ZDEq-u!?Ta3lrM*fdN=T6qt6dv^@wH;dAc{ zYV}Kf?euj!3>`DHJ%hGO{fmTLUgTu4Ep}_D##CoZy$TDnSxVRDgPRE` z(zKO2gFsG=yO#8;w8Y&hK>oaZwZKQq_-02O{!~Z3yP>5~r71v#ASs#f%im+})Xhf$ z={|=E@XrUalEXR14uEKU|2lKpIyb4Z+Hd;f5kJ+!1*uzDZSHAw`Fu57!i7~U`URR) z0dL9BvtE~vUMRp7+veXGC9!nbNkud;XFe!&^Z9c{C4h3@PL=lmlXZa9{1%+&WH~K$ z{dc`974e2Vznz`U&c^28epTvkHnhu^clD-|$4Z~H_)Rsn<*w2X$YGZs#ys+xiXdcT z>vZof=a@T>BK|g&%>@qG4FbGKu#?z?iCYbqLJyG50J38>AjEz}!P=6*R&*5lv;D9aTcYDvl{0e+r1iM5$E%# z%|Kas(Lks5^Xu!%S0fGa7pM)rS9BS8k%38aPD`XrDW3BHFo^bNSLO6tZrP~bnN4|v zP2`rjL?B&+2c;0lPkMewmbdwfls~mx-Ne91Y9!{cuk+^yo@v0|d+t<+X|C>b+HtOu z&n$c}7>ssN2`4^vv}kkVj22>Aao_uu0QhnrW55|Ux#m&Q!e49Ncw407=v}tUK$j+4 z{?kY{4PFY8Y@P{pJ&k!RSv#bYr2Xb7E7K~=`$B(c?k`neGfokS%|1{YM=|jPJE^hP zXwS(~l1KD&KV+oyY!M_g=z51DqbLKuY@x)Mfn)Ceb{6nr-Lfa>UhNdlr1cN&b;rBuN@s7 zzXX-uOtTWef6A!peUe)4nRyevG+1m%?v{UtX})-WFH5w}A6-S@Vyh_2gt|UBpKd2T z`Txm`X)5PdRO1LE6#Z9_1v2hsm9FakW$ahR4c{+b$D75aml`Ag&gDfK02JlQ83ebQ zEIZF=-tO=B$b=Ib6C8*=YkJs_$#>KLd6YhW+`@kRc>c3zH~+1jC@I`=qGTEXK~xxR zJ*Vo|Cr=gY=70Wrq;^h_tXFnt?*m2=hZ8Ndp|V`%=>9a znVJ+?R$%uBdS8G@@ZtsT&;dC!#%_M>3#2{oxLmE~Svihz{It{eMQ*DPw}@F2>415~ zp028z;jh?oNd$WH`14k7@%uQF1H0BROqKZjB?uR)5AE6T_^~!t_Ql*0S=)&T4*9gW zg2}cNVR=jzifflwWM7q>rcKR9k@M$!ff^5_cNQ&@BC1q-R~lq(`-so%5J1E7aXSWx z26D3T*t<7tYisOBkG9JJ!87_xA9NBZK`y6neHvl%8i6Fs$pi%eQkAlT^#iQJ+qjEe zcUgcG65rev_6rcYg^pyh1p%`$0Ek_=ckj@l!xg_^Ell0Yue7DLWq!En`w1ME#l+t1 zc&e=6tS+~9B+wjzdPIg2U!3347;Zhz1a90k-qMqK0Gs=-{Q8(AfWOl_+|Rm{RX?2D zf9d5miQP^6{{$RiR={~!FDvWBPpwGh&+2Yx^n2iJecVxEg#g5VQ66Lbqs?`661Kzv zPcuO60V*ISssU&<|GzT5tDDQGW$x%$x&3AG-@}@$2a>jscDt58*?j`_wXk4Hj$K}V z9%MCR8ms@e7>HC65fO6>i|QRu-PHxUNGqm(ysY3O0Cn2xZTD-L_?FTXq07CkG-Z~T znYI;S+y4WQHdDpU{BYCvR@Mn7A=pl}dF5Gm<9`=^ups-Ys_K?z7@z`}Fo54_3zqTw z)2^*41wOu;1jgv>9kAl9QAEZ`*>UUf8S!;Ne zZ7W0X7Bc}my6(CI2%ux#np4ufXX@jbJAoarir?k?oyYc-9qlG7Mr8#aHe(!M zi?}VJVtBtYnZN#zr@Mm#>70Tfo;i!|vY=uir=r5Ow-r^4Z>6`v6s@RG^^vprIrcAI zGGfBV{*QB)`s2@^@|PmxVFoCPchnZB#a()|e$A_`n%<@U_eiSL1v(wgl;c1eFzF)8 z3W_xe3ES2Te~|pZH^?~1f@$yinYNA}H;oMq4TXJ8w`Nb-iN>;RIA9s) zR;F_g_xrq1*q*66042c6*Ul83XSZ_Lh7k!%%U|bH@K0zQ$p%;7l`IR$=2xhy-|3v# z5-$JAR8!OBvamMlc60*9y`M{)<{IPOqg7`k_9++z7YnN5&(WiQm@8wg5516=C$>yglE&rJS9tcPBl2Jz7# zZ5S3}UL8}4jfotD|?wZ=$6Rtt> z4glGMG>@ebE5Xw1I$OU^ocN)~2S(q7jcqlo7zFJ+EhKwR1I}1ntYj`E&9pk=gdQKE zz|gG-8niU9BrFa+@PLZlHYa57vLbWSVE}O6#yE;rfbolVI(;OU}kTJxy*~)01PfQ>g@s=xeMyG4^ zl=^Tv9G0H<>@PZ_q@u!vBJH;9!NbE=45}P#*HbbS>^IeUYqkk)^SgwSDng#~$)dX3`PgeRx*}n&0Wc$FnF
F+#?mQ17kWE2DwFH`qmjOV(2NH^B`!mgo6I&)iJ0kye08q>=)DjT6eBHFV z0wN$)ch0*W9Wq?bV`6J7rU`0g(x9wVN8r~|DM}a$t|L^&Lb4IMsex!4^sRU;Ev;PF z;qqiHV%)c(N;CPWtiQ{%8KUm`Gr3#94H+`_f$!jqGfOQ zT7qR*$MP)RYWMEM+5XqJ-3LP!l?eHUMe>!g3m!E}K}nY`Nz@URDMQ9r-d}m1)BW72 zm=L(A#KXpx-Ofh{LJxs49|eb{ECXV@TUj)^TToCnu81(@{^YT1zF4|~Sx^UpPm5k@ zHC$eZD~fM1UCD_4!<=3M`Y+g+PI-4va<*~^^SSWWod=2`!_ZqSA9~A!@hQXQ=?cQ~ z^34p!TppG(?t@V`J$Ue-*=&aLY`^OCK%G-2ln}#5C^XcmK*O;qOUQh$O<;#OWCE;^ z6JAw>?w(j@JWUC_g*t%L9J@|*$Gi6xJ^!1|XdfQ7I|vW{I_ed6MfB7u>X9T_M zEJg1T87_~AP#Z{lIlivqHYjVxH?UIg1O?|LLa;R)MmNwXV+_8^skp`?eHMm}e)P!9 zDRa0SOjcanQ}S@RgTsU+7%ET#V1E7trJar3$cLl|L&2B*}Q8+7g+Ql|flVTPxLFmR@i`x^4Ay;RAnuZ+5mX{SUi~?VG>0Zrh)>(6`(Fg5Uq$ z2KV>P|KW(TegFTx^7k2IyFvb6!~Q-NKGkB}5zkN={^mehq7`|v^IPngmgZG20O(^JTTe~to;;;)ou zqvsz}#QpXTv~7KGOBYoCnV*Dvux_%TyF~HbQOh)&qUzc2M7>1&`wPbF4{)3T$jmK& zjP0zvJjy0p1w}kd{!Yt$%4eBAvv)^T-r>dDazR);ZDc@txvvhhS4l}+V#(JbAHonDQFsU)sRjmSsE%!AL z%a57v>McA2<@gawGf6V7f|y3Rn#1q=4tuQy-uLaea)Z*8joBF>uq>19Yno}Yf)%=0 zOjbt8Hw`}#7(SDNL0PSom=Cf1Dg^k8jS~m=@WrU6YUr8FtO2DK0H*P1I=jSwePWI# zNKSJ5WfKMu%QAWsRPdjmHRQLB(6;m^sZBj&wV3oDNRdPp5H}WDNA}o}b?}?X&rPW( z1ZFX~W!K=e7RlJ;u|afGb+CS-!UZGnn(59wKI#R!dOI zt_EgFSs7j9&%}zuJ#3E|;PoBxpsSDQd(l|BV(s&n$*j%UmC~hS7CTxFRO7@SbW`IS zV%n*KQOcE*JfZl%(#$IhO61yOo${Bn-@{CCOSP`Z%{@}T;*m1@Ya}6GOmIWZwSV}# zGQLZP;Y{+JHK5kNuh!AO8!9PFe=wZkUwbRifuCAp%7+{p7_0p}he5z{xzRf(Uk~~4 zM~E}s&D=P40Wc>fnUFwS*%mAdHdLq6J;n40Zh$uS(!J1Ik+Nfqv@84XpFkBG8xJ*g z=@4YrN>0hjz%zPfcT77G0fdIT$``8gw8y%q$_%;?M?{8Ikbunn}0QoCsj zFUbsxGUZG#N87rSYn1<8tC7Vw`w9L9F6)^4ejQ`33c)oZ!~oA&-{BE!gy3c90TLh+ zvFQHMoQCm9QfCX&FQ51aS;6N7V#-qQ$YU7?b}1B2H~!Q@EPp@+?vjP3H=lonfLl>; ze+>=LD9#A?F9b%dkH4o^Npm{vzHiUlp6pRf@NsDJbK&4@E0S#Kv}&i!g;I}nvMWCd zwPT#Nhx+duMu{;VOx5!>6jS)9{I)BdU{cnYwegaOO~kUHVyze(-B@2wL1-hRk2};V z34#pj#qAK4z>kl|tAK_*-kq8bMRJPk~;mLMnPU+K&1Uc zfbVMBKZ!hyi9OhR5J1&_CuP?|O{Th5?kza!Sfnb3p(rivOC37EikEE)O4Nm;r4A>T zH18rjt7!@nRcZm?ksAMMM2fomPyQTcK6lI2b#I|voePD|p_P}%n=@9yAQ~zdl+@*l zX=ZST`(~zBL&vL2@0bO+qd_5q=E)zZs}D%H2{Lb!@b8iUv2Gxh9LUjdTGHHMa)za? zu$Py{F~o(b83HkpIfvd?PiNo<8$od2nOfH}_~IMDb>mk(h;_v&Wi-{ho&%(hI|ij} zxhdz<;ND&no69st6$ZX4$LnMI^+jyEH?3|MK2kQF+%PEdw&p}jTwwT8c1yi)8qXyT zUiMeJ!opSULxfnt#Q) z?CSkJKLO0!Uv=VDQHi?0cW>`Mk{b7RhhBP$Os>jqzA+^gG4bL=mr_e)&d9r6`+hJ? zU3ScX5uLGFQr^hrFu9OP#U$5hZ(Bb7XC=*iRZ&iYznR8B{%L$`>uc=nBX$lLA5Sma zvCf$c%!KXpJ$rvbXnz(VX;+vEmvUV@gz9bE^A{E9OY?QU?dW{j)E_Hyr!#}v`H&^( zAeMX8v-U|2ztCsQJlc=d^EE+cygm4UNBzzy@OR4-(M>_RzA5HWJ1=|b&3&ycqhM!Xxm^Rn zj|wI=A(1YnF;f4OidvVpZ9q%S^WuE{+MqlMwW#^!p^1Uj_1zRCiM>a1=>tW8Ty4IQ zw|4(3q#V$JNzqnhmdL&Oz_;jkx@-KA4W5b!nlYfNM>)}p`QX+=KIzAl5Kn9$_E=e| zblF)ldaZ_wI5)aKObS20)})k#c9H0|FpA-!OM zAUy4dIpk=yOERT4g~hcjkO+0%98to&8@TyqbBF?u^qwt_o5gkVz=xx_`>7X2mxWCE zn&HX(GXZr(8$UniKzjX)=_|7vaI{LmI+EJ`Eo|lR#m%TAsNuX~>Bw7C^$qKq(e~MX zrzNa9^aG+u7X8(*(D?(+t<9#uO8PVtn8dUen~S6-f6P_pFTrh8C^(0v(eHO$ScS8d5e3d(??XJn+s z(paMXJODze4D^SXqXypESYzi_A5_O?mDtWoac?|*E~t%$Qi}D4O7Jy|A`#w9P^0L2 zildYZd-mCAd&yO?t2-={Kcs$KC$d6DO{#8w)S#{g+!Ea#n1=b}*@I(;*cjzif$)0D zXChU`_^)o%v`E>HKZ+v79c7WE#VJV9Min@?y59YUseuB^wzb%Yq~Ope|XseHkUE$H}P-*j`o7^<&~`J4F^uD4AZkb!fvHH zCe^wSf`3<{oV(Cby)s(oMTjz%ZP;*wOZ4l2&c_^Ke zJ~u78IsYhkUD;)Rf8B*ajJT$}owyEvfd$>9L_rI-_&$)LC8*mH(CvE)9!p_c&qeu* z{>~o&LO#aBd1{P$Y7bU1eO>0+m3CK;dd!QZiW#@@sGFAT+xhI6msv)dSdxiNtS`2+ zWrykSuCF2LeKqo62Sr6u;oslbmlTQA#dgqE(3S>(ca zS`WKG-|GY&V?ig+Jk_k_%#V0*D$~1Hl&&Rj@DKiL)&6*tvF3sK37_-_@N{i!i-GtG z{Rln0g&#j?mGT#>ij3)6+v zB>zB}K@75bBYGAyk4%z#R$8PeQ4`G`($|!DEbt2H(o^Y8%Ds_&C&)d$-3j%V?K3S3 zBRQew657T?J}7dw462hiKSTG-L`k=TF{e=7(m&~(_Aa1vJ*I~tYvp#%14n2J52{<( zQ0SA^=>s2yt8k?&d?KFfPB0(uf=DPt_>?DVgT8!{&sFO3P&Nye?w8kG|5UMfV_af= z)~o2c-=l)fYGV$brG_Sz-qooqWb8*DYi8cQ5cZ3;sVUr%WcvAPOC_qPsNdPC+Ov^Q zYq2moRZYIv=Pu^cxJ#R$vilO@A~4#bEd-u!-tcU-LwbhZD6wdfc5XSEBwyi)*uN38 z3bz&bVb~G!*0?yh!Z0UOHJGH|Q%Dg`=qyKFT@M|tKc)jdrU_PxKWXc+>x%D5nkt-4 zg5bWP1}u29O1v)~^5NZF(cJi)4D;}g+aKU@GOPiX(Q9hIuxP&63sYg4?KasR%BmS9 z8P-jJeW#pR#mp=E;EuHTm)){ka{eYhYm7MG>zjF2s0t#3VqJ*Oj^un+PnM{gYnWa9 zT3hETSyi60?+2DR2K13>C+1P}jZmo-Csp`2ZlTki`p^9WrzN8|9UCk^qD}m~F0U)& zC0+L@u!!&k@o{%QjDPEHEy-eu!lrEj@PF z+`!};RVNe{8Uk&_g*9}Tu3^Kl<9YmDy-xgHqBg}M=^}>`<7|;W9k<5~qC;IPJf?2w zf@7$xFe2%*(s~&prp`FlcF4p+yB_yaU%H?oqptLjgl~eOS@mB*^&1y&C3sAY%Vxc* zx*$QHs%I}a0aeaP+U&H5Ve9XA8CAy1!oDPyHk7NfHg<#6om`N(As_=2ENc!+TQ} z$DQlE+^r^xQ%XH66ANGSpCWTOObC~^nkea$$XNwqb##H0wF-u1PhpsI!LyfQnEWT1 zYjE+%%FW^oo&_hH-W<%IL;O({F4QZZ)+T3R{vVdOkN=$?AELwoy6(~_nJ9OCk_aEL zu(eHop97&R^GZ?s)I{&!5A7$x2-;GUT~?B>{lmHC1IMQ{%#yXzk;6eJ^xl5v-oV!^ zcE`s~2^=&eUsx1YqW^FPfdK!K@=(4O7BuHEG>Fdnu(yb??(<15sQJAAqbmX(p?P^t zEAOwtlc!8JwWIQl!;!jN6lHuEF{N04QXD^sVsP~5)>uaI_oBshy1L7ni6iw&?|L|$ zXC$-}pI6@S)EO>(0cQK%4rRwPFFzYta}J*hA*|1IywlbXWhLn!K#O_!O9h*emZC3P86yxaXlu5Knd z=7@}N7$p`)eR3ux^+t~Jx@yJvr`Sb*gx^hyPn-N-NRiaDX8gewxP}qJq`{B3`itGf zb6_W`VT71$kk*tqH0B>V=)F+`;!KpB)9LyqYBYR>%1#p~`f~O=H+#K$`3suyolK%D z#G_~NtAIk(0@qVL|w;!v`o(^0!njOef`i7sI!S3y$Fo^Ov6Ii*(4$#3wa z#09pX0vW19AK83$utT(~zGwnQ8Dp~MNus8D)O7c;1^zFybOkodJ>4|$tNrCm z#KDPyDc8a*>dEu(*H5@xzdTt^xw+)w`bBoJ?ri;9gz`(YHP6CfIf*s)FhdzBiN^_w z3-IX7kI;pY5=IUHvG6j1|ApV!Lw9PQcq`6UUJP z|L0ngjBamyN3rS0xpT!~D{SyFcM0~&5R7d*&I->{_wuJ%2&t77HQY(>e}UtYLJeJe15$$vY*Yj13!R=w+V2kt@Y@i`-Kk zci$H`6)u!XiSE~4Y(s=B9kebD3#(So4RW!>I2X3+DVZ!%Auz^G2^Kf29D%b9#r;Aq zDU46()p3TD){}?kv1hN$i}bxZV!PQ|m+4?-(s#}_{YYE)R0p)Ms=5B`bb5H3q~l1ubt)0|L>LVgse0Rli|dH0P`MnkE8*D(ye?R1~{m`c>F@P?u_dpZz7u z&`wmuAZiqjEx7$eIh5{Orv!QASgMkLojTSldtO_cxN^B%hT7fgISDbpY3?tLBM+gS z$YJG4&i>bvwIq05Rm#dOXOc?=9cRqS^+ehEtV`ClohVDOBPny0` z)7ky2Q-oYgcLyRMBb{USkxz$Ewgb{=&Z5H9h@SjovtS6>@m#vFU|e zLe5#fUf>kLl_s3m&=iDzziJ<^1K$`Bf%)Sc9ZXDc#w7A5@k>~eI3UU>P*_4c9$0)& z@J)2>U%O!;ObIDODEp?v^4hUa>}HH9Et|-%9g43Dj#%gS^;W~&b&F`+3l9-`KjK$s zk_*M-iy3o?MJ}H12Hu$z$(3YvKl2u&T+_;g(iJ1)dB#-#!B}TX^F*7S!6VmE;#SL7ZpnG@#AF{|O-KpZ?>tpB9z zUHwI60s!pU?JiEqPoDRi^C~b4lQypo_w3=(S9!f@>o}EK`a%dlSmf#GbZ!(EwKORa zJM~CAC4VIs>O3GN^(x~C$%c$HTo!MU=TK+MOV9V}3hAryO>@g}%vok$nM^)(5A zm7Uhbl0}e$=*Fb1O$J2s@lOny+YQ61nR!W0j`^g_%`BNrj4@h9zo%)o9jlyF(}d5O zxw$?X7bQ9EnQn^lOO}?0q;kTel!KhYAH!_3%`-!9Kv81m7>2@QVLJwj_+_?0ut~Y7 zAlCNP$eD!-**qVQ_Q9(W(N)@>PdDo#U$}Po?=F5yiMP&bTQGCBiy9_Rd_Uqso@(iRJ&S@-QvwcobZf^(Gg3qGgE5o0Jz58AHyyPAB2XxNP*4ve;tUt8n<0|3M#tSKIxYmW}Dnyvnl)_h+!v!j` zu@kV+HC5Osa&kZ}4BGOre*%NbH2i^CV8QXOIQ!IyB<4gI+bA@Eulni6$RiwZFX(q8!#Kkna-SKNTS_jbv`)uwV%5(gsqFN@NcqBd|{gZ&&sQA z9%=K~sYc6rY{z5F_%U5xdfDeQ36SNt?#&`TbZwQJm7PP`v@X8z^2M>%=w>(Hg3p`5 z75r0wzrG!2jMLwkZ(ERZm_CZCo9}?#T5E)@cbHRX-bv2Re)cxr6dTwKI-Q-vN2>$o zWi+1uddZZVG3P0zcr%umVUx4qS#P6n*Kc`1+TF;~`;iv972lNXzKCYfunA!{$jPsT zsMR@G+v>)%0lR?I41vvupEpawzlqlwW{bNOyriivjc4PX1Kp}pmaBAP*L@R+f%BH> zo;l8qC4X}OlHn5J0qfk0N7l_a_s?Jz%AZL7Kr~EG52JAJMN<>ZOul7=D+#K$+u~hX z8#YR6YBaS&Z)8>6KZ*7G91~Ak{1+)^60>-(3pUv-Ej%D;9;-yJmS)#+R=nMaVfhY#rn(m0eB=l`Z2I@kGrZ(_7z zViRpx(|zQW*7#}I_445F}T^3H&|?-GqoXhjWaL($-qH{mjLn(bVa zvBfvC5qm54ig6^eTgVihq>|vx4`Yn4iiB~+Xe@E#43DlHNPJFFeux-?<(uBkx*Oo$ zOH3@RIECUJ9Iew5dt}n^0C!08@TbpcBMH?@r`?AF3^*8}-NtNoSXFUx9BV@epW->X zSDqm?p;P#BWSIIV8Hof~RR-zAkV1jg_bcw2GN$!PYBdUe_*WVfPGGOQY;!gIenLhX z^645iWo`bB()^&)>c!#Q@M-nl*J=sfGVMK9e@Y7#=ghZw`cL8N^0-$SLa*I@rP{zb z0dU``m_I64?lkVG%Tad{FmSo@=CLb*Fq%G)&~v$NwZg0{Q+2d%)mh_OK>)QSvBg2l z6_HWL-7Nl(k+9e&wNr6?#|Nez#sTL=SxPVLjZXf7JS(R1`gLP}vv>7)0{bv3>UDVd_!rq%39tY1r*>)G zy0Y<@)@j|gXU!qKSU$)J)0_&$pK(9MZrPNyXL>UG;dy7jC z5cx8iwFmMf)!9&-m^rr24pIHWa;TSGE7=;4W0XN>@nA}lhOkIUsA+!Yd~YE zW%XEOT>f59B42p}&br}W(cJ5IZR;z;?^Ben+dtc*H*!BbIA%dz(*MI=Zhu3beXCZP zG8$PMH1V}{q?QbXDyHI38MNGJIy@Tc^RFKk;;DPVu!#;!3Lsm<48B^ip+dv*G5(KD z3|^@k`L2JbHB57L_~+J$nK9<|Ih%wx-)J;XH>x$Rw*$dPdhCTh$yzgK`|7kgq(~Va`15?sc8qT^J zW~3Jk`Uw4VL8EOz+EBysv00v(Mv1lijb}L($I^QRFI|s|>n=&SlUR7QfXAp-HP0$& z`Mdpmmj}7cvgzC%JWN#nHs7`E{n59v1962*Jj?tGAyli+=lpvPxr>y!8AlDiz6$x; zf-Z(`251o$(_c^_*;(*#WYK|Lcli=ICxrc}oU0ul4*PR^zk#iw3=0v}mTwd-s`XkD z9o2IzS!%Vi)g{fR--kEPNpil(uOg?Q&Y60!KQ(yuRJiBMl+k zIFVd~I*YoB5HaUz*tBqIlSk4YE%wFuXGXd8Rp~o8Mi|M^%u=TLk##mtj#GzgjR^A) z9`gE)AXHk^kIE%2=e$MHg^CbQ5teB-lTC48+q?^J!)AG3R8UiBpt9a7VJ`wllGK5mp5BR z&Q%i*uw3RKSo5jQqizi;C(7D15C4ci=Ae#*CTXm!zxEtKnOI9ig%aP|%1!7c^8K*& zg=#6)e8%(M;H>UwiJ_x1o@GKQPMgQbgP%{RvqTx%c^79-Xz1bw6!V0ejisDEU0FeS z=IMpTur+)EE=799uV`crQZGi$DuI`9T`7AH2Rq?fad?ebh0FJFOJ3dSIVytWXN!sa$0ZD*iqeMk+WGiP@;0v< z(glS4F_y8m#}KBTb@>YXVaA?Ll|560Na3qj>K~4pQ(jyT zUK)@{Y*KM3xO6_%91B3A>aO^rub8pyHh=UdDE4lVPOiU#ew}{DCQx}fAzGuk>9ZvN z4r5PpLyL&y3_?MYymmwG>2VvMbpsS}IeKH|;{s;vJLl4eZ+_LSr{S`+prMt%YwPxU zkHl(xo^i_^mZEfN7PE@t^9AcW9Tx)kki@vVORtsN!fok#{h|#ov+cM&aM{_xcJ|8n z$>x=oGn#y*-KUbIItQS3-RZFn1?WoyQyVHrOvfKtKMYvx&fMtJ%N22&s(%wNB_VT7 zSGb{y*ZcjfpYNE7?n*4fpD5w*h!wxec?0YvI0_Ox^QLA6+@F^>%j`PuE@n&~R9i1E z_sfSsmlPe91A*(MDU!&w`I^SP8Tq+Y$FT893I4&Rg8r2a)`Ff~Od&c846|;V&5Zou zv#q_W-G|PEZoH+zLtfKfmTBx$Ish?XQ(1wMbFOH0iRjlC&$1>IysnI0*0N!fFLav_ z#Dska9>~8?tvDP2{IvH*v)8RAIM~Gm+ANUnxxO8PC@C&Cz~(58Zn%8WcV?g}Hs;w6rq{^@)@n{+_*Y zk+yH>d*8L8?+sGI!oIFe8K-=tADLQ3d3Rr>&b{Bv3l2`86yj~WhU`_kj5aecv(O=S z-oUpRzyOgJa*s@`F3?HpePb*Wv44NFmtXHh!>n-A3(v(L@#0hMg0`JC5FgW`SLS=Yfqw5!FxaBV9c^HxCUFB`&w9gjyX@{9a4TtTaoGaPKYjeI*?t zXW9{l)|UGuI8k(<;qCr)@h$<&aWVysn5u6QB-8N6oP%k{;NP3?D9z12!h|_uFf8QU z7cBR&lFE9b3(}NoQbVs#cEPGt3yu_@H`T>;U|dpX1xsgtd*u~t8(cqDdF2HnS8X~a z4vsyi_!0umyZ6R7GfzK$ybgo_RC9!WlE|r zf=TbvOP^m~ko0zaZn-hNduVXtG|TRvAhnT?ZmHRVp?*^s6&B+Vlc|e##CKnz=T52X z(N8bt6*S2qQKR9HFr?zs5iC_#@qYpG>$^S9W9pk&xTm|RS3}EEli2>OU#1$X?51D; z0#nYr0H!xK+hJfD zX-!J9`^Vg2WBtkfg&1#9(Veg#uSr79<}-k7c*G3k_B#cr|F@p6TlfFlGLEnls(tgi zySsmSuYr1UeK_`hC3vK;5KP92pGEI_1x$B=IPr={ZX|8xEYQUZFmlAZ7Xt zRH){3YL1BA79_4%*{3R#z>YP5d3QiXXPoRqGAW!a=Kot zVaUirN$1XgbTbq!f`Wno`&Wt-Hlwa>qX1FDewY9V?ln82Cp*^r|GQ&k@v|pG6g(kJ+Dg`f3t&lSD zRo-L36-!97`RmuNkB``--1;uq_;smSV*FeZsemYW@e`-rREz@6z{u!1pa7KiBo$7%g)p+m*aI8VX zrxiS66C}@#HsWm7PgefXZdfxv??WY^^`m)Y%r0NP3p|&1t?dCc-6^u(udm1Qi$;yL zDlZM7AW7WPZuy;^Tf}#=O{OL$Q&@AmMBq}DCg-~dDv)pA6m#jYYS@oPfePoYlkg?1 z`9NJTTH0eU|4R6Nmrsv52Fh-Q9}~ANy0`ZLdA>#59I%z2)lJEvl+*xr`nGtNloSQ1 z2a2-`j2^ugALbR^wX90C6|4(2&07uepV!ApbLf&tUu#?2j8*zY&Frfd=oja!? z;nd#CVQ!tpCE<8ZM1=CvUG?f!Nw1O1Z5c|0;94OeA)+q{1TbrRc~NzGdb-K)%h$Fx zY|U(aA)i7(eo>JQfDKLik*VlmGteQ*8$awpU^#6#V>z*5vnw+K8&g* zB-GWKEFtAHuF;mRV7|_vC2l}t}e6Tpz_*p`wD zW{wT0c29{-jU*Vpd~!b5G&MDaMMY6G+Jp2Lg=pZlgqf{p^p@JGu<%Ih*oAzLIPLQN z+b0YSL-8ZHqXE0~tO;<-JFD~ZRp|OEkPIH(#b_duP7Kz6UICr89SR`0lL_cjvHBmk z;S4GouvdY}O{@*#zIgiqfN>NvXf^t3YHF)L#$u&FquRixbHT7LpLiGp_$ND=&Bz?i zpt-Q~6Dfh|z`g5#6>G!cFNJoZ}YyaEarDwq2D!M#7T*@4i>#IvW z509Rz0P)n55d~nTy8zk7Y@ZE!!=})gGiox#!0go}N}gf%_37BKwd_idAz>hhRu)K* z@h@@A=Jlu=-A^4rX+H-Nsi28JSO>Ukk@2OOpi~Gj-<3Ak7PK@pI#GDrLLk0+e?&I{ zaW=I|DW!*Qkbo@g&e7zSbbc1e!h_IPSvLX9r!FooMEr$YAN~bGfM_IUHbRH|lbE9k ziI7YK)!tIO2FTvaE zAQImMi3GtFS)^RJb)P?M&0A@Gu}4c!Z#iQohDSzktSJ`%TI~r~v_O}R+Ju4rutd2g z0>R0gpLv;~ma!@u0IFbD3S@|hTr${bFPAap0H`&Z2rFbttFp2SAcg`U{Zvy|Z|UgJ z*UK{o1g;rOfb!y=#hE`65dC>$C(y9&h%p+`VR>YN-*P~Zk z%o`WKJ&uxerOhs_;ABiqY+n^nGI~`w*EAUmMirO*@9|rCWgEQ>!&S7E0+bMIkALP8 zt|6?-0^Ck`S#Noyqvm>SYl9gy6#k}?-!_}MbXJx|PQOSFub{oVZ7MsIy@ueN>8TRf zMDRE+V)=%xb8>?lOq0v6Ssf|uQkk?aR%x5crps)YM>wqDlA>VFSY)DD?cCLfsHj4< zC&v!4vYG*k&cE5%uwZ5Jrw#zZPHzylvfRkX2oPahkKru+IT%5SDgu&4lA`3CRm>6;iIP+VBukboN)RMS63ICy$r*aA z_dVb3@6`8p_3c}?y1Q=OQ|HGy2+yZ`^e?6ko`1thcrj%QiXOA2?f)?)a z$6di1JqZa3MQZUcoB{}XXcj^Xk zyFUpW2@IsUR0TL?f!scbWLcA_`y&~z)hi1WkO#Vm8J}p*J&ZRka9a&sCm1VQDgM_n z58?MznhsY~Q}0&d+;W?CoOh$=CWY0aOAb*(*07P<3tMf{>r>AGKQL|vNS(eL&ZDbbfb{hV-c(p~WMz#uh zY~)CnmP)f}WL>Y0kgG#(Cl4WVyzwNLUg=MSa+Pj=@+Y`xY4Y)ipnIsOA~tNJ{@!hd z>HQb|{rxk>OIY^ehm@kTr}6lz2{3y3vd!_FGm?|%2MIdIYY0c=LKBmcrf}S%-o8DJ zUw%81IV#Fy+@hAGS5}qhvJtC(Vrj0zS@HUHznj|H(KNd;y-&)*0`3w2_hfZ}cx&}T z9DA0+ZvYg8%Z0=pG|swWoHh1X(4y}xBHAs4Ly}3Eb6?Gtu*Clrn2|PWQ|>5<%yqpk zDKGyebt?NqObn~zOtZC0rd2F~T4nxR5-dt_HLeG^vNT^tmyzc-nmse%#@F(5pf(!Q zuOlCAr7}QDAdtfI_3NoBsZ*G>FDvDHvKAp#b-1A2%WDtY^-rhC8fI7yazhtjrV2uP zDz{++H`@Kh<%Gu`?%K6$&z?OW@PZOueSH?d+#o^ADiVFt&3gyF++W*LG5+@LVGLoo zRURlHXwr6XBzs0f-LwF&cry#zPAmKoSHUbGpo}+Nwod-}Mj4Iguaa={(XUw5h(@DK z8A{QdJYX-AZWg>q;cO_Y8F^Lz znI!Y`+NAy+**0^&%yB1bsg9CJyhH3Vb zog?vHp57lk_;TM{RjPA$KewfBn!kF$Ghd+kl-`?gA6Dg~-`HyizV`NJLO@wwUIv)O zc^i-GP0%jdPS3y)g?ND@N_OVdbffX$`xhspI3H#nr)Ol0MkYo$5YjuYA5qQpjeQR- z?MZ|~yvk+$#*Oxk)r&0WzrCgFY!o4SIlW(bkB z<<*DBlyq^8#<}q14t<=GTD5xhYI35c>h(kVvC(S3KHAE2FnYaiz^FQyORZcM&Z#*w=_uG^JI zP=30)h6Zyw)voTwTVk(JP+fkwrk>(u&^N8#F9N+YMSWZkeoP(;2rnL7vJ0w{s(?2p zy~4$2#9VX6vN^V;lMP25Ir1mK;(}g)c@oWHY{;whbO9?XE6FuHY0bw%E1yP3vxJ9- z+t}K^3JH<3w49QgR`1l`95^^-2e4ByJJzZE+2n|Vfe+S*${aTh z4a@GWUTZWca|dAieAv|lY}Tvt@*LD|Y8e*K5LG#G{t!OSo;kA`SoUXlu6l+=UUPF0 zstNMu=t(;fQBhGuy~ht9t|K5;r>Zq7fsTg8H7H0uT6EQM28NEIA=mi$Q*Lf<*Ax}W z{}B&;myqxZL87C-|B{i>N!&0l6=OHl)YX|-SVCiBTyex>Vq^PTvW3J$U!mN@HrkIt zzNx9HzZ)^I&Y-xY+YK}6AMQB2$oeKAp#GEATJ1vDb^!K> zoE(hpTEdVRQ2#V`F1hHnwL^pPmk_d>IrZV_?8s zAv{4LD=S+vg@D!Hn087%)2g7p{(ziZ#lrTMtnBQu>1pw>tESUK%7{yT{H90EdrIFW zCwn0|gcmL(Sh0iamz@FH_OLs%nw{#RwK=StE}9atpWJH zJ~%jdc46UL+1?KrJ%jSh9q;Nv4f*8Rv(2d7DX6(OF)}hXH8p+u^yzeTt!Hqs?8S>u zIj^t(Y%_M$Wg}%_LBWN3`^jGh@<*@+!fFUROl)kr(?j+7`S~}rw9Z&qaF>;p+1T5g zPxf808g3}S8NDbieT|_tF){H36O-1@w`V@q8mOtM*#L)PY1f8|yS@MTag(p+WaPL(q(51FW*^eFA;(q^R-u0;1;yCHh zp!7r8g7Y_w>+g?jZ}E#N`&r|A<#N!s$~!{-);8Rl;Z7HA9XHo|->&J8>Tea;bZ26E z(qiaIimm-i)9SUAgHuB-*#W@ke}b z(y}sJ+~>uM7uyg*@Ia6*Bje*GBC2=N(aD`Yy$U-mO?{3|T3VW&i|bt2RV@R9C^aek zGZod7+*~o#|4$m{5ANL?rt{p_*EdP`$G$?>1LshkjDF|M^#z}RNf>^@wwxO&Y4ZyT z9=&Fid#@Nh*XBaGAF$w%Dt8O>oG4BfF49lXlG%P{1R10|*zohPh#A+cQyLpHUdW}= zJctO&fnP(k{o4NRi9d(-hG@mut0lh!0s=y>MzRA&EteWDgkbmqhtr}>hDATQWp{V? z{S+JCym>R?r@y4sJa=+=+xA0(=k4qSQS=Ic`MSn%XGOsvMWtS%?N_Vw5Y;CnF$V{S zKVxHBC~x@%1ru#2^e}UIcG%cC+Upf1C1o$DlM?N(4>ucXZUGj=i-9i6$})(G1_z7S zGe=(oOHv=T^!AKP1FsS{56=}14R-`GgOoQ_RabExeKnE0sogekad9;@H@E9CsbVkR zy?gg#RMgqf%C?aack$3OVON>X+>eT4zQ(+l+D+VlU2a%b7ENv0ULL#b;HD-unnQ<1 z=P5Ne9eFq_aJM0OGcIC!r1=N9i4nn{^SSJNd=jyWEY2$lE>ib&fB0~q62_}2E=oyd z4jL4IA~5;WcBb3BrJ^E!n8~`kukSl!h{IQ0@O6Y!`{|+EQ}cM|8Sb1pWCBc(MSm6Q zpbb&c(cW!Ku}cqtj_&2%IDG1q2Nv?OlF}26c%^-NYHDhJHZ@6~JLhusSHF+y)&oM8 z1MB#b+70jC9T8}wI=kseemuyp=0B5@`9FTV0CMOY9c^Wf-tZQI zz&YQO>Ry{K-2?5j^Uxs~2M6JI@7|$=U3>6g0G)`nIUm3jEwWlkVEGblVnoIcd~^e+ zlIr_;d(oLg!a=lQ1wX&mRvo8_6>M++88B30VPL6}QE&e`zO3U$A#dU2o8pXD3;m77 zbn>r%DHpD|`acuM9diuW7OFjKp+-aJE_l)UNsHgdWe#V0+CYtXeZY1a0kelF3txQs za#}YSQRi~~)-0gT&C?7F42cG{%twzN^#hXL^)m-S(I3C%Dt>H(%Y8g5gFAP|#>Wlz zMrU0JyIT4C_eF#^yKGuFaTnQ$b9hLG+1c3%2xIYeN!VuYv?2{rx!_ihGcs}+w+N$# zx}>H?W8Pcd4Mc~gaN8Hy?403gX=(aj?ydIn_O5JNoMBr#5}uV67#_}`TQRk~guwZ` zJNrT9jJ?Oq!3i-SRRAGqRcJJ`w4`Tab3@7IG~2#W*Vs&7 zUmr>8(#4ComDev{p1yQxGjbuq{tK)EDnhSk`Zzj(?CDm+)GDz)xF@E%Oe2~Q%W!kshH!9WysP*_L_}wI_XSDGEl5z3nf9A0C_a4r_%u|)gY#zoCL9V7INcyg zQ9GoGEX7I7$f$bX5V0Lcer4e2=f{Bhhb}HIiDLKhkt(tKVil$C-bF%V1CCxTBqT(! zVJ%);mx}3(G)>TMo`~m`|_;YG%YGj@FS1St|8&!+vb5e?CVv9B9ry zME*L1Py?{g)!Uo4<>e{WR9D~+1Wt+89LLf9LsR|LPk#Ttj`!?&^Y`|c}7cMsJk0jYTU`8^E@p#yBe*Hq%1YiSXk053Frs~C-3!N|j- zP+XE8_Wu2Yo*q3s4JZP(Ivr+j!)Qx2L&9%FNdvkz%$At=eDiy-wjO zvpd9m?YFYvD<$tsrZTJTI)h$Jsx?@LW<)+O9sl7~+j=-@aSMJab>DPy(x+~RcD`#o zURvDCBKzy}8V+!!2t*dNUakAkEmwl4{Z;TaM#WDQv(-( z@c=f|a-D((>*BE;AIU~&qe6B)B;-T*BPKbgJFJa3(D*&@57$*y0WZA;&M`7ZWHPKI z8@JN(@$sEh`+QnPX4|u8&k#h{OGron9I2!%0sin?kI=+JD~Mj+ux{Os-Mi13nQ`J{ z9zJ?BRw+TpfkK{M!-lUp!!k53&Kft1>E>CW0VZ*)3bz+k{Rh$#7o4|PFP~r8_L$-TY6dDC)lOirnV1)1$idi4 z2gIC&QRiMue2;XboZ}$C!ND;*H(;GfN9i8yyljg!3_uWNHqmHiYWfbi00E1c zzDdG^R>p%?z}H`>Vd??U6Bw*Lql_`F7A+?o*qI(b)-CFH{Dkt z`;T#PJ)It6h57mG?CtHl={|aRP-;5O(I4c!`vp0PfbgCk@eonR*^U>dY(TbTJSxVpU1rgs%oq@=!dqeXNL%k)Pi$KmR-!T{%1o+v$3JEajYf+Ld%) z5M8vkT{{ci54}Leuyr5nms{MNND5)b;MuHWWV?H4#gB=*e!@ zy=`=~0xHk-Y&#x^dk8Uqz8~}WC(YB!1Tpx|& z&OF+(mFpmb=sa^+%KFk5v}Il*Id^kDZ#ihLdNeEimC8JudFZjvDsLV>d!{0pB6bhh zWb7NI82g=Htcy!aW59$!wVyLHxs00l!Hogta{ZaWH0jZnTin#BGn6x}*z)r7W@l$V z-N;)5f^v2sI-V43(3;-k!zd2&y1scsjWVOJF1}S{?QcZm-Vo$D#*n+R^4?SD zUhQ0NQ4W)SRB1Ee-?*ebVYwFmiJz4@dq55#Qw9XhUJ|FxTxHqnb7nxA1J`4G#~GmXVP=;xBS$O1)Z#I1aCTk^NzS)Z zP}mCz>Lhdt?lWi3T)%!jS)^McQ{%GqL|N=drz`g-kYJbpJP|WNX*e`AWP=Owhj1b1 zqp{LDf~`t6E}kI1AE-p9@8`R#PSU`(=Z+ma=JNgfMLby`TpeWa$&u!TchoF>7J^nI zO_vlE_c42K0RqBDSQkB){nu6hed%(7Rzv%Xi;J`VeBEj>P}9%oU&KT0Hq@FM0&WrI z#M~E!6z7Ed=KuMR{=V~$UK9Ja#R#U^lmBTc{BpN)U#}~F^j|(txaPRYf4#DfcMSh@ zFO)o+1OG0r1K z4Wf6dVdLYwQ5zk+NJYnu6YABvLijBT)duT!vWe!te#(rEPjW^c0Gr}p|u_p0ZZ>b_-dRs zzIEHaq{5)C*29)>c`vtHw;^S-f?fZ5Cu;}JeqE}SPRAAFuv&w;PP&zgw{D$)IB~Zn z%O5)rr3J~9P_$6Kk0FHsm%3@hlcE#>oEmR_?x_gDE8awL^=mh7-$6_3jx>kAN9p|z zQ`YZ5f&2qe@?~IPDR>V*F8%HL<$-4+s;?+0T+q=u4qjfXBmdcl@bIdtagUJx*i@u6 zeH^0Lc~y1w*uaf1eS8Wh`>UUMco{ZeWM&0K9)bKIxK_)ScQ^)fwZa&!)Ji1W3P%6HmZ(oywVg zfb83O>GhLKS@`~ZGp z&Y}zqxkK-itgLvar>6n!(nOAv-_T6=@!2Q3_~#smzRJo<8eyB4DEZ%CjkM|U*XOq! z*rVw>X zv1Z^+bh?_wW^n38<-K{+Cc@3cXyyhZkiG^d2dXgBYWQZ} zgZ0=6E*PzHQa$6my80pThoA(W`T6Zfoz&{Izy{3TH)RK*`wX&6gj@&%D=P&EgU<&} zxW9Put+6p6Ihh-T4}m&2*l%!C#kzZWc{S~H{bi7Hw>iTb84g>Fotk`O>fQPWiqX1I$!G*EHfd^VO3SQ_ zW$wU3gX!R7Y;3_T?yBFvzvnnE>=!UQ4opXX_%QtK+f%l*_4f9XhZ|s=Q;Y<0QBJNG zv@WQW)u_mRKoFCWk#Vc)u>$j(Us%WqnISMR@N(oeL%Azz*>>J|sAEN9%daTK7GLgW zl>LL8Adg6ZtO6XaRqRQRKe~GDT0Ra8Zu*#rheSQ}c~E30xbDyMW>IRG?4wgrQTd%=$wCmr{JdFD=>Z&WtSP>p zL?K9B=cS~699mie9EDW&c-%uD>OQM-;zQK>qVs*n)~sE-dD}L6X67xZ;&67cH}vzL z?krizP{;m&*4G(i-J*qLa-QTCN zfl!-6o^!HESO)Ms8G(ZV8XdQ&cd=aNVW(v2EqJ4d`~f+Iz`FHmzJtd zqNvk8Fh{ULtrZg!BR5|jEb^lAmQH=5ZfS^E2xunH+~ukGuC6Y2}`ef_nUuUyIVq?ZClC<4p{tB$(W7QlRLW=0=Ds;j%Z**r`e z9Fcsu^cB&S=%}dcxlSTT?BoeT&j;9mv|3_+J>lkh90ZdI^I2~tjrN*Id2T+wB*RAD zv**r@O-*$p3R$bA;rYVHwCliuOIXVghw;ro9@s32PD^&F#;xTj``{7V1~u#^{78%N zQ}i}lx6*TQ$sZUxiNe17hp+iS4b$HMr(_Owem8`e3y4%yR7LQf{1|m!vBxoeh&i;; zdC4SO(r&M>ug8r7v`7yP4-;hG&_L}i`6x8>m_Z74wuVPg(4q43@>qt<@(?jO1P~lT zKuvrHoL^sBT7sb+y$TEj?{+SF@b5r!4S_`2UhfF9NWG)wT4TD9v+g}YR_aTB%9`7B ztBmOO(KtRXeZFV%@jg-E8D1$_>25yFM~TxzXIq5l#fB~|Je==Q;Z;{F9(9)se=GRJ ze6C2@%z;_p&FE}LiRNtC@@0nM>2_!MA@GmU^p~zyap>~o$;OtJ7HpumS0l+@IeGFVM3By& zo^YM_gH!XVr{Yhrv4NS|hJXWWM}9}a3sYlRnG74yj$aX%y zF3n(Yc(@F8p?hpB8xeF$N}kWp+tFWiV)>DUfMi`-C&17D34WSjy8)({n3z@HfBZNm zBowfDH$z)T$9va)1P(%-g5K7FQ!Hz`;f~}g)mTMsUEN1upf|XzcFDW<`t|OVloZJT z6vI{N=K9^ss0LqwV3L>LEg0mEy1pt@f-;QG5W>nf6i^wEC7AEep!R?WeGJKsr6Neo zIT+<#b*w6%9ry_ZR;b23uOw)Xu(Q9!uUA5sUIl{rQ&JL$lGRwWl-j|?XeXa9=?LC9 zx?QN_7opX5fJ?llps@Nf@@1Co#4OyM;QkNO(?24)(r(H?SNE);AshCu?w__i5Pk`8 zh}Xng|hmrk&<>cDG7ae(t7f)q47QtAWj;F;m?_KVnY)6&usniHiIEvsrO1t3v3 z-6Sq%6#-??W@*HnXxzlVVKF0PV|9^2OM`@{u))aXApnq|WDCla6uWr-vGXMPFA~FF^btbhCV%?0KFF4K&c((znLS|oOf@i0<=?Vt=n6^p<`_<5*sJurAGl$_85 z+63pv0TL5J2^fOQ%>78^rnq@H2A<E3%)=p*h#m-?!8 z!_rQrSqPg;{4HO%sHUV)*P zS}$r#tz8nL)EfS{#GPDYIzO)!E<7*jOl!M}aj<+<@_vhkFd_?P>UBAQBHBVjQ?V6Vy)oZz^-LMg$N|{(%UWlk}@9KIO8Og-#{Tz6P zxwqMDxPd25BU=(=0?7Y1QdZU{KEmQC(l@OJL(~5|;TSft^)<6!gHsUX8q$nC5J@1k z6+uK2aDp#Jr~%55Y>23vWEfGj0b@<^p|XMed59OL78Y5zp@H(6n$C3#`t19ky1PTm-MMFvMFq3ZzsdB~ zJt}xIzw7Inp4BvElJVnd7LKSjfP@z{chBv7~k7Q+6T?Go$*8vtz7k zpI@Q|(0!1h6t4lIxSeS?6_t21zoFsH>a`o1eg*tO+5A*8>}Gd~H>#DJ+|+ol+%9~BE__$g z{+y2(y=(q|> zFkv^4K&THMjEspP|Hn=IoVNBc1cQR=>emo7AUSM?{Y^3ab4JEhMMZICYSxnSc@4%0VZ6 zg9}v7(J`A-5lc~s{Eh&Fw6!14P*G8lf`vSp+}I8Py+

z9vLLQgO=pAEZOJo{Hj5{n)!IoW=z_L&6D!q2>hN2}7bYIyHda(lhwqyA$x zAR%!_N&1?B@FBX;jD!a<&##r%Dq19)c4zRq2$#*+2u>GB8=g@tQ1A&3EM5%lOjk7Z z-=NMW?s`2SP5Z4ByN|)0M3(AX`bHA*?xMd{t=?w3@P!+2aZl;)xz=kk*&y3~_Fq8yC%#E8jA7GR2 zlE_-BXbOC-nqsgQNs?ke`zjP|Z-G#=d&iD@v9ZI3O3NFu z{-vd*cw&StudBj87ZkLQj>@5bp*?k3{K5q${|X^6R|qELfi zpI21$#IP~79f~%(97xTamb(;tRa_K=JkBnY2M}AbBNO}%IQd5)Jc6aSn;wdcNklQH z7d;JAqd}uuWlha_TU!CBC%Ap=$lC@6?@?0%bz@mgtgW8}gxw7a4EzLi5EZorN-oYK z1buJGuyyMJDzWhRRoz{SJ}@_5<5PNwc!S0i5|TT8FOcJ&{_mQ-$~Lu?y<|md4Z26g ztV}k40?PqE&c*B3_oFVdRuAI`S3(?n4&`{8ONvN$9H0nfT{&_9;M3Q^?upgNefxG5 z6sB(T9F#GrGJgL2dD_x4Wmi`G$B*{{?%Vv$)WCrAHZE>^wnjYbiI0(y@6yx#q3wso zRI{b+>7*XGzj}vTj`J z`KcL)5g{8v5y=ZkmqXX+RyXa^4Lsu+H0|J zhS((6l>=P6&7C?Icn^vf{ptVAFG^$ia%6ip$CV}RWl3TFY>f)Mf`#9#YZK99P%o7T zBLuxmq_Tlj2T91!&+nz5-*>nrpdj6V7hm%9!am5?D5l}`LK%vu1zcG0<43eY%=kWU z$qU%Zpz`n>0iFbdwx_7XCQnUI7Xnb>yRg#)&;<~^j7R7RP7R2f6ec)9K$X5=;F?lO zy4j43j7t0v%7T%)5Jkn!CtA}eJ_lfn0I_?C)FD$+@@e~~VavzHbQK;g_ zsoYW^X2Q`E|AxL#CQ2e`K{rUmm?-5UskJ%NnhRhKl?gi!PdC5>(h189wy_r;Ex5RE zGp)`Qs6=HzpRdT7=ZO7sDU)2eh;js_lQ#TNXeqj?n8F4GjJ7dYp?krNU7lvJwz4Wj zvPIR6D1{RPs;8~9^Bk;p-^@WD+OhfTO>LI*Ot$~2`NT8V;Z1WJxKzu2dgkdKU zo)1Aq8pNN5h6Yj9U%h&loaqZ91WX>k-Q)?t5O~5Wk*$usp5&)y|Cu@@85504Jr*%P?+Ot&!QSf!2{|F)r>S!85ph}R3-3XDBI>lMsCLW z#EPK?g9`wL0P9-MjlJZJ76}!`9{< zGpcIu(E4U^YI3sccY=0oAsuiTBGGF&5TxLj)MoK zu3ULF9+;BCgE%7DiUWd}VjFFhhU;f{oVOrx7LTQMAiLrB@5`#HQYg64+CjG0#*G_w zUj(Suw?UFiPENk8tb7R<4jqQ%Qhj~mf`fjGvT4`BgD((!P))!|0`gND*%H8mSQxme zBje&27#W|S?7N|_&$zXpoaQIjAe+M55GZ2r1FHaX=@`T-*bhMg5<>th>+xg9)58NpPlyWALJ9Pw>Z#@ zHD8*ygbW4;#ZW`a3$Wnhlhtx8-NnXkx(5#)WWw+9^6tBH=T4153a5TwSC>UyR|s(| z_4E`%ZbsZZ!ol$h&$O+t?;@(2=+sun8B)4*!oLkF8?rC9Eir`wUgJCvstz))eT8Fw zdiws<|0_j*<3B6A{*LJeI$kka*xxQ=bb63J5gw z9BlgaYaa_swBkfO=)z+ty-}C}M1ph;!%0=kvU!C}kGNH5FnHn~Ho|9RtDIrAk(JsY zu}Wu`Bj+BQw0~U>$Jl3R`Oz7(X=v)C9vK;Nr4tJV7Gzew0`Cy3W=q_Zz0e8w@NBpzXbDgovUj=Fgu$-!?e-10Oq@x#oPVA{XogxUb)d zx?5p+CD;?LIykBOYa(AKR^9jBEVZBz6A$ zIuGITO%OT?U~E{wbsy+>e?H^jsx$yYA;kzYbIQ=2$HWN%UHqESU(nJZI!|q7c_|Vq zC!X|mWo4#?S=<4Wy&pPZZ(&2$=Qs+Xffhr|X*wz#M601N45X~6@6zo7R zc$pZD>^DHxs7q|RUP=7Ubryrng+Kj?1CqIYmdJZ!gJ@3tiWK)d%a&{B&Yh$-gTRE^ z7T!MH?=O!?2Mhb7%@euwN^~tQ<;vBoXMrJ9+>U@jg-v%;eAf6DwEYr>D)Bn8FzyhG zj<6Sf;vvOO=d{2Z?Q|OzAv;J5(>`5u{lKmC; zTbaM3{r6VXp>zdT*-Jy1UPI?w1>-zd#@eI~j;<;4eT`0C!Cee}qG+ip5X z@2ZA1Jr_LmN@z8CHPs%urL*nSsJ_Uy=nR={e?sTSb7voz zA|m9YgN4{#_>5>EaluG^04|rxOlxC+0RZ(F^-Lcav{6xB|8!$DV1fghBPr-a124U1 zAdDPnF>#Q_a8kfrGa9`5Zi-47dJyGIO*ycui8urisJf=cLZT6!GjW=^<*3e7r)Hcu z3KmSQtf2l1(D0kwL%W~0w)Qt{*wKI!on2k|#6p8JzloBP5i%&gEG0^37+V^Q4I#UU zlMa5Ezf#gt^C-Z~3!HhB3##-xN!w7p&x8+1P@=%09jI{BX-0^&BVs5{IYA3J=ES=} zq>zUXPdt;r9^w}g(!O(N;fr}dR1Dp7*FQ6|%(~33g#i^!Bcl~fcIU)hUIo({8J5rW zgOyJ}et-<4E(3?_27Zry5>$Bufc$>Wmu1$Q@xo?d0_ z6!n?iD?A`nzcw||Kxe=$evFUT2d#>{^7Fg7R{A^tbz?QV=##S&A@HSU8Cs*xoVW&d&1!7l7l%%qKbf7cFP+Mqr5jyv zW{Fk&LANq1fwBoWTMPZ{uu~)W3qVswHlROo;wk!7{lEnQi4*+^erR+^aAA-G7%p5f z2@&WQLKH$n%aM~Ow+G2asIkD3f@WVA*lR&M7836eNH3@j;Np%RJ4P&N&_|C0ANcq< zFG?Gyh&V3`qszspwiVyhEqo8K5N&bDY!1U`qe4ZC zL<;5a2$W+WBJ-&M1*4|VdB6wW3(N9k-*hYk*UllH6W2XzKSRpDd~2&=KSG+O#`k+X zD?Vl4=N%N}hV1z3*Dpg#qM~&u#lcPs1$hTLQqV2}Y3GA}MKDMULb1sP2^J`6I$nUr ziiUky7D(R9L1=@oA$p@rili6xbREXy0^fTDzI$X{ zAhV+k4B#FL(psIQP^W^LL+IN9js^`6pY9^4&%j)S5OQWi@C?Vm?OwLwwIjWM&YQ@GOd;S-GGd!*GyJfSr;h$ID_r zh76ILVMQ+h8U<{DOJ(b6EENoN9SF-ekbJ$+&;scXvA_=~7&?v)V$mvMiKEi6Sq+ky zgblQ#5bD599Oo=N=JEe5y+6^8z`Fmf_y3#T&$X2qtu{>Z;U_{?5N}A}0FXfxs!zE? z1sRZxFA<5ko^V!Kr2gm6FD&s{UnAusZW$Tr;laTc(18j9XJhoU5h4%ze~xocM|?Sj>n#CjgZpY=~T_4LIf)8xJt+S9E6J(_=9_;BOym5rz^ zg_mbLVVVy{QGMg~?Mv_$LC7hnt@Q?*($?O7KP`<93<%;cYA}S^t?*@m4q@`|v&+sI z{=ov87A~@HsG5L;6VR~^#15eFE+!0$i*%TvQ|NHk-Shmq1k+nQO2pZ)*e0LXCr*ZM|DeW?YE(R&5 z#QLc!^d(R`H&F`V)^lnnkb4=>#a6rz%z7A_C$X==^b&`Um>39>>57Ei zt@cnfyOD2DP#GXRWMN9GQyMxb198v0kb{s7_)R<3VUP_-hn)?Re0T&%2cR+tJ;lWI z4CDxo56Hds;LiwX#<&?QbX$*sFU0V_I_c<8WRXrr&=NZi9C-HR$wsK3gzwYTB)y_2 zq6(pg=PnH!lSRRqgx28!!vox*sH8UDBU}U=?YO?mTinD`iwoGtdi@KiA#~ex1J1*C z=t2w)Fk;h!{z3Bj86`(fYDGb12$~T~cTP)4^LGFP=NHXu0J*kle|Hj4W z`#LaDV5rV|FoMMRmDk!z2b~eR9_}1~k}w`n$Oz|(H7(IkN2@TzcSthw*ROv^x|an3 zL0BwM$Y57J(V79Ths|JYT3>YpCE!mtpf0hxWnp$kiSJ+4jIaYX762$|FC)7Lu*e$` z7zrP{UwEoUo)7}S(y(cGNeTjylU6!xiw-E_FdQI~Vk@GFun1;@kI~Vg>FIOs&v;2` z@-*aun?Kvc6Nl3w?m5zfGYroAb6yXXL?7=d`Xl*ei>Uk4!j`IM!%WWMi3t?!Rllpg zkACAFZ+t7((f`{wFlzLp0c%7uFP)4dlft%cojX;giKcnQQM-=`GbWl2ZRT|qeXOEe zg7zZr{)4yg-hS)cdnD#iO2}g$L0L_)QZEV3-il+CZ92^d?(K7NS6AZu8PR!~*JI)F zGe^zNfTsBGk<$7_-nl=&CGZ_Q>dx_baMQI_oO*UQ;93Q9kGc=EFRb4XW5LOj*1rU8 ziS8^_;JCutXr=!8Bu02F$;N|$84OBG)I*`u$SkOi^S^!TbeAkglOU7_Xm%uwK_HJ! zjERQ^DxnJ4hV*qM@)~I=0^dbG5?g|34xr`I)Z1GS480|mh7=keq2D2e7%eEHmP#r4otx5^_VHt%yY!560pd{|8j*48aQ>1o!3VXt z*X99CJ!u~v-u4BF(PpwzqQ4=91vvm@1=T%t6#jqb13=tefB1iGBY<_xr>r1kQ&a=U zrm$#9ojtn-WuOkhx;{RhzP=HYWmQ$4ctp)p=2ME#LakdJmFl@Bt(4-_(3rfFhK7P~ z;{$9pfE+w2($9-HV-$CI8zp4~b|_RL40Rx_hp@?MgAhiiWP4A~V+0#mOTo*7FgHOv z7k+gWp`wvMJK>@m60u9G4JY-{>=X+t>j$Ji{?xS?I{ia|E{36zIo z)Hj(N6gN!TCv)zAUFd4#2q%kVtAg`kh1FvmQ3qMRM_nvXGrS;iP$}*X*Y|1%j|gqe z(wcob3TnFj#r~yYg28w8`riIodo%xOimlLwjCIKQ&$C_@P+ViMYG zaAdzFRfxhIu@xB%Hi#3Z`Hd^3Wdi96(TecoMYx5-fV}omZAY zIalU7J7bVmg|>&tW2nS%Gmyj%nZ#`Nj}~bTh7(X0?V^oo#=Xcf3;@3XTuhsvrk=UF>cGTUUw9weftlI?}i-1Mn z%W+s1&NljjfDA<93L9~T)atFkjMDFJtrPaMVE_v>+Y_fw71h@6O;M47=!m?Az8#`9 z`uiV1Br}keoyUJT|4M>Dm!m{f1_A~-1I)U88L!}?IqC>@fpyxS!zH;Ca za6vPRx;t?OmYXqW^C708z&W7{Bte-)1+;4$t?=p}`~hXIm`Aq(48=9k-lfIGhF~)# zd=e>~F)8CI9z-Hiw_?2J<;(X%Lqo>}G&MA2fq22dzRk!`+1#RZ?b?^J(^>zEwDd3N zm#6CL-7GhDXx01Hw_o%SRne2s?N!b1_!y#`OEsTujHnx|Prkid!kwla1F4Q;`k_A~ zD=X`@={2WLocMy{f|vtkR2jw_2psT{g((P_uKIu3A21!tnNSfT=7CKFhx1IJltOeZ z2*1w0zNdIj$BwPVh!&Iv2zc)xyl``KH}QRI26YW=K@efE)BJ74nCp2!w6d2k?*P<* z-xQN9#_-3u}oj!PdV z%`nOazD30~+;6RGV9*e?ZV=KJFcE|-QtE>V@><%A`5E{s#1J&H;A(*{x5K2U#lD|( zzax{tD@*7h%-e|(Zmp?7?`RGg}r})zB$h+$2%UQs;_h5sw3l7YiEfY7kLd#Y;i?}@!rFlAV_h*jzZgk ze9^+OY7p=lXnxP$y-XF#s;Zp>15uO1&;^o;lm|> ztSJxA9vlz=rXUwFNcOW?_ZIw3;!9cFu+7COOx8eYiChb-<8cm-o#@;kbt#(W;0=QK z34s;H)YEVnpy0yb7f)|x7p$E%L&mB|u&Ij@mLV*i5-nNJz!Le>odLMCBdH0s0If6NBtG-_w| zv$yFCODAbO*|OKlN485r_o|xwy%w9^qawc3%^!`TjwUT~>Q3=}XU#o}Uy6MsGR%5c zKy!AR!ZzLgZqAy1zyIg8`C}yxepWujg``zjD2~BP$g~AOzOVq59uOpA`&Il>gXxzV$-x?-~6Q>Z}9V_!4L zXa*!iEZ`Ltl@dhlzUE9m!64cC&Mfr97;<6Igx73eti1^u7j-=*u=VN7XR$rd#7__s z&=fuN6IA*rt}zhmYgJXELRMvA;RYmY-O8`S=w(%L^Z*SNj$b8|M6Cgab-YFAGT5gi zkoJTkg|AOlVIHRmL+vO?d++gb+g`cJ)*C44388>;9py%N(_|`0`p58|paRtg*&wOt z1zRX-1_Bw44TNTaAE*^c`9M5suo&uL%qy7=fD!=Kw(sa=vxVaB4{pJcs|i(%ZO1c4 zbW(TX3Zz3sgOHR#auq-*h2}zuN;?dVwTAMmFp{YcP046-liWN*gi|z4kjC?=Dc$z3 zk7m?YqtBdJ4p4kTB*OT#ji_FpASvT4AVXh@ToA*+BQ(^_f%+j)q@_h;j(&1%tQ|%x z9pFY{jJN2!jEF#LUQ$ex-bT1;$gx5VC%QB#k3&Rez$BKDDs|=It78(0n3WA;%C=(f zOOO+t$SWP-?jJsRvYU=B{;u;bs6?owNn;`Dg@6YI<1@94jVsWth?ygV`+~a`mHu}$ zsgYs`4OpyL&D=p=<{21#^T;p-xR21OM7kBgGm|0ClWZqXj=0xGHZ^^_g{Cj8uIYH! zrEuAx24?nFfHIU?q!|ia6VwiEeSHaKW&gw{0(?py=oIh=WB%ITANz0{+Kb==gDs&H zk(Eqk0}>LF)vul!MeDdkP^}g4XsS1_|T7Jn*L|SF;B1{iWjPIw4V&2Jm^1 zj#+q;!PB7s6BbmmHe`kb?4+B)WU;gF0A_*$fxv44PNa7KO%%CMng3wKB0JjZH&E>V z^IH1m-@Q!N|MxI}{|CbWmaEVE!+VRAjJAX9JNq25%<;L)g2C0_UI^%??sTX zD1V7DaJZeW+wKfU8Q+f|EAQ9zA`LILQ#!YyV*-F;3?2n8t*;M-BtMA85Ty~GFjQ8+ z5}rgq-hPO=y9hBsm>W40$}wq`gkQ_&q`Ks2OEz6p!UK#j0KW!(|J~I{B-I-rfN=EE z{>|2KWH~fhg^dhCCzKAcBzwPFJ`7GrIZ1EZ%7oa8OK$FpdQ!KutLELmrE^j=|A#4p zm>QdC`E$*8Z}`tY{QI9fjvW2R#`~0w%(X_w#*IBR|L`}y@!{e7zLm|+tX*HO>+ugW z2v*#5{^`dZ4F789|F^6AZ+ic~U3C6AnKixt_LIMEh}K{iKbai%aF&nM`RIfiuKu^* zayml${L36V{;}G37m`2AVE6?F-on+KK70iC(xGIG*3-Lc(i-Ma+v8kFHJqyWRWAXe=MEHijfJQbgl&_d%^9fP}ND`++Qy=mO^0R45XI<+z z()L18xpXS~Udzv_X|IslxM;cwqeYfm)IS<&GomM}wl0p$>QwzWxm>ic+$tGeJ5KtU zp-+N3A;v41QIG?O3XPCIfILP1?1GnlpVd zN#xnT+?kkjTyLNzhTd2Bp5k2F(Y{OOZNRwy1wK6tBuC%2ER0gb$4xrQU>j`1@CCr} z6LlFEuq>IaOYW#6&`17z+JuF)9wPxkH6hOdE^hGBpb$89OZGri_Y-v#M3qAP(J)P4 zP9GI}^yH|?$&q-#T+9@|kLA?T)B833i99IUdx%At@vQ|TpP%1i;u8(@>EfuO^lARv zIpWj}@nsfsb0H>yK{v-pJ+u-$L)(nMelTe;CO)vgOQN$V!BB$JW2w;t32WQ|xE&$u z5$O_g6=`b$Uk>w;AJXc%Iu)aPA#1hoSwOS?_3UIG{+- zK1ohXcBCg5zFcf~;$wwj@Dqm3qRu0YPymx8``)f*fEN`_2}GAfuf_YiK{7cJl_Sv- z0O-KKtVYLvKAJ>^hh<=!K@9=p9*QUY6c3CF5(46!1hfGN`lusYDu1Cv76C73dHzmV zE=ozfq6wyH2sX$(BNxBJoc%vA44?xd&EJkFGD;C7&;;5BE8m^l2r|8CC<&D?nN<84 zL$F|*3`2znYGtgHtAeyXl97WZ|v^r zNyO-G(&&$bR6=?~(QXO-TL&2lqjua;f|4-_urnZ-c9FROfWw#>0AoMV`|v{@Fj1%+ zzLsgmz^fYw@;(vL7JxYnZ!jspgn23ndN}ku6La%Bjr1e{>tBIw=kF;=oyCkHU6AAu zy2$7x0AyQmRC9xxD;PVw9T=aOFo+HZ?;U20JOf5P6iFo3xM-N`RU9YRfk$ z`d+oKA$Sn_BT&%tImXuE!HHv~QEuUA%)1Zz!1{q^BZPVIk!ZIOC2}&FuE?6>L=b~8 zvVS`iM4}V7t}M@F;r$cnmHpRTi|gP4fZ}@*4A51AaN#upTA&0@ofjJMj9>>)9Qu+! z!*t=z`ue?!F1Jbk6{f-bJPc*i!|oy>M_ZfNR=^pey9ZT0gduP+ff!kMiTfVB$JJ

_*TvuH&Y70mKI%;20`bDzg(>RAJirRu@!LWfOq`WuKR*8ZAsayoB@D$Bj6S7 z*l$OKM<%jQP52lwx+P91zh6!BJGfXYBe@m@;KfH~TM+;=XS~iz2g-b*Zit~ZB?CDA z&h~ifxwJHcfCiRlWiSE~E?X9$-%niZp`GYz;;@+x#+Xs@oPAbZ3Ui)zoStlrp(VDy zAtlb0UP}#3WwP$#7)s^unNDO^fdF&+0LEI!DjBv=`DueU+y?Td-m`{Ri?Z{PLdgp!j}@k+ZB2N`dn=MsP3vH&<|S?4}s z4;tEy^L~Kpbu9T)*xFOaKU|;gh$ra=nseKuYJnDbs{k(JhYFYtHMxgq z?IBi|Ee4Zs_4Ut`50be&1M=6e4K?2q040n{gE+d_G}{l=9VwTmrC=n|+=O?o_YD!b zcnPdrdKBVBkJWl3GE-l$rl<8TDs^aUwCLXOKI9EK3|LKMEM#nUG|7tftq>H_WFC?x z`L;zck*VN&bOVZ$MIi?mpr9G6G81BoEj#wXbthWH9vw}rd{j+;)F$AlF@D|Y?}K`} zt1>44-~&z=cpvPaXalOuyURa z;gt8-LI(uvCEVI+GSP3E5EBT%!DjSjjP}nm{b88yRHOC~*6m;bROZ?)29DeqWH_gx zB5tbt%G>`%ib6bTzeLxqOs8hgGL+vCIM&l9$hn2lk*oJw3M|O^l zcq~aa9foU`#Pm6dps4jSVqIBh8Bfxl92Qzq+~cn4!U_Ga;lpw((uAq{NlS0Kb8MVG zAak!xN0ylQr=EuPr_Gh9b2jRu)KZr(Q2Ls<`Z3jMcU#9gLzxAi*R_5mgV;tZe#)5P3~4#V$#NpesrazK=Rv9 zDpxv}{VA@U4RqI@6s5##_If9|U5pB#J{P=@{lg_GSmAGN`$5#HT*2ZAoW6Ow1#tkD zO;<>5&f3uf>hVxYPrEn&Nhw)yTiM2ds!Zke)_mzTlM^q4zf_jPaSLEzH6|A4FEiQo zCuU`t%Gy>66pG-{u`Bx)7SaF#Gk;Gk{A<%|+B&%2x%#YQkSiVdP|m5VBy)TgxYPPM z`Fz+i;V@oshC*aCB*Z{y1c?s^U1*jXfoM<}Kgd}Jb$sf#PBr8YxZ{@k2TgW}rX@ly z9Da=Fm;15qJ5iEFv+GDr9f7wZ?-QQG33@~h&bmH9M{5k9RIO;~ed6#nd^{?Cw!~_~ zB_|8;9m1*BeTSX~l<$2~fMm#8Ulo;5jeeehxI22St-H!L469f-ZcuoRItu(kVVWi*50HofCy)LbCheoiGlpk1p zRmcv0lzIL0Fzj@i((8`JSw15kxcCoG`Gt_}gWUDNr5JyU8Ex%n7C$(cUf;75MwbV8 zf>HxsmLrZFP}oagNN#7J2)N^Q8stJ9!i8(Ly;EoMCZ~Yfd30~4D;=Mp+$tp$cK0Gu z;6tNLK$p-GQ!e*io`@E#eO|nU7%cV}2Cy_LSZzX`tm$w>&Kmp`QxfmA6gjN=91ROi%8CZ5c|OpEpBLuB(#sIG4ZB|DIc`6w;AgZRkPsq9xA>mv8EW|T95Fc ziK=Ds_iTj{UqXFwAm$HlKbD{cprl?06!IHFG{*-Fp&76HZ#PLMm_lo&9z*03@3_cd zSsr{^2|q0-z3>}mQa|d6*E*j%g~aFkxLISoqA;&!pBE8~G%K?W_b|(~$$+j-*IzUUjgV z4pBh*$u~!40 zY6B(IU>(bXDbg!0=h0CSMB%eTm2M00blt{yhc=%z8H3}qr@sS4lV+Rdvt}8S_6S=0 zJCkSS^VErq-9A9jP~|7X^|WkMI_%u@6EkRrzL{~H8%k_Ol|AMKVo)Vk3Yr_~;jIe!;YALIFwfR7EpXkD2*p5bj z#MBhicEX<8H)9S?`w*NNm9RjF9uQwGwQMmko#^sj#sekWz=rjSHQd7sD^AsWJFwUA zI||_G!TcW~q1g{?hh{2Hyd4L>GV0uJ-$rnAD zozngna$5!ew^KME*Xf33Scn8CZHIGJl<<-F%xJ?lk>OWk~2wD6mPc;@B+e|2~cn_^E%NdC|NG=(XS2v%Uz*#r_XoF;O43A=~4bwP0C zQUPh}gxrh_m%L}^=f{*cCugQ$Zj08Qq2zqhVl`uX0@b+kil2jOMo-yXz%uv;ui|*G z0ykZ%y1maGZzl&GikWi3%&FR*Ramn0;JC;odc!%e2FE^UYb>QU{|t!KGKI|@XdLR-MjcF&Pyc~2IEXRe zM!wK|YLZU2ZmG}NP5if9V#SkM8aWyMMN7M3qFTr)5Ke-A)PeblqI_y5hkCo5w}h^F zB&Cp}CLu;6Z&;7oxuxFO<&*IB-{Oh4HNl{gGZP!o_Oz21J!89$mRQSbffnx%->U8zmuOc?9D z`scer9;!$N<=@g z!HR1c7Z@7XVtcF-BJh8kTPBxRdO=)N=m`otc@H}U(#TC5rsGpN?)Z)=?|||530`r% z?JhA;AldGmh~ThK4eKlw@1wIAu1MI2wR~WqJ4D5QoC*BfsG9ljbLsW}J(pG-o>BPS zsSPNwr1eSCoPN#SX&?Ln3fYarGhXzT%5>E8l5a?ttOu1^=v_wGk0&)0fXbrHHtSOz zwB*@MmaXJ*sh5kv1t3-U7x!T*mYH1VWBN`9?)BkbuHaVDYZ+!r_ z^fB6B)iGmymy(KVHSwoz4E-$y6yT0M6})!@`x2s}j6m|jlP_kqvck8{XlexNmqpP| zac=#cq5NNF{7(azKf(fST49$9qN-u%j6Zeg&?VpDVV~I&EhcELHAaE2O`YIGP?l>< z73i-c<(~qN{}p5?E>WB4>w}vHncvy3Hf_?^4Y&j0uM2fni>8TU*&RK(yg<@(LDl2b zkhD1OXQ#b;@~5!vKTB693!J*i-1{~W!c=e()GFK#=prq=F#1gzPSy4!(*Ks}dsK*Zvzs&Yjb^DVu$gwY<<-6g# zeI-d?m#Lv6l5o>7>b^n}BWbK=M97N5IeK=QV~an(R1pYN7U=(S8jZ-zgRr#`?tC}TI$$sIecm77hMosB(Y=K)D&k3G(}6S%l=KYd$n zHnXC(b4g|yIU1ij8r}t#`{3|UhSSSCiex67!lara92MMS1tn zBup+nQj4-nS}{GcJ}_!;gK9O|Fv3@EmhY?>_V9rIO!ePxAMtuar=sN4n1Wy@V@V+N z$iM4!X+Z|-i+B*`*mUv-J&W*UZ(e)qPp4k}$lTHJ+^}V}wVyWA7!=BE$~u=?s@}B| zaKj>oS2JUf%w$@Z^(+zGpB@~1;f$%NW;RvC4znm_u(m9l#^ld~bfefK+vg?Y8B0Qc z%72}n2LU4m`6T?COs?fMRG~p8u7ifDB}*i9mamp=$kikYF{&!HNKh} zDhdQjwHD8u%tU6qwiV(M3lgWKr%hMN{iOI+puEHnC^< zSeASJ-~0+2c{Baz#($wG_V$|fo|W#Eb6zhYd=Tr4Eqcm;|Bn=b&f#6vSM@$QGtaKG zr8uyz)vBN5&}%DxgNibTGLh_>o{xv$Kk>SJHHO8Tu+Q6zzAq^-2=`X;%~bJq<9&l{ z{DxYD8*h(u<%_hh*x?6n|2-YWfgnt%D)wL?V7KA*dnzT$(P%7q;82s7@E|j?ouDAf zsgG9a?uk;lnOVJGuD&RFmDI&W5>rm?LVOXk!&#F=6tgk~6>C}{t_>N$#S-6PDtL?W zzUc-FOjvoy$7bo!!H|U?N@y;4G;4AP=@vED$5dh~l*x9pH64o+kAHdR(9L*8uWC^w z2dv@4?0*j_etKTG{Fu&mh=;|P7q_ILd`B_v-NkBuSGHZFSLs5oSwRiZ7E=HEaPS-7 zu09`^t>%@keu?4??OnaVC@x4B*S97HVhwXo_VmtddDWSo0x$n`VO%;r#64=6G3<8` zIPmuK%M|C=m4=~voG)hz@u5bHf+-t{Gj|ji8|Jy-Eils?)g@LB1>h~-q&H?~p41GD z2#d(&BNS@jxdyr~6KC zLvqe}?)1Er%(W>8x>dcR)>Huqgx%Sc89ddLZ)z3%v?VmZ2PirL3F-g&qD(;pL-+q2 zC+*r-05mf=1ET>J=Pxn8zuD}kO?z^RXEH|VE$oEfGrs|T&COgp;1KL@dB9Hdp0-=d z0tFfPvk%G?J)6b!l*}`WLfxs5xDUSC-(<6h{lX>C$(7xGJp2~k+>CFJe6z_8kT^5k zd-LfPpR#4Oj=%XgH}g`9SXx>axeZwUYy%I}QZl`@+<8=WZ0s%ik_lNBQgKV{nD5>} zG=sO;A6cA|QTuA@bhVs4g~8xc)!E${zpw0cSG9C`^O=t3o8e+poZR+-S;hbB>`K6) z?ApKOEm|y&cb=2?Fn9z4O+F{O<0KICdmVWVMrSrI#=gu(QP=@=ouzX|e#8 z^DP*s84hh|+5M_R59-SG07f?`j@Z?_c;tKhN?`c1#Gf289TJMWU)Q&{rw>T!t+6xm zS#S@HfujB(+9Q{yk@qFg8^Y?6xVj-Nny2Sefslm(GW~dnIeKXOP3tXESl#o(X)QLH zJzr0-JXf{NTpz~t!dQAY2E?-tV=(uwi_dNLJ65ABH+UNmWOSoEayq)Q%J%#Xeotlu zoj6}b^0a^G|L{9kpVX1+M<)rF8&G7N@I~j!BD+jD7#93HW?m3;S`B+1(NKtp6K9fZz2Ub&a zghlH(>y2!J%e=7vQBCS`(=C^I`?V%`O-)Vvy~DeunpsDCf;k19;QVh_^9#Be5raoP z#Lo%OcMtMVkZ}nL*Z{QRB2v) zUG*m6eeY55M2D^nXQ0<4W|bW7sj$MAA#u{?LuVsA|90MqW6 zV75Zk`jG+eo{g_}^p2b23iyscV@xKz0SThVDV55rkIfEPg;#Y}*T|T}j?a+=`G1s{B} zhx#ko{u@O}4@t-M<4^j@-=||3O5%kjz3&W8J}q7-pUCSgTZcMy2y>1{V7u}IwM~*G z^R9iNA1B?35DGu=XTjLI$w>LLHftEn);OQr8YWq2uhNCZVY+vdDcYs%iKp0^5U)`? zpSY?Raq3Ih=5k~&1hf;n^82DK?XM9rxRvt=2@-da0?3CJ@M2N#(SVZFudz}_U@-Jg z>`Xrh#EHaiO^>b5jn)Nwoy-l5Gf4;^6EadwN6F|{Xx8-FVsq12#C5eQj>8Ud&EQ+8uDirN<8D&GQT*68#qf3e zrkth^Wyu13LnS#WE3dK1R8z~v&vK9lm2=L6b#{eo;o{=dR{?8jdOfdsxF_C|XNU5h zWJl^sVy5qDvm}`VL$cz}oSy9ZaW>xf^Sho&o`YPopDR9bkWTFoi(0YuA^uCOjmear zd2#`Hl(&q5;e6jKpSm;PYOS&cx`xfFLeK(#)Ua2OhMi8zPFLbP@)5WviX7H zw}*ds`#u{}jNJ_=Iw!%N-r(~9D#AR$X#j^(y}I=v<&41%tNTXU|KbG} zX~Ty=8q7NmpRUKQ)Sb>+A@0FSL9*ndp>R9-w%Hg!Bmvbp!@m&zHB>&i*v5R- z{d!gPYKX4$iQteu<5o7K7Kd81{t;K_XEs!NaQ#Gq#i@?|kx0CHUMtgz_^Zu^@>Ztn z&P5ZdF7tprNb2LP3NHGDc5Q{j2f-kvnEq$JX$BX$-X^et?f&;OCfvv6*dVORYyR7kp| z@0H4C1cN`2+ai^|zd@h;DfX&;UhpNy+b24Vq7uRictu8!wZwKZU^P`=d&*f*ZH-#h zF)m}%%Axc6H3w-Bb^-8=%pmCG{j2alE2ocLQ9~ueV~Ne%it+RJ!?fFV5Gfa_OIX@% zYJmbAZ;Z~{UjbC*TbcjO6@a1tDg0A@)xrh_gZl87SkTf)QDxVz^7)A9II|DqH`m;< z*c@l8>IypWQKY*GGtJ>GJkJwMCXVt`F$pF6(2ItSVmzdIV&VpMeQ5oON6d&VV(`;>jl9uQ)k)^p+$2c;+KP?BNtawncp>< z)8DwCQ!;^5ZTOgx3b$^D0^kqnEBtOP5CU7;2Kac{7Yad3uB-bz;<1&Dy~9>j1MhBj z#Gjs3C1551!&meYs_~DpI1f@yUd6#))D@ESeXUi# z{^h~NQr7haDN9QD{;S}ov9(*b_WKo^x<p$yTrTt;kz*bNAn*a(>%1JS%j{A^4t+@vzkb{`ZvCS>Hd9!0CAAvFW@6h`R zP)+yQ2DxvQAgN+ebSixSNo?y@RLnk+C@BnYMWv_GwQCoVKi(cu4)jp|TF=@>Mqaf} z^wQw!^naVgf({P>F8b=Oe3=LcR?*x z60x}86h)eTrJqp^%EgzmK=&ZioQ(YBcGIxf?A4Oi^_Yzc+Fsv}xePC{&X3G*e1Fp4 z9tL~J5M821Ea=JxnT-*!;f|W=C_|2V8hQI6(h8Tc9qeR~q01XKd`u6hmKW<0vBs)>7=5Niuw9dXnDD=;V z_2UISM~KQEKmPwmGbKWCK**y+D_}-}-S_=Izz(~&(R!k#O>1&6i#`HwR5)VDC3@-7 zkyQnby*Sp}I1w}yphprq$SH8OFD68V?o@B%Zf`FousP!E`3r>8BqS>%MJMxqqMO@f!qbLL}>E(XFn1L^Rlfb#l<34h6`)nb=BUG;S(80<`7>+bk+>}Bu1 zk{nH=U@dcdGS{A_2ptnQAAh!u>7ic3y-JIH!!CD)tZyvH1a*TX#C%s;x!#Vf4f}a* z-kITL;V7Go;3kOI@}3i7(Z&X9r{{MFE5++`hBs(9=*_?aQ@GL2=XLa0IBDKRH{S}F z2HI#0is&?G9cn@A5cc^=PztXI*eiKE@5GjRVWMYdVU|55{M*~xuVbtw0j#_=UMRwX zwGHvM_fL!X32#gP=Q{~NBqT*K=yp@PW|f-pwHRTW1C(3G2!jR3ayF2Ic|aHf;T@H)3C*8d z_5uKoNT%cPB!1g5mVk*J%wwGvjT3iyU0CR|G*}QO>2V(mh`yG~JBm;>via^47EM_# zM6TxDpisl2ceBairNg(G(Ko`&4R|;sv}SGXc{odLXTE^(^&z(DXoI#_hWa2nV?;ce zsn&r@-qeqGwortffJmC;Qa4=sj4j0M#BUcosKO_(h?a!pR(*O}&=__9lQ+q!tx`q^ z-cRDbL7AwBW5_lt4h3vh+&0$RVXqkHwAe@fFeCmT$Fc%z;N_i2fUd~f3+(O5HA&zq zTNe<|;4L$V^^(LLQjORRqhjvQ2hb!96d|}V$jGh4k4q``%LSf4=^8l2+T$+fih5q3 z^nI*bS|XU5S`v9ikp_n!DBz~U<}4dpFv4yb}RpKPvlDpt z)cyj-M?#m_W)9lEO-xEj$gn-tp9AMhjt30al8~Jaj3mH~62P>fj)&Qrj8V@$a|SFe zKcM+V>F!SJ6Hk>6AT;{L?tkQHw?th;ktKG|i`q|~1FG{Nt}-z*`0SA0XGnpFx~ONdYnNZ8gMVQj)eM{5DfVZKYg)`aca*5VYD>RDgt%}7jqh(kr? z4rf^=PE0Vw1FCa^YQ(bPaM>I5P;QYC5Rg*B-{owJDKhO{m;pecfUpA~JpqwP&6+~q zgF1Q^I~?k>P7PvMtlhmYBPSpfr*;nOL~a;C0aUr+)IJNqcJ*xHPSZ5ru7Jxv>{}4{ zL?lBIr`x1{G{XU;j=ln|o9siVJj~9rw6O=Vqcb3rMvXRK4w^3OV|RPMuJrD%QK%{a zJiB&6I-asUH%H4h#(N`7KCcjVKQw#u6^z(uMvp|ocwp0g7_!V$rQ9WHV>*m#(Rf%& zQ)Tr>GeVO|Mg?R_^n@Q#h^qVe_;+wVOT{zS0VF!E$>6;>=mJ%M9` zji3Ik1Y>@?nVnroOiYZu0dAHTavi~@G%ed_CwO<@c(}^Ghk!W|%Op5{t8ZUeN{hNi>aL^lz-lf_L#jh~H+zT=0k=5q{reYhb#lq>%`}^XoNGIr ziZ@28(?0pJcw{p!k+_Y}7WquS*;IGXTYO>I@6JJkWJQOAj#@%a2CE_Zt z{NTd!GW3n#7}mRw`D9yRtum>ZZa3ytA%rt3bH+SUNlP{v?-muy0#QZ#7rG}-?#(NX zjI!NY!LgGZre=Lo9wUA^L3IC7u8ZNLH5}g_r_E`%EN3OS^~umh{gCOJzB8ry;OTNWscf{t67;?tv=-bbC#Vv~V-LLWXdKA%E`8dUFaFpK9&+kFi zQUZtf?miI1oCe~e79rfDC_94p)=u^&sq5{H7{fBBmwUU9kBiKjGYQ_SZEp|uyu5U? z#@`WOAE0b&f~a4WCmA;!p8o!N%QLN(0U!-mFf|O!6B>1c(b#j_Ia3kO>Y83p@5MXmkrx>(*j4<9^*ttJm7& z`jn;?ksdp_2Y`hta4SjdVEV1lmcGLQX4_z@#%CF$faV`ZFt9my<9-)_JL6*qSt4j7 z%2rl>2P@6|;b2-rfsOp)kyAfC%5N_t{%XbbKe^aH-uve}JryIao*%dH>!TJZ|CbMt zi%ajOpPI`=65+(eerZPO=O|>HM~*z8K+6N?j@YOh*aeQr|9v(y-KGj+Do@f-9*z0_ z>Zcwl-SmzaE9z~x?bqe4N^scs`>fS}HTxrol8u09@qg V1gV*?;Y+ANSzcZ4ovi8O{{VuEDS7|^ diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp.png b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp.png deleted file mode 100644 index a73ef0039a6e7693d3ced0ff6d123ca8b49d93c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 291688 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 z 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

vs{UyxIC!?{58j2!bD$Q= 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

?-oV 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 z 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 z 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

X6bsrg;O6@=l( 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%0DcbKP-B^Fm(4_aw`wxI zZ+VD#vLHa{r-Ho~nIx%0FFUOfn%i;8tKC-m;wy9V3Z;H=srVnOP|St&?2x_PUCx>* zIssGe$&Bpqw-YiQPm;|Knsy2Y(}$&;yd!_?MU3xIHn(itua+8aUEp&BO+~++c;t{A z|FCd3$yH?OdQ#qpS7#WHHE}4hHSKvQZ+=>}{Z=Q1%=fhEjpv$XiIS#5+3yy6?^%#G zdJ2Ib_eiIEc0j9&ZEiD}=U0@RqU|;|K3B%hnc;LjZi+PF5sj3Ju?9!iW!gGP zbN;I0n?2SHTy-tBwKrRs^>a^`dl_tK65s9Q&^Z2@zmh9+H|x;y=ed&j8zLq*Uyf{G zcxBC!?B{w#%%>jC>ynF&WJ;*Ys|~D&ol_~}a3bP_eRZa zFjO^1w0l<47SB@Mb1Bg8Jp8P1PTuLe;o8aj?s|B2r;f_e!DaDid}vKlfA6S#6sLqm z#pvQQd!69O>N=WyJmsL#-W|T8XnQ69QE7?-zt!a+&${yH&P}Q2yGmDz(3G1s4-EL< zM7)Vk4eK=6Tqo_w;`d1!9vGx6sAJe0Y*g)9vQhPk%l&fH;Ty{$tc0JQ9Po(mkv|@I zQa#=jelq!gb@%1bQ1^el?J7yjQ=*usQi>uWTSn!H)FUN3gOcoI&oZ=2g_0%fkbN0D zgR!)WvBWTzF{6?ZW5{4EW5#`ddw$Pvx#xG!x#!&b$31t>sbs$M{eG7B@_N6&^L@Rx zN$HMFvU*}Q-N>A5&1bcCf41shw)e`mrXBBe67Guk53j$Lu`!$IomFum(2B++@Cxgk z3$>rNeU1?E&E?o6I|)-92aIf$rusKDr##ElC<-p1F*%FL%PZjZ#ULs+_C~NDJg?#( zWYB)ESq6+&w=$JO-<11DK z#fOUrau~aSm~cpbMvXywRjdLt`(_d#dw71X@OD&fE16Jg!;6@sqV zU$6RG-v9j1Ym+rXEB}6D(>29^9(3$c$Ckf;|N3`rt-pU>ac|fE8z0yi^Xyr1KlGj!tde$ECoPy=v6z?~f0{_fvgIUDZ+1cO6KCA1DH;H`s zV7~KRRQD6biM$dVl|8`jJ-FUhlL% zCUn*^DM?}JE-LX%t9sIOJjW8|Q1Q)g@bj~ry&^8+$ad`71H4f!lfn9HsKg4F2>zlV!6^()pk);>*|qtLtstLgo6R1NkC- zI$@>>GDdzUXI*3P39kBTQi&3SuUPunRGE68YK>7rBUp?&3>I-KJz{Q`{jHp#Q&rx? zI}yu9QH=B5@0kZ3c&m4pPk-L{r;^^-0GVISv zd|oOMxk~&=vvKR@z(NA!DoQG9^xa_#B@5*0uqZ5DYiY8ZboZjbi5xXnX?R%+E3xuV3#xp=p5&GAWy=I{xa(gOPXh*&4Rq5BXeTh|&m3oVjUH ze?jCb%vP;-;Zt1RpW!?77Qe&`4?|WOnnW!d#IW+OlW>(yb?I->^B0ClR%mtDQH%$3 zxWCS=NFrr9$G3=@pG&&X^5iBm%$9-<#?&`q67Hu38V=O6mTx_oWyH#*C}}3;E1Kj% zs8!^TmGsY8TeOt-`L)f&2N$37%5-WJR7b8UoU(99eoCHm*~X)A)}}ewM_b=}Nvn=sHt42xq*u(pkLlPRY|xw7*MKrwEO57YfPvriL)fKG;eMcZ8GXyrY+Mf zn)%Q+yTy|RF(z3RtKC%HbYATF4+Z=x7aeDf^|3o$%vc3>==sQZ&GFHALhy2> zNjSE+gZBMJwo%TKR`=!nQ;l~|`JkVjYTRQ>+f;7(HDWcz-;9jsh8>~G_0CgD`$&6S z0{fYFu<>_ePSaf_n=E5H?G8v=8D{u21hf_;9#zVYQ8-K;sj~a-Ogr(W*-iNw+njtp zE@nPPszFj8KZ{=(Ihe*~P5hut2@jn2%G`WwS=g}t!)+?v8#G66 z<%O=yQ;lJ#xFtTS*VRqLU?(!$PY6dx?z5EI$fmyPp#3&8aNSy#8PJj##Wdk>M^*F2 zp74@v#-U&SusBl04YgSbAESY@X{a7&s`LgACm7qLOg{~<)qJ>)y7~FIJH;!rMDMO^ zAh%kjb6PvcHvew4rm03n+dHecyZH8VZKDt3s#m4RjTbB!kLMX)3%Cm@MP*#AxU^@| zW}j%gN}KC^q%yV=U(#Nl>}2BU=Gi;A4T;RM1tqraRw2=|VYlCsEXSCvxIp_aPgXe= z8e*p3RWrz|kibAT`SXR$Yg!rNyq!xM7~a3-W#U*9?SMo-BN3!SL3`1KtFv=??~k(r%o!pjR)%n>@lR_Q-nH%5T4!CqyAPy^ z?bx1~q}#X1Y&e+@BPhsd`2#om%py7+<4l_Uxuk<2KswfGFydqFnan`OrXFu^q-s`xXRZssetwAh$fAGC@YmAfIWbggn;$fvV<^r&ec2CmR+qUXh znE{XAFV%QFE$F}EN)hpo+uJ+emUhw0!h-3oLJ24iq*)BVrz1hQaaPhG}nW7rw zbux-C@5E|Y`rk`7ITIt*Rar4Y3aCrw`uMPO4nrJ?HDYsf#`46NN7w&_SV8=0p@>aSOCP8nfDm;3vR)ZVhFIRBq_O#(Wz8!K2mJfzKCYZb)hXBc zMY;wAJz0pX543-vmZ;`>C8cgX5{AK+T1#vBiOP3lW%fX(vx{u+L^0(N6lp^v}ZmsT_?)Brn0+sy~}zd zH1QN!=T&a0>W>fW^A9WkX{_Uwt>1Sbw+Mhgi?)(<-3}K#^2B~JBHB(BPo0I4cMa0) ztSb>?M-K}a?S><%7ojS*994LB{c zi(C1e5V*xQuzxKzq+h=xpIAqIN~97ihV`kElN>&L1}uDi^^u3Cn7=~>v`FN3`Iffs zX>T?areHk*HH(gfokB8eH$);;7jje7SkYQ;(+uoRPVftK8+_ zQ@Q?!SI+fm`@P`%PF_G$)eI;BKfy}ICVpIoGpvkzQ%J0{Aoj2-ggFYIOG9Pci>J>Q zv+w771usnGe6CkUQzKc8(nBhCn(zei_HVV>TN?RyekNvTj;BR9`npO{qod;;tmcna zc(*=R*?0Ny!eKA~3*q(GJ^}#{@8mnvrGR z8E;Ix4_!1b|Kh=&8%8%=ZP$B#oT4vDy1^5=YMFHLoc<#R)aDa-jATP~!CRI|+Wox5 z)vAq2g}j2VO*Vs^jUKX{&pjOUzTPuq{Dj>L`vFw+RLhBQUmo zu)Mb0YX`)_(&gE{3qm^WyD~FcBw0ZvmIBKjrqEmvW3RP;UQAaSEv*f51$@~`q@2*G zKP#lO+nc(5knMlfyqMj$Hj#g(c~^{EtSuY?b!m3_UBfys`)GN!{oloHOYs84dU`O9 z)$dTPrS$BQe?_v(l@LFiXq>E^JPA`%`@Z&+#1XwH`XY~-pcry@f?dByZcAXi)`rUE z`}ySOM=qoW;mKz|XbWH>qgI{xtsDw<@EtLl-d6mROJ{~d(EIw7&xm`;8du*fQC_!} z_~ZJavRaq!{vGd6naZ_|?PmV~6fjnRm* zeGhJjU}pwj!N)($KkX7ddwW5+ka%nI4cki92-dD7#(AYk9FhS$c!K2+PZ5Njccf@z zfJFFp&4@pWgZ8P$g{p0)MovR`OZy|Bu-vIYMP2hAmK)k1$|9SeWhatk2ZDE8Os&aX z-$tO+?0AIT{a{-`${+hKEwH$;R{2sG$-(^=p1 zI5wEq*(zr|^khE2G)teQOb%}LKe-y&`vv*ktHx<@YdUX^M=zLGPHmVu6q5QR3X%_P z-u=Q%6D6II-b{J2&A6j2=eEf8wiw=72Vskv&47vfM8viGcbqz=8?UQ|p-RUQCTUO{ z+0d`r)j6{Oz5dFDH_J~8PA1DeIE=%jj>=`EPl`_;4(+Hooj&)$<0?v?z)N=wXHk{9 z)(+hHF*%`NZR!}5QadZ>l&dPPi0|Nby+OrlrXg8&$|Q1@xEsnR%bS%gzG)oP(8XrX z6&6RbDbUZ&+C8L~y^d_)We(Q0#P=s`EY}zFF{TTy`1+5~@qA+U9R|u}{=p%WV;sSg zj%#zrCMN`|SR@xYXIk}%r7P-pdgs#bM1QqR*6(8thtJer6LF*V_uS*1xlwGJjL8@l z^czP#x@3p?B>z^W0jUD&X1RnNJ9gtC913{9=?K`Qe@_1x0Rvg5{fQP{KcM$)4JvfI zH11s6FlWfW_$xu@hB}J~)?=)l;azrJQ?I-On>u*lxTw=XZYpoeNj|=$>z!t%vK9D!9ajZLv0jSfJ zobVu)@QBk)Ogffd;v2K`kgQVMiCKHUgXY{?3=|wtfI?nzvKsdW1Ik#~?sA3eHK{_4 z(aPcH57%v%QTsGBdnbdD{gRmrI1N(37$BQzl+jRI1t7zflN*(47UXNfH<+N+ot00I zlv=II?Z=2$3SS+<`EWI#urHztWFDWQRye$oL|k>;MAHCJdADKrp5n;w+J09)E9TqK zcJ8uExka;QdVTZR{@aeBkg2`B{43CY$Qn4-mrV`py>F^leYNy@pA~eNw#F$xgLahk zVTH@kbLzC8XIl^EK&EWK9`8-(zX6-L!|@N~j~M9er}?dJUG7JS<*|tq6>jM`87!3hub86FOg;Z`M>AiKZ(=Ggwc8 z#@O3n=oX$4EvHBld9}}zOvYEadNC`NDEB&A9|Hz0N#g;6_wFCYMx6~P1v-2tV(xrSy| zc9aAD?V}}A^1&kQ`)QHy!W3~fBkWTnsSoDbOt`te4PPlsFxagf$+Kx~F=_Xy zq5JJz%P&6~v^4(8kxAeC)?pla4AdY|*9;$p0o8+_7sY;5s~Bo*pyX_GToBTY$JJ@> zZ{?;)5brQV58JAT$1C->_%#c?XnlD5CiAru*ikEwszNa(1}Kcx@%;LaM&dVd-#_sf zdORghFDqsgia`H)>tzWr#TBwgbl?fSMzvG~%DYLJ>sO9u;_6>P#zst%B5oqx94Hd2 z)anMojFH~?@zz)k`P}w7OF@t7yXX4iRX}W0KcV1&z1Hl?8Ny7GTYh~|xH$JVoNSALA zsW@s@cMi}4lGMPB8XQ?9*-6`}D{e1cHcvv)2Q8ORb?N&Y7RLRu&8I6ah7>Z-#uEFV zdUHAMFo2?Eh7gV|O5MMOIfIv?b{WuK(F?7-#LWr$75u7NKe9RV_LT59K($PyD^^k8 z-I5Iz_+ybBjdJvyXXQ)%VUYt2wHI>}He6rh+cjQ4QK3+qTDbcU z241zd4xz9l-K(>UUS`E6kfDq|y7r}CD%&j}=t8fLjaoSogCt(~jZKxBD z9C3vTdtPI(&y~IGxVcqY#cED=MFJeVjg{_)UI*KE;inIqK+h_5<`T0L%?I2tLa^4| zNF1a?5kH$UYGi&j&uqemBxxa9z(iJ0r&7X*@p2QM+wJTblY&hfdANK_!G>1pwtKGa zajG3b(1dO?5_4*}WO8*{C0=Rp6qQn6v`)Qnt&BCy(|-BZXm*hU;N?{kT=GT(Z0v_m zWkuQT*)3pQIsYh^8?8j}v+rxHMH>&L7jSHAW|Q18%V`|FK(m4&bMmUAp+1QMB&n|I z0ol*)g4~~%NMG=(!YKH|+?_|TT%o)eI}h5NwALgsaeWba~W942;9`AyqiJGxZU zQ>@ITzl^>X2+$J-d19+pSf2dKzsx`G1tD}?-9Dvi4GxuK^B;RS7Tk|!< z8dYAh5QG_DLV9ywNT2$*e3>q_S+PFr=kYjmriCLkt}SndPaG6q{*0G#tFtV8@;P+r zZQw|L5do)-IN1toGw5zV`jpj3xM`xi;>)W(sBw5#7q*KGhgD}c%ssUhQAQ5?X>_LN z6!HV|+I0N?hgSLjQTP6(Ehw(0^!A#n?%5nD_SdqkSTP?pee2}d#DuYhMPfi;Agjsq zskl0YJUCbc4}Z6>Q`^J7brPQA`)@C6cJJ4lht$-};kj)mS63r_{m6J(T|@{y_{7@3 z&tG+2HThyiW#!@~FCeq;{I^>X$3P(3$JcjplLBu2&s!%wP3hZD{rO*CL5?4QidZdp zsVe@U?qwi%%EvzZ`~0^r7z72?g8TzZ;fT}x&#(V><753Ar}ewOZU6hO$n6WpAt4Re zE&q1cW2Z!9Bl=tfh)qSl`}$K?^5B1c)z5qb2DfesC80!8)l#;{-u7P?HwM19v9YnB zhpO!9X~*?{zhScl;qukey4QY8=k)12I`rUsdp3v0|F7o<(zYN06phReeuVkiT#}ZR zH3q4QF(#9xyHy6*Tj1$S!^@YyPV=q-fp$lds#h1CUKkOvxiv}k3UIoKcn1S>7edu* zZf^elrb^4CxVSjyvRu{t{H<1;rZuP$UWQGErE*0L%QW>)z}q;I?>~mTZg)00x3Ewa zcl9#pC!ua?z19-e$N+f+XCV89-K~%kKy-I$pe*T0qy_V~V`DxvHade^sr2E)9YDya z2vooaq@?moOFPkH{-W~N?n{mWmo-Nc_8%01^kHl($wHubdkF|Sv;1l+l0Wn^?h zBv1`85n(NOdbBNfs|{$q*No-mx6Gsf8dx!nE)%+KHOy|k2+PI7W`Khdv9 zqbbxUU?|Yty$A@{vVb}RXyDC0ZZ04YOqS;xHD?CA+DAc)m<;kXqBGY5t7^6#p^bVw zf$VmFJvQ(Yu^CUcXdu$us%dWF5*qz`cD4W)<$)&46d(!!pY2B{phDlJRaTzheko46 zm|a-S5CidxF%VQ$9ASE^?KfYJyK6&L+D2KN1%WGRIXQh%QBh8Ztmx)YEer-DrtVvy zp$oqPB_y_)wQSr4U~=wE(Fkm*`K6~ZGIF7E)^?9Gus$EH{_ED}mnS=S?8pq9sMcAY z)?7|Ma3Qw$#k-B(Sl8Ebg7uU2+@NnD?eTeu|5;1eagtuQ2-4a|bZdajSjnG#9aNNi zvR|Wu=hGyDexBA#Rx_F#@QU=~g>L zL}Wnp8uVbN7u^0NQz(qMh8Xf_7wmKeusb!x8GWiei3?(ffe=WGNBEM3xw-d;9VRcy zrahr);9fxVuRwCeh(sZ>&hVr)P()qyVzhLCvQ<|{$JJnW2Zu}A+7E#`1mZz ziU1Fb$0Q_3LwJHESj7A3GLH96ACGm1xO9Ui&!K{R#LHnq;dZ9yT8knu%^Mm*8C6xL zz)s3IL69YuSb+w3%W(^4aWXdkJIw^*v=&9`uc#Lk{BV=#E8;}W1$a~&{DxRaoKUNq z>AV0+?#bA$R0t4^o)`Lt*RFkY^0(OVRKHjSWW|sjCr;MqFD?cE+0F$wf<;9|1*A!Y z)f{p`IjGh7pOirC3$oVYY*7dvf^@i;()nfnaRZwAr22LAP)|9O>1YFK)b;?EF8 z=)OViwZGKv!s`W~K{ra*4)4q}%16YxV`5@*VZSUYT{?g{5Co_WX)G^IFAmFv&+Tq!0pjjQ?;<0B^QO2~=#o`VsXUh`Tl5Z_)4s ze&A%C3Bra022u{nLWn>$xH58O&|#L1Y)l8sPK4;+4W8}Yt}*8T8@t#O!ZY#l^JDHF zoPQ`SEsdN9c-)ZBg6z+UxYkkcJQ(bb9XrNGM?ps<>7af}fmZ0|+`2jp1hL2A;oZ(f zby<*Q@^f;|@p!zkA3rYn`c~5YN5m1)W>5r!pb|x88AD>f(eg44TumR5C+zR90lyM4vKALFMkFLAc6W4ay$J>qiP#?K9p$H`y|FyFUjt(Q?CdNOEf7{6 zP>51eQbNK6unvJTb~X^+90cUn8n2)OqC;emGXk!G!x-N_I~ap8g1vC$QNRb!BT$-! z32kH8`C?GI2dOCSh4(ZX&B@Kp7;p-F z4PgdEDVe}Gm!RVD3MisRxBL0{>CH^= zR4n)-no1j*n(rEd-CigV=CY|w5d291QOk;u>Zc$Nt_LBC!XLaZi;PF*e zH3M^oBnsNKWXSS};5ecezA~k<}=4PNN$iEJFY417Beg;BBuDoYs+sP;czQzN^DMUVdh0Ehtec{4y4gm?pt zjI3NgB?KEPu5$DD?=v5zq@|lDKa%%qi^ysB$ftdCF09rDR*U|+KmzF6;pud%vcTU1 z2@0Ivi3I1u=aL${8FG~05-bFg{@1QuTLY^)3k;Ra;W%pwYI$AAkTVW!eC7Tna_Z_9fpZf|aie$wJqkhzFs*h2z64fa-a>l_#jk!^ zTtSn$2sYm>q&$!cxWf#luQ2)L;<BKZM1%Rkp)v2iUIM7+JKp;hE>pG68O^5mNdWUI zK)Z$|{1Ad7lhsX>2ZPGo>KAUrL`Q!DxC1IApb-D8`lP_-J(sRrc`TDmH~r5a}hUmi|~b?~4zBvCS~ zRjUV}4g_g{ZlRYYoV%^FRwI~KA0Vy?O)R)-G-c1_& z=@z+PC*mbFwY1a#ATo0PzKP9~mB%X)><0uakmN;f`m;)0W}QLFSd6AvAj4>d}G0Rfpd_8aaE##3UQ`96azGeWKRM$qB(GUShg8_8X@zjV~Mo z&xGU(msr^dv;WT*f9V@2~?(y2` zQAOtO1E8I23M|#fDs2)&n1%Z$_t;ldrj`Q#<@li{6(a_L< z`Lmmf06)V@f!h!Y`ZDpORu&wsKD3qyv}$&EhOk+=+sl@PeFY(hv)O$}(i zs_|IvA+S1e+L02jSzwMB>}!X~KTIPo~8qrHojgWY?^$y91S68k_0zPqd)ozG@_dR6h-0-ftQ{(Xe(sj!HM z6LR$3?|_G@{Cd+iylKf9P+_7#WNuZ|Wt=P+4EJA`2-{_CU4#fAf`DoSV9ot;B)iz* ze&?d@$2(+@jGmd5wa!u>zC{`J3TnB;Au-xiZzFKPZB!YUUt=EW>gp;6#(A=Gc9-nt zm>ZE=NAs~YkoaafoH3}7giNg>{dUjI%s4P9_=Mwjk72G?3wti10(s5t?Q^QyW~6=Y zan`W7jA9PQ7v|Xn$sasiViFzo@?{QKHUhbUfcFXnV6c9Gv_(AboHMW>o0nb>gUPkj z7FK=Rh~p^$p6ux82xjh&(#K-!VD+L?QVK!Z1ksDpiP$rhtIziB_)T1#rCc`^_W1Gf zNGW7JkcuN)4x$ZGw4#Il^+S*c4z=_}Kupy$Ln7eEUU7|pE-6>wzYO3nj8u4!8XPq( ze(i3~&2DJ0_SM>R+FWRS3S@5}3gm(ZCHjqlnmGpa{DS3<9Lo|GX>4rFPfdOObehfX zB9qf0p2QECk*3Kwz9CrCFWZK5Vu7O-yDv4CxKY+Z-?Fi>F?1kwjVWwk zwQCtU91AN3P$L)Y4oYb?FUC`-=a3*)W?cax5mMw!{p2c|n+A8h49UqzaRTuWJ~9fW z8>cVDy?!C9x@fHhiqks=?gl!l(Fgy0nOak$hLhR|Uqb;a1^Dp%?sxlWQg1`J+D?}s z0Ga>s`qnNL3^Y@-L#XB6plz>H>Otn1_d`ds6RFmZ(ZmFW_u8<1k2Tis>84D!O%>ad&{ zWmG|%0f;uR8S`mb%v@|3l!9H6B zQ(zTum?*Ea4PaKz+?uQbDLQ$Qt#}VwGtdf&)kQ@;AfVbxjBk7@I^<>F;3L*IW{|o7 z4JOji(YSYkr~8JmQg^4WnMMv5hV0k3ts;*`gUe-?jmS+d9zJ^12n;*k&1DdF7B_mu zz@SC2ld=$SQbI{l5oD$H0A-;Us3Rj&w`M?;>yVO?5$GeZb#W(L6QCIam`=&A`8Vj{ zkcMcSf3)WGttd-cAD%B&6y*co7tU^WP1Sa5dbZnB)`Yj(@YF5EfEfp`MA4zZTAvKS zs6k?H69{!D*G2jTnp!`-Cf)#15#k^jgtuDCp<$j^QgRuvDU^*!dG+b}{?@8jug*Zg zG=v^q`-?SfH0F!9+5uhgBQS4yW|@TE>InRk-9UlnJ>DxX4)_9;+Iw6Hv@D=Qwgi>y=YW$7L0uPv6h}rT zm`poTtmDj&4)d}b;eh(G;J>4lR5vn+gZhAoE05a1OVsBZLq|`sv4N4`j6fymKDp9s z%>+ec4FS6qHt+)w(*@`1fLbmPf##ruUbDm|89~}W@qdQa@E4gr?C-ir7cy$@K^g!i zq_l1IckL}c4QP~1sGmKGx2!hE&COl>AQya%E|Lm}3or%cPR zaH~EGvI<=wJ%&{5;i3xKP?iUbB>Q1nLM;5~(Qhcsx?KUcH(IMYBtmC{iLqf5QPf_fTmYKy?S`1K-?y z9-1&nwP0fD@c`<>uFlR^&^R?j`lUKLp-`aJ5Q#>BbfnVCqmg|)r0Z~%J97r}u6ICerMk_#O!SewJ3^9Pf3&t}2m zccklJE3q&Yq*#Z52j%NUsE-)z8+LZ_lcZ;J2P!`XY!V4QU-l7T=H9q&GzJ<0z+<=< zP<28=LMjy#h1d!bf3{0q?1C-ufef*-yNE(D#{PUG5cS=}J}@8vy2*}|IjEx{4VlLFQxqv_tF=AMjvo#sS36RADUqbpX0AK*u^dQY02IB_eT}Mn{ps@RJ&^H1a z29Z`2!eb&(l1irpbpEzq(EL zo>X|e{_?4*X-eEPY_WZLNgtxo8kcjh;@ucOS|;E)`Zx)NI}Duz2&0uQeb@9KpF^4; z?J0O@+vdFE-ettb?gXs-7Ckny4~h>EEvC@x0$T-}SKFO@0GPE9vLEy*#&~ms%DbI^ zepqrprD) z71(2cUF7B)mC~{@4egL_P6Ojy+^L$WKVBCF&&o7-bGNVLcn8*Jytt?~`s**w*Z=Y} z-%gL9x%HSs&APvzjak9RtX2i}V~2m;XnE!d60`y?>yJt7UH{O#Q&&o37yOkxV{=X_ z*}L=JUieE__+M{mc-QRE|F>sjgi8K?wr0hOdjkJ}l|{&~CX-l@TC3IB%&`vl1U z{M~Dt|D*eX|9JeTeuZlPGIOe5g@oP%Lwx<MWlcdGURrVoEe!)9m47LlZhU z$W#N<R#8A4L zre0v}HPsgt*>K}ln) zE>60Se7w;e(Y&7gA;PB~=hHZyjWWZjsBrJUv9~)<{)iJUV5VsD4)tzdb!Wug$Jczw zaU(KZk!`=W;kBxBm$Opmz*&x9uTp|Toh`k}f}f?*RCO;H8+x618+TILe3E}1x2HiR zqu>--z%V@wCgx{V{PC`$>yrOtyLycDY%F|Nz)kPar>O{$e3#h^VI}tO%)+FN;;g7n ztuoPjFu9EOl%2fY`8=#J$2U*EBnUGa}4_({~1h_(&& z4sGYIynE~GcD&l+3`uGMS4xZ%4dUI| zQd%c|-4awm{dFgGg!w?fc2eNk#QM(JRx^r-Ada;-a;ADZZ3||NPy z+YFN>F5aB7Gj9s<{?`ky{$ZnF{QJ`*vAXBUv#L1ShDjOYJ}s`1#fXsofxMYj=&iqF zDQ7>6#}cPz&tz}Do?$9m&t1fL;i9~v4D%#-7dt06d+Vy|O1m=me8wzp-e(}wc&%Zo3sZ30xFZQ}`=+J^s?0M(0Xm;brGQT&IOv-&n za5w+7i4zmO*5Aebtje9V&|7VA=;MCqu7cHQEhj|}Y-nk=s9pK+91LbtxPj{fLdY`S zwLkYzQ*90^z6`THnZ<9MW^S@0i0ZE~C2A#PsCSKHGn(d2e5MlAdp*MGri4S%AXb+}_;$*H$2BxPAI@;Xg<9 gpQroZx;{T--&-N*uMb4&s_TnFfXKe2N4}~)z$p8QV diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp2.png b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp2.png deleted file mode 100644 index 04b4e033b0a1515312f6f57023909a1860e27de1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22533 zcmd43WmJ}16fXK90tzT15`ut;(hUOAh>}W3cT1Pjjf8YaN-L>=ba$%=2uLX1(%p6E zyZ1il{JLY@bH_O2UdE0OSnvD2Yp%JT`8>~DA3^f664$Uvu~8`0H7Us_FHopUD)74d z3MTy5HA$!f{)hJZg~Vgjm!3OI@Xcit(dVKlRB;5(sXhjLf7Mn}{WS`8y%qTvtRd}JyRgP%$R}%27H!WLFU#?5>H(huf8UKd{mWY{bf##*TG(@` zAM+1SeE;w-uJS40lBY2hPAk`9OkNQ>aZD{ecod7TprF7bdWFjG#^V6X%qs62kKr}$ zbqp2w!4)c@$3BF}uL2|F^`0VwW~gte;Uhy1ul(N+q5g~Yc;lI2N2pJ;p0`e+guMI> z@$fsT?7Nkdo*}8J6lw)3zXk`Vmk0A^XyE2wt$Z)#@jo*)rF$10{b6`TzjAbIt#Wc^ zp*yL{<+U@>P9Q!tn?c)^&^wQAqM@M`X%z6fY~R<=)NFr#mC7$tKLW1)n!s+z_Ilyj zSd|^RW39H9hvtTxM?2j>ZJkcQFG(TO~Ha=E6a zW^?1>e1ndWadw5ra>Uziw&UBrnWg0uQBgE=bMwPvtI>+-FrJA>t4h4eqXgpi9K{F}ZpYp|PnVh8Lu^wxhsCV01%1Nuquk}3R zoA5lbQc_aVYw^44JQGCA=DKT&YC76k+n$zWeg1cqwRT=_vWT;-NA<D|MT{q^yX z)m6*PtSo()Qo=(EqHqeq;K4lAjGP>-orP|6)cyPS)ARFjk(=igHU#J9(s>Geg3$im za}B-CDXxViFRrH8_52c5V=6v&QmhF+zZKOlA$fw*va;eLA}AK^n#-sJK8Md$S5bPS z6;^6RdT13^qnNzDj5crBcqOV*T^4Q&?EK&~wOl1rFr?;c4eB%X6VJdWc5ByTqm#X8 zey@tG1J9&8I%=f)HLbL?G@E|QWj}xa>BFsAl((Gl*{!v;HAzXy$Tdo0;uAvQJ^qW>#b!Fxx5((9BRg^U#x6twNM zu58s~3k>-u`7I=U2J<^j3}()*^6u-xk`zg6twr^jwpH29>Q#=~&9q&$cW~GvV|)1U zVfD4Um>(g1P@2$WN zY4W>DU^H5cT8D3|JnLDTUW)#Ki8yaEJ%m`o*XG*ONzW5zNV2K~WRF&0lB;E%JCnYk zNDO{`!YF?{>5)N!-kgo5si|4)w4uYr&Arc0PC`MkzTKnb1u0x)H!E&AR)r5=rk0j% zux<1q7;+c8awQ5MVHZ!g6YKi@w(Q7=5c=M0%tmqpAD`;cXOq4&NW;}~_%Nq=w z%^cygtAJ;-9bv7lc*3}0;;lLOUOP#X>3MlF0?C@G;oX-o99P>zh-V|bPN`Gf)*lI_ z>?0Rh4CUkF@tZz)@L;6UhB7fRkF*&FN_485wGmcpAw{exK1Mh6DejuP5GodSP|7i--?l zhW%<`!*Q^joAp?g0=EaR8f*rgvl3TDMFJMxhR~`iUadw?a@d5CVQoPJp7IG4cLZIz zRvq~n7#NCdryu`FU`H=(Jg>3*C3UPrgu3(S)n!=A)AoJit~dm#f_2fQ!|pulpXFCW zK+$$~-&$+S_`yBeCwhNoZZ$j;`>H9jlsGmT72VqE9DtCBZprPnSVK|&;;tfZ7)U445X`}ypszn@=v zNy$xQNsvnNEP)MeaBwg%C}>)=FHI;tkHhCNGugFH^OfN0j>+ zC&yC~H!}yk`hq+ z7b8x-xrIgF=qOH@xbNioekDtW_RM*|VdLRU2(rFji#YG%m!?nWw|pAvdcMd=85&Z* z>`wHjJo_slDJzSK5;CrIJFrFy0?gcbvl&Z4NvTcZeF6fd<>lo_Y1>>a?Vb5kZh=%s zb_8zy{H7#?kMX&!{o(lkXgFa(vV%6&`4a5JH?Xw<*5wrx&{AaI1`*JH-;a_d z;Gh-{MaaVP^74NLaefQyvBYs$o1AA_1imNrPo=@ot=n6NGv#OK=a=NAk2BI|$|kc(NE4rxBI{XKSG69$s=@daJVH8#Iw3U;eQa(*4HGy2uGdce)9i@ zr2aqPvHz!s9GaE?xnxIG3iu#!y4jk*X%gNgT%Zz?#A9R7o%j&;K*uM=9H`=i2gBy& zxw*NK1&S>d8_UZru*YrKXI2L!lnD z51!ZW7uxvO)d>K)=&K#zpwkn}Idl!weApf=R@WsbBjcYl9A{|#;Po8t_*pscCw$qY z+)Z8Db3Hv>6z+u5(l;5=$NsRTE)DaRHHye>&HVbuDe`Zw}8a|U0r?Rndo^m(saS7MhuPpNoelBt$Tg*Y2LHo15T}3@%l-uaqLl4~T?~ z8SSx0GWz4QUG74g*rFn~v^^Yz#}*s-S2=&he8G~s9GBy8CM6@&D#Kbox4m(+nD$nu zkg~t{eOVb7P?);iei@;S#<~alRx^`_6vwJIN-8P_<24Ss`T4h0qtNml)EIY1<%FwDMI$W~ zqMzpF$n~r4n6H@n8-46|Cy+ZroV2x5s?2}F!?e2vjvA$4<_(;Y3Vjh69TB!;C>W0QFcs?%yF&*zstY(UoZAN)zBaX1yuz6j7hD?yAa(Q^7(Pj08)ezat~m0SY2CN3tF() ze2~GEi!^oO%NG{QiMreH1)@PrSvj^hO(S!$e01$_MfU42mq*30RFQFU9hC|-EU*zeDco>R_SeKf z0j?%Mym-CN1q=)g?WUU0^0lhpVRak4=j_L4iQ7=jekS_j#ZBSLe(wC4(wf#H*C~3| zjtI&K$dvfmrrXY({T9Y@zU$j`%*@xMq@+;ZhlkGbb+OseSqg>2UEdW8RBF39ofeg6 zSmfLl&TSXELE{mC)TSevNjb-8F;r8Y0CmWzo@3OK+ zz?O>3F9g1fy1(|vyqqDsvbJ_KOXqB_(5oFGt~&+?>*ERBR-_l2u0J#tSk{M%YaAeR zj7&_>-@UrIlEOvV_S)@TWaQKf+0_x4X@anq5E6BVk7*S@_T%>}EtAsDcXI?b+E!FQ zDFudy2dLz=L&SBR*zI_oM zIkgm&6=D`G5mi;<)3dX!?~H|rpoE7|R#ryVU$?<#QV6nFJqX^~7m?^~Jt_S9 zT%-!Bs&Cucp4dA%WqkbDVw?mx5lX^-N%f1?bn{Qf!n!xq65)El*$i{_UHnySu>kJG|ab z6D|^QmHqaqympsB`LnX<)Lp69=^eNQYXS(d%~6<_*NTK_e^vcQn(*YB%hUDkHuLi1 z%v1HZ?2-1KJKa2LAY;#08qaYM$qWzx)iWwN`NxWhynG~6Vf4Fqw#&chA-*Do!-nf) z)g$E=#9y>)X=Flx7*@YtboK%d%6DPmCD!(B^UbrcnSku*Z2OobI0P|kqV)KpEV zGD8n&X{q7P*WaQS)@@@04kFnFW54}rft4~kxIMxRZEatdr6eV+S=KjRmak3Lc(>ogMqfk003# zJ8;M9T%s3~YWHK4lUHB$B76mwyU1*SW_7Guaf?r&d_FSr2G~GULP8X^j%zIq9w%%T zLrefkt;_BsK97$|&o5gq8$rbf(sP5HJWTlFs2A$<6KQE|P=SbxSm}{jb}F!^+uhv_ zxe|5qNu*=^Rti8;^DiiAn}|vEcX@ecG-$wY)drHc@pPV5pu}jy#NXc^tw*1aNU4}k zS0HY83}BOGvFFE+C*U5X)fg=ri2dSsT#aOI9Bk8T1m-Rk71~DQh0x^Cc$p*sl7@!H;UmlwA%BemaSe?`rg|iOU0q!PUP9oC z+(GkaN!-`c+_$g7uHSukkkFsJp@$fS-fYhbV~G2YY@q}K#sPIkLve6&Drjjj<;B}h z@J?B(rEUk#TS-Y>_1e~R0nGP?VX3l9>{(`s9LCsu{QNGziyUCpU^k_1x2eu=gxGWR zAJccoLr(4P?>{aaMn^&F$g8U_ZU17H?Jjy^2hu?py7| zrwNwJJ&GxcpH-y+pvp9uCl^#=LUJ5zb>slOg-t*f0W(AUz-;vL<+i(g-eBFDiK~5#2Zum7H}_W0Cv=Zwq)uq}E1~kOkJsv# zYrsD)C$EMjq(`sb>Y?4&-P{c)Y-K4bEmh=ZXwuQLF*R)hx~^4W=yTIzb=5}YZ@*rU z@)h13!ztW^5saYDcc~{ky~6P+{B(3zpo}0{7W?M;p7ZDyZu|b)C_8Mo(;4DMZ;b-X zTcj0bmr8pAAF^F}-2xZ{hApr2=H0vWZ9_vU@f}P=RWW7#49b@m;D&Ei^5$8~g4J9z zm;8S!fP#AR^y&0gCuJwlSigrBLz|fQ9GClhMznQ`j%=60k}!mFWK(8FIr?8af2WRn z8CMzks~mvs9t}-EWArFMdOLVZ7dItA-ow>P9o(aX3UL)*Y`(VRJ8UjDJF ziUgLb%ChE(hH#eI#`?OrjScH#F)<))P-_{xG{sj}GZ&4>_kGZ@4)<5xXSyY8{!5EJ ztsf!4NK%KIT?G3ZSV0Z=^t_c+*#I677!VmB|2AI7HK@^z0rRf(7zWfeeO`}aE;+1~ z450a=?u1e{PY7sbm2kP#9tEG_b!o<>8H~on)#tpzKjGf8amPE$t97J)uo?=Ho^Q_+wke^R-V;SUahVc*B6 zGv-ad+1g(R#-6||>IPWp=%xtOSJ`0KyO@mW>PXs*alZV~1kh;Y@DAVRbbVX$S?LIV zEU)gq2M7QoT}A1E%Zq``qu~#q$So4?#nU#>dEs)TSUyP*tPdGx&8`QlDJm-J>({R$ zQc^(%(iKqmc;_<){m)aD(VOzz;r_x6)$4pu7YlJTo)i&LB7M`m&KoNYFD)3&{S1oQ+ z9xvw4&E&Ig-Scf?BV*$&3!`I;F36dZy7-0ogyH^e;-Jys;RoT;^m|eFuY9Qq^H~Qjcv0L!r|WDD9?4SMcPiw@F7h`mHa6=N|562 z7oZ1z|Gh=s{T47624hWY0TLPKJJS4ffuiF zxl_PN1%Y(gZ-sa#k=zCblW@KaoiV-FdK?Q=fV|y&9n7P)w3|F=?yr*P4{g0ak77|K zDZ5IL1rHuL*7P^pJgs)tpp|{PFh5Vlz<`Z~M-em6Z&8^qW&)G*+zQdHB7fjhx)#Et zTP&NGa`xJH=OA`$J}*X%xNW}_(0HOE(*uJ#P5~%?K85tbmJ*A>B+WUq&WcD^U($JO zR0UZSV8ozH6qjzBkjxL&;#7DnWL~_sQz+feFYy>pEbl(4qp(@_=@)EecyCS+Uu)5| zdb)neLvEh+fzI1Q9zRr%Hsz-_?TdD2cNcAD7dwxO^Rv42-(9odmV2FyPW~Ji@C^;c zh0a7wY%Dn4I8{KOJ`5~vcJoY5LA#Pf*i!&3&7%;r(wE(DTBk*Txp=9cz(6`yR*Br5 zr$45q^nhneI_7V0zk-V0JzFg%CZ^9u0yOkUCT(?W^+7Wrcsud(*n5y?H7Tqw<-ouN z9@QB^`4+<3tS17+ZJ{?U0uiIH7k-EWyAV2>Be3V6#5WYqcRf9{125uyMiVpu^sL%+ z1MaXJT>kNr)61;KlDlgtCp#Ny34%~~3dI(Fj@;|-U(>Sk^68oO5EfRI65?>A7Va%8 z0|>#U(Fd9E_uVOp1*meQ$@SwsCl;o!kJsLV!P(^SuCA`x6H1T{&|i4}{(WFbNb3i& zw??Cqy#r%op$NM~x*Fh}g5o*a+lwcLR3ZV}eZAqty1h(vT7y-mj;D&>izp5EDC27_>j2;1@l&n4bg3rnOV$d+w^9<1)r0-f?kpG14!- zX!0f>w&dQ4pBUeZGPqr}(wOOyttwn;Tl+#rC}nJVq4XQSKd9JV&wb9y4dF5Rk%6k+ zr-~fznNmXhG+x4p5lM4;>wAh3?{1;Fe_GU5EO?B5)h;=KxLV)=S0)K8;-pxz@b(|Y zhUJ(A@%z~4p2;G;V@6Ft-~=ilR_svd$yaG}@bD0i>j9?BUUTwME;i~zqe*#N_fj!zki1(<&-ny)3tg@RT_I9MLw&xkYADgnVppuW>YOP5@Oqug6=Th=_UBp&FT%ch z=u;?>66$jQ+&O;ZVu#I+xkJGa3@A!-U7PeDpE zne33f0Op;UTTI8oI7Xs_YX-lw9~`##nCR&w-}{1$|BBZ}>!aLuXghYYgR7Ni+Vr6@ zCNOWjL_=e9VY{+e$OJuDhc%#eUBt~0YrTHW% zJog4BMw*9<*Um1TqEOEVyAN0A1xx5zQ0_@3Ew64_u`F~NbXGY0E?UVNFNzu3ba>Il z%`EDyMRJiuF2R@LI5VIq`CZCSI^*%+w0ZL3?yWQ(%g@#wZh69y+PcrpuF>?$UAjLI zEKLijB6Dn>TLahwgV=zjL~y|C`SyfjCEmm;hTd{+fTUP3Lj)wOl@}Yp6ge z_RY1^OQ-Tq+t|n|mhm{!os%<36?&x$BWbqsnmhed&23LKPqt^|UBjHw6wl^Fr{QWk z##J(9QbIv&%7U}YYhmQJBjj|h^(64-O>6t?^q9}Ic`+Emg5_L@gc`{!SdwhTVJ?2S zv7Jo}jx|>!F3fIsn6!oDMb$OK>BLN)0-rLVUU!d579*vDXm;U$e(H5#@0^ebdk7B+und}+6q?9^&a!YrkK z5y*}5C_ijAHxo5^O>3!LKV$ySLq~NseO_>8)+j8yXZ6iKR|0Em{*!QOK+pm0)QDH? z3^ZeZ3pKQehmO$UkooA3m=bAPOHzceM}LH)KZ>vGh-_sC=rLsDBh>X)N<_01s4R>z zb*-fz&iI&^>@+GTikP;Rp-`>AiZ^jKeG3KxR#Zn1xzVWvbtE(0KPz4(^D($+i+U85 zv-bO_OkX3H%jaD^g!0A=4h4Fi4f*8ER2m+&e8%JbfrCpuY03%bjW6sxy&gzkoK#hX z^r~5C*k&AHKEC&6Ya}kK1U~^DYwOvxVoB6(O;y&KLZ=-omRK!uMTb(EsWvrfi^E)1 z*hrMOyL2nBh-Uc8SCrpjE-#QbQ~C-&usFyUb$7jU#}TV%U67Wd$D)7MztevUpH;!i zh5YVq9}Ng&S1;osEYZml6Vqr}+w8t&W|+3gdCk+xdAVmu7qB&@vkAK=?Fn)ShAoRU zszKn|eU~QwGo3yO!GAex3f`va#Qj zW7KMix7>YCa|+O4YO^}kMef)c+4#`{US^n~Yykp-I~o6I(PVh6ye&(~j1ylpI z3bUXpwT^M_Y$a+HkHh;vLKNGSC;1gWxXJK1D~(s9 z@dJ8Q7803-8+S}6aNlxA!3KvB7>b`2v>xjH&MUdK)1)|25BaIBqdv(4t6p*M#C7)XdM-+-=D#mR~EeCG?iW~l5`nuTCW&bl%Xm4m|h3T)#>vh{b+H#VcprA7Ii9)R#lJ>)O+XN-4Q^s5MXb7VP@EPn z7_i!H?)YVuiEDX`Rug=mQ`u6Us9GToKqBDxBw(t3kTMWzBg|8sk#qBRmz(>$PI&Gc z(FRRWL8kC10CvaYT*TI&QAp(9sUSmO4}r2$rL!v{h!)Bv6VfJ=e zo)3BDCs=sS4R|oethAWs7aG19l_-kjr-Dt=B1fM(Or)(dhsXQKUU zXGQccOS^0I-F`fsv;9_@AW)liO?>D(ZaY4sBh!-N7w6|^SzvVyhm*pS7(JrQ( zV0&@dlL;zHtLX!)$_ASJ^F$uE9&gw@kd#iqea_g8X87&Z8x^<;Akxh1$D$bUP@6pdi7A6`d&ZZ znpMiquj`P4w!PG!syxfD8NT~?WQVKRc~3~NXTD188>8cw#BIK3b;4-!xjF00n=l`} zjbbs%Jl}%6_{!T`?)@u70~#vMTEz{^VSGB1Q~A_SlR^adpZ42>hIOC_^q3tpF`3;_ zJ=i*CX4cFSc!znvzd_NGSlZ10e!a96#^XPNgHBcnLqQI%?rzN16~wpZd=5@Q&+toG1}M;+EOgqgrj6Qv7o?&novH9O?FR zgmd=d#Ky_b#f&FPXacVQQ`M@Z(tzxRiM^mTez$FW4Z}azTin%w#{g6~;MR zHH*imWB2q4RXp!oX=l41;Sap@*(dR_9Z81&NX2GJl+FQ+Ezx_CrM$HwRJwQvxr1wT zxRZDP&Pa`AiG7iU$*5#k52OcNYOlL7J&%UEEi6OK^IGAwL)7%~ARDV}^PCIxY<<0i zm`26#&_B!~{m}mzQ)}@!qyO{IfeEK;P;(>C>~%E_z2v&&d?qrZD zV+i9i>Wk5lVB*;eW(6&=;sw0;(l4;h^?mlsnG45==bJ5@U9q3Jchx7LTz#mhyT0OI zL$iMe2sNcqi@KzF@*0$jdx{(Kr)Mgq8zjuEru(5G_E5YE1PMewveVV;!Tk(h* z%4q(0DdulElj;6pBB4L*LYx#3=2-=|-$SqL%N?m5U3IgZcKK}Uiteb$;4o!9G`0EL zl>4_K=W0jN>~2n0h4NN*;oR;zr|pRKW>T{LvKm~KQCdB)Vh^kP7x%;IAGRiaYe2g` zf(%>7jYlZJ);HOoX+ndqi%J+`ouZ$nUmFOnwPR{B=CPGAyLP_6EYwbR^1FU9ozt(z zp6RSuLql(+tU4w>*Yq_zrD$=?V0vv98S3Znu^=)>tTzuf7STjBJ@^}`*qMYgkLa0m zfC`uK*l+FtjCDpGgm0grZCaR!HfH5xR>+d=il@vxdK%YHdh2|LTjT}B1Q7hG({t(j zi?SV6ZqG_ABCQ7o|8(!%0~T2!JLzSGFiD$$T`Ir0ak?o(x`U7Iiq8F^3q(Tiy;p zhXdsz!~lK11FL}m%@u0S?c*fE8Thdxel6=MTgUzW`JqIj!%wH$d_*?x``Z){1w*(l zSni!I=6kt@lgmTv>b{*7Oiv}1bam93nGa6~JwQ0E;(Sk`jsulZ!2XtgwTa!g*BGPunr;2 zATUI1`t`>Iv(bhh>5`f21o4sbPZf<%c_r;AI_o6vD2`z=OeFUvxnB9Es*4az;EM7t z&R#ziJ+^6{OJ}-ldc@|{?hjMy?i1Xzc&eNMP-`jG-*b^HE5R*;dvA^N_Hn%jvX%ZGB1wV6Li77PYw`y zy7ZC_$i91`_nF~<=hLKIoy4nESp=Mm8i^bMjxxxN>`(`ja7D)B5B&DJqp z>QPXMp=2>Fubf;(TnQ=U6Pw-s<+5MpE#_uh4CL-!i@&bBMW9f?r6kyYDj3kOkvaBg zyr=r|&W?xK8JWZLyI#WWG3IUPy*-ZV*HNGvPuEE;G}8M&A99&?^!C@gwv^Yr5AO>w zGj5K6DyWeYXNAt1jlrM9uf6?xyY4<@tv-F8DCoGK?S9*2pP_)fWJ#jpAA;>xxv?o# zowRT@=+s*2nN2^HfKYOwMV`&##yq$t&j9DszEj#RoVA@0AgH*vSg7Cc``sZr*5z5S zzP!VAbW5yM+=qozb$zgdF(Naw0H0MB1B=R->gSi-p;Ix9i#v7agZJy2!GXZoN`b6z ziWJTaszh}~X3ZeyPoJ*%Y*w5F9k0*|3?BG==C^ygRbS}yiy%&CU*16aVN0Zd%9y1{ zofWz?(3PU)R$4+6f-Cx`Wg1pKRX0$-GJM&Vnx8!T+Ca9{H4q8vXS`ti@UZ$ZN~ArW z_(lqee<*D~B8vKg6u|bV2l&(5O;8|#W9NA$%L-oSq$s@>4-eg5C3hDzf^`{h={$rj z3IaQ9SSr&0etO^NOM-vZ`&rwiT#V&DQQqp6vQ=KDZUPfI5hn{ChK9PP!l$2e3b5FL zJ29z545X#ZFRieWf5XWJttAG}VEby=?7m<^pn632ljChJ==2jj*zjT=6_@@I!I)EM z0IM^0U{BN^pQGO)m(x07DDilI9NCUAA2^NdO}#%^ao*S zB(KT6Wm)a^AUU~jaXGAVt>rtzhh6bjdsZa;F1XpuvZBY^WewNQN0Useeg+=z3{O%1 zjhMqwj6B}tavwOqMszO2B9~S+mbLVAxxCK$N!#1j^X_X}{7%<=5=EHKW~skwvEwKb z(`2mA5w3d7zXr-PBXJ>s2TzsG8DP-6aS?F*dRS{)F=KeM@WXPit}k$=+rlZ~>Jhz9 zekh@X3dTf*rU+mX<0-ek&_D;Qw~2;zka`p?uc+dSHPoXbkh7}srF_RdNr3h0WZ7PN z&KVi93Mt(w3A}EXUY^?X(e%o^$tuHKRuBb?Ch)h#xMb*U*()6~GA7Y28uC7)CsgxR#5mox!jsOIeh(0`TVc-n)pe%W4pl3VxhuAIjr#tVaJqE zwe!^Dt4@3M+j%%wl&}~UvdZu%z)G2U87{ULCBxfTcxk!MJhfwY-VCy`_r$|#@5$$a zhUY4}?KQ0P^vsdJe0NS5#wyUVEMjhs5>ZKyosYE?w28<34Z(SA&AMBCv=)!`aymx^ zPDBrRXJ7L0d0u|F?ST$r_&X5#nzJeY8#8W`ntJUMUapp1FGl#Rc0Yn~IQDo|MpbNE z?R?;dU!>*+*86{r-)aI68|r^Q1n0!}|3{T=^zV7hY1?Sk$dJQb-t)?Wt^m+w0U$vu zQur+|{?lUrxV1WcN%qcvb$8OQD$h10y#@P4Yi!PqGr50T%-{$y^!_zKiFj_u!3U(8 z!D0MQD{BerEws~rb$>+!Zr&k>?gCbqNi2=6h}Fj1Or9m%$z`{#`Rqc>@rA2YM(F`( z{|G+teMO85zdv5JC%E3Ic?pGhnhiYw+noM#)8CxZyeBfFSD&tPHL$FFxYHYB{^W)1 zJ#eT!ZYm*H?GLDzq?_lqt(0nLAV7QWbN&^Ifc1JT2x)}0LNRX!8P+!F%_(vU*7Bhv z$Y`S#^_sB)69gJ}BZU3!G;o1N+;YLFMm}NqN(OhOiNQ^o2ueI^aR3nri0B}0sG+l7 zR+(+5sjJYV4zF{%Wy9h{1}c7z=W)FP)`f_d9q}tN;GzFH)4rX3w{_$9S~-pezhZi8+IjKQ z!B&srhFF#|JtluKr$OdH@^R$LVT*Oy1w!lU4&!2HE_6jNG69a z-b&-mW))jJS4iiLoJ+pcZ;U(p1I(gMS_Du{U*a9bY<^Mgd{h5xz9#;!^Zf>>+!_uQ zUfa@xtuZjNy^}tvn;px#yJADx2cM5+pm^0at8>Y6eeOhuSKhyta~7c`4zyps_75nH zhxY1B%yK+n5X=Va|E$^q)ZM(9?+za;W$D-N;qww8OLVw_d>4$!G&tC} zSm02u`q%&2@_=mDcYj$o$|d$rl^9QHtKz51M(pICM#1%82_Sc$p=!J?e zh`EQvz8twm?Ey3o;hLOC+N~}{u%HZprA?M+i@r7T z>y7xST44in!ia9kuI&NH%W9!wD?0j7jqq+^kAW-}F!<%o8gW)pO&SAl$Q<8VzK@y6 zYz4n5pmmYoul%|~O4yczW|hKCkttKWG!5|%9Wc062_MtboR7m)QSJTZb~+jj z{f&_tS7W(lY3tny@AB*osgy7jB%*u-d>-XGDcLnWvzuVb@6}5(y7(N95fhqzvhs(( zl%(~%I{C<4Yu1rT!p2ZzvnzVM9#&Xbm{(2~SCZI3rnzy=(|x~^PDt=N0C&`LkCbt@ zFRb47I+e9i=)CAM+%sRr`7lj`FQ?`>|O#-78xANlu3-u{ITDG zaS-y!iuw=awwQVA-%+T^9_Yg;Difgelv_(f`*gCeVeX=GN}V!N|#gzDiBg{z+Rcq zJVOKjOazcxgrl3L-8!)*L7wDYXHDpns@jJ2mGO5O?!;w9__TJ37DXe0geM0R%Xo*9 zcx25uL03A!tD5=Z{rVUE$nB!b5|?YA#TJ7tdpb;H*;dWUU^L2x^z-VC=DH#Uhzx1I zNr*CMJse4Be9Fy{!Sx`IXNgUSGd1E$a7L8xhZrIDT*Kx^jI{KzDj4-rSoKo0WYhZ8 zNwCp@=zGI*<29_vYWV=xKQC^%o%}UN1pw$HWA|KqY_r?T2lb4V8bK>B0$=4Smyh$2UE)md!z*Ly0ujl2nY~ zvnY^s=znFh%8AV+2W{f*c6Qs?e1yInz@O2|Z{b*RjCzH)X{U|uKV02u?AbxVJ^46y zR(Q092J^j!XeI7vI6xN4hO{NN(yo7m9|9g&7Z$=jXnIn;o6=Fg?iBi$XJgEA&H&Ly z6bsCQt>5N8ln<6$x_+)oH$oRkMjDG}PaCi=e@2h8-Ec-V`Oh>IGG%#1z+XLp`w49P zFJ;u3>{Unk+S5+B7w_%3PYBj$dC+f-EPH?NK1&uvgT;dJCA-5Zb#H*ywe<%3(kO+s zJt8=I1iewjsQO(#nAV61-ki+E;S~fCyRk(^dOuncpS$PL+WGPcMZ|} za?lm4b)6g-@=f?;h)+Qro?2l8`a%>K;YWguWKlg1xmwuGg~AM=P{^fiAGIhLB=epU752OhY2lm9ziSi9+nUQDpgt3Dq_a;1rF>zu>uhzHauXjjqI11ARzqtic;D^mIa3 zec@1**eLfP?jfAVfBbu2V#)ahlZP~GOsOk<18M^3YS*Z~)6~~m377OlLW$kl%W{~#% zqW*%Tj(^nzCsX+B!|o1lD+Z(7@w@}{G(#^jzLJsGn-^T#cyVnQX=esH1?(vyXFMK% zUGo$FA05yC`Qrck)@PJHnHqAm1{$6Jv^STrK$P+4_oJhL@Tu)hM+3uaSEgVdEt|ut zCsJuZbjfEl&MeZcxmvlZIUit*%9KJ^;oQvcR|_h0&GO-oVm!v@n{7d3ZO+D1zM04* zP_2fWAT9Q`omVk^ z4L(k)d6&hnbjNKjmeMeDQu0??Bh8nF`E^YXRu+of79MhLU>ndnMCZl12Lu&1gK3@( zfzygpz3JUixhhsPh5~F_rxYU9GdwL`S^`SrHpf}8U(S4WI?*jmGR{{YBG!oA zpm!JrC$=4D=LfI}Lg6Le#bmqbCo?ouXm4OAbccc+MuuIGvl-OlC`w^fI!$i)gCn_M z$jNC&Sh_`V38MeTdrX0wNzvpot9#rj5m{}37(#HkVQaqwnHKE@2m*?ul0|6p6Ty# z-oK}2*SL}4xog5Zq1k|k0NhH1v|vSu&%XaUETFsDNVu9d;4FXv-5)KcFZZ0haoUxg zw0?8zShj?}(Vm&n?*{Q)w@A?x!>N(9vlE?NElPI@mmI^48qlNylf#Ra-i-|2 z5nq4-DuCaddJr&IEJiv`_BnfbVPhF|ZGyAcn=Z+pnOFp%YJ(GQ`C2|g@w$@#{L2-* zXVUK*1V>B=hzU4W4?}S3fV$s1@OJ^t_g`Om;#=@Pro!Z~BuJiBS2G^yC&8hcr*P&2 z^)(#E8?2X>ZXM;F9I}ItTvw{s`5k;e<+pjpJRD2anJe8PijhZiOcQj!UpbAkj+R}X zw$n#>|4)CzgZl0|916KCXay%v9l4;@uf5%_O*-X%52NXVn^jiy)w+@UaqWfAw=pNq zntz+T3Mzjejl?YEaWy{uw~@~;oU@ylbt2W}OKt+E6cDY`w_t$WcAtWOx0nwJO>yHT zDLmQ7&t1rACelz>h8YBh>n_f`EyqQcW4Y=V4^)HmjNz|E%nU?8b=`&@Xt0M${Vae?Skpn&Ta5hU}Ic&_&esA0d)#E7PjW+zez`YYVZLUv#Z(hNVTd48O4p(ujAX zkaGAmjCJ8o^52mODBS@j*lDju7cw)AX)EvoF!J*$IQ%c_uG#A3#lT}Y&=vxX4zxUy zukMOISNm=rnaqFNHA7ZK2w=nb!sE^Yr5xx(x~@Es9ehcA`U!k0DzvbkQH@lun~FzbSy$V@umAv{ zXIV5{GY10zQ^qVzMq@ggHO88De@Xfb9o6m{xm9W(&vn$|Es>8L=lEZ3XQV(whxxM% z^;^!LQef1`DS>hHHJ&wUxF)>~sC~u|= zhiy(j4MqyY3Hy}XeevV1&o9O$cEAKM-h8DAuJGEhz}Ww*k~0s7dTrx4NtCtIqR3Lt zQItlKIgJUW*Q631l1^omR8urcm>I*AY%M4;vJJ9tV_!1XDNB~=yrV`;Lu7KAWKE2% z_x?G(*Sq}lUhltiUCi~H-*Z3r_x^sq&lB$x_+KFa@H4<@j#O9TV06_t-WtRzGmj5P z3BIsWomE;_wZW{5%-Whj@K&1$UKAW}SFQ#$H5gKY!DIuQ^EsW$}%b$Vrm zP(wqdsp2tD00`1_79Q`wnjE_H?gxNm(Zh=E)UO)QG7j-$OT$ala*b&2XN|A>L?8tO z7G)uf%kZU-q8_(QT4y`Ow_E;aIN%dH3&>m=yeo($kn3kH;CvF}C?jS$K*AlaeL@^) zO(3|)hyWX6#?FK-d>IM7x~f}aGalW0bpS*F3Izmpfp0h>!b(s}zpa6gVsc*LnWBZm zu?eX;;8yviy#4rMF5)k6-F*n5+@-Ilr0;kpC5BZ!J~^|fJiCD?mY&^w*r+iJ*=TC^_=2*DxQ%W$S$50H& zPQTR=RP!Wd9ELM)Ql>Z7cc1FPxX%;p^>i9s}b5)8ut)-6LX#wR1 zpyclTv)~HPjN;utsE42vi$Q+;dG|QPJ~-1RHFNR+j}2nyMzNB~z&yG;UhoJO<7zUJ z4rW!9)tgqgzw!c{Zys5f`qZMDd2#^mrJ4!5Q|L9-TJEx`M$z9L9tt>oCHC*1tuaWh zs!{4hakU&!HIs4Gjl^%!dOc^_Ki`HmAkY^K=q!j(O4S`lz)ri880W)r9ek-uCdmQx7W6<$Ql7jQ4down2-?7dSS;1 zO>6KudT;;wmcnxOY&z_dopQi4|^E`8u(Z-RU#-DnwjDWxq$u92gZV&0O~2ZH)unJ@1> zNbl9EYed`z2wQ-|rt2+#Sl!asf^~jqK+cU4bZ%o#RJVsEC(qOQd7zYQS!q2_Ea;pt z?=)}(`;gSr{f7tb+FSKP4E|g2?k`Y_F^1~$yENyQEj(QK>O**76Y*hxD0*tus!!^& zMVr#v#k$4So?TkeBvwJMxL2Ol^f0U8jd*dQo?jj1%^mY7d8`Mf6qJPX6AT@%lwcD# z`u%yx6MEnD{!o*D87FJ$3gbtzz!dz|4J{!7>jz6OKp*84D0e|%05sIhw&X*3T~hto z3N7V!;_dXh z3r$F5phDP| z@(zE64~Hz`-9~E6AT?0jq?I9vNkj3AX>PJSK1CSmKkcehi$0Z9lF~0zxG$U|PtP>2FWfr5Xjzut9O-Wh*_!Mb52HW)FBOv60i#w*IuowJ z*)A!HCnn7eXo4+S7H^8(pMXxSJm=%w6zQw1p*eEB^xk*|#}^`7Wy2e|Q~?w!)G%1Y zD<^5u+9RuS)1~#j@*(AYA5o1wbLv~}Kf@1?QImUYyu!i`+_xh!LZ?^Qkbjx@NL>)3 zsHBMC7=r2p*b(8Cg6tWdICd-4OP(w4m0=_*xIf{!J_9vwlyU`#S?4f@#BP=9vjQM| zQk?m85#xHu$(TV;VsDTBDv-s~L()r$B&Sa`DB|aJM+!=JGnNcu8BNC`j%}PwuWCyz z6mFiKVQd)KtOFN+Y-PK?uk2B*K; z%4}?Sc(nY8hTN}rB=E}o*dJL0e$(%rT$T2{I4eVcItQn4D!J8inM-Co7T#BIrm+@g z{F83r!4<3rBC9sGI`4bCl|7pA_llenS|V`H7AjGX^6?>E^p1K>-KdyZ!&I=lVS6#czsb% zGUwvZOWdv^?ReYVJ)2emg+NKiTZi&h>aHsT zT6hkr{r80?D~z5x*USr4whhNYScZWb;d(%uM0yKIXg2s5?Av+=!!=2+=kVL|fe?C_ zHjqC+-qsm}JW}Q6DcF6{&E`laIHj77k0qThc;S-JhhG_8K6)g+p{IXdHA*PCww8Il zxwDpAtPf`pC>PyxSa7>cXI*8|6Ga;`xL4yCRAXt0v9|YR@Eoga?%`MXEs9JBYYifj z+5}yD0M{F2sO}>B_s!{WjU!>mh2sj13)PL>=gjzYJ0#8n=>yV6@B)SI)$q^&rCVpW z`v|o$tm#c~yhixuCkWd_k!Z4M6t)P1TN({u z#DyAcak>!VDRKjf1H0XTp`I7=tFW4Xj?eMVti!yTEnKW!wF5S02yb=!MZ6ip2BDbI z;m?_$f&~rGflF6Fz_w#l-*zVFA@a6c&z_YFm;ESyL4TH8!Wg+aGI2OcU%U)YG5wUq zV$H9cV>k4sHd2r?9XcI}va$pbN_na&6fPc#A2?v>(H3Yk9l~;rOggGHIQMUGcqU92 zj0HF$VXs+-iyBHZtKj>&S8f=y*Lt=Pi>3Z#(~^I2U9Hm_5W9Ef`#W_8d8yc~gS?b_ z(P-#Pv6l_3pDZ(4hpXuJL(KrtV$%+^_uhH|GaACZn=2HprI9Pd;5yo{|9vm*|8YF4 c<-1ZzxU1y0=Q8i$>Rt(}za2ZsJm4Jg57dh6bf}o>fya7C={AAJnq86 zfIrJ{(k$RV=WL%yileeRC>P<$1*5xicTuR^P@H33ba;+!^-#?gg~F>x{yo=hnf4ro zdc!7l@2--Q*6NtE<`u_yvC|K{UFYS{#;$$pV$)N)M|ckZ3P#d{M_15p|9njJ=JZ}T zU*LhfAZCJ#iCu6aKP%II5g*==SwRKth5xKNhVofjInudlB!L=HDm6C28T3f1mhZ z*>C-Q_?#e7p8DU{)BS9v|MS+jcYOt&|2!n%4tT^A`p*Rk#4!k$W(kpN6NtB56OR-A z^AL;d-v9Zw0Y3e0T5?M0tOPXSOhFvRt;wL#F?QIt&CxAHBv%1EDs z4()q?M(7}dJV$;!r(1Nt{fz%|pQ^>wJ`>YH5ZhNplU#axChlpTu%pM+xKtRwUXX7t z4vVw|bXFuKnb;)bhAY<5+7Lxk@+|kc8&{5f*FLGDQ~iD|QrL+~@$db_@m=fXGq}ic z)9E_(Ge35>lcsY8zjJ*Uc%N~xvt1=*sSZ|Jd_g{B&~`}2M2Nbhs1jt!zYrxWaiJzl z@vU;eXr}W@Rh0X3%ub8P(KV%m7Y<|tui1V~@_dgui5bFo{615PMnXVNb3QkQG@0qU z)mja@!^O0eZ&%9)JPnD&?5oHx&-lz;dWFzdE*k$5W@Q` z{GWM$dpBi*-Z?9t{h`wVp}-~kx~b~Zt_8gK>(r-D!mE?(N4d@-oM0-V;sqmC+pw%1 zYz-xsq!r#r+ilbg6|bozjZq1s0v=*ZYN~&0wUougM?HAJA}6SucZVaKB|?wi$hVEE z`Ba2knnhsl-GnZh*W|CqSTeCXdDQhiht?*!hKqB=zYI2SKm0pvJ{j6^!kA%b^Hl;A z5@Y^!uDy4EYW8lZE*76G4#5QQMt8782FM9AqpQ7wrwwa63DIUk7X73T{YxcOdjs@o z5;)ZiLjz{5TFzH~vh1ga8G_f{TMXnz-O+JEmB+V8`M%zc*tc7yhG|7Vb6D^l=pG`J zbflDg;Ks;nP)Kk)kbu+VLU}BghZfez-FA5MU6oGb82@U_s=<9?JH9uZcBF4%VK`); zwM`$soH`d(U`*Fwq359fqCevZK65+d;hzQO+%>c^`zH9w^y1mGm)$%*2SEfMuHu{# zcpm?*ZeDwciQg1f@a8r}4wn(ybbn(W{bPO()x>GH>pGNbBT@P1q!t5L9AI@+oUcTo z20|h)R;A}9N@Jql9+pXvrB8AgF2;;>D~()0r3t9EI`E44yP{CAT9slm?!`&txGO3& zrzc7qZSkwxy5lIJi_rU*X^80NFbcR_xixRb8C~?^P2mn-GWpN+0^_gd-c_Y>)lq+H z!IoG4P^)4><;%nGF0vX|(Nz^lcK2GE8TCi&^{wV<4oV!p{d^wtvM%@wSCT?o%M~B8 zIeia&EQ*&?GbiWtn`PX0F?3?3S$+nVdptmQ&!>hxtT)j1+*9?zjg6L|{GsYbi;lNW zGEjfRAKaN`@UD^y9pR@Kw0H3-7fa7xv{RyOYoXi@71L`qGIyVMBC^D8u;_@*{9D(2 zUbf3?eMrP<78N~b#LqR|e}cj3af5cL_2HE>E8>GQ;U5#vYksB|{xVzlg(4F_Tr~Rp z`HOugPvMxt{^t$S6Qd!KBWx>zb4=M1iYli4f%<7%eJjSFI+-mU8aNGl^-7$|KIvG} z7Vt08I$WlQzc6bXLe?$JyVXHC-Ras&(^vxXYKFJ#4|LIM$f9AkYFEOsVXj~vky4{F zVD#Wxv{Qibm1?XR(;6? zahXr2Zonj-zCfX1>%-@%NeBkh&5Y<6da;>Bq3W&F^50^p~6(7~z!Xl5_adAztB)v10gi2i^j=#HY zvMWP@xowCOClPz*v4+Y>w!-yeb!>OKm;as#@1D^+2PYKK)Z^34PEQK?r}_MQ(Cj5@ z*>4G|3t3H#$aH;OJ_!0dJHDfsE_{EB3!Ee;nX2^vo;KoZmj8d8LjO;Xxc`ld-y;fS zh&!V%t!7AO(p&k)RkEdz?b-e8y6X3h5&Xz&c3M~+M%uF+YsD`^jGnmArQ8fGqt~T+ z$Xax>zJ*0v^B{LN#Mc?t6qbfS?!Zy7Owj#lQ|z?Tl)DnjXr5eF_&ox2w<)1kq_Jg7 zZ2Z2)U@7gLIOg?r`o-zj%9LOwor8(Un!aA*uWo#vo9^^lRt73|5lQ0h&>}3sh z`gir44cbpQXBHQ+-q7INza-DRl(}-Ki^G&x4H)9UK2Pu+lj`>zo1=^O82q=5L%*;Uxu6k^g0r-1htg^BJ7kJ)+u|48C|*|9VLX z<#LRT3My@IbxR5?>3!z`7Fli4i0X%r;Dss{+SUW#@50h{i^{u%?uv5|v{Kiptz1P; zlVT>Z)-Qbe^`!30kCGw%T$h3G9v@Oqn<$#(6*SdvzU#Rh_CCHvdz9(K1ar-9XsGfu zU$pP#_{Y*4;)Pg(43ZZU1WwRloHQd47bt~8V!TrTd9XB^7Dqp$N z*~CU#04fE754<)@P@E>+_fR!cdm*3Xllg{1U zVi;ipwwxN{Hf7R=BeR$M12zb)Y?W3=T8!vZJpW9zD|D(XN+UjiG) zzbLHbEvv!P-%aOZJFAQx2A-0o-+^UBP#&oJi*xc<$c*7~jR4jCC02A4lo^a*Ccc!U znlXHo@%I-)LRo~ZQ*dZ|p;?~d*x$&Ma$5SS&QNiT^&)%VF4t`Wz#lncA`~!E0S^~T zFMowo_h{AU(Od>H#N&K()IKz#jO_L=GNnr3^xQw(IeGMenE@4{%mHL}#TC z7PDF=C1v_lwiI2#sH$4?FQ?*Pa~oZacIrznc$#ZK79%;j8WDD}&E5JIUbUm|*aYAq ztE8Os2vRBUmUXe(Yn;85Q0T;+gwy75oL9qiB{e$ZGwn`<-rixS*;;5q3jamcL7NNm zlsA*DVWT}ir$rD*MeAUDRo2zw<3{f@N15iP7;GM=&FKLiM*OHPk`GsdYBo@{=B^s@ z`#U{PsBP+hC@7k4nwuNHTEJ2O#1YdV1LIitBlOO*r!W2Wyod5?%_zbsLs(?!tT*B$ z-m*SlIa5A(0gGSwP=!e7U7c@q44$l;Iatn!aU9jw6V$p4V<)Q+_d3Bb zP8@bYLvkY>ujqv#OPYHtAEV7q&{MUn)J$g%b|}1bgld|{viAKmNU4`PQ!tBHp5936 z?}^h0)xj0(wP?(WZe`biF@}PEjfTais+3B*x{8L#GO%&`ZL+Oz*Fi{-lo-m}KKQn( z^@yz6rw>C_(Y*To`rk|8?5T6-b1~*dZ@c1UUB^hf3Zn z`UdaIQjS?uDn{N@kM*17`Az||fh=`c@qlB!kyRi@yub=eJP=-5)v2g(KDzLLIW!g;-pP^s^}SU zo7HBpngIWEirC+v;0Vjd0)CadP}+%<2lsI5ZS6p#V&Xc@{TI@FEu0~r3&t&8X|nkA zK4Q8>Wmim2SZP<8Cw?o%_8%zdHZhZ+R5g$wj%h>)#z%)hH`9%Z&LU} zE0;?sxANQmBG}quNdTFtI7M-~H7DxWSqC)&mW`CWHoaR_NJ-tt6co)b3ku;fD!T8_ zN|QmU5r|Q4u{c|ur-Wj?L9<}Ab=2tdL8r@6oJ_Y|qITd>vOY({&D^V<<2hGS$2EWP z_VcQ@+hT~d$vQ=^!ui6c^(lR;ujR0Qz-yCEPVwthww|}=V?2FwzJX$$=kMomJaF&a zez|%6efs6E=lRqN*p8LIIA!&)-#N-fotD@vPb^loA{SYLTPH6cu)b(_F{4yxndtub@)x=wo(Ma;*07ZBYvs zxDOcp=aRod+}+NH$kVl{pHU!l8plCvs5@D(x%<;nlu@K~)qZ?e-|VQ>AR}H)n*Y=V zh|<;V7@_3u`0YoQ9fUSB`J*5EyvMcoX<>J4!e|AD zVEX~9MIjssSPMZ#AaJYMfh2`EVbohZ+h)a)NMwBo7nhaY2EVo`_ENxQC$-=Pjq_oHg!V7C@g5oZ*Us(6=V9|B+c0P^%)ms>>$7djr&$B?eRpzU?|o z{rR{f*pT6NIjWXRzL^4pbrbOu?7JAnT5wh}i)DJRN9me1w`fHUJGn0N(};;=<`&0W z_sT^~^b%5$CEo*(KpA(>jH&Ochl_>~z8Y)j_lM|_&xP?8IUSJ`pX{1j+Z$5%{CKK# z4k&noa&1+@jaoda_a#>5gJo`iAS9>h;mPd%-oj1m`&Qdu)Nu=l^UBYw^9hxXfyq@* zc$IcE12%*NZC>GGxHElx5hI{6D9PY(r2@tC%hQ=O{=jH)*7Qx!ennSjxje0pd(P@%N!(RboIu=3_clmtFIT|6+t3RS&L|!`S+F2y5%UCVoEEHf1=U_*}Gxf7uvRuz5!SZRK~n(bw-55FK|RGf|4TLYnN(qkI~)>yPa8WLBbT{n9K&@Owbm+`IepH-g!Tj}?g)VEdr`4q2+v2gM4)O;cAQu&Eflr6r$Xl@xj zqn~0N8PA-*-^M4vpCRhmC$G8 z;G{bI*$M|*qv)P4zS<`eS6VWF!ReNrKR-f+0iYKnoWTRygsV-KqA6`;z|i7jm>CVq z$7wwB*!uBdXkL<9v6ljiFATqSDUVOgd3BqN$1w>o$52?sYugA=5ArvIAL9An?8-25 zkLX|H#BK1nDc7nvmjRVbFYn}7bsAKK=etL~zK=jDf?_&^LuDxV3}Exo)&-55a;te) z6-bNqYv2!H|INg_NQ2=#Ad8)k6EW@zo*iLowtF#3$;o-O<0n_ zzrOuPL|kMFvdnP-$@w<<=Zx&8#zIA8j3YDfJ)gy`8g6fvOFV&`hZTlduMK~Y2X{uj zNf@|H!kBILEN6R!2u3cnLVyAReUHf*E6oURsE!I+GjUn#rVw(IY`G(t2@3DN?hgg4 zZJWaKmEn;ljjt1KvM$^Q7xgtbY;LX3?xe;)gYx~9&hKUo4)MZ`gCO+HA9zj+w63iY z+zti8ppXa=wYK5uJb16Vt{#{&%m}B4_$-6?Xj%M3^sT<0D~hzariS96B!J$e(@QZm^}Wzo`pOO{EvK z|JaJDR@&4-j)sYeiJKrmnGfQ@pfL^Q!~xIiP)&s2y~r{l*tvH>FFyL^ub(Dq>{*7| z7rGwxc@bXr)3>n^0J64YcdM+-I^zolFfdXP9#Vb|WK_g(IX%dPkuG{c7j!tr1jur0xSAcrqL)H#=SrGd-9i3fG+X=L^EWXUUhP5@%x%~%Gl5kohJDcW3v`38pG-o>O*!gI2e+- z^y*6*pECOILW#nr|GDv>RCuT4JpOT!hcpKRB9f4&9Qi zql^>0lw^c41NW3~(=hNTQ~$>Sto8!Fg3rnWe(+7MnN8jM6|)0WJ+Rede{M*u0e`~c zG=z=E{EdrjEY0gEBSW2^zpuSdcv9Qf`)aHxd+tl(*K#bLv$TUSX2hTFL`WVfn;O^5(tS%pD6YGeJGap$mMIOc*;dB~l^ZuC7P&JhuzT#0j z-H&Y{5QYEDpDnhfA6w&_xhE*Xq{ElYj=pzltQDc!hHG>4UB(3$`TOycj6x8Z7X^bz zRC zx|s4^H3`0M;{4*Jt9-6GdU1&L8NR+|W}N@NL9A=Yq@OFSWZyP297&_z7)d`o zH0iCZTH6vPSe2hFEhJ%L1WFfpL9q9W8Q|c5Juhti^PaQPnY9F2&EK30&8zD;6I!xBsJ3?H_{tJ=hc%DUC(zP8>!#zC9Wd*Ncyh zcpquu{CB`=*gWR%%!-F+P|a zr(33M@53&h(v@EaRSVRq;{;44?Ja$HgmyIx$Q&S^s~{U3-)Fo@#RCGBNkaCTsvu4- zzb3x-QKIM{^MP98`1rW&K#Utch1#7J8T#cxeH`Q5`ZMA2?s&z z%uxNI@J^4k-%e9BIS5*fd>@aMo_z&OkEZ#(!ldMuv5(E#efKQ;=cJ_-E}&KvI_Ejc zEblY;>wkaukkW0T%WE$G(a@sl$5ZmrK;dgJe^_MS%tB_#e#f<(FyoVLMkB^Rz;(S{ z@soip`Q%0fn~F{FovcoVxh`vsQvUN6TAzgWu!{SZH){@7f|v(2ut-y}F#IreKxZHT z_8-;9bIpe6913ibTzcMP!WbA1-|O-QIsHO3buS0?Q z1Xy?=dtEY4I_S&qdq7XF5ebO{;NsDaZ=7w^O{>(xY@EIGKAss3_0TjLZ5b~hP7?m-5FZ2Bj>FGS98)thp?=&ZUxJmesADW)VnD|8a{GdNIPc(ga_GTK zf5oiqKmDbkBTeA{7FSeqtS9GbdER{h&AFUSz#37+YP*wAULsdfwf3*3@yCs6i#4t4 zakLK9;0<=gcHZ9;?V*~3O~64rqR)~8KuX1zz{cv=atqcfI_dPz06jlG+D6iu0XFIeT-Ka5=P5kO&ei@lpiuns_G4iTKS~wQ2hRyP#{D!g#3&{p;8m&ku?j~6^CO4cE`mm z)Ad(dr@zf^g@O_|v@!4T-X8$ftptT2nV?q+IrtPQ-1;H$8$e<*|kpqr%uh6`rh16g4B<4Ms_|goz$G#X^ z6P{#0O%;X!6(9TR8<%jrV353jOb|zZs|Pa-Tat+oD#{0Y>N4UakroR9@sDYq&k)dV)q1V~g};4=&FnZk;qf_?;K-#e z{>7;&4!)rxF}R)M?TG9lywNvx7f)}TyesDmWfS|Cb+-X?uY>UjEcUH#VV8B`8o~6# z{Cz{Ke=93dy4j)PW^R#4Lgw!Q{>3n4hpj=;0*GAOaF7V9KyyEKO0dhm4B&6y4m`Bc z+nqyOL-`?mFzw)b53ZI{nV33T81qk>snEi0fNup%yx?g(TOV3raYL3Hl)r(Dn9Imo zr^P3Vi4z90YQ3zN3*`C9EjD2Abh~tNAQR`Y+n%#no&K%`8+Q<#Mhe?oIlX;{;>umU zx1T&<=A@;)5=VuxTlYw?jY`2>BLqy!jh{tx8yA1)9o6;6Z7>LWLA}y+HCKRr8b2@nPkK zslqm?zjiQs&*`SD?G{z2|0w_CX8Wcn`5a_7Z1ba=nRWJ!{5D!j0C5ot^z+KH&RNp7 zpDKU74A?D5k@Qx4zN*&z4-J%QSZPWAdS@(Km_#p~x~9YJ-^0vd>t;G^0U(YeVX(PK zsV=uUd?x>Dx00{$H@QG0w6#koyTod+KK&ztd;h`_*y|C%3}M<{CWQyY_1m8WzjmKb zEnc}avBPsCU@UfMVFwO-;jQTv532HM&E$5Y0a$+F=`m#*f)3HUG7ceLnx(n?)~9MMu~A@rrz2gRb#aUCG0s>v{;v znv_d6e85`TxsIJ{q|WFVCs=qDlw|jQi}|m{LG;$Lq~}4N3;BI#_I7=|3ySpsoOGEa zw|}a7!C!~19tfBI40T=RJ8~sr)tH+ZfcznH@|SPv_k89IPmh%=lq3B^FX{mC!w$0A zv8wG$ke*yze+jH=W_XjESBWobg#<%K^P;gvX6<0mF)PcA;wEb;8qn(Dr6f5wYD z?R=NYE&c-g1w73hrdOoMbo0?+Bw`WbiFiwl$595Z*)XGS^H5i-P`nhrm4%>X*7n z?i(|b&fYr+Ed^h8xXmAq!ImrBS7=K0RJ8tK0@QXYVu^PGDyMt&pz;&Dh0~sGV|+Q= zPq6<30)4v|7C-u09lY5gjy-IVH8M|II?7l5r}p|196e?V#SP%lI{ZGHf7ND2<4VGC z5#=Fc|BoYC{|mtXe<$x1z(6D=c-CBd4e)+z%sU-p z{!d>^K2{IV7J9Eaxqr;3@=7tIn#$dqkmLP1j4U#<#?Yavy4%H_**yowv)I`w8 z><3|LTJ{d953bpLya>!A=h#wal4hETG{sdHU@YnF`zESRFe_kWF#cnmFNFhMmQ^F- z(>Zc|B=T^v=Dn_}f-3Co<3=<_77;>yqc^!3n!8N^v6^K`idlq(!+w-^Uv<`uBUts4%m5Fa>Q$eR!i2q}^WQ$4@B zIk{19Co2MKJmWHt8Qa40>LLDDpc-G?s}5ggis94!7a#mHW*s zR==6UxA*=~7l@>R(OpxL5mx~d!B7?HRko~tO2>UidP{nJsZk5~n?oq|=xWXoq~zY7 zDW8KpTkPQqZ|qp?K?Z^N+BvvW=aJA&PwFdhBeuo!i458A&$hjC947$JezfbVDNRS< zw8FsJOE@1xIzryEwh7IG1OWau;vl4&?tQwJk*Y5w$Ow)WE+GC5vbjq@he~PY5W^7S z0Qs!$u<@SqH*|Jp$DGZ?{b7zjXV)_M0PrK29kMp(;YN_$1pqq)s)9@oE5oZr>H-Sj z_H)mKJO(1niQ5cLbq}Q#?!gG4ybf0`mAJ}Si5}5`f*Y=HJdPgD(gO(mY1#g;bf?_%p4&36~SyGAwN z!7k)D=`AI!i^~z7B};uyXRnnKvqGo zr&G$S)Izruk@N;oaxzFwoSTVrA?*#PkgNj#;og_u!CKrVJdk-Pve+tKNFfx{0`?Bz zU1twdKGsD;g>?5PmyAh=CC{}-RR;h1?YCGpj&Hrz2q~Eh>U?s$c-IvU=~;RMWG*2j zinvBD)-$H*nfk-wz1p)$e+b}ThaE_snjFt5H~ZQqWC=>1Ia5%XQ<)92t@=|ix!Ve5 z9b2I%Za2lu(u-XxnR~{ZxnjbT+4$;*dd0UsS_9v@>D%|yg10-bi!WO(pUc-y+yOp- zSo2v_Cvy+T_|3ra9=dhBjgkN65gAck0X}>ih(la8D~`@N&zT`H`JT{FV}3twH4aH- zLZ+>t#1cyQiLI*S7RGnjVYy6<6S-A?8Qf#YaRQgAHKEr;RwRI8Sf|%uIl?W!J>0P~ zhHbF&a10w39V}XTiMYX?KlUtRIn5u|HQs#%aNd1!C{YbWT;;0(;F0))(8B}oVFhNB=sVsfSC#q$yNi3U>bn4a&mVy`C zZ5#X_t~<;va!tg&hZll=&)vk(iO7 zt2_WN-E}Y8laQf67y_-}X1v{563vHoR%65zF zfvo%aAL@77Cd91zBv?-Rh6ZV$br=%sHTX`g*k~N-P8UGb7qn-&t!{Pa;z*UEVcE6a z$idgD+8aOik8s590Zqxb4J>rgG0|>w0j&i%Jj8KwmN8_>&zavBL19_cPw=}u_Jd=M z3pT>;{3UJpir`h=0h=1uH1PPA7gSq-t-%sM;&d$XVWFDG%l(q7xWxMt8yJfYNQ&Qn zH6~F4bhznyO~_eu!lFZW{i)VJ4s%@fYwW*nJDA;-mpxZzE_W#}?`I&iM@;+RQTUSy_skxv8M#qOzk;WxJ|F60CN zccOwx*iUDU2T#B^?0WxVa*E^Cf1$)ex&GrqdU+f&2m^ZM_@6Gi>_aT{VC(ZJ<(K4# zj3PqMn#Xh0kSf4CP#iVOhC&RTWw25}!jkPd1VRXWz-+$uj_y{dYoa2A8Gu=nl3gFg z{sD4bO6J!)Z?2l-coOp%F2*A^bG+SZCgg6yH>jtBoraQfq2kNah4U89cbXn;9 z5OJgtUu}c>?$8hqE8*hqZm?**xNGAC{$)%Iei~&&9vGRjh*hh}i9ptZ2dVGVAXRN- zc=#7Hi%g1^UWzRL2?Jn3632Y+Mu)Qcm|tf+Hv>dnZeOQ_+TfrNZIGh9g}f@U9t9vA z-09NRhhh>Cb=9-Ec2o>Da18%B0GWfkHI7^Fn@CEJZB)B=ZI!_+B{wBM5W~@1duq`( zbj`_o`o%XB-@6mos9!6bpX5(|*ku9d1a6*>L-D|}j^W&PiZE{e@$+}?NtZ~)G_6N*?~iN_ zmD7l(C^CF0HtGAoiEKCsR$z+Oih>|fJ8k^Aa;K)p<*RqRd_K4MOAv5i0CK2q$&73a zDf$6X*bUAr4GhaO;c^|vfqY&_-kim%vj;nrFsRuO&B6(>AX#DKEe%W(bwz`t5)u%` zrDL}GK}W(`kSnQiy8N0z{Nb4}L7Z^u=Y`Mj6-?aZXBM8NzSWI=&1`4%P63AH_Bm-t z*2&1yu>1cthw+qj+>A$wQY4ajLTs#r7>d}xtzHVh4vgJln0!0bS+p@8hsG7uS>v>& z(mOrx`#w^#*4Nny4PwRcK}=4zNH^u~=4S73&wA0;C$aqlOf47d);EgA*;H)zF}AnP zvnCa39#^cG`afWV_ z(!jr&iD;OAv<^^Abhz^ydTwc=Df_tujnLX{S}i)u7byAkT%LpVkMunB%?Nc9GJ)$K zbM!f!M0cie8A9BjN~;>p1j%gAbq4qUu4w&n+`&M?gB~DM`Ml?Ipf}YGe9!dO7VNXN z&rj)^K-N1qgUt(S4QMof6H*L!`Wx*_jSvyAogqkkvuE zC<_Nc!j1}}exeTjq=?xuQw+o$A=Oz_96Sf87nTAHFOQ9vPqX2hIpQtSmPl)2!YlR;4|{X$msm%4_QKWyEo zLiVfhMmXYmDrbRk@B8o9I<|3wJsGvvLkT7!CP1KxlTKX+sx_`raE2)kg#BH0ez)n2 zRwy-6caC$`in}OlRhST|%%c@HN@jhU|A_He;T|FmU`6xb5tCSa{&mC(c_7Jq(ugTu z`*@alw}q5D?JWZ^cqVINxXW*N+1{+e5B=y?Hav!RsPFm4c<=wk@XC{qA32q`&>weOK0CJ3Fo@ z`n?xQGpA;@jLKP+LIjr)ZU>c43byRyr+WPzAQfG{IRUy0r^O4-w@r`c`&~^JWD*aXNy(CZ!5m&bJQI>f&yUtZaGuJ zqicI&hOa*+r$6x>H34hfM?8Q4;1`IrBPSw)^JIc9uf!npR6AQ0l_dq+2=@XwdQ_QI z4)z=H>}~Dqe|qaM-TuD7jwq?qqg>(o+?Y<*^y?3eEpfpoj=kI*%wWQcq=%PKi zW#unJvS@#;tP~7(+uHAWKVzl+f{DP))zBYNC(kc!SgWwX-3H+XH9)H5~ky z#?S)`rO7XZXylROk3gN_ow2r~C~NQ8l%J%r{Pd&e&icCiFBxa1ljiKClSC-mn`iQV zDr4Jht>p&SW~_=4dZ`%sAiAI#&_Yxm!&22(kQm2kuU;BO*D^D^spY<-Z0G2h^ksIf za6P;FRFH^>$ZBg=s-U=dn*{%c4{er$@a6?Am&NN0OicQ_D?=qtn{;-9RGx)*Yt=PR zPEIxtm$UU3dy<`|1DPh5mR{qKux~haGfDWN@FcuCEF|rgT&rf<79Q@Lz3du(;UOnR zu=au}^eA^S;JpqCgdTWB#h0AAIoNb-S7OqVnAv; z;ZjC2{%;#)V$~TiC%s7oRXuLj4pqMLrV`!|bs1GXcG|AL{NXB^4ptG{*vpL4>x`TF z!gt z<%J({mHTs*98na+9{MK)<%aWK4bj>un3rK`k|`)OLz=@2QaSrUuI+zvJb4E%%@BqT z%&w@B;!)AYNVMxK?e&{rkG{%M$IL9F#%~NU9H0?0#cd$k^m;$?a+<-xC*OFIaiwL> zCYXXBkAy?ZS2}r`qe{Q7zP@{G>AlK2lfzuKkm#e|q@mPv3ff{G?BxP=thpY2Ut4 z=0GzPRV6Ikt3u97XEeBuU&9>-v?{=!t$DnH#KpnV{0ulA(PjW@SAQjg)`#+E(4}Wn zJin<*>ln5cx#L#`Qqfkx+wz9-P>=AJ5#@aNU>ZGo$InUfdM_zgzj?Y_lIB%tDE`sN zP`=S-`NRocX=y3r^0>)*^_l4D@q$=VMn(`gbrSw~_wDR>uikuGqir{_Xo@VPsrB{F zv*-=xD;LAL<$NEXcy5g48*L#(&p?U+ugbP%30)ev9yk*@t|vx})rdX@iT*Sk){RH9 zoY3813|UIVIRQxw1&x}26&tWN5M#G~or;U>8L;t}kR(UyA$aM=X+6+=6Dy(u5EUWW z|EWMhGZ-QTk~=U4r&hNh9zUo}d*~?0xv#88_FM;<69@o>LSo7c8PRm9xQrzWdK+0@k8!}SVua5{*-q3%Hc-e~1@FgUtz z#$9`aQ8Hq)9UBz0d+fGg(b+D^xcZN-W!0I+?0AOM6;laTVM!-(!L~RyRcOLN-&RLD zDH2>|pUKfzdAN(cC%l-?ZM8Xh9Z_1o)Q`&5kw65!@dW#o1heM>3=g6|AYtNOPa$;B zrasGO7M4~fSLhebrJUohj4DAPttt>UZ-_itOjq38&QipR;ysV*dX#+m+a9jWT(I^n z2rfiLm?UzyvK@_b>$1e@;!6Bas#3YW<b<`kfp-Gq)i&hG@v&uTtzi6}JyH+1o#0R>GT=j+S~hRb(C6^CT_gLp*bR zZm0rQf4Ni;qxjWHbnsiD=QVtbwZPNVoVQx@oX!tDn8P|ErpcO^Gw%isZ{H6zcUN}= znHe!ZL+dm2>gn*%?3?4&-(NygO^wG%%E{sUrd3Ja*w`2l9PFE)&vWtO#f{UWby%i2 zckkYPTJFGhd~!ld6xcO16gWR`=ytr>+|t?EOkr7ZF8K+zk&)5t?5s{_ya>w6%L`Sp zQHR6K!O`3hc$qfrA#BFijuY-Af^m3(fq_wCo}!|s`}(mWu2;`a*U#{nn3yVd`ZaEG z49~Yk`!v&dQtIWB!fQPberP{>3^w@FD!1E=^08QP^8WtRE?5{o=d|5-i1DabT2r03 z=V`BBM~7YXDk+J6cz77z@DjP|13f)D*i>FWK5(F+kT++l{8;ncnr(er_<~qiM5Mc? z$NSs2n{In!jwr9FDAJp1c^B5!MCOt!Dku{?4q3kc_(2;Xo$Ipm!uQoH-Ilks#-^tA zdlR0a9M#9~-h^N8pMJr%-t>mT-+sA2cZ!P?_ffi%({?-mkUNJ)5w7h*2Xa3a;}wDC zBSndD&C}CUr>R#YlZ%UiPywj%#f~{g$HuHTChx8cj_c0og-+G`>$iX8 z!@|SEKq)CJPlYRp-hKR-kWn_u%P8I%V|;x4*RNkS@T$!rBN6)!^=O@*f%f)GFp}_( zQD=PP#OW@7jlgP;dUQZgP<>Cb%oNPA3S*SM#%t3%cTid$2L`c%_OCPfaZL@{RiaRz zlIv@ygM>c;Axq=8xh;+)zoArucuRqh_;NmljXG+T?_^?TvhMjR zDZ0Um#%@?K@zCg`4}xn43YxMIeRIf8+KsJt*3zO(XXH)MJji$3W zkZgbKmzYFD8&K&JjNBL=ot1k-`3e86ZK=M<8rps`%T%6|8fint7r#lEf1sa!iTJyu zXv%++i&s@LOj;-VH~%WR-?3gbx-jj8Peb+unE^;e#~c}Lj2O#o64TjSt!=DFM@D0J z6T6nXOO>6S-OACindWo@^LRVqtl?L85|_iuQ&i2n>oPi=q#MWEo%+2ga%ovvO-u=H z-p9vosG1ndsz5%|{-|d)=e@$iFP}euKF4|6&~2j@lk}DuDWgI>E^2>w#PYG4S|F4g z-SG%>LRW+;OB^u`2sHgy>2BO}+ed`rO!hu}P>GWX1dcKX!m{){k zNHJCZm3U&!e0xl;&73q+rAs_c%A}&$a*0)CoDs+*e0IEDVl{Q1U9-ds`Pz0HhHX(V z7kg7@);-UJR5I0Hm6ZwJ)UKlBbch$-pG4#3=huhAJXq<6Mz`LEh2Pu|Kx%;a^a| zd%QmrnwFXQ>K9;zrQO~MB~%{RO> zQj4ZjD0=}NeJZz^x*k4ql3C8f+&Q5%dBD1@;wmfBJWoGkInwpeQe>ai!(Dzk&e?jalaA_%C^3tK= z*}AW5Piqh$Z`cbUTQ_Jkv>3hT2W7nm!bL~`)iq4_f5<}l`d4288T_}Li_^YF)&5E* zoXej}t6qteYKisokf=?wO=X%SAiuP+A~P{sjwy98#WJYT;wMFx?gfJREqBNqf^uo* z@>II`G{;`n4+`C{C>@BOy$0PCW%ZBvu90y5BF@M-1fzcroaPLq7wj*vYR8y$CR_H< zTOM&ajG0QxOkG~7*NTEJ1HInk=~|gC{$l;-?|YupXo8TMhvK+ZsoQoW7*V8P;3ee) zm0{(+F(5jS&vT}JS)Qs7YcZdg&r$JLB6&=bK_muc*`wcoH~|`vFSHy?THa_;zikTA za8h{MfIT;-a1Db9ex>6DNVnYTB}3ilP!*5JHtY>N_auHH*`F3 zMoM{{a*b#TJ7J?f-FPH1@x@=0Hoq)5C?S$l{^a@h#LA=Gd;cWuL^|U+o2UDIAUaq3 zY2BB*uAtXgLG%Xw6-ZzW@j}Ol^{+~LmEL#h^`nAW$dyL%9A~iN2_TYpYhqFATLe{6p&c?jt?>~H~*Ws*bO<&kqdXj$S{{8!1i+0R6 zZis`<(iFT%wpm~RM}CRjB9YP!;v1~2-J_$pBqSuLJF2QAyQ?FZ+S=MTwJJ!BI%0Jt z8SComa@>y`;2ifqDTW6C7&b$$eap=yY!0Q7gm=JJkBxJ+cv4bco>X2QQ+bDth2^Ct zdvi+|y<8DLDXxIsFM=$s%GU@_`TF%D6bV1r8?E6?aHhV3XP*lTBPv@=0f0nt>2n%& zPy!{T7ZRe7laoWCDz)(8&f21RFaf3sIBzk?Cx~9cy`z~q7sm(heW0&TA3`PMmzBjH zE9y>8O-=oX*(2RGBqW5Hm9-u?Q`m2*^pWW;3KiDj9kyUli5K-gW~5> z{BCYq8rGXPZ_Exywt8eZqQ9W=yug~_t%Z^`v%fjhWz36Uqgo%##BO8G7eARFG7upj z_3YU*0hiy*z>tNeFybwBDkoi{WK$W@AE0< zg$t9}o+lYnw+BmYnSg*hNfH>Q%MWUtQBhJ_{r>g%eMAJZ?U9<+E^K0H>0e$hMD70j zam#b=+4=d;X=$mIMJi`U6a!Ty%m1VTWaY7&p*1(}$bw-nS~xN662_idE^Ndara??3 zwl{9Dieq8K^Cw3*>|R@+3d#W(4Dc&B=U4GBf5ge)!t>XfuInu2ecR6~=q++AkKiLN9&ubxjDOFwG$E%ou{Fpk&P21j*pKw zHqJRi7w*48LL!mWUDMr7sG4=W_3qR5LMH+_5o~^B2@eE3Pb*q?E0vX%U+wNX$VPLc zKtmY%%1i2>(_7J zz4OKw-A84pWP1BZbj~ShX;FjPf+i*=RU>^nCqkG6O zzf;9;7QyHDC<7ZgvfpdJN3agD47eLuo>&?i-;t8S<|V)6n%|@nzcN-% zf{90216yXZLuh?6)bp6$4}U#c$|&=6BE3Z2R#nKkt<2{nrg4j3f?#8ynum z3;7g5qb>9oK%}#hMFFw^NGMYtowX$|-m{;bG1H!)1llnTNgPgC(2jrmaII5(JsgP6 z$2=RXY!#{kxcI5OF96!xE0?}#uo{(WxPE_-ozjH;B{g{h^G4i(fxl-GByXWY-%~UX zZ!8LS-3~fvmW?PV3J%h~HTOE+ifd&oRHQA$Ao+AKJoK11|F;l78>YDBuGpgmTp0tM zPwv3J5V$6^Ug2Yu;C}T3`?I?0(;be}7w+7ir*613qLff~5W+aZQlv1%xe0y3ex|iH-jMQb}y;0l2LQ|3y z`MB4EgW6jR931$b$1^mWEBT$Dp-6{{oeCJOJ0@slOG-%vwl>ZIb~`$`+R;qyic1%U zReg4{p6hn7bOx^+V(yko!k?tL z7!DVTv&|w3%LA7@@im-#ppdVum{n|jXWc(p_ry#5c zQb&F|41R`$&8fMlx6HfR_mM3N1y{gNIlwVJ;;9Sfnka+SJK z7k+uk_vb*|B?Wl*^OquT;%`(NsT1$1-UqT4sdnq*9v3?jy&!fTXJ5+2#!mH ze29aF`F;0nA#_cor%`CL&6*SddiYhj3j)pa@{71w6t$7P$PZaSGl=pv;XGXZGQ?*0 zbv|X?#Nw^e`BDrRLTrsE7NS1T@o13hGsdzz8;8Uek>*en+csVSjTJVdUD*SlSHIn6 z8;8J+Z}V8U6a)?dZ4}oWY@3iShcf6@yrc2hQc$nKhbzbLno;(|T_uT0J*@dR99c`@(5(>fJzESpF zF~OjTVcrxSk-g7#)W>ue>OO8ZFE%$?&3qzGxAL*;^XJb+9oOtR8egBx zbHwj-)CQ58J2kv~>+IY2IA6rynQ1)(f=oKy(8= z@A+;@&lKtG6LKZm55UW=@}DsTVG^PQkEZg(SBx`1Lq7<7donSP!TL12b?ybLs_>F7 zsAa#~zhG(32$m6RT~D5k;-Hp`FXsR`VNst#Od(mP;MxoScji|>8bR92j`NLcD3#`6 z`1JQ@kMsJDi@smo*-*wUTUZ`r@&#a)vv=vwiy-ZuIllkb8v_t>mJmh^s^&lQKqc&L zAWH?`x%}qgw;ye1FYTj7YFb#nGphY&DymhCjlMG$6}NcV-gIez#&LRN z98LuE3SJLI2}tQ2yBl?*G}Mh1QZh4@5-K{6!^7^KTna|;zm_)&f5Mm~D!dA zzeh`nFqwDkdtAO><(DtIDnE<0Y(gX#={C?zdTYoImfkj1Zc zfccp zRLm44YPBE7IROqsvJWF)Ac)`waoYp)^AmZUdGo*XR&#JLdK_Jnc!?oX)n|0{W^Z#Q zQ*3N3x%BX`qwraBe}Me?B&L6CMIvcGR;$#@Z!pcIM47D5n_r4EngnEP92|}GpE(^T zsU+t{nF97-xfd#G)zPRIeheF0W45<2Z>}ki6n$qUrnZII^$WME?Gr_sO^SQ-9=X}3 zygAl4SF+qZn79k;>jSU!0EoIJ7gMBSlH)qjYUk@fckdt)*oIsO(XUNSLxFj-OI6a1 zOPrU|^J*2-B1itlxiGo>xDT5Lx$e)H@KU7GX6P2p8}F_7_^}i(AQ9Keo*Qqvd+**7 z!-pQj!#A$#>1`De*+k$)4x6qu_A`CyJGM$M_9(WV@M#yyn_4L`)y4GZ?ldA_7aR}D zP&B-(o7k6HA0Inkh48vvCiU}Gb62VPh(6X2@1?!m>-yJskNpbR-?cC2*=)U6MTWzR z-urg0Gb_eg5mxd$eIP!Kap$H*c;yqNm5L9AZ4eLR~sNz;(m<(pB{nzRj$QzjQJ_ z^Q0Kn@+Qtov{N+zp;!)T%$Da=pQA%B^+}Xp!~C=V&_x~XSieZZhtg^PjGq`w?5YKB zsk@)=_sgXm6k;e}F5~*?0FTtNU98pF=+%lf^v}qJsqXJtI7-VWaWhWn(9`#(di(2s zxURgzAUB?!0O`DP7jF?8tIx0E0nCfppqmLXrw)9U&v4@9th94rIIn^Dfwv%5%fsLz}zYo|~l%(^1QgR|VHH}o<@!7*GzEoF7 z)H2Rm?OdK@jOKaf0?3PDvOAF_l>o zA?>~eTb-VHZ#&PX125zn%7BQW2QV8B`rZARkJNlu%o~$*NW8>4GXn-@*p#;N`}gnn zPe=X95aSd*Ny|h)_e1{h_xD41H{TGV^3iU&{q!ld-l+`IZUuq+7YsE$;TG^Z9TDi{raUS>qy^)lsu$`fbb`U_ZH#K z;as4R4@lG1W%;VY+S>IC0}FGKUYicCKn9#{(pHMDj90Q=Rg&2Xdio-?SQDHU=GD&B zdwF;i09kGC?`Ncteh(6+dkA!d_A)m;hR8>-e$%mE7YUjQh=p?N+rK*%UREBGh;|1A z1v|b6s+R)QOVF$0paBHn%A%G}dM&sat&dNHNkjc_9=U9;9Jty*EdPvJ{$p56yT<$PfxRad1PkhMwAdQUcM~M8pwU`@rW0xHySEi z_wMyNQ${M#u6O<<+@WA3*%jFeii$}(TlVf{c%>A7+{}z`%hs*mdV9T`otKbU_~X~F zB;_53B^HHu=&ZYg_1gRT2$I1jVISnZr?8Wh^C;VWGQ|b%l(9c0+VHb zvqyEz*{ythYf!Z7{r;4Vd=tcXg6orF@ zOgQA_<#})ZICn@yIert~15b|LP zh5V99s~7{j$T}pU1Zu_|T&q9n6J^Q2b0;lN_TUoIT*RSCn&c(8e1gt*%F4=KRccnF6NeAqI>lP46ZcviDaxe;4XO}dCT_Vq zimwjFE+0=}2mhHvc4F>itJg*WUZC}}sL;w@UVL>+=Y-HQOze zN6r>g;OOJdKXJAcOU@6if^zm&adGx4$ptaHLjTiI)~HX-`kRFbu8oraFnW<3wm&vo zHvRf_9q*4?a(0mVW0<(Xjq}2W4ZI|0BWvy2wO!F?!x<_1*RBk>2DNa`{vE{nNU$sq*zb? zj3KMHZLZ(yq>M}viru?kzbdz``QWfHH!+DcVzd9d_MRU1eJW{Bu~(4uklla=U_|Zp zMC>gRmOg*}eAnB1Ddl-|G)NiLe~RZA$vHY{TRzDj@3_P7Aim(@31~PFKE}a=2PwCf z(lcwI+uD$%Ltppiif3u*aq`;*5iy6dGBWa8TG*W?i#P|XoaUJ#Pxz8_iHcRHP+4{R zS~?W(w~=Cy&cIDrM2j2z`VIgFiw1IxEm8xgQu<7GP&!QTWv{*eEX5KVW!FF3rF0s}Jd) zlS2yhoB_uPQEO{!u7d|3wbaQ6YeZjE%P^&4*{_=a_@F@pBZpy4HO>;T@dj;@euvrq z+QlYvlh%`YUm0{N&cG{~J9IZPdA*y2%IsBH>B;vgAcM1_S z(h5vZO(mf*NI;Jf3AJNlzD&l9D=i?%XZh#7zr}Z|GfbHI;m;Otb z^(xEPec0?na}#Zmv9WZuwY5msD7SE>-lp_bxw*NQfDqsmF0wpKN;_0xwa*#)P`1(0 z(Pih*Ctr|5BaJY%NHdiHo?SPDQ5aoI$~hO-P*DXi7=4dULWe>&Wo*3v-aXslXq@3V z8%WMVU^#@v+2865OM36VinF}2FhBR=)vKcFvy$G?(K{^j(i*<<7^Yx_ueW*;no?`& z#UZ{)DPB$I{ZB;srx$jEVL~DOg@6hg$}9pPP3+rrlEZ*rDs1QJcW$U!}ue)Jxe*V%W{Uq6Pd^W)nJDgBNB-%~%tBIFky>Os~ z+T6uyb-fMn(fJD(?mT?Bj$}cEeDACbONTm16t>sjRFx@eS?lwK>R-V^VaUL{TwEV~Rj-rW){RPDo7ODQA~LUOCUwjSNw zcJM5E*9ps5JrNfdZ@l(`*OKN*Xec3bB&n&>mDHA%Er;^k5eElx4KZCStMpUCz4U)q zk;ju`cU4$C{|du9N1izHt0~WPM8aRezPqv!NbJ3v*_DISrO zo+n#F-VHJDnqW&@`pcIu0Z94aOXh>Q0<4O_>PX7Z)G<{ssZ3>B4XCjlGNp8u`Ti*f zag6$Ikgz{Qd775S%xOPJg?3b!P4`B7;0#E(ss1dDB#@DS5j&$hhQqOMzhv6@`waE3 zrwokTfvzDiYIX@PGUE?KYNj+AMb8k!@=e+27|TU98)n9LJ24 z^e9&AjT<*)10Wu~F`HCae?ee62OPYF->LD$QW!`y-UO1#CUJ*1sj2HpJ`9|oq~EIK z-ufL?m&Qt(GtK!l3uy?Ju}ATB!i-O*IKXOxxb%eCF=koz71qQmG{y=eNj>B^n{i4c z2Z0nhsaDJnUiQMka82G5!wCv zg{g4T=e|y0mD$?qtMju{8f|! zZ11mMQkIs2YBt~3&jQbJzp(q*jT`(~Ij5tfjvrr!W$q3XLjzSFEgjuAwj)7tfAYP= z#6*&QKis9z8@5~DAkV=fhP<(|IFOJ4fd@|2c|fvTn2T~!PR`BKlRnL;$<3ht&F0OU3!YPd z`ucSR7-`nFwqzgoCV>PNnVigI-u>Y=LcG1bJz*J4%q;nWJQ)WO$Ot6_UB#Keu#vy` zY92C2ee@Rbv$&65+sM!hyGsy`Rz}IcQ>WR`$+UKDVRR*VrJhCq8%Eol>%eN86PB~{ z@qud(8ug>ME4@*@t@x_M#BqcbxhzSJ$?f0~8X4_FI0jXVLV9jNyak4DL$;@;rlLP9 zee@^|NgPp6aqZrHk9~;5Fx)<`PQ^O%30U074oTwZq~yH!5uHIrMa8FvhP&nEC&{nu z*s*M_M{!p&ZQAg~nCe6wO*{;oe+iG>sG)!01_@>GF{eD2UBG1!C5AW`hB&Q%#l{SR z4UyT#uCYOs8-a`zW`k2b;YC2xkZI1=E^EfS9K`e3eDL7<-*s^UHmBSUrVX19b(91h zG+=fT$lp+3Q&S`1pj)gg`g0LsM3J{eK!9m%Yz(JK;;E3Uv2vH1Oq?33)JazT|Rv}hpuB&%eODT$50pJ)-^`z1MtM3qKodpVOH^Q7YQme z9ori8MJJ682rSWm^}2Bn#zJ3N#obZ8CbEQxwifJoaB|zvSaNxsd>B8Lmgds0l1{aEV5P725uwb%c!*`L$+?>JM4 zgg#OK^Oni!>5l2K-x)R|JF>I0dF{px_o`+9lI6g&J&a{UAW>oS?sl+jTyR<=3XlZN z8XqJbr>KoPAeD_@P!O$^m6d9?^%_!I$HpGHdUYECg6_DvNxiC-im&ek?{oG?aOREg zD~@|_awRG0u3fuGje>7_4m>LCRL!n(KayE6^QbZ8sQI3ioLh&$>V`P}?AbHZ?-lDw zS%mE4?%lijpirCruG^P?Iyiy39#0AHO>B0s=+fJpyFl%{+uW?`AA37(I2Df$M}HZD z#2Qo$xJbmCHy^KWQl@8$j5MGvWcE5TJJ8)xnzqH>XvmQJ)D(jqla5K4Je7(*mO(Kj@_b@!)P@N%W}VycRD(>@=uczeM8%uYq6mz z597Jzo+P{qef{#K6p2)Jy?mr+U}0gAVb-}U%Sq;SDmws-AYRQSA@h$OJtCZrQQMqK zekyHlegr3i!)^5ya}Ee#4(aPc;`~|1Ui&v`H@HfnEMrWlvM)T|^cig}TzqPzr<0Js zUYw64M37fHafyk3b1$-y&2l(SYQDIzTi?1$)9U8Rg1a8A|41}KGG(~kmP;byFm2-N zs3IzbKyMdtwa{Fe@|^LSp>u7uMS|f6%0Ww(RVT2Z*^*W301>TZ70lP*)fnlnoGrN{ zmhgjV1<`tJ3|jy)H~{IDW0;Mbud-S>;z8r~$&-g;9T>kQ1YydZOUTJ#Z)uqr%i;Y4 z@G>2EaH5?0H9?xQ1*|%+JeM#v>va|n7y65xHT2xZ9`g$c0qt+{nYxKZ4$Jc=zSoK- zWkXI!6=Fl4lb0`4552$qOQ@kJkl&d{!=yRt3pmdhNc z3lM9rxBVX~H{+Hk+>sam%WkFE@jrp;|3AUUqucyWewmVFT!s$u$<~K7(pglP(V8uR zhy_tO;etMpbEM1axtg0V=xb<$#hKBpAZ8-OUqs*)`pBex2PN7MX&3()_gPwGE<{94 z=F_(m(b7kpKRZ8OHN6LBESv{0Ip7EPj)!POLJJWyb&;tNkMbsSnIMkHJ^#QtqF)+K zyyU$2#etWB-)Y0oeaJt=z>J$tV%b|m0!L< z{n&lPx$$s;DV;g5B=XnTYF{(z3%%D!}OE(Z@#KAn(o+l zwu;#>rayX7o#m@;(>|q&)d!5Wjn9<{K{q-fbKYggzfQ|tojh;%*qR%^Rl;OM`H2c5 z?7!xK(eqQvmtWC4c!Z?RiPHudJbpe}OyzOHscA*`V}s`2#7mhDuJ0@g4}&gQHqs{M z3A>`%W4e$~CQ`mL=?!PRGI>4pV0j$6g~qY3p1t|N=XHh=X4hn2Dn zKu>z1FcC+U(uL`L2jdF^%-}80#;?GaMG$rc1!y3e4T(41P1XT!SqB z>hN=Ll){9uOxyYb?gn>QN(De81>>g>l7YO`7Ccn&!HEPS1|DI);a03t_=YSD=r8&A z(N3kl)#H@*#X5qf;-c@17v2_bz7!g7hoKgQM@w8kz=`}%txcGtG`7X;^(cn^WU$xk zp?V(i^UL6rbvhB8!(L0hiO>@@O#Y2oM_`&_5B19rPTM&!ws+t6;SnV2@#<}>bnZB} z#4N(VkG;FGw*Q)QgtK2E%9xmbqb@bYOwKZ|tzjRo>^pNguH-<+o3cCc#OQ@bNbG-9 zTB-L5)aotLZWO)xL6AaBGBA^fX93Q5Mq{}?x+TwZL znbG!P$0X0?sqVDxvkrVZ#`wV3Zmyo{Zkc_NQJt4wDnX*>?#Zd|K90Zy3ALV%N75PN zujgbLuTB(IIyp|Ft-7pbU+BA`$!mIXvSfk)59J?cmgC^O6H$$Vw>or^Mw4ST@>!+c zAyI8p7AiZ%Gl#T%3gY)jHQlb>Ka#FF_f)aRCjd! zMNRW%)e@sqtv=d8V}?&IU(xvDoOjmIcCczI7_-h6GH>qFsj<+8x^Ju-ezJL;+ij7+ z7SMa$ovMa{MXvU-6~z@{-88?+_QrsLzfrJd%NIw8;eh0;{h*X`A3}~~NDVTQw}0k^ z7M8mBs&v=tndG;qXeGTl*OGR}4oB;;BXuVh6{!&r%6s(Sh3C=cne%(cBdD-x$ z@s%7`9zn;Y7_`C$I1?>_cyS+6D@0WW0`Q2aNt)n+Y&+y|%U76A7jqbxlW1SmhC!Gu z#O@_dCfNR-+-lKgx^-DLvG?Y#U?d=~i76~#T9JGZrtUC!@eP8X#9rmU$3B*_+H5$> z_TNq}w4I|qxp&+>L+Yfw=kG$zTJY5;!<#T1O4y?wzUOuzMT`ghL2_sWfT4hN?nN7#UL4)Kz}kuhnr83dDS zip*2rI?IfnR=Av-%^a$L>ZySOK)dAW64jf7O%E_=W(Emuh)b>VjC%V{m4@&4cgKgz zF@^^by2?)4+EqvuIT#*pJhM7Djk@J;71y)zvF#{tDP!o5EIbw)ps< zwa&yiD-ClWc(0$J)IXPx`ID{4r0TEe&5oI_q?B-Q$SD-4xE#Z21% zZqctITw}j~%03IXXyPD(_q{vZ`W3gTxOL~PT?MbgCo|nkM2x&vtQ|Hm1!)rBy;s2I z1AF8AG^j*P6r!=83s=F4TSQY;a5v7Lqu2+hHc*0OIolOBh0_tftwuI&%^&5NV~~pk z4N@^ZaF5RYrPkjtXJVHGm19N_YbSk21g7RdqzCal!YjeSxf8rhLQAq@j{E$uHp%8P zh`Mi8yfGK(?5*ciSail8QW2lt_kXSIx_%ENCA9Vhx z;mw!tPnhZAZ>np!o#ft_mfgv3_~=XozljXgP#}#NlsYd28P@*sQ+i zB>l)|pH)tYi426F8u>5AeCdD$oBv0Nkt}fwb22dCgact{q+h|3y-Yr5t(Lw}!c@h> z5gB1|g@c-6#(0{I>vkLTJr##VOe61#T44iQmAuTpP2u7eP4c!c7ae0L-1DjdX}@`- zvu?*lf)a&mEv;@*bVvwrq>ke0@yk_Xxl}Qdd*^mlU8d~aD07B9aoE|Er(KiU+ZO|s zAvm?soH@T`ui27&P8rvgHn>*IV(9U(QXKWNr^YHJEu3U zhu-^;(AF-cpKmOOZ={cZi24WvCJpQSTVfe+7OCANCj%Qz+J03S-w0G>E!F;7qcoQA zgk$V1!y@mdtqZ|F_Z<7T>WqrLu=gJumh*$bQuE1fi)3ok9($cCFefU)acd zjM&5IE3DrT!*lE(HQYP<*}HvW()N{+=@UrXfScDC8a8`q%uT#3RZ(!?BO5!_`8Tw= z+HPaALdmNgRm^^y*d(l5K%9WI64B3{Gp^3CSpMWAy;Jyj%^8TIG|q3BZQIB0ez`PG ziExDVUtc>g1%X~}>)Z9=`~^C3A1@d3@YMYhqWR)g)%v#bY}K}p^zUBh*gNO798Ov% zWH1(y{N|k<0 z?3UluQ@;TAoam$CR#8jpSj^%z*;FR*JKV!C%||&st$98Lub__!sXw`hSP=b%h_>$) zVJXRV8&u@=p6J#!#WG_?dDBZ^O!&;Ms)c0QT8gdHUa~1oNc#b56t#;(FWt_Nm zWZ}JZC&<*XqP)>LY0o&IF%xvgs1ABMy<4Re02i=}8@sg89 z_fkj7538{>^Yrjwuh!on@nPOV@z!HJ7QpCUZ8s+Kn+fX5qKB!p6RxG$O@os5cbyH%U zz@}+k@tMtSFayo7eY*v6xicnE)k*gKflZbVQJV~#*cHG6UMwPTjlQ;j)pxx->}V01 ziNNj>?xpR}#X4u-b?;p+h3Mtp`AA>j6%$SV5vb=selCV0LKhBd5S^eWY(9{V5oeLV z(vope-UU}bBqF*6mMTXjBsLno72G@RdsNUKi4zeqcI4 |d|Ec_+BV;3)d|`9V&n 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 M$K;N_k **Wichtig**: Dieser Bereich bleibt **in einem privaten Adressraum**. Für eine **öffentliche Exposition** ist es notwendig, eine **NAT-Regel (DNAT)** auf der Firewall Ihrer Infrastruktur zu erstellen, um den Datenverkehr von einer Ihrer externen öffentlichen IPs an die von MetalLB zugewiesene private IP-Adresse umzuleiten. +> **Wichtig**: Dieser Bereich verbleibt **in einem privaten Adressraum**. Für einen **öffentlichen Zugriff** muss eine **NAT-Regel (DNAT)** in der Firewall Ihrer Infrastruktur erstellt werden, um den Verkehr von einer Ihrer externen öffentlichen IP-Adressen auf die von MetalLB zugewiesene private IP-Adresse umzuleiten. ## Öffentliche IPs -Ihr Managed Kubernetes Cluster wurde mit 2 öffentlichen IPv4-Adressen geliefert. +Ihr verwalteter Kubernetes-Cluster wurde standardmäßig mit 2 öffentlichen IPv4-Adressen bereitgestellt. -Die 1. IP wird auf Port 6443 für die Kubernetes-API verwendet (in unserem Beispiel ctodev.mk.ms-cloud-temple.com:6443) +Die erste IP wird auf Port 6443 für die Kubernetes-API verwendet (dans notre exemple ctodev.mk.ms-cloud-temple.com:6443) -Diese IP ist auch auf dem *"nginx-external-secured"*-Ingress-Controller für Port 443 geNATet. Dies ermöglicht die Exposition der verschiedenen Konsolen, die Ihnen zur Verfügung gestellt werden (siehe Schnellstartleitfaden). Der Zugang zu dieser öffentlichen IP wird mit einer Liste erlaubter IPs **gefiltert**. +Diese IP wird ebenfalls per NAT auf den Ingress-Controller *"nginx-external-secured"* für Port 443 abgebildet. Dies ermöglicht die Bereitstellung der verschiedenen, für Sie verfügbaren Konsolen (voir le guide quickstart). Der Zugriff auf diese öffentliche IP ist **gefiltert** und wird durch eine Liste zugelassener IPs eingeschränkt. --- -Die 2. öffentliche IP ist auf dem *"nginx-external"*-Ingress-Controller, auf den Ports 80 und 443, geNATet. +Die zweite öffentliche IP wird per NAT auf den Ingress-Controller *"nginx-external"* auf den Ports 80 und 443 abgebildet. -Mit der Ingress-Klasse *"nginx-external"* exponierte Anwendungen sind daher direkt über diese IP aus dem Internet erreichbar. +Die mit der Ingress-Class *"nginx-external"* bereitgestellten Anwendungen sind daher direkt über diese IP aus dem Internet erreichbar. -*Wenn Sie eine Änderung der Firewall-Regeln wünschen (Hinzufügen/Entfernen erlaubter IPs), müssen Sie eine Support-Anfrage stellen.* +*Wenn Sie Änderungen an den Firewall-Regeln wünschen (ajout/retrait d'IP autorisées), müssen Sie ein Support-Ticket erstellen.* -*Es ist möglich, weitere öffentliche IPs hinzuzufügen, falls gewünscht.* +*Auf Wunsch können weitere öffentliche IPs hinzugefügt werden.* ## DNS -Für internes DNS (CoreDNS) wird der Cluster diese Parameter haben: +Für das interne DNS (CoreDNS) weist der Cluster die folgenden Parameter auf: -- Clustername: `` -- Interne Domain: `-cluster.local` (in unserem Beispiel: ctodev-cluster.local) +- Clustername: `` +- Internes Domänen: `-cluster.local` (in unserem Beispiel: ctodev-cluster.local) -Diese interne Domain ist entscheidend für die Inter-Service-Kommunikation innerhalb des Clusters. Sie ermöglicht es einer Anwendung, eine andere Anwendung einfach über ihren Kubernetes-Servicenamen zu kontaktieren, ohne ihre interne IP-Adresse kennen zu müssen. +Diese interne Domäne ist entscheidend für die Kommunikation zwischen Diensten innerhalb des Clusters. Sie ermöglicht es einer Anwendung, eine andere Anwendung einfach über ihren Kubernetes-Dienstnamen zu kontaktieren, ohne die interne IP-Adresse kennen zu müssen. -Beispielsweise ist ein Dienst namens `api-backend` im Namespace `production` automatisch unter der Adresse `api-backend.production.svc.ctodev-cluster.local` auflösbar. +Beispielsweise ist ein Dienst mit dem Namen `api-backend` im Namespace `production` automatisch unter der Adresse `api-backend.production.svc.ctodev-cluster.local` auflösbar. --- -Die für Managed Kubernetes Cluster verwendete öffentliche DNS-Zone ist `.mk.ms-cloud-temple.com` +Die für verwaltete Kubernetes-Cluster verwendete öffentliche DNS-Zone ist `.mk.ms-cloud-temple.com` -Der *"nginx-external"*-Ingress (zugeordnet zu öffentlicher IP Nr. 2) ist erreichbar unter `"*.external..mk.ms-cloud-temple.com"`. -Wenn Sie eine Anwendung mit dieser Ingress-Klasse veröffentlichen, können Sie direkt über diesen Domainnamen darauf zugreifen. Siehe Tutorial: [Ihre erste Anwendung bereitstellen](./firstdeploy) +Der Ingress *"nginx-external"* (auf die öffentliche IP-Adresse Nr. 2 gemappt) ist unter `"*.external..mk.ms-cloud-temple.com"` erreichbar. +Wenn Sie eine Anwendung mit dieser Ingress-Class veröffentlichen, können Sie direkt über diesen Domainnamen darauf zugreifen. Siehe Tutorial: [Déployer votre première application](./firstdeploy) -## Hubble: Netzwerkobservabilität auf einen Blick +## Hubble: Netzwerkobservabilität direkt griffbereit -Hubble ist eine grafische und Befehlszeilenschnittstelle zur Visualisierung und zum Verstehen der Netzwerkflüsse Ihres Clusters. Basierend auf Cilium bietet es eine detaillierte Übersicht über Dienste, Abhängigkeiten und Netzwerkrichtlinien in Echtzeit. +Hubble ist eine grafische Benutzeroberfläche und eine Befehlszeilenschnittstelle zur Visualisierung und zum Verständnis von Netzwerkflüssen in Ihrem Cluster. Auf Basis von Cilium bietet es Ihnen eine detaillierte Echtzeit-Übersicht über Dienste, Abhängigkeiten und Netzwerkrichtlinien. Mit Hubble können Sie: -- **Datenverkehrsflüsse** zwischen Ihren Pods und Diensten **visualisieren**. -- **Konnektivitätsprobleme** und Netzwerkfehler **identifizieren**. -- **Die Durchsetzung Ihrer Sicherheitsrichtlinien** (Network Policies) **überprüfen**. -- **Die Abhängigkeiten** zwischen Ihren verschiedenen Anwendungen **erkunden**. +- **Netzwerkverkehr zwischen Ihren Pods und Diensten visualisieren** +- **Verbindungsprobleme identifizieren** und Netzwerkfehler. +- **die Durchsetzung Ihrer Sicherheitsrichtlinien** (Network Policies) **überprüfen** +- **Abhängigkeiten zwischen Ihren verschiedenen Anwendungen erkunden** -### Zugriff auf die Hubble-Oberfläche +### Zugriff auf die Hubble-Benutzeroberfläche -Die grafische Oberfläche von Hubble ist auf einer internen URL Ihres Clusters exponiert. Der Zugriff ist nicht über `kubectl`-Port-Forwarding möglich, da Benutzer nicht über ausreichende Rechte im Namespace `kube-system` verfügen. +Die grafische Benutzeroberfläche von Hubble ist über eine interne URL Ihres Clusters erreichbar. Ein Zugriff über ein `kubectl`-Port-Forwarding ist nicht möglich, da die Benutzer nicht über ausreichende Berechtigungen im Namespace `kube-system` verfügen. -Um darauf zuzugreifen, müssen Sie mit dem internen Netzwerk des Clusters verbunden sein (z.B. über einen Bastion-Host oder ein VPN). Die zu verwendende URL lautet wie folgt: +Um darauf zuzugreifen, müssen Sie mit dem internen Netzwerk des Clusters verbunden sein (z. B. über einen Bastion-Host oder ein VPN). Die zu verwendende URL lautet: -`http://hubble.internal..mk.ms-cloud-temple.com` +`http://hubble.internal..mk.ms-cloud-temple.com` -Damit diese URL von Ihrer Workstation aufgelöst werden kann, müssen Sie wahrscheinlich einen Eintrag in Ihrer `hosts`-Datei oder in Ihrem internen DNS hinzufügen. Sie können die interne IP-Adresse des Hubble Ingress mit folgendem Befehl abrufen: +Damit diese URL von Ihrem Arbeitsrechner aufgelöst werden kann, müssen Sie möglicherweise einen Eintrag in Ihrer `hosts`-Datei oder in Ihrem internen DNS hinzufügen. Die interne IP-Adresse des Hubble-Ingress können Sie mit dem folgenden Befehl ermitteln: ```bash kubectl get ingress hubble-ui -n kube-system @@ -174,53 +176,54 @@ kubectl get ingress hubble-ui -n kube-system -### Erstellen interner DNS-Zonen (privater Cluster) +### Erstellung interner DNS-Zonen (privates Cluster) -Um die Sicherheit zu stärken und den Zugriff auf Ihre Dienste und die Kubernetes-API aus Ihrem internen Netzwerk zu vereinfachen, empfiehlt es sich, eine interne DNS-Zone zu erstellen. Diese Zone ermöglicht die Auflösung der Domainnamen Ihrer Ingresses und der Kubernetes-API zu ihren jeweiligen privaten IP-Adressen, wodurch der Transit über öffentliche Netzwerke vermieden wird. +Um die Sicherheit zu erhöhen und den Zugriff auf Ihre Dienste und die Kubernetes-API von Ihrem internen Netzwerk aus zu vereinfachen, wird empfohlen, eine interne DNS-Zone zu erstellen. Diese Zone ermöglicht die Auflösung der Domainnamen Ihrer Ingress-Ressourcen und der Kubernetes-API auf deren jeweilige private IP-Adressen, wodurch der Verkehr über öffentliche Netzwerke vermieden wird. -**Beispielkonfiguration mit unserem Cluster "ctodev", dem der Bereich** **10.20.0.0/22 zugewiesen ist:** +**Beispielkonfiguration für unser Cluster „ctodev“, dessen zugewiesener IP-Bereich** **10.20.0.0/22 ist:** -Basierend auf den im Schnellstartleitfaden bereitgestellten URLs können Sie Ihr internes DNS wie folgt konfigurieren: +Basierend auf den im Schnellstartleitfaden angegebenen URLs können Sie Ihr internes DNS wie folgt konfigurieren: -1. **Erstellen Sie die private DNS-Zone** auf Ihren internen DNS-Servern für `..mk.ms-cloud-temple.com` +1. **Erstellen Sie die private DNS-Zone** auf Ihren internen DNS-Servern für `..mk.ms-cloud-temple.com` -2. **Fügen Sie die folgenden Typ-A-Einträge hinzu**: +2. **Fügen Sie die folgenden A-Einträge** hinzu: - **Für die Kubernetes-API:** - `. -> 10.20.0.20` (virtuelle IP der API) - - **Für interne Dienste (über den `nginx-internal`-Ingress):** + - **Für interne Dienste (über den Ingress `nginx-internal`):** - `hubble.internal -> 10.20.1.1` - `argocd.internal -> 10.20.1.1` - `ceph.internal -> 10.20.1.1` - - **Für gesicherte Dienste (über den `nginx-external-secure`-Ingress):** + - **Für gesicherte Dienste (über den Ingress `nginx-external-secure`):** - `k10.external-secured -> 10.20.1.129` - `grafana.external-secured -> 10.20.1.129` - `harbor.external-secured -> 10.20.1.129` - `opencost.external-secured -> 10.20.1.129` - `opencost-mcp.external-secured -> 10.20.1.129` -Diese Konfiguration stellt sicher, dass der Datenverkehr zur API und zu internen Diensten in Ihrem privaten Netzwerk verbleibt, in Übereinstimmung mit den Best Practices der Sicherheit. +Diese Konfiguration stellt sicher, dass der Verkehr zur API und zu den internen Diensten gemäß den Sicherheits-Best-Practices auf Ihr privates Netzwerk beschränkt bleibt.

-:::warning[Weiterführend: Sicherheit in der Produktion] -Dieses Dokument erklärt die grundlegenden Netzwerkkonzepte. Für eine Produktionsbereitstellung ist es entscheidend, zusätzliche Sicherheitsmaßnahmen anzuwenden: +:::warning[Weiterführende Informationen: Sicherheit in der Produktion +] +Dieses Dokument erläutert die grundlegenden Netzwerkkonzepte. Für einen Produktionsbetrieb ist es entscheidend, zusätzliche Sicherheitsmaßnahmen anzuwenden: -- **Verwenden Sie sichere Images**: Bevorzugen Sie Images aus Ihrer sicheren Unternehmens-Registry wie **Harbor** anstelle von öffentlichen Images. -- **Kontrollieren Sie Netzwerkflüsse**: Implementieren Sie `NetworkPolicies`, um die Kommunikation auf die notwendigen Flüsse zwischen Ihren Anwendungen zu steuern. -- **Wenden Sie Governance-Richtlinien an**: Verwenden Sie Tools wie **Kyverno**, um Sicherheitsregeln durchzusetzen (z.B. "root"-Container verbieten, Ressourcen `requests` und `limits` erfordern, usw.). -::: +- **Verwenden Sie sichere Images** : Bevorzugen Sie Images aus Ihrem gesicherten Unternehmens-Registry wie **Harbor** anstelle öffentlicher Images. +- **Steuern Sie den Netzwerkverkehr** : Konfigurieren Sie `NetworkPolicies`, um die Kommunikation auf die für Ihre Anwendungen erforderlichen Datenströme zu beschränken. +- **Geben Sie Governance-Richtlinien vor** : Nutzen Sie Tools wie **Kyverno**, um Sicherheitsregeln durchzusetzen (z. B. das Verbot von „Root“-Containern, die Anforderung von Ressourcenanfragen (`requests`) und -grenzen (`limits`) usw.). +::: \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingargocd.md b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingargocd.md index d61b5714..b2003e84 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingargocd.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingargocd.md @@ -1,75 +1,75 @@ --- -title: ArgoCD für Ihre GitOps-Deployments verwenden +title: ArgoCD für Ihre GitOps-Bereitstellungen verwenden --- import argocdguestbook from '@site/docs/managed_kubernetes/tutorials/images/argocdguestbook.png' ## Ziele -Dieses Tutorial erklärt, wie Sie **ArgoCD**, das in Ihren **Managed Kubernetes**-Cluster integrierte GitOps-Tool für kontinuierliche Deployments, verwenden. Am Ende dieses Leitfadens werden Sie wissen: +Dieses Tutorial erklärt, wie Sie **ArgoCD** verwenden, das GitOps-Tool für kontinuierliche Bereitstellungen, das in Ihrem **Managed Kubernetes**-Cluster integriert ist. Am Ende dieses Leitfadens wissen Sie: - Was der GitOps-Ansatz ist. -- Wie Sie auf die ArgoCD-Oberfläche zugreifen. -- Wie Sie eine Anwendung mit ArgoCD bereitstellen, um ein Git-Repository zu synchronisieren. +- Wie Sie auf die ArgoCD-Benutzeroberfläche zugreifen. +- Wie Sie eine Anwendung bereitstellen, indem Sie ArgoCD zur Synchronisierung eines Git-Repositorys nutzen. -## Das GitOps-Prinzip mit ArgoCD +## Das Prinzip von GitOps mit ArgoCD -**GitOps** ist eine Praxis, bei der ein Git-Repository als einzige Quelle der Wahrheit für die Deklaration des gewünschten Zustands Ihrer Infrastruktur und Anwendungen verwendet wird. +**GitOps** ist eine Praxis, bei der ein Git-Repository als einzige Quelle der Wahrheit verwendet wird, um den gewünschten Zustand Ihrer Infrastruktur und Ihrer Anwendungen zu deklarieren. -**ArgoCD** ist das Tool, das dieses Prinzip umsetzt. Es überwacht kontinuierlich ein Git-Repository und vergleicht den dort definierten Zustand (über Kubernetes-Manifeste) mit dem tatsächlichen Zustand Ihres Clusters. Wenn es eine Abweichung feststellt, wendet es automatisch die Änderungen an, damit der Cluster dem entspricht, was in Git deklariert ist. +**ArgoCD** ist das Tool, das dieses Prinzip umsetzt. Es überwacht kontinuierlich ein Git-Repository und vergleicht den dort definierten Zustand (über Kubernetes-Manifeste) mit dem tatsächlichen Zustand Ihres Clusters. Falls es eine Abweichung erkennt, wendet es die Änderungen automatisch an, damit der Cluster dem in Git deklarierten Zustand entspricht. Die Vorteile sind zahlreich: -- **Zuverlässige und reproduzierbare Deployments.** -- **Vollständige Nachvollziehbarkeit** aller Änderungen über die Git-Historie. -- **Schnelle Wiederherstellung** nach einem Vorfall durch Rückkehr zu einem früheren Commit. -- **Verbesserte Sicherheit** durch Einschränkung des direkten Clusterzugangs. +- **Zuverlässige und reproduzierbare Bereitstellungen.** +- **Vollständige Nachverfolgbarkeit** aller Änderungen über die Git-Verlaufshistorie. +- **Schnelle Wiederherstellung** nach einem Vorfall durch Zurückgehen auf einen früheren Commit. +- **Verbesserte Sicherheit** durch die Einschränkung direkter Cluster-Zugriffe. ## Zugriff auf die ArgoCD-Oberfläche -Die ArgoCD-Weboberfläche ist auf einer internen URL Ihres Clusters exponiert. Um darauf zuzugreifen, müssen Sie mit dem internen Netzwerk des Clusters verbunden sein (z.B. über einen Bastion-Host oder ein VPN). +Die ArgoCD-Weboberfläche ist über eine interne URL Ihres Clusters erreichbar. Um darauf zuzugreifen, müssen Sie mit dem internen Netzwerk des Clusters verbunden sein (z. B. über einen Bastion-Host oder ein VPN). -Die zu verwendende URL lautet wie folgt, wobei Sie `` ersetzen: +Die zu verwendende URL lautet wie folgt, wobei `` zu remplacer ist : -`http://argocd.internal..mk.ms-cloud-temple.com` +`http://argocd.internal..mk.ms-cloud-temple.com` -Sie können die interne IP-Adresse des ArgoCD-Ingress mit folgendem Befehl abrufen: +Die interne IP-Adresse des ArgoCD-Ingress können Sie mit dem folgenden Befehl abrufen : ```bash kubectl get ingress argocd-server -n argocd ``` :::info -Das Passwort für das `admin`-Konto wird Ihnen von den Cloud Temple-Teams bei der Lieferung Ihres Clusters mitgeteilt. +Das Passwort für das `admin`-Konto wird Ihnen von den Cloud Temple-Teams bei der Bereitstellung Ihres Clusters bereitgestellt. ::: ## Eine Anwendung mit ArgoCD bereitstellen -Wir werden nun eine Testanwendung mit dem GitOps-Ansatz bereitstellen. +Wir werden nun eine Testanwendung mit der GitOps-Approche bereitstellen. ### 1. Das Git-Repository -ArgoCD benötigt ein Git-Repository mit den Kubernetes-Manifesten der bereitzustellenden Anwendung. Für dieses Tutorial verwenden wir das ArgoCD-Beispiel-Repository: `https://github.com/argoproj/argocd-example-apps`. Wir werden die `guestbook`-Anwendung bereitstellen, die sich in diesem Repository befindet. +ArgoCD benötigt ein Git-Repository, das die Kubernetes-Manifeste der bereitzustellenden Anwendung enthält. Für dieses Tutorial verwenden wir das Beispiel-Repository von ArgoCD: `https://github.com/argoproj/argocd-example-apps`. Wir werden die Anwendung `guestbook` bereitstellen, die sich in diesem Repository befindet. -### 2. Den Ziel-Namespace vorbereiten +### 2. Vorbereiten des Ziel-Namespace -Damit die Anwendung in einem von Capsule verwalteten Namespace bereitgestellt werden kann, müssen wir zunächst diesen Namespace erstellen und das entsprechende Tenant-Label darauf anwenden. +Damit die Anwendung in einem von Capsule verwalteten Namespace bereitgestellt werden kann, müssen wir diesen Namespace zunächst erstellen und ihm das entsprechende Tenant-Label zuweisen. Führen Sie die folgenden Befehle aus: ```bash -# Erstellt den Namespace +# Crée le namespace kubectl create namespace guestbook -# Wendet das Label an, um ihn mit dem Capsule-Tenant "default" zu verknüpfen (falls nötig, da der Namespace bei seiner Erstellung wahrscheinlich bereits Ihrem Tenant zugeordnet wurde) +# Applique le label pour l'associer au tenant "default" de Capsule (si besoin, car le namespace a surement déjà été associé avec votre tenant lors de sa création) kubectl label namespace guestbook capsule.clastix.io/tenant=default ``` -### 3. Die Anwendung in ArgoCD erstellen +### 3. Erstellen der Anwendung in ArgoCD -Da der Namespace nun bereit ist, können wir ArgoCD die Anwendung deklarieren. +Da der Namespace bereit ist, können wir die Anwendung in ArgoCD anlegen. -1. Erstellen Sie eine Datei namens `app-guestbook.yaml` mit folgendem Inhalt: +1. Erstellen Sie eine Datei mit dem Namen `app-guestbook.yaml` und dem folgenden Inhalt: ```yaml apiVersion: argoproj.io/v1alpha1 @@ -92,18 +92,18 @@ Da der Namespace nun bereit ist, können wir ArgoCD die Anwendung deklarieren. selfHeal: true ``` - Dieses Manifest weist ArgoCD an: - - Eine Anwendung namens `guestbook` zu erstellen. - - Das `argocd-example-apps`-Repository zu überwachen. - - Den Fokus auf den `guestbook`-Ordner in diesem Repository zu legen. - - Die im `guestbook`-Namespace des lokalen Clusters gefundenen Manifeste bereitzustellen. + Dieses Manifest weist ArgoCD an, Folgendes zu tun: + - Eine Anwendung mit dem Namen `guestbook` zu erstellen. + - Das Repository `argocd-example-apps` zu überwachen. + - Sich auf den Ordner `guestbook` in diesem Repository zu konzentrieren. + - Die im lokalen Cluster im Namespace `guestbook` gefundenen Manifeste bereitzustellen. - Die Synchronisierung automatisch aufrechtzuerhalten (`automated`). -2. Sie haben zwei Möglichkeiten, die Anwendung in ArgoCD zu erstellen: +2. Sie haben zwei Optionen zum Erstellen der Anwendung in ArgoCD: **Option A: Über `kubectl` (GitOps-Ansatz)** - Wenden Sie dieses Manifest direkt auf Ihren Cluster an. Dies ist die empfohlene Methode, da sie dem GitOps-Prinzip der deklarativen Verwaltung folgt. + Wenden Sie dieses Manifest direkt auf Ihren Cluster an. Dies ist die empfohlene Methode, da sie dem GitOps-Prinzip des deklarativen Managements folgt. ```bash kubectl apply -f app-guestbook.yaml @@ -112,31 +112,31 @@ Da der Namespace nun bereit ist, können wir ArgoCD die Anwendung deklarieren. **Option B: Über die ArgoCD-Weboberfläche** Sie können die Anwendung auch direkt über die grafische Oberfläche erstellen: - - Klicken Sie in der ArgoCD-UI auf **"+ NEW APP"**. - - Klicken Sie oben rechts im Erstellungsbildschirm auf **"EDIT AS YAML"**. + - Klicken Sie in der ArgoCD-Benutzeroberfläche auf **"+ NEW APP"**. + - Klicken Sie oben rechts auf dem Erstellungsbildschirm auf **"EDIT AS YAML"**. - Fügen Sie den Inhalt Ihrer Datei `app-guestbook.yaml` in den Editor ein. - Klicken Sie auf **"CREATE"**. -### 4. Die Synchronisierung überprüfen +### 4. Synchronisierung überprüfen -Sobald Sie das Manifest anwenden, erkennt ArgoCD diese neue `Application`-Ressource und beginnt seine Arbeit. +Sobald Sie das Manifest anwenden, erkennt ArgoCD diese neue `Application`-Ressource und beginnt mit der Arbeit. -1. **Über die Weboberfläche:** - - Melden Sie sich bei der ArgoCD-Oberfläche an. +1. **Über die Weboberfläche :** + - Melden Sie sich in der ArgoCD-Weboberfläche an. - Sie sollten eine neue Karte für die `guestbook`-Anwendung sehen. - - Nach einigen Augenblicken sollte ihr Status auf `Healthy` und `Synced` wechseln. - - Durch Klicken auf die Karte können Sie alle Kubernetes-Ressourcen (Deployment, Service, etc.) visualisieren, die erstellt wurden. + - Nach einigen Augenblicken sollte sich sein Status in `Healthy` und `Synced` ändern. + - Durch Klicken auf die Karte können Sie alle erstellten Kubernetes-Ressourcen (Deployment, Service usw.) einsehen. -1. **Über die Befehlszeile:** - - Überprüfen Sie, dass der `guestbook`-Namespace erstellt wurde: +1. **Über die Befehlszeile :** + - Überprüfen Sie, ob der Namespace `guestbook` erstellt wurde : ```bash kubectl get ns guestbook ``` - - Überprüfen Sie, dass die Anwendungsressourcen ordnungsgemäß in diesem Namespace bereitgestellt wurden: + - Überprüfen Sie, ob die Ressourcen der Anwendung in diesem Namespace bereitgestellt wurden : ```bash kubectl get all -n guestbook @@ -155,33 +155,34 @@ Sobald Sie das Manifest anwenden, erkennt ArgoCD diese neue `Application`-Ressou ### 5. Der GitOps-Zyklus -Wenn Sie nun ein Manifest im Git-Repository ändern, erkennt ArgoCD die Änderung und aktualisiert die Anwendung im Cluster automatisch. Das ist die Magie von GitOps! +Wenn Sie nun ein Manifest im Git-Repository ändern, erkennt ArgoCD die Änderung und aktualisiert die Anwendung automatisch im Cluster. Das ist die Magie von GitOps ! ## Bereinigung -Um die Anwendung und alle zugehörigen Ressourcen zu löschen, können Sie einfach die ArgoCD `Application`-Ressource löschen. +Um die Anwendung und alle zugehörigen Ressourcen zu entfernen, können Sie einfach die `Application`-Ressource in ArgoCD löschen. 1. **Über die Weboberfläche:** - - Finden Sie in der ArgoCD-UI die `guestbook`-Anwendung. - - Klicken Sie auf die drei Punkte (...), um das Menü zu öffnen, und wählen Sie **"Delete"**. - - Aktivieren Sie die Option **"Foreground"**, um sicherzustellen, dass alle verwalteten Ressourcen (Pods, Services, etc.) ebenfalls in Kaskade gelöscht werden. -2. **Über `kubectl`:** - - Löschen Sie die erstellte Datei `app-guestbook.yaml`: + - Suchen Sie in der ArgoCD-UI die Anwendung `guestbook`. + - Klicken Sie auf die drei Punkte (...), um das Menü zu öffnen, und wählen Sie **"Löschen"**. + - Aktivieren Sie die Option **"Foreground"**, um sicherzustellen, dass alle verwalteten Ressourcen (Pods, Dienste usw.) ebenfalls kaskadierend gelöscht werden. +2. **Über `kubectl` :** + - Löschen Sie die von Ihnen erstellte Datei `app-guestbook.yaml` : ```bash kubectl delete -f app-guestbook.yaml ``` -ArgoCD wird nun alle Komponenten der `guestbook`-Anwendung löschen. Sobald die Lösch-Synchronisierung abgeschlossen ist, wird der `guestbook`-Namespace leer sein. Sie können ihn dann mit folgendem Befehl löschen: +ArgoCD löscht nun alle Komponenten der `guestbook`-Anwendung. Sobald die Löschsynchronisation abgeschlossen ist, ist der Namespace `guestbook` leer. Sie können ihn anschließend mit dem folgenden Befehl löschen: ```bash kubectl delete namespace guestbook ``` -:::info[Weiterführend: Secrets-Verwaltung] +:::info[Vertiefende Informationen: Verwaltung von Secrets +] Dieses Tutorial verwendet ein öffentliches Repository ohne sensible Daten. Für Ihre Produktionsanwendungen ist es entscheidend, niemals Secrets (Passwörter, API-Schlüssel) im Klartext in Ihrem Git-Repository zu speichern. Lösungen wie **Sealed Secrets** oder **HashiCorp Vault** integrieren sich mit ArgoCD, um Ihre Secrets sicher zu verwalten. Ein zukünftiges Tutorial wird diesen Ansatz detailliert beschreiben. ::: ## Fazit -Sie haben Ihre erste Anwendung mit ArgoCD nach GitOps-Prinzipien bereitgestellt. Dieser leistungsstarke Ansatz ermöglicht es Ihnen, Ihre Deployments deklarativ, zuverlässig und sicher zu verwalten. Wir ermutigen Sie, ihn für alle Ihre Anwendungen auf Managed Kubernetes zu übernehmen. +Sie haben Ihre erste Anwendung mit ArgoCD gemäß den GitOps-Prinzipien bereitgestellt. Dieser leistungsstarke Ansatz ermöglicht es Ihnen, Ihre Bereitstellungen deklarativ, zuverlässig und sicher zu verwalten. Wir empfehlen Ihnen, ihn für alle Ihre Anwendungen auf Managed Kubernetes zu nutzen. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingcapsule.md b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingcapsule.md index 38af3811..a83285f3 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingcapsule.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingcapsule.md @@ -4,80 +4,80 @@ title: Berechtigungen mit Capsule verwalten ## Ziele -Dieses Tutorial führt Sie durch die Verwendung von **Capsule**, dem Multi-Tenancy-Tool, das in Ihren **Managed Kubernetes**-Cluster integriert ist. Am Ende dieses Leitfadens werden Sie wissen: +Dieses Tutorial führt Sie in die Verwendung von **Capsule**, dem integrierten Multi-Tenancy-Tool für Ihren **Managed Kubernetes**-Cluster. Am Ende dieses Leitfadens wissen Sie: - Was ein **Capsule-Tenant** ist und wie er Ihre Berechtigungen organisiert. - Wie Sie **Namespaces innerhalb Ihres Tenants erstellen und verwalten**. -- Wie **Sicherheitsrichtlinien und Kontingente** auf Ihre Projekte angewendet werden. +- Wie **Sicherheitsrichtlinien und Quotas** auf Ihre Projekte angewendet werden. ## Was ist Capsule? -Capsule ist ein Kubernetes-Controller, der das Konzept eines **Tenants** einführt, um mehrere Namespaces zu gruppieren. Im Managed Kubernetes-Angebot von Cloud Temple wird Capsule verwendet, um Ihnen die autonome Verwaltung Ihrer eigenen Namespaces zu übertragen, ohne dass ein Cluster-Administrator eingreifen muss. +Capsule ist ein Kubernetes-Controller, der das Konzept des **Tenant** einführt, um mehrere Namespaces zu gruppieren. Im Managed Kubernetes von Cloud Temple wird Capsule eingesetzt, um Ihnen die eigenständige Verwaltung Ihrer eigenen Namespaces zu ermöglichen, ohne dass ein Cluster-Administrator eingreifen muss. -Bei der Lieferung Ihres Clusters haben die Cloud Temple-Teams einen ersten Tenant für Sie erstellt und Sie als dessen **Eigentümer (Tenant Owner)** bestimmt. +Bei der Bereitstellung Ihres Clusters haben die Cloud Temple-Teams einen ersten Tenant für Sie erstellt und Sie als **Eigentümer (Tenant Owner)** bestimmt. :::tip Standardmäßig heißt Ihr erster Tenant `default` und das Dienstkonto des Eigentümers ist `defaultapp`. ::: -Um mehr über das Projekt zu erfahren, können Sie die [offizielle Capsule-Website](https://projectcapsule.dev/) besuchen. +Weitere Informationen zum Projekt finden Sie auf der [offiziellen Website von Capsule](https://projectcapsule.dev/). -## Schritt 1: Den Namen Ihres Tenants kennen +## Schritt 1: Den Namen Ihres Tenants ermitteln -Als `Tenant Owner` haben Sie keine Berechtigung, die `Tenant`-Ressource direkt aufzulisten. Der Name Ihres Tenants wird Ihnen von den Cloud Temple-Teams bei der Lieferung des Dienstes mitgeteilt. +Als `Tenant Owner` haben Sie keine Berechtigungen, um die `Tenant`-Ressource direkt aufzulisten. Der Name Ihres Tenants wird Ihnen von den Cloud Temple-Teams bei der Bereitstellung des Service mitgeteilt. -Wenn Sie den Namen Ihres Tenants vergessen haben, können Sie ihn durch Überprüfen der Labels der Namespaces finden, auf die Sie Zugriff haben. Der folgende Befehl listet alle Namespaces auf, die einem Capsule-Tenant zugeordnet sind, und zeigt deren Labels an: +Falls Sie den Namen Ihres Tenants vergessen haben, können Sie ihn durch Inspektion der Labels der Namespaces ermitteln, auf die Sie Zugriff haben. Der folgende Befehl listet alle Namespaces auf, die an einen Capsule-Tenant gebunden sind, und zeigt deren Labels an: ```bash kubectl get ns -l capsule.clastix.io/tenant --show-labels ``` -Suchen Sie nach dem Label `capsule.clastix.io/tenant`. Der Wert dieses Labels ist der Name Ihres Tenants. Sie können dann diesen Namen verwenden, um zu filtern und nur die Namespaces Ihres Tenants anzuzeigen: +Suchen Sie nach dem Label `capsule.clastix.io/tenant`. Der Wert dieses Labels entspricht dem Namen Ihres Tenants. Anschließend können Sie diesen Namen verwenden, um zu filtern und nur die Namespaces Ihres Tenants anzuzeigen: ```bash -# Sobald Sie den Namen Ihres Tenants kennen, zum Beispiel "my-tenant" +# Une fois que vous connaissez le nom de votre tenant, par exemple "my-tenant" kubectl get ns -l capsule.clastix.io/tenant=my-tenant ``` -## Schritt 2: Einen neuen Namespace erstellen +## Schritt 2: Erstellen eines neuen Namespaces -Ihr Hauptvorteil als `Tenant Owner` ist, dass Sie Namespaces selbst erstellen können. Sie können dies direkt mit einem einzigen `kubectl`-Befehl tun. +Ihr Hauptvorteil als `Tenant Owner` besteht darin, Namespaces selbst erstellen zu können. Dies lässt sich direkt mit einem einzigen `kubectl`-Befehl durchführen. -Führen Sie den folgenden Befehl aus, um einen Namespace namens `mon-projet-dev` zu erstellen: +Führen Sie den folgenden Befehl aus, um ein Namespace mit dem Namen `mon-projet-dev` zu erstellen: ```bash kubectl create namespace mon-projet-dev ``` -Capsule wird diese Anfrage abfangen. Da Sie Eigentümer eines Tenants sind, wird es die Erstellung des Namespace autorisieren und ihn automatisch mit Ihrem Tenant verknüpfen. +Capsule fängt diese Anfrage ab. Da Sie Eigentümer eines Tenants sind, wird es die Erstellung des Namespaces genehmigen und diesen automatisch Ihrem Tenant zuordnen. -## Schritt 3: Die Namespace-Zuordnung überprüfen +## Schritt 3: Überprüfung der Namespace-Zuordnung -Sobald der Namespace erstellt ist, können Sie überprüfen, ob er ordnungsgemäß Ihrem Tenant zugeordnet wurde. +Nachdem der Namespace erstellt wurde, können Sie prüfen, ob er erfolgreich Ihrem Tenant zugeordnet wurde. ```bash kubectl get ns mon-projet-dev --show-labels ``` -Sie werden feststellen, dass Capsule Ihrem Namespace ein Label hinzugefügt hat, das angibt, zu welchem Tenant er gehört. Dies ist der Mechanismus, der die Isolation zwischen den verschiedenen Tenants des Clusters gewährleistet. +Sie werden feststellen, dass Capsule ein Label zu Ihrem Namespace hinzugefügt hat, das angibt, zu welchem Tenant er gehört. Genau dieser Mechanismus gewährleistet die Isolation zwischen den verschiedenen Tenants im Cluster. ``` NAME STATUS AGE LABELS mon-projet-dev Active 1m capsule.clastix.io/tenant=votre-tenant ``` -## Schritt 4: Die Richtlinienvererbung verstehen +## Schritt 4: Vererbung von Richtlinien verstehen -Einer der größten Vorteile von Capsule ist, dass alle Sicherheitsrichtlinien, Ressourcenkontingente (`ResourceQuota`) und Ressourcenbereiche (`LimitRange`), die von Administratoren auf Tenant-Ebene definiert wurden, **automatisch von allen Namespaces geerbt werden**, die Sie erstellen. +Einer der größten Vorteile von Capsule besteht darin, dass alle Sicherheitsrichtlinien, Ressourcenquotas (`ResourceQuota`) und Ressourcenbegrenzungen (`LimitRange`), die auf Tenant-Ebene von Administratoren festgelegt wurden, **automatisch an alle von Ihnen erstellten Namespaces vererbt werden**. -Dies stellt sicher, dass Ihre Projekte die Verbrauchsgrenzen (CPU, Arbeitsspeicher, Speicher) und Sicherheitsregeln (wie Standard-Netzwerkrichtlinien oder durch **Kyverno** definierte Sicherheitsbeschränkungen) einhalten, die für Ihre Umgebung festgelegt wurden, ohne dass Sie diese für jeden Namespace neu konfigurieren müssen. +Dies stellt sicher, dass Ihre Projekte die für Ihre Umgebung festgelegten Ressourcenlimits (CPU, Arbeitsspeicher, Speicher) und Sicherheitsregeln (wie Standard-Netzwerkrichtlinien oder Sicherheitsbeschränkungen, die von **Kyverno** definiert wurden) einhalten, ohne dass Sie diese für jeden Namespace neu konfigurieren müssen. :::info -Spezifische Kontingente wurden auf Ihrem Capsule-Tenant gesetzt, um die Nutzung des persistenten Speichers (Ceph-Block und Ceph-FileSystem) auf den im Cluster verfügbaren Gesamtspeicherplatz zu begrenzen. Wenn Sie diese Kontingente für ein bestimmtes Projekt ändern müssen, stellen Sie bitte eine Anfrage beim Cloud Temple-Support. +Für Ihren Capsule-Tenant wurden spezifische Quotas festgelegt, um die Nutzung von persistentem Speicher (Ceph-Block und Ceph-FileSystem) auf den im Cluster verfügbaren Gesamtspeicher zu begrenzen. Wenn Sie diese Quotas für ein bestimmtes Projekt ändern müssen, richten Sie bitte eine Anfrage an den Cloud Temple Support. ::: ## Fazit -Dank Capsule verfügen Sie über vollständige Autonomie bei der Verwaltung der Namespaces Ihrer Teams und profitieren gleichzeitig von einem sicheren und von den Cluster-Administratoren vorkonfigurierten Rahmen. Sie können Namespaces nach Belieben erstellen, ändern und löschen, in dem Wissen, dass die notwendigen Schutzmaßnahmen automatisch angewendet werden. +Dank Capsule verfügen Sie über volle Autonomie bei der Verwaltung der Namespaces Ihrer Teams, während Sie gleichzeitig von einem von den Cluster-Administratoren vorkonfigurierten und sicheren Framework profitieren. Sie können Namespaces nach Bedarf erstellen, ändern und löschen, wobei die erforderlichen Schutzmechanismen automatisch angewendet werden. -Wenn Sie einen neuen Tenant erstellen möchten, um eine weitere Gruppe von Projekten oder Teams zu isolieren, können Sie dies beim Cloud Temple-Support anfordern. +Falls Sie einen neuen Tenant erstellen müssen, um eine weitere Gruppe von Projekten oder Teams zu isolieren, können Sie diesbezüglich eine Anfrage an den Cloud-Temple-Support richten. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggapi.md b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggapi.md index a2a67b0b..354d655f 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggapi.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggapi.md @@ -6,71 +6,73 @@ import gapischema from '@site/docs/managed_kubernetes/tutorials/images/gapi.png' ## Einführung -Die Gateway API ist der neue Kubernetes-Standard für die Verwaltung des eingehenden Datenverkehrs. Sie löst die traditionelle Ingress-Ressource ab und bietet mehr Flexibilität, mehr Funktionen (erweitertes Routing, Load Balancing, usw.) und eine bessere Trennung der Verantwortlichkeiten. +Die Gateway API ist der neue Kubernetes-Standard für das Management des eingehenden Datenverkehrs. Sie löst die traditionelle Ingress-Ressource ab und bietet mehr Flexibilität, Funktionen (erweitertes Routing, Lastverteilung usw.) sowie eine klarere Trennung der Verantwortlichkeiten. -In Ihrem Cloud Temple Managed Kubernetes-Cluster wird **Cilium** als CNI verwendet und implementiert nativ die Gateway API-Unterstützung. +In Ihrem Managed Kubernetes Cloud Temple-Cluster wird **Cilium** als CNI verwendet und unterstützt die Gateway API nativ. -:::info[Unterstützte Versionen] +:::info[Unterstützte Versionen +] Diese Dokumentation gilt für Cluster, die **Cilium 1.8.4 oder höher** verwenden. -**Gateway API CRDs in Version 1.4** sind auf Ihrem Cluster vorinstalliert. +Die **Gateway API CRDs in Version 1.4** sind auf Ihrem Cluster vorinstalliert. ::: ## Ziele Dieses Tutorial führt Sie durch: -- Das Verstehen der grundlegenden Gateway API-Ressourcen (GatewayClass, Gateway, HTTPRoute). -- Das Bereitstellen einer Testanwendung. -- Das Exponieren dieser Anwendung über ein Cilium Gateway. -- Das Testen des Zugangs. +- Die grundlegenden Gateway API-Ressourcen verstehen (GatewayClass, Gateway, HTTPRoute). +- Eine Testanwendung bereitstellen. +- Diese Anwendung über ein Cilium-Gateway exponieren. +- Den Zugriff testen. ## Voraussetzungen -- Ein betriebsbereiter Cloud Temple Managed Kubernetes-Cluster. -- Das `kubectl`-Tool konfiguriert für den Zugriff auf Ihren Cluster. -- Das `cilium`-Tool. +- Ein betriebsbereiter Managed Kubernetes Cloud Temple-Cluster. +- Das Tool `kubectl`, das für den Zugriff auf Ihren Cluster konfiguriert ist. +- Das Tool `cilium`. ## Schlüsselkonzepte -Die Gateway API zerlegt die Netzwerkkonfiguration in drei Hauptressourcen: +Die Gateway API unterteilt die Netzwerkkonfiguration in drei Hauptressourcen: -1. **GatewayClass**: Definiert den Typ des Controllers (hier `io.cilium/gateway`). -2. **Gateway**: Instanziiert einen Netzwerkeingangspunkt (Load Balancer). -3. **HTTPRoute**: Definiert Routing-Regeln (Pfade, Headers) zu Kubernetes-Services. +1. **GatewayClass** : Definiert den Typ des Controllers (ici, `io.cilium/gateway`). +2. **Gateway** : Instanziiert einen Netzwerk-Eingangspunkt (load balancer). +3. **HTTPRoute** : Definiert die Routingregeln (chemins, headers) zu Kubernetes-Services. Schema GAPI ## Schritt 1: Version und GatewayClass überprüfen -Sie können überprüfen, dass Ihr Cluster eine kompatible Version von Cilium (1.8.4+) verwendet, mit folgenden Befehlen: +Sie können mit den folgenden Befehlen überprüfen, ob Ihr Cluster eine kompatible Version von Cilium (1.8.4+) verwendet: ```bash cilium status cilium config view | grep -w "enable-gateway-api" ``` -Stellen Sie dann sicher, dass die Cilium `GatewayClass` auf Ihrem Cluster verfügbar ist: +Stellen Sie anschließend sicher, dass die `GatewayClass` von Cilium in Ihrem Cluster verfügbar ist: ```bash kubectl get gatewayclass ``` -Sie sollten eine ähnliche Ausgabe sehen wie: +Sie sollten eine Ausgabe ähnlich der folgenden sehen: ```text NAME CONTROLLER ACCEPTED AGE cilium io.cilium/gateway True 2d ``` -:::info[Hinweis] -Wenn keine GatewayClass aufgelistet ist, stellen Sie sicher, dass die Gateway API-Funktion in Ihrer Cilium-Installation aktiviert ist. +:::info[Hinweis +] +Wenn keine GatewayClass aufgelistet ist, stellen Sie sicher, dass die Gateway-API-Funktion in Ihrer Cilium-Installation aktiviert ist. ::: -## Schritt 2: Eine Demoanwendung bereitstellen +## Schritt 2 : Eine Demo-Anwendung bereitstellen -Wir werden eine einfache Anwendung bereitstellen, die Informationen über den Pod zurückgibt (echo-server). +Wir stellen eine einfache Anwendung bereit, die Informationen über den Pod zurückgibt (echo-server). -Erstellen Sie eine `apps.yaml`-Datei: +Erstellen Sie eine Datei `apps.yaml` : ```yaml apiVersion: apps/v1 @@ -109,17 +111,17 @@ spec: targetPort: 80 ``` -Wenden Sie die Konfiguration an: +Wenden Sie die Konfiguration an : ```bash kubectl apply -f apps.yaml ``` -## Schritt 3: Das Gateway erstellen +## Schritt 3: Gateway erstellen -Das Gateway wird die Erstellung eines LoadBalancers anfordern, um Datenverkehr zu empfangen. +Die Gateway wird die Erstellung eines LoadBalancers anfordern, um den Datenverkehr zu empfangen. -Erstellen Sie eine `gateway.yaml`-Datei: +Erstellen Sie eine Datei `gateway.yaml` : ```yaml apiVersion: gateway.networking.k8s.io/v1 @@ -137,25 +139,25 @@ spec: from: Same ``` -Wenden Sie die Konfiguration an: +Wenden Sie die Konfiguration an : ```bash kubectl apply -f gateway.yaml ``` -Überprüfen Sie, dass das Gateway eine IP-Adresse erhalten hat (dies kann einige Momente dauern, bis der LoadBalancer von der Cloud Temple-Infrastruktur provisioniert wird): +Überprüfen Sie, ob die Gateway eine IP-Adresse erhalten hat (das Provisioning des LoadBalancers durch die Cloud-Temple-Infrastruktur kann einige Augenblicke dauern) : ```bash kubectl get gateway my-gateway ``` -Warten Sie, bis das Feld `PROGRAMMED` den Wert `True` hat und `ADDRESS` eine IP-Adresse anzeigt. +Warten Sie, bis das Feld `PROGRAMMED` den Wert `True` aufweist und `ADDRESS` eine IP-Adresse anzeigt. -## Schritt 4: Eine HTTPRoute erstellen +## Schritt 4 : Eine HTTPRoute erstellen -Da wir nun einen "Eingangspunkt" (Gateway) haben, müssen wir den Datenverkehr zu unserem Dienst leiten. +Da wir nun ein "Gateway" haben, müssen wir den Datenverkehr zu unserem Dienst weiterleiten. -Erstellen Sie eine `httproute.yaml`-Datei: +Erstellen Sie eine Datei `httproute.yaml` : ```yaml apiVersion: gateway.networking.k8s.io/v1 @@ -175,33 +177,33 @@ spec: port: 80 ``` -Wenden Sie die Konfiguration an: +Übernehmen Sie die Konfiguration : ```bash kubectl apply -f httproute.yaml ``` -## Schritt 5: Den Zugang testen +## Schritt 5: Zugriff testen -Rufen Sie die IP-Adresse Ihres Gateways ab: +Ermitteln Sie die IP-Adresse Ihres Gateways: ```bash kubectl get gateway my-gateway -o jsonpath='{.status.addresses[0].value}' ``` -Senden Sie eine Anfrage an diese IP-Adresse zum Testen: +Senden Sie eine Anfrage an diese IP-Adresse, um zu testen: ```bash curl http://10.200.205.2 ``` -Sie sollten eine JSON-Antwort von der `echo-server`-Anwendung erhalten, die Details des antwortenden Pods anzeigt. +Sie sollten eine JSON-Antwort der Anwendung `echo-server` erhalten, die die Details des Pods enthält, der geantwortet hat. ## Erweiterte Funktionen (Beispiel: Canary Release) -Die Gateway API erleichtert erheblich erweiterte Bereitstellungsszenarien, wie z.B. Canary Release (gewichtete Verkehrsaufteilung). +Die Gateway API erleichtert fortgeschrittene Deployment-Szenarien erheblich, wie z. B. Canary Releases (gewichtete Traffic-Verteilung). -Angenommen, wir haben eine v2 unserer Anwendung. Wir können den Datenverkehr zu 90% zu v1 und 10% zu v2 aufteilen, indem wir einfach die Gewichte in `backendRefs` anpassen: +Nehmen wir an, wir haben eine v2 unserer Anwendung. Wir können den Traffic zu 90% auf v1 und zu 10% auf v2 aufteilen, indem wir einfach die Gewichte in `backendRefs` anpassen: ```yaml apiVersion: gateway.networking.k8s.io/v1 @@ -223,4 +225,4 @@ spec: ## Fazit -Sie haben eine moderne Infrastruktur zur Service-Exposition mit Cilium Gateway API eingerichtet. Dieser standardisierte Ansatz, der semantisch reichhaltiger als Ingress ist, wird empfohlen, um die fortgeschrittenen Netzwerkfähigkeiten von Kubernetes zu nutzen. +Sie haben eine moderne Infrastruktur zur Dienstexposition mit der Cilium Gateway API eingerichtet. Dieser standardisierte Ansatz, der semantisch reichhaltiger ist als Ingress, wird empfohlen, um die erweiterten Funktionen des Kubernetes-Netzwerks zu nutzen. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggpu.md b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggpu.md index 1c86b03d..c9a6cfed 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggpu.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggpu.md @@ -1,20 +1,20 @@ --- -title: Eine NVIDIA GPU verwenden +title: Eine NVIDIA-GPU verwenden --- import nvidiasmi from '@site/docs/managed_kubernetes/tutorials/images/nvidiasmi.png' -# Eine GPU auf Managed Kubernetes verwenden +# GPU auf Managed Kubernetes verwenden -Dieses Tutorial zeigt Ihnen, wie Sie einen Pod bereitstellen, der eine GPU-Ressource auf einem Managed Kubernetes-Cluster verwendet, der mit „Bare Metal"-Knoten ausgestattet ist, die mit NVIDIA GPUs ausgestattet sind. +Dieses Tutorial zeigt Ihnen, wie Sie einen Pod bereitstellen, der eine GPU-Ressource auf einem Managed-Kubernetes-Cluster verwendet, der mit "Bare-Metal"-Knoten konfiguriert ist, die mit NVIDIA-GPUs ausgestattet sind. ## Voraussetzungen -- Ein Managed Kubernetes-Cluster mit mindestens einem „Bare Metal"-Worker-Knoten mit GPU. +- Ein Managed-Kubernetes-Cluster mit mindestens einem Worker-Knoten vom Typ "Bare Metal" mit GPU. ## Beispiel-Pod-Manifest -Hier ist ein Beispiel-Pod-Manifest, das den Befehl `nvidia-smi` ausführt, um die Anwesenheit und den Status der GPU-Karte zu überprüfen. +Dies ist ein Beispiel für ein Pod-Manifest, das den Befehl `nvidia-smi` ausführt, um das Vorhandensein und den Status der GPU zu überprüfen. ```yaml apiVersion: v1 @@ -22,7 +22,7 @@ kind: Pod metadata: name: nvidia-cuda-check spec: - runtimeClassName: nvidia # Schlüssel für Talos NVIDIA + runtimeClassName: nvidia # Clé pour Talos NVIDIA restartPolicy: Never containers: - name: nvidia-version-check @@ -33,27 +33,27 @@ spec: ### Erklärung des Manifests -- **`runtimeClassName: nvidia`**: Dies ist der wichtigste Teil. Er weist Kubernetes an, die NVIDIA-Laufzeitumgebung zu verwenden. Das NVIDIA-Toolkit injiziert dann die NVIDIA-Treiber direkt in den Pod, sodass der Container auf die GPU zugreifen kann. -- **`restartPolicy: Never`**: Da es sich bei diesem Pod nur um einen Überprüfungsbefehl handelt, soll er nach der Ausführung nicht neu gestartet werden. -- **`image: "nvidia/cuda:..."`**: Wir verwenden ein von NVIDIA bereitgestelltes Image, das die notwendigen Werkzeuge für die Interaktion mit der GPU enthält. -- **`command: ["nvidia-smi"]`**: Dies ist der Befehl, der im Container ausgeführt wird. `nvidia-smi` ist ein Befehlszeilenwerkzeug, das Informationen über NVIDIA GPUs liefert. +- **`runtimeClassName: nvidia`**: Dies ist der wichtigste Teil. Sie weist Kubernetes an, die NVIDIA-Laufzeitumgebung zu verwenden. Das NVIDIA-Toolkit kümmert sich dann darum, die NVIDIA-Treiber direkt in den Pod zu injizieren, wodurch der Container auf die GPU zugreifen kann. +- **`restartPolicy: Never`**: Da dieser Pod lediglich einen Überprüfungsbefehl ausführt, soll er nach seiner Ausführung nicht neu gestartet werden. +- **`image: "nvidia/cuda:..."`**: Wir verwenden ein von NVIDIA bereitgestelltes Image, das die erforderlichen Tools zur Interaktion mit der GPU enthält. +- **`command: ["nvidia-smi"]`**: Dies ist der Befehl, der innerhalb des Containers ausgeführt wird. `nvidia-smi` ist ein Befehlszeilen-Tool, das Informationen über NVIDIA-GPUs bereitstellt. Weitere Informationen zur Funktionsweise des NVIDIA-Toolkits finden Sie in der [offiziellen Dokumentation auf GitHub](https://github.com/NVIDIA/nvidia-container-toolkit). ## Bereitstellung und Überprüfung -1. **Stellen Sie den Pod bereit** mit dem Befehl `kubectl apply`: +1. **Stellen Sie das Pod bereit** mit dem Befehl `kubectl apply` : ```shell kubectl apply -f nvidia-smi.yaml ``` -2. **Überprüfen Sie die Pod-Logs**, um die Ausgabe des Befehls `nvidia-smi` zu sehen: +2. **Überprüfen Sie die Logs des Pods**, um die Ausgabe des Befehls `nvidia-smi` anzuzeigen : ```shell kubectl logs nvidia-cuda-check ``` -Wenn alles korrekt konfiguriert ist, sollten Sie eine Ausgabe ähnlich der folgenden sehen, die die Details Ihrer GPU-Karte anzeigt: +Wenn alles korrekt konfiguriert ist, sollten Sie eine ähnliche Ausgabe sehen, die die Details Ihrer GPU-Karte anzeigt : -nvidia-smi command result +nvidia-smi command result \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingharbor.md b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingharbor.md index 370c4c44..8bd5db43 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingharbor.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingharbor.md @@ -2,43 +2,43 @@ title: Harbor verwenden --- -Harbor ist eine OCI-Artefakt-Registry (Container-Images, Helm Charts, SBOM, Signaturen usw.) mit detaillierter Projektverwaltung, Zugangskontrolle, Schwachstellen-Scans, Aufbewahrungsrichtlinien und Signaturverwaltung. Dieser Leitfaden erklärt, wie Sie Harbor mit Cloud Temple Managed Kubernetes verwenden – von der Verbindung zur Registry bis hin zur Integration in Ihre Kubernetes-Deployments und CI/CD-Pipelines. +Harbor ist eine OCI-Artefakt-Registry (Container-Images, Helm-Charts, SBOMs, Signaturen usw.), die eine feingranulare Projektverwaltung, Zugriffskontrollen, Schwachstellen-Scans, Aufbewahrungsrichtlinien und Signaturenverwaltung bietet. Dieser Leitfaden erläutert die Verwendung mit Cloud Temple Managed Kubernetes, von der Anmeldung an der Registry bis zur Integration in Ihre Kubernetes-Deployments und CI/CD-Pipelines. :::note -Ersetzen Sie in diesem Leitfaden die folgenden Variablen durch Ihre eigenen Werte: +Ersetzen Sie in diesem Leitfaden die folgenden Variablen durch Ihre Werte: -- `` : Ihr Cluster-Code (z.B.: `ctodev`) -- `` : Öffentliche Harbor-URL, die folgendermaßen aufgebaut wird: `harbor.external-secured..mk.ms-cloud-temple.com` (z.B.: `harbor.external-secured.ctodev.mk.ms-cloud-temple.com`) +- `` : Cluster-Code (z. B. `ctodev`) +- `` : Öffentliche Harbor-URL, die wie folgt aufgebaut ist: `harbor.external-secured..mk.ms-cloud-temple.com` (z. B. `harbor.external-secured.ctodev.mk.ms-cloud-temple.com`) - `` : Name Ihres Harbor-Projekts - `` : Ziel-Kubernetes-Namespace -- `` / `` : Anmeldedaten eines Harbor-Robot-Kontos +- `` / `` : Anmeldeinformationen eines Harbor-Roboters ::: ## Voraussetzungen -- Zugang zur Konsole und zum Managed Kubernetes-Dienst -- Ein bestehendes Harbor-Projekt (oder Rechte zum Erstellen eines Projekts) -- Lokal installierte Werkzeuge: +- Zugriff auf die Konsole und den Managed Kubernetes-Dienst +- Ein vorhandenes Harbor-Projekt (oder Berechtigungen zum Erstellen eines neuen) +- Lokal installierte Tools: - Docker oder Podman - kubectl (auf Ihrem Cluster konfiguriert) - Helm v3.8+ (OCI-Unterstützung) - Optional: `cosign` für Image-Signaturen -- Ausgehender Netzwerkzugang zu `` über HTTPS (443) +- Ausgehender Netzwerkzugriff auf `` über HTTPS (443) - Keine zusätzlichen Zertifikate erforderlich: Das TLS-Zertifikat von Harbor ist öffentlich und vertrauenswürdig -## Grundlegende Konzepte +## Wesentliche Konzepte -- Projekt: Logischer Bereich (öffentlich oder privat), der Repositories enthält. +- Projekt: logischer Bereich (öffentlich oder privat), der Repositories enthält. - Repository: Sammlung von Tags für ein bestimmtes Image (`/app-web:1.0.0`). -- Robot-Konten: Technische Identitäten mit eingeschränkten Rechten, für CI/CD bestimmt. -- Schwachstellen-Scans: Automatische Analyse (z.B.: Trivy) beim Upload und auf Anfrage. -- Richtlinien: Tag-Unveränderlichkeit, Aufbewahrung, Sicherheitsregeln. -- OCI-Artefakte: Images, Helm Charts (OCI), SBOM, Signaturen. +- Robot-Konten: technische Identitäten mit eingeschränkten Berechtigungen, die für CI/CD vorgesehen sind. +- Schwachstellen-Scans: automatische Analyse (z. B. Trivy) beim Upload und auf Abruf. +- Richtlinien: Tag-Unveränderlichkeit, Aufbewahrungsregeln, Sicherheitsrichtlinien. +- OCI-Artefakte: Images, Helm-Charts (OCI), SBOM, Signaturen. -## Verbindung zur Registry (Docker / Podman) +## Anmeldung bei der Registry (Docker / Podman) -Bevorzugen Sie für CI/CD-Operationen ein **Robot-Konto**, das dem Projekt zugeordnet ist. +Verwenden Sie für CI/CD-Operationen vorzugsweise ein **Robot-Konto**, das dem Projekt zugeordnet ist. ```bash # Docker @@ -48,57 +48,59 @@ docker login podman login ``` -- Benutzer: `` (z.B.: `robot$meinprojekt+pusher`) +- Benutzername: `` (z. B. `robot$monprojet+pusher`) - Passwort: `` -:::tip[Zertifikate] -Die von Cloud Temple verwaltete Harbor-Instanz verwendet ein öffentlich vertrauenswürdiges Zertifikat. In der Regel ist keine zusätzliche CA-Konfiguration in Docker oder Podman erforderlich. +:::tip[Zertifikate +] +Die von Cloud Temple verwaltete Harbor-Instanz verfügt über ein anerkanntes öffentliches Zertifikat. In der Regel ist keine zusätzliche CA-Konfiguration in Docker oder Podman erforderlich. ::: -## Ein Projekt erstellen +## Projekt erstellen Über die Harbor-UI: -- Projects > New Project -- Name: ``, Sichtbarkeit: Private (empfohlen) -- Optionen: Tag-Unveränderlichkeit aktivieren, Auto-Scan on Push usw. +- Projekte > Neues Projekt +- Name: ``, Sichtbarkeit: Private (recommandé) +- Optionen: Tag-Immutabilität aktivieren, Auto-Scan bei Push, usw. -:::info[Bewährte Methoden] +:::info[Bonnes pratiques +] -- Ein Projekt pro Anwendung oder pro Funktionsbereich. +- Ein Projekt pro Anwendung oder pro Geschäftsbereich. - Rollen einschränken (maintainer, developer, guest). - Auto-Scan und Aufbewahrungsrichtlinien aktivieren. ::: -## Ein Image pushen +## Image pushen Beispiel mit Docker: ```bash -# Lokal bauen +# Construire localement docker build -t app-web:1.0.0 . -# Tag zu Harbor +# Tag vers Harbor docker tag app-web:1.0.0 //app-web:1.0.0 -# Pushen +# Pousser docker push //app-web:1.0.0 ``` Empfohlene Organisation: -- `/:` (z.B.: `payments/api:2.3.4`) -- Tag-Unveränderlichkeit, um Überschreibungen zu verhindern -- Semantische Tags: `1.2.3`, `1.2`, `latest` (verwenden Sie `latest` mit Bedacht) +- `/:` (z. B. `payments/api:2.3.4`) +- Unveränderlichkeit der Tags, um Überschreibungen zu vermeiden +- Semantische Tags: `1.2.3`, `1.2`, `latest` (`latest` nur mit Vorsicht verwenden) -## Ein Image pullen +## Image herunterladen ```bash docker pull //app-web:1.0.0 ``` -Überprüfen Sie die Scan-Ergebnisse und die Signatur (falls aktiviert), bevor Sie in die Produktion übergehen. +Prüfen Sie die Scan-Ergebnisse und die Signatur (falls aktiviert), bevor Sie in die Produktionsumgebung übernehmen. ## Images in Kubernetes verwenden @@ -113,7 +115,7 @@ kubectl create secret docker-registry harbor-pull-secret \ ``` :::tip -Der Parameter --docker-email ist in neueren Versionen von kubectl nicht mehr erforderlich (und kann weggelassen werden). +Der Parameter --docker-email ist in neueren kubectl-Versionen nicht mehr erforderlich (und kann ignoriert werden). ::: ### 2) Das Secret in Ihren Workloads referenzieren @@ -157,9 +159,9 @@ spec: - containerPort: 8080 ``` -### 3) Den Pull vom Cluster aus testen (optional) +### 3) Pull vom Cluster testen (optional) -Überprüfen Sie schnell, ob der Knoten Ihr Image mit dem Secret pullen kann: +Überprüfen Sie kurz, ob der Knoten Ihr Image mit dem Secret ziehen kann: ```bash kubectl run pull-check --rm -it --image=//app-web:1.0.0 \ @@ -167,40 +169,41 @@ kubectl run pull-check --rm -it --image=//app-web:1.0.0 \ -n --command -- sh -c 'echo OK' ``` -Für eine Produktions-Promotion empfiehlt sich die Verwendung eines Digests: +Für die Promotion in die Produktion bevorzugen Sie die Verwendung eines Digests: ```yaml image: //app-web@sha256: ``` -## Robot-Konten und Berechtigungen +## Roboter-Konten und Berechtigungen -- Projects > `` > Robot Accounts > New Robot -- Scopes: auf die notwendigen Aktionen beschränken (`pull` für Runtime, `push` für CI) -- Ablauf: Dauer und Rotationsprozess festlegen -- Token als Secret speichern (Kubernetes/CI) +- Projekte > `` > Roboter-Konten > Neuer Roboter +- Scopes: auf die erforderlichen Aktionen beschränken (`pull` für Runtime, `push` für CI) +- Ablaufdatum: eine Dauer und einen Rotationsprozess festlegen +- Token geheim speichern (Kubernetes/CI) -:::caution[Prinzip der geringsten Rechte] -Verwenden Sie keine persönlichen Konten für Ihre Pipelines. Bevorzugen Sie einen Robot pro Projekt oder sogar pro Umgebung. +:::caution[Prinzip der geringsten Rechte +] +Verwenden Sie keine persönlichen Konten für Ihre Pipelines. Bevorzugen Sie einen Roboter pro Projekt, ggf. sogar pro Umgebung. ::: ## Schwachstellen-Scans -- „Scan on push" auf Projektebene aktivieren -- Auf Anfrage über die UI oder API auslösen -- Richtlinien festlegen: Pull blockieren, wenn Schweregrad >= `High` (je nach Governance) +- „Scan on Push“ auf Projektebene aktivieren +- Bei Bedarf über die UI oder API auslösen +- Richtlinien konfigurieren: Pull blockieren, wenn Schweregrad >= `High` (gemäß Governance) -Sie können Berichte (JSON) exportieren oder die CVEs und betroffenen Schichten anzeigen. +Sie können die Berichte (JSON) exportieren oder die CVEs und betroffenen Schichten anzeigen. ## Aufbewahrung und Unveränderlichkeit -- Aufbewahrung: z.B. die letzten `N` Tags behalten, die einem Muster entsprechen (z.B.: `release-*`) -- Unveränderlichkeit: Überschreiben bestehender Tags verhindern -- Garbage Collection: vom Harbor-Administrator geplant (entfernt verwaiste Blobs) +- Aufbewahrung: z. B. die letzten `N` Tags speichern, die einem Muster entsprechen (z. B. `release-*`) +- Unveränderlichkeit: das Überschreiben vorhandener Tags verhindern +- Garbage Collection: von der Harbor-Administration geplant (löscht verwaiste Blobs) -Diese Mechanismen reduzieren die Speicherkosten und stärken die Rückverfolgbarkeit. +Diese Mechanismen senken die Speicherkosten und erhöhen die Nachverfolgbarkeit. -## Helm Charts (OCI) +## Helm-Charts (OCI) Helm v3.8+ unterstützt OCI nativ. @@ -210,13 +213,13 @@ helm registry login \ --username '' \ --password '' -# Chart verpacken +# Chart packen helm package charts/myapp # Chart pushen helm push myapp-0.1.0.tgz oci:////charts -# Pull / Install +# Pull / Installation helm pull oci:////charts/myapp --version 0.1.0 helm install myapp oci:////charts/myapp --version 0.1.0 -n ``` @@ -226,18 +229,18 @@ helm install myapp oci:////charts/myapp --version 0.1.0 -n < Mit `cosign`: ```bash -# Anmeldung (falls nötig, um den öffentlichen Schlüssel in Harbor abzurufen) +# Anmeldung (falls erforderlich, um den öffentlichen Schlüssel in Harbor abzurufen) cosign login -# Ein Image signieren (lokaler Schlüssel oder KMS) +# Image signieren (lokaler Schlüssel oder KMS) cosign sign //app-web:1.0.0 -# Die Signatur überprüfen +# Signatur überprüfen cosign verify //app-web:1.0.0 ``` :::note -Bei älteren Versionen von cosign kann es notwendig sein, COSIGN_EXPERIMENTAL=1 zu exportieren. +Bei älteren Versionen von cosign kann es erforderlich sein, COSIGN_EXPERIMENTAL=1 zu exportieren. ::: Harbor kann Attestierungen (Signaturen, SBOM) anzeigen und Signaturrichtlinien durchsetzen. @@ -296,22 +299,21 @@ jobs: ## Fehlerbehebung - `denied: requested access to the resource is denied` - - Rechte des Robot-Kontos für das Projekt und/oder den Repository-Namen überprüfen + - Berechtigungen des Robot-Accounts im Projekt und/oder des Repo-Namens überprüfen - `name unknown` / `manifest unknown` - - Nicht vorhandenes Projekt, falsch geschriebenes Repository, nicht vorhandener Tag + - Projekt nicht vorhanden, Repo falsch geschrieben, Tag nicht vorhanden - `x509: certificate signed by unknown authority` - - Zertifikatsspeicher des Runners aktualisieren (ca-certificates), das Fehlen eines TLS-abfangenden Proxys prüfen; falls nötig die CA des Proxys hinzufügen und/oder die Systemuhr synchronisieren + - Zertifikatsspeicher des Runners aktualisieren (ca-certificates), auf das Fehlen eines TLS-Intercepting-Proxy prüfen; bei Bedarf die CA des Proxies hinzufügen und/oder die Systemuhr synchronisieren - 401/403 beim Pull in Kubernetes - - `imagePullSecrets`-Secret fehlt oder Anmeldedaten sind abgelaufen + - Secret `imagePullSecrets` fehlt oder Zugangsdaten sind abgelaufen - `413 Request Entity Too Large` - - Image-Größe zu groß für die Ingress/Registry-Konfiguration; Image optimieren oder Konfiguration anpassen (über Cloud Temple-Support) - -## Bewährte Methoden - -- Standardmäßig private Projekte, Trennung von dev/preprod/prod -- Dedizierte Robot-Konten, regelmäßige Token-Rotation -- Tag-Unveränderlichkeit und Promotion per Digest -- Scan-Richtlinie: Schweregrad-Schwellenwert und dokumentierte Behebung -- Strenge Aufbewahrung, geplante Löschung veralteter Artefakte -- Protokollierung/Auditing: Zugriffs-/Aktivitätsprotokolle exportieren und aufbewahren -- SBOM- und Signatur-Integration für die Software-Lieferkette + - Image-Größe zu groß im Vergleich zur Ingress/Registry-Konfiguration; Image optimieren oder Konfiguration anpassen (via support Cloud Temple) + +## Best Practices +- Projekte standardmäßig privat, Trennung von Dev/Preprod/Prod +- Dedizierte Roboterkonten, regelmäßige Token-Rotation +- Unveränderlichkeit von Tags, Promotion per Digest +- Scan-Richtlinie: Schweregrad-Schwellenwert und dokumentierte Remediation +- Strikte Aufbewahrungsrichtlinie, geplante Löschung veralteter Artefakte +- Protokollierung/Audit: Export und Aufbewahrung von Zugriffs-/Aktivitäts-Logs +- SBOM-Integration und Signaturen für die Lieferkette \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingkasten.md b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingkasten.md index ec5dcfe0..be0ae25f 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingkasten.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingkasten.md @@ -8,56 +8,59 @@ import k10infrabackups from '@site/docs/managed_kubernetes/tutorials/images/k10i ## Einführung -Veeam Kasten K10 ist eine Backup- und Wiederherstellungslösung, die speziell für Kubernetes-Umgebungen entwickelt wurde. Im Cloud Temple Managed Kubernetes-Dienst ist Kasten integriert, um Ihnen den Schutz Ihrer Anwendungen, die Wiederherstellung von Daten bei Bedarf und die Sicherung der Geschäftskontinuität zu ermöglichen. +Veeam Kasten K10 ist eine Backup- und Wiederherstellungslösung, die speziell für Kubernetes-Umgebungen entwickelt wurde. Im Managed Kubernetes-Produkt von Cloud Temple ist Kasten integriert, um Ihnen den Schutz Ihrer Anwendungen, die Wiederherstellung von Daten bei Bedarf und die Sicherstellung Ihrer Geschäftskontinuität zu ermöglichen. Dieses Tutorial führt Sie durch die grundlegenden Schritte zum Sichern und Wiederherstellen einer Anwendung mit Kasten. ## Voraussetzungen -Stellen Sie vor dem Start sicher, dass Sie Folgendes haben: +Stellen Sie vor Beginn sicher, dass Sie über die folgenden Elemente verfügen: -- Einen aktiven Managed Kubernetes-Cluster. -- Den Bezeichner Ihres Clusters (z.B. `ctodev`). +- Ein aktiver Managed Kubernetes-Cluster. +- Die Cluster-ID (z. B. `ctodev`). - Eine in Ihrem Cluster bereitgestellte Anwendung, die Sie sichern möchten. ## 1. Zugriff auf das Kasten-Dashboard -Das Kasten-Dashboard ist über eine sichere URL erreichbar, die aus dem Bezeichner Ihres Clusters aufgebaut wird. +Das Kasten-Dashboard ist über eine sichere URL zugänglich, die auf der Basis Ihrer Cluster-ID erstellt wird. -1. **Erstellen Sie die Zugriffs-URL**: - Die URL basiert auf folgendem Schema: `https://k10.external-secured..mk.ms-cloud-temple.com/k10/` - Ersetzen Sie `` durch den Bezeichner Ihres Clusters. Wenn Ihr Bezeichner beispielsweise `ctodev` ist, lautet die URL: `https://k10.external-secured.ctodev.mk.ms-cloud-temple.com/k10/`. +1. **Erstellen Sie die Zugriffs-URL** : + Die URL basiert auf dem folgenden Muster: `https://k10.external-secured..mk.ms-cloud-temple.com/k10/` + Ersetzen Sie `` durch die ID Ihres Clusters. Wenn Ihre ID beispielsweise `ctodev` lautet, lautet die URL: `https://k10.external-secured.ctodev.mk.ms-cloud-temple.com/k10/`. -2. **Navigieren Sie zur URL** in Ihrem Browser. +2. **Rufen Sie die URL** in Ihrem Browser auf. - :::info Sicherheitshinweis - Der Zugriff auf diese URL ist auf die öffentlichen IP-Adressen beschränkt, die Sie angegeben haben. Wenn Sie keine Verbindung herstellen können, stellen Sie sicher, dass Ihre IP-Adresse autorisiert ist, indem Sie den Cloud Temple-Support kontaktieren. + :::info Hinweis zur Sicherheit + Der Zugriff auf diese URL ist auf die von Ihnen angegebenen öffentlichen IP-Adressen beschränkt. Falls Sie sich nicht anmelden können, stellen Sie sicher, dass Ihre IP-Adresse freigegeben ist, indem Sie den Cloud Temple Support kontaktieren. ::: -:::tip[Integrierter Schnellstart-Leitfaden] -Die Kasten-Konsole enthält einen interaktiven Schnellstart-Leitfaden auf ihrer Startseite. Folgen Sie ihm gerne für eine erste praktische Einführung direkt über die Oberfläche. +:::tip[Integrierter Schnellstart-Leitfaden +] +Die Kasten-Konsole enthält einen interaktiven Schnellstart-Leitfaden auf ihrer Startseite. Nutzen Sie diesen gerne für den ersten Einstieg direkt über die Oberfläche. ::: -## 2. Backup-Speicher verstehen +## 2. Sicherungsspeicher verstehen -Standardmäßig ist Kasten vorkonfiguriert, um den Objektspeicherdienst (S3) von Cloud Temple zu nutzen, um Ihre Backups sicher und dauerhaft zu speichern. +Standardmäßig ist Kasten so vorkonfiguriert, dass der Objektspeicherdienst (S3) von Cloud Temple zur sicheren und dauerhaften Speicherung Ihrer Sicherungen verwendet wird. -Sie müssen nichts konfigurieren. Der Speicherort ist bereits im Kasten-Dashboard unter **Settings > Locations** definiert. Diese Konfiguration stellt sicher, dass Ihre Daten auf souveräner Infrastruktur gespeichert werden. +Sie müssen keine Konfiguration vornehmen. Der Speicherort ist bereits im Kasten-Dashboard unter **Settings > Locations** festgelegt. Diese Konfiguration stellt sicher, dass Ihre Daten auf einer souveränen Infrastruktur gespeichert werden. -:::info[Kostenmodell] -Der Veeam Kasten-Dienst ist im Managed Kubernetes-Angebot enthalten. Der Backup-Speicher auf unserem souveränen S3 wird nutzungsbasiert abgerechnet. Weitere Details finden Sie in unserer Preisliste. +:::info[Kostenmodell +] +Der Veeam Kasten-Dienst ist im Produkt Managed Kubernetes enthalten. Die Speicherung der Sicherungen auf unserem souveränen S3 wird nutzungsbasiert abgerechnet. Weitere Details finden Sie in unserer Preisliste. ::: -## 3. Eine Backup-Richtlinie erstellen +## 3. Eine Sicherungsrichtlinie erstellen -Eine Backup-Richtlinie (`Policy`) ist eine Reihe von Regeln, die definieren, wann und wie Ihre Anwendungen gesichert werden sollen. +Eine Sicherungsrichtlinie (`Policy`) ist eine Reihe von Regeln, die festlegen, wann und wie Ihre Anwendungen gesichert werden. -:::warning[Vorhandene Backup-Richtlinie] -Eine Backup-Richtlinie namens `infra-backups` ist bereits in Ihrer Kasten-Instanz konfiguriert. Diese Richtlinie stellt die Sicherung der mit dem Cluster gelieferten wesentlichen Komponenten sicher. +:::warning[Bestehende Sicherungsrichtlinie +] +Eine Sicherungsrichtlinie mit dem Namen `infra-backups` ist in Ihrer Kasten-Instanz bereits konfiguriert. Diese Richtlinie sichert die mit dem Cluster gelieferten Kernkomponenten. @@ -66,49 +69,49 @@ Eine Backup-Richtlinie namens `infra-backups` ist bereits in Ihrer Kasten-Instan Sie müssen Ihre eigenen Richtlinien erstellen, um die von Ihnen bereitgestellten Anwendungen zu sichern. ::: -1. Navigieren Sie im Kasten-Dashboard zum Abschnitt **Policies** und klicken Sie auf **Create New Policy**. +1. Navigieren Sie im Kasten-Dashboard zum Bereich **Policies** und klicken Sie auf **Create New Policy**. -2. **Benennen Sie Ihre Richtlinie**: Geben Sie einen beschreibenden Namen an, z.B. `backup-my-app-daily`. +2. **Benennen Sie Ihre Richtlinie**: Vergeben Sie einen beschreibenden Namen, z. B. `backup-my-app-daily`. -3. **Definieren Sie die Häufigkeit (Action)**: - - **Action**: `Snapshot`. - - **Frequency**: Wählen Sie die für Sie passende Häufigkeit (z.B. `Daily` um `02:00`). +3. **Legen Sie die Häufigkeit (Action) fest** : + - **Action**: `Snapshot` (instantané). + - **Frequency**: Wählen Sie die gewünschte Häufigkeit (par exemple, `Daily` à `02:00`). -4. **Wählen Sie die zu sichernden Ressourcen aus**: - - **Select resources by**: Sie können Anwendungen nach Name (`Application Name`), nach Namespace (`Namespace`) oder nach Labels auswählen. - - Um alle Anwendungen eines Namespaces zu sichern, wählen Sie `Namespace` und wählen Sie den gewünschten Namespace aus. +4. **Wählen Sie die zu sichernden Ressourcen aus** : + - **Select resources by**: Sie können Anwendungen nach Name (`Application Name`), Namespace (`Namespace`) oder Labels auswählen. + - Um alle Anwendungen eines Namespaces zu sichern, wählen Sie `Namespace` aus und wählen Sie den gewünschten Namespace. 5. **Klicken Sie auf `Create Policy`**, um zu speichern. -Die Richtlinie wird automatisch in der definierten Häufigkeit ausgeführt. Sie können auch eine manuelle Ausführung starten, indem Sie auf die „Play"-Schaltfläche (▶️) neben der Richtlinie klicken. +Die Richtlinie wird automatisch im festgelegten Intervall ausgeführt. Sie können auch eine manuelle Ausführung starten, indem Sie auf die Schaltfläche "Play" (▶️) neben der Richtlinie klicken. ## 4. Eine Anwendung wiederherstellen -Kasten erleichtert die Wiederherstellung einer Anwendung auf ihren vorherigen Zustand von einem Wiederherstellungspunkt aus. +Kasten erleichtert die Wiederherstellung einer Anwendung auf ihren vorherigen Zustand aus einem Wiederherstellungspunkt. -1. Gehen Sie im Dashboard zum Abschnitt **Applications**. Sie sehen dort die Liste Ihrer Anwendungen und ihren Compliance-Status bezüglich der Backup-Richtlinien. +1. Gehen Sie im Dashboard in den Bereich **Applications**. Dort sehen Sie die Liste Ihrer Anwendungen und deren Konformitätsstatus im Hinblick auf die Sicherungsrichtlinien. -2. **Wählen Sie die Anwendung aus**, die Sie wiederherstellen möchten. +2. **Wählen Sie die Anwendung** aus, die Sie wiederherstellen möchten. -3. **Wählen Sie einen Wiederherstellungspunkt**: - Die Anwendungsseite zeigt eine Liste der verfügbaren Wiederherstellungspunkte an. Wählen Sie den gewünschten aus und klicken Sie auf **Restore**. +3. **Wählen Sie einen Wiederherstellungspunkt** : + Die Anwendungsseite zeigt eine Liste der verfügbaren Wiederherstellungspunkte. Wählen Sie den gewünschten Punkt aus und klicken Sie auf **Restore**. -4. **Konfigurieren Sie die Wiederherstellung**: - - Sie können wählen, ob Sie in einem neuen Namespace wiederherstellen oder die vorhandene Anwendung ersetzen möchten. In diesem Tutorial ersetzen wir die vorhandene Anwendung. +4. **Konfigurieren Sie die Wiederherstellung** : + - Sie können wählen, ob Sie in einem neuen Namespace wiederherstellen oder die vorhandene Anwendung überschreiben möchten. Für dieses Tutorial werden wir die vorhandene Anwendung überschreiben. - Klicken Sie auf **Restore**, um den Prozess zu starten. -Kasten stellt nun die Anwendung in dem im Snapshot erfassten Zustand wieder her. Sie können den Fortschritt im Dashboard verfolgen. +Kasten stellt die Anwendung nun auf den im Snapshot erfassten Zustand wieder. Den Fortschritt können Sie im Dashboard verfolgen. ## 5. Backup-Sicherheit -Der Schutz Ihrer Backup-Daten hat höchste Priorität. Die Integration von Kasten im Managed Kubernetes-Angebot erfüllt die höchsten Sicherheitsstandards. +Der Schutz Ihrer Backup-Daten ist eine Priorität. Die Integration von Kasten in das Managed Kubernetes-Produkt entspricht den höchsten Sicherheitsstandards. -- **Verschlüsselung**: Gemäß den SecNumCloud-Anforderungen werden alle Ihre Backups verschlüsselt. Die Daten werden während der Übertragung zum S3-Speicher mit dem **TLS 1.3**-Protokoll und im Ruhezustand in den Speicher-Buckets mit dem **AES-256**-Algorithmus verschlüsselt. +- **Verschlüsselung** : Gemäß den SecNumCloud-Anforderungen werden alle Ihre Backups verschlüsselt. Die Daten werden während der Übertragung zum S3-Speicher mit dem Protokoll **TLS 1.3** und im Ruhezustand in den Storage-Buckets mit dem Algorithmus **AES-256** verschlüsselt. -- **Berechtigungsverwaltung**: Der Zugriff auf die Kasten-Oberfläche und ihre Funktionen wird durch ein auf Kubernetes RBAC basierendes Berechtigungssystem gesteuert. Nur autorisierte Benutzer können Backup- und Wiederherstellungsrichtlinien erstellen, ändern oder ausführen, was eine strikte Governance Ihrer Backup-Operationen gewährleistet. +- **Berechtigungsverwaltung** : Der Zugriff auf die Kasten-Oberfläche und deren Funktionen wird durch ein Berechtigungssystem gesteuert, das auf dem Kubernetes-RBAC basiert. Nur autorisierte Benutzer können Backup- und Wiederherstellungsrichtlinien erstellen, ändern oder ausführen, wodurch eine strenge Governance Ihrer Backup-Vorgänge gewährleistet ist. ## Fazit -Sie haben gelernt, wie Sie Veeam Kasten für grundlegende Backup- und Wiederherstellungsvorgänge in Ihrem Managed Kubernetes-Cluster verwenden. Kasten bietet viele erweiterte Funktionen, wie z.B. die Migration von Anwendungen zwischen Clustern und granulare Aufbewahrungsrichtlinien, die Sie erkunden können, um Ihre Datenschutzstrategie zu stärken. +Sie haben gelernt, wie Sie Veeam Kasten für grundlegende Backup- und Wiederherstellungsvorgänge in Ihrem Managed Kubernetes-Cluster verwenden. Kasten bietet zahlreiche erweiterte Funktionen, wie z. B. die Migration von Anwendungen zwischen Clustern und granulare Aufbewahrungsrichtlinien, die Sie erkunden können, um Ihre Datensicherungsstrategie zu stärken. -Weitere Informationen finden Sie in der [offiziellen Kasten K10-Dokumentation](https://docs.kasten.io/latest/). +Weitere Informationen finden Sie in der [offiziellen Dokumentation von Kasten K10](https://docs.kasten.io/latest/). \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingopencost.md b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingopencost.md index d19a9407..d6d81d0e 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingopencost.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingopencost.md @@ -9,62 +9,62 @@ import opencostmcp3 from '@site/docs/managed_kubernetes/tutorials/images/opencos ## Ziele -Dieses Tutorial stellt Ihnen **OpenCost** vor, das Kosten-Monitoring- und -Optimierungswerkzeug, das in Ihren **Managed Kubernetes**-Cluster integriert ist. Am Ende dieses Leitfadens werden Sie in der Lage sein: +Dieses Tutorial stellt Ihnen **OpenCost** vor, das Monitoring- und Kostenoptimierungstool, das in Ihren **Managed Kubernetes**-Cluster integriert ist. Am Ende dieses Handbuchs sind Sie in der Lage: -- Auf die OpenCost-Oberfläche **zuzugreifen**. -- Die Struktur der Oberfläche und die verfügbaren Ansichten zu **verstehen**. -- Die Kostenverteilung Ihrer Anwendungen und Infrastruktur zu **analysieren**. +- **Zugreifen** auf die OpenCost-Oberfläche. +- **Verstehen** der Struktur der Oberfläche und der verfügbaren Ansichten. +- **Analysieren** der Kostenverteilung Ihrer Anwendungen und Ihrer Infrastruktur. ## Was ist OpenCost? -OpenCost ist eine Open-Source-Lösung und ein CNCF-Standard (Cloud Native Computing Foundation), der Echtzeit-Einblick in die Kosten Ihrer Kubernetes-Umgebungen bietet. Es hilft Ihnen, genau zu verstehen, was Ressourcen in Ihrem Cluster verbraucht und wie sich das in Kosten niederschlägt. +OpenCost ist eine Open-Source-Lösung, die als Standard der CNCF (Cloud Native Computing Foundation) gilt und Echtzeit-Einblicke in die Kosten Ihrer Kubernetes-Umgebungen bietet. Es hilft Ihnen genau zu verstehen, welche Ressourcen in Ihrem Cluster verbraucht werden und wie sich dies in Kosten niederschlägt. -Im Managed Kubernetes-Angebot ist OpenCost vorinstalliert und konfiguriert, um Ihnen einen klaren Überblick über Ihre Ausgaben zu geben. Es ist direkt mit den tatsächlichen Kosten der Cloud Temple-Infrastruktur parametriert. +Im Managed-Kubernetes-Produkt ist OpenCost vorinstalliert und konfiguriert, um Ihnen einen klaren Überblick über Ihre Ausgaben zu verschaffen. Es ist direkt mit den tatsächlichen Kosten der Cloud-Temple-Infrastruktur verknüpft. -## Zugriff auf die OpenCost-Oberfläche +## Zugriff auf die OpenCost-Benutzeroberfläche -Die OpenCost-Oberfläche ist über eine sichere, cluster-spezifische URL verfügbar. Um darauf zuzugreifen, verwenden Sie die folgende URL und ersetzen Sie `bezeichner` durch den Bezeichner Ihres Clusters (z.B. `ctodev`): +Die OpenCost-Benutzeroberfläche ist über eine sichere, cluster-spezifische URL verfügbar. Um darauf zuzugreifen, verwenden Sie die folgende URL, wobei Sie `identifiant` durch die Kennung Ihres Clusters (z. B. `ctodev`) ersetzen: -`https://opencost.external-secured.bezeichner.mk.ms-cloud-temple.com` +`https://opencost.external-secured.identifiant.mk.ms-cloud-temple.com` :::info -Der Zugriff auf diese URL ist auf die IP-Adressen beschränkt, die Sie dem Cloud Temple-Support mitgeteilt haben. Falls Sie keinen Zugriff haben, wenden Sie sich bitte an den Support, um die Firewall-Regeln zu überprüfen. +Der Zugriff auf diese URL ist auf die IP-Adressen beschränkt, die Sie beim Cloud-Temple-Support angegeben haben. Falls der Zugriff nicht möglich ist, wenden Sie sich bitte an den Support, um die Firewall-Regeln überprüfen zu lassen. ::: OpenCost UI -## Die Kostenverteilung erkunden (Allocations) +## Kostenverteilung (Allocations) erkunden -Die wichtigste und detaillierteste Ansicht von OpenCost ist das **Allocations**-Dashboard. Hier können Sie Ihren Ressourcenverbrauch in Echtzeit visualisieren. +Die Haupt- und detaillierteste Ansicht von OpenCost ist das Dashboard **Allocations**. Hier können Sie den Echtzeit-Ressourcenverbrauch visualisieren. -Diese Ansicht ermöglicht es Ihnen, Kosten nach nativen Kubernetes-Konzepten aufzuschlüsseln. Das Dropdown-Menü „Aggregate by" ist das Hauptwerkzeug für Ihre Analyse; es ermöglicht Ihnen, Kosten zu gruppieren nach: +Diese Ansicht ermöglicht es Ihnen, die Kosten nach nativen Kubernetes-Konzepten aufzuschlüsseln. Das Dropdown-Menü "Aggregate by" ist das Hauptwerkzeug für Ihre Analyse und ermöglicht es Ihnen, die Kosten zu gruppieren nach : -- **Namespace**: Für eine Ansicht nach Umgebung oder Team. -- **Deployment**, **StatefulSet** usw.: Um die Kosten einer bestimmten Anwendung zu analysieren. -- **Controller**: Für eine technischere Ansicht. +- **Namespace** : Für eine Ansicht pro Umgebung oder Team. +- **Deployment**, **StatefulSet** usw. : Zur Analyse der Kosten einer bestimmten Anwendung. +- **Controller** : Für eine technischere Ansicht. -### Aggregation nach Labels +### Label-basierte Aggregation -Für eine noch detailliertere Finanzanalyse kann OpenCost Kosten auf Basis von **Kubernetes-Labels** aggregieren. Im Menü gibt es keine direkte „Label"-Option, aber OpenCost nimmt Ihre Labels auf und ermöglicht benutzerdefinierte Aggregationen. Dafür ist eine konsistente Labeling-Strategie unerlässlich. Durch die Verwendung von Labels wie `team: backend` oder `product: api-gateway` können Sie z.B. Kosten analysieren, die Ihrer Organisation genau entsprechen. +Für eine noch feinere Finanzanalyse kann OpenCost die Kosten basierend auf den **Kubernetes-Labels** aggregieren. Es gibt keine direkte „Label“-Option im Menü, aber OpenCost verarbeitet Ihre Labels und ermöglicht die Erstellung benutzerdefinierter Aggregationen. Dafür ist eine konsistente Labeling-Strategie unerlässlich. Durch die Verwendung von Labels wie `team: backend` oder `product: api-gateway` können Sie die Kosten analysieren, die genau zu Ihrer Organisation passen. Für diese Art der Analyse müssen Sie die KI-Integration von OpenCost nutzen. -## Grafana-Dashboard +## Grafana Dashboard -Zur Visualisierung von OpenCost-Daten ist auch ein Grafana-Dashboard verfügbar. Dieses Dashboard bietet eine alternative und ergänzende Ansicht zur OpenCost-Oberfläche und bewahrt den vollständigen Verlauf der Kostenmetriken, sodass Sie Trends langfristig analysieren können. +Ein Grafana-Dashboard ist ebenfalls verfügbar, um die OpenCost-Daten zu visualisieren. Dieses Dashboard bietet eine alternative und ergänzende Ansicht zur OpenCost-Benutzeroberfläche und speichert den vollständigen Verlauf der Kostenmetriken, sodass Sie langfristige Trends analysieren können. -OpenCost Grafana Dashboard +OpenCost Grafana-Dashboard -## Erweiterte Nutzung: Integration mit KI (MCP-Server) +## Erweiterte Nutzung: Integration mit einer KI (MCP-Server) -Für fortgeschrittene Benutzer kann OpenCost dank des **MCP (Multi-purpose Co-processor) Servers**-Systems direkt vom Cline-Konversationsassistenten (oder anderen) abgefragt werden. Dies ermöglicht es Ihnen, Abfragen zu skripten und Kostendaten direkt in Ihren Konversationen zu erhalten. +Für fortgeschrittene Benutzer kann OpenCost direkt über den Cline-Chat-Assistenten (oder andere) dank des **MCP (Multi-purpose Co-processor)-Server-Systems** abgefragt werden. Dies ermöglicht es Ihnen, Abfragen zu skripten und Kostendaten direkt in Ihren Konversationen abzurufen. -### 1. Konfiguration des OpenCost MCP in Cline +### 1. Konfiguration des MCP OpenCost in Cline -Um Cline mit Ihrer OpenCost-Instanz zu verbinden, müssen Sie die folgende Konfiguration zu Ihrer Datei `cline_mcp_settings.json` hinzufügen. Diese Datei befindet sich normalerweise im Cline-Konfigurationsverzeichnis. +Um Cline mit Ihrer OpenCost-Instanz zu verbinden, müssen Sie die folgende Konfiguration zu Ihrer Datei `cline_mcp_settings.json` hinzufügen. Diese Datei befindet sich normalerweise im Konfigurationsverzeichnis von Cline. -Wir empfehlen, einen MCP-Server namens „opencost-xxxxx" zu erstellen, wobei xxxxx der Name Ihres verwalteten Kubernetes-Clusters ist. -Die MCP-Server-URL hat folgendes Format: `https://opencost-mcp.external-secured.bezeichner.mk.ms-cloud-temple.com` -Beispielsweise für den Cluster „bestie": +Wir empfehlen, einen MCP-Server "opencost-xxxxx" zu erstellen, wobei xxxxx der Name Ihres verwalteten Kubernetes-Clusters ist. +Die URL des MCP-Servers hat das Format `https://opencost-mcp.external-secured.identifiant.mk.ms-cloud-temple.com` +Beispielsweise für den Cluster "bestie": ```json { @@ -82,49 +82,50 @@ Beispielsweise für den Cluster „bestie": } ``` -Um den ``-Wert aus Ihren Anmeldedaten zu generieren, verwenden Sie einen der folgenden Befehle: +Um den Wert `` aus Ihren Anmeldeinformationen zu generieren, verwenden Sie einen der folgenden Befehle: **Für Linux/macOS:** ```bash -echo -n 'finopsadm:IHR_PASSWORT' | base64 +echo -n 'finopsadm:VOTRE_MOT_DE_PASSE' | base64 ``` **Für Windows (PowerShell):** ```powershell -$credentials = [System.Text.Encoding]::UTF8.GetBytes("finopsadm:IHR_PASSWORT") +$credentials = [System.Text.Encoding]::UTF8.GetBytes("finopsadm:VOTRE_MOT_DE_PASSE") [System.Convert]::ToBase64String($credentials) ``` -Sobald diese Datei gespeichert ist, lädt Cline beim Start automatisch den `opencost-xxxxx`-MCP. +Nachdem diese Datei gespeichert wurde, lädt Cline den MCP `opencost-xxxxx` automatisch beim Start. -### 2. OpenCost mit dem MCP abfragen +### 2. OpenCost mit MCP abfragen -:::tip[Voraussetzungen] -Um mit dem MCP in natürlicher Sprache zu interagieren, muss die zugrunde liegende KI Zugang zu Sprachmodellen (LLMs) haben, entweder lokal (LMStudio usw.) oder über eine Verbindung zu öffentlichen Diensten wie GPT-5 oder Gemini, oder durch die Nutzung unseres souveränen **[LLM-as-a-Service](pathname:///llmaas/llmaas)**-Angebots. +:::tip[Voraussetzungen +] +Um mit dem MCP in natürlicher Sprache zu interagieren, muss die zugrunde liegende KI Zugriff auf Sprachmodelle (LLMs) haben, entweder lokal (LMStudio, etc), über eine Verbindung zu öffentlichen Diensten wie GPT-5 oder Gemini oder unter Nutzung unseres souveränen Produkts **[LLM-as-a-Service](pathname:///llmaas/llmaas)**. ::: -Nach der Konfiguration können Sie LLM-Werkzeuge verwenden, um Abfragen in natürlicher Sprache an diesen MCP-Server zu stellen. +Nach der Konfiguration können Sie die LLM-Tools verwenden, um Abfragen in natürlicher Sprache an diesen MCP-Server zu stellen. #### Beispiel -„Verwende den MCP ‚opencost-bestie' und sag mir, welcher Prozentsatz der Cluster-Kosten keinen Ressourcen zugewiesen ist" -Sie erhalten folgendes: -KI opencost Antwort +"nutze den MCP "opencost-bestie" und sag mir, welcher Prozentsatz der Clusterkosten nicht an Ressourcen allokiert ist" +Sie erhalten Folgendes: +OpenCost-KI-Antwort #### Beispiel 2 -„Verwende den MCP ‚opencost-bestie' und liste mir die mit persistenten Volumes verbundenen Kosten für gestern auf" +"nutze den MCP "opencost-bestie", und liste mir die Kosten für die persistenten Volumes für den gestrigen Tag auf" -KI opencost Antwort 2 +KI-Antwort opencost 2 #### Beispiel 3 -„Verwende den MCP opencost-bestie und sag mir, welcher Prozentsatz der Cluster-Kosten der Anwendung mit dem Label ‚nginx' zugewiesen ist. (Filter in der Form filter: ‚label:app:frontend')" +"nutze den MCP opencost-bestie und sage mir, welchen Prozentsatz der Clusterkosten auf die Anwendung mit dem Label "nginx" . (Filter in der Form filter: "label:app:frontend" ) -KI opencost Antwort 3 +KI-Antwort opencost 3 ## Fazit -OpenCost stellt Ihnen leistungsstarke Werkzeuge für eine detaillierte Echtzeit-Analyse der Kosten Ihres Kubernetes-Clusters bereit. Durch die hauptsächliche Nutzung der **Allocations**-Ansicht in Kombination mit einer guten Labeling-Strategie erhalten Sie einen klaren Überblick über Ihre Ausgaben, der sowohl mit Ihren technischen Deployments als auch mit Ihrer internen Organisation übereinstimmt. Der Einsatz von LLMs und des OpenCost-MCP-Servers ermöglicht eine noch tiefgreifendere Nutzung der Daten. +OpenCost bietet Ihnen leistungsstarke Werkzeuge für eine feingranulare und Echtzeit-Analyse der Kosten Ihres Kubernetes-Clusters. Durch die primäre Nutzung der Ansicht **Allokationen** in Kombination mit einer durchdachten Labeling-Strategie erhalten Sie einen klaren Überblick über Ihre Ausgaben, der sowohl Ihre technischen Bereitstellungen als auch Ihre interne Organisation widerspiegelt. Der Einsatz von LLMs und des OpenCost MCP-Servers ermöglicht eine vertiefte Datenauswertung. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_mariadb/concepts.md b/i18n/de/docusaurus-plugin-content-docs/current/managed_mariadb/concepts.md index e1f25d2e..ba010bb1 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/managed_mariadb/concepts.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/managed_mariadb/concepts.md @@ -3,115 +3,113 @@ title: Konzepte sidebar_position: 1 --- -# Schlüsselkonzepte von Managed MariaDB +# Schlüsselkonzepte von MariaDB Managed -Dieser Abschnitt stellt die grundlegenden Konzepte unseres **Managed MariaDB**-Dienstes vor. Das Verständnis dieser Prinzipien hilft Ihnen, das Beste aus Ihrer verwalteten Datenbank herauszuholen und deren Fähigkeiten mit Ihren Anwendungsanforderungen und Sicherheitsanforderungen in Einklang zu bringen. +Dieser Abschnitt stellt die grundlegenden Konzepte unseres **MariaDB Managed**-Diensts vor. Das Verständnis dieser Prinzipien hilft Ihnen, das Beste aus Ihrer verwalteten Datenbank herauszuholen, indem deren Funktionen optimal an Ihre Anwendungsanforderungen und Sicherheitsanforderungen angepasst werden. ## Souveränität und SecNumCloud-Konformität -Im Kern unseres Angebots steht die **digitale Souveränität**. Der Managed MariaDB-Dienst wird vollständig auf der Cloud Temple-Infrastruktur gehostet, die von der ANSSI mit **SecNumCloud 3.2** qualifiziert ist. +Im Kern unseres Produkts steht die **digitale Souveränität**. Der Managed MariaDB-Dienst ist vollständig in der Cloud-Infrastruktur von Temple gehostet, die von der ANSSI als **SecNumCloud 3.2** qualifiziert wurde. -- **100% Hosting in Frankreich**: Ihre Daten verbleiben auf nationalem Territorium, geschützt vor extraterritorialen Gesetzen. -- **Native Konformität**: Die Lösung ist darauf ausgelegt, die strengsten regulatorischen Anforderungen zu erfüllen (DSGVO, HDS, LPM, NIS2, PCI-DSS). -- **Open Source und Reversibilität**: Durch den Einsatz offener Standards wie MariaDB Community Server und Galera garantieren wir die Abwesenheit technologischer Abhängigkeiten (*Vendor Lock-in*) und eine vollständige Portabilität Ihrer Daten. +- **100 % Hosting in Frankreich** : Ihre Daten verbleiben auf nationalem Boden und sind vor extraterritorialen Gesetzen geschützt. +- **Native Compliance** : Die Lösung wurde entwickelt, um den strengsten regulatorischen Anforderungen zu entsprechen (DSGVO, HDS, LPM, NIS2, PCI-DSS). +- **Open Source und Reversibilität** : Durch die Nutzung offener Standards wie MariaDB Community Server und Galera gewährleisten wir eine vollständige Unabhängigkeit von Anbietern (*Vendor-Lock-in*) und eine totale Portierbarkeit Ihrer Daten. ## Hochverfügbarkeitsarchitektur: Galera Cluster + MaxScale -Für verteilte Umgebungen basiert unser Dienst auf **Galera Cluster**, um Hochverfügbarkeit ohne Datenverlust zu bieten. +Für verteilte Umgebungen setzt unser Produkt auf **Galera Cluster**, um eine hochverfügbare Lösung ohne Datenverlust zu bieten. -- **Synchrone Replikation**: Im Gegensatz zur traditionellen asynchronen Replikation wird jede Transaktion auf allen Knoten des Clusters validiert, *bevor* sie bestätigt wird. Dies garantiert ein **Recovery Point Objective (RPO) von null**: Keine validierte Transaktion kann bei einem Ausfall verloren gehen. -- **Multi-AZ-Verteilung**: Der Cluster ist auf drei verschiedene Verfügbarkeitszonen (AZ) verteilt. Der Ausfall eines gesamten Rechenzentrums führt zu keiner Dienstunterbrechung oder Datenverlust. -- **Automatisches Failover**: Bei einem Vorfall auf einem Knoten wird der Datenverkehr automatisch auf die gesunden Knoten umgeleitet, was ein **minimales Recovery Time Objective (RTO)** gewährleistet. -- **MaxScale Proxy**: MaxScale ist ein fortschrittlicher Proxy, Router und Load Balancer für MariaDB. Er verwaltet automatisches Failover bei der Replikation, verteilt Anfragen (Schreibvorgänge zum Primary, Lesevorgänge zu Replicas über ReadWriteSplit) und bietet Filter für Cache, Audit (QLAfilter) oder Sicherheit (RegexFilter). +- **Synchrone Replikation** : Im Gegensatz zur herkömmlichen asynchronen Replikation wird jede Transaktion auf allen Cluster-Knoten *vor* der Bestätigung validiert. Dies gewährleistet ein **Ziel für den Wiederherstellungspunkt (RPO) von null** : keine bestätigten Daten können im Fehlerfall verloren gehen. +- **Multi-AZ-Verteilung** : Der Cluster ist auf drei separate Verfügbarkeitszonen (AZ) verteilt. Der Ausfall eines gesamten Rechenzentrums führt weder zu Dienstunterbrechungen noch zu Datenverlust. +- **Automatisches Failover** : Im Falle eines Knotenausfalls wird der Datenverkehr automatisch auf die intakten Knoten umgeleitet, wodurch ein **minimales Ziel für die Wiederherstellungszeit (RTO)** sichergestellt wird. +- **MaxScale-Proxy** : MaxScale ist ein fortschrittlicher Proxy, Router und Load Balancer für MariaDB. Er verwaltet das automatische Failover bei der Replikation, verteilt die Anfragen (writes vers primary, reads vers replicas via ReadWriteSplit) und bietet Filter für Cache, Audit (QLAfilter) oder Sicherheit (RegexFilter). -## Deployment-Modelle +## Bereitstellungsmodelle -Wir bieten zwei Modelle an, um sich der Kritikalität Ihrer Workloads anzupassen. +Wir bieten zwei Modelle an, die sich an die Kritikalität Ihrer Workloads anpassen. ### 1. StandAlone Dieses Modell stellt eine einzelne Instanz der MariaDB-Engine bereit. -- **Anwendungsfall**: Dieses Deployment-Modell eignet sich perfekt für einfache Anwendungen wie CMS, die nur einen einzigen Endpoint für die Datenbankverbindung verwenden. -- **Resilienz**: Obwohl es sich um eine einzelne Instanz handelt, ist der zugrundeliegende Speicher auf 3 AZ repliziert, was einen automatischen Neustart in einer anderen AZ bei einem Hardwarefehler ermöglicht. -- **SLA**: 99,9 % (außerhalb der Wartungsfenster). +- **Anwendungsfall** : Dieses Bereitstellungsmodell eignet sich hervorragend für einfache Anwendungen wie CMS, die nur einen einzigen Endpoint zur Verbindung mit Datenbanken nutzen. +- **Resilienz** : Obwohl es sich um eine einzelne Instanz handelt, wird der zugrunde liegende Speicher in 3 AZ repliziert, was einen automatischen Neustart auf einer anderen AZ im Falle eines Hardwareausfalls ermöglicht. +- **SLA** : 99,9 % (außerhalb von Wartungsfenstern). ### 2. Distributed -Dieses Modell stellt einen **Galera Cluster aus 3 Instanzen** der MariaDB-Engine bereit, ergänzt durch einen **MaxScale**-Proxy. +Dieses Modell stellt einen **Galera-Cluster mit 3 Instanzen** der MariaDB-Engine bereit, ergänzt durch einen **MaxScale**-Proxy. -- **Anwendungsfall**: Dieses Deployment-Modell eignet sich perfekt für Anwendungen mit verteilten Zugriffen, wie Data- oder Business-Intelligence-Anwendungen, die von reinen Lesezugriffen ohne Auswirkungen auf die Datenaufnahme profitieren. -- **Komponenten**: - - **3 MariaDB-Knoten**: Ein primärer Lese-Schreib-Knoten (RW) und zwei sekundäre Nur-Lese-Knoten (RO). - - **MaxScale Proxy**: Ein intelligenter Router, der Anfragen verteilt. Er sendet Schreibvorgänge an den primären Knoten und verteilt Lesevorgänge auf alle Knoten (`ReadWriteSplit`), um die Leistung zu optimieren. -- **SLA**: 99,9 % (außerhalb der Wartungsfenster). +- **Anwendungsfall** : Dieses Bereitstellungsmodell eignet sich hervorragend für Anwendungen mit verteiltem Zugriff, wie Data- oder Business-Intelligence-Anwendungen, die von einem schreibgeschützten Zugriff profitieren, ohne die Datenaufnahme zu beeinträchtigen. +- **Komponenten** : + - **3 MariaDB-Knoten** : Ein primärer Knoten für Lese-/Schreibzugriff (RW) und zwei sekundäre Knoten für schreibgeschützten Zugriff (RO). + - **MaxScale-Proxy** : Ein intelligenter Router, der Anfragen verteilt. Er leitet Schreibvorgänge an den primären Knoten weiter und verteilt Lesevorgänge auf alle Knoten (`ReadWriteSplit`), wodurch die Leistung optimiert wird. +- **SLA** : 99,9 % (außerhalb von Wartungsfenstern). -> **Wichtiger Hinweis**: Es ist nicht möglich, das Deployment-Modell eines bestehenden Clusters zu ändern (z. B. von *StandAlone* zu *Distributed*). Dieser Vorgang erfordert die Erstellung eines neuen Clusters im gewünschten Modell durch eine Wiederherstellung. +> **Wichtiger Hinweis** : Es ist nicht möglich, das Bereitstellungsmodell eines bestehenden Clusters zu ändern (z. B. von *StandAlone* auf *Distributed* zu wechseln). Dieser Vorgang erfordert die Erstellung eines neuen Clusters im gewünschten Modell über eine Wiederherstellung. ## Sicherung und Wiederherstellung (PITR) Der Schutz Ihrer Daten wird durch eine doppelte Sicherungsstrategie gewährleistet. -1. **Physische Sicherung und Point-in-Time Recovery**: +1. **Physische Sicherung und Point-in-Time Recovery** : - Wir führen täglich vollständige physische Sicherungen durch (`mariabackup`) (ohne Dienstunterbrechung). - - Mit der **distributed**-Version werden Transaktionsprotokolle (*binary logs*) kontinuierlich archiviert. Diese Kombination ermöglicht eine PiTR-Wiederherstellung bis zum Zeitpunkt kurz vor einem Vorfall. + - Bei der **distributed** Version werden Transaktionsprotokolle (*binary logs*) kontinuierlich archiviert. Diese Kombination ermöglicht eine PiTR-Wiederherstellung bis kurz vor einem Vorfall. -2. **Logische Sicherung (`mysqldump`)**: - - Logische Exporte der Datenbanken werden ebenfalls durchgeführt. - - Sie bieten eine feine Granularität zum Wiederherstellen oder Exportieren einer einzelnen Datenbank. +2. **Logische Sicherung (`mysqldump`)** : + - Es werden auch logische Exporte der Datenbanken durchgeführt. + - Sie bieten eine feine Granularität für die Wiederherstellung oder den Export einer einzelnen Datenbank. -Alle Sicherungen werden im Ruhezustand verschlüsselt und in unserem Object Storage S3 gespeichert, der selbst SecNumCloud-qualifiziert ist. +Alle Sicherungen werden im Ruhezustand verschlüsselt und in unserem S3 Object Storage gespeichert, der selbst SecNumCloud-zertifiziert ist. ## Mehrstufige Sicherheit -Sicherheit ist in jede Schicht des Dienstes integriert. +Die Sicherheit ist in jede Schicht des Dienstes integriert. -- **Netzwerkisolation**: Datenbankinstanzen sind **niemals dem Internet ausgesetzt**. Der Zugriff erfolgt ausschließlich über das private Netzwerk des Kunden. -- **Ende-zu-Ende-Verschlüsselung**: - - **Im Transit**: Alle Verbindungen (Client zur Datenbank und zwischen den Cluster-Knoten) sind mit TLS 1.3 verschlüsselt. - - **Im Ruhezustand**: Daten auf der Festplatte (InnoDB-Tablespaces) und Sicherungen sind mit AES-256 verschlüsselt. -- **Zugriffsverwaltung**: Die Authentifizierung ist gesichert (Plugins `ed25519` oder `sha256_password`), und Rechte werden nach dem Prinzip der minimalen Berechtigungen verwaltet. +- **Netzwerkisolation** : Datenbankinstanzen werden **niemals im Internet freigegeben**. Der Zugriff erfolgt ausschließlich über das private Netzwerk des Kunden. +- **End-to-End-Verschlüsselung** : + - **Während der Übertragung** : Alle Verbindungen (Client zu Datenbank und zwischen den Clusterknoten) werden mit TLS 1.3 verschlüsselt. + - **Im Ruhezustand** : Daten auf der Festplatte (InnoDB-Tablespaces) und Backups werden mit AES-256 verschlüsselt. +- **Zugriffsverwaltung** : Die Authentifizierung ist gesichert (Plugins `ed25519` oder `sha256_password`), und die Berechtigungen werden nach dem Prinzip der geringsten Rechte verwaltet. -## Managed Service ("Zero Ops") +## Managed Service ("Zéro Ops") -Das Ziel von Managed MariaDB ist es, Sie von der operativen Komplexität zu entlasten. Unsere Teams stellen sicher: +Das Ziel von MariaDB Managed ist es, Sie von der Betriebskomplexität zu entlasten. Unsere Teams übernehmen: -- Bereitstellung und Erstkonfiguration. -- Vollständiges Lebenszyklusmanagement: Minor-Updates, Anwendung von Sicherheitspatches. -- 24/7-Überwachung der Infrastruktur und des Dienstes. -- Verwaltung und Überprüfung der Sicherungen. +- Das Provisioning und die initiale Konfiguration. +- Das vollständige Lifecycle-Management: Minor-Updates, Anwendung von Sicherheits-Patches. +- Die 24/7-Überwachung der Infrastruktur und des Dienstes. +- Das Management und die Überprüfung von Backups. Dies ermöglicht es Ihren Teams, sich auf die Anwendungsentwicklung und die Nutzung ihrer Daten zu konzentrieren. ## Versionsrichtlinie & Lebenszyklus -Die MariaDB Foundation veröffentlicht Versionen mit Langzeit-Support (LTS), was Stabilität und Vorhersehbarkeit garantiert. Unser Dienst basiert auf diesen Versionen, um die Langlebigkeit Ihrer Infrastruktur zu gewährleisten. +Die MariaDB Foundation veröffentlicht Versionen mit Langzeitunterstützung (LTS), was Stabilität und Vorhersehbarkeit gewährleistet. Unser Service basiert auf diesen Versionen, um die Langfristigkeit Ihrer Infrastruktur zu sichern. | Version | Typ | Unterstützt bis | | :--- | :--- | :--- | | **MariaDB 11.4** | LTS | Mai 2029 | | **MariaDB 11.8** | LTS | Juni 2028 | -- **Minor-Updates**: Sicherheitspatches und Bugfixes werden von unseren Teams in einem *Rolling Update* (Knoten für Knoten) angewendet, um keine Dienstunterbrechung zu verursachen. -- **Major-Updates**: Größere Versionsupgrades werden in Zusammenarbeit mit Ihnen geplant, um sich an Ihren Zeitplan anzupassen. -- **End-of-Support**: Wir benachrichtigen Sie mindestens 180 Tage vor dem End-of-Support einer LTS-Version, um die Migration zur nächsten Version zu planen. +- **Kleinere Updates** : Sicherheits-Patches und Bugbehebungen werden von unseren Teams im *rolling update* (Knoten für Knoten) angewendet, um keine Dienstunterbrechungen zu verursachen. +- **Große Updates** : Major-Upgrades werden in Zusammenarbeit mit Ihnen geplant, um sich an Ihren Zeitplan anzupassen. +- **Ende der Unterstützung** : Wir informieren Sie mindestens 180 Tage vor dem Ende der Unterstützung einer LTS-Version, um die Migration zur nächsten Version zu planen. ## Instanzgrößen -Die ***StandAlone***- und ***Distributed***-Instanzen sind in vordefinierten Größen verfügbar: - -| Größe | vCPU/Knoten | RAM/Knoten | Max Conn | Working Set Max | DB Total Max | -| :-- | :-- | :-- | :-- | :-- | :-- | -| **Micro** | 1 | **2.00 Gi** | **40** | **1-2 GiB** | **2-8 GiB** | -| **Small** | 1 | **4.00 Gi** | **80** | **2-5 GiB** | **8-16 GiB** | -| **Medium** | 2 | **4.00 Gi** | **80** | **2-5 GiB** | **8-16 GiB** | -| **Med-Large**| 2 | **8.00 Gi** | **150** | **4-10 GiB** | **16-32 GiB** | -| **Large** | 4 | **8.00 Gi** | **150** | **4-10 GiB** | **16-32 GiB** | -| **X-Large** | 4 | **16.00 Gi** | **250** | **8-20 GiB** | **32-64 GiB** | -| **2X-Large**| 8 | **16.00 Gi** | **250** | **8-20 GiB** | **32-64 GiB** | -| **3X-Large**| 8 | **32.00 Gi** | **500** | **16-40 GiB** | **64-128 GiB** | -| **4X-Large**| 16 | **32.00 Gi** | **500** | **32-80 GiB** | **128-256 GiB** | -| **5X-Large**| 16 | **64.00 Gi** | **500** | **32-80 GiB** | **128-256 GiB** | -| **6X-Large**| 32 | **128.00 Gi**| **500** | **64-160 GiB** | **256-512 GiB** | - -> **Hinweis**: Der Speicher wird separat bereitgestellt und kann live erhöht werden (von 2 Gi auf 512 Gi) (aber nicht reduziert, außer durch Erstellung einer neuen Instanz). +Die Instanzen ***StandAlone*** und ***Distributed*** sind mit vordefinierten Größen verfügbar: + +| Größe | vCPU | Arbeitsspeicher | innodb_buffer_pool_size | innodb_buffer_pool_instances | max_allowed_packet | table_open_cache | maxconn | +| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | +| **XS** | 1000m | 4096Mi | 2458M | 2 | 256M | 800 | 80 | +| **S** | 1000m | 8192Mi | 4915M | 4 | 512M | 1600 | 150 | +| **M** | 2000m | 8192Mi | 4915M | 4 | 512M | 1600 | 150 | +| **L** | 2000m | 16384Mi | 9830M | 8 | 1G | 3200 | 250 | +| **XL** | 4000m | 16384Mi | 9830M | 8 | 1G | 3200 | 250 | +| **XXL** | 4000m | 32768Mi | 19660M | 16 | 1G | 6400 | 500 | +| **3XL** | 8000m | 32768Mi | 19660M | 16 | 1G | 6400 | 500 | +| **4XL** | 8000m | 65536Mi | 39320M | 16 | 1G | 10000 | 500 | + + +> **Hinweis**: Der Speicher wird separat bereitgestellt und kann online erweitert werden (von 2Gi bis 128Gi) (jedoch nicht verkleinert, außer durch das Neuerstellen einer Instanz.). \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_mariadb/managed_mariadb.md b/i18n/de/docusaurus-plugin-content-docs/current/managed_mariadb/managed_mariadb.md index cefa1f07..49f7b1e3 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/managed_mariadb/managed_mariadb.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/managed_mariadb/managed_mariadb.md @@ -2,79 +2,85 @@ title: Übersicht --- +import stack from '@site/docs/managed_mariadb/images/stack.png' +import StandAlone from '@site/docs/managed_mariadb/images/StandAlone.png' +import Distributed from '@site/docs/managed_mariadb/images/Distributed.png' +import maxscale from '@site/docs/managed_mariadb/images/maxscale.png' + +# Verwaltete MariaDB Vorschau -# Managed MariaDB (Vorschau)

Konzepte

-

Entdecken Sie die Grundlagen und wesentlichen Prinzipien zur Beherrschung unserer Infrastruktur.

+

Erfahren Sie die Grundlagen und wesentlichen Prinzipien zur sicheren Nutzung unserer Infrastruktur.

Konzepte erkunden →

Erste Schritte

-

Starten Sie schnell, indem Sie klaren und einfachen Anweisungen folgen.

+

Starten Sie schnell mit klaren und einfachen Anweisungen.

Quickstart starten →
--- -### Übersicht +### Überblick > -> Dieses Produkt befindet sich in der Vorschauversion, und seine Dokumentation kann Fehler oder Ungenauigkeiten enthalten. +> Dieses Produkt befindet sich in einer Vorabversion, und die Dokumentation kann Fehler oder Ungenauigkeiten enthalten. -**Managed MariaDB (on Kubernetes) by Cloud Temple** ist eine verwaltete MariaDB-Datenbankmotorlösung, die auf Kubernetes gehostet wird. Sie ergänzt die Angebote für verwaltete Datenbankmotoren auf virtuellen Maschinen (hier **Managed MariaDB (on IaaS)** genannt). +**MariaDB Managé (on Kubernetes) by Cloud Temple** ist eine verwaltete Lösung für die MariaDB-Datenbank-Engine, die auf Kubernetes gehostet wird. Sie ergänzt die Angebote für verwaltete Datenbank-Engines auf virtuellen Maschinen (hier bezeichnet als **MariaDB Managé (on IaaS)**) -Dieses Angebot ist für Kunden geeignet, die Kubernetes-Workloads mit MariaDB/MySQL-Datenbanken haben, oder für Kunden, die viele MariaDB/PostgreSQL-Datenbankmotoren auf einem einzigen Kubernetes-Cluster zusammenfassen möchten (Konsolidierung). Es eignet sich besonders gut für kleine und mittelgroße Datenbanken, die kein Tuning oder keine spezifischen Funktionen benötigen. Für große Datenbanken oder solche, die ein besonderes Tuning erfordern, ist es vorzuziehen, das **Managed MariaDB (on IaaS)**-Angebot zu wählen, das mehr Anpassungen durch unsere DBA-Expertenteams ermöglicht. +Dieses Produkt ist für Kunden geeignet, die Kubernetes-Workloads mit MariaDB/MySQL-Datenbanken betreiben, oder für Kunden, die zahlreiche MariaDB/PostgreSQL-Datenbank-Engines auf einem einzigen Kubernetes-Cluster zusammenfassen möchten (mutualisation). Es eignet sich besonders gut für Datenbanken kleiner und mittlerer Größe, die kein Tuning oder spezifische Funktionen erfordern. Für große Datenbanken oder solche, die ein spezielles Tuning erfordern, ist es ratsam, sich für das Produkt **MariaDB Managé (on IaaS)** zu entscheiden, das mehr Anpassungsmöglichkeiten durch unsere DBA-Experten-Teams bietet. -MariaDB-Engines können in Version 11.4 LTS oder 11.8 LTS gewählt werden. +Die MariaDB-Engines können in der Version 11.4 LTS oder 11.8 LTS ausgewählt werden. -Alle Backups verwenden Cloud-Temple S3-Speicher (SNC-qualifiziert) mit Verschlüsselung im Ruhezustand. +Alle Sicherungen verwenden den Cloud-Temple-S3-Speicher (qualifié SNC) mit Verschlüsselung im Ruhezustand (at-rest). ![Stack-Architektur](@site/docs/managed_mariadb/images/stack.png) ### Hauptvorteile -- **Souveränität und Reversibilität**: Die Lösung basiert ausschließlich auf Open-Source-Standards, um jegliche technologische Abhängigkeit zu vermeiden und die Portabilität Ihrer Anwendungen zu gewährleisten. -- **Einfachheit und Delegation**: Die Lösung ermöglicht es, Cloud-Temple die Verwaltung der Datenbankmotoren zu übertragen, insbesondere: Updates und Backups. +- **Souveränität und Reversibilität** : Die Lösung stützt sich ausschließlich auf Open-Source-Standards, um technologische Abhängigkeiten zu vermeiden und die Portabilität Ihrer Anwendungen zu gewährleisten. +- **Einfachheit und Delegation** : Die Lösung ermöglicht die Delegation der Verwaltung der Datenbank-Engines an Cloud-Temple, insbesondere: Updates und Backups. ## Bereitstellungsmodelle -Wir bieten zwei Bereitstellungsmodelle an, um Ihre Anforderungen zu erfüllen: ***StandAlone*** oder ***Distributed***. +Wir bieten zwei Bereitstellungsmodelle an, um Ihre Anforderungen zu erfüllen: ***StandAlone*** oder ***Distributed***. ### StandAlone -Das ***StandAlone***-Modell stellt eine einzelne Instanz des MariaDB-Engines in einer Multi-AZ-Infrastruktur bereit. +Das ***StandAlone***-Modell stellt eine einzelne Instanz der MariaDB-Engine in einer Multi-AZ-Infrastruktur bereit. -Der von dieser Instanz verwendete Speicher wird auf 3 AZs repliziert und ermöglicht einen automatischen Neustart der MariaDB-Instanz in einer anderen AZ bei einem Ausfall. +Der von dieser Instanz genutzte Speicher wird über 3 AZ repliziert und ermöglicht im Fehlerfall einen automatischen Neustart der MariaDB-Instanz in einer anderen AZ. -- **Anwendungsfall**: Dieses Bereitstellungsmodell eignet sich perfekt für einfache Anwendungen wie CMS, die nur einen einzigen Endpunkt für die Datenbankverbindung verwenden. -- **Hauptpunkte**: - - 1 Datenbankmotorinstanz - - Speicher auf 3 AZs verteilt für automatische Wiederherstellung bei einem Ausfall - - Physische (`mariabackup`) und logische (`mysqldump`) Backups - - SLA 99,9 % (außerhalb der Wartungsfenster) +- **Anwendungsfall**: Dieses Bereitstellungsmodell eignet sich hervorragend für einfache Anwendungen wie CMS, die nur einen einzigen Endpoint zur Verbindung mit Datenbanken verwenden. +- **Schlüsselmerkmale**: + - 1 Datenbank-Engine-Instanz + - über 3 AZ verteilter Speicher für automatisches Failover im Fehlerfall + - physische (`mariabackup`) und logische (`mysqldump`) Backups + - SLA 99.9 % (außerhalb von Wartungsfenstern) -![StandAlone-Architektur](@site/docs/managed_mariadb/images/StandAlone.png) +![Architecture StandAlone](@site/docs/managed_mariadb/images/StandAlone.png) ### Distributed -Das ***Distributed***-Modell stellt einen Cluster mit 3 MariaDB-Engine-Instanzen bereit, mit Galera im "Single Primary"-Modus und MaxScale: +Das ***Distributed***-Modell stellt einen Cluster aus 3 MariaDB-Engine-Instanzen bereit, mit Galera im "Single Primary"-Modus und MaxScale: -- Ein MaxScale-Endpunkt ermöglicht das Routing zu den verschiedenen Instanzen je nach Anfragetyp (Lesen oder Schreiben). +- Ein MaxScale-Endpoint ermöglicht das Routing zu den verschiedenen Instanzen basierend auf dem Abfragetyp (Read oder Write). ![MaxScale](@site/docs/managed_mariadb/images/maxscale.png) -- Die Lese-Schreib-Instanz (RW) ist über einen spezifischen Endpunkt zugänglich. -- Die 2 schreibgeschützten Instanzen (RO) sind über einen anderen spezifischen Endpunkt zugänglich. -Anwendungen können somit RW- oder RO-Verbindungen verwenden oder MaxScale selbst zu den am besten geeigneten Endpunkten weiterleiten lassen. +- Die Lese-Schreib-Instanz (RW) ist über einen spezifischen Endpoint erreichbar. +- Die 2 schreibgeschützten Instanzen (RO) sind über einen anderen spezifischen Endpoint erreichbar. + +Auf diese Weise können Anwendungen wahlweise RW- oder RO-Verbindungen nutzen oder MaxScale das automatische Routing zu den am besten geeigneten Endpoints überlassen. -- **Anwendungsfall**: Dieses Bereitstellungsmodell eignet sich perfekt für Anwendungen mit verteiltem Zugriff, wie Daten- oder Business-Intelligence-Anwendungen, die von schreibgeschütztem Zugriff ohne Auswirkungen auf die Datenaufnahme profitieren. -- **Hauptpunkte**: - - 3 Datenbankmotorinstanzen mit Galera im "Single Primary"-Modus - - MaxScale-Proxy für effizientes Query-Routing. - - Speicher auf 3 AZs verteilt für automatische Wiederherstellung bei einem Ausfall - - PiTR und logische Backups - - SLA 99,9 % (außerhalb der Wartungsfenster) +- **Anwendungsfall**: Dieses Bereitstellungsmodell eignet sich hervorragend für Anwendungen mit verteiltem Zugriff, wie Data- oder Business-Intelligence-Anwendungen, die von schreibgeschütztem Zugriff profitieren, ohne die Datenaufnahme zu beeinträchtigen. +- **Kernpunkte**: + - 3 Datenbank-Engine-Instanzen mit Galera im "Single Primary"-Modus + - MaxScale-Proxy für ein effizientes Abfrage-Routing. + - Aufteilung des Speichers auf 3 AZs für automatische Wiederherstellung im Fehlerfall + - PiTR- und logische Backups + - SLA 99,9 % (außerhalb von Wartungsfenstern) -![Distributed-Architektur](@site/docs/managed_mariadb/images/Distributed.png) +![Architecture Distributed](@site/docs/managed_mariadb/images/Distributed.png) \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_mariadb/quickstart.md b/i18n/de/docusaurus-plugin-content-docs/current/managed_mariadb/quickstart.md index 73ca60a2..01457af2 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/managed_mariadb/quickstart.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/managed_mariadb/quickstart.md @@ -1,33 +1,33 @@ ---- -title: Erste-Schritte-Leitfaden ---- - -Willkommen beim Erste-Schritte-Leitfaden für **Managed MariaDB** von Cloud Temple. - -Das Ziel dieses Abschnitts ist es, Sie zu den notwendigen Ressourcen zu führen, um Ihr Produkt in Betrieb zu nehmen. - -## Bevor Sie beginnen - -Stellen Sie sicher, dass Sie über die von Cloud-Temple bereitgestellten Zugangsdaten verfügen. - -Stellen Sie sicher, dass die Netzwerkflüsse zu den Ihnen bereitgestellten IPs geöffnet sind. - -## Zugriff auf Ihren Managed MariaDB-Cluster - -Je nach gewähltem Bereitstellungsmodell haben Sie einen oder mehrere Endpunkte. - -**StandAlone**: Nur 1 Endpunkt (nur 1 IP), zugänglich auf Port 3306. - -**Distributed**: - -- 1 MaxScale-Endpunkt, zugänglich auf Port 3306, der Ihre Anfragen zu den am besten geeigneten Instanzen weiterleiten kann (dies ist der bevorzugte Endpunkt) -- 1 R/W-Endpunkt, zugänglich auf Port 3306, der auf die primäre Instanz im Lese-Schreib-Modus zeigt. -- 1 R/O-Endpunkt, zugänglich auf Port 3306, der auf alle Instanzen im schreibgeschützten Modus zeigt. - -## Ihre Berechtigungen - -Sie haben keine Berechtigungen auf der Datenbankmotorebene (weder `SUPER` noch `ALL_PRIVILEGE`) - -Sie können den Motor oder seine Optionen nicht neu konfigurieren und auch kein performance_schema installieren. - -Anfragen zum Hinzufügen von Datenbanken, Benutzern oder Grants müssen an die Cloud-Temple-Teams gestellt werden. +--- +title: Schnellstartanleitung +--- + +Willkommen zur Schnellstartanleitung für **MariaDB Managed** Cloud Temple. + +Ziel dieses Abschnitts ist es, Sie zu den erforderlichen Ressourcen zu leiten, damit Sie sich schnell mit Ihrem Produkt vertraut machen können. + +## Bevor Sie beginnen + +Stellen Sie sicher, dass Sie über die von Cloud-Temple bereitgestellten Zugriffsrechte verfügen. + +Stellen Sie sicher, dass die Netzwerkflüsse zu den Ihnen bereitgestellten IP-Adressen geöffnet sind. + +## Zugriff auf Ihren verwalteten MariaDB-Cluster + +Je nach gewähltem Bereitstellungsmodell verfügen Sie über einen oder mehrere Endpunkte. + +**StandAlone** : 1 Endpunkt (1 IP), erreichbar über Port 3306. + +**Distributed** : + +- 1 Maxscale-Endpunkt, erreichbar über Port 3306, der Ihre Abfragen an die am besten geeigneten Instanzen verteilt (dieser Endpunkt ist zu bevorzugen) +- 1 R/W-Endpunkt, erreichbar über Port 3306, der auf die primäre Instanz für Lese-/Schreibzugriffe verweist. +- 1 R/O-Endpunkt, erreichbar über Port 3306, der auf alle Instanzen für Lesezugriffe verweist. + +## Ihre Berechtigungen + +Sie verfügen über keine Berechtigungen auf Ebene der Datenbank-Engine (weder `SUPER` noch `ALL_PRIVILEGE`). + +Sie können die Engine oder deren Optionen nicht neu konfigurieren und das performance_schema nicht installieren. + +Anfragen zur Anlage von Datenbanken, Benutzern oder Grants sind an die Cloud-Temple-Teams zu richten. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_postgresql/concepts.md b/i18n/de/docusaurus-plugin-content-docs/current/managed_postgresql/concepts.md index eb754e6f..a7f050e8 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/managed_postgresql/concepts.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/managed_postgresql/concepts.md @@ -5,113 +5,110 @@ sidebar_position: 1 # Schlüsselkonzepte von Managed PostgreSQL -Dieser Abschnitt stellt die grundlegenden Konzepte unseres **Managed PostgreSQL**-Dienstes vor. Das Verständnis dieser Prinzipien hilft Ihnen, das Beste aus Ihrer verwalteten Datenbank herauszuholen und ihre Fähigkeiten mit Ihren Anwendungsanforderungen und Sicherheitsanforderungen in Einklang zu bringen. +Dieser Abschnitt erläutert die grundlegenden Konzepte unseres **Managed PostgreSQL**-Diensts. Das Verständnis dieser Prinzipien hilft Ihnen, das Beste aus Ihrer verwalteten Datenbank herauszuholen, indem Sie ihre Fähigkeiten an Ihre Anwendungsanforderungen und Sicherheitsrichtlinien anpassen. ## Souveränität und SecNumCloud-Konformität -Im Mittelpunkt unseres Angebots steht die **digitale Souveränität**. Der Managed PostgreSQL-Dienst wird vollständig auf der Cloud Temple-Infrastruktur gehostet, die von der ANSSI mit **SecNumCloud 3.2** qualifiziert wurde. +Im Kern unseres Produkts steht die **digitale Souveränität**. Der PostgreSQL-Managed-Service wird vollständig auf der Cloud-Temple-Infrastruktur gehostet, die von der ANSSI als **SecNumCloud 3.2** qualifiziert wurde. -- **100% Hosting in Frankreich**: Ihre Daten verbleiben auf dem nationalen Territorium, geschützt vor extraterritorialen Gesetzen. -- **Native Compliance**: Die Lösung ist so konzipiert, dass sie die strengsten regulatorischen Anforderungen erfüllt (DSGVO, HDS, LPM, NIS2, PCI-DSS). -- **Open Source und Reversibilität**: Durch die Verwendung offener Standards wie PostgreSQL Community Server und Patroni garantieren wir die Abwesenheit von technologischer Abhängigkeit (*Vendor Lock-in*) und vollständige Datenportabilität. +- **100 % Hosting in Frankreich** : Ihre Daten verbleiben auf nationalem Territorium und sind vor extraterritorialen Gesetzen geschützt. +- **Native Konformität** : Die Lösung wurde entwickelt, um den strengsten regulatorischen Anforderungen zu entsprechen (RGPD, HDS, LPM, NIS2, PCI-DSS). +- **Open Source und Reversibilität** : Durch die Nutzung offener Standards wie PostgreSQL Community Server und Patroni gewährleisten wir eine technologische Unabhängigkeit (*Vendor Lock-in*) und eine vollständige Portabilität Ihrer Daten. ## Hochverfügbarkeitsarchitektur: Patroni Cluster -Für verteilte Umgebungen basiert unser Dienst auf **Patroni Cluster**, um Hochverfügbarkeit ohne Datenverlust zu bieten. +Für verteilte Umgebungen stützt sich unser Produkt auf **Patroni Cluster**, um Hochverfügbarkeit ohne Datenverlust zu gewährleisten. -- **Synchrone Replikation**: Im Gegensatz zur herkömmlichen asynchronen Replikation wird jede Transaktion auf allen Clusterknoten validiert, *bevor* sie bestätigt wird. Dies garantiert ein **Recovery Point Objective (RPO) von null**: Keine validierten Daten können bei einem Ausfall verloren gehen. -- **Multi-AZ-Verteilung**: Der Cluster ist auf drei verschiedene Verfügbarkeitszonen (AZ) verteilt. Der Ausfall eines ganzen Rechenzentrums verursacht keine Dienstunterbrechung oder Datenverlust. -- **Automatisches Failover**: Bei einem Vorfall auf einem Knoten wird der Datenverkehr automatisch auf gesunde Knoten umgeleitet, was ein **minimales Recovery Time Objective (RTO)** gewährleistet. +- **Synchrone Replikation** : Im Gegensatz zur traditionellen asynchronen Replikation wird jede Transaktion auf allen Clusterknoten *vor* der Bestätigung validiert. Dies gewährleistet ein **Wiederherstellungszielpunkt (RPO) von null** : keine bestätigten Daten gehen im Fehlerfall verloren. +- **Multi-AZ-Verteilung** : Der Cluster ist auf drei separate Verfügbarkeitszonen (AZ) verteilt. Der Ausfall eines gesamten Rechenzentrums führt weder zu Dienstunterbrechungen noch zu Datenverlust. +- **Automatisches Failover** : Im Falle eines Vorfalls auf einem Knoten wird der Verkehr automatisch auf die gesunden Knoten umgeleitet, wodurch ein **minimales Wiederherstellungszeitziel (RTO)** sichergestellt wird. ## Bereitstellungsmodelle -Wir bieten zwei Modelle an, um sich der Kritikalität Ihrer Workloads anzupassen. +Wir bieten zwei Modelle an, die sich an die Kritikalität Ihrer Workloads anpassen. ### 1. StandAlone -Dieses Modell stellt eine einzelne Instanz des PostgreSQL-Engines bereit. +Dieses Modell stellt eine einzelne Instanz der PostgreSQL-Engine bereit. -- **Anwendungsfall**: Dieses Bereitstellungsmodell eignet sich perfekt für einfache Anwendungen wie CMS, die nur einen einzigen Endpunkt für die Datenbankverbindung verwenden. -- **Resilienz**: Obwohl es sich um eine einzelne Instanz handelt, wird der zugrunde liegende Speicher auf 3 AZs repliziert, was einen automatischen Neustart in einer anderen AZ bei einem Hardware-Ausfall ermöglicht. -- **SLA**: 99,9% (außerhalb der Wartungsfenster). +- **Anwendungsfall** : Dieses Bereitstellungsmodell eignet sich hervorragend für einfache Anwendungen wie CMS, die nur einen einzigen Endpoint zur Verbindung mit Datenbanken verwenden. +- **Resilienz** : Obwohl es sich um eine einzelne Instanz handelt, wird der zugrunde liegende Speicher in 3 AZ repliziert, was einen automatischen Neustart in einer anderen AZ bei einem Hardwareausfall ermöglicht. +- **SLA** : 99.9% (außerhalb der Wartungsfenster). -### 2. Distributed +### 2. Verteilt -Dieses Modell stellt einen **Patroni-Cluster aus 3 Instanzen** des PostgreSQL-Engines bereit, ergänzt durch einen **PgBouncer**-Proxy. +Dieses Modell stellt einen **Patroni-Cluster mit 3 Instanzen** der PostgreSQL-Engine bereit, ergänzt durch einen **PgBouncer**-Proxy. -- **Anwendungsfall**: Dieses Bereitstellungsmodell eignet sich perfekt für Anwendungen mit verteiltem Zugriff, wie Daten- oder Business-Intelligence-Anwendungen, die von schreibgeschütztem Zugriff ohne Auswirkungen auf die Datenaufnahme profitieren. +- **Anwendungsfall**: Dieses Bereitstellungsmodell eignet sich hervorragend für Anwendungen mit verteiltem Zugriff, wie Data- oder Business-Intelligence-Anwendungen, die von schreibgeschütztem Zugriff profitieren, ohne die Datenaufnahme zu beeinträchtigen. - **Komponenten**: - - **3 PostgreSQL-Knoten**: Ein primärer Lese-Schreib-Knoten (RW) und zwei sekundäre schreibgeschützte Knoten (RO). - - **PgBouncer-Proxy**: Ein intelligenter Router, der Anfragen verteilt. Er sendet Schreibvorgänge an den primären Knoten und verteilt Lesevorgänge auf die sekundären Knoten (*Read/Write Splitting*), was die Leistung optimiert. -- **SLA**: 99,9% (außerhalb der Wartungsfenster). + - **3 PostgreSQL-Knoten**: Ein primärer Knoten für Lese-/Schreibzugriff (RW) und zwei sekundäre Knoten für Lesezugriff (RO). + - **PgBouncer-Proxy**: Ein intelligenter Router, der Anfragen verteilt. Er leitet Schreibvorgänge an den primären Knoten weiter und verteilt Lesevorgänge auf die sekundären Knoten (*read/write splitting*), wodurch die Leistung optimiert wird. +- **SLA**: 99,9 % (außerhalb von Wartungsfenstern). -> **Wichtiger Hinweis**: Es ist nicht möglich, das Bereitstellungsmodell eines vorhandenen Clusters zu ändern (z. B. von *StandAlone* zu *Distributed*). Dieser Vorgang erfordert die Erstellung eines neuen Clusters im gewünschten Modell über eine PiTR-Wiederherstellung. +> **Wichtiger Hinweis**: Das Bereitstellungsmodell eines bestehenden Clusters kann nicht geändert werden (z. B. von *StandAlone* auf *Distributed*). Für diese Änderung muss ein neuer Cluster im gewünschten Modell erstellt werden, wobei eine PiTR-Wiederherstellung erforderlich ist. -## Backup und Wiederherstellung (PITR) +## Sicherung und Wiederherstellung (PITR) -Der Schutz Ihrer Daten wird durch eine doppelte Backup-Strategie gewährleistet. +Der Schutz Ihrer Daten wird durch eine zweistufige Sicherungsstrategie gewährleistet. -1. **Physisches Backup (Point-in-Time Recovery - PITR)**: - - Wir führen täglich vollständige physische Backups mit `pg_basebackup` durch (ohne Dienstunterbrechung). +1. **Physische Sicherung (Point-in-Time Recovery - PITR)** : + - Wir führen täglich vollständige physische Sicherungen mit `pg_basebackup` durch (ohne Dienstunterbrechung). - Transaktionsprotokolle (*WAL*) werden kontinuierlich archiviert. - - Diese Kombination ermöglicht eine Wiederherstellung "auf die Sekunde genau" bis zum Zeitpunkt kurz vor einem Vorfall. + - Diese Kombination ermöglicht eine Wiederherstellung „bis zur Sekunde genau“ bis zum Zeitpunkt unmittelbar vor einem Vorfall. -2. **Logisches Backup (`pg_dump`)**: - - Logische Exporte von Datenbanken werden ebenfalls durchgeführt. - - Sie bieten eine feine Granularität zum Wiederherstellen oder Exportieren einer einzelnen Datenbank. +2. **Logische Sicherung (`pg_dump`)** : + - Es werden zudem logische Exporte der Datenbanken erstellt. + - Sie bieten eine hohe Granularität, um einzelne Datenbanken wiederherzustellen oder zu exportieren. -Alle Backups sind im Ruhezustand verschlüsselt und auf unserem S3 Object Storage gespeichert, der selbst SecNumCloud-qualifiziert ist. +Alle Sicherungen sind bei der Speicherung verschlüsselt und werden in unserem Object Storage S3 abgelegt, der zudem SecNumCloud-zertifiziert ist. ## Mehrstufige Sicherheit -Sicherheit ist in jede Schicht des Dienstes integriert. +Die Sicherheit ist in jede Schicht des Dienstes integriert. -- **Netzwerkisolierung**: Datenbankinstanzen sind **niemals im Internet exponiert**. Der Zugriff erfolgt ausschließlich über das private Netzwerk des Kunden. -- **End-to-End-Verschlüsselung**: - - **Im Transit**: Alle Verbindungen (Client zu Datenbank und zwischen Clusterknoten) sind mit TLS 1.3 verschlüsselt. - - **Im Ruhezustand**: Daten auf Disk und Backups sind mit AES-256 verschlüsselt. -- **Zugriffsverwaltung**: Die Authentifizierung ist sicher und die Rechte werden nach dem Prinzip der minimalen Berechtigung verwaltet. +- **Netzwerkisolation** : Datenbankinstanzen werden **niemals im Internet freigegeben**. Der Zugriff erfolgt ausschließlich über das private Netzwerk des Kunden. +- **End-to-End-Verschlüsselung** : + - **Bei der Übertragung** : Alle Verbindungen (Client zur Datenbank und zwischen den Clusterknoten) werden mit TLS 1.3 verschlüsselt. + - **Im Ruhezustand** : Daten auf der Festplatte und Backups werden mit AES-256 verschlüsselt. +- **Zugriffsverwaltung** : Die Authentifizierung ist sicher und Berechtigungen werden nach dem Prinzip des geringsten Privilegs verwaltet. -## Managed Service ("Zero Ops") +## Managed Service ("Zéro Ops") -Das Ziel von Managed PostgreSQL ist es, Sie von der operationellen Komplexität zu entlasten. Unsere Teams sorgen für: +Das Ziel von PostgreSQL Managed ist es, Sie von der operativen Komplexität zu entlasten. Unsere Teams übernehmen: -- Provisionierung und Erstkonfiguration. -- Vollständiges Lebenszyklusmanagement: kleine Updates, Anwendung von Sicherheits-Patches. -- 24/7-Überwachung der Infrastruktur und des Dienstes. -- Verwaltung und Überprüfung der Backups. +- Das Provisioning und die initiale Konfiguration. +- Das vollständige Lifecycle-Management: Minor-Updates, Anwendung von Sicherheits-Patches. +- Die 24/7-Überwachung der Infrastruktur und des Dienstes. +- Das Management und die Prüfung von Backups. -Dies ermöglicht es Ihren Teams, sich auf die Anwendungsentwicklung und die Nutzung Ihrer Daten zu konzentrieren. +Dies ermöglicht es Ihren Teams, sich auf die Anwendungsentwicklung und die Nutzung ihrer Daten zu konzentrieren. ## Versionsrichtlinie & Lebenszyklus -Die PostgreSQL-Community veröffentlicht Versionen mit Langzeitunterstützung (LTS), was Stabilität und Vorhersehbarkeit garantiert. Unser Dienst basiert auf diesen Versionen, um die Langlebigkeit Ihrer Infrastruktur zu gewährleisten. +Die PostgreSQL-Community veröffentlicht Versionen mit Langzeitunterstützung (LTS), was Stabilität und Planbarkeit gewährleistet. Unser Service basiert auf diesen Versionen, um die langfristige Funktionsfähigkeit Ihrer Infrastruktur zu sichern. | Version | Typ | Unterstützt bis | | :--- | :--- | :--- | | **PostgreSQL 15** | LTS | Nov 2027 | | **PostgreSQL 16** | LTS | Nov 2028 | -- **Kleine Updates**: Sicherheits-Patches und Bug-Fixes werden von unseren Teams in *Rolling Update* (Knoten für Knoten) angewendet, um keine Dienstunterbrechung zu verursachen. -- **Große Updates**: Große Versionsupgrades werden in Zusammenarbeit mit Ihnen geplant, um sich an Ihren Zeitplan anzupassen. -- **Supportende**: Wir benachrichtigen Sie mindestens 180 Tage vor dem Supportende einer LTS-Version, um die Migration zur nächsten Version zu planen. +- **Kleinere Updates**: Sicherheits-Patches und Bugfixes werden von unseren Teams im *Rolling-Update*-Verfahren (Knoten für Knoten) eingespielt, um keine Dienstunterbrechungen zu verursachen. +- **Größere Updates**: Major-Upgrade werden in Abstimmung mit Ihnen geplant, um sich an Ihren Zeitplan anzupassen. +- **Ende der Unterstützung**: Wir informieren Sie mindestens 180 Tage vor dem Auslauf einer LTS-Version, um die Migration zur nächsten Version zu planen. ## Instanzgrößen -***StandAlone***- und ***Distributed***-Instanzen sind in vordefinierten Größen verfügbar: - -| Größe | vCPU/Knoten | RAM/Knoten | Max Verb. | Working Set Max | DB Gesamt Max | -| :-- | :-- | :-- | :-- | :-- | :-- | -| **Micro** | 1 | **2.00 Gi** | **40** | **1-2 GiB** | **2-8 GiB** | -| **Small** | 1 | **4.00 Gi** | **80** | **2-5 GiB** | **8-16 GiB** | -| **Medium** | 2 | **4.00 Gi** | **80** | **2-5 GiB** | **8-16 GiB** | -| **Med-Large**| 2 | **8.00 Gi** | **150** | **4-10 GiB** | **16-32 GiB** | -| **Large** | 4 | **8.00 Gi** | **150** | **4-10 GiB** | **16-32 GiB** | -| **X-Large** | 4 | **16.00 Gi** | **250** | **8-20 GiB** | **32-64 GiB** | -| **2X-Large**| 8 | **16.00 Gi** | **250** | **8-20 GiB** | **32-64 GiB** | -| **3X-Large**| 8 | **32.00 Gi** | **500** | **16-40 GiB** | **64-128 GiB** | -| **4X-Large**| 16 | **32.00 Gi** | **500** | **32-80 GiB** | **128-256 GiB** | -| **5X-Large**| 16 | **64.00 Gi** | **500** | **32-80 GiB** | **128-256 GiB** | -| **6X-Large**| 32 | **128.00 Gi**| **500** | **64-160 GiB** | **256-512 GiB** | - -> **Hinweis**: Der Speicher wird separat provisioniert und kann im laufenden Betrieb erhöht werden (von 2Gi auf 512Gi) (aber nicht reduziert, außer durch Neuerstellen einer neuen Instanz). +Die Instanzen ***StandAlone*** und ***Distributed*** sind mit vordefinierten Größen verfügbar: + +| Größe | vCPU | Arbeitsspeicher | innodb_buffer_pool_size | innodb_buffer_pool_instances | max_allowed_packet | table_open_cache | maxconn | +| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | +| **XS** | 1000m | 4096Mi | 2458M | 2 | 256M | 800 | 80 | +| **S** | 1000m | 8192Mi | 4915M | 4 | 512M | 1600 | 150 | +| **M** | 2000m | 8192Mi | 4915M | 4 | 512M | 1600 | 150 | +| **L** | 2000m | 16384Mi | 9830M | 8 | 1G | 3200 | 250 | +| **XL** | 4000m | 16384Mi | 9830M | 8 | 1G | 3200 | 250 | +| **XXL** | 4000m | 32768Mi | 19660M | 16 | 1G | 6400 | 500 | +| **3XL** | 8000m | 32768Mi | 19660M | 16 | 1G | 6400 | 500 | +| **4XL** | 8000m | 65536Mi | 39320M | 16 | 1G | 10000 | 500 | + +> **Hinweis** : Der Speicher wird separat bereitgestellt und kann online erweitert werden (von 2Gi bis 128Gi) (jedoch nicht verkleinert, außer durch das Erstellen einer neuen Instanz.). \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_postgresql/managed_postgresql.md b/i18n/de/docusaurus-plugin-content-docs/current/managed_postgresql/managed_postgresql.md index 5aa86780..630bc904 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/managed_postgresql/managed_postgresql.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/managed_postgresql/managed_postgresql.md @@ -2,17 +2,17 @@ title: Übersicht --- -# Managed PostgreSQL (Vorschau) +# Verwaltetes PostgreSQL Vorschau

Konzepte

-

Entdecken Sie die Grundlagen und wesentlichen Prinzipien zur Beherrschung unserer Infrastruktur.

+

Erfahren Sie die Grundlagen und wichtigsten Prinzipien, um unsere Infrastruktur zu meistern.

Konzepte erkunden →

Erste Schritte

-

Starten Sie schnell, indem Sie klaren und einfachen Anweisungen folgen.

+

Starten Sie schnell mit klaren und einfachen Anweisungen.

Quickstart starten →
@@ -21,63 +21,63 @@ title: Übersicht ### Übersicht > -> Dieses Produkt befindet sich in der Vorschauversion, und seine Dokumentation kann Fehler oder Ungenauigkeiten enthalten. +> Dieses Produkt befindet sich in einer Vorabversion, und die Dokumentation kann Fehler oder Ungenauigkeiten enthalten. -**Managed PostgreSQL (on Kubernetes) by Cloud Temple** ist eine verwaltete PostgreSQL-Datenbankmotorlösung, die auf Kubernetes gehostet wird. Sie ergänzt die Angebote für verwaltete Datenbankmotoren auf virtuellen Maschinen (hier **Managed PostgreSQL (on IaaS)** genannt). +**PostgreSQL Managé (on Kubernetes) by Cloud Temple** ist eine verwaltete Lösung für die PostgreSQL-Datenbank-Engine, die auf Kubernetes gehostet wird. Sie ergänzt die Angebote für verwaltete Datenbank-Engines auf virtuellen Maschinen (nommées ici **PostgreSQL Managé (on IaaS)**) -Dieses Angebot ist für Kunden geeignet, die Kubernetes-Workloads mit PostgreSQL-Datenbanken haben, oder für Kunden, die viele PostgreSQL-Datenbankmotoren auf einem einzigen Kubernetes-Cluster zusammenfassen möchten (Konsolidierung). Es eignet sich besonders gut für kleine und mittelgroße Datenbanken, die kein Tuning oder keine spezifischen Funktionen benötigen. Für große Datenbanken oder solche, die ein besonderes Tuning erfordern, ist es vorzuziehen, das **Managed PostgreSQL (on IaaS)**-Angebot zu wählen, das mehr Anpassungen durch unsere DBA-Expertenteams ermöglicht. +Dieses Produkt eignet sich für Kunden mit Kubernetes-Workloads, die PostgreSQL-Datenbanken benötigen, oder für Kunden, die viele PostgreSQL-Datenbank-Engines auf einem einzigen Kubernetes-Cluster (mutualisation) konsolidieren möchten. Es eignet sich besonders gut für Datenbanken kleiner und mittlerer Größe, die kein Tuning oder spezifische Funktionen erfordern. Für Datenbanken großer Größe oder solche, die ein spezifisches Tuning erfordern, ist es besser, sich für das Produkt **PostgreSQL Managé (on IaaS)** zu entscheiden, das mehr Anpassungen durch unsere DBA-Experten-Teams ermöglicht. ### Hauptvorteile -- **Souveränität und Reversibilität**: Die Lösung basiert ausschließlich auf Open-Source-Standards, um jegliche technologische Abhängigkeit zu vermeiden und die Portabilität Ihrer Anwendungen zu gewährleisten. -- **Einfachheit und Delegation**: Die Lösung ermöglicht es, Cloud-Temple die Verwaltung der Datenbankmotoren zu übertragen, insbesondere: Updates und Backups. +- **Souveränität und Reversibilität** : Die Lösung stützt sich ausschließlich auf Open-Source-Standards, um technologische Abhängigkeiten zu vermeiden und die Portabilität Ihrer Anwendungen zu gewährleisten. +- **Einfachheit und Delegation** : Die Lösung ermöglicht die Delegation der Verwaltung der Datenbank-Engines an Cloud-Temple, insbesondere: Updates und Backups. ## Bereitstellungsmodelle -Wir bieten zwei Bereitstellungsmodelle an, um Ihre Anforderungen zu erfüllen: ***StandAlone*** oder ***Distributed***. +Wir bieten zwei Bereitstellungsmodelle an, um Ihre Anforderungen zu erfüllen: ***StandAlone*** oder ***Distributed***. ### StandAlone -Das ***StandAlone***-Modell stellt eine einzelne Instanz des PostgreSQL-Engines in einer Multi-AZ-Infrastruktur bereit. +Das ***StandAlone***-Modell stellt eine einzelne Instanz der PostgreSQL-Engine in einer Multi-AZ-Infrastruktur bereit. -Der von dieser Instanz verwendete Speicher wird auf 3 AZs repliziert und ermöglicht einen automatischen Neustart der PostgreSQL-Instanz in einer anderen AZ bei einem Ausfall. +Der von dieser Instanz genutzte Speicher wird über 3 AZ repliziert und ermöglicht einen automatischen Neustart der PostgreSQL-Instanz in einer anderen AZ im Fehlerfall. -- **Anwendungsfall**: Dieses Bereitstellungsmodell eignet sich perfekt für einfache Anwendungen wie CMS, die nur einen einzigen Endpunkt für die Datenbankverbindung verwenden. -- **Hauptpunkte**: - - 1 Datenbankmotorinstanz - - Speicher auf 3 AZs verteilt für automatische Wiederherstellung bei einem Ausfall +- **Anwendungsfall** : Dieses Bereitstellungsmodell eignet sich hervorragend für einfache Anwendungen wie CMS, die nur einen einzigen Endpoint zur Verbindung mit den Datenbanken nutzen. +- **Kernpunkte** : + - 1 Instanz der Datenbank-Engine + - Speicher, der über 3 AZ verteilt ist, für einen automatischen Failover im Fehlerfall - Physische und logische Backups - SLA 99,9 % (außerhalb der Wartungsfenster) ### Distributed -Das ***Distributed***-Modell stellt einen Cluster mit 3 PostgreSQL-Engine-Instanzen bereit, mit Patroni im "Single Primary"-Modus und PgBouncer: +Das ***Distributed***-Modell stellt einen Cluster aus 3 Instanzen der PostgreSQL-Engine bereit, mit Patroni im "single primary"-Modus und PgBouncer: -- Ein PgBouncer-Endpunkt ermöglicht das Routing zu den verschiedenen Instanzen je nach Anfragetyp (Lesen oder Schreiben). -- Die Lese-Schreib-Instanz (RW) ist über einen spezifischen Endpunkt zugänglich. -- Schreibgeschützte Instanzen (RO) sind über einen anderen spezifischen Endpunkt zugänglich. +- Ein PgBouncer-Endpoint ermöglicht das Routing zu den verschiedenen Instanzen basierend auf dem Abfragetyp (read oder write). +- Die Lese-Schreib-Instanz (RW) ist über einen spezifischen Endpoint erreichbar. +- Die Nur-Lese-Instanzen (RO) sind über einen weiteren spezifischen Endpoint erreichbar. -Anwendungen können somit RW- oder RO-Verbindungen verwenden oder PgBouncer selbst zu den am besten geeigneten Endpunkten weiterleiten lassen. +Dementsprechend können Anwendungen wahlweise RW- oder RO-Verbindungen nutzen oder PgBouncer das automatische Routing zu den am besten geeigneten Endpoints überlassen. -- **Anwendungsfall**: Dieses Bereitstellungsmodell eignet sich perfekt für Anwendungen mit verteiltem Zugriff, wie Daten- oder Business-Intelligence-Anwendungen, die von schreibgeschütztem Zugriff ohne Auswirkungen auf die Datenaufnahme profitieren. -- **Hauptpunkte**: - - 3 Datenbankmotorinstanzen mit Patroni im "Single Primary"-Modus - - PgBouncer-Proxy für effizientes Query-Routing. - - Speicher auf 3 AZs verteilt für automatische Wiederherstellung bei einem Ausfall - - PiTR und logische Backups - - SLA 99,9 % (außerhalb der Wartungsfenster) +- **Anwendungsfall**: Dieses Bereitstellungsmodell eignet sich hervorragend für Anwendungen mit verteiltem Zugriff, wie Data- oder Business-Intelligence-Anwendungen, die von Nur-Lese-Zugriffen profitieren, ohne die Datenaufnahme zu beeinträchtigen. +- **Kernpunkte**: + - 3 Datenbank-Engine-Instanzen mit Patroni im "single primary"-Modus + - PgBouncer-Proxy für ein effizientes Routing von Abfragen. + - Auf 3 AZs verteilter Speicher für die automatische Wiederherstellung im Fehlerfall + - PiTR- und logische Sicherungen + - SLA 99,9 % (außerhalb von Wartungsfenstern) ### Gemeinsame Funktionen #### Versionen -PostgreSQL-Engines können aus allen unterstützten Versionen ausgewählt werden (derzeit 14 bis 18) [Siehe "Versioning Policy" auf der offiziellen PostgreSQL-Website](https://www.postgresql.org/support/versioning/) +Die PostgreSQL-Engines können aus allen unterstützten Versionen ausgewählt werden (derzeit 14 bis 18) [Siehe „Versioning Policy“ auf der offiziellen PostgreSQL-Website](https://www.postgresql.org/support/versioning/) -#### Backup +#### Sicherung -Es werden 2 Arten von Backups implementiert: +Zwei Sicherungstypen werden eingesetzt: -- Point in Time Restoration (PiTR): tägliches physisches Backup des gesamten Engines und seiner Transaktionsprotokolle (WAL), das die Wiederherstellung des gesamten Servers zu einem genauen früheren Zeitpunkt ohne Datenverlust ermöglicht. -- Logisches Backup (pg_dump): logische Datenbankexporte für individuelle Wiederherstellung/Export je Datenbank. +- Point-in-Time-Restore (PiTR) : tägliche physische Sicherung der gesamten Engine und ihrer Transaktionsprotokolle (WAL), die eine Wiederherstellung des gesamten Servers auf ein exaktes vorheriges Datum ohne Transaktionsverlust ermöglicht. +- Logische Sicherung (pg_dump) : logische Exporte der Datenbanken für eine individuelle Wiederherstellung oder einen individuellen Export pro Datenbank. -Alle Backups verwenden Cloud-Temple S3-Speicher (SNC-qualifiziert) mit Verschlüsselung im Ruhezustand. +Alle Sicherungen nutzen den S3-Speicher Cloud-Temple (SNC-zertifiziert) mit at-rest-Verschlüsselung. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_postgresql/quickstart.md b/i18n/de/docusaurus-plugin-content-docs/current/managed_postgresql/quickstart.md index 9884794c..188e392b 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/managed_postgresql/quickstart.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/managed_postgresql/quickstart.md @@ -1,24 +1,24 @@ ---- -title: Erste-Schritte-Leitfaden ---- - -Willkommen beim Erste-Schritte-Leitfaden für **Managed PostgreSQL** von Cloud Temple. - -Das Ziel dieses Abschnitts ist es, Sie zu den notwendigen Ressourcen zu führen, um Ihr Produkt in Betrieb zu nehmen. - ---- - -## Bevor Sie beginnen - -> wird gerade verfasst ---- - -## Zugriff auf Ihren Managed PostgreSQL-Cluster - -> wird gerade verfasst ---- - -## Ihre Berechtigungen - -> wird gerade verfasst ---- +--- +title: Schnellstartanleitung +--- + +Willkommen zur Schnellstartanleitung für **PostgreSQL Managed** Cloud Temple. + +Ziel dieses Abschnitts ist es, Sie zu den notwendigen Ressourcen zu leiten, damit Sie Ihr Produkt in die Hand nehmen können. + +--- + +## Bevor Sie beginnen + +> in Bearbeitung +--- + +## Zugriff auf Ihren verwalteten PostgreSQL-Cluster + +> in Arbeit +--- + +## Ihre Berechtigungen + +> in Bearbeitung +--- \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managedproducts_overview.md b/i18n/de/docusaurus-plugin-content-docs/current/managedproducts_overview.md index acdf0b16..8f1b2a84 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/managedproducts_overview.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/managedproducts_overview.md @@ -2,42 +2,42 @@ title: Übersicht der verwalteten Produktangebote --- -## Was ist ein verwaltetes Produkt? +## Was ist ein Managed Product? -Verwaltete Produkte bei Cloud Temple sind Cloud-Dienste, die vollständig vom Anbieter betrieben werden, sodass sich Kunden auf ihre Anwendungen konzentrieren können, ohne die zugrunde liegende Infrastruktur verwalten zu müssen. +Managed Products bei Cloud Temple sind vollständig vom Anbieter verwaltete Cloud-Dienste, die es Kunden ermöglichen, sich auf ihre Anwendungen zu konzentrieren, ohne die zugrunde liegende Infrastruktur verwalten zu müssen. -Diese Produkte umfassen Lösungen wie Managed Kubernetes, Managed MariaDB, Managed PostgreSQL, Managed Firewall oder Managed SOC, bei denen Cloud Temple die Konfiguration, Überwachung, Wartung und Skalierbarkeit übernimmt. +Zu diesen Produkten gehören Lösungen wie Managed Kubernetes, Managed MariaDB, Managed PostgreSQL, Managed Firewall oder Managed SOC, wobei Cloud Temple für die Konfiguration, Überwachung, Wartung und Skalierbarkeit verantwortlich ist. -Sie basieren auf einer souveränen SecNumCloud-qualifizierten Infrastruktur mit Hochverfügbarkeit (Multi-AZ), Automatisierung und SLA-gestütztem Support. +Sie basieren auf einer souveränen, SecNumCloud-zertifizierten Infrastruktur mit hoher Verfügbarkeit (Multi-AZ), Automatisierung und SLA-Support. -**Wesentliche Vorteile** +**Hauptvorteile** -- Betriebliche Entlastung: Cloud Temple verwaltet die Control Plane, Backups, Sicherheit und Updates und vereinfacht so die Orchestrierung Ihrer Deployments. +- Entlastung der Betriebsabläufe: Cloud Temple übernimmt das Control Plane, Backups, Sicherheit und Updates, wodurch die Orchestrierung Ihrer Bereitstellungen vereinfacht wird. -- Industriestandards: einfache, bewährte, getestete und Open-Source-Produkte. +- Marktstandards: einfache, anerkannte, bewährte und Open-Source-Produkte. -## Unser Portfolio an verwalteten Produkten +## Unser Portfolio an Managed Products ### Verwaltete Datenbanken -- **Managed MariaDB (on Kubernetes)**: Eine MariaDB-Datenbanklösung, die „on-top" unserer *Managed Kubernetes* / *Managed Core Kubernetes* Angebote betrieben wird. [Zur Produktseite](./managed_mariadb) +- **Veraltetes MariaDB (on Kubernetes)** : eine MariaDB-Datenbank-Engine-Lösung, die "on-top" auf unseren Angeboten *Veraltetes Kubernetes* / *Core Kubernetes* läuft. [Details zur Lösung](./managed_mariadb) -- **Managed PostgreSQL (on Kubernetes)**: Eine PostgreSQL-Datenbanklösung, die „on-top" unserer *Managed Kubernetes* / *Managed Core Kubernetes* Angebote betrieben wird. [Zur Produktseite](./managed_postgresql). +- **Veraltetes PostgreSQL (on Kubernetes)** : eine PostgreSQL-Datenbank-Engine-Lösung, die "on-top" auf unseren Angeboten *Veraltetes Kubernetes* / *Core Kubernetes* läuft. [Details zur Lösung](./managed_postgresql). -- **Managed MongoDB (on Kubernetes)**: Eine MongoDB-Datenbanklösung, die „on-top" unserer *Managed Kubernetes* / *Managed Core Kubernetes* Angebote betrieben wird. (Dokumentation in Erstellung) +- **Veraltetes MongoDB (on Kubernetes)** : eine MongoDB-Datenbank-Engine-Lösung, die "on-top" auf unseren Angeboten *Veraltetes Kubernetes* / *Core Kubernetes* läuft. (Dokumentation in Vorbereitung) ### Datenprodukte -- **Managed Kafka (on Kubernetes)**: Eine Apache-Kafka-Lösung mit Schema-Registry, die „on-top" unserer *Managed Kubernetes* / *Managed Core Kubernetes* Angebote betrieben wird. (Dokumentation in Erstellung) +- **Managed Kafka (on Kubernetes)** : Eine Apache Kafka-Lösung mit Schema Registry, die "on-top" unserer Angebote *Managed Kubernetes* / *Core Managed Kubernetes* läuft. (Dokumentation in Vorbereitung) -- **Managed Airflow**: *demnächst verfügbar!* +- **Managed Airflow** : *folgt bald!* -- **Managed Superset**: *demnächst verfügbar!* +- **Managed Superset** : *folgt bald!* ### Sicherheitsprodukte -- **Managed KMS**: *demnächst verfügbar!* +- **Verwaltetes KMS** : *kommt bald!* -- **Managed SIEM**: *demnächst verfügbar!* +- **Verwaltetes SIEM** : *kommt bald!* ---- +--- \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/market_place_public.md b/i18n/de/docusaurus-plugin-content-docs/current/market_place_public.md index 0cb6b6da..e9a77417 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/market_place_public.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/market_place_public.md @@ -9,22 +9,22 @@ tags: ## Einkaufsplattformen
-

Sind Sie ein Akteur des öffentlichen Sektors? Das IaaS Cloud Temple-Angebot ist verfügbar über:

+

Sind Sie im öffentlichen Sektor tätig? Das Produkt IaaS Cloud Temple ist verfügbar über:

@@ -32,4 +32,4 @@ tags: Mehr erfahren → -
+ \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/marketplace/concepts.md b/i18n/de/docusaurus-plugin-content-docs/current/marketplace/concepts.md index 2963a7d7..bcc80e63 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/marketplace/concepts.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/marketplace/concepts.md @@ -1,75 +1,81 @@ --- -title: Concepts +title: Konzepte --- -The **Cloud Temple Marketplace** is a centralized platform that facilitates access to and deployment of ready-to-use cloud solutions in a sovereign and secure environment. +Die **Marketplace Cloud Temple** ist eine zentralisierte Plattform, die den Zugriff auf und die Bereitstellung von sofort einsatzbereiten Cloud-Lösungen in einer souveränen und sicheren Umgebung erleichtert. --- ## Definition und Positionierung -Die Cloud Temple Marketplace positioniert sich als Treiber der digitalen Transformation für Unternehmen, die zuverlässige, in Europa gehostete Dienstleistungen mit einfacher und schneller Integration suchen. +Die Cloud Temple Marketplace positioniert sich als Hebel für die digitale Transformation von Unternehmen, die zuverlässige, in Europa gehostete Dienste mit einfacher und schneller Integration suchen. Sie ermöglicht: -- **Zentralisierten** Zugriff auf validierte Partnerlösungen -- **Vereinfachung** der Bereitstellung von Cloud-Umgebungen -- **Beschleunigung** der Umsetzung digitaler Projekte -- **Sicherstellung** der Konformität und Sicherheit der Bereitstellungen +- **Zentralisieren** des Zugriffs auf validierte Partnerlösungen +- **Vereinfachen** der Bereitstellung von Cloud-Umgebungen +- **Beschleunigen** der Umsetzung digitaler Projekte +- **Garantieren** der Compliance und Sicherheit der Bereitstellungen -## Available solution types +--- + +## Verfügbare Lösungstypen ### Virtual Machine Images -Virtual machine images form the current core of the Marketplace offering. These pre-configured images enable the rapid deployment of standardized environments. +Virtuelle Maschinen-Images bilden derzeit das Kernstück des Marketplace-Produkts. Diese vorkonfigurierten Images ermöglichen die schnelle Bereitstellung standardisierter Umgebungen. + +**Eigenschaften:** -**Features:** +- Geprüfte und sichere Images +- Kompatibel mit OpenIaaS- und VMware-Umgebungen +- Bereitstellung in weniger als 10 Minuten +- Native Integration in die Cloud Temple-Konsole -- Validated and secure images -- Compatible with OpenIaaS and VMware environments -- Deployment in under 10 minutes -- Native integration with the Cloud Temple console +### Partnerlösungen -### Partner Solutions +Der Marketplace bietet zudem Zugang zu Lösungen, die von unseren Partner-Softwareherstellern entwickelt wurden und verschiedene Geschäftsbereiche abdecken. -The Marketplace also provides access to solutions developed by our partner vendors, covering various business domains. +**Zugriffsprozess:** -**Access Process:** +- Katalogeinsicht über die Konsole +- Direkte Kontaktaufnahme mit dem Partner +- Bereitstellung auf der Cloud-Temple-Infrastruktur -- Browse the catalog from the console -- Directly contact the partner -- Deploy on the Temple Cloud infrastructure +--- + +## Integration mit dem Ökosystem Cloud Temple -## Integration with the Cloud Temple Ecosystem +### Cloud Temple-Konsole -### Cloud Temple Console +Der Marktplatz ist nativ in die Cloud Temple-Konsole integriert und bietet: -The Marketplace is natively integrated into the Cloud Temple console, offering: +- **Einheitlicher Zugriff** über die übliche Verwaltungsschnittstelle +- **Direkte Bereitstellung** auf bestehenden Infrastrukturen +- **Zentralisiertes Management** von Ressourcen und Lösungen -- **Unified access** from your usual management interface -- **Direct deployment** onto existing infrastructures -- **Centralized management** of resources and solutions +### Kompatibilität mit Diensten -### Compatibility with services +Die Lösungen des Marktplatzes sind darauf ausgelegt, sich nahtlos in folgende Dienste zu integrieren: -The solutions from the Marketplace are designed to seamlessly integrate with: +- **IaaS OpenSource** : Bereitstellung auf OpenIaaS-Infrastruktur +- **IaaS VMware** : Integration in die vSphere-Umgebung -- **OpenSource IaaS**: Deployment on OpenIaaS infrastructure -- **VMware IaaS**: Integration with the vSphere environment +--- -## Security and Compliance +## Sicherheit und Compliance -### Souveräne Hosting +### Souveränes Hosting -Alle über die Marketplace bereitgestellten Lösungen verfügen über: +Alle über den Marketplace bereitgestellten Lösungen profitieren von: -- **Hosting ausschließlich in Frankreich** +- **Hosting in Frankreich** ausschließlich - **SecNumCloud-Zertifizierung** der Infrastruktur -### Validation of Solutions +### Validierung der Lösungen -The solutions offered in the Marketplace undergo a rigorous selection process ensuring: +Die in der Marketplace angebotenen Lösungen unterliegen einer strengen Auswahl, die Folgendes gewährleistet: -- **Compatibility** with the Cloud Temple infrastructure -- **Security** of images and applications -- **Reliability** of publisher partners +- **Kompatibilität** mit der Cloud Temple-Infrastruktur +- **Sicherheit** von Images und Anwendungen +- **Zuverlässigkeit** der Softwarepartner \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/marketplace/marketplace.md b/i18n/de/docusaurus-plugin-content-docs/current/marketplace/marketplace.md index 168ab003..24962bf9 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/marketplace/marketplace.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/marketplace/marketplace.md @@ -2,26 +2,28 @@ title: Übersicht --- -Die __Cloud Temple Marketplace__ bietet einen vereinfachten Zugriff auf essentielle Cloud-Lösungen und erstklassige Software unserer Partner-Entwickler, die in wenigen Klicks in einer sicheren Umgebung bereitgestellt werden. +# Marketplace -Diese souveräne Plattform bündelt fertig konfigurierte Cloud-Lösungen, die es Unternehmen ermöglichen, schnell Dienste bereitzustellen, die genau auf ihre Anforderungen abgestimmt sind – von den Grundlagen der Infrastruktur bis hin zu fortgeschrittenen Unternehmensanwendungen. +Die __Marketplace Cloud Temple__ bietet einen vereinfachten Zugang zu essenziellen Cloud-Lösungen und den besten Softwareprodukten unserer Partner-Verlage, die in wenigen Klicks in einer sicheren Umgebung bereitgestellt werden. -Durch Zusammenarbeit mit einem Netzwerk an anerkannten Technologiepartnern gewährleistet Cloud Temple eine sorgfältige Auswahl an vorgeprüften, zuverlässigen und mit bestehenden Umgebungen kompatiblen Produkten. Eine nahtlose Navigation, detaillierte Produktinformationen und direkter Zugriff auf die Anbieter erleichtern die Entscheidungsfindung und beschleunigen die Bereitstellung innerhalb eines souveränen und sicheren Rahmens. +Diese souveräne Plattform bündelt einsatzbereite Cloud-Lösungen und ermöglicht es Unternehmen, schnell Dienste bereitzustellen, die an ihre Bedürfnisse angepasst sind – von den Grundlagen der Infrastruktur bis hin zu fortschrittlichen Geschäftsanwendungen. + +Durch die Zusammenarbeit mit einem Netzwerk anerkannter Technologiepartner gewährleistet Cloud Temple eine strenge Auswahl vorab geprüfter, zuverlässiger und mit bestehenden Umgebungen kompatibler Produkte. Eine intuitive Navigation, detaillierte Produktbeschreibungen und der direkte Zugang zu den Anbietern erleichtern Entscheidungsprozesse und beschleunigen Bereitstellungen in einem souveränen und sicheren Rahmen.

Konzepte

-

Entdecken Sie die Grundlagen und zentralen Prinzipien, um die Marketplace zu verstehen und zu nutzen.

+

Entdecken Sie die Grundlagen und wesentlichen Prinzipien, um die Marketplace zu verstehen und zu nutzen.

Konzepte erkunden →
-

Quickstart

-

Starten Sie schnell mit der Marketplace, indem Sie klare und einfache Anleitungen befolgen.

- Quickstart starten → +

Schnellstart

+

Starten Sie schnell mit der Marketplace, indem Sie klaren und einfachen Anweisungen folgen.

+ Schnellstart starten →
-
+

Tutorials

-

Lernen Sie Schritt für Schritt, wie Sie die Marketplace mit detaillierten Anleitungen nutzen.

+

Lernen Sie Schritt für Schritt die Nutzung der Marketplace mit detaillierten Anleitungen.

Tutorials entdecken →
-
+
\ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/marketplace/quickstart.md b/i18n/de/docusaurus-plugin-content-docs/current/marketplace/quickstart.md index 44dee5f3..91ed57eb 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/marketplace/quickstart.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/marketplace/quickstart.md @@ -4,71 +4,81 @@ title: Schnellstartanleitung import marketplaceCatalog from '@site/docs/marketplace/images/marketplace_catalog.png' import marketplaceSolutionDetails from '@site/docs/marketplace/images/marketplace_solution_details.png' -# QuickStart für die Cloud Temple Marketplace +# Schnellstart für die Cloud Temple Marketplace -Diese Seite führt Sie durch die ersten Schritte zur Nutzung der **Cloud Temple Marketplace** über die Konsole. Befolgen Sie diese Anleitung, um die verfügbaren Lösungen kennenzulernen und diese schnell bereitzustellen. +Diese Seite führt Sie durch die ersten Schritte zur Nutzung der **Cloud Temple Marketplace** über die Konsole. Befolgen Sie diese Anweisungen, um die verfügbaren Lösungen kennenzulernen und schnell bereitzustellen. + +--- ## Voraussetzungen -Stellen Sie sicher, dass die folgenden Punkte erfüllt sind, bevor Sie beginnen: +Bevor Sie beginnen, stellen Sie sicher, dass folgende Punkte erfüllt sind: -1. **Aktivierte Abonnement**: Um Bereitstellungen durchführen zu können, muss Ihre Organisation mindestens ein Cloud Temple-Service-Abonnement (IaaS OpenSource oder IaaS VMware) abgeschlossen haben. Im Rahmen der Zusammenarbeit mit unseren Partnern ist kein spezifisches Abonnement erforderlich. -2. **Benutzerberechtigungen**: Ihr Benutzerkonto muss über die erforderlichen Berechtigungen verfügen, um auf die Konsole zugreifen zu können, sowie über Schreibrechte für die Zielumgebungen, wenn Sie Ressourcen bereitstellen möchten. -3. **Zielumgebung**: Sie müssen über einen konfigurierten Tenant verfügen, der für die Bereitstellung von Lösungen geeignet ist. +1. **Aktives Abonnement**: Um Bereitstellungen zu ermöglichen, muss Ihre Organisation mindestens einen Cloud Temple-Dienst (IaaS OpenSource ou IaaS VMware) abonniert haben. Im Rahmen der Kontaktaufnahme mit unseren Partnern ist kein spezifisches Abonnement erforderlich. +2. **Benutzerberechtigungen**: Ihr Benutzerkonto muss über die erforderlichen Berechtigungen zum Zugriff auf die Konsole sowie über Schreibrechte für die Zielumgebungen verfügen, wenn Sie dort Ressourcen bereitstellen möchten. +3. **Zielumgebung**: Eine für die Bereitstellung von Lösungen konfigurierte Tenant-Umgebung muss vorhanden sein. -## Access to the Marketplace +--- -### 1. Access via the Console +## Zugriff auf den Marketplace -After logging into the Cloud Temple console, you can access the Marketplace in several ways: +### 1. Zugriff über die Konsole -- **Main menu**: A **Marketplace** menu is available in the main navigation -- **Virtual machine pages**: The Marketplace is also accessible from the virtual machine creation pages in OpenIaaS and VMware environments +Nachdem Sie sich bei der Cloud Temple-Konsole angemeldet haben, können Sie auf den Marketplace auf verschiedene Weise zugreifen: + +- **Hauptmenü** : Ein **Marketplace**-Menü ist in der Hauptnavigation verfügbar +- **Seiten für virtuelle Maschinen** : Der Marketplace ist auch über die Seiten zur Erstellung virtueller Maschinen in den OpenIaaS- und VMware-Umgebungen zugänglich ### 2. Marketplace-Seite -Die Marketplace-Seite zeigt einen Katalog der verfügbaren Lösungen. Jede Lösung zeigt an: +Die Marketplace-Seite stellt einen Katalog der verfügbaren Lösungen bereit. Jede Lösung zeigt folgende Informationen an: -- **Name und Logo** der Lösung -- **Kurze Beschreibung** -- **Herausgeber/Partner** -- **Typ der Lösung** (VM-Image, SaaS-Lösung, usw.) +- **Name und Logo** der Lösung +- **Kurze Beschreibung** +- **Anbieter/Partner** +- **Lösungstyp** (VM-Image, SaaS-Lösung, usw.) -## Viewing solution details +--- + +## Details einer Lösung anzeigen ### Zugriff auf detaillierte Informationen -Wenn Sie auf eine Lösung klicken, gelangen Sie zu einer Detailseite mit folgenden Informationen: +Durch Klicken auf eine Lösung gelangen Sie zu einer Detailseite, die Folgendes umfasst: -- **Vollständige Beschreibung** der Lösung -- **Technische Spezifikationen** (falls zutreffend) -- **Voraussetzungen** für die Bereitstellung -- **Dokumentation**, bereitgestellt durch den Anbieter -- **Verfügbare Bereitstellungsoptionen** +- **Vollständige Beschreibung** der Lösung +- **Technische Spezifikationen** (falls zutreffend) +- **Voraussetzungen** für die Bereitstellung +- **Dokumentation** des Anbieters +- **Bereitstellungsoptionen** verfügbar -## Available actions +--- + +## Verfügbare Aktionen -Depending on the type of solution, different actions are possible: +Je nach Lösungstyp sind verschiedene Aktionen möglich: -### Deployment of Virtual Machine Images +### Bereitstellen von VM-Images -For solutions compatible with your OpenIaaS or VMware environments, you can deploy directly from the Marketplace. +Für Lösungen, die mit Ihren OpenIaaS- oder VMware-Umgebungen kompatibel sind, können Sie direkt aus dem Marketplace bereitstellen. -**Important note:** Direct deployment is only available for images that list your environment among their compatible targets. +**Wichtiger Hinweis:** Die direkte Bereitstellung ist nur für Images verfügbar, die Ihre Umgebung in ihren kompatiblen Zielen unterstützen. -**Detailed guides:** +**Detaillierte Anleitungen:** -- [How to deploy an image on OpenIaaS?](tutorials/deploy_openiaas) -- [How to deploy an image on VMware?](tutorials/deploy_vmware) +- [Wie stelle ich ein Image auf OpenIaaS bereit?](tutorials/deploy_openiaas) +- [Wie stelle ich ein Image auf VMware bereit?](tutorials/deploy_vmware) ### Kontakt zu Partnern -Für Lösungen, die eine Vermittlung erfordern, können Sie den jeweiligen Partner-Editor direkt kontaktieren. +Für Lösungen, die eine Vermittlung erfordern, können Sie den Publisher-Partner direkt kontaktieren. + +**Detaillierte Anleitung:** -**Detaillierter Leitfaden:** +- [Wie kontaktiere ich einen Partner?](tutorials/contact_partner) -- [Wie kontaktiert man einen Partner?](tutorials/contact_partner) +--- \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/marketplace/tutorials/contact_partner.md b/i18n/de/docusaurus-plugin-content-docs/current/marketplace/tutorials/contact_partner.md index a09c8620..647e9b78 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/marketplace/tutorials/contact_partner.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/marketplace/tutorials/contact_partner.md @@ -1,43 +1,43 @@ --- -title: Kontaktieren eines Partners +title: Einen Partner kontaktieren --- import marketplaceContactAccess from '@site/docs/marketplace/images/marketplaceContactAccess.png' import marketplaceContactConfirm from '@site/docs/marketplace/images/marketplaceContactConfirm.png' import marketplaceContactEmail from '@site/docs/marketplace/images/marketplaceContactEmail.png' -Dieses Tutorial führt Sie Schritt für Schritt durch den Prozess des Kontaktaufnahmes mit einem Publisher-Partner über die Cloud Temple Marketplace. +Dieses Tutorial zeigt Ihnen, wie Sie über den Cloud Temple Marketplace Kontakt mit einem Verlagspartner aufnehmen. -## Verwendungskontext +## Anwendungskontext Verwenden Sie diese Funktion, wenn: -- eine Verbindung mit dem Partner hergestellt werden muss -- zusätzliche Informationen benötigt werden -- die Lösung nicht direkt bereitgestellt werden kann (kein VM-Image) +- die Lösung eine Kontaktaufnahme mit dem Partner erfordert +- Sie weitere Informationen erhalten möchten +- die Lösung nicht direkt bereitstellbar ist (kein VM-Image) -## Contact steps +## Kontaktschritte ### 1. Zugriff auf das Formular -Klicken Sie auf der Detailseite einer Partnerlösung auf **Partner kontaktieren**: +Auf der Detailseite einer Partnerlösung klicken Sie auf **Partner kontaktieren** : -### 2. Sending the request +### 2. Senden der Anfrage -Validate and send your contact request: +Bestätigen und senden Sie Ihre Kontaktanfrage: -You will receive an email confirmation of the submission of your request. +Sie erhalten eine Bestätigung per E-Mail über den Versand Ihrer Anfrage. -### 3. Connection +### 3. Kontaktvermittlung -The partner will automatically receive an email with your information: +Der Partner erhält automatisch eine E-Mail mit Ihren Informationen: -**Example email sent to the partner:** +**Beispiel der an den Partner gesendeten E-Mail:** ## Best Practices -- **Seien Sie präzise** bei der Beschreibung Ihres Bedarfs -- **Geben Sie den Nutzungskontext** an -- **Nennen Sie Ihre technischen oder regulatorischen Einschränkungen** +- **Seien Sie präzise** bei der Beschreibung Ihrer Anforderungen +- **Geben Sie den vorgesehenen** Verwendungskontext an +- **Nennen Sie Ihre** technischen oder regulatorischen Einschränkungen \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_openiaas.md b/i18n/de/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_openiaas.md index f912efb9..4d6c166e 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_openiaas.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_openiaas.md @@ -1,50 +1,60 @@ --- -title: Customize an OpenIaaS Image +title: OpenIaaS-Image anpassen --- import marketplaceOpenIaasExportTemplate from '@site/docs/marketplace/images/marketplace_openiaas_export_template.png' import marketplaceOpenIaasExportTemplateButton from '@site/docs/marketplace/images/marketplace_openiaas_export_template_button.png' -import marketplaceOpenIaasDeployFromTemplate from '@site/docs/marketplace/images/marketplace_openiaas_deploy_from_template.png' +import marketplaceOpeniaasDeployFromTemplate from '@site/docs/marketplace/images/marketplace_openiaas_deploy_from_template.png' -This tutorial explains how to customize a virtual machine image (VMI) provided by OpenIaaS Marketplace to create your own reusable templates. +Dieses Tutorial erläutert, wie Sie ein von der Marketplace bereitgestelltes OpenIaaS-VM-Image (VMI) anpassen, um Ihre eigenen wiederverwendbaren Vorlagen zu erstellen. ### Allgemeines Prinzip -Die Marketplace stellt generische Betriebssysteme (OS) bereit. Die Bereitstellung über die Marketplace bietet Ihnen eine gesunde Basis, die schnell und einfach bereitgestellt werden kann, wodurch manuelle Uploads entfallen und Ihre Bereitstellungen beschleunigt werden. +Die Marketplace stellt generische Betriebssysteme (OS) bereit. Das Deployment über die Marketplace bietet Ihnen eine solide Grundlage, die sich schnell und einfach bereitstellen lässt, wodurch manuelle Uploads entfallen und Ihre Bereitstellungen beschleunigt werden. -Sobald das Image bereitgestellt wurde, wird es zu einer virtuellen Maschine, die Sie konfigurieren können. Anschließend können Sie sie als wiederverwendbares Modell für alle Benutzer Ihres Mandanten exportieren. +Nach dem Deployment wird das Image zu einer virtuellen Maschine, die Sie konfigurieren können. Anschließend können Sie sie als wiederverwendbare Vorlage exportieren, die von allen Benutzern Ihres Tenants genutzt werden kann. -## Customization Steps +--- + +## Schritte zur Anpassung + +1. **Das Basis-Image** aus dem Marketplace bereitstellen. +2. **Die virtuelle Maschine** nach Ihren Anforderungen konfigurieren. +3. **Eine Vorlage** aus der konfigurierten virtuellen Maschine erstellen. +4. **Eine neue virtuelle Maschine** aus Ihrer benutzerdefinierten Vorlage bereitstellen. + +--- -1. **Deploy the base image** from the Marketplace. -2. **Configure the virtual machine** according to your requirements. -3. **Create a template** from the configured virtual machine. -4. **Deploy a new virtual machine** from your customized template. +### Schritt 1: Bereitstellen des Basisimages -### Step 1: Deploy the base image +Folgen Sie dem Tutorial [Bereitstellen eines Images auf OpenIaaS](./deploy_openiaas.md), um zu beginnen. -Follow the tutorial [Deploy an image on OpenIaaS](./deploy_openiaas.md) to get started. +--- + +### Schritt 2: Virtuelle Maschine konfigurieren -### Step 2: Configure the virtual machine +Nachdem die virtuelle Maschine bereitgestellt wurde, konfigurieren Sie sie entsprechend Ihren Anforderungen (Softwareinstallation, Sicherheitskonfiguration usw.). -Once the virtual machine has been deployed, configure it according to your requirements (installation of software, security configuration, etc.). +--- -### Step 3: Create a template from the virtual machine +### Schritt 3: Erstellen einer Vorlage aus der virtuellen Maschine -1. From your list of virtual machines, select the configured virtual machine. -2. Select **"Export"** from the action bar. -3. Follow the steps in the Console to export the template. +1. Wählen Sie in der Liste Ihrer virtuellen Maschinen die konfigurierte virtuelle Maschine aus. +2. Wählen Sie in der Aktionsleiste **"Exportieren"** aus. +3. Folgen Sie den Schritten in der Konsole, um die Vorlage zu exportieren. -### Step 4: Deploy from your new template +--- + +### Schritt 4: Bereitstellung aus Ihrem neuen Modell -You can deploy from the **Catalog** page or from the **Virtual Machines** page. +Sie können über die Seite "Katalog" oder über die Seite "Virtuelle Maschinen" bereitstellen. -To deploy from the **Virtual Machines** page: +Um die Bereitstellung von der Seite **Virtuelle Maschinen** durchzuführen: -1. Click on **"Create a virtual machine"**. -2. Choose **"Deploy from a template"**. -3. Select your new template from the list. +1. Klicken Sie auf **"Virtuelle Maschine erstellen"**. +2. Wählen Sie **"Bereitstellung aus einem Modell"**. +3. Wählen Sie Ihr neues Modell in der Liste aus. - + \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_vmware.md b/i18n/de/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_vmware.md index 5952530c..6e9369cc 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_vmware.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_vmware.md @@ -1,52 +1,60 @@ --- -title: Customize a VMware Image +title: VMware-Image anpassen --- import marketplaceVMwareExportTemplate from '@site/docs/marketplace/images/marketplace_vmware_export_template.png' import marketplaceVMwareExportTemplateButton from '@site/docs/marketplace/images/marketplace_vmware_export_template_button.png' import marketplaceVMwareDeployFromTemplate from '@site/docs/marketplace/images/marketplace_vmware_deploy_from_template.png' -This tutorial explains how to customize a VMware virtual machine image (VMI) provided by the Marketplace to create your own reusable templates. +Dieses Tutorial erklärt, wie Sie ein von der Marketplace bereitgestelltes VMware-VM-Image (VMI) anpassen, um Ihre eigenen wiederverwendbaren Vorlagen zu erstellen. ### Allgemeines Prinzip -Die Marketplace stellt generische Betriebssysteme (OS) bereit. Die Bereitstellung über die Marketplace bietet Ihnen eine gesunde Basis, die schnell und einfach bereitgestellt werden kann, wodurch manuelle Uploads entfallen und Ihre Bereitstellungen beschleunigt werden. +Die Marketplace stellt generische Betriebssysteme (OS) bereit. Das Deployment über die Marketplace bietet Ihnen eine solide Grundlage, die sich schnell und einfach bereitstellen lässt, wodurch manuelle Uploads entfallen und Ihre Bereitstellungen beschleunigt werden. -Sobald das Image bereitgestellt wurde, wird es zu einer virtuellen Maschine, die Sie konfigurieren können. Anschließend können Sie sie als wiederverwendbaren Template für alle Benutzer Ihres Mandanten exportieren. +Nach dem Deployment wird das Image zu einer virtuellen Maschine, die Sie konfigurieren können. Anschließend können Sie sie als wiederverwendbare Vorlage exportieren, die von allen Benutzern Ihres Tenants genutzt werden kann. -## Customization Steps +--- + +## Anpassungsschritte -1. **Deploy the base image** from the Marketplace. -2. **Configure the virtual machine** according to your requirements. -3. **Create a template** from the configured virtual machine. -4. **Deploy a new virtual machine** from your customized template. +1. **Bereitstellen des Basisimages** aus dem Marketplace. +2. **Konfigurieren der virtuellen Maschine** nach Ihren Anforderungen. +3. **Erstellen eines Modells** aus der konfigurierten virtuellen Maschine. +4. **Bereitstellen einer neuen virtuellen Maschine** aus Ihrem benutzerdefinierten Modell. + +--- -### Step 1: Deploy the base image +### Schritt 1: Basis-Image bereitstellen -Follow the tutorial [Deploy an image on VMware](./deploy_vmware.md) to get started. +Folgen Sie dem Tutorial [Ein Image auf VMware bereitstellen](./deploy_vmware.md), um zu beginnen. --- -### Step 2: Configure the virtual machine +### Schritt 2: Virtuelle Maschine konfigurieren -Once the virtual machine has been deployed, configure it according to your requirements (installation of software, security configuration, etc.). +Nachdem die virtuelle Maschine bereitgestellt wurde, konfigurieren Sie sie nach Ihren Anforderungen (Softwareinstallation, Sicherheitskonfiguration, usw.). -### Step 3: Create a template from the virtual machine +--- + +### Schritt 3: Eine Vorlage aus der virtuellen Maschine erstellen -1. From your list of virtual machines, select the configured virtual machine. -2. Select **"Export"** from the action bar. -3. Follow the steps in the Console to export the template. +1. Wählen Sie in der Liste Ihrer virtuellen Maschinen die konfigurierte virtuelle Maschine aus. +2. Wählen Sie in der Aktionsleiste **"Exportieren"** aus. +3. Folgen Sie den Schritten in der Konsole, um die Vorlage zu exportieren. -### Step 4: Deploy from your new template +--- + +### Schritt 4: Vom neuen Modell bereitstellen -You can deploy from the **Catalog** page or from the **Virtual Machines** page. +Sie können vom Katalog oder von der Seite "Virtuelle Maschinen" bereitstellen. -To deploy from the **Virtual Machines** page: +So stellen Sie von der Seite **Virtuelle Maschinen** bereit: -1. Click on **"Create virtual machine"**. -2. Choose **"Deploy from template"**. -3. Select your new template from the list. +1. Klicken Sie auf **"Virtuelle Maschine erstellen"**. +2. Wählen Sie **"Vom Modell bereitstellen"**. +3. Wählen Sie Ihr neues Modell aus der Liste aus. - + \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_openiaas.md b/i18n/de/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_openiaas.md index 6f743073..40c69f9c 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_openiaas.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_openiaas.md @@ -1,48 +1,48 @@ --- -title: Deploy an image on OpenIaaS +title: Image auf OpenIaaS bereitstellen --- import marketplaceOpeniaasDeployment from '@site/docs/marketplace/images/marketplace_openiaas_deploy.png' import marketplaceOpeniaasConfig from '@site/docs/marketplace/images/marketplace_openiaas_config.png' -This tutorial guides you through deploying a virtual machine image from the Cloud Temple Marketplace to your OpenIaaS environment. +Dieses Tutorial zeigt Ihnen, wie Sie ein Image einer virtuellen Maschine aus der Cloud Temple Marketplace in Ihre OpenIaaS-Umgebung bereitstellen. ## Voraussetzungen -- Ein eingerichtetes OpenIaaS-Umgebung bereitstellen +- Verfügen über ein konfiguriertes OpenIaaS-Umfeld - Berechtigungen zum Erstellen von virtuellen Maschinen besitzen - Das Image muss **OpenIaaS** in seinen kompatiblen Zielen enthalten -## Deployment steps +## Deployment-Schritte -### 1. Selection and Deployment +### 1. Auswahl und Bereitstellung -From the detail page of a compatible OpenIaaS solution, select your target environment and click **Deploy**: +Wählen Sie auf der Detailseite einer OpenIaaS-kompatiblen Lösung Ihre Zielumgebung aus und klicken Sie auf **Bereitstellen** : -### 2. Virtual Machine Configuration +### 2. Konfiguration der virtuellen Maschine -Configure the basic settings of your virtual machine: +Konfigurieren Sie die grundlegenden Einstellungen Ihrer virtuellen Maschine: -- **VM Name** -- **Resources** (CPU, RAM) -- **Storage** -- **Network** +- **Name** der VM +- **Ressourcen** (CPU, RAM) +- **Speicher** +- **Netzwerk** -Deployment typically takes less than 10 minutes, depending on the image size. +Die Bereitstellung dauert in der Regel weniger als 10 Minuten, abhängig von der Größe des Images. -## Alternative Access +## Alternativer Zugriff -You can also access Marketplace images directly from the **Virtual Machines** page of your OpenIaaS environment: +Sie können auf Marketplace-Images auch direkt über die Seite **Virtuelle Maschinen** Ihrer OpenIaaS-Umgebung zugreifen : -1. Go to **Virtual Machines** > **Create a VM** -2. Select **Marketplace Images** as the source option -3. Choose your solution from the integrated catalog +1. Navigieren Sie zu **Virtuelle Maschinen** > **VM erstellen** +2. Wählen Sie **Marketplace-Images** in der Quellenauswahl aus +3. Wählen Sie Ihre Lösung aus dem integrierten Katalog aus -## Deployment-Verfolgung +## Bereitstellungsstatus verfolgen -Sobald der Deployment-Vorgang gestartet wurde: +Sobald die Bereitstellung gestartet wurde: - Verfolgen Sie den Fortschritt über die OpenIaaS-Konsole -- Die VM erscheint in Ihrer Liste virtueller Maschinen +- Die VM wird in Ihrer Liste der virtuellen Maschinen angezeigt \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_vmware.md b/i18n/de/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_vmware.md index 414fd2a2..5baaf02d 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_vmware.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_vmware.md @@ -1,48 +1,48 @@ --- -title: Deploy an image on VMware +title: Bereitstellen eines Images auf VMware --- import marketplaceVmwareDeployment from '@site/docs/marketplace/images/marketplace_vmware_deploy.png' import marketplaceVmwareConfig from '@site/docs/marketplace/images/marketplace_vmware_config.png' -This tutorial guides you through deploying a virtual machine image from the Cloud Temple Marketplace to your VMware environment. +Dieses Tutorial führt Sie bei der Bereitstellung eines Images einer virtuellen Maschine aus dem Cloud Temple Marketplace in Ihre VMware-Umgebung. ## Voraussetzungen -- Ein konfiguriertes VMware-Umgebung bereitstellen -- Berechtigungen zum Erstellen von virtuellen Maschinen besitzen -- Das Image muss **VMware** in seinen kompatiblen Zielen enthalten +- Verfügen über eine konfigurierte VMware-Umgebung +- Über die Berechtigungen zum Erstellen von virtuellen Maschinen verfügen +- Das Image muss **VMware** in den kompatiblen Zielen enthalten -## Deployment steps +## Deployment-Schritte -### 1. Selection and Deployment +### 1. Auswahl und Bereitstellung -From the detail page of a compatible VMware solution, select your target environment and click **Deploy**: +Wählen Sie auf der Detailseite einer VMware-kompatiblen Lösung Ihre Zielumgebung aus und klicken Sie auf **Bereitstellen** : -### 2. Virtual Machine Configuration +### 2. Konfiguration der virtuellen Maschine -Configure the basic settings of your virtual machine: +Konfigurieren Sie die grundlegenden Parameter Ihrer virtuellen Maschine: -- **VM Name** -- **Resources** (CPU, RAM) -- **Storage** -- **Network** +- **Name** der VM +- **Ressourcen** (CPU, RAM) +- **Speicher** +- **Netzwerk** -Deployment typically takes less than 10 minutes, depending on the image size. +Die Bereitstellung dauert in der Regel weniger als 10 Minuten, abhängig von der Größe des Images. -## Alternative Access +## Alternativer Zugriff -You can also access Marketplace templates directly from the VMware interface: +Sie können auch direkt über die VMware-Oberfläche auf die Marketplace-Templates zugreifen: -1. Go to **vSphere** > **Deploy a VM** -2. Select **Marketplace Template** as the source -3. Browse the available images in the integrated catalog +1. Navigieren Sie zu **vSphere** > **VM bereitstellen** +2. Wählen Sie **Marketplace-Templates** als Quelle +3. Durchsuchen Sie die im integrierten Katalog verfügbaren Images -## Deployment Monitoring +## Deployment-Verfolgung -Once the deployment has been initiated: +Sobald das Deployment gestartet wurde: -- Monitor the progress from the VMware console -- The VM will appear in your vSphere inventory +- Verfolgen Sie den Fortschritt über die VMware-Konsole +- Die VM wird in Ihrem vSphere-Inventar angezeigt \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/network/internet/advanced_concepts.md b/i18n/de/docusaurus-plugin-content-docs/current/network/internet/advanced_concepts.md index c937048d..fb9328bf 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/network/internet/advanced_concepts.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/network/internet/advanced_concepts.md @@ -1,70 +1,70 @@ --- -title: Advanced Concepts +title: Erweiterte Konzepte --- ## Introduction -This page presents the advanced BGP routing features available on the Cloud Temple Internet infrastructure. +Diese Seite stellt die erweiterten BGP-Routing-Funktionen vor, die auf der Cloud-Temple-Internet-Infrastruktur verfügbar sind. -## BGP Communities +## BGP-Communities -Cloud Temple bietet eine Vielzahl von BGP Communities, mit denen Sie die Pfadauswahl für Ihren Datenverkehr steuern können. +Cloud Temple bietet eine Vielzahl von BGP-Communities, die es ermöglichen, die Pfadauswahl für Ihren Datenverkehr zu steuern. -### What is a BGP community? +### Was ist eine BGP-Community? -BGP communities are optional attributes that can be attached to BGP routes to mark, filter, or influence routing. +BGP-Communities sind optionale Attribute, die an BGP-Routen angehängt werden können, um sie zu markieren, zu filtern oder das Routing zu beeinflussen. -### Actions on Local Preference +### Aktionen zur Local Preference -The following BGP communities allow you to modify the **local preference** of your prefixes, thereby influencing the path selection toward the machine announcing the prefix within AS33930. +Die folgenden BGP-Communities ermöglichen es Ihnen, die **Local Preference** Ihrer Präfixe zu ändern und somit die Pfadauswahl für den Pfad zur Maschine, die das Präfix ankündigt, innerhalb des AS33930 zu beeinflussen. -You can adjust the local preference of a prefix within the Cloud Temple Internet backbone in AS 33930 by using the following communities: +Sie können die Local Preference eines Präfixes innerhalb des Cloud Temple Internet-Backbones im AS 33930 mit den folgenden Communities ändern: -| BGP Community | Priority | Local Preference | -|:--------------|:---------|:----------------:| -| 33930:40010 | Low priority | 10 | -| *Default* | Cloud Temple Backbone (default) | 100 | -| 33930:40150 | Medium priority | 150 | -| 33930:40200 | High priority | 200 | -| 33930:40250 | Maximum priority | 250 | +| BGP-Community | Priorität | Local Preference | +|:---------------|:------------|:----------------:| +| 33930:40010 | Niedrige Priorität | 10 | +| *Standard* | Cloud Temple Backbone (Standard) | 100 | +| 33930:40150 | Mittlere Priorität | 150 | +| 33930:40200 | Hohe Priorität | 200 | +| 33930:40250 | Maximale Priorität | 250 | -**Note:** The higher the local preference value, the more preferred the path is in BGP routing decisions. By default, without a specific community, your prefixes use the standard local preference of 100. +**Hinweis:** Je höher der Wert der Local Preference ist, desto bevorzugter wird der Pfad bei BGP-Routing-Entscheidungen. Standardmäßig verwenden Ihre Präfixe ohne eine spezifische Community die Standard-Local Preference von 100. ## Konfiguration -Um eine BGP-Community für Ihre Ankündigungen zu verwenden: +Um eine BGP-Community auf Ihre Ankündigungen anzuwenden: -1. Erstellen Sie eine Policy, die den Präfix mit der Community markiert. -2. Wenden Sie diese Policy auf die BGP-Sitzung mit den Cloud Temple-Routen-Servern an. +1. Definieren Sie eine Policy, die das Prefix mit der Community taggt +2. Wenden Sie diese Policy auf die BGP-Sitzung mit den Cloud Temple Route-Servern an -### Beispiel einer Konfiguration (bird) +### Beispielkonfiguration (bird) ```junos -# Define a policy that tags the prefix with the community +# Définir une policy qui tag le préfixe avec la communauté filter p_bkb_rs_001_export { - if net ~ [203.0.113.0/32] - then { - bgp_community.add((33930,40250)); - accept; - } - if net ~ [203.0.113.1/32] - then { - accept; - } - else reject; +if net ~ [203.0.113.0/32] + then { + bgp_community.add((33930,40250)); + accept; + } +if net ~ [203.0.113.1/32] + then { + accept; + } +else reject; } -# Apply this policy to the BGP session with the Cloud Temple route servers -protocol bgp p_bkb_rs_001 { - local 100.64.3.226 as 65551; - neighbor 100.64.0.1 as 33930; - multihop; - keepalive time 10; - hold time 30; - ipv4 { - export filter p_bkb_rs_001_export; - }; +# Appliquer cette policy à la session BGP avec les serveurs de routes Cloud Temple +protocol bgp p_bkb_rs_001 { + local 100.64.3.226 as 65551; + neighbor 100.64.0.1 as 33930; + multihop; + keepalive time 10; + hold time 30; + ipv4 { + export filter p_bkb_rs_001_export; + }; } ``` -The prefix 203.0.113.0/32 will be advertised with a **local preference of 250**, and the prefix 203.0.113.1/32 will be advertised with a **local preference of 100** (default) within AS33930. +Das Präfix 203.0.113.0/32 wird mit einer **Local Preference von 250** und das Präfix 203.0.113.1/32 wird mit einer **Local Preference von 100** (par défaut) innerhalb von AS33930 angekündigt. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/network/internet/concepts.md b/i18n/de/docusaurus-plugin-content-docs/current/network/internet/concepts.md index 0d5eae8b..4ee35ffe 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/network/internet/concepts.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/network/internet/concepts.md @@ -2,118 +2,118 @@ title: Konzepte --- -## Cloud Internet Infrastructure +## CloudTemple Internet-Infrastruktur -CloudTemple operates as a **Cloud Service Provider (CSP)** with an independent, highly resilient, and secure Internet infrastructure. Our operator-grade connectivity is based on our own Autonomous System Number (ASN), giving us full control over routing and ensuring high availability for all our services. +CloudTemple agiert als **Cloud Service Provider (CSP)** mit einer eigenständigen, hochgradig resilienten und sicheren Internetinfrastruktur. Unsere Konnektivität auf Operator-Ebene stützt sich auf eine eigene AS-Nummer (Autonomous System Number), die uns eine vollständige Kontrolle über das Routing ermöglicht und eine hohe Verfügbarkeit für alle unsere Dienste garantiert. -This independent infrastructure enables us to offer advanced Internet connectivity features, tailored to all CloudTemple service offerings—from dedicated hosting to IaaS solutions and PaaS services. +Diese eigenständige Infrastruktur ermöglicht es uns, eine Internetkonnektivität mit erweiterten Funktionen anzubieten, die auf sämtliche CloudTemple-Angebote zugeschnitten ist, vom Dedicated Hosting über IaaS-Lösungen bis hin zu PaaS-Diensten. ## Netzwerkarchitektur und Redundanz -Unser Netzwerk verfügt über eine redundant ausgelegte Architektur, die darauf abzielt, die Leistung zu optimieren und die kontinuierliche Verfügbarkeit des Dienstes sicherzustellen. CloudTemple verfügt über ein eigenständiges, unabhängiges System mit einem Satz öffentlicher IP-Präfixe, das eine direkte globale Konnektivität gewährleistet. +Unser Netzwerk basiert auf einer redundanten Architektur, die für optimierte Leistung und garantierte Dienstkontinuität ausgelegt ist. CloudTemple verfügt über ein eigenständiges Autonomes System mit zugewiesenen öffentlichen IP-Präfixen, das eine direkte globale Konnektivität sicherstellt. -Diese Konnektivität basiert auf **zwei getrennten Wegen**, um die Resilienz zu maximieren: +Diese Konnektivität stützt sich auf **zwei separate Pfade**, um die Resilienz zu maximieren: -**Transit-Konnektivität:** Zwei Haupt-Transit-Provider sorgen für globale Redundanz und ermöglichen einen optimalen Routing des Internet-Traffics zu unseren Infrastrukturen. +**Transit-Konnektivität:** Zwei primäre Transit-Betreiber gewährleisten die globale Redundanz und ermöglichen ein optimales Routing des Internet-Traffics zu unseren Infrastrukturen. -**Internet Exchange Points (IXP):** Unser Vorhandensein an zwei Internet Exchange Points (IXP) in Paris ermöglicht eine signifikante Reduzierung der Latenz für europäische Nutzer und verbessert die Leistung regionaler Dienste. Diese Vorgehensweise gewährleistet zudem eine natürliche Redundanz gegenüber Ausfällen von Anbietern. +**Exchange Points (IXP):** Unsere Präsenz an zwei Internet Exchange Points (IXP) in Paris ermöglicht es uns, die Latenz für europäische Nutzer erheblich zu reduzieren und gleichzeitig die Leistung regionaler Dienste zu verbessern. Dieser Ansatz gewährleistet zudem eine natürliche Redundanz gegenüber Ausfällen von Providern. -Die Verwendung des BGP4-Protokolls sorgt für eine effiziente Weiterleitung Ihres Internet-Verkehrs zur aktiven Gateway-Instanz Ihrer Architektur, insbesondere in Szenarien mit Multi-Zone-Deployment, wie beispielsweise bei Clustern von Firewalls, die über zwei Verfügbarkeitszonen verteilt sind. +Der Einsatz des BGP4-Protokolls gewährleistet ein effizientes Routing Ihrer Internet-Datenströme zum aktiven Gateway Ihrer Architektur, insbesondere in Szenarien mit Multi-Availability-Zone-Deployments, wie beispielsweise bei Firewall-Clustern, die auf zwei Verfügbarkeitszonen verteilt sind. -## Integrated DDoS Protection +## Integrierter DDoS-Schutz -All incoming traffic to the CloudTemple infrastructure benefits from advanced DDoS protection provided by **F5**, a global leader in network security. This protection operates transparently and automatically. +Der gesamte eingehende Datenverkehr zur CloudTemple-Infrastruktur profitiert von einem fortschrittlichen Anti-DDoS-Schutz, der von **F5**, einem weltweit führenden Anbieter für Netzwerksicherheit, bereitgestellt wird. Dieser Schutz funktioniert nahtlos und automatisch. -Volumetric attacks are detected and mitigated directly at the F5 network edge, well before reaching the CloudTemple network. This upstream filtering ensures that no congestion can affect our Internet connections, and only legitimate requests reach our infrastructure. +Volumetrische Angriffe werden direkt am Netzwerkrand von F5 erkannt und gemildert, noch bevor sie das CloudTemple-Netzwerk erreichen. Diese vorgelagerte Filterung stellt sicher, dass keine Überlastung unsere Internetverbindungen beeinträchtigen kann, und nur legitime Anfragen erreichen unsere Infrastrukturen. -**All CloudTemple services** are protected at no additional cost, including customer prefixes that can be migrated to our infrastructure. This integrated approach transforms a security requirement into an operational advantage for our customers. +**Alle CloudTemple-Dienste** profitieren von diesem Schutz ohne Mehrkosten, einschließlich der Kunden-Prefixes, die in unsere Infrastruktur migriert werden können. Dieser integrierte Ansatz verwandelt eine Sicherheitsanforderung in einen betrieblichen Vorteil für unsere Kunden. -## Assignment of Public IP Addresses +## Zuweisung öffentlicher IP-Adressen -CloudTemple offers a flexible system for assigning Provider Aggregated (PA) public IP addresses, allowing clients to reserve public IP addresses **individually** according to their specific requirements. +CloudTemple bietet ein flexibles System zur Vergabe von Provider Aggregated (PA)-IP-Adressen, das es Kunden ermöglicht, öffentliche IP-Adressen **einzeln** nach ihren spezifischen Anforderungen zu reservieren. -### Reservation process +### Reservierungsprozess -The reservation of public IP addresses is performed directly via the CloudTemple console, enabling self-service and immediate management: +Die Reservierung öffentlicher IP-Adressen erfolgt direkt über die CloudTemple-Konsole und ermöglicht eine eigenständige sowie sofortige Verwaltung: -**Via the console API:** Integration possible into your automation and provisioning workflows. +**Über die Konsolen-API:** Integration in Ihre Automatisierungs- und Bereitstellungsworkflows möglich. -**Via the web console:** Intuitive interface accessible from the *Internet* section of your client area. +**Über die Webkonsole:** Intuitive Benutzeroberfläche, die über den Bereich *Internet* in Ihrem Kundenbereich erreichbar ist. -The reservation process follows these simple steps: log in to the console, navigate to *Internet* > *Manage IP addresses*, select *Reserve a new address*, choose between IPv4 or IPv6, then confirm the order. +Der Reservierungsprozess folgt diesen einfachen Schritten: Anmeldung bei der Konsole, Navigation zu *Internet* > *IP-Adressen verwalten*, Auswahl von *Neue Adresse reservieren*, Auswahl zwischen IPv4 oder IPv6 und abschließende Bestätigung der Bestellung. -### Billing +### Abrechnung -Billing for public IP addresses is based on unit of work (UoW) and starts as soon as the IP address is reserved, ensuring full cost transparency. +Die Abrechnung öffentlicher IP-Adressen erfolgt pro Abrechnungseinheit (UO) und beginnt mit der Reservierung der Adresse, was eine vollständige Kostentransparenz gewährleistet. -| Reference | Unit | SKU | -|-----------|------|-----| -| Network - Dedicated Public IPv4 | 1 IPv4 | RSIP-IP4-UNIT | -| Network - Dedicated Public IPv6 | 1 IPv6 | RSIP-IP6-UNIT | +| Referenz | Einheit | SKU | +|----------|---------|-----| +| Netzwerk - Dedizierte öffentliche IPv4 | 1 IPv4 | RSIP-IP4-UNIT | +| Netzwerk - Dedizierte öffentliche IPv6 | 1 IPv6 | RSIP-IP6-UNIT | -## IPv4 Blocks +## IPv4-Blöcke -The delivery of IPv4 addresses is subject to **available stock** for our customers, per IP address. +Die Bereitstellung einer IPv4 erfolgt **solange der Vorrat reicht** für unsere Kunden, pro IP-Adresse. -To order IPv4 addresses, go to the ***'Public IPs'*** menu under Networks in the green bar on the left, and click the ***"Order IPv4 addresses or IPv6 prefixes"*** button. +Die Bestellung von IPv4-Adressen erfolgt über das Menü ***'Öffentliche IPs'*** im Menü Netzwerke in der grünen Leiste links, über die Schaltfläche ***"IPv4-Adressen oder IPv6-Präfixe bestellen"***. -You can also view the address blocks assigned to you in the same menu. +In diesem Menü können Sie auch die Ihnen zugewiesenen Adressblöcke einsehen. -| Reference | Unit | SKU | +| Referenz | Einheit | SKU | | ----------------------------- | ------ | ---------------------------- | -| Public IPv4 Network | IPv4/32 | csp:(region):network:ipv4:v2 | +| Netzwerk - Dedizierte öffentliche IPv4 | IPv4/32 | csp:(region):network:ipv4:v2 | -## IPv6 Blocks +## IPv6-Blöcke -The IPv6 prefix command is performed from the ***'Public IPs'*** menu under Networks in the green sidebar, using the ***"Order IPv4 addresses or IPv6 prefixes"*** button. +Die Bestellung von IPv6-Präfixen erfolgt über das Menü ***'Öffentliche IPs'*** im Menü Netzwerke in der grünen Seitenleiste links, über die Schaltfläche ***"IPv4-Adressen oder IPv6-Präfixe bestellen"***. -You can also view the prefixes assigned to you within the same menu. +In diesemselben Menü können Sie die Ihnen zugewiesenen Präfixe einsehen. -| Reference | Unit | SKU | +| Referenz | Einheit | SKU | | ------------------------------------- | ------- | ---------------------------- | -| Network - Dedicated Public IPv6 Range | IPv6/48 | csp:(region):network:ipv6:v1 | +| Netzwerk - Dedizierte öffentliche IPv6-Bereiche | IPv6/48 | csp:(region):network:ipv6:v1 | -## IP Prefix Migration for Clients +## Migration von Kunden-IP-Präfixen -CloudTemple supports clients wishing to migrate their own IP prefixes to our infrastructure, thereby facilitating migration projects while preserving existing network identity. +CloudTemple begleitet Kunden, die ihre eigenen IP-Präfixe in unsere Infrastruktur migrieren möchten, und erleichtert so die Migrationsprojekte, unter Beibehaltung der bestehenden Netzwerkidentität. -### Benefits of the migration +### Vorteile der Migration -This approach allows you to retain your IP identity when migrating to CloudTemple, ensuring seamless continuity for your applications and clients. You maintain full control over the use of your IP addresses while benefiting from the CloudTemple infrastructure. +Dieser Ansatz ermöglicht es, Ihre IP-Identität bei der Migration zu CloudTemple beizubehalten und gewährleistet so eine nahtlose Kontinuität für Ihre Anwendungen und Kunden. Sie behalten die vollständige Kontrolle über die Nutzung Ihrer IP-Adressen, während Sie gleichzeitig von der CloudTemple-Infrastruktur profitieren. -### Integration Process +### Integrationsprozess -Your IP prefix (e.g. `203.0.113.0/24`) is integrated into the CloudTemple backbone network and advertised from our AS. Once integrated, the prefix can be freely assigned to your virtual machines, load balancers, or other services. +Ihr IP-Präfix (z. B. `203.0.113.0/24`) wird in das CloudTemple-Backbone-Netzwerk integriert und von unserer AS bekannt gegeben. Nach der Integration kann das Präfix beliebig Ihren virtuellen Maschinen, Load Balancern oder anderen Diensten zugewiesen werden. -**All addresses within the migrated prefix automatically benefit from F5 anti-DDoS protection**, without additional configuration or extra cost. +**Alle Adressen des migrierten Präfixes profitieren automatisch vom F5 Anti-DDoS-Schutz**, ohne zusätzliche Konfiguration oder Mehrkosten. -### Requirements +### Voraussetzungen -Migrating IP prefixes requires that the prefix be registered with a recognized Internet registry (ARIN, RIPE, APNIC, etc.) and that you are its legitimate owner. BGP management can be handled by your own team or supported by CloudTemple's technical team, according to your preferences. +Die Migration von IP-Präfixen erfordert, dass das Präfix in einem anerkannten Internet-Register (ARIN, RIPE, APNIC, usw.) eingetragen ist und Sie der rechtmäßige Eigentümer sind. Die BGP-Verwaltung kann entweder von Ihren Teams übernommen oder nach Ihren Präferenzen durch den technischen Support von CloudTemple unterstützt werden. -## Reserved Internet Bandwidth +## Reservierung von Internet-Bandbreite -Internet bandwidth can be reserved in increments of 100 Mbps. The maximum available capacity for a gateway is 10 Gbps, potentially limited by the technical specifications of your gateway. +Die Internet-Bandbreite kann in Schritten von 100 Mbps reserviert werden. Die maximale verfügbare Kapazität pro Gateway beträgt 10 Gbps, die potenziell durch die technischen Eigenschaften Ihres Gateways begrenzt sein kann. -Billing is based on the 95th percentile over the billing period, typically one month. You may therefore occasionally benefit from bursts exceeding your reserved capacity. +Die Abrechnung erfolgt basierend auf dem 95. Perzentil über den Abrechnungszeitraum, der in der Regel einen Monat beträgt. Sie können daher gelegentlich von einem Burst über Ihre reservierte Kapazität hinaus profitieren. -| Reference | Unit | SKU | +| Referenz | Einheit | SKU | | ----------------------------------------- | -------- | --------------------------------------- | -| Network - Reserved Internet Bandwidth | 100 Mbps | csp:(region):network:trafic:internet:v1 | +| Netzwerk - Reservierte Internet-Bandbreite| 100 Mbps | csp:(region):network:trafic:internet:v1 | -***Note:*** -*There is no **volume-based billing** of the type **'egress fees'**. You only pay for the reserved bandwidth.__* +***Hinweis:*** +*Es gibt keine **volumetrische Abrechnung** in Form von **'egress fees'. Sie zahlen nur die Bandbreitenreservierung.*** -## Availability by Offer +## Produktverfügbarkeit -All of these Internet connectivity features are available across all CloudTemple offers, ensuring a consistent experience regardless of the service type used. +Sämtliche dieser Funktionen zur Internetkonnektivität sind in allen CloudTemple-Angeboten verfügbar und gewährleisten ein einheitliches Nutzererlebnis, unabhängig von der Art des genutzten Dienstes. -| Offer | Internet Connectivity | DDoS Protection | RSIP Management | Prefix Migration | +| Angebot | Internetkonnektivität | DDoS-Schutz | RSIP-Verwaltung | Prefix-Migration | |-------|----------------------|------------------|---------------|-------------------| -| Dedicated Hosting | ✓ | ✓ | ✓ | ✓ | +| Dediziertes Hosting | ✓ | ✓ | ✓ | ✓ | | Shared Hosting | ✓ | ✓ | ✓ | ✓ | | IaaS VMware | ✓ | ✓ | ✓ | ✓ | -| IaaS OpenSource | ✓ | ✓ | ✓ | ✓ | +| IaaS Open Source | ✓ | ✓ | ✓ | ✓ | | PaaS OpenShift | ✓ | ✓ | ✓ | ✓ | -This unified approach ensures that all our customers benefit from high-quality carrier-grade Internet access, integrated security, and advanced features, regardless of their technological choice. +Dieser einheitliche Ansatz stellt sicher, dass alle unsere Kunden einen Internetzugang in Carrier-Grade-Qualität mit integrierter Sicherheit und erweiterten Funktionen nutzen können, unabhängig von ihrer Technologieentscheidung. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/network/internet/internet.md b/i18n/de/docusaurus-plugin-content-docs/current/network/internet/internet.md index 9b2f8e5b..2b0fcb51 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/network/internet/internet.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/network/internet/internet.md @@ -2,22 +2,24 @@ title: Übersicht --- -Cloud Temple stellt seinen Kunden Blöcke von __öffentlichen IP-Adressen__ mit mindestens 1 IPv4 oder 64 IPv6, die bei RIPE registriert sind, zur Verfügung, um Ihre Internetkonnektivität zu ermöglichen. +# Internet + +Cloud Temple stellt seinen Kunden Blöcke von mindestens 1 IPv4- oder 64 IPv6-__öffentlichen IP-Adressen__ bereit, die beim RIPE registriert sind, um Ihre Internetkonnektivität zu ermöglichen.

Konzepte

-

Entdecken Sie die Grundlagen und wesentlichen Prinzipien, um unsere Infrastruktur zu verstehen und zu beherrschen.

+

Erfahren Sie die Grundlagen und wesentlichen Prinzipien, um unsere Infrastruktur zu verstehen und zu beherrschen.

Konzepte erkunden →
-

Schnellstart

+

Quickstart

Starten Sie schnell mit unseren Ressourcen, indem Sie klaren und einfachen Anweisungen folgen.

- Schnellstart starten → + Quickstart starten →

Tutorials

-

Lernen Sie Schritt für Schritt, wie Sie unsere Dienste mit detaillierten Anleitungen konfigurieren und nutzen können.

+

Lernen Sie Schritt für Schritt die Konfiguration und Nutzung unserer Dienste mit detaillierten Anleitungen.

Tutorials entdecken →
-
+ \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/network/internet/tutorials/pfSense.md b/i18n/de/docusaurus-plugin-content-docs/current/network/internet/tutorials/pfSense.md index b266bd1a..c15a0da4 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/network/internet/tutorials/pfSense.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/network/internet/tutorials/pfSense.md @@ -1,8 +1,8 @@ --- -title: Deploy a pfSense open source firewall +title: Bereitstellen einer Open-Source-PfSense-Firewall tags: - internet - - tutorials + - anleitungen --- import pfSenseWebui from '@site/docs/network/internet/images/pfsense_webui.png'; import pfSenseHomePage from '@site/docs/network/internet/images/pfsense_home_page.png'; @@ -16,117 +16,117 @@ import routeServerNeighbor from '@site/docs/network/internet/images/route_server import neighborsOverview from '@site/docs/network/internet/images/neighbors_overview.png'; import pfSenseBgpStatus from '@site/docs/network/internet/images/pfsense_bgp_status.png'; -This guide will help you deploy your __open source pfSense firewall__ in the Cloud of Trust in just a few minutes. +Dieser Leitfaden hilft Ihnen, Ihre __Open-Source-PfSense-Firewall__ im Cloud de Confiance in nur wenigen Minuten bereitzustellen. ## Voraussetzungen -Die Voraussetzungen für diese Anleitung sind: +Die Voraussetzungen für diese Anleitung sind wie folgt: -1. Ein Abonnement für das Cloud Temple-Angebot: Sie müssen über Ihre Organisation, Ihren Mandanten und Ihre Zugangsdaten verfügen. -2. Berechtigungen für das Compute-Modul. +1. Ein Abonnement für das Cloud Temple-Produkt abgeschlossen haben: Sie müssen über Ihre Organisation, Ihren Tenant und Ihre Zugriffsrechte verfügen, +2. Berechtigungen für das Compute-Modul besitzen. -In diesem Dokument werden die Schritte beschrieben, die zum Bereitstellen eines virtuellen Firewalls pfSense erforderlich sind. +Dieses Dokument beschreibt die Schritte zur Bereitstellung eines virtuellen pfSense-Firewalls. -## Deploy a pfSense open source firewall +## Bereitstellung einer Open-Source-pfSense-Firewall -[pfSense](https://www.pfsense.org) is an open source project based on FreeBSD that enables the deployment of a virtual firewall. +[pfSense](https://www.pfsense.org) ist ein Open-Source-Projekt auf Basis von FreeBSD, das die Einrichtung eines virtuellen Firewalls ermöglicht. -A pfSense firewall is managed via a web interface, so you need a second machine with a graphical interface that has an IP address within the same LAN network as the firewall in order to configure it. +Ein pfSense-Firewall wird über eine Weboberfläche verwaltet, daher benötigt man einen zweiten Rechner mit grafischer Oberfläche +und einer IP-Adresse im selben LAN-Netzwerk wie der Firewall, um ihn konfigurieren zu können. -We will need a set of two virtual machines: +Wir benötigen zwei VMs: -- The first one will be the machine on which we deploy the firewall. -- The second one will be the machine from which we administer the firewall. +- die erste ist der Rechner, auf dem wir den Firewall bereitstellen +- die zweite ist der Rechner, von dem aus wir den Firewall verwalten. -### Request an internet connectivity delivery +### Internet-Zugangsbereitstellung anfordern -The first step is to retrieve [your internet access information here](https://docs.cloud-temple.com/network/internet/quickstart#gestion-de-vos-connectivites-internet). -You must have the following information: +Der erste Schritt besteht darin, [die Informationen zum Internetzugang hier](https://docs.cloud-temple.com/network/internet/quickstart#gestion-de-vos-connectivites-internet) zu beschaffen. + Sie benötigen die folgenden Informationen: -- public prefix -- interconnection prefix -- any-cast gateway -- IP range -- local AS -- Cloud Temple AS -- keepalive timers and hold-time timer -- route server addresses +- öffentliches Prefix +- Interconnection-Prefix +- Anycast-Gateway +- IP-Bereich +- lokales AS +- AS von Cloud Temple +- Keepalive-Timer und Hold-Time-Timer +- Adressen der Route-Server -### Netzwerkinstallation und -konfiguration der Schnittstellen +### Installation und Netzwerkkonfiguration der Schnittstellen -Anschließend können Sie Ihre pfSense-VM bereitstellen: +Sie können anschließend Ihre pfSense-VM bereitstellen: -1. __Installation der Firewall__ über den pfSense-Vorlage in der Konsole: +1. __Installation der Firewall__ aus der pfSense-Vorlage in der Konsole: - [(Über die Konsole bereitstellen)](../../../iaas_vmware/tutorials/deploy_vm_template) - [(Über Terraform bereitstellen)](../../../iaas_vmware/tutorials/deploy_vm_terraform). -2. __Konfiguration der LAN- und WAN-Schnittstellen__ der Firewall: Die WAN-Schnittstelle muss in Ihrem vLAN Internet befinden; ihre IP-Adresse wird aus dem Ihnen vom CDS bereitgestellten IP-Adressbereich entnommen sowie die Standard-Gateway-Adresse. +2. __Konfiguration der LAN- und WAN-Schnittstellen__ der Firewall: Die WAN-Schnittstelle muss sich in Ihrem Internet-vLAN befinden, ihre IP-Adresse wird aus dem IP-Bereich entnommen, der Ihnen vom CDS mitgeteilt wurde, ebenso wie das Standard-Gateway. 3. __Installation der zweiten Management-Maschine__. 4. __Konfiguration der Schnittstelle__ der Management-VM: Diese Maschine muss sich im selben Netzwerk befinden wie das Netzwerk, in dem die LAN-Schnittstelle der Firewall konfiguriert wurde. ### Zugriff auf die Firewall -Sobald die beiden VMs ordnungsgemäß installiert sind, folgt Schritt zwei: der Zugriff auf die Firewall zur Beginn der Konfiguration. +Sobald beide VMs erfolgreich installiert sind, besteht der zweite Schritt darin, auf die Firewall zuzugreifen, um mit der Konfiguration zu beginnen. - Zugriff auf die Web-Oberfläche der Firewall von der Management-VM aus: -- Standard-Anmeldung: +- Standard-Login: - Benutzername: *admin* - - Passwort: *pfsense* (denken Sie daran, das Standardpasswort zu ändern) + - Passwort: *pfsense* (vergessen Sie nicht, das Standardpasswort zu ändern) -### Firewall Configuration +### Konfiguration der Firewall +In diesem Schritt werden die BGP-Nachbarn der FW konfiguriert. -This step involves configuring the BGP neighbors on the firewall. - -- First, make sure to allow BGP traffic over TCP port 179 in __'Firewall > Rules'__: +- Stellen Sie zunächst sicher, dass der BGP-Traffic über TCP-Port 179 in __'Firewall > Regeln'__ zugelassen wird: -- Navigate to __'Services > FRR BGP'__ to begin configuring your BGP session: +- Navigieren Sie zu __'Dienste > FRR BGP'__, um die Konfiguration Ihrer BGP-Sitzung zu starten: -- Check the first two boxes and enter your local AS number and the timers provided by the CDS. +- Aktivieren Sie die ersten beiden Kontrollkästchen und geben Sie die Nummer Ihrer lokalen AS sowie die Telefonnummern ein, die Ihnen vom CDS mitgeteilt wurden. -### BGP Neighbor Configuration +### Konfiguration der BGP-Nachbarn -In the Neighbors section, click on __+Add__ to start creating your BGP neighbors. +In Neighbors klicken Sie auf +Add, um mit der Erstellung Ihrer BGP-Nachbarn zu beginnen. -- For each neighbor: enter its IP address in __'General Options > Name/address'__: +- Geben Sie für jeden Nachbarn seine IP-Adresse in __'General Options > Name/address'__ ein. -- Enter the remote AS (corresponding to the Cloud Temple AS number) in the Basic Options as follows: +- Geben Sie das Remote-AS (entspricht der AS-Nummer von Cloud Temple) in den Basic Options wie folgt ein: -- Finally, in the Advanced Options, perform the following: +- Und schließlich in der Advanced Option: Gehen Sie wie folgt vor: -- Check the box that defines the neighbor type. In our case, it is a __route server__: +- Aktivieren Sie das Kontrollkästchen, das den Typ Ihres Nachbarn definiert. In unserem Fall ist es ein ``Route``-Server: -- Lastly, don't forget to save your changes by clicking on __'Save'__: +- Vergessen Sie am Ende nicht, Ihre Änderungen zu speichern, indem Sie auf __'save'__ klicken: -### Checking the BGP session status with neighbors +### Überprüfung des BGP-Sitzungsstatus mit den Nachbarn -In Status, you can view the state of the BGP session you just configured. +Unter Status können Sie den Status der BGP-Sitzung einsehen, die Sie gerade konfiguriert haben. -Make sure that the __BGP State__ is set to __established__. +Stellen Sie sicher, dass der __BGP State__ auf __established__ steht. -### Announce your public prefix +### Öffentliches Präfix ankündigen -To announce your public prefix, you can create /32 routes and redistribute them as static: +Um ein öffentliches Präfix anzukündigen, können Sie /32-Routen erstellen und die statische Redistribution durchführen: -- In __*System > Routing > Static Routes*__ : create your static routes as /32, setting the Gateway to Null4-127.0.0.1. -- In __*Services > FRR package > BGP > Network Distribution*__ : enable ``redistribution`` locally by selecting IPV4 in ``Redistribute`` FRR static routes. +- unter __*System > Routing > Static Routes*__: Erstellen Sie Ihre statischen /32-Routen und legen Sie das Gateway auf Null4- 127.0.0.1 fest +- unter __*Services > FRR package > BGP > Network Distribution*__: Aktivieren Sie die lokale ``redistribution``, indem Sie IPV4 in ``Reditribute`` FRR static routes auswählen. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/network/network_overview.md b/i18n/de/docusaurus-plugin-content-docs/current/network/network_overview.md index 65d497d8..dab9b898 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/network/network_overview.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/network/network_overview.md @@ -1,11 +1,11 @@ --- -title: Network +title: Netzwerk displayed_sidebar: docSidebar --- -# Network +# Netzwerk -Die Netzwerkdienste von Cloud Temple ermöglichen es Ihnen, eine auf Ihre Architektur zugeschnittene Topologie aufzubauen: Isolierung über private Netzwerke, erweitertes Routing mit VPC oder direkte Internetverbindung. +Die Netzwerkdienste von Cloud Temple ermöglichen es Ihnen, eine an Ihre Architektur angepasste Topologie aufzubauen: Isolation über private Netzwerke, erweitertes Routing mit VPC oder direkte Internetkonnektivität.
@@ -15,12 +15,12 @@ Die Netzwerkdienste von Cloud Temple ermöglichen es Ihnen, eine auf Ihre Archit

Private Network

-

Private Netzwerke zur Verbindung Ihrer Ressourcen ohne Internet, mit voller Topologiekontrolle.

+

Private Netzwerke zur direkten Vernetzung Ihrer Ressourcen ohne Umweg über das Internet, mit vollständiger Kontrolle über die Topologie.

Private Network entdecken →

Internet

-

Hochverfügbare Internetverbindung: öffentliche IP-Adressen, BGP und direkter Zugang für Ihre exponierten Workloads.

+

Hochverfügbare Internetkonnektivität: öffentliche IP-Adressen, BGP und direkter Zugriff für Ihre exponierten Workloads.

Internet entdecken →
-
+ \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/additional_content/concepts_az.md b/i18n/en/docusaurus-plugin-content-docs/current/additional_content/concepts_az.md index b4d867c8..71170593 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/additional_content/concepts_az.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/additional_content/concepts_az.md @@ -4,15 +4,15 @@ title: Concepts - Availability Zones ## Availability Zones -Each physical site within a region has one or more dedicated rooms for our infrastructure. These rooms are exclusively used by Cloud Temple. +Each physical site within a region has one or more private rooms for our infrastructure. These rooms are exclusively used by Cloud Temple. -__Each physical room corresponds to an availability zone (AZ / Availability Zone)__ and is fully autonomous in terms of power, cooling, computing, storage, and networking. -Therefore, selecting an availability zone means choosing both a physical site and a region. +__Each physical room corresponds to an availability zone (AZ / Availability Zone)__ and is completely autonomous in terms of power, cooling, compute, storage, and networking. +Choosing an availability zone therefore implies choosing a physical site and a region. -The Console automatically suggests availability zones located on distinct physical sites, enabling you to distribute your infrastructure across the maximum number of physical sites. +The Console automatically proposes availability zones on distinct physical sites to distribute your infrastructure across the maximum number of physical sites. -*__Note: If you require a specific configuration for a particular use case (multiple AZs on the same physical site), please submit a support request.__* +*__Note: If you require a specific configuration for a particular context (multiple AZs on the same physical site), you must submit a support request.__* | Order Reference | Unit | SKU | -|--------------------------------------------------------|----------------|---------------------------| -| TENANT - *(REGION)* - Activate an availability zone | 1 AZ per tenant | csp:*(REGION)*:iaas:az:v1 | +|--------------------------------------------------------------|-----------------|---------------------------| +| TENANT - *(REGION)* - Activation of an availability zone | 1 AZ per tenant | csp:*(REGION)*:iaas:az:v1 | \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/additional_content/concepts_regional.md b/i18n/en/docusaurus-plugin-content-docs/current/additional_content/concepts_regional.md index d5332cf2..3e8e7bef 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/additional_content/concepts_regional.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/additional_content/concepts_regional.md @@ -1,5 +1,4 @@ --- - title: Concepts - Regions --- @@ -8,17 +7,17 @@ import iaasAz001 from '@site/docs/additional_content/images/iaas_az_001.png'; ## Regions The Cloud Temple infrastructure is designed to ensure business continuity for your applications and platforms. -Within a region, you benefit from a level 2 network continuity. +Within a region, you benefit from level 2 network continuity. -This makes it possible to define a technical architecture in the Paris region, using 3 physical sites to implement a high availability platform with quorum. +Thus, it is possible to define a technical architecture in the Paris region, using 3 physical sites to enable the deployment of a high-availability platform with quorum. -As of January 2024, the Cloud Temple IaaS platform has the following regions: +As of January 2024, the Cloud Temple IaaS platform offers the following regions: - Region FR1 (Paris) -### Region FR1 +### FR1 Region -The FR1 region is based on three physical sites in the Paris region: +The FR1 region is based on three physical sites in the Paris area: - FR1 - AZ05 (PAR7S) - FR1 - AZ06 (TH3S) @@ -26,8 +25,8 @@ The FR1 region is based on three physical sites in the Paris region: -Each site is more than 30km by air from the others. On average, there is 80Km of optical distance between each site. The guaranteed latency between the sites is less than 4 ms. +Each site is more than 30 km away from the others in a straight line. On average, there is 80 km of optical distance between each site. The guaranteed latency between sites is less than 4 ms. ### Regional Expansions -The opening of new regions is primarily associated with market opportunities. In January 2024, the opening of a region in Southern Europe and a region in Northern Europe are under consideration. +The opening of new regions is primarily associated with market opportunities. In January 2024, the opening of a region in Southern Europe and a region in Northern Europe are under consideration. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/bastion/bastion.md b/i18n/en/docusaurus-plugin-content-docs/current/bastion/bastion.md index 6ec3ec29..ef2b70a1 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/bastion/bastion.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/bastion/bastion.md @@ -2,26 +2,28 @@ title: Overview --- -The **Bastion Cloud Temple** is a secure and managed service that simplifies the administration of your infrastructure through RDP or SSH connections. +# Bastion -Accessible via the Cloud Temple console, it ensures centralized management while safeguarding your equipment from internet exposure. +The **Bastion Cloud Temple** is a secure, managed service that simplifies the administration of your infrastructure via RDP or SSH connections. -With its security-focused approach and advanced features such as Infrastructure as Code, Bastion caters to the needs of cloud, hybrid, and on-premises environments. +Accessible from the Cloud Temple console, it ensures centralized management while protecting your assets from any Internet exposure. + +With its security-first approach and advanced features such as Infrastructure as Code, the Bastion addresses the needs of Cloud, hybrid, and on-premises environments.

Concepts

-

Discover the foundations and essential principles to understand and master our infrastructure.

+

Discover the fundamentals and core principles to understand and master our infrastructure.

Explore concepts →

Quickstart

-

Get started quickly with our resources by following clear and simple instructions.

+

Get started quickly with our resources by following clear and straightforward instructions.

Launch Quickstart →
-
+

Tutorials

-

Learn step-by-step to configure and use our services with detailed guides.

+

Learn step-by-step how to configure and use our services with detailed guides.

Discover tutorials →
-
+
\ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/bastion/concepts.md b/i18n/en/docusaurus-plugin-content-docs/current/bastion/concepts.md index 0223ee0f..7fb4de51 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/bastion/concepts.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/bastion/concepts.md @@ -1,38 +1,38 @@ --- title: Concepts --- -import bastion from '@site/docs/bastion/images/bastion.svg' +import bastion from '@site/docs/bastion/images/bastion.png' -## What is the Cloud Temple Bastion? +## What is the Bastion Cloud Temple? -The Cloud Temple Bastion is a managed service that provides you with secure RDP or SSH connectivity from the Cloud Temple console to your physical and virtual infrastructures, whether they are located in the trusted cloud, a public cloud, or on-premise. The Bastion solution enables you to manage your equipment without exposing them to the internet. +The Bastion Cloud Temple is a managed service that provides you with secure RDP or SSH connectivity from the Cloud Temple console to your physical and virtual infrastructures, whether they are located on the trusted Cloud, a public Cloud, or on-premise. The Bastion solution allows you to manage your equipment without exposing them to the Internet. -## Benefits +## Advantages -| Benefit | | +| Advantage | Description | |------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| Centralized Management | The Cloud Temple Bastion is directly accessible from the Console. | -| Security | Equipment managed via the Bastion is not exposed to the Internet, protecting it from malicious users scanning for open ports. | -| Infrastructure as Code | APIs enable full "as Code" management of the Cloud Temple Bastion (session creation, connection, modification, and deletion). | +| Centralized management | The Bastion Cloud Temple is directly accessible from the Console. | +| Security | Devices managed via the Bastion are not exposed to the Internet, protecting them from port scanning by malicious users. | +| Infrastructure as Code | APIs allow the Bastion Cloud Temple to be managed entirely "as Code" (session creation, connection, modification, and deletion). | ## References (SKU) | Reference | Unit | SKU | -|------------------------------------|:--------:|:-----------------------:| +|------------------------------------|:---------:|:-----------------------:| | ADMINISTRATION - Bastion SSH & RDP | 1 Session | cmp:bastion:session:std | -### Bastion Appliance +### The Bastion Appliance -The Bastion Appliance is a virtual machine deployed close to your equipment. This appliance enables a secure, direct flow from the Console platform to the equipment being managed, which resides within the same virtual network. +The Bastion Appliance is a virtual machine deployed in close proximity to your equipment. This Appliance enables secure and direct traffic flow from the Console platform to the managed equipment located within the same virtual network. -The traffic is encrypted and encapsulated within a VPN tunnel. The solution does not require opening any inbound traffic from the Internet to your infrastructure. It is sufficient for the appliance to have access to the public IP address of the Console Bastion module on port 443. +The traffic is encrypted and encapsulated in a VPN tunnel. The solution does not require opening a traffic flow from the Internet to your infrastructure. It is sufficient for the Appliance to have access to the public IP of the Bastion Console module on port 443. -A single appliance can be used to quickly connect to a target device. For each connection, you must specify the desired protocol, the target machine's IP address, and your credentials. To avoid entering these details repeatedly, you can create sessions associated with equipment that you regularly manage. +An Appliance can be used to establish a quick connection to a device. For each connection, the desired protocol, the device's IP address, and your credentials must be specified. To avoid entering this information for every connection, you can create sessions associated with regularly managed equipment. ### Sessions -A session is a connection configuration to a device via a Bastion. It involves defining the device to manage and the Appliance used to route the traffic, enabling faster connections to that device. +A session is a connection configuration to a device via a Bastion. It consists of defining a device to manage and the Appliance to use for traffic routing, thereby enabling faster connections to that device. -This solution is suitable for regular connections to a device that requires management. Essential information is retained, requiring only your credentials upon connection. +This solution is suitable for regular connections to a device to manage. Essential information is retained, and only your credentials are required upon connection. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/bastion/quickstart.md b/i18n/en/docusaurus-plugin-content-docs/current/bastion/quickstart.md index bd12f334..d117c8b8 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/bastion/quickstart.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/bastion/quickstart.md @@ -8,77 +8,77 @@ import creerSession3 from '@site/docs/bastion/images/creer_session3.png' import ouvrirSession from '@site/docs/bastion/images/ouvrir_session.png' import ouvrirSession2 from '@site/docs/bastion/images/ouvrir_session2.png' -This getting started guide shows you how to request the creation of an Appliance, and how to create a new session and connect to it. +This getting started guide shows you how to request the creation of an Appliance and how to create a new session and connect to it. ## Prerequisites -1. Have subscribed to the Cloud Temple offer (Bastion Appliance subscription). -2. The equipment to be managed must be accessible from the network where the Bastion Appliance is deployed. +1. Subscribe to the Cloud Temple product (Appliance Bastion subscription). +2. The devices to be managed must be accessible from the network where the Appliance Bastion is deployed. 3. Have permissions on the Bastion module. -4. For an on-premise Appliance deployment, the corresponding network flows must be open. +4. For an on-premise Appliance deployment, the corresponding traffic must be allowed. -## Required flows for the Bastion product operation +## Flows required for the Bastion product to operate -Several flows are necessary for the proper operation of the Bastion Appliance. +Several flows are required for the proper operation of the Bastion Appliance. -### The Bastion Gateway +### The bastion gateway -| Source | Destination | Protocol | -|--------------------------|---------------------------------------------|-----------| -| Bastion client appliance | 91.223.207.71 (botg.shiva.cloud-temple.com) | UDP/4242 | +| Source | Destination | Protocol | +|--------------------------|---------------------------------------------|----------| +| Client bastion appliance | 91.223.207.71 (botg.shiva.cloud-temple.com) | UDP/4242 | ### RDP Administration Flow -| Source | Destination | Protocol | -|--------------------------|-----------------------------|-----------| -| Client bastion appliance | Instances to administer | TCP/3389 | +| Source | Destination | Protocol | +|--------------------------|-----------------------------|----------| +| Client bastion appliance | Instances to administer | TCP/3389 | ### SSH Administration Flow | Source | Destination | Protocol | |--------------------------|-----------------------------|-----------| -| Client bastion appliance | Instances to administer | TCP/22 | +| Client bastion appliance | Managed instances | TCP/22 | -## Requesting Appliance Creation +## Requesting an Appliance -Before deploying an Appliance, you must submit a subscription request for an Appliance via a support ticket. -The support portal is accessible from the Console using the buoy icon in the top-right corner of the window. +Before you can deploy an Appliance, you must submit an Appliance subscription request via a support request. +Support is accessible in the Console via the lifebuoy icon on the top-right bar of the window. -## Register a Device +## Register a device -To access a device you manage regularly, it is more convenient to create a session, which will only require your username and password at each connection. +To regularly access a device for administration, it is more appropriate to create a session that will only require your username and password each time you log in. To do this, go to the "Devices" tab in the "Bastion" menu, then click the "New Device" button. -Next, fill in the required information to create your device: +Then, fill in the information required to create your device: -- Device name; -- Description; -- Associated appliance; -- Protocol type (SSH or RDP); -- Host IP address; -- Keyboard configuration. + - Device name; + - Description; + - Associated appliance; + - Protocol type (SSH or RDP); + - Host IP address; + - Keyboard layout. -A notification indicating the device creation should appear in the top-right corner of the page. The session is then added to your list of devices. +A notification indicating the device has been created should appear in the top right corner of the page. The session is then added to your list of devices. -To create a new device, you can also go through the "Appliances" tab by clicking the action bar of the appliance to which you want to associate a device. +To create a new device, you can also go through the "Appliances" tab by clicking on the action bar of the appliance to which you want to associate a device. -## Connect to a Device +## Connect to a device -Go to the "Devices" tab within the "Bastion" tab. Click on the action bar of the device you wish to open, then click the "Open" button. +Navigate to the "Devices" tab in the "Bastion" tab. Click on the action bar of the device you want to open, and click the "Open" button. -For each connection to a device, you only need to provide your authentication credentials. +Each time you connect to the device, you only need to provide your authentication credentials. -After entering your credentials, a notification confirming the start of the connection to your device appears, and the console to your virtual machine opens. +After entering your credentials, a notification confirming the start of the connection to your device appears, and the console to your virtual machine opens. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/bastion/tutorials.md b/i18n/en/docusaurus-plugin-content-docs/current/bastion/tutorials.md index 193f861a..a65872c6 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/bastion/tutorials.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/bastion/tutorials.md @@ -14,101 +14,103 @@ import modifierSession from '@site/docs/bastion/images/modifier_session.png' import modifierSession2 from '@site/docs/bastion/images/modifier_session2.png' import supprimerSession from '@site/docs/bastion/images/supprimer_session.png' -These tutorials help you deploy and manage a Cloud Temple Bastion from the Console. +These tutorials help you deploy and manage a Bastion Cloud Temple from the Console. ## Prerequisites -1. Have subscribed to the Cloud Temple offer (Bastion Appliance subscription). -2. The equipment to be managed must be accessible from the network where the Bastion Appliance is deployed. -3. Have permissions on the Bastion module. -4. For an on-premise Appliance deployment, the corresponding network flows must be open. +1. Subscribe to the Cloud Temple product (Appliance Bastion subscription). +2. The devices to be managed must be accessible from the network where the Appliance Bastion is deployed. +3. Have permissions for the Bastion module. +4. For an on-premise Appliance deployment, the corresponding traffic flows must be allowed. ## Interface -Once logged into the Console web portal, navigate to the "Bastion" tab in the left-hand menu. +Once logged into the Console web portal, go to the "Bastion" tab in the left menu. -The "Equipment" tab allows you to view your list of equipment. An equipment entry corresponds to a connection configuration via a Bastion Appliance. For each equipment, the following information is displayed: its name, tags, description, associated Appliance, connection type (SSH or RDP), host IP address, and keyboard configuration. +The « Devices » tab allows you to view the list of your devices. A device corresponds to a configuration of +connection via a Bastion Appliance. For each device, its name, tags, +description, associated Appliance, connection type (SSH ou RDP), host IP, and finally the keyboard layout are displayed. -You can filter your list of equipment based on assigned tags, and a search engine enables you to look up a session by its name. +You can filter the list of your devices by their assigned tags, and a search bar allows you to search for a session by its name. -The "Appliances" tab displays the list of your Bastion Appliances. For each appliance, its name and description are provided. +The « Appliances » tab displays the list of your Bastion Appliances. For each Appliance, its name and description are specified. -A search engine is available to help you locate an appliance by its name. +A search bar is available to allow you to search for an Appliance by its name. ## Deploy an Appliance -Before deploying an Appliance, you must submit a subscription request for an Appliance via a support ticket. +Before you can deploy an Appliance, you must submit an Appliance subscription request via a support request. ## Open a connection to a device -In the **Appliances** tab, click the action bar of the appliance you want to open. Then click the **Open** button. +In the "Appliances" tab, click on the action bar of the Appliance you want to open. Then click the "Open" button. -Next, fill in the required connection information: +Then fill in the information required for the connection: -- Protocol selection (SSH or RDP); -- IP address of the host to manage; -- Credentials; -- Keyboard configuration. + - Protocol selection (SSH or RDP); + - IP address of the host to manage; + - Credentials; + - Keyboard layout. -Then click **Connect** to open the appliance. The virtual machine's console will then open. +Then click "Connect" to open the Appliance. The console of the virtual machine to manage will then open. -## Register a Device +## Register an Equipment -To access a device you manage regularly, it is more convenient to create a device configuration, which will only require your username and password at each connection. +To regularly access an equipment for administration, it is recommended to create an equipment configuration, which will only require your username and password upon each connection. -To do this, go to the « Devices » tab in the « Bastion » menu, then click the « New Device » button. +To do this, go to the « Equipment » tab in the « Bastion » menu, then click the « New equipment » button. -Next, fill in the required information to create your device: +Then, fill in the information required to create your equipment: -- Device name; -- Description; -- Associated appliance; -- Protocol type (SSH or RDP); -- Host IP address; -- Keyboard language. + - Equipment name; + - Description; + - Associated appliance; + - Protocol type (SSH or RDP); + - Host IP address; + - Keyboard language. -A notification indicating the creation of your device configuration should appear in the top-right corner of the page. The configuration will then be added to your list of devices. +A notification indicating the creation of your equipment configuration should appear in the top right corner of the page. The configuration is then added to your equipment list. -To create a new connection, you can also go to the « Appliances » tab and click the action bar of the appliance to which you want to associate a device configuration. +To create a new connection, you can also go through the « Appliances » tab by clicking on the action bar of the Appliance to which you want to associate an equipment configuration. -## Connect to a Device +## Connect to a device -Go to the "Devices" tab within the "Bastion" tab. Click on the action bar of the device you wish to open, then click the "Open" button. +Navigate to the "Devices" tab in the "Bastion" tab. Click on the action bar of the device you want to open, and click the "Open" button. -For each connection to a device, you only need to provide your authentication credentials. +Each time you connect to the device, you only need to provide your authentication credentials. -After entering your credentials, a notification confirming the session start appears, and the console to your virtual machine opens. +After entering your credentials, a notification confirming the start of the session appears, and the console to your virtual machine opens. -## Modify a device configuration +## Modify an equipment configuration -Go to the "Devices" tab in the "Bastion" section, click on the action bar of the device you wish to modify, and click the "Modify" button. +Navigate to the "Equipment" tab in the "Bastion" section, click on the action bar of the equipment you want to modify, and click the "Edit" button. -You can then modify the device name, description, associated Appliance, protocol (SSH or RDP), host IP address, or keyboard language. +You can then modify the equipment name, its description, the associated Appliance, the protocol (SSH or RDP), the host IP address, or the keyboard language. -## Delete a device configuration +## Delete an equipment configuration -Go to the "Devices" tab in the "Bastion" section, click the action bar of the device you want to delete, and then click the "Delete" button. +Go to the "Equipment" tab in the "Bastion" section, click on the action bar of the equipment you want to delete, and click the "Delete" button. - + \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/changelog.md b/i18n/en/docusaurus-plugin-content-docs/current/changelog.md index f080af2a..2429e0e2 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/changelog.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/changelog.md @@ -1,145 +1,166 @@ --- -title: Change Log +title: Change Tracking sidebar_position: 2 --- -# Change Log +# Change Tracking -### April 17, 2026: VM Instances — Illustrated Documentation and Tutorials +### May 4, 2026: Security Patches — Docker Image (Alpine CVE) -- **VM Instances — Documentation update**: Complete overhaul and illustration of the VM Instances documentation. The getting started guide (`quickstart.md`) now covers the entire illustrated user journey: accessing the section, VM list, 9-step creation wizard (instance family, availability zone, OS template, flavor, name/backup, Cloud Init, disks, network, summary), and management of 4 tabs (Information, Disks, Network, Snapshots). -- **VM Instances — Tutorials**: Creation of 3 dedicated tutorials in a `tutorials/` folder: (1) **Create your first VM** (full illustrated wizard + Cloud Init + additional disk), (2) **Manage disks** (add disk from the console + Linux partitioning), (3) **Take and manage snapshots** (create, restore, delete + best practices and snapshot/backup comparison). The sidebar navigation is updated with 3 individual entries in the Tutorials category. +- **Security (Docker)**: Added `apk upgrade --no-cache` to the final stage `nginx:stable-alpine` of the production Dockerfiles (`Dockerfile` and `Dockerfile.prebuilt`). This update fixes all Critical and High CVEs detected by Harbor/Trivy on image `3.24.3`, related to the pinned Alpine packages: `libcrypto3`, `libssl3`, `libxml2`, `libxslt`, `libexpat`, `libpng`, `zlib`, `c-ares`, `musl`, `xz-libs`, `busybox`, `curl`. The next build will produce an image with all these packages at their latest patched version. -### April 17, 2026: Private Backbone Translation and Terminology Update +### April 30, 2026: Clarifications on Storage Performance -- **Private Backbone**: Complete translation of the Private Backbone service documentation into English, German, Spanish, and Italian. -- **Terminology**: Harmonisation of vocabulary in the French documentation — systematic replacement of "offre" and "service" with "produit" to align with Cloud Temple's commercial terminology. +- **Storage (IaaS VMware, OpenSource, Bare Metal)** : Added absolute IOPS and maximum bandwidth caps for all storage classes. This information enables better environment sizing based on performance requirements. -### April 16, 2026: Navigation Refactoring, Contractual Documents and Documentation Updates +### April 24, 2026: Enrichment of the IaaS OpenSource backup documentation -- **Navigation — Compute**: VM Instances (preview), IaaS OpenSource and IaaS VMware grouped under a single **Compute** category in the navigation (PR #277). -- **Navigation — Network**: VPC (preview) and Private Backbone grouped under a single **Network** category in the navigation. -- **Contractual Documents**: Complete restructuring of contractual documentation — creation of a `/contracts` hub page (general terms, specific terms, SecNumCloud service agreements, VM instances SLA) and a `/shared-responsibility` hub page (RACI matrices per service: IaaS, S3, PaaS, Kubernetes, LLMaaS, Network). The contractual left-side menu is replaced by a dedicated **Contractual** column in the footer. Translations available in EN/DE/ES/IT. -- **VM Instances**: Updated the service level agreement (SLA) from 99.9% to 99.95%. -- **IaaS OpenSource**: Added a note on the maximum backup retention period (24 months maximum, migration to Glacier planned for Q1 2027). +- **IaaS OpenSource (Backup)**: Enrichment of the backup section with details on the technical architecture (incremental backup, impact of Thick provisioning on storage), security (AES-256 encryption, network isolation), monitoring, and scheduling constraints. Translations available in EN/DE/ES/IT. + +### April 20, 2026: Managed Database Sizing Update + +- **Managed MariaDB & PostgreSQL**: Update to the maximum available sizing templates for managed database services. + +### April 17, 2026: VM Instances — Illustrated documentation, tutorials, and translations + +- **VM Instances — Documentation Enhancement**: Complete overhaul and illustration of the VM Instances documentation. The quickstart guide (`quickstart.md`) now covers the entire illustrated user journey: accessing the section, VM list, 9-step creation wizard (instance family, availability zone, OS template, template, name/backup, Cloud Init, disks, network, summary), and management of the 4 tabs (Information, Disks, Network, Snapshots). +- **VM Instances — Tutorials**: Creation of 3 dedicated tutorials in a `tutorials/` folder: (1) **Create your first VM** (complete illustrated wizard + Cloud Init + additional disk), (2) **Manage disks** (addition from the console + Linux partitioning), (3) **Create and manage snapshots** (creation, restoration, deletion + best practices and snapshot/backup comparison). The sidebar navigation is updated with 3 individual entries in the Tutorials category. + +### April 17, 2026: Contractual documents, translations, and terminology harmonization + +- **Contractual Documents — Restructuring** : The `contracts.md` page is reorganized with the hierarchy of contractual documents at the top of the page, including the priority list of the 6 documents (CGVU, SecNumCloud Agreement, Specific Agreement ¹, PAS ², CPU, DPA) and a contractual details box. + +### April 16, 2026: Navigation overhaul, contractual documents, and updates + +- **Navigation — Compute** : Grouping of VM Instances (preview), Open Source IaaS, and VMware IaaS under a single **Compute** category in the navigation (PR #277). +- **Navigation — Network** : Grouping of VPC (preview) and Private Backbone under a single **Network** category in the navigation. +- **Contractual Documents** : Complete restructuring of contractual documentation — creation of a hub page `/contracts` (General Terms and Conditions, Specific Terms, SecNumCloud Service Agreements, VM Instances SLA) and a hub page `/shared-responsibility` (RACI matrices per service: IaaS, S3, PaaS, Kubernetes, LLMaaS, Network). The contractual sidebar menu is replaced by a dedicated **Contractual** column in the footer. Translations available in EN/DE/ES/IT. +- **VM Instances** : Update of the Service Level Agreement (SLA) commitment from 99.9% to 99.95%. +- **Open Source IaaS** : Addition of a note regarding the maximum backup retention period (maximum 24 months, migration to Glacier scheduled for Q1 2027). ### April 15, 2026: New VM instances documentation (Cloud Public) -- **VM instances**: Initial documentation release for the VM instances service (in preview), Cloud Temple's new shared virtual machine offering. The documentation covers the service overview, technical concepts (Development/General Purpose/Performance service classes, predefined and custom flavors, storage, VPC networking, backup), and a complete getting started guide. The service is organised under a new **Cloud Public** category in the navigation. +- **VM instances** : Initial documentation for the VM instances service (in preview), a new shared virtual machine offering from Cloud Temple. The documentation covers the service overview, technical concepts (Development/General Purpose/Performance service tiers, predefined and custom templates, storage, VPC networking, backup), as well as a complete getting started guide. The service is organized under a new **Cloud Public** category in the navigation. ### April 15, 2026: IaaS VMware Documentation Improvement — Cluster Metrics -- **IaaS VMware**: Added detailed documentation on the metrics displayed in the VMware cluster view from the Cloud Temple Console. Covers the three cluster memory graphs: **Provisioned Memory** (total memory allocated to VMs), **Used Memory** (physical memory actively consumed by VMs) and **Worst-Case Allocation** (projection of maximum simultaneous consumption), with a precise description of what each indicator represents to help anticipate resource needs. +- **IaaS VMware**: Added detailed documentation on the metrics displayed in the VMware cluster view from the Cloud Temple Console. Covers the cluster's three memory graphs: **Allocated Memory** (total amount allocated to VMs), **Consumed Memory** (physical memory actually used by VMs), and **Worst-case Allocation** (projection of maximum simultaneous consumption), with a precise description of what each indicator represents to anticipate resource requirements. -### April 15, 2026: Managed MariaDB, Managed PostgreSQL Documentation and Multilingual Fixes +### April 15, 2026: Managed MariaDB and Managed PostgreSQL Documentation and Multilingual Fixes -- **Managed MariaDB**: Initial release of the Managed MariaDB service documentation (preview): service overview, technical concepts (StandAlone and Distributed architectures), quick start guide. -- **Managed PostgreSQL**: Initial release of the Managed PostgreSQL service documentation (preview): service overview, technical concepts, quick start guide. -- **Multilingual Fixes (images)**: Fixed image references in translations for the Managed Kubernetes and Managed MariaDB sections across all languages (EN, DE, ES, IT) — converting relative `./images/` paths to absolute `@site/docs/...` paths ensuring correct rendering in all languages. -- **Broken Link Fixes**: Resolved several broken links: LLMaaS licence references, console link in the rclone tutorial (OSS), IAM link in the network documentation (EN), relative links in the Terraform section (EN). +- **Managed MariaDB**: Initial documentation for the Managed MariaDB service (in preview) has been published: service overview, technical concepts (StandAlone and Distributed architectures), getting started guide. +- **Managed PostgreSQL**: Initial documentation for the Managed PostgreSQL service (in preview) has been published: service overview, technical concepts, getting started guide. +- **Multilingual fixes (images)**: Fixed image references in the translations of the Managed Kubernetes and Managed MariaDB sections for all languages (EN, DE, ES, IT) — converted relative paths `./images/` to absolute paths `@site/docs/...` to ensure correct rendering across all languages. +- **Broken link fixes**: Resolved several broken links in the documentation: LLMaaS license references, console link in the rclone (OSS) tutorial, IAM link in the networking documentation (EN), relative links in the Terraform section (EN). ### April 15, 2026: New Cost Manager Module -- **Console (Cost Manager)**: Added complete documentation for the new consumption tracking module accessible from the Cloud Temple Console. Covers the dashboard, global consumption (with end-of-month projection), breakdown by product and service, line-by-line billing details, and the price catalog. +- **Console (Cost Manager)**: Added complete documentation for the new usage tracking module accessible from the Cloud Temple Console. Covers the dashboard, overall consumption (with end-of-month projection), breakdown by product and service, line-by-line billing details, and the price catalog. -### March 26, 2026: Sub-processors List Update (DPA) +### March 26, 2026: Update of the Subcontractor List (DPA) -- **Contractual**: Update of the Data Processing Agreement (DPA) - revised the list of sub-processors (removal of Microsoft Azure and Amazon Web Services, modification of activity for Iron Mountain) and addition of the authorization date. Propagation of changes in English, German, Spanish, and Italian. +- **Contractual**: Update of the Contractual Annex on Personal Data (DPA) - revision of the subcontractor list (removal of Microsoft Azure and Amazon Web Services, modification of the activity for Iron Mountain) and addition of the authorization date. ### March 19, 2026: IaaS and Terraform Documentation Improvements -- **IaaS OpenSource**: Added a complete guide for creating a virtual machine. The tutorial covers the three available deployment methods (template, XVA import, Marketplace) with step-by-step instructions and best practice recommendations. -- **IaaS VMware**: Added an index page listing all available tutorials for easier navigation and guide discovery. -- **Terraform**: New section explaining how to automatically receive notifications for new Terraform Provider versions via GitHub. +- **Open Source IaaS** : Added a comprehensive guide for creating a virtual machine. The tutorial covers the three available deployment methods (template, XVA import, Marketplace) with step-by-step instructions and best practices recommendations. +- **VMware IaaS** : Added a page consolidating all available tutorials to facilitate navigation and guide discovery. +- **Terraform** : New section explaining how to automatically receive notifications for new versions of the Terraform Provider via GitHub. ### March 19, 2026: DPA Update and HDS Compliance -- **Contractual**: Update of the Data Processing Agreement (DPA) to version 1.0. Integration of the latest requirements for HDS (Health Data Hosting) certification and update of the authorized sub-processors list. Complete translation in English, German, Spanish, and Italian. +- **Contractual** : Update of the Contractual Annex on Personal Data (DPA) to version 1.0. Integration of the latest HDS (Health Data Hosting) certification requirements and update of the list of authorized subcontractors. Full translation into English, German, Spanish, and Italian. + +### February 21, 2026: SEO Improvement + +- **SEO** : Fixed the production URL (`https://docs.cloud-temple.com`) and base path (`/`) in the Docusaurus configuration, ensuring correct canonical URLs for Google indexing. +- **Sitemap** : Enabled automatic sitemap generation (`/sitemap.xml`) to improve crawling and indexing by search engines. +- **Robots.txt** : Added a `robots.txt` file allowing full site crawling and pointing to the sitemap. -### February 21, 2026: Advanced Networking Concepts and Multilingual Enhancements +### February 21, 2026: Advanced networking concepts and multilingual improvements -- **Network (Internet)**: New **advanced concepts** page documenting BGP communities and Local Preference control on the Cloud Temple Internet backbone (AS33930). Includes a configuration guide with a Bird example. -- **LLMaaS**: Updated model catalog with the addition of model lifecycle management. Introduced LTS (Long Term Support) models. -- **Console (Security)**: Improved quality of security alert translations (English, German, Spanish, Italian). -- **Multilingual**: Translation of the new advanced networking concepts page into four languages (en, de, es, it), along with overall enhancement of existing translation quality. -- **IaaS Bare Metal**: Added clarifications regarding the BFS (Boot from SAN) volume in the quick start guide: Volume 1 is dedicated to OS installation, non-shareable within the same AZ, with recommendation to store data on an additional LUN volume. -- **Object Storage (OSS)**: Added a new **FAQ** page covering S3 access, IP whitelisting, pre-signed links, and recommended usage scenarios. +- **Networking (Internet)** : New **advanced concepts** page documenting BGP communities and Local Preference control on the Cloud Temple Internet backbone (AS33930). Includes a configuration guide with a Bird example. +- **LLMaaS** : Updated model catalog and added model lifecycle. Added LTS (Long Term Support) models. +- **Console (Security)** : Improved translation quality for security alerts (English, German, Spanish, Italian). +- **Multilingual** : Translation of the new advanced networking concepts page into the 4 languages (en, de, es, it) and overall improvement of existing translation quality. +- **IaaS Bare Metal** : Added clarifications regarding the BFS (Boot from SAN) volume in the getting started guide: Volume 1 is dedicated to OS installation, not shareable within the same AZ, with a recommendation to store data on an additional LUN volume. +- **Object Storage (OSS)** : Added a **FAQ** page covering S3 access, IP whitelists, pre-signed links, and recommended usage scenarios. ### February 10, 2026: LLMaaS Pricing Update -- **LLMaaS**: Global API pricing update (Input: €1.9/M, Output: €8/M, Reasoner: €8/M) across all technical and commercial documentation. +- **LLMaaS**: Global API pricing update (Input: 1.9€/M, Output: 8€/M, Reasoner: 8€/M) across all technical and commercial documentation. -### February 5, 2026: Clarifications on Service Level Agreements (SLAs) +### February 5, 2026 : Clarifications on Service Level Agreements (SLA) -- **Managed Kubernetes**: Complete update and finalization of Service Level Agreements (SLAs) for the Managed Kubernetes offering. +- **Managed Kubernetes** : Complete update and finalization of Service Level Agreements (SLA) for the Managed Kubernetes offering. ### January 21, 2026: Security Improvements and Translations -- **Console Management**: Updated international translations (English, German, Spanish, Italian) for security alerts in the management console. +- **Console Management** : Updated international translations (English, German, Spanish, Italian) for security alerts in the management console. -### January 19, 2026: Managed Kubernetes and VPC Enhancements +### January 19, 2026: Managed Kubernetes and VPC Extension - **Managed Kubernetes**: Added support for **Bare Metal** nodes and **GPUs** (NVIDIA). -- **Managed Kubernetes**: New tutorial on using GPUs within a Kubernetes cluster. -- **Managed Kubernetes**: Replaced KubeCost with a more up-to-date guide on **OpenCost**. -- **Network (VPC)**: Comprehensive documentation for the Virtual Private Cloud (VPC) service, including high availability (HA) concepts, quick start guides, and tutorials. +- **Managed Kubernetes**: New tutorial on using GPUs in a Kubernetes cluster. +- **Managed Kubernetes**: Replaced KubeCost with a more recent guide on **OpenCost**. +- **Network (VPC)**: Complete documentation for the Virtual Private Cloud (VPC) service, including high availability (HA) concepts, getting started guides, and tutorials. - **Multilingual**: Full translation of the VPC service and new Kubernetes content into English, German, Spanish, and Italian. ### December 15, 2025: Stabilization and Multilingual Fixes -- **Multilingual (Terraform, LLMaaS, Harbor)**: Major fixes to translations in Spanish, Italian, and German. Resolved MDX syntax issues (empty code blocks, unescaped tags) that were preventing site compilation. +- **Multilingual (Terraform, LLMaaS, Harbor)**: Major fix for Spanish, Italian, and German translations. Resolved MDX syntax issues (empty code blocks, unescaped tags) that were preventing site compilation. - **Multilingual (Images)**: Restored correct image paths in the Italian and German versions for the Bastion and VMware IaaS sections. -- **Build**: Validation of deployment across all 5 supported languages. +- **Build**: Deployment validation for all 5 supported languages. ### December 11, 2025: Managed Kubernetes Updates - **Managed Kubernetes**: Added a new tutorial on using **Gateway API** for advanced traffic management. -- **Managed Kubernetes**: Updated documentation on quota management (Ceph) and cost management tool optimizations (OpenCost). +- **Managed Kubernetes**: Updated documentation on quota management (Ceph) and optimization of cost management tools (OpenCost). -### November 22, 2025: LLMaaS Updates and General Improvements +### November 22, 2025: LLMaaS Updates and Global Improvements - **LLMaaS (OCR)**: Added comprehensive documentation for **DeepSeek-OCR**, our new model specialized in document analysis (PDFs, images), capable of extracting structured text, tables, and mathematical formulas. -- **Multilingual**: Resolved accessibility issues in the Italian and German versions of the documentation. -- **Quality**: Fixed code block display in LLMaaS tutorials and restored missing images in the Italian version of the VMware IaaS quick start guide. +- **Multilingual**: Resolved accessibility issues on the Italian and German versions of the documentation. +- **Quality**: Fixed code block display in LLMaaS tutorials and restored missing images in the VMware IaaS quick start guide (Italian version). ### November 20, 2025: Major PaaS OpenShift Update -- **OpenShift PaaS (PR #194)**: Complete overhaul and update of the OpenShift documentation, including new screenshots and full translation into English, Spanish, German, and Italian to support our international expansion. +- **PaaS OpenShift (PR #194)** : Complete overhaul and update of the OpenShift documentation, including new screenshots and a full translation into English, Spanish, German, and Italian to support our international expansion. -### November 3, 2025: Kubernetes Tutorials Enhancements +### November 3, 2025: Kubernetes Tutorial Improvements -- **Managed Kubernetes**: Introduction of a new tutorial on continuous deployment using **ArgoCD** and the GitOps approach. -- **Managed Kubernetes**: Review and enhancement of existing tutorials. Guides on deployment, networking, permission management (Capsule), and backup (Kasten) have been enriched to better address security, governance, and cost concerns, in response to the needs of RSSI and Procurement profiles. +- **Managed Kubernetes**: Added a new tutorial on continuous deployment with **ArgoCD** and the GitOps approach. +- **Managed Kubernetes**: Review and enhancement of existing tutorials. The guides on deployment, networking, permission management (Capsule), and backup (Kasten) have been enhanced to better address security, governance, and cost concerns, in response to the expectations of CISO and Buyer profiles. -### October 28, 2025: New Managed Kubernetes Documentation and Various Improvements +### October 28, 2025: New Managed Kubernetes documentation and various improvements -- **Managed Kubernetes (PR #193 & improvements)**: Added comprehensive documentation for the new Managed Kubernetes service. The section includes a service overview, technical concepts, a quick start guide, a first tutorial, and a RACI matrix. Content has been enhanced to better meet the expectations of various user profiles. +- **Managed Kubernetes (PR #193 & improvements)**: Added comprehensive documentation for the new Managed Kubernetes service. The section includes a service presentation, technical concepts, a getting started guide, a first tutorial, and the responsibilities matrix (RACI). The content has been enriched to better meet the expectations of different user profiles. - **Object Storage (PR #190, #189)**: Added two new tutorials for the Object Storage service: one on managing S3 bucket access and another on using Restic for backups. -- **Contractual (PR #191)**: Corrected and updated the "Data Processing Agreement" (DPA) document. +- **Contractual (PR #191)**: Correction and update of the "Data Processing Agreement" (DPA) document. -### October 18, 2025: Maintenance and New Documentation +### October 18, 2025: Maintenance and new documentation -- **LLMaaS**: Added a new FAQ entry to introduce the public status page ([llmaas.status.cloud-temple.app](https://llmaas.status.cloud-temple.app/)), enabling real-time monitoring of the availability and performance of each model. -- **Contractual**: Major update to the Data Processing Agreement (DPA v2) to reflect the latest legal and compliance requirements. +- **LLMaaS**: Added a new FAQ question to introduce the public status page ([llmaas.status.cloud-temple.app](https://llmaas.status.cloud-temple.app/)), allowing real-time monitoring of each model's availability and performance. +- **Contractuel**: Major update to the Data Processing Agreement (DPA v2) to reflect the latest legal and compliance requirements. - **Console**: Improved and clarified documentation regarding order management. - **Marketplace**: Added a detailed tutorial on customizing virtual machine (VM) images to create reusable templates. -- **LLMaaS**: Added a guide to configure the VSCode CLINE extension for using Cloud Temple's language models directly from the editor. +- **LLMaaS**: Added a guide for configuring the VSCode CLINE extension to use Cloud Temple's language models directly from the editor. - **Object Storage (OSS)**: Added clarifications on the lifecycle policy for data deletion. - **Object Storage (OSS)**: Added a troubleshooting guide for checksum errors (`XAmzContentSHA256Mismatch`) with AWS CLI and Terraform. - **LLMaaS**: Updated the list of available models and retranslated over 50 documents to ensure consistency. -### August 14, 2025: Improvements and Fixes +### August 14, 2025: Improvements and fixes -- **LLMaaS**: Updated and clarified FAQ responses to better address technical and strategic questions. Added the FAQ to the navigation. +- **LLMaaS**: Updated and clarified FAQ responses to better address technical and strategic questions. Added FAQ to navigation. - **General**: Fixed several internal navigation links throughout the documentation for a smoother experience. ### July 2025: New Features and Major Updates - **Object Storage (OSS)**: - - Complete overhaul of the tutorials section with dedicated guides for popular tools: AWS CLI, Minio Client (`mc mirror`), Cloudberry Explorer, and the Python Boto3 SDK. - - Added clarifications on storage account concepts and object locking (Object Lock). -- **OpenSource IaaS**: - - Added detailed documentation on High Availability (HA) management for resource pools and virtual machines. + - Complete overhaul of the tutorials section with dedicated guides for popular tools: AWS CLI, Minio Client (`mc mirror`), Cloudberry Explorer, and the Boto3 Python SDK. + - Added details on storage account concepts and object locking (Object Lock). +- **Open Source IaaS**: + - Added detailed documentation on managing High Availability (HA) for resource pools and virtual machines. - **Console**: - Updated the security alerts page with the latest vulnerabilities. - **Networking**: @@ -147,12 +168,12 @@ sidebar_position: 2 ### June 29, 2025: Finalization of LLMaaS Documentation -- Full test suite validation. -- Correction and validation of RAG pipelines with FAISS and Qdrant. -- Enhancement of tutorials with more detailed technical explanations. -- Addition of a section on prompt security and model lifecycle within the concepts. +- Validation of the complete test suite. +- Correction and validation of the RAG with FAISS and Qdrant pipelines. +- Enrichment of tutorials with more detailed technical explanations. +- Addition of a section on prompt security and model lifecycle in the concepts. - Improvement of the RAG explanation page with diagrams and details on embedding models. -- Update of the API documentation, quick start guide, and service presentation. +- Update of the API documentation, getting started guide, and service presentation. - Addition of pricing for the Audio Transcription endpoint. -- Addition of the projected model lifecycle roadmap. -- Addition of the responsibility matrix for the LLMaaS offering. +- Addition of the projected model lifecycle schedule. +- Addition of the responsibility matrix for the LLMaaS offering. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/compute_overview.md b/i18n/en/docusaurus-plugin-content-docs/current/compute_overview.md index d6edcc19..f97d1849 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/compute_overview.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/compute_overview.md @@ -5,7 +5,7 @@ displayed_sidebar: docSidebar # Compute -Cloud Temple's Compute services allow you to deploy and operate virtual machines on a sovereign and secure infrastructure. Choose the technology that suits your needs: shared cloud instances, open source infrastructure, or VMware virtualization. +Cloud Temple's Compute services allow you to deploy and operate virtual machines on a sovereign and secure infrastructure. Choose the technology that best fits your needs: shared cloud instances, open source infrastructure, or VMware virtualization.
@@ -15,7 +15,7 @@ Cloud Temple's Compute services allow you to deploy and operate virtual machines

IaaS OpenSource

-

Open source virtualized infrastructure (OpenStack). Full control over your VMs, networks, and storage on a SecNumCloud-certified foundation.

+

Open source virtualized infrastructure (OpenStack). Full control over your VMs, networks, and storage on a SecNumCloud foundation.

Discover IaaS OpenSource →
@@ -23,4 +23,4 @@ Cloud Temple's Compute services allow you to deploy and operate virtual machines

Managed VMware infrastructure. Compatible with your existing vSphere environment, with the guarantees of a qualified sovereign cloud.

Discover IaaS VMware →
-
+ \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/console/api.md b/i18n/en/docusaurus-plugin-content-docs/current/console/api.md index 012fc866..e9f0e2f7 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/console/api.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/console/api.md @@ -13,48 +13,48 @@ import ShivaApi004 from '@site/docs/console/images/shiva_api_004.png' ## Introduction -The Cloud Temple API allows you to create and manage all your cloud resources programmatically. Everything you can do through the Cloud Temple console can also be done via the API, from creating virtual machines to configuring identity and access management. +The Cloud Temple API enables you to create and manage all your cloud resources programmatically. Everything you can do via the Cloud Temple console can also be accomplished via the API, from creating virtual machines to configuring identity and access management. -This documentation guides you through using the Cloud Temple API, from authentication to best practices, including endpoint lifecycle management. +This documentation guides you through using the Cloud Temple API, covering authentication, best practices, and endpoint lifecycle management. -## Quickstart: Your First API Request +## Quickstart: Your first API request :::info[Summary - 3 steps to get started] 1. 🔑 **Generate your PAT** from the console 2. 🚀 **Test with curl** on `/iam/v2/roles` -3. ✅ **Analyze the response** JSON +3. ✅ **Analyze the JSON response** ::: ### Prerequisites -Before starting, you must have a Cloud Temple account with the appropriate permissions to generate API keys. +Before you begin, you must have a Cloud Temple account with the appropriate permissions to generate API keys. ### Steps -1. **Generate your API key**: Log in to the [Cloud Temple console](https://shiva.cloud-temple.com/login) and generate your Personal Access Token (see [API Keys](#api-keys-personal-access-token) section below). +1. **Generate your API key**: Log in to the [Cloud Temple console](https://shiva.cloud-temple.com/login) and generate your Personal Access Token (see the [API Keys](#clés-api-personal-access-token) section below). -2. **Test your first request**: Execute the following curl command, replacing `` with your token: +2. **Test your first request**: Run the following curl command, replacing `` with your token: ```bash curl -X GET \ - -H "Authorization: Bearer " \ + -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ "https://shiva.cloud-temple.com/api/iam/v2/roles" ``` -3. **Analyze the response**: You will receive the list of IAM roles available in your tenant, allowing you to understand existing permissions. +3. **Analyze the response**: You will receive the list of IAM roles available in your tenant, allowing you to understand the existing permissions. ## Authentication ### API Keys (Personal Access Token) -The __API key__ allows you to authenticate when making API requests. Generating an API key, also known as a __Personal Access Token (PAT)__, is a secure way to connect to Console APIs without using a graphical interface. Each of these tokens is linked to a tenant and the user who created it. +The __API key__ allows you to authenticate when you want to make requests to the API. Generating an API key, also known as a __Personal Access Token (PAT)__, is a secure way to connect to the API Console without using a graphical interface. Each of these tokens is linked to a tenant and the user who created it. -Creating this token is done from your account. You can generate multiple keys and configure permissions for each within the limits of your rights. +Token creation is performed from your account. You can generate multiple keys and configure permissions for each, within the limits of your assigned privileges. -#### Create an API Key +#### Create an API key -To create an API key, simply __click on your profile__: +To create an API key, simply __click on your profile__ : @@ -62,87 +62,87 @@ In the profile menu, click on __'Personal Access Token'__ -You will then see all the API keys created for this user in this tenant. Click on __'New Personal Access Token'__ +You will then see on screen all the API keys that have been created for this user in this tenant. Click on __'New personal access token'__ You must then: - Specify the name of this new token, -- Set an expiration date (maximum 12 months validity), +- Specify an expiration date (maximum 12 months validity), - Choose the permissions associated with the token. -The details of your token are then displayed. __Warning: you will no longer be able to access these details afterward.__ +The details regarding your token are then displayed. __Warning, it will no longer be possible to access it afterwards.__ -If you don't record this information, you will need to delete and recreate the token. +If you do not record this information, you will need to delete and recreate the token. -For security reasons, it is recommended to create multiple tokens, each with a specific purpose (one token per application or business process) rather than creating one token with all permissions. +For security reasons, it is recommended to create multiple tokens, each with a specific purpose (one token for each application or each business process) rather than creating 1 token with all permissions. -You will then see the newly created token and its future expiration date. +You will then see the newly created token and its expiration date. :::info[Authentication Token Lifecycle] -When you use your __Personal Access Token (PAT)__ to authenticate with the API, you receive an access token in return. It's important to note that this access token is a __JSON Web Token (JWT)__ with a limited lifespan. +When you use your __Personal Access Token (PAT)__ to authenticate with the API, you receive an access token in return. It is important to note that this access token is a __JSON Web Token (JWT)__ with a limited lifespan. -- __Lifespan__: Each JWT token is valid for __5 minutes__. -- __Verification__: You can verify the issuance date (`iat`) and expiration date (`exp`) of your token by decoding it. Online tools like [jwt.io](https://jwt.io) make this easy. +- __Lifespan__ : Each JWT token is valid for a duration of __5 minutes__. +- __Verification__ : You can verify the issuance date (`iat`) and expiration date (`exp`) of your token by decoding it. Online tools such as [jwt.io](https://jwt.io) allow you to do this easily. -Once the token expires, you will need to re-authenticate with your PAT to obtain a new one. Therefore, it's recommended to manage this lifecycle in your scripts and applications by planning for automatic token renewal. +Once the token expires, you will need to re-authenticate with your PAT to obtain a new one. It is therefore recommended to manage this lifecycle in your scripts and applications by planning for automatic token renewal. ::: ## API Portal Access -The OpenAPI 3.0 (Swagger) documentation for Cloud Temple console APIs is available directly in the application: +The OpenAPI 3.0 (Swagger) documentation for the Cloud Temple Console APIs is available directly within the application: -API access requires authentication. Once authenticated, all operations must include the __'Authorization'__ header with the bearer access token obtained during the authentication phase. +Access to the APIs requires authentication. Once authenticated, all operations must include the __'Authorization'__ header with the bearer access token obtained during the authentication phase. -The endpoint URLs are directly provided in __Swagger__ (in the "Servers" object on each API page). +The URL for the endpoints is directly provided in __Swagger__ (in the "Servers" object on each APIs page). -### Explore Interactive Documentation +### Explore the interactive documentation The API portal allows you to: - View all available endpoints by module - Test requests directly from the interface -- See data models (schemas) for each resource +- View data models (schemas) for each resource - View possible response codes for each endpoint -## Endpoint Structure +## Endpoints structure ### URL Format Cloud Temple API URLs follow a consistent structure: ``` -https://shiva.cloud-temple.com/api/{module}/v{version}/{resource} +https://shiva.cloud-temple.com/api/{module}/v{version}/{ressource} ``` Where: -- `{module}`: The module concerned (compute, iam, network, backup, etc.) -- `{version}`: The API version (v1, v2, etc.) -- `{resource}`: The resource to manipulate (virtual-machines, users, networks, etc.) +- `{module}` : The relevant module (compute, iam, network, backup, etc.) +- `{version}` : The API version (v1, v2, etc.) +- `{ressource}` : The resource to manipulate (virtual-machines, users, networks, etc.) -### Endpoint Examples +### Example Endpoints ``` -# Virtual machines (Compute) +# Machines virtuelles (Compute) GET https://shiva.cloud-temple.com/api/compute/v1/virtual-machines POST https://shiva.cloud-temple.com/api/compute/v1/virtual-machines GET https://shiva.cloud-temple.com/api/compute/v1/virtual-machines/{id} PATCH https://shiva.cloud-temple.com/api/compute/v1/virtual-machines/{id} DELETE https://shiva.cloud-temple.com/api/compute/v1/virtual-machines/{id} -# Identity and access (IAM) +# Identité et accès (IAM) GET https://shiva.cloud-temple.com/api/iam/v1/users POST https://shiva.cloud-temple.com/api/iam/v1/users GET https://shiva.cloud-temple.com/api/iam/v1/users/{id} -# Networks +# Réseaux GET https://shiva.cloud-temple.com/api/network/v1/virtual-networks POST https://shiva.cloud-temple.com/api/network/v1/virtual-networks ``` @@ -160,24 +160,24 @@ The Cloud Temple API is organized into functional modules: | S3 | Object storage | `/s3/v1/` | | OpenShift | PaaS platform | `/openshift/v1/` | | Bastion | SSH/RDP bastion appliances | `/bastion/v1/` | -| Network | Level 2 and 3 network management | `/network/v1/` | -| Housing | Colocation and housing | `/housing/v1/` | +| Network | Layer 2 and 3 network management | `/network/v1/` | +| Hosting | Colocation and housing | `/housing/v1/` | | Marketplace | Solutions catalog | `/marketplace/v1/` | -| Support | Tickets and support | `/support/v1/` | +| Support | Tickets and assistance | `/support/v1/` | | Notification | Notification system | `/notification/v1/` | | LLMaaS | Artificial intelligence | `/llmaas/v1/` | ## Activities -Tracking of write-type requests (POST, PUT, PATCH, DELETE) is handled through activity management. Each such request automatically generates an associated activity. An HTTP 201 status code confirms the successful creation of the activity. The unique identifier of this activity is returned in the response headers under the 'Location' key. +Write requests (POST, PUT, PATCH, DELETE) are tracked via activity management. Each request of this type automatically generates an associated activity. An HTTP 201 status code confirms the successful creation of the activity. The unique identifier of this activity is returned in the response headers, under the 'Location' key. -Once the identifier is retrieved, it's possible to access the activity details using the Activity module API: +Once the identifier is retrieved, the activity details can be accessed using the Activity module API: -The activity content includes all essential information to identify the operation, its execution date, and its progress status. Here is the activity model: +The activity content includes all essential information to identify the operation, its execution date, as well as its progress status. Here is the activity model: ```json { @@ -201,7 +201,7 @@ The activity content includes all essential information to identify the operatio ### Activity States -The __state__ object can take different forms depending on the activity state: +The __state__ object can take different forms depending on the state of the activity, namely: #### waiting @@ -237,7 +237,7 @@ failed: { #### completed -State if the operation is completed: +Status if the operation is completed: ```json completed: { @@ -247,26 +247,26 @@ completed: { } ``` -:::info[Created Resource Identifier] -The identifier (UUIDv4) of the created resource is available in the activity result once it's completed. +:::info[Identifiant de la ressource créée] +The Identifier (UUIDv4) of the created resource is available in the activity result once it is completed. ::: ## API Limits -### Why Limits? +### Why rate limits? -The Cloud Temple console defines __caps on the volume of requests__ that a user can make to the API over a specified period. Implementing these rate limits is a common measure in API management, adopted for several essential reasons: +The Cloud Temple console defines __caps on the request volume__ that a user can send to the API over a specified period. Implementing these rate limits is a common practice in API management, adopted for several key reasons: -- __Abuse Prevention__: These limits help safeguard API integrity by preventing abusive or careless usage that could compromise its operation. -- __Quality of Service Assurance__: By regulating API access, we ensure fair resource distribution, allowing all users to benefit from a stable and high-performing experience. +- __Abuse prevention__ : These limits help safeguard API integrity by preventing abusive or clumsy usage that could compromise its operation. +- __Service quality assurance__ : By regulating API access, we ensure an equitable distribution of resources, allowing all users to benefit from a stable and high-performing experience. -Take for example a poorly designed or inefficient script that attempts repeated API calls, risking resource saturation and performance degradation. By establishing request thresholds, we prevent these situations and maintain __smooth, uninterrupted service__ for all our customers. +Consider the example of a poorly designed or inefficient script that attempts repetitive API calls, risking resource saturation and performance degradation. By establishing request thresholds, we prevent these scenarios and ensure the maintenance of __a smooth and uninterrupted service__ for our entire customer base. -### What are the Rate Limits for the Cloud Temple Console API? +### What are the rate limits for the Cloud Temple Console API? We apply quantitative restrictions on user interactions with the console for each product. -Limits are defined in __requests per second (r/s) and per source IP__. Beyond the limit threshold, the system will respond with an HTTP 429 error code, indicating that the authorized request limit has been exceeded. +Limits are defined in __requests per second (r/s) per source IP__. Beyond the threshold, the system will respond with an HTTP 429 error code, indicating that the allowed request limit has been exceeded. Here are the defined limits: @@ -274,13 +274,13 @@ Here are the defined limits: |---|---| | Cloud Temple Console | 25 r/s | | Identity (IAM) | 25 r/s | -| VMware IaaS | 25 r/s | +| IaaS VMware | 25 r/s | | OpenIaaS | 25 r/s | | S3 | 25 r/s | | OpenShift | 25 r/s | | Bastion | 25 r/s | | Network | 25 r/s | -| Housing | 25 r/s | +| Hosting | 25 r/s | | Marketplace | 25 r/s | | Support | 25 r/s | | Notification | 25 r/s | @@ -290,15 +290,15 @@ Here are the defined limits: Certain specific API endpoints, particularly those related to authentication or sensitive actions, have more restrictive limits to enhance security and ensure stability. -| Route | Limit Threshold | +| Route | Rate Limit Threshold | |---|---| | Authentication (IAM) | 5 r/s | | IaaS - Storage (Datastores) | 20 r/s | | Marketplace (Contact) | 1 r/min - 5 r/h | -### How Do Rate Limits Work? +### How do rate limits work? -If the number of requests sent to an API endpoint exceeds the authorized limit, the endpoint will respond with __an HTTP 429 response code__. This code indicates that the user has exceeded the allowed number of requests. When this occurs, the API endpoint will also provide a JSON object as a response, containing detailed information about the applied limitation: +If the number of requests sent to an API endpoint exceeds the allowed limit, the endpoint will respond by returning __an HTTP 429 response code__. This code indicates that the user has exceeded the permitted number of requests. When this occurs, the endpoint will also provide a JSON object as a response, which will contain detailed information about the applied rate limit: ```json { @@ -309,67 +309,67 @@ If the number of requests sent to an API endpoint exceeds the authorized limit, } ``` -### How to Avoid Making Too Many Requests? +### How to avoid making too many requests? -It's recommended to limit the number of API calls made by your automation to stay below the rate limit set for the endpoint. +It is recommended to limit the number of API calls made by your automation to stay below the rate limit set for the endpoint. -This situation often occurs when multiple requests are executed in parallel using multiple processes or threads. +This situation often occurs when multiple requests are executed in parallel, using multiple processes or threads. -There are several ways to improve your automation's efficiency, including using __caching__ mechanisms and implementing __a retry system with exponential backoff__. This method involves taking a short pause when a rate limit error is encountered, then retrying the request. If the request fails again, the pause duration is gradually increased until the request succeeds or until a maximum number of retries is reached. +There are several ways to improve the efficiency of your automation, including using __caching__ mechanisms and implementing __a retry system with exponential backoff__. This method involves taking a short pause when a rate limit error is encountered, then retrying the request. If the request fails again, the pause duration is gradually increased until the request succeeds or a maximum number of retries is reached. -This approach has many advantages: +This approach offers several benefits: -- __Exponential backoff__ ensures that initial attempts are made quickly while providing longer delays in case of repeated failures. -- Adding __random variation__ to the pause helps prevent all attempts from occurring simultaneously. +- __Exponential backoff__ ensures that initial attempts are executed quickly, while allowing for longer delays in case of repeated failures. +- Adding __jitter__ to the pause helps prevent all attempts from occurring simultaneously. -It's important to note that __unsuccessful requests don't affect your rate limit__. However, continuously resending a request might not be a viable long-term solution, as this behavior could change in the future. We therefore recommend not relying exclusively on this mechanism. +It is important to note that __failed requests do not count against your rate limit__. However, continuously retrying a request may not be a viable long-term solution, as this behavior could change in the future. Therefore, we recommend not relying exclusively on this mechanism. -The __[Backoff](https://pypi.org/project/backoff/)__ and __[Tenacity](https://pypi.org/project/tenacity/)__ Python libraries are good starting points for implementing mitigation strategies. +The Python libraries __[Backoff](https://pypi.org/project/backoff/)__ and __[Tenacity](https://pypi.org/project/tenacity/)__ are good starting points for implementing backoff strategies. -## Endpoint Lifecycle and Deprecation +## Lifecycle and deprecation of endpoints ### Deprecation Policy -Cloud Temple is committed to maintaining API compatibility over time. However, when it's necessary to evolve the API (new features, optimizations, security fixes), some endpoints may be deprecated and then removed. +Cloud Temple is committed to maintaining the compatibility of its API over time. However, when it is necessary to evolve the API (new features, optimizations, security fixes), certain endpoints may be deprecated and subsequently removed. #### 3-Month Minimum Rule When an endpoint is marked as deprecated: -1. **Official Announcement**: Deprecation is announced in the console release notes +1. **Official Announcement**: The deprecation is announced in the console release notes 2. **Transition Period**: The endpoint remains **accessible and functional for at least 3 months** after the announcement -3. **Removal Date**: A specific final removal date is communicated at the time of announcement -4. **Documented Alternative**: The new replacement endpoint is documented and available +3. **Removal Date**: A specific permanent removal date is communicated at the time of the announcement +4. **Documented Alternative**: The replacement endpoint is documented and available This 3-month rule gives you the necessary time to adapt your code and migrate to the new endpoints. -### How to Identify a Deprecated Endpoint? +### How to identify a deprecated endpoint? -#### In the API Portal (Swagger) +#### In the API portal (Swagger) -Deprecated endpoints appear crossed out in the Swagger documentation: +Deprecated endpoints appear struck through in the Swagger documentation: -~~POST /v1/old/endpoint~~ +~~POST /v1/ancien/endpoint~~ The endpoint description includes: - The deprecation announcement date -- The planned removal date +- The scheduled removal date - The recommended replacement endpoint ### Best Practices for Managing Deprecations -1. **Monitor Deprecated Features**: Regularly check the deprecated features in the console to be informed of upcoming deprecations. +1. **Monitor deprecated features**: Regularly check the console for deprecated features to stay informed about upcoming deprecations. -2. **Plan Your Migrations**: As soon as a deprecation is announced, plan the migration of your code to the new endpoint within 3 months. +2. **Plan your migrations**: As soon as a deprecation is announced, plan to migrate your code to the new endpoint within 3 months. -3. **Test New Endpoints**: Test new endpoints as soon as they're available, even during the transition period. +3. **Test new endpoints**: Test new endpoints as soon as they are available, even during the transition period. -4. **Document Your Dependencies**: Maintain a list of endpoints your application uses to facilitate future migrations. +4. **Document your dependencies**: Maintain a list of the endpoints your application uses to facilitate future migrations. -## Best Practices +## Best practices ### Token Security @@ -383,30 +383,30 @@ The endpoint description includes: ### Error Handling -Always handle HTTP errors in your code. Pay particular attention to the following codes: +Always handle HTTP errors in your code. Pay special attention to the following codes: | Code | Description | Recommended Action | |------|-------------|-------------------| | **401** Unauthorized | Expired or invalid token | Re-authenticate with your PAT | -| **403** Forbidden | Insufficient permissions | Check token rights | +| **403** Forbidden | Insufficient permissions | Check token permissions | | **429** Too Many Requests | Rate limit reached | Wait before retrying (backoff) | | **500/503** Server Error | Temporary server error | Retry later | ### API Call Optimization - Use pagination for large lists -- Cache data that changes rarely +- Cache data that changes infrequently - Use filters to limit returned data - Group operations when possible -- Track asynchronous activity status instead of intensive polling +- Track the status of asynchronous activities instead of intensive polling -### Retry with Exponential Backoff +### Retry with exponential backoff To handle temporary errors or rate limiting (HTTP 429), implement a retry strategy with exponential backoff: -:::tip[Recommended Retry Strategy] -- ⏱️ **Progressive Wait**: 1s, 2s, 4s, 8s... -- 🎲 **Random Variation**: Prevents all clients from retrying simultaneously -- 🔄 **Retry Limit**: Maximum 3-5 attempts -- 📚 **Python Libraries**: [Backoff](https://pypi.org/project/backoff/) or [Tenacity](https://pypi.org/project/tenacity/) -::: +:::tip[Recommended retry strategy] +- ⏱️ **Progressive delay** : 1s, 2s, 4s, 8s... +- 🎲 **Random jitter** : Prevents all clients from retrying simultaneously +- 🔄 **Attempt limit** : Maximum 3-5 attempts +- 📚 **Python libraries** : [Backoff](https://pypi.org/project/backoff/) or [Tenacity](https://pypi.org/project/tenacity/) +::: \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/console/billing/concepts.md b/i18n/en/docusaurus-plugin-content-docs/current/console/billing/concepts.md index 94c9cce5..32b65707 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/console/billing/concepts.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/console/billing/concepts.md @@ -3,106 +3,83 @@ title: Cost Manager --- import billingDashboardPreview from '@site/docs/console/billing/images/billing_dashboard_preview.png' -import billingDashboardTotal from '@site/docs/console/billing/images/billing_dashboard_consumption_total.png' -import billingDashboardPerProduct from '@site/docs/console/billing/images/billing_dashboard_consumption_per_product.png' -import billingDashboardPerService from '@site/docs/console/billing/images/billing_dashboard_consumption_per_service.png' +import billingDashboardConsumptionTotal from '@site/docs/console/billing/images/billing_dashboard_consumption_total.png' +import billingDashboardConsumptionPerProduct from '@site/docs/console/billing/images/billing_dashboard_consumption_per_product.png' +import billingDashboardConsumptionPerService from '@site/docs/console/billing/images/billing_dashboard_consumption_per_service.png' import billingConsumptionDetails from '@site/docs/console/billing/images/billing_consumption_details.png' import billingPricesList from '@site/docs/console/billing/images/billing_prices_list.png' -The **Cost Manager** is accessible from the main menu of the Cloud Temple Console. It gives you a complete and transparent view of your cloud resource consumption, enabling you to manage your expenses independently. +## Overview -:::info -Access to the Cost Manager requires the appropriate rights on your tenant. Please contact your sales representative for more information and to learn about the conditions for accessing the service. -::: - -## Dashboard - -The Cost Manager dashboard is the module's home page. It provides a summary view of all your consumption for the selected period. - -Cost Manager Dashboard +The **Cost Manager** is the module of the Cloud Temple Console dedicated to **visibility into your consumption**. It allows you to track in real time the usage of your cloud resources within a tenant and gain a clear view of your expenses. -From this dashboard, you can: +This module addresses a fundamental need: **understand what you consume, when you consume it, and at what cost**, without having to navigate through complex tables or detailed invoices. -- **Select a period** for analysis (current month, previous month, or a custom date range), -- **Navigate between the different tabs** to refine your consumption analysis, -- **Export your consumption data** to integrate into your internal reporting tools. - -## Global Consumption +:::info +The Cost Manager displays the **actual consumption** of your resources on the selected tenant. The data is updated regularly to reflect your current usage. +::: -The **Global Consumption** tab shows the total amount consumed during the selected period. It is the starting point for understanding the overall trend of your cloud expenses. +## Main Dashboard -Global consumption for the period +The Cost Manager home page provides a visual summary of your consumption. Upon opening, you have an overview that allows you to quickly identify consumption trends and the most significant cost categories. -This chart allows you to visualize: + -- The **total amount** consumed during the period, -- The **time evolution** of your consumption (day by day or month by month depending on the chosen granularity), -- Any **consumption spikes** to quickly identify anomalies or surges. +The dashboard is organized around several complementary sections, accessible via the tabs available at the top of the page. -:::info -**Reading the chart for the current month** +## Total Consumption -For the current month, the chart shows two visual zones: +The **Total Consumption** tab provides an aggregated view of all your consumption over the selected period. This chart allows you to observe the evolution of your spending over time and identify any potential spikes or trends. -- The **blue (solid) part** represents the **actual consumption to date**, i.e. resources actually consumed since the beginning of the month, -- The **orange (hatched) part** represents the **forecast** estimated until the end of the month, calculated based on your current consumption rate. + -This projection allows you to anticipate your end-of-month budget in real time. -::: +You can adjust the **display period** to refine your analysis: day, week, month, or custom range. The total consumption curve is directly readable and does not require any particular technical expertise. ## Consumption by Product -The **Consumption by Product** tab lets you identify the breakdown of your expenses by the Cloud Temple products you have subscribed to. - -Consumption breakdown by product - -Each product (IaaS, Storage, Network, etc.) is presented with: +The **Consumption by Product** tab breaks down your consumption by the main Cloud Temple service categories you have subscribed to: compute, storage, networking, etc. -- Its **relative share** of total consumption, -- Its **absolute amount** for the period, -- The **trend** compared to the previous period. + -This view is particularly useful for identifying which products represent the largest cost items and directing your optimization decisions. +This view is particularly useful for **identifying the most significant expense categories** and guiding optimization decisions. Each product is represented with its relative share of total consumption, which facilitates reading and comparison. -## Consumption by Service +## Consumption by service -The **Consumption by Service** tab refines the analysis by breaking down consumption at the level of individual services within each product. +The **Consumption by service** tab provides an additional level of detail by breaking down consumption by **specific service** within each product. -Consumption breakdown by service + -This detailed view allows you to: - -- Precisely identify **which services** contribute most to your billing, -- Compare the consumption of similar services, -- Detect under-used or over-provisioned services to **optimize your cloud footprint**. +This level of granularity allows you to go further in your analysis: for example, you can distinguish the consumption of your virtual machines, block storage, snapshots, or network bandwidth, and thus precisely identify the resources that generate the highest costs. ## Consumption Details -The **Consumption Details** section lists all individual billing lines for the selected period. It is the most granular view of the Cost Manager. - -Consumption line details +The **Consumption Details** view presents a comprehensive table listing all resources consumed during the period. Each row corresponds to an identifiable resource (virtual machine, storage volume, public IP address, etc.) with its associated consumption level. -For each consumption line, you will find: + -- The **name of the consumed resource**, -- The **quantity** consumed and the associated **unit of measure** (hours, GB, requests, etc.), -- The **unit price** applied, -- The **total amount** for this line during the period. +This detail is valuable for teams wishing to perform an **analytical breakdown** of their costs or to identify potentially unused resources that could be disabled to optimize spending. -This view is essential for precise accounting reconciliation or for analyzing the usage of specific resources in detail. +## Pricing Grid -## Price Catalog +The **Pricing Grid** (or **Price List**) tab lists all unit rates applicable to the resources available in your tenant. It is the current price catalog that allows you to estimate the cost of new resources before their deployment. -The **Price Catalog** lists the unit prices of all resources and services available on your Cloud Temple tenant. + -Unit price catalog +Each entry in the grid indicates: -This catalog allows you to: - -- **Anticipate the cost** of a new resource before ordering it, -- Perform **budget simulations** for your cloud projects, -- Compare prices between different resource tiers or configurations. +- The **resource type** involved +- The **billing unit** (per hour, per GB, per unit, etc.) +- The applicable **unit price** :::tip -The prices displayed in the catalog are the contractual rates applicable to your tenant. They may differ from public rates depending on your Cloud Temple contract. +The pricing grid is your reference for **estimating the cost** of an infrastructure before ordering it. Combine this information with consumption data to identify optimization levers. ::: + +## Best practices + +To get the most out of the Cost Manager, here are some recommendations: + +- **Regularly monitor** your usage to quickly detect any budget drift. +- **Compare periods**: the tool allows you to analyze month-over-month changes to identify trends. +- **Use the service view** to identify underutilized or forgotten resources (old snapshots, unattached volumes, etc.). +- **Cross-reference with the pricing grid** to evaluate the financial impact of any infrastructure changes before implementing them. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/console/console.md b/i18n/en/docusaurus-plugin-content-docs/current/console/console.md index 054e4d74..c9ba6e6f 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/console/console.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/console/console.md @@ -2,99 +2,99 @@ title: Overview --- -## Cloud Temple Console +## The Cloud Temple Console -The Cloud Temple Console is Cloud Temple's integrated cloud management platform (**Cloud Management Platform**). It serves as the central hub for managing all your cloud resources, providing a unified and high-performance interface. +The Cloud Temple console is Cloud Temple's integrated cloud management platform (**Cloud Management Platform**). It serves as the central hub for managing all your cloud resources, providing you with a single, high-performance interface. -Thanks to the **Console**, you can monitor and operate your cloud infrastructure with great ease. Here is an overview of its main features: +With the **Console**, you can monitor and operate your cloud infrastructures with great ease. Here is an overview of its main features:

The IAM Module

-

Explore the IAM (Identity and Access Management) module of the Cloud Temple Console.

- Go here → +

Discover the IAM (Identity Access Management) module of the Cloud Temple console.

+ Click here →

Support

-

View scheduled operations and manage incidents.

- Go here → +

View scheduled operations and manage Incidents

+ Click here →

Deploy Infrastructure

Order and track the deployment of new resources.

- Discover the menus → + Explore menus →

Metrics

-

Monitor and analyze performance metrics for your resources.

- Discover the menus → +

Order and track the deployment of new resources.

+ Explore menus →

Cost Manager

-

Track and analyze your cloud resource consumption by product and by service.

- Access the module → +

Track and analyze your cloud resource consumption by product and service.

+ Access module →
-### Management of Your Cloud Temple Products and Services +### Management of your Cloud Temple products and services -The console enables you to efficiently manage your virtual servers, storage, networks, and Cloud services through a centralized interface. +The console allows you to efficiently manage your virtual servers, storage, networks, and Cloud services from a centralized interface. -### Monitoring and Reporting +### Monitoring and reporting -Gain a comprehensive view of your resources through integrated monitoring and reporting tools, ensuring your environments operate at optimal performance. +Gain a comprehensive view of your resources with integrated monitoring and reporting tools to ensure your environments operate optimally. -### Automation and Orchestration +### Automation and orchestration -With its **powerful API**, the console simplifies the automation of repetitive tasks and the orchestration of complex workflows. Deploy, manage, and scale your resources with just a few clicks or through custom scripts. +With its **powerful API**, the console simplifies the automation of repetitive tasks and the orchestration of complex workflows. Deploy, manage, and scale your resources with a few clicks or through custom scripts. -### Security and Compliance +### Security and compliance -The console includes advanced features to: +The console integrates advanced features to: - Manage identities and access, - Filter access to meet regulatory requirements, - Strengthen your security policies. -### Technical Assistance and Customer Support +### Technical Support and Customer Support -The console provides direct access to your technical support cases. You benefit from: +The console provides direct access to your technical support tickets. You receive: - Dedicated customer support to resolve your technical issues, - Assistance with the initial configuration of your services. ### Professional Services -Need expertise? Benefit from the support of our engineers for: +Need expertise? Take advantage of our engineers' support for: - Personalized consulting, - Assistance with implementing cloud architectures, - Training for your teams. -The Cloud Temple **'Console'** portal is **the integrated cloud management platform** (Cloud Management Platform) of **Cloud Temple**. +The Cloud Temple **'Console'** portal is **the integrated cloud management platform** (Cloud Management Plateform) of **Cloud Temple**. -The Cloud Temple Console enables you to manage cloud resources such as virtual servers, storage, networks, and application services. -It is a centralized management interface that allows you to design and operate your cloud infrastructure. +The Cloud Temple Console allows you to manage cloud resources such as virtual servers, storage, networks, and application services. +It is a centralized management interface that enables you to design and operate your cloud infrastructure. -The Cloud Temple Console enables your teams to: +The Cloud Temple Console specifically enables your teams to: -- **Manage your Cloud Temple products and services**, -- **Monitor and report on the performance of your cloud resources**, -- **Automation and orchestration**: Through its API, the Console allows you to automate repetitive tasks and orchestrate complex workflows for deploying, managing, and scaling your cloud resources, -- **Security and compliance**: The Console enables identity management and access filtering to ensure regulatory compliance and adherence to your security policies, -- **Integration with Cloud Adoption Frameworks (CAF)**: Thanks to its hybridization capabilities, you can maintain seamless operations with third-party cloud providers (Microsoft Azure and Amazon AWS) from a single interface, simplifying the integration and management of your multi-cloud application environments, -- **Access and tracking of technical support tickets**: Dedicated technical support is also available, including customer support for troubleshooting technical issues as well as assistance with initial configuration, -- **Subscription to professional services**: To effectively manage your cloud environments, your teams can benefit from our engineers’ expertise in consulting, architectural implementation support, or training. +- **Management of your Cloud Temple products and services**, +- **Monitoring and reporting** on the operation of your cloud resources, +- **Automation and orchestration**: The Console, through its API, allows you to automate repetitive tasks and orchestrate complex workflows to deploy, manage, and scale your cloud resources, +- **Security and compliance**: The Console enables identity control and access filtering to ensure regulatory compliance and adherence to your security policies, +- **Integration of Cloud Adoption Frameworks** (Cloud Adoption Framework): thanks to its hybridization features, you can ensure operational continuity with third-party cloud providers (Microsoft Azure et Amazon AWS) from a single interface, facilitating the integration and management of your multi-cloud application environments. +- **Access and tracking of technical support tickets**: Dedicated technical support is also available. This includes customer support for resolving technical issues as well as assistance with initial configuration. +- **The ability to subscribe to professional services**: to effectively manage your Cloud environments, your teams can benefit from our engineers' assistance for consulting, architecture implementation support, or training. -## User Features Access via API +## Access to user features via the API -Access to all Console features is available through the Console API. -You can find detailed information about verbs and configurations via **'Profile'** and **'APIs'** +Access to all Console features is available via the Console API. +You can view details of the methods and configurations via **'Profile'** and **'APIs'** ## Terraform Provider -Cloud Temple provides you with a [Terraform provider](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest) to manage your Cloud platform "as code". +Cloud Temple provides you with a [Terraform provider](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest) to manage your Cloud platform *"as code". \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/console/console_quickstart.md b/i18n/en/docusaurus-plugin-content-docs/current/console/console_quickstart.md index 4c24e82e..67a1a5db 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/console/console_quickstart.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/console/console_quickstart.md @@ -16,139 +16,137 @@ import shivaSupportCriticities from '@site/docs/console/images/shiva_incident_cr ## Prerequisites -- Have subscribed to a Cloud Temple offer. To subscribe easily, you can [contact us](https://www.cloud-temple.com/contactez-nous/) or by email at __contact@cloud-temple.com__. +- Have a Cloud Temple product subscription. To subscribe easily, you can [contact us](https://www.cloud-temple.com/contactez-nous/) or email __contact@cloud-temple.com__. - Have access to the Console -- Have your public IPv4 address registered in the Cloud Temple trusted zone (Console access is restricted to identified trusted addresses) +- Have your public IPv4 address registered in the Cloud Temple trusted zone (Console access is limited to identified trusted addresses) -## Connecting to Your Cloud Temple Tenant +## Connecting to your Cloud Temple tenant -The Console is accessible via the URL below: [Console](https://shiva.cloud-temple.com) or directly through the URL provided to you by email. +The Console is accessible via the URL below: [Console](https://shiva.cloud-temple.com) or directly from the URL provided to you via email. -The first page allows you to select the [organization](iam/concepts.md#organizations) in which your user was created. -Once the company is specified, click on __'Sign In'__. +The first page allows you to select the [organization](iam/concepts.md#organisations) in which your user was created. +Once the company is entered, please click on __'Log in'__. -You will then be redirected to a page prompting you to authenticate. -After logging in, you will land on this page. +You will then be redirected to a page asking you to authenticate. +Once logged in, you will arrive on this page. -Here, you will find all metrics related to the products subscribed to within your scope. If there are any issues with your VMware and/or OpenIaaS products, alerts will be displayed—alert severity is indicated by color. +You will find all metrics regarding the products subscribed to within your scope. In case of issue(s) with your VMware and/or OpenIaaS products, alerts will be visible; the color corresponds to their severity. ## Language Management -The console is available in __French__ and __English__. You can change the operating language using the __language__ icon located in the top-right corner of the screen. +The console is available in __French__, __English__. You can change the working language using the __language__ icon located in the top right corner of the screen. -To change a user's language, go to their __'Profile'__, in the top-right corner of the screen, and select __'User Settings'__. +A user's language change must be performed in their __'Profile'__, located in the top right corner of the screen, in __'User Settings'__. -Configuration is set per tenant [Tenant](iam/concepts.md#tenant). +The configuration is applied per tenant [Tenant](iam/concepts.md#tenant). ## Technical Support Access -At any time, you can contact the __Cloud Temple Support Team__ via the __"buoy" icon__ located in the top-right corner of the screen. +At any time, you can contact __the Cloud Temple support team__ via __the 'lifebuoy' icon__ located in the top right corner of the screen. -You will be guided through the entire support request process. +You will be guided throughout the support request process. The first step is identifying the type of support request: -- Request advice on using a product (non-incident), +- Request advice on using a product (hors incident), - Request assistance related to your customer account, - Report an incident or request technical support. -- Request assistance from a professional service (deployment of a Cloud Temple engineer for a specific issue). +- Request professional service assistance (mise à disposition d'un ingénieur Cloud Temple sur une problématique). -You can then provide additional details and attach files (e.g., images or logs). +You can then provide additional details and attach files (image ou journaux par exemple). -The requester may also specify a severity level (P1 to P5) in the ticket description, especially in the case of a security incident, as shown below: +The requester can also specify a criticality level (P1 à P5) in the ticket description, in the case of a security incident, such as: __CRITICAL (P1)__: -- Suspected leakage of sensitive data +- Suspected sensitive data breach - Detection of unauthorized access to your data - Compromise of your administrative credentials -- Complete unavailability of your critical services +- Total unavailability of your critical services - Abnormal behavior on sensitive data -- Breach of personal data +- Personal data breach -__HIGH (P2)__: +__HIGH (P2)h__: - User access malfunction -- Anomaly in data encryption +- Anomaly in your data encryption - Loss of access to certain critical features - Data inconsistency -- Major performance degradation impacting operations +- Major slowdowns impacting business operations __MEDIUM (P3)__: - Localized performance issue -- Incident affecting a non-critical function +- Incident on a non-critical function - Configuration error with limited impact -- Occasional access difficulties +- Occasional access difficulty __LOW (P4)__: -- Request for investigation +- Investigation request - Anomaly with no direct impact -- Compliance-related question +- Compliance question - Need for technical clarification -__OPERATIONAL (P5)__: +__OPERATIONAL SERVICE (P5)__: - Operational service with no immediate risk -Once your request has been submitted, you can retrieve your requests via the __"buoy" icon__ located in the top-right corner of the screen: +Once your request is submitted, you can retrieve your requests via __the 'lifebuoy' icon__ located in the top right corner of the screen : ## User Feature Access via the Web Interface -All features available to your user (based on their permissions) are located on the left side of the screen, within the green sidebar. -Features are grouped by module. These primarily include: +All features accessible to your user (en fonction de ses droits) are located on the left side of the screen, in the green banner. +Features are grouped by module. This primarily includes: -- Your __resource inventory__, -- The __operation tracking__ module, -- The __IaaS resource management__ (Compute, storage, networking, ...), -- The __OpenIaaS resource management__ (Compute, storage, networking, ...), -- Access to __additional services__ (Bastion, monitoring, ...), -- The __organization administration__ (Tenant and permission management, ...). +- The __inventory__ of your resources, +- The __operation tracking__, +- The __management of IaaS resources__ (Calcul, stockage, réseau, ...) +- The __management of OpenIaaS resources__ (Calcul, stockage, réseau, ...) +- Access to __ancillary services__ (Bastion, monitoring, ...) +- The __administration of your organization__ (Gestion des tenants, des droits, ...) -The activation of a module for a user depends on their assigned permissions. For example, the __'Order'__ module will not be available if the user does not have the __'ORDER'__ permission. - -Below is an overview of the available modules. New modules are regularly added to the console: +Enabling a module for a user depends on the user's permissions. For example, the __'Order'__ module will not be available if the user does not have the __'ORDER'__ permission. +Below is a presentation of the available modules. New modules are regularly added to enrich the console:
-- __Dashboard__: provides a quick overview of the __total compute and storage resources__, backup __statistics__, and a __summary of support tickets__, -- __Inventory__: offers a view of all your __virtual machines__. If __tags__ are used, it enables filtering by __tag__ (e.g., business view, application view, ...), -- __Managed Services__: provides access to your __support requests__ and __service metrics__, -- __IaaS__: enables management of your __VMware IaaS infrastructure__ (virtual machines, clusters, hypervisors, replication, backup, ...), -- __OpenIaaS__: enables management of your __Xen Orchestra resources__ (virtual machines, backups, ...), -- __OpenShift__: enables management of your **RedHat OpenShift PaaS architecture** and container management across the platform’s three availability zones. -- __Bastion__: allows deployment and management of SSH/RDP bastion appliances within your networks, -- __Networking__: enables management of __Layer 2 and Layer 3 networks__, __public IPs__, and your __telecom circuits__, -- __Colocation__: provides visibility into equipment located in shared or dedicated colocation zones, -- __Order__: enables resource ordering and deployment tracking, -- __Administration__: consolidates user and tenant administration functions, as well as access to global logging. +- __Dashboard__ : provides a quick overview of the __total compute and storage resources__, backup statistics, and a __summary of support tickets__, +- __Inventory__ : provides a view of all your __'virtual machines'__ resources. If __tags__ are used, it allows a view by __tag__ (par exemple, vue métier, vue applicatif, ...), +- __Managed Services__ : provides access to tracking your __support requests__ and __service metrics__, +- __IaaS__ : allows __management of VMware IaaS infrastructure__ (Machines virtuelles, clusters, hyperviseurs, réplications, sauvegarde, ...), +- __OpenIaaS__ : allows __management of Xen Orchestra resources__ (Machines virtuelles, sauvegarde, ...), +- __OpenShift__ : allows management of your **RedHat OpenShift PaaS architecture** and management of your containers across the platform's 3 availability zones. +- __Bastion__ : Allows deploying and managing SSH/RDP bastion appliances in your networks, +- __Network__ : allows management of __Layer 2 and Layer 3 networks__, __public IPs__, and your __telecom circuits__, +- __Colocation__ : Provides a view of equipment located in __shared or dedicated colocation zones__, +- __Order__ : Allows ordering resources and tracking deployments, +- __Administration__ : Groups user and tenant administration functions as well as access to global logging.
- -The __'NEW'__ icons indicate that the corresponding product has been provisioned but is not yet qualified under the __SecNumCloud offering__, while __'BETA'__ icons indicate that the product has been provisioned and has just been qualified under the __SecNumCloud offering__. +The __'NEW'__ pictograms indicate that the product in question has been provisioned but is not yet qualified under the __SecNumCloud offer__, and __'BETA'__ indicates that the product in question has been provisioned and has just been qualified under the __SecNumCloud offer__. __Logging - Activity Tracking__ ===================================== -The Activities page is designed to provide full visibility into all read and write operations performed within the console, ensuring enhanced traceability and security. It highlights two main tabs: Recent and Archived. +The activities page is designed to provide complete visibility into all read and write operations performed within the console, thereby ensuring enhanced traceability and security. It highlights the two main tabs: Recent and Archived. @@ -159,7 +157,7 @@ The Activities page is designed to provide full visibility into all read and wri - __Recent__ - Recent operations -- Real-time tracking +- Real-time monitoring - __Archived__ @@ -177,7 +175,7 @@ The Activities page is designed to provide full visibility into all read and wri #### __Feature__ -- Search/Filter for specific operations +- Search/Filtering for specific operations ### __Usage__ @@ -185,24 +183,24 @@ The Activities page is designed to provide full visibility into all read and wri - __Navigation:__ - Select the "Recent" tab for real-time operations. - Choose "Archived" to view the history. - - Use search and filtering features to locate specific operations. + - Use the search and filtering features to locate specific operations. #### __Compliance Note__ -In accordance with the SecNumCloud certification, the retention period for Cloud Temple console events is a minimum of __6 months__, ensuring compliance with security and traceability requirements. +In accordance with the SecNumCloud qualification, event storage for the Cloud Temple console is retained for a minimum of __6 months__, thereby ensuring compliance with security and traceability requirements. -## Checking for the latest updates +## Viewing the latest updates -Click on the __'New Features'__ icon at the bottom-left of the green banner. You will find details of the changes for each version of the Cloud Temple console. +Click on the __'What's New'__ icon at the bottom left of the green banner. You will see the details of the changes for each version of the Cloud Temple console. -## User Features Access via API +## Access to user features via the API -Access to all Console features is available through the Console API. You can find detailed information about verbs and configurations via __'Profile'__ and __'APIs'__: +Access to all Console features is available via the Console API. You can view details on the verbs and configurations via __'Profile'__ and __'APIs'__ : ## Terraform Provider -Cloud Temple provides you with a [Terraform provider](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest) to manage your Cloud platform "as code". +Cloud Temple provides you with a [Terraform provider](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest) to manage your Cloud platform *"as code". \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/console/iam/concepts.md b/i18n/en/docusaurus-plugin-content-docs/current/console/iam/concepts.md index c8736b7b..f63f1828 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/console/iam/concepts.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/console/iam/concepts.md @@ -19,21 +19,20 @@ import shivaTenantRessources_01 from '@site/docs/console/iam/images/shiva_tenant ## Users -Access accounts to the Console are created by the sponsor's master account via invitation (regardless of the authentication repository). - -Credentials are global to your [Organization](#organizations). +Console access accounts are created by the sponsor's master account by invitation (regardless of the authentication repository). +Credentials are global to your [Organization](#organisations). *__Note:__ [Identity federation is managed at the organization level](#authentication-mechanisms)* -### Creating a User Account in Your Organization +### Creating a user account in your organization -Creating a user account in your organization is done via invitation. To invite a user to an [Organization](#organizations), go to the __'Administration'__ menu on the left side of your screen, on the green banner, then select the __'Users'__ submenu. +Creating a user account in your organization is done by invitation. To invite a user to an [Organization](#organisations), go to the __'Administration'__ menu on the left side of your screen on the green banner, then to the __'Users'__ submenu. -Click the __'New User'__ button from the Users page. +Click the __'New User'__ button from the users page. -Next, enter the user's email address. +Then enter the user's email address @@ -43,275 +42,281 @@ The user will then receive a verification email. Once verification is complete, the user will be able to log in to the console. -### Assigning Permissions to a User +### Assigning permissions to a user User rights management is performed from the user page. -By default, a user has no rights. Therefore, the administrator who sent the invitation must assign the necessary rights for the user's activities. Simply click on the user's __'Actions'__ menu and select the __'Edit'__ option. +By default, a user has no rights. Therefore, the administrator who sent the invitation must grant them the rights required for their activity. Simply click the user's __'Actions'__ menu and select the __'Edit'__ option. -The permissions activation menu then appears: +The rights activation menu then appears: -Permission configuration must be done for each [Tenant](#tenant) within the [Organization](#organizations). +Permissions must be configured for each [Tenant](#tenant) of the [Organization](#organisations). The list of permissions and their definitions is available [here](#permissions). -### Re-enrollment of a User +### User Re-registration -When a user has been provisioned but did not validate their registration within the expiration period of the email sent by the Console, they can no longer confirm their registration. In such cases, it is possible to resend a link so the user can renew their initial registration. +When a user has been provisioned but has not validated their registration within the expiration period of the email sent by the Console, they can no longer confirm their registration. It is then possible to send them a link so that they can renew their initial registration. -To re-enroll a user, go to the __'User'__ tab in the Administration panel, located at the bottom-left of the screen. +User re-registration must be performed in the __'User'__ tab of the Administration panel, at the bottom left of the screen. -Select the user you wish to re-enroll, then click the action button at the end of the row and choose __'Re-enrollment'__. +Select the user you wish to re-register, then click the action button at the end of the row and select __'Re-registration'__. -__Warning__: Make sure you are the original requester of the re-enrollment for your user account. Please report any requests that do not originate from you via a support ticket. +__Warning__: Ensure that you are the one initiating the re-registration request for your user account. Please report any requests that do not originate from you via a support ticket. -### Update Your Profile +### Update your profile -This action is available only for local accounts (non-SSO). +This action is only available for a local account (non-SSO). -Go to your __'Profile'__, located in the top-right corner of the screen, then select __'User Settings'__ and choose the __'Update Your Profile'__ action. +Select __'Profile'__ in the top right corner of the screen, then __'User Settings'__, and select the action __'Update your profile'__. -Next, go to your email inbox and click on the link generated by the Console. Simply follow the steps to update your profile. +Then go to your email inbox and click the link generated by the Console. Simply follow the steps to update your profile. -__Warning__: Make sure you are the original requester of the profile update. Please report any requests that do not originate from you via a support ticket. +__Warning__: Ensure that you are the one who initiated the profile update request. Please report any requests that did not originate from you via a support ticket. ### Password Reset -This action is available only for local accounts (non-SSO). +This action is only available for a local account (non SSO). -Go to your __'Profile'__, located in the top-right corner of the screen, then select __'User Settings'__ and choose the __'Reset Password'__ action. +Select __'Profile'__ in the top right corner of the screen, then __'User Settings'__ and select the __'Reset Password'__ action. -Next, go to your email inbox and click on the link generated by the Console. Simply follow the steps to update your password. +Then go to your email inbox and click on the link generated by the Console. Simply follow the steps to update your password. -__Warning__: Make sure you are the one initiating the password reset request. Please report any requests that do not come from you via a support ticket. +__Warning__: Ensure that you are the one requesting the password reset. Please report any requests that did not come from you via a support ticket. -### Reset Multi-Factor Authentication (MFA) +### Multi-Factor Authentication Reset -This action is available only for local accounts (non-SSO). +This action is only available for a local account (non SSO). -Go to your __'Profile'__, located in the top-right corner of the screen, then select __'User Settings'__ and choose the __'Reset MFA'__ action. +Select __'Profile'__ in the top right corner of the screen, then __'User Settings'__ and select the __'Reset MFA'__ action. -Next, go to your email inbox and click on the link generated by the Console. Simply follow the steps to update your multi-factor authentication. +Then go to your email inbox and click on the link generated by the Console. Simply follow the steps to update your multi-factor authentication. -__Warning__: Ensure you are the one initiating the MFA reset request. Please report any requests that do not originate from you via a support ticket. +__Warning__: Ensure that you are the one who initiated the request to reset your multi-factor authentication. Please report any requests that did not come from you via a support ticket. -### Deleting a User +### Deleting a user -To delete a user, go to the __'Users'__ tab in the Administration panel, located in the bottom-left corner of the screen. +User deletion must be performed in the __'User'__ tab of the Administration pane, at the bottom left of the screen. -Select the user you wish to delete, then click the action button at the end of the row and choose __'Delete'__. +Select the user you wish to delete, then click the action button at the end of the row and __'Delete'__. -Note: You cannot delete yourself, and you cannot delete a user marked as __'Owner'__. +Note: You cannot delete yourself and you cannot delete a __'Owner'__ user. -### Sign Out +### Log out -To sign out a user, go to their __'Profile'__, located in the top right corner of the screen, then select __'Sign Out'__. +To log out, navigate to the user's __'Profile'__ at the top right of the screen, then select __'Log out'__. -Automatic sign out occurs when the session's JWT token expires. +Automatic logout occurs when the session token (JWT Token) expires. ### Change a user's language -Changing a user's language is done in their __'Profile'__, located in the top-right corner of the screen, under __'User Settings'__. +The language change for a user must be performed in their __'Profile'__, at the top right of the screen, under __'User Settings'__. -The configuration is set individually for each tenant [Tenant](#tenant). +Configuration is applied per tenant [Tenant](#tenant). -### Thematic Notifications Subscription +### Thematic Notification Subscriptions -Managing subscriptions allows you to receive emails related to activated themes, automatically sent when corresponding events occur. +Subscription management allows you to receive emails related to the enabled themes, which will be automatically sent when corresponding events occur. -This feature is accessible in the user profile, under the "My Subscriptions" tab: +It is accessible in the user profile, under the "My Subscriptions" tab: -For example, in case of an incident, specific email notifications related to this theme will be generated. + For example, in the event of an incident, email notifications specific to this theme will be generated. -The list of available themes may evolve and gradually expand to adapt to changing operational needs and environment requirements. +The list of available themes is subject to change and will gradually expand to adapt to the needs and changes in our operational environment. ## Permissions -The Console enables fine-grained management of user rights within an organization, with segregation by tenant. - -Initially, it is the primary account of the sponsor that allows the initial configuration of accounts and associated permissions. - -Subsequently, the __'iam_write'__ permission enables an account to manage the permissions of other users. +The Console enables fine-grained management of user permissions within an organization, with tenant segregation. +Initially, the sponsor's primary account is responsible for the initial configuration of accounts and their associated permissions. +Subsequently, the __'iam_write'__ permission allows an account to manage the permissions of other users. -### Available Permissions for Users in Your Organization +### Permissions available for users in your organization -When a user is created, they have no permissions by default. Each permission is assigned individually and operates independently, without overlap with other permissions. Permissions are applied in conjunction, meaning a user must possess all required permissions to perform a specific action. +When a user is created, they have no permissions by default. Each permission is assigned individually and operates independently, without overlapping with other permissions. They apply in conjunction, meaning a user must have all required permissions to perform a specific action. The following permissions are configurable for each user and for each tenant in your organization: -- __"read" permissions__: Allow only viewing of resources, with no ability to modify them. -- __"write" permissions__: Permit modification of configurations. -- __"management" permissions__: Enable advanced management of resources. -- __"console_access" permissions__: Allow PMAD-style connections to resources. -- __"virtual_machine_power" permissions__: Permit management of a virtual machine's power state. +- “read” type permissions: allow only resource viewing without modification capabilities. +- “write” type permissions: allow modification of configurations. +- “management” type permissions: allow advanced resource management. +- “console_access” type permissions: allow PMAD-type connections to resources. +- “virtual_machine_power” type permissions: allow management of a virtual machine's power state. - __These are permissions, not roles.__ As such, both READ and WRITE permissions are required to modify a configuration. -Last updated: 04/20/2026 - -| Permission Name | Permission Description | -| --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | -| activity_read | View logs and activity records | -| activity_write | Manage logs and activity records | -| backup_iaas_opensource_read | OpenIaaS offering – View backup resources | -| backup_iaas_opensource_write | OpenIaaS offering – Modify backup resources | -| backup_iaas_spp_read | VMware offering – View backup resources | -| backup_iaas_spp_write | VMware offering – Modify backup resources | -| bastion_read | View bastion resources | -| bastion_write | Manage bastion resources (appliances, sessions, etc.) | -| bastion_console_access | Grant access to the console (SSH/RDP) of a resource protected by a bastion appliance | -| compute_iaas_opensource_console_access | OpenIaaS offering – Open the console of a virtual machine | -| compute_iaas_opensource_infrastructure_read | OpenIaaS offering – View advanced data of Xen Orchestra resources | -| compute_iaas_opensource_infrastructure_write | OpenIaaS offering – Advanced management of Xen Orchestra resources | -| compute_iaas_opensource_read | OpenIaaS offering – View virtual machine resources | -| compute_iaas_opensource_management | OpenIaaS offering – Manage virtual machine resources | -| compute_iaas_opensource_virtual_machine_power | OpenIaaS offering – Manage the power state of a virtual machine | -| compute_iaas_opensource_replication_recover | OpenIaaS offering – Manage replication | -| compute_iaas_vmware_console_access | VMware offering – Open the console of a virtual machine | -| compute_iaas_vmware_infrastructure_read | VMware offering – View advanced data of VMware resources (affinity/anti-affinity rules, DRS configuration, etc.) | -| compute_iaas_vmware_infrastructure_write | VMware offering – Advanced management of VMware resources | -| compute_iaas_vmware_read | VMware offering – View virtual machine resources | -| compute_iaas_vmware_management | VMware offering – Manage virtual machine resources (includes virtual machine encryption) | -| compute_iaas_vmware_virtual_machine_power | VMware offering – Manage the power state of a virtual machine | -| baremetal_management | Bare Metal offering – Manage bare metal resources | -| baremetal_read | Bare Metal offering – View bare metal resources | -| baremetal_console_access | Bare Metal offering – Open the console of a bare metal server | -| console_public_access_read | View IP addresses authorized to access the console | -| console_public_access_write | Add IP addresses authorized to access the console | -| documentation_read | View Confluence documentation resources | -| housing_read | View colocation resources | -| iam_offline_access | Create and delete Personal Access Tokens (PATs) | -| iam_read | View user permissions | -| iam_write | Manage user permissions | -| intervention_read | View planned changes and production deployments on the platform | -| inventory_read | View inventory resources | -| inventory_write | Manage inventory resources | -| monitoring_read | View monitoring data | -| monitoring_write | Manage monitoring | -| metric_read | View health metrics for virtual machines and hosts | -| network_read | View network resources | -| network_write | Manage network resources | -| order_read | View infrastructure orders | -| order_write | Create infrastructure orders | -| object-storage_iam_management | Manage storage accounts on the S3 product | -| object-storage_read | View buckets and bucket configurations | -| object-storage_write | Edit buckets and bucket configurations | -| openshift_management | Connect to OpenShift platforms (scoped to tenant) | -| support_management | View all support tickets for the tenant | -| support_read | View your own support tickets for the tenant | -| support_write | Create a support ticket for the tenant | -| tag_read | View tags, excluding RTMS tags | -| tag_write | Manage tags, excluding RTMS tags | -| ticket_comment_read | View comments | -| ticket_comment_write | Manage comments | -| ticket_read | View tickets | -| ticket_write | Manage tickets | -| incident_management | Manage incidents | -| incident_read | View incidents | +Last updated on: 20/04/2026 + +| Permission Name | Permission Description | +| ----------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | +| activity_read | Viewing of logs and activities | +| activity_write | Management of logs and activities | +| backup_iaas_opensource_read | OpenIaaS Offering - Backup resource management - viewing | +| backup_iaas_opensource_write | OpenIaaS Offering - Backup resource management - modification | +| backup_iaas_spp_read | VMware Offering - Backup resource management - viewing | +| backup_iaas_spp_write | VMware Offering - Backup resource management - modification | +| bastion_read | Viewing of bastion resources | +| bastion_write | Management of Bastion resources (appliances, sessions, etc.) | +| bastion_console_access | Authorization to access the console (ssh/rdp) of a resource protected by a Bastion appliance | +| compute_iaas_opensource_console_access | OpenIaaS Offering - Opening the console of a virtual machine | +| compute_iaas_opensource_infrastructure_read | OpenIaaS Offering - Viewing advanced data of Xen Orchestra resources | +| compute_iaas_opensource_infrastructure_write | OpenIaaS Offering - Advanced management of Xen Orchestra resources | +| compute_iaas_opensource_read | OpenIaaS Offering - Viewing of Virtual Machine resources | +| compute_iaas_opensource_management | OpenIaaS Offering - Management of Virtual Machine resources | +| compute_iaas_opensource_virtual_machine_power | OpenIaaS Offering - Management of a virtual machine's power state | +| compute_iaas_opensource_replication_recover | OpenIaaS Offering - Management of replication | +| compute_iaas_vmware_console_access | VMware Offering - Opening the console of a virtual machine | +| compute_iaas_vmware_infrastructure_read | VMware Offering - Viewing advanced data of VMware resources (affinity/anti-affinity rules, drs configuration, etc.) | +| compute_iaas_vmware_infrastructure_write | VMware Offering - Advanced management of VMware resources | +| compute_iaas_vmware_read | VMware Offering - Viewing of Virtual Machine resources | +| compute_iaas_vmware_management | VMware Offering - Management of Virtual Machine resources (allows encryption of a virtual machine) | +| compute_iaas_vmware_virtual_machine_power | VMware Offering - Management of a virtual machine's power state | +| baremetal_management | Bare Metal Offering - Management of Bare Metal resources | +| baremetal_read | Bare Metal Offering - Viewing of Bare Metal resources | +| baremetal_console_access | Bare Metal Offering - Opening the console of a Bare Metal instance | +| console_public_access_read | Viewing of IPs authorized to access the console | +| console_public_access_write | Adding IPs authorized to access the console | +| documentation_read | Viewing of Confluence documentation resources | +| housing_read | Viewing of colocation resources | +| iam_offline_access | Creation and deletion of Personal Access Tokens (PAT) | +| iam_read | Viewing of user permissions | +| iam_write | Management of user permissions | +| intervention_read | Viewing of planned changes and deployments on the platform | +| inventory_read | Viewing of Inventory resources | +| inventory_write | Management of Inventory resources | +| monitoring_read | Viewing of monitoring | +| monitoring_write | Management of monitoring | +| metric_read | Viewing of health data on virtual machines and hosts | +| network_read | Viewing of network resources | +| network_write | Management of network resources | +| order_read | Viewing of infrastructure orders | +| order_write | Creation of infrastructure orders | +| object-storage_iam_management | Allows management of storage accounts on the S3 product | +| object-storage_read | Allows viewing of buckets and bucket configurations | +| object-storage_write | Allows editing of buckets and bucket configurations | +| openshift_management | Allows connection to OpenShift platforms (scoped to tenant) | +| support_management | Viewing of all tenant support tickets | +| support_read | Viewing of own tenant support tickets | +| support_write | Creation of a support ticket on the tenant | +| tag_read | Viewing of tags, except RTMS tags | +| tag_write | Management of tags, except RTMS tags | +| ticket_comment_read | Viewing of comments | +| ticket_comment_write | Management of comments | +| ticket_read | Viewing of tickets | +| ticket_write | Management of tickets | +| incident_management | Management of incidents | +| incident_read | Viewing of incidents | +| billing_read | Viewing of consumption dashboards | +| vpc_read | VPC Offering - Viewing of VPC-type network resources | +| vpc_write | VPC Offering - Management of VPC-type network resources | +| public_cloud_vm_instances_management | VM Instances Offering - Management of virtual machines | +| public_cloud_vm_instances_read | VM Instances Offering - Viewing of virtual machines | +| public_cloud_vm_instances_console_access | VM Instances Offering - Opening the console of virtual machines | ## Organizations -An organization is linked to your __sponsor account__ and the associated __Cloud Temple contract__. It represents your entity (company, department, team, etc.) that holds the contractual relationship between Cloud Temple and you. +The organization is linked to your __sponsor account__ and the associated __Cloud Temple contract__. It represents your entity (company, department, team, ...) that holds the contractual relationship between Cloud Temple and you. -### Principle of an Organization +### Principle of an organization -An organization has four main roles: +The organization has four main roles: -- It represents the __contractual entity__ for tracking and billing purposes, -- It defines the __global configuration of the authentication mechanism__: authentication can be local at the Console level or remote via an identity federation service, -- It manages all __user accounts__, -- It __federates tenants__ (Production, Preproduction, Dev, Application 1, Application 2, ...) that you define for your Cloud architecture needs. +- It represents __the contractual entity__ for tracking and billing aspects, +- It defines __the global configuration of the authentication mechanism__: authentication can be local at the Console level or remote via an identity federation service, +- It hosts all __user accounts__, +- It __federates the tenants__ (Production, Pre-production, Dev, Application 1, Application 2, ...) that you define for your Cloud architecture needs. -User roles (rights/permissions) are configurable for each tenant defined within your organization. For example, a user account may be authorized to provision resources in one tenant but not in another. +User roles (rights/permissions) are configurable for each tenant defined in your organization. For example, an account may be authorized to order resources in one tenant, but not in another. ### Authentication Mechanisms -The Console allows you to configure the __authentication mechanism at the organization level__. You can use the Console's built-in local authentication directory, or connect your organization to one of your external authentication directories. +The Console allows __configuring the authentication mechanism__ at the organization level. You can +use the Console's local authentication repository, or connect your organization to one +of your authentication repositories. -The following external authentication directories are supported: +The following external repositories are supported: -- OpenID Connect-compatible directories -- SAML-compatible directories -- Microsoft ADFS -- Microsoft EntraID (Microsoft Azure Active Directory) -- Amazon AWS Cognito -- Okta -- Auth0 -- Keycloak +- __OpenID Connect__ compatible repositories, +- __SAML__ compatible repositories, +- __Microsoft ADFS__ +- __Microsoft EntraID__ (Microsoft Azure Active Directory) +- Amazon AWS Cognito +- Okta +- Auth0 +- Keycloak :::info[Important] -An email address is required for all accounts originating from an identity federation. Accounts created without an email address will not be able to log in and may be automatically deleted. +An email address is required for all accounts from an identity federation. Accounts created without an email address will not be able to log in and may be automatically deleted. ::: ## Tenant -A tenant is a __grouping of resources within an organization__. An [Organization](#organizations) has at least one tenant (called the __default tenant__, which can be renamed). Typically, multiple tenants are used to segment responsibilities or technical boundaries. +A tenant is a __grouping of resources within an organization__. An [Organization](#organisations) has at least one tenant (called the __default tenant__, which can be renamed). Generally, multiple tenants are used to segment responsibilities or technical scopes. For example: -- A __Production__ tenant -- A __Pre-production__ tenant -- A __Testing__ tenant -- A __Qualification__ tenant +- A __Production__ tenant +- A __Pre-production__ tenant +- A __Staging__ tenant +- A __QA__ tenant -It is also possible to organize tenants based on an __application view__ or by __criticality__: +It is also possible to organize things using an __application view__ or by __criticality__ : -- An __Application 1__ or __Criticality 1__ tenant -- An __Application 2__ or __Criticality 2__ tenant +- A __Application 1__ or __Criticality 1__ tenant +- A __Application 2__ or __Criticality 2__ tenant - ... -Technical resources ordered are assigned to a specific tenant and are not shared with other tenants. For example, a hypervisor cluster and its associated L2 networks are available only within one tenant. -Regarding networks, it is possible to request __cross-tenant__ networks to ensure network continuity across tenants. +Ordered technical resources are assigned to a specific tenant and are not shared with other tenants. For example, a Hypervisor cluster and the associated L2 networks are only available within a single tenant. +Regarding networks, it is possible to request __'cross tenant'__ networks to ensure network continuity between tenants. -User permissions must be defined within each tenant. Therefore, each organization must carefully consider the desired tenants. This aspect is typically addressed during the initial workshop, at the time of organization creation. +User permissions must be defined within each tenant. Therefore, each organization must carefully consider the desired tenants. This point is typically addressed during the initialization workshop, at the time of organization creation. -It is possible to evolve the architecture by adding or removing tenants. +The architecture can be scaled by adding or removing tenants. -A tenant cannot be empty. It must be initialized with a minimum set of resources: +A tenant cannot be empty. It must necessarily be initialized with a minimum set of resources: -- A zone of availability (AZ, i.e., a physical datacenter), -- A compute cluster, -- A storage space, +- An availability zone (AZ, i.e., a physical datacenter), +- A compute cluster, +- A storage space, - A network VLAN. -| Order reference | Unit | SKU | -|--------------------------------------------------------|---------|-------------------------| -| TENANT - *(REGION)* - Activate a tenant | 1 tenant | csp:tenant:v1 | -| TENANT - *(REGION)* - Activate a zone of availability | 1 tenant | csp:(region):iaas:az:v1 | +| Order Reference | Unit | SKU | +|--------------------------------------------------------------|----------|-------------------------| +| TENANT - *(REGION)* - Tenant Activation | 1 tenant | csp:tenant:v1 | +| TENANT - *(REGION)* - Availability Zone Activation | 1 tenant | csp:(region):iaas:az:v1 | -### Owner Management on a Tenant +### Managing owners on a tenant -Each tenant has at least one owner, ensuring clear accountability and efficient management of associated resources. Additionally, it is possible to designate multiple owners for a single tenant, enabling collaboration and shared decision-making. Below are important considerations to keep in mind when managing these owners. +Each tenant has at least one owner, ensuring clear accountability and efficient management of associated resources. Additionally, it is possible to assign multiple owners to the same tenant, enabling collaboration and shared decision-making. Below, you will find important information to consider when managing these owners. -#### Important Information on Owner Management +#### Important information regarding owner management -#### 1. Number of Owners +#### 1. Number of owners -- There is no technical limit on the number of owners that can be defined for the tenant. +- There is no technical limit on the number of owners that can be defined on the tenant. -- The management interface (UI) issues a warning when more than 3 owners are present, encouraging the limitation of the number of owners for security reasons and optimal access management. +- The management interface (IHM) issues a warning when there are more than 3 owners, to encourage limiting the number of owners for security and optimal access management reasons. #### 2. Adding a new owner @@ -321,26 +326,26 @@ Each tenant has at least one owner, ensuring clear accountability and efficient #### 2. Owner Permissions -- An owner will be granted all permissions associated with the products enabled in their tenant. +- An owner will be granted all permissions associated with the products enabled on their tenant. -- It is not possible to modify the permissions of an owner. +- It is not possible to modify an owner's permissions. -#### 3. Removing a Owner +#### 3. Owner Removal - To remove an owner from the tenant, the user must submit a request to support. -- This procedure ensures that changes to access rights are made securely and in compliance with best practices for access management. +- This procedure ensures that access right modifications are carried out securely and in accordance with access management best practices. -### Access Permission to a Tenant: Allowed IPs +### Tenant Access Authorization: Authorized IPs -Access to the cloud management console is strictly limited to previously authorized IP addresses, in compliance with the SecNumCloud certification requirements. This restriction ensures a heightened level of security by allowing access only from specified IP ranges, thereby minimizing the risk of unauthorized access and protecting the cloud infrastructure according to the highest security standards. +Access to the cloud management console is strictly limited to previously authorized IP addresses, in compliance with SecNumCloud certification requirements. This restriction ensures an enhanced security level by permitting access only from specified IP ranges, thereby minimizing the risk of unauthorized access and safeguarding the cloud infrastructure in accordance with the highest security standards. -Note: *Removing an authorized IP requires a support request via the Cloud Temple console.* +Note: *Removing an authorized IP requires submitting a support request via the Cloud Temple console.* -### Resource Consumption within a Tenant +### Resource consumption within a tenant -It is possible to visualize cloud resources consumed within a tenant, providing a detailed view of the usage of various deployed services. This feature enables users to monitor resource consumption in real time, identify the most heavily used services, and optimize resource utilization according to their needs. +It is possible to view the cloud resources consumed within a tenant, providing a detailed overview of the usage of deployed services. This feature allows users to monitor resource consumption in real time, identify the most heavily used services, and optimize their usage based on requirements. -In the console menu, click on "Consumption Report" and then select the desired time period. You will then be able to view detailed cloud resource consumption over the specified period, allowing you to analyze service usage and optimize your management accordingly: +In the console menu, click on "Consumption Report" and then select the desired time period. You will then be able to view in detail the cloud resource consumption for the selected period, allowing you to analyze service usage and optimize your management accordingly: - + \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/console/iam/iam.md b/i18n/en/docusaurus-plugin-content-docs/current/console/iam/iam.md index 42444ab9..fdc7d20d 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/console/iam/iam.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/console/iam/iam.md @@ -2,23 +2,25 @@ title: Overview --- -The IAM (Identity Access Management) module of the Cloud Temple console offers a comprehensive solution for identity and access management. -It allows administration of local accounts while supporting hybrid configurations with external setups compatible with industry-standard protocols such as OIDC and SAML, to meet the flexibility and security requirements of modern environments. +# Identity Access Management + +The IAM (Identity Access Management) module of the Cloud Temple console provides a comprehensive solution for identity and access management. +It enables the administration of local accounts while supporting hybrid configuration with external setups, compatible with industry-standard protocols such as OIDC and SAML, to meet the flexibility and security requirements of modern environments.

Concepts

-

Discover the basics and essential principles to understand and master our infrastructure.

- Explore the concepts → +

Discover the fundamentals and essential principles to understand and manage our infrastructure.

+ Explore concepts →

Quickstart

Get started quickly with our resources by following clear and simple instructions.

- Launch the Quickstart → + Start the Quickstart →

Tutorials

Learn step by step how to configure and use our services with detailed guides.

- Discover the tutorials → + Discover tutorials →
-
+ \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/console/iam/tutorials/sso_jumpcloud.md b/i18n/en/docusaurus-plugin-content-docs/current/console/iam/tutorials/sso_jumpcloud.md index 9551c2be..1e03510d 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/console/iam/tutorials/sso_jumpcloud.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/console/iam/tutorials/sso_jumpcloud.md @@ -1,5 +1,5 @@ --- -title: Example of Identity Federation with JumpCloud +title: Identity Federation Example with JumpCloud tags: - iam - tutorials @@ -8,67 +8,65 @@ tags: import ssoJumpcloud001 from '@site/docs/console/iam/tutorials/images/sso_jumpcloud_001.png'; import ssoJumpcloud002 from '@site/docs/console/iam/tutorials/images/sso_jumpcloud_002.png'; -This tutorial guides you through configuring single sign-on (SSO) between JumpCloud and Cloud Temple console using the OpenID Connect (OIDC) protocol. +This tutorial guides you through configuring single sign-on (SSO) between JumpCloud and the Cloud Temple console using the OpenID Connect (OIDC) protocol. -For detailed information directly from JumpCloud, refer to their official SSO OIDC documentation: [SSO with OIDC](https://jumpcloud.com/support/sso-with-oidc). - -Note: The images referenced in the Markdown file (`ssoJumpcloud001.png` and `ssoJumpcloud002.png`) are not included in this translation as they are external media files, and their inclusion would require actual image content which is not provided here. +For more detailed information directly from JumpCloud, consult their official documentation on OIDC SSO: [SSO with OIDC](https://jumpcloud.com/support/sso-with-oidc). ## Prerequisites -Before you begin, ensure that you have gathered all necessary information from Cloud Temple, specifically the URL redirection specific to your Keycloak instance. +Before you begin, make sure you have obtained the necessary information from Cloud Temple, specifically the redirect URI for your Keycloak instance. -## Configuration dans JumpCloud +## Configuration in JumpCloud -Follow these steps to configure a new OIDC application in your JumpCloud admin console: +Follow these steps to configure a new OIDC application in your JumpCloud administration console: -1. **Create a New Application:** - * Navigate to the applications section of JumpCloud. - * Click on "Add" or "Create New Application". +1. **Create a new application:** + * Navigate to the applications section in JumpCloud. + * Click "Add" or "Create a new application". * Choose the option for a custom application integration ("Custom Application Integration"). -2. **Configure SSO OIDC:** +2. **Configure OIDC SSO:** * Select "Manage Single Sign-On (SSO)". * Choose "Configure SSO with OIDC". - ![Configuration SSO OIDC JumpCloud](https://i.imgur.com/z9lQ5jS.png) + JumpCloud OIDC SSO Configuration -3. **Enter Redirection URIs:** - * In the appropriate field (often labeled "Redirect URIs" or "Callback URLs"), enter the URI provided by Cloud Temple. It typically follows this format: +3. **Enter redirect URIs:** + * In the appropriate field (often called "Redirect URIs" or "Callback URLs"), enter the URI provided by Cloud Temple. It will typically follow this format: ``` https://keycloak-shiva.cloud-temple.com/auth/realms//broker//endpoint ``` - * Replace `` with your company-specific identifiers provided by Cloud Temple. + *Replace `` with the company-specific credentials provided by Cloud Temple.* -4. **Select Authentication Client Type:** - * Choose `Client Secret Post` as the "Client Authentication Type". +4. **Choose client authentication type:** + * Select `Client Secret Post` as the "Client Authentication Type". -5. **Enter Login URL:** +5. **Enter the login URL:** * In the "Login URL" field, enter the URL you use to access your Cloud Temple console. For example: ``` https://.shiva.cloud-temple.com ``` - * Replace `` with the unique identifier of your Cloud Temple instance. + *Replace `` with the unique identifier of your Cloud Temple instance.* -6. **Configure Attribute Mapping:** - * In the "Attribute Mapping" section (or equivalent), ensure that the following attributes are selected to be sent to Cloud Temple: +6. **Configure attribute mapping:** + * In the "Attribute Mapping" section (or equivalent), ensure the following attributes are selected to be sent to Cloud Temple: * `Email` - * `Profile` (which may include name, last name, etc.) + * `Profile` (may include first name, last name, etc.) - ![Attribute Mapping JumpCloud](https://i.imgur.com/4z6lQ5S.png) + JumpCloud Attribute Mapping -7. **Assign User Groups:** - * Assign the user groups in JumpCloud that should have access to your Cloud Temple console via this SSO application. +7. **Assign groups:** + * Assign the JumpCloud user groups that should have access to the Cloud Temple console via this SSO application. -8. **Activate the Application:** - * Click on "Activate" or "Save" to finalize the application configuration. +8. **Activate the application:** + * Click "Activate" or "Save" to finalize the application configuration. -9. **Provide Credentials to Cloud Temple:** +9. **Provide credentials to Cloud Temple:** * After activation, JumpCloud will provide you with a **Client ID** and a **Client Secret**. - * Securely communicate these two identifiers to your Cloud Temple contact for finalizing the federation setup on Keycloak side. + * Securely communicate these two pieces of information to your Cloud Temple contact to finalize the federation configuration on the Keycloak side. -Once Cloud-Temple has completed its federation configuration using the provided identifiants, users assigned to this JumpCloud application will be able to connect to their Cloud Temple console using their JumpCloud credentials. +Once Cloud-Temple has configured the federation with the provided credentials, your assigned users will be able to log in to the Cloud Temple console using their JumpCloud credentials. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/console/metrics/concepts.md b/i18n/en/docusaurus-plugin-content-docs/current/console/metrics/concepts.md index 8a44ec4a..db00946f 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/console/metrics/concepts.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/console/metrics/concepts.md @@ -1,5 +1,5 @@ --- -title: Metrology +title: Metrics --- import metricsHypervisorsCo2 from '@site/docs/console/metrics/images/metrics_hypervisors_co2.png' import shivaHome from '@site/docs/console/metrics/images/shiva_home.png' @@ -27,109 +27,110 @@ import grafanaDatasourceAlerting from '@site/docs/console/metrics/images/grafana import grafanaDatasourceWorking from '@site/docs/console/metrics/images/grafana_datasource_working.png' import grafanaDashboards_001 from '@site/docs/console/metrics/images/grafana_dashboards_001.png' -Most __Cloud Temple__ customers have visualization, monitoring, and metrology tools in place to track their operations. +The majority of __Cloud Temple__ clients have visualization, monitoring, and metrics tools to track their operations. -The Console's philosophy is to enable access to data so it can be integrated into this tooling via an embedded Prometheus proxy. +The Console's philosophy is to enable data access to integrate into this tooling via an integrated Prometheus proxy. -This proxy allows you to query and manipulate data using a visualization tool such as [Grafana](https://grafana.com). +This proxy allows you to query and manipulate data from a visualization tool such as [Grafana](https://grafana.com). -However, it is also possible to view certain performance metrics of your Cloud resources directly within the Console's web interface. +However, it is possible to view certain performance data for your Cloud resources in the Console's web interface. -*__Note:__ The __Cloud Temple__ philosophy is not limited to embedding graphs within the web interface, but also to providing maximum information accessible via the API* +*__Note:__ The __Cloud Temple__ philosophy is not to integrate only charts into the web interface, but also to provide the maximum amount of information accessible via the API* -## Built-in dashboards in the web interface +## Integrated dashboards in the web interface -*__Note:__ To access these dashboards, you must have the __'metric_read'__ permission* +*__Note:__ To access these dashboards, you must have the __'metric_read'__ permission.* -### Overview +### Global Overview -The home page of the Console displays the main dashboard, showing all metrics that provide an overview of each product you have subscribed to within your scope. If any issues occur with your VMware and/or OpenIaaS products, alerts will be visible—alert color indicates their severity. +The Console home page displays the main dashboard, presenting all metrics that provide a status overview of each product you have subscribed to within your environment. In case of issue(s) with your VMware and/or OpenIaaS products, alerts will be visible, with colors indicating their severity. -These alerts are clickable and redirect to the corresponding product page. +These alerts are clickable and redirect to the relevant product page. -### VMware Metrics - Overview +### VMware Metrics - Global View -In the __'VMware'__ menu, a dedicated dashboard is available under the __'Metrics'__ submenu. It includes 4 tabs: +In the __'VMware'__ menu, a specific dashboard is available in the __'Metrics'__ submenu. It includes 4 tabs: #### Overview -On this tab, you'll find some of the metrics already present in the global dashboard discussed at the beginning of this chapter. +On this tab, you will find some of the metrics already present in the global dashboard discussed at the beginning of this chapter. #### Calculation -On this tab, you'll find the number of __AZs__, __Clusters__, __ESXs__, __carbon emissions__, __power consumption estimates__, as well as 7 visual graphs providing a clear, graphical overview of your VMware environment. The power consumption estimate in kWh is calculated based on the average of readings covering the selected period, normalized to a per-hour basis. +On this tab, you will find the number of __AZ__, __Clusters__, __ESXs__, __carbon emissions__, __power consumption estimate__, as well as 7 charts +providing a highly visual overview of your VMware environment. The power consumption estimate in kW/h is calculated based on the average of readings covering the selected period, expressed per hour. -You can select the date range to analyze, as well as the data grouping type (by default, data is aggregated across your entire environment). For example, selecting __Host__: +You can choose the date range to cover, as well as the data grouping type (by default, data is grouped for the entire scope). For example, by selecting __Host__: -When hovering over each graph, resource names and their corresponding values are displayed. Clicking on a graph opens a small tooltip, allowing you to easily view detailed information for the selected date: +On hover over each chart, the details of resource names and their values are displayed. On clicking these same charts, a small tooltip opens, allowing you to more easily view the details corresponding to the clicked date: #### Storage -Just as on the "Compute" tab, you'll find various pieces of information: the number of __AZs__, __datastore clusters__, __datastores__, as well as two charts. The same filtering principles apply, but here you can group by __Cluster SDRS__ and __Datastore__. +Similarly to the "Compute" tab, various information is displayed: the number of __AZ__, __datastore clusters__, __datastores__, as well as 2 charts. The same filtering principle applies, but here, we can group by __SDRS Cluster__ and __Datastore__. #### Virtual Machines -Here you can find an overview of the health status of virtual machines. +Here you can find a global view of virtual machine health. -This summary provides, over the selected time range: +This summary provides, for the selected time range: - the number of CPUs and the __average CPU utilization__, - the amount of memory in GB and the __average memory usage__, -- the average __storage access latency__ for both read and write operations, -- the average __'CPU Ready'__ time of the virtual machine (i.e., the average wait time for a physical CPU core to become available for the VM). +- the average __storage access latency__ for read and write operations, +- the average __'CPU Ready'__ for the virtual machine (ce qui correspond au temps moyen d'attente de disponibilité d'un core physique par la machine virtuelle). -For each VM, you can access its performance history by clicking the green __'History'__ icon in the Actions column: +For each VM, you can access its performance history by clicking the green __'History'__ icon of the virtual machine in the action column. : -This will take you to the page displaying historical data in graphical form, including an __environmental performance__ view: +You are then taken to the graphical visualization page for historical data, including an __environmental performance__ view : ### VMware Metrics - View by Resource -It is also possible to view a subset of metrics related to VMware, this time more specifically for a given __Host__ or __Datastore__. +You can also view a portion of the metrics related to VMware, but this time more specifically for a given __Host__ or __Datastore__. #### Host -In the Host view, you can check the __energy consumption__ and the estimated __carbon emissions__ for a given period. +In the Host view, you can view, for a given period, the __energy consumption__ as well as the estimated __carbon emissions__. #### Datastore -In a Datastore view, you can check the __IOPS__ for a given period. +In the Datastore view, you can view __IOPS__ for a given period. ### OpenIaaS Metrics -In the __'OpenIaaS'__ menu, a dedicated dashboard is available in the __'Metrics'__ submenu. It includes 3 tabs: +In the __'OpenIaaS'__ menu, a specific dashboard is available in the __'Metrics'__ submenu. It includes 3 tabs: #### Overview -On this tab, you'll find some of the metrics already present in the global dashboard discussed at the beginning of this chapter. +On this tab, you will find a portion of the metrics already present in the global dashboard discussed at the beginning of this chapter. -#### Calcul +#### Compute -On this tab, you'll find the number of __AZs__, __Clusters__, __Hosts__, as well as 5 graphs providing a highly visual overview of your OpenIaaS environment. +On this tab, you will find the number of __AZ__, __Clusters__, and __Hosts__, along with 5 charts providing a highly visual overview of your OpenIaaS environment. -You can select the date range to cover, as well as the data grouping type (by default, data is grouped across your entire environment). For example, by choosing __Host__: +You can choose the date range to cover, as well as the data grouping type (by default, data is grouped across your entire scope). For example, selecting __Host__: @@ -137,22 +138,22 @@ You can select the date range to cover, as well as the data grouping type (by de #### Storage -Just as on the "Compute" tab, you'll find various information: the number of __AZs__, __Clusters__, __Datastores__, as well as a chart. The same filtering principles apply, but here we can group by __Block Storage__. +Similarly to the "Compute" tab, you will find various information: the number of __AZs__, __Clusters__, __Datastores__ as well as a chart. The same filtering principle applies, but here, we can group by __Block Storage__. ## Usage with __Grafana__ -Integrating the Console with Grafana +Console Integration with Grafana -The Cloud Temple Console can be used as a data source for your [Grafana](https://grafana.com/) infrastructure. +The Cloud Temple Console can be used as a datasource for your [Grafana](https://grafana.com/) infrastructure. -The Console is Prometheus-compatible, allowing you to add it to Grafana as a Prometheus-type data source. You will then be able to: +The console is Prometheus-compatible, enabling you to add it to Grafana as a Prometheus-type datasource. This allows you to: - Visualize all your metrics. -- Create custom dashboards tailored to your specific needs. +- Create your own custom dashboards tailored to your needs. -Cloud Temple also provides a [collection of ready-to-use dashboards](https://github.com/Cloud-Temple/console-grafana-iaas) that you can use as a starting point or adapt to your use cases. +Cloud Temple also provides a [collection of dashboards](https://github.com/Cloud-Temple/console-grafana-iaas) ready-to-use, which you can use as a base or adapt to your specific use cases. @@ -160,34 +161,35 @@ Cloud Temple also provides a [collection of ready-to-use dashboards](https://git -### Configure the Console as a Data Source in Grafana +### Configure the Console as a data source in Grafana -The goal is to enhance the observability of your Cloud infrastructure through Cloud Temple metrics. +The goal is to enhance the observability of your Cloud infrastructure via Cloud Temple telemetry. #### Prerequisites - A Grafana instance with access to the Console APIs. -- Administrative access to the Grafana instance to configure *datasources*. +- Administrative access to the Grafana instance to configure the *datasources*. - A personal access token with at least the `metrics_read` permission. #### Configuration -In the __Grafana configuration__, go to the "__Datasources__" tab and click on "__Add datasource__". +In Grafana's __configuration__, go to the "__datasources__" tab and click "__Add datasource__". -In the URL field, provide the __Console Metrics API URL__ without the version, ending with "__/prometheus__" +In the URL, provide the __Console Metrics API URL__ without the version and ending with "__/prometheus__" (example: [https://shiva.cloud-temple.com/api/metric/prometheus](https://shiva.cloud-temple.com/api/metric/prometheus)) -In the "__Authentication__" section, enable the __Basic Auth__ option. +In __authentication__, enable the __Basic Auth__ option. -In the "__Basic Auth Details__" section, configure the __username__ and __password__ using the __id__ and __secret__ of a __Personal Access Token__ with the __metrics_read__ permission. +In the "__Basic Auth Details__" section, configure the __username__ and __password__ using +the __id__ and __secret__ of a __Personal Access Token__ with the __metrics_read__ permission, respectively. -In the "__Alerting__" section, set the __HTTP Method__ to __GET__. +In the "__Alerting__" section, set the __HTTP Method__ property to __GET__. @@ -195,10 +197,10 @@ In the "__Alerting__" section, set the __HTTP Method__ to __GET__. To confirm that the configuration is correct and functional, click the "__Save & test__" button. -You should see a banner indicating that the configuration was successful. +You should see a banner appear informing you that the configuration was successful. -You can find a comprehensive set of Grafana configuration examples here: [https://github.com/Cloud-Temple/console-grafana-iaas](https://github.com/Cloud-Temple/console-grafana-iaas) +You will find a complete set of Grafana configuration examples here: [https://github.com/Cloud-Temple/console-grafana-iaas](https://github.com/Cloud-Temple/console-grafana-iaas) - + \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/console/orders.md b/i18n/en/docusaurus-plugin-content-docs/current/console/orders.md index cebb081e..1136c3cf 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/console/orders.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/console/orders.md @@ -30,81 +30,81 @@ import shivaOrdersIaasCpoolMemory from '@site/docs/console/images/shiva_orders_i ## Concept -Deployment tracking for new resources is handled in the __'Orders'__ menu, accessible from the green sidebar on the left side of the screen. +Deployment tracking for new resources is performed in the __'Orders'__ menu accessible in the green banner on the left side of the screen. -It allows you to view Cloud resources that have been ordered, are currently being deployed, and any potential errors within a [Tenant](./iam/concepts#tenant) of your [Organization](./iam/concepts#organizations). +It allows you to view ordered Cloud resources, those currently being deployed, and any errors within a [Tenant](iam/concepts.md#tenant) of your [Organization](iam/concepts.md#organisations). -*__Note: At this stage, a global view across an organization of all resources deployed across various tenants is not yet available.__ This topic will be addressed later through the implementation of a dedicated portal for the sponsor (i.e., the signing party) and the management of their organization.* +*__Note: At this time, a global view at the organization level of all resources deployed across different tenants is not yet available.__ This topic will be addressed later through the implementation of a dedicated portal for the sponsor (in the signatory sense) and the management of their organization.* -Resource deployment or deletion is performed within each product via the __'IaaS'__ and __'Network'__ menus located in the green sidebar on the left side of the screen. +Resource deployment or deletion is performed in each product via the __'IaaS'__ and __'Network'__ menus on the left side of the screen in the green banner. -You can also view deliveries directly through the Cloud Temple console notifications: +It is also possible to view deliveries directly in the notifications of the Cloud Temple console: -From the Orders page, you can monitor the progress of a delivery and, if needed, communicate with the team by adding comments or clarifications: +From the orders page, you can view the progress status of a delivery and potentially communicate with the team by providing comments or clarifications: -__Note__: __It is not possible to initiate multiple orders of the same resource type simultaneously. You must wait for the current order to be processed and completed before placing a new one. This ensures efficient and orderly resource management within your environment.__ +__Note__ : __It is not possible to launch multiple orders for the same resource type simultaneously. You must therefore wait for the current order to be processed and finalized before placing a new one. This ensures efficient and orderly management of resources within your environment.__ -## Order a New Availability Zone +## Order a new availability zone -It is possible to add a new availability zone by accessing the "__Order__" menu. This option allows you to expand your resources and enhance the availability and resilience of your applications with just a few clicks: +You can add a new availability zone by accessing the "__Order__" menu. This option allows you to scale your resources and improve the availability and resilience of your applications with just a few clicks: -Begin by selecting your desired location, first choosing the geographic region, then selecting the corresponding availability zone (AZ) from the available options. This step enables you to tailor your resource deployment according to your infrastructure's location and requirements: +Start by selecting the desired location, first choosing the geographic region, and then the corresponding availability zone (AZ) from the available options. This step allows you to tailor the deployment of your resources based on location and your infrastructure requirements: -Next, select the desired type of hypervisor cluster, choosing the one that best meets the performance and management needs of your cloud infrastructure: +Next, proceed to select the desired hypervisor cluster type, choosing the one that best meets the performance and management needs of your cloud infrastructure: -Then, select the number of hypervisors and the desired amount of memory to adapt resources to your workload and specific cloud environment requirements: +Next, select the number of hypervisors as well as the desired amount of memory, to tailor the resources to the workload and specific requirements of your cloud environment: -Next, select the number of datastores to provision within the cluster, along with their types. Note that the maximum number of allowed datastores is 10, with a minimum of 2 datastores required. Each different datastore type will result in the creation of an additional datastoreCluster. For example, selecting 2 "live" type datastores and 1 "mass" type datastore will create 2 distinct datastoreClusters: +Next, select the number of datastores to provision in the cluster as well as their types. Please note that the maximum number of allowed datastores is 10, with a minimum of 2 required datastores. Each different datastore type will result in the creation of an additional datastoreCluster. For example, if you choose 2 "live" type datastores and 1 "mass" type datastore, this will result in the formation of 2 distinct datastoreClusters: -Define the required storage size for backup, ensuring capacity equivalent to your production storage. Consider an average compression ratio of 2 to optimize backup space and ensure effective data protection: +Define the storage size required for backup, ensuring you allocate a capacity equivalent to that of your production storage. Consider an average compression ratio of 2 to optimize backup space and ensure effective data protection: -Select the networks to propagate based on your needs. You also have the option to enable "Internet Access" if required, specifying the desired number of IP addresses, with a range between 1 and a maximum of 8: +Select the networks to propagate based on your needs. You also have the option to enable the "Internet Access" feature if necessary, by specifying the desired number of IP addresses, with a choice ranging from 1 to a maximum of 8: -You will then receive a summary of your selected options before validating your order: +You will then see a summary of the selected options before validating your order. -## Requesting Additional Storage Resources +## Ordering additional storage resources -The block storage allocation logic on compute clusters is based on the __IBM SVC (San Volume Controller)__ and __IBM FlashSystem__ technologies. Storage is organized into __LUNs of at least 500 GiB__, presented according to the technology used: +The block storage allocation logic on compute clusters relies on __IBM SVC (San Volume Controller)__ and __IBM FlashSystem__ technologies. Storage is organized into __LUNs of at least 500 GiB__, presented according to the technology used : -- For __VMware__: as __datastores__ grouped into __SDRS clusters (Storage Distributed Resource Scheduler)__ -- For __Bare Metal__: as __volumes__ -- For __Open IaaS__: as __Storage Repositories (SRs)__ +- For __VMware__ : in the form of __datastores__ grouped into __SDRS clusters (Storage Distributed Resource Scheduler)__ +- For __Bare Metal__ : in the form of __volumes__ +- For __Open IaaS__ : in the form of __Storage Repository (SR)__ -Each datastore inherits a __performance class__ defined in IOPS/To (ranging from 500 to 15,000 IOPS/To for FLASH, or no guarantee for MASS STORAGE). IOPS limitations are enforced __at the datastore level__ (not per VM), meaning all virtual machines sharing the same datastore share the allocated IOPS quota. +Each datastore inherits a __performance class__ defined in IOPS/TiB (from 500 to 15,000 IOPS/TiB for FLASH, or without guarantee for MASS STORAGE). IOPS limiting is applied __at the datastore level__ (and not per VM), which means that all virtual machines sharing the same datastore share the allocated IOPS quota. -__Key points to remember__: +__Key points to remember__ : -- __Minimum size__: 500 GiB per LUN -- __Performance__: Proportional to allocated volume (e.g., 2 TiB in Standard class = maximum 3,000 IOPS) -- __Organization__: Datastores of the same type are automatically grouped into datastore clusters -- __Availability__: 99.99% measured monthly, including maintenance windows -- __Required space__: Always reserve 10% free space for backup snapshots and an amount equivalent to the total RAM of VMs for .VSWP files +- __Minimum size__ : 500 GiB per LUN +- __Performance__ : Proportional to the allocated volume, __up to an absolute physical ceiling per LUN__ (e.g., 2 TiB in Standard class = 3,000 IOPS, but a 10 TiB LUN will cap at a maximum of 30,000 IOPS). This ceiling varies by class (10,000 IOPS / 512 MiB/s for the Essential class, and 30,000 IOPS / 1024 MiB/s for higher classes). +- __Organization__ : Datastores of the same type are automatically grouped into datastore clusters +- __Availability__ : 99.99% measured monthly, maintenance windows included +- __Required space__ : Always allow 10% free space for backup snapshots and the equivalent of the sum of VM RAMs for .VSWP files ### Deploy a new compute cluster -Proceed with ordering a hypervisor cluster by selecting options tailored to your virtualization requirements. Define key characteristics such as the number of hypervisors, cluster type, amount of memory, and required computing resources: +Proceed to order a hypervisor cluster by selecting the options that best suit your virtualization needs. Define key features such as the number of hypervisors, cluster type, memory capacity, and required compute resources: @@ -116,21 +116,21 @@ Choose the compute blade type: -You can then choose to select existing networks and propagate them, or create new networks directly at this stage, depending on your infrastructure needs. Note that the total number of configurable networks is limited to a maximum of 20: +You can then select existing networks to propagate, or create new ones directly at this step, depending on your infrastructure requirements. Note that the total number of configurable networks is limited to a maximum of 20: -You will then receive a summary of your selected options before confirming your order, after which you can view your ongoing order: +You will then receive a summary of the selected options before validating your order, and you can subsequently view your order in progress: ### Deploy a new storage cluster -In the "__command__" menu, proceed with ordering a __new storage cluster__ for your environment by selecting options that match your requirements in terms of capacity, performance, and redundancy. Choose the location: +In the "__command__" menu, proceed to order a __new storage cluster__ for your environment by selecting the options that match your capacity, performance, and redundancy requirements. Select the location: -Define the number of datastores to provision within the cluster, as well as their type, adhering to the following limits: a minimum of 2 datastores and a maximum of 10 can be configured. Select the datastore types that best meet your needs regarding performance, capacity, and usage, in order to optimize storage in your environment: +Define the number of datastores to provision in the cluster as well as their type, respecting the following limits: a minimum of 2 datastores and a maximum of 10 can be configured. Choose the datastore types that best meet your performance, capacity, and usage requirements to optimize your environment's storage: @@ -138,135 +138,135 @@ Select the desired storage type from the available options: -You will then access a complete summary of the options you have selected, allowing you to review all settings before definitively confirming your order: +You will then access a complete summary of the options you have selected, allowing you to verify all parameters before finally confirming your order: ### Deploy a new datastore within a VMware SDRS cluster -In this example, we will add block storage for a VMware infrastructure. -To add an additional datastore to your SDRS cluster, navigate to the __'Infrastructure'__ submenu, then select __'VMWare'__. -Choose the appropriate VMware stack and availability zone, then go to the __'Storage'__ submenu. +In this example, we will add block storage for a VMware infrastructure. +To add an additional datastore to your SDRS storage cluster, go to the __'Infrastructure'__ submenu and then __'VMWare'__. +Then select the VMware stack and the availability zone. Next, go to the __'Storage'__ submenu. -Select the SDRS cluster that matches your desired performance characteristics, and click the __'Add a datastore'__ button located in the table listing the existing datastores. +Select the SDRS cluster that matches the performance characteristics you want and click the __'Add a datastore'__ button located in the table +with the list of datastores. -__Note__: +__note__ : -- *The smallest activatable LUN size on a cluster is __500 GiB__.* -- *Datastore performance ranges from an average of 500 iops/TiB up to 15,000 iops/TiB on average. __This is a software-based limit enforced at the storage controller level__.* -- *The disk volume consumption billed to your organization is the sum of all LUNs across the availability zones used.* -- *The __'order'__ and __'compute'__ permissions are required on the account to perform this action.* - -### Ordering New Networks +- *The minimum size of an activatable LUN on a cluster is __500 GiB__.* +- *Datastore performance ranges from an average of 500 IOPS/TiB up to an average of 15,000 IOPS/TiB. __This is a software limit enforced at the storage controller level__, subject to an absolute hardware limit of 30,000 IOPS and 1,024 MB/s maximum per LUN.* +- *The disk volume accounting for your organization is the sum of all LUNs across all used AZs.* +- *The __'order'__ and __'compute'__ permissions are required for the account to perform this action.* -The networking technology used on the Cloud Temple infrastructure is based on [VPLS](https://en.wikipedia.org/wiki/Virtual_Private_LAN_Service). It enables you to benefit from __Layer 2 networks seamlessly connected across your availability zones within a region__. +### Order new networks -It is also possible to share networks between your tenants and terminate them in hosting zones. -In essence, you can think of a Cloud Temple network as an 802.1q VLAN available at any point within your tenant. +The network technology used on the Cloud Temple infrastructure is based on [VPLS](https://fr.wikipedia.org/wiki/Virtual_Private_LAN_Service). It allows you to have __continuous level 2 networks between your availability zones within a region__. +It is also possible to share networks between your tenants and terminate them in a hosting zone. +Basically, you can imagine a Cloud Temple network as an 802.1q VLAN available at every point of your tenant. -Networks on the Cloud Temple platform are __Layer 2 (VLANs)__ based on the __VPLS (Virtual Private LAN Service)__ technology. This technology provides you with __seamless network connectivity across your availability zones__ within a region, with guaranteed performance: +Networks on the Cloud Temple platform are __level 2 (VLANs)__ based on __VPLS (Virtual Private LAN Service)__ technology. This technology allows you to benefit from __network continuity between your availability zones__ within a region, with guaranteed performance: -- __Intra-AZ latency__: < 3 ms -- __Inter-AZ latency__: < 5 ms +- __Intra-AZ Latency__: < 3 ms +- __Inter-AZ Latency__: < 5 ms __Network Flexibility__: -- A network can be __shared across multiple clusters__ within the same availability zone -- A network can be __propagated across multiple availability zones__ within the same region -- A network can be __shared between different tenants__ within your organization -- A network can be __terminated in a hosting zone__ for your physical equipment -- __Limit__: Maximum of 20 networks per order. You can place multiple successive orders to extend this number according to your needs +- A network can be __shared between multiple clusters__ within the same availability zone +- A network can be __propagated across multiple availability zones__ within the same region +- A network can be __shared between different tenants__ of your organization +- A network can be __terminated in a hosting zone__ for your physical equipment +- __Limit__: Maximum of 20 networks per order. You can place multiple successive orders to extend this number according to your needs -Ordering a new network and defining sharing policies between your tenants is done in the __'Network'__ menu of the green sidebar on the left side of the screen. Networks are first created, then a separate order is generated to propagate them. You can track the progress of ongoing orders by accessing the "Orders" tab in the menu, or by clicking on the information labels that redirect you to active or processing orders. +Ordering a new network and making sharing decisions between your tenants are performed in the __'Network'__ menu of the green banner on the left side of the screen. Networks will first be created, then a separate order will be generated to propagate them. You can track the progress of ongoing orders by accessing the "Order" tab in the menu, or by clicking on the information labels that redirect you to active or processing orders. -It is also possible to propagate existing networks, or to separate the two steps—first creating the network, then propagating it later as needed. The propagation option is available in the settings of the selected network: +It is also possible to propagate already existing networks or to separate the two steps, starting with network creation, then proceeding with propagation later as needed. The propagation option is located in the options for the selected network: -Click on the "Propagate" option for an existing network, then select your desired propagation target. This step allows you to define the location or resources where the network should be propagated: +Click the "Propagate" option for an already existing network, then select the desired propagation target. This step allows you to define the location or resources where the network must be propagated: ### Disabling a network -A network can also be disabled if necessary. This option allows you to temporarily pause access to or usage of the network without permanently deleting it, providing flexibility in managing your infrastructure according to your needs. +A network can also be disabled if necessary. This option allows you to temporarily pause access to or use of the network without permanently deleting it, thereby providing flexibility in managing your infrastructure according to your needs. -The disable option is located within the settings of the selected network. +The disable option is located in the options for the selected network. ' ## Add additional hypervisors to a compute cluster A __compute cluster__ is a grouping of hypervisors that must comply with the following rules: -### For VMware ESXi Clusters +### For VMware ESXi clusters -__Homogeneity Rules__: +__Homogeneity rules__ : -- All hosts within a cluster must be of the __same server type__ (ECO, STANDARD, ADVANCE, PERFORMANCE, etc.) -- All hosts must belong to the __same tenant and availability zone__ -- __Limit__: Maximum of 32 hypervisors per cluster +- All hosts in a cluster must be of the __same blade type__ (ECO, STANDARD, ADVANCE, PERFORMANCE, etc.) +- All hosts must belong to the __same tenant and the same availability zone__ +- __Limit__ : Maximum of 32 hypervisors per cluster -__Memory Allocation__: +__Memory allocation__ : -- Each server is delivered with __all physical memory activated from the start__ -- __Example__: A cluster of 3 STANDARD v3 servers (each with 384 GB of physical memory) = 3 × 384 GB = 1,152 GB available -- __Recommendation__: Do not exceed 85% memory utilization per server to avoid VMware's compression and ballooning mechanisms +- Each blade is delivered with __all physical memory enabled__ from the start +- __Example__ : A cluster of 3 STANDARD v3 blades (384 GB physical each) = 3 × 384 GB = 1152 GB available +- __Recommendation__ : Do not exceed 85% memory consumption per blade to avoid VMware compression mechanisms and ballooning -__High Availability__: +__High availability__ : -- __Recommended minimum__: 2 hypervisors per cluster to benefit from the 99.99% SLA -- Enable the __VMware HA__ (High Availability) feature to automatically restart VMs in case of host failure +- __Recommended minimum__ : 2 hypervisors per cluster to benefit from the 99.99% SLA +- Enable the __VMware HA__ (High Availability) feature for automatic VM restart in case of host failure -Adding hypervisors to a compute cluster is done in the __'IaaS'__ menu in the green sidebar on the left side of the screen. -In the following example, we will add compute capacity to a VMware-based hypervisor cluster. +Adding hypervisors to a compute cluster is done in the __'IaaS'__ menu in the green banner on the left side of the screen. +In the following example, we will add compute resources to a hypervisor cluster using VMware technology. -Go to the __'Infrastructure'__ submenu, then __'VMWare'__. Select the VMware stack, the availability zone, and the compute cluster. -In this example, it is __'clu001-ucs12'__. Click the __'Add Host'__ button located in the top-right corner of the table listing the hosts. +Navigate to the __'Infrastructure'__ submenu, then __'VMWare'__. Then select the VMware stack, availability zone, and compute cluster. +In this example, it is __'clu001-ucs12'__. Click the __'Add a host'__ button located in the hosts list table, at the top right. -__Note__: +__note__ : -- *__Cluster configuration must be homogeneous*. Mixing different hypervisor types within a cluster is not allowed. All servers must be of the same type.* +- *__A cluster's configuration must be homogeneous__. Therefore, mixing hypervisor types within a cluster is not allowed. All blades must be of the same type.* - *The __'order'__ and __'compute'__ permissions are required for the account to perform this action.* ### For Open IaaS clusters -Open IaaS clusters follow similar rules regarding homogeneity and high availability. Compute resource management is also performed via the __'OpenIaaS'__ menu, with the same access rights prerequisites. +Open IaaS clusters follow similar rules regarding homogeneity and high availability. Compute resource management is also handled via the __'OpenIaaS'__ menu, with the same access rights prerequisites. -## Add Additional Memory Resources to a Compute Cluster +## Adding additional memory resources to a compute cluster Memory allocation on compute clusters works as follows: -__Memory Allocation Principle__: +__Memory allocation principle__: - All compute blades are delivered with the __maximum physical memory__ installed -- A __software-level limitation__ is applied at the VMware cluster level to match the billed RAM -- Each blade has access to the __full amount of activated physical memory__ within the cluster +- A __software limitation__ is applied at the VMware cluster level to match the billed RAM +- Each blade has __the full amount of physical memory enabled__ within the cluster -__Cluster-Scale Memory Sizing__: +__Cluster sizing__: - __Minimum__: number of hosts × 128 GB of memory -- __Maximum__: number of hosts × physical memory capacity per blade +- __Maximum__: number of hosts × physical memory quantity of the blade -__Example__: For a three-host cluster using `STANDARD v3` hosts (384 GB physical memory per blade) +__Example__: For a cluster of three `STANDARD v3` type hosts (384 GB physical per blade) - Total available memory: 3 × 384 GB = 1152 GB -__Important Recommendations__: +__Important recommendations__: -- Do not exceed __85% average memory utilization per blade__ to avoid VMware ballooning and compression -- Ensure sufficient disk space is available for swap files (.VSWP) created at each VM startup (size = VM memory allocation) +- Do not exceed __85% average memory consumption per blade__ to avoid VMware ballooning and compression +- Allocate disk space for swap files (.VSWP) created at each VM startup (size = VM memory) -To add additional RAM to a cluster, navigate to the cluster configuration (as previously described for adding a compute host) and click on __'Modify Memory'__. +To add RAM to a cluster, simply navigate to the cluster configuration (as for adding a compute host as previously seen) and click on __'Modify memory'__. -__Note__: +__note__: -- *__Machines are delivered with the full physical memory installed__. Memory resource unblocking is purely a software-level activation at the cluster level.* -- *It is not possible to modify the physical memory capacity of a blade type. Always consider the maximum memory capacity of a blade when creating a cluster.* -- *The __'order'__ and __'compute'__ permissions are required on the account to perform this action.* +- *__Machines are delivered with the full physical memory__. Enabling the memory resource is merely a software activation at the cluster level.* +- *It is not possible to modify the physical memory quantity of a blade type. Be sure to take into account the maximum capacity of a blade when creating a cluster.* +- *The __'order'__ and __'compute'__ permissions are required for the account to perform this action.* \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/console/security/security_alarms.md b/i18n/en/docusaurus-plugin-content-docs/current/console/security/security_alarms.md index 6fcb6ef5..073132c0 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/console/security/security_alarms.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/console/security/security_alarms.md @@ -2,47 +2,47 @@ title: Security Alerts --- -Find here the security alerts related to our cloud services. +Here you will find security alerts related to our cloud services. This page is updated daily to account for newly identified vulnerabilities. ## Vulnerabilities | Date | Reference(s) | CVSS | Title | Description | Service(s) | Severity | Remediation | |---------------------|-----------------|-------------|--------------|---------|-------------|----------------|-------------| -| 06/04/2026 | [DSA-2026-143](https://www.dell.com/support/kbdoc/en-us/000449325/dsa-2026-143-security-update-for-dell-objectscale-prior-to-4-1-0-3-and-4-2-0-0-insertion-of-sensitive-information-into-log-file-vulnerability) | 7.8 | **DSA-2026-143 : Vulnerability in Dell ObjectScale (CVE-2026-28261)** | A vulnerability (CVE-2026-28261) in Dell ObjectScale related to the insertion of sensitive information into log files allows a local attacker to expose secrets and escalate their privileges to compromise the system. | Object Storage | 🟡 Moderate | ✅ The remediation of your ObjectScale environments is handled by Cloud Temple. No action is required on your part. | -| 23/03/2026 | [XSA-480](https://docs.vates.tech/security/advisories/2026/vates-sa-2026-005/) | 7.8 | **XCP-NG Vulnerability (CVE-2026-23554)** | A vulnerability (CVE-2026-23554) has been identified in XCP-ng 8.3, specifically affecting systems based on Intel x86 processors, allowing a VM to compromise the host (escalade de privilèges ou DoS). | IaaS OpenSource | 🟠 Important | ✅ The update of your XCP-ng instances is scheduled upon validation of the patches by Cloud Temple. No action is required on your part. | -| 29/01/2026 | [Vendor advisory](https://xcp-ng.org/blog/2026/01/29/january-2026-security-and-maintenance-updates-for-xcp-ng-8-3-lts/) | 2.9 - 8.5 | **XCP-NG Vulnerabilities** | Several vulnerabilities have been discovered in XCP-ng. The most critical allows a privilege escalation from a VM to dom0. Other flaws allow arbitrary code execution via NVMe emulation or confidential data leaks between virtual machines. | IaaS OpenSource | 🟠 Important | ✅ The update of your XCP-ng instances is scheduled upon validation of the patches by Cloud Temple. No action is required on your part. | -| 23/01/2026 | [DSA-2026-047](https://www.dell.com/support/kbdoc/en-us/000415880/dsa-2026-047-security-update-for-dell-ecs-and-objectscale-multiple-vulnerabilities) | 4.4 - 8.8 | **DSA-2026-047 : Vulnerabilities in Dell ObjectScale** | Multiple vulnerabilities in Dell ObjectScale related to default credentials and cleartext transmissions/storage allow local or remote compromises. | Object Storage | 🟠 Important | ✅ The remediation of your ObjectScale environments is handled by Cloud Temple. No action is required on your part. | -| 23/12/2025 | [CVE-2025-14443](https://access.redhat.com/security/cve/CVE-2025-14443) | 8.5 | **Vulnerability in Red Hat OpenShift (CVE-2025-14443)** | A vulnerability in the `openshift-apiserver` component allows for privilege escalation. Exploitation requires prior authentication. | PaaS OpenShift | 🟠 Important | ✅ The update of your OpenShift instances is scheduled as soon as the patches are validated by Cloud Temple. No action on your part is required. | -| 30/09/2025 | [VMSA-2025-0016](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/36150) | 8.5 | **VMSA-2025-0016: Vulnerability in VMware vCenter (CVE-2025-41250)** | A vulnerability (CVE-2025-41250) allows an authenticated attacker to modify notification emails for scheduled tasks. | IaaS By VMware | 🟠 Important | ✅ The update of your vCenter instances is scheduled as soon as the patches are validated by Cloud Temple. No action on your part is required. The update is indicated in the Console notifications. | -| 30/09/2025 | [VMSA-2025-0015](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/36149) | 7.6 | **VMSA-2025-0015: Vulnerability in VMware Tools (Windows)** | A vulnerability (CVE-2025-41246) affecting VMware Tools for Windows allows for privilege escalation (requires authenticated local access). | IaaS By VMware | 🟡 Moderate | ⚠️ We recommend updating VMware Tools on your virtual machines. The patched VM Tools versions are included in the ESXi packages provided by Cloud Temple. | -| 07/08/2025 | [DSA-2025-154](https://www.dell.com/support/kbdoc/en-us/000262308/dsa-2025-154-security-update-for-dell-ecs-and-objectscale-use-of-hard-coded-ssh-cryptographic-key-vulnerability) | 8.4 | **DSA-2025-154 : Vulnerability in Dell ObjectScale (CVE-2025-26476)** | A vulnerability (CVE-2025-26476) in Dell ObjectScale (< 4.0.0.0) related to the use of hard-coded SSH keys allows unauthenticated local access. | Object Storage | 🟠 Important | ✅ The remediation of your ObjectScale environments is handled by Cloud Temple. No action on your part is required. | -| 15/07/2025 | [VMSA-2025-0013](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/VMSA-2025-0013--VMware-ESXi--Workstation--Fusion--and-Tools-updates-address-multiple-vulnerabilities--CVE-2025-41236--CVE-2025-41237--CVE-2025-41238--CVE-2025-41239-/35877) | 9.3 | **VMSA-2025-0013 : Important Vulnerabilities in VMware ESXi** | Several important vulnerabilities affect VMware ESXi. Patches are provided by the vendor. | IaaS By VMware | 🟠 Important | ⚠️ We recommend updating your hypervisors. The corrected ESXi versions are available as soon as they are validated by Cloud Temple. Console indicates the ESXi requiring an update. | -| 15/07/2025 | [VMSA-2025-0013](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/VMSA-2025-0013--VMware-ESXi--Workstation--Fusion--and-Tools-updates-address-multiple-vulnerabilities--CVE-2025-41236--CVE-2025-41237--CVE-2025-41238--CVE-2025-41239-/35877) | 7.1 | **VMSA-2025-0013 : Vulnerability in VMware Tools (CVE-2025-41239)** | A vulnerability (CVE-2025-41239) in VMware Tools allows sensitive information disclosure via uninitialized vSockets. Patches are provided by the vendor. | IaaS By VMware | 🟡 Moderate | ⚠️ We recommend updating VMware Tools on your virtual machines. The corrected VM Tools versions are included in the ESXi packages made available by Cloud Temple. | -| 01/07/2025 | [XSA-470](https://xenbits.xen.org/xsa/advisory-470.html) | N/A | **XCP-NG vulnerability due to improper exception handling**
[Vendor bulletin](https://xcp-ng.org/blog/2025/07/03/july-2025-security-and-maintenance-update-for-xcp-ng-8-2-lts/) | A vulnerability was discovered in XCP-NG, allowing privileged code executed from a virtual machine to crash the hypervisor, resulting in a denial of service (DoS) of the entire host. | IaaS OpenSource | 🟡 Moderate | ✅ Updating your XCP-ng instances is scheduled as soon as the patches are validated by Cloud Temple. No action is required on your part. | -| 23/05/2025 | [XSA-468](https://xenbits.xen.org/xsa/advisory-468.html) | 8.8-9.0 | **XCP-NG vulnerabilities in Windows PV drivers (XSA-468)**
[Publisher bulletin](https://xcp-ng.org/blog/2025/05/27/xsa-468-windows-pv-driver-vulnerabilities/) | Several vulnerabilities (CVE-2025-27462, CVE-2025-27463, CVE-2025-27464) in Windows PV drivers allow unprivileged users to obtain system privileges within Windows VMs. | IaaS OpenSource | 🟠 Important | ⚠️ We recommend updating the Windows PV drivers of your virtual machines to the corrected versions indicated in the security bulletin. ✅ The update of your XCP-ng instances is planned as soon as the patches are validated by Cloud Temple. | -| 22/05/2025 | [XSA-469, INTEL-SA](https://xcp-ng.org/blog/2025/05/14/may-2025-security-update-for-xcp-ng-8-2-8-3/) | 4.9-6.5 | **XCP-NG vulnerabilities in Intel microcode and Xen (XSA-469, INTEL-SA)**
[Publisher bulletin](https://xcp-ng.org/blog/2025/05/14/may-2025-security-update-for-xcp-ng-8-2-8-3/) | Security patches for XCP-ng have been published, correcting several vulnerabilities in Intel microcode and Xen. | IaaS OpenSource | 🟡 Moderate | ✅ The update of your XCP-ng instances is planned as soon as the patches are validated by Cloud Temple. No action is required from your side.| -| 21/05/2025 | [VMSA-2025-0010](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25717) | 4.3-6.8 | **VMSA-2025-0010: Multiple vulnerabilities in VMware ESXi (CVE-2025-41226, CVE-2025-41227, CVE-2025-41228)** | Multiple vulnerabilities have been reported in VMware ESXi: Guest operation denial of service vulnerability (CVE-2025-41226), Denial of service vulnerability (CVE-2025-41227), Cross Site Scripting (XSS) vulnerability (CVE-2025-41228). Fixes are provided by the vendor. | IaaS By VMware | 🟡 Moderate | ⚠️ We recommend that you update your hypervisors. The patched ESXi versions are available once validated by Cloud Temple. The Console indicates which ESXi instances require an update. | -| 21/05/2025 | [VMSA-2025-0010](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25717) | 4.3-8.8 | **VMSA-2025-0010: Multiple vulnerabilities in vCenter (CVE-2025-41225, CVE-2025-41228)** | Multiple vulnerabilities have been reported in VMware vCenter: Authenticated command execution vulnerability in VMware vCenter Server (CVE-2025-41225), Cross Site Scripting (XSS) vulnerability (CVE-2025-41228). Fixes are provided by the vendor. | IaaS By VMware | 🟠 Important | ✅ Updating your vCenter instances is scheduled as soon as the patches are validated by Cloud Temple. No action is required on your part. | -| 14/05/2025 | [VMSA-2025-0007](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25683) | 6.1 | **VMSA-2025-0007: Insecure file management vulnerability in VMware Tools (CVE-2025-22247)** | An insecure file management vulnerability in VMware Tools has been reported. Fixes are provided by the vendor. | IaaS By VMware | 🟡 Moderate | ⚠️ We recommend that you update VMware Tools on your virtual machines. | -| 25/03/2025 | [VMSA-2025-0005](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25518) | 7.8 | **VMSA-2025-0005: Authentication bypass vulnerability in VMware Tools for Windows (CVE-2025-22230)** | An authentication bypass vulnerability in VMware Tools for Windows has been reported. Fixes are provided by the vendor. | IaaS By VMware | 🟠 Important | ⚠️ We recommend that you update VMware Tools on your virtual machines. | -| 04/03/2025 | [VMSA-2025-0004](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25390) | 7.1-9.3 | **VMSA-2025-0004: Multiple vulnerabilities in VMware ESXi (CVE-2025-22224, CVE-2025-22225, CVE-2025-22226)** | Multiple vulnerabilities have been reported in VMware ESXi: VMCI heap overflow vulnerability (CVE-2025-22224) rated Critical by VMware, Arbitrary write vulnerability in VMware ESXi (CVE-2025-22225), HGFS information disclosure vulnerability (CVE-2025-22226). Fixes are provided by the vendor. | IaaS By VMware | 🟠 Important | ⚠️ We recommend that you update your hypervisors. The patched ESXi versions are available once validated by Cloud Temple. The Console indicates which ESXi instances require an update. | +| 06/04/2026 | [DSA-2026-143](https://www.dell.com/support/kbdoc/en-us/000449325/dsa-2026-143-security-update-for-dell-objectscale-prior-to-4-1-0-3-and-4-2-0-0-insertion-of-sensitive-information-into-log-file-vulnerability) | 7.8 | **DSA-2026-143: Vulnerability in Dell ObjectScale (CVE-2026-28261)** | A vulnerability (CVE-2026-28261) in Dell ObjectScale related to the insertion of sensitive information into log files allows a local attacker to expose secrets and escalate privileges to compromise the system. | Object Storage | 🟡 Moderate | ✅ Remediation of your ObjectScale environments is handled by Cloud Temple. No action is required on your part. | +| 23/03/2026 | [XSA-480](https://docs.vates.tech/security/advisories/2026/vates-sa-2026-005/) | 7.8 | **XCP-NG Vulnerability (CVE-2026-23554)** | A vulnerability (CVE-2026-23554) has been identified in XCP-ng 8.3, specifically affecting systems based on Intel x86 processors, allowing a VM to compromise the host (privilege escalation or DoS). | IaaS OpenSource | 🟠 High | ✅ The update of your XCP-ng instances is scheduled upon patch validation by Cloud Temple. No action is required on your part. | +| 29/01/2026 | [Bulletin éditeur](https://xcp-ng.org/blog/2026/01/29/january-2026-security-and-maintenance-updates-for-xcp-ng-8-3-lts/) | 2.9 - 8.5 | **XCP-NG Vulnerabilities** | Several vulnerabilities have been discovered in XCP-ng. The most severe allows privilege escalation from a VM to dom0. Other flaws allow arbitrary code execution via NVMe emulation or leakage of confidential data between virtual machines. | IaaS OpenSource | 🟠 High | ✅ The update of your XCP-ng instances is scheduled upon patch validation by Cloud Temple. No action is required on your part. | +| 23/01/2026 | [DSA-2026-047](https://www.dell.com/support/kbdoc/en-us/000415880/dsa-2026-047-security-update-for-dell-ecs-and-objectscale-multiple-vulnerabilities) | 4.4 - 8.8 | **DSA-2026-047: Vulnerabilities in Dell ObjectScale** | Multiple vulnerabilities in Dell ObjectScale related to default credentials and plaintext transmission/storage allow local or remote compromises. | Object Storage | 🟠 High | ✅ Remediation of your ObjectScale environments is handled by Cloud Temple. No action is required on your part. | +| 23/12/2025 | [CVE-2025-14443](https://access.redhat.com/security/cve/CVE-2025-14443) | 8.5 | **Vulnerability in Red Hat OpenShift (CVE-2025-14443)** | A vulnerability in the `openshift-apiserver` component allows privilege escalation. Exploitation requires prior authentication. | PaaS OpenShift | 🟠 High | ✅ The update of your OpenShift instances is scheduled upon patch validation by Cloud Temple. No action is required on your part.| +| 30/09/2025 | [VMSA-2025-0016](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/36150) | 8.5 | **VMSA-2025-0016: Vulnerability in VMware vCenter (CVE-2025-41250)** | A vulnerability (CVE-2025-41250) allows an authenticated attacker to modify notification emails for scheduled tasks. | IaaS By VMware | 🟠 High | ✅ The update of your vCenter instances is scheduled upon patch validation by Cloud Temple. No action is required on your part. The update is flagged in Console notifications. | +| 30/09/2025 | [VMSA-2025-0015](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/36149) | 7.6 | **VMSA-2025-0015: Vulnerability in VMware Tools (Windows)** | A vulnerability (CVE-2025-41246) affecting VMware Tools for Windows allows privilege escalation (requires authenticated local access). | IaaS By VMware | 🟡 Moderate | ⚠️ We recommend updating VMware Tools on your virtual machines. The corrected VM Tools versions are included in the ESXi packages made available by Cloud Temple. | +| 07/08/2025 | [DSA-2025-154](https://www.dell.com/support/kbdoc/en-us/000262308/dsa-2025-154-security-update-for-dell-ecs-and-objectscale-use-of-hard-coded-ssh-cryptographic-key-vulnerability) | 8.4 | **DSA-2025-154: Vulnerability in Dell ObjectScale (CVE-2025-26476)** | A vulnerability (CVE-2025-26476) in Dell ObjectScale (< 4.0.0.0) related to the use of hardcoded SSH keys allows unauthenticated local access. | Object Storage | 🟠 High | ✅ Remediation of your ObjectScale environments is handled by Cloud Temple. No action is required on your part. | +| 15/07/2025 | [VMSA-2025-0013](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/VMSA-2025-0013--VMware-ESXi--Workstation--Fusion--and-Tools-updates-address-multiple-vulnerabilities--CVE-2025-41236--CVE-2025-41237--CVE-2025-41238--CVE-2025-41239-/35877) | 9.3 | **VMSA-2025-0013: Critical Vulnerabilities in VMware ESXi** | Several critical vulnerabilities affect VMware ESXi. Patches are provided by the vendor. | IaaS By VMware | 🟠 High | ⚠️ We recommend updating your hypervisors. The corrected ESXi versions are available upon validation by Cloud Temple. Console indicates which ESXi hosts require an update. | +| 15/07/2025 | [VMSA-2025-0013](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/VMSA-2025-0013--VMware-ESXi--Workstation--Fusion--and-Tools-updates-address-multiple-vulnerabilities--CVE-2025-41236--CVE-2025-41237--CVE-2025-41238--CVE-2025-41239-/35877) | 7.1 | **VMSA-2025-0013: Vulnerability in VMware Tools (CVE-2025-41239)** | A vulnerability (CVE-2025-41239) in VMware Tools allows disclosure of sensitive information via uninitialized vSockets. Patches are provided by the vendor. | IaaS By VMware | 🟡 Moderate | ⚠️ We recommend updating VMware Tools on your virtual machines. The corrected VM Tools versions are included in the ESXi packages made available by Cloud Temple. | +| 01/07/2025 | [XSA-470](https://xenbits.xen.org/xsa/advisory-470.html) | N/A | **XCP-NG Vulnerability via Improper Exception Handling** [Bulletin éditeur](https://xcp-ng.org/blog/2025/07/03/july-2025-security-and-maintenance-update-for-xcp-ng-8-2-lts/) | A vulnerability has been discovered in XCP-NG, allowing privileged code executed from a virtual machine to cause a hypervisor crash, resulting in a denial of service (DoS) for the entire host. | IaaS OpenSource | 🟡 Moderate | ✅ The update of your XCP-ng instances is scheduled upon patch validation by Cloud Temple. No action is required on your part.| +| 23/05/2025 | [XSA-468](https://xenbits.xen.org/xsa/advisory-468.html) | 8.8-9.0 | **XCP-NG Vulnerabilities in Windows PV Drivers (XSA-468)** [Bulletin éditeur](https://xcp-ng.org/blog/2025/05/27/xsa-468-windows-pv-driver-vulnerabilities/) | Several vulnerabilities (CVE-2025-27462, CVE-2025-27463, CVE-2025-27464) in Windows PV drivers allow non-privileged users to obtain system privileges inside Windows VMs. | IaaS OpenSource | 🟠 High | ⚠️ We recommend updating the Windows PV drivers on your virtual machines to the corrected versions indicated in the security bulletin. ✅ The update of your XCP-ng instances is scheduled upon patch validation by Cloud Temple. | +| 22/05/2025 | [XSA-469, INTEL-SA](https://xcp-ng.org/blog/2025/05/14/may-2025-security-update-for-xcp-ng-8-2-8-3/) | 4.9-6.5 | **XCP-NG Vulnerabilities in Intel Microcode and Xen (XSA-469, INTEL-SA)** [Bulletin éditeur](https://xcp-ng.org/blog/2025/05/14/may-2025-security-update-for-xcp-ng-8-2-8-3/) | Security patches for XCP-ng have been released, fixing several vulnerabilities in Intel microcode and Xen. | IaaS OpenSource | 🟡 Moderate | ✅ The update of your XCP-ng instances is scheduled upon patch validation by Cloud Temple. No action is required on your part.| +| 21/05/2025 | [VMSA-2025-0010](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25717) | 4.3-6.8 | **VMSA-2025-0010: Multiple Vulnerabilities in VMware ESXi (CVE-2025-41226, CVE-2025-41227, CVE-2025-41228)** | Multiple vulnerabilities in VMware ESXi have been reported: Guest operation denial of service vulnerability (CVE-2025-41226), Denial of service vulnerability (CVE-2025-41227), Cross-Site Scripting (XSS) vulnerability (CVE-2025-41228). Patches are provided by the vendor. | IaaS By VMware | 🟡 Moderate | ⚠️ We recommend updating your hypervisors. The corrected ESXi versions are available upon validation by Cloud Temple. Console indicates which ESXi hosts require an update. | +| 21/05/2025 | [VMSA-2025-0010](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25717) | 4.3-8.8 | **VMSA-2025-0010: Multiple Vulnerabilities in vCenter (CVE-2025-41225, CVE-2025-41228)** | Multiple vulnerabilities in VMware vCenter have been reported: VMware vCenter Server authenticated command execution vulnerability (CVE-2025-41225), Cross-Site Scripting (XSS) vulnerability (CVE-2025-41228). Patches are provided by the vendor. | IaaS By VMware | 🟠 High | ✅ The update of your vCenter instances is scheduled upon patch validation by Cloud Temple. No action is required on your part. The update is flagged in Console notifications. | +| 14/05/2025 | [VMSA-2025-0007](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25683) | 6.1 | **VMSA-2025-0007: Insecure File Management Vulnerability in VMware Tools (CVE-2025-22247)** | An insecure file management vulnerability in VMware Tools has been reported. Patches are provided by the vendor. | IaaS By VMware | 🟡 Moderate | ⚠️ We recommend updating VMware Tools on your virtual machines. The corrected VM Tools versions are included in the ESXi packages made available by Cloud Temple. | +| 25/03/2025 | [VMSA-2025-0005](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25518) | 7.8 | **VMSA-2025-0005: Authentication Bypass Vulnerability in VMware Tools for Windows (CVE-2025-22230)** | An authentication bypass vulnerability in VMware Tools for Windows has been reported. Patches are provided by the vendor. | IaaS By VMware | 🟠 High | ⚠️ We recommend updating VMware Tools on your virtual machines. The corrected VM Tools versions are included in the ESXi packages made available by Cloud Temple | +| 04/03/2025 | [VMSA-2025-0004](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25390) | 7.1-9.3 | **VMSA-2025-0004: Multiple Vulnerabilities in VMware ESXi (CVE-2025-22224, CVE-2025-22225, CVE-2025-22226)** | Multiple vulnerabilities in VMware ESXi have been reported: VMCI heap overflow vulnerability (CVE-2025-22224) rated Critical by VMware, Arbitrary write vulnerability in VMware ESXi (CVE-2025-22225), HGFS information disclosure vulnerability (CVE-2025-22226). Patches are provided by the vendor. | IaaS By VMware | 🟠 High | ⚠️ We recommend updating your hypervisors. The corrected ESXi versions are available upon validation by Cloud Temple. Console indicates which ESXi hosts require an update. | ## Information - **Date** : Initial publication date of the Cloud Temple security alert. -- **Reference(s)** : CVE ID, if available. -- **CVSS** : Base CVSS v3 score as reported by the vendor or the CVE, uncontextualized. Contextualization is expressed through the CT severity. If the alert covers multiple vulnerabilities, minimum and maximum CVSS scores are indicated. +- **Reference(s)** : CVE ID, where available. +- **CVSS** : Base CVSS v3 score as reported by the vendor or CVE, non-contextualized. Contextualization is expressed by the CT severity. If the alert concerns multiple vulnerabilities, the minimum and maximum CVSS scores are indicated. - **Title** : Alert title, with vendor reference if available. -- **Description** : Summary description, with link(s) to detailed information. -- **Service(s)** : Cloud Temple service(s) potentially affected. -- **Severity** : Severity level within the context of Cloud Temple services (for the most critical vulnerability in case of multiple vulnerabilities). Exploitation criteria are considered in the technical context of our cloud infrastructure and services. +- **Description** : Concise description, with link(s) to detailed information. +- **Service(s)** : Cloud Temple service(s) that may be affected. +- **Severity** : Severity level within the context of Cloud Temple services (for the most critical vulnerability in case of multiple vulnerabilities). Exploitation criteria are taken into account within the technical context of our cloud infrastructure and services. | Level | Description | -|-------|-------------| -| 🔴 **Critical** | CVSS score 7+ vulnerability presenting a significant risk of exploitation (high exposure, ease of exploitation). Immediate correction or mitigation is strongly recommended. | -| 🟠 **Important** | CVSS score 7+ vulnerability not presenting a significant risk of exploitation (limited exposure or exploitation constraints). | -| 🟡 **Moderate** | CVSS score 4+ vulnerability. | -| 🔵 **Low** | CVSS score below 4, or non-exploitable vulnerability. | +|--------|-------------| +| 🔴 **Critical** | CVSS 7+ vulnerability presenting a significant exploitation risk (high exposure, ease of exploitation). A fix or mitigation as soon as possible is highly recommended.| +| 🟠 **High** | CVSS 7+ vulnerability not presenting a significant exploitation risk (limited exposure or exploitation constraints) | +| 🟡 **Medium** | CVSS 4+ vulnerability | +| 🔵 **Low** | CVSS vulnerability below 4, or not exploitable. | -- **Treatment** : Information and recommendations in the context of Cloud Temple services. ⚠️ indicates that user action is required to address the vulnerability. ✅ indicates that Cloud Temple is handling the vulnerability resolution. +- **Handling** : Information and recommendations within the context of Cloud Temple services. ⚠️ indicates that user action is required to address the vulnerability. ✅ indicates that vulnerability handling is managed by Cloud Temple. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/containers_overview.md b/i18n/en/docusaurus-plugin-content-docs/current/containers_overview.md index 1b66fe88..933715c7 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/containers_overview.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/containers_overview.md @@ -1,31 +1,31 @@ --- -title: Containerization Offerings Overview +title: Overview of Containerization Offerings sidebar_position: 10 # Position just before IaaS --- -# Containerization: Accelerator of Your Digital Transformation +# Containerization, the accelerator of your digital transformation -In an era of accelerated digital transformation, the ability to rapidly develop, deploy, and evolve applications has become a decisive competitive advantage. Containerization, orchestrated through platforms such as Kubernetes and OpenShift, addresses this challenge by delivering unmatched agility, portability, and operational efficiency. +In the context of accelerated digital transformation, the ability to quickly develop, deploy, and scale applications has become a decisive competitive advantage. Containerization, orchestrated by platforms such as Kubernetes and OpenShift, addresses this challenge by offering unparalleled agility, portability, and operational efficiency. -However, the inherent complexity of these technologies can represent a barrier. That’s why Cloud Temple has developed a range of managed, "as a Service" solutions that enable you to harness the full power of containers while relieving you of the burden of managing their complexity. Our offerings are designed to allow you to focus on your core business: application innovation—on a sovereign, trusted foundation. +However, the inherent complexity of these technologies can be a hindrance. This is why Cloud Temple has developed a range of managed and "as a Service" solutions that allow you to leverage the full power of containers, while relieving you of the complexity of managing them. Our offerings are designed to enable you to focus on your core business: application innovation, on a sovereign and trusted foundation. -## Our solution portfolio: which path for your project? +## Our solutions portfolio: which trajectory for your project? -This table highlights the strengths and positioning of each solution to enable quick decision-making. +This table highlights the strengths and positioning of each solution for quick decision-making. -| Criterion | PaaS OpenShift | Managed Kubernetes | +| Criteria | OpenShift PaaS | Managed Kubernetes | | :--------------------------- | :---------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------- | -| **Key positioning** | **Uncompromised trust**
_Platform as a Service — the fastest path to modernize on a certified foundation._ | **Open-source flexibility**
_A pure, portable Kubernetes without overhead, running on a sovereign infrastructure._ | -| **Service level** | As a Service | Managed | -| **Compliance & security** | **100% SecNumCloud** | Hosted on SNC infrastructure | -| **Ideal target audience** | Development and DevOps teams | DevOps teams, Kubernetes experts | -| **Differentiating factor** | Simplicity and rapid deployment | Open-source, portable, and without overhead | +| **Key Positioning** | **Uncompromising trust**
_An "as a Service" platform, the fastest route to modernize on a certified foundation._ | **Open-source flexibility**
_Pure, portable Kubernetes without additional layers on sovereign infrastructure._ | +| **Service Level** | as a Service | Managed | +| **Compliance & Security** | **100% SecNumCloud** | Hosted on SNC infrastructure | +| **Ideal Target Audience** | Development teams, DevOps | DevOps teams, Kubernetes experts | +| **Differentiation Point** | Simplicity and rapid deployment | Open-source, portable, and without additional layers | -### Technical Component Comparison +### Comparison of Technical Components -Beyond positioning, each offering is built on distinct technological choices tailored to specific requirements. The table below details the core software components that make up each solution. +Beyond positioning, each product relies on distinct technological choices that address specific needs. The following table details the fundamental software building blocks that make up each solution. -| Technical Component | PaaS OpenShift | Managed Kubernetes | +| Technical Component | OpenShift PaaS | Managed Kubernetes | | :--------------------------- | :--------------------------------- | :-------------------------- | | **OS Base** | Red Hat CoreOS (RHCOS) | Talos OS (immutable) | | **Orchestrator** | Red Hat OpenShift | Kubernetes (CNCF) | @@ -37,19 +37,23 @@ Beyond positioning, each offering is built on distinct technological choices tai | **Automation (GitOps)** | OpenShift Pipelines | ArgoCD | | **Observability** | Prometheus / Grafana | Prometheus / Grafana / Loki | -## Which solution for your project? +--- + +## What solution for your project? -Choosing a containerization platform is a strategic decision. Here are some key points to help you select the most suitable offering for your context. +Choosing a containerization platform is a foundational decision. Here are some key points to help you identify the most relevant product for your context. -* **If regulatory compliance is your absolute priority...** - ...and you operate in a highly regulated sector (public, healthcare, finance) or need to certify your own solution, the **OpenShift PaaS Offering** is the reference solution, providing the highest level of market assurance. +* **If regulatory compliance is your top priority...** + ...and you need to operate in a highly regulated sector (public, healthcare, OIV) or certify your own solution, the **OpenShift PaaS Offering** is the reference solution that provides the highest level of market assurance. -* **If you value open source, modernity, and "zero-trust" security...** - ...and your company culture strongly emphasizes open source, vendor independence, and next-generation security approaches (immutable systems, API-driven management), the **Managed Kubernetes Offering** best aligns with your vision. +* **If you prioritize open source, modernity, and "zero-trust" security...** + ...and your corporate culture is strongly oriented towards open source, avoiding vendor dependency, and next-generation security approaches (immutable systems, API-driven management), the **Managed Kubernetes Offering** is the most aligned with your vision. -Our advisory role is to support you in making this decision. Our architects are available to analyze your context and define the optimal path forward together with you. +Our advisory role is to support you in this decision. Our architects are available to analyze your context and define the best path forward with you. + +--- -## Explore our solutions +## Explore Our Solutions
@@ -74,7 +78,7 @@ Our advisory role is to support you in making this decision. Our architects are

- Explore our pure, portable, and overhead-free Kubernetes offering, hosted on a sovereign infrastructure. + Explore our pure, portable, and vanilla Kubernetes product, hosted on sovereign infrastructure.

@@ -82,4 +86,4 @@ Our advisory role is to support you in making this decision. Our architects are
- + \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/contractual/contracts.md b/i18n/en/docusaurus-plugin-content-docs/current/contractual/contracts.md index f8949645..5774c9f5 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/contractual/contracts.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/contractual/contracts.md @@ -6,68 +6,66 @@ hide_table_of_contents: true import { ContractCard } from '@site/src/components/ContractCard'; -## Contractual Documents Hierarchy +## Contractual Document Hierarchy | | References | | --------- | -------------------------- | | Reference | CT.AM.JUR.HDC 20250502_3.0 | -| Date | April 17, 2026 | +| Date | April 17, 2026. | -The hierarchy of contractual documents is established according to a defined order of priority: +The hierarchy of contractual documents is established according to a defined priority order: -1. [General Terms and Conditions of Sale and Use (GTCU)](/contractual/files/CT.AM.JUR.CGVU_Conditions%20Generales%20de%20Vente%20et%20d'Utilisation_v1.pdf) +1. [General Terms and Conditions of Sale and Use (CGVU)](/contractual/files/CT.AM.JUR.CGVU_Conditions%20Generales%20de%20Vente%20et%20d'Utilisation_v1.pdf) 2. [SecNumCloud Service Agreement](/contractual/files/CT.AM.JUR.ANX%20-Annexe_Convention%20de%20Services_SNC_v2.pdf) -3. Specific particular agreement ¹ -4. Specific Terms of Use (STU) -5. [Data Protection Agreement](/contractual/files/CT.AM.JANX%20-%20Annexe_DPA_v1.pdf) +3. Specific particular convention ¹ +4. Security Assurance Plan (SAP) ² +5. Specific Conditions of Use (CPU) +6. [Data Protection Agreement](/contractual/files/CT.AM.JANX%20-%20Annexe_DPA_v1.pdf) -:::info[Contractual notes] +:::info[Contractual clarifications] -**¹** Specific agreement, designed to align with the particular characteristics of the project. +**¹** Specific convention, designed to align with the project's particularities. **²** Non-public document. ::: -_Note: Translated versions in Italian, German and Spanish are provided solely to facilitate understanding of the offer._ +_Note: Translated versions in English, Italian, German, and Spanish are provided solely to facilitate understanding of the offer._ --- # Contractual Documents -Find here all Cloud Temple contractual documents: general terms and conditions, data processing agreement (DPA), order process, specific terms per service, SecNumCloud service agreements and service level agreements. +Find all Cloud Temple contractual documents here: general terms and conditions, data processing agreement (DPA), SecNumCloud service agreements, and service level agreements. --- -## General Terms and Conditions +## General Conditions
--- -## SecNumCloud Service Agreements +## SecNumCloud Service Conventions -Service agreements define the contractual framework for delivering SecNumCloud qualified services: scope, operational commitments, responsibilities and service conditions. +Service conventions define the contractual framework for providing qualified SecNumCloud services: scope, operational commitments, responsibilities, and service conditions.
@@ -75,25 +73,25 @@ Service agreements define the contractual framework for delivering SecNumCloud q ## Service Level Agreements (SLA) -SLAs define availability commitments, measurement methods, exclusions and service credits applicable in case of non-compliance. +SLAs define availability commitments, measurement methods, exclusions, and service credits applicable in case of non-compliance. + \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/contractual/iaas/raci.md b/i18n/en/docusaurus-plugin-content-docs/current/contractual/iaas/raci.md index 8ebe2bdd..31d45815 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/contractual/iaas/raci.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/contractual/iaas/raci.md @@ -1,226 +1,225 @@ --- -title: Matrice de responsabilité IaaS +title: IaaS Responsibility Matrix +displayed_sidebar: docSidebar --- -Voici le modèle **RACI** définissant la répartition des responsabilités entre le client et Cloud Temple pour l'utilisation des infrastructures IaaS de Cloud Temple. -## Définition des différents rôles +Here is the **RACI** model defining the allocation of responsibilities between the client and Cloud Temple for the use of Cloud Temple's IaaS infrastructure. -Nous rappelons ici les différents rôles du RACI : +## Definition of the different roles -| Rôle | Description | +Here we recall the different RACI roles: + +| Role | Description | |--------------|---------------------------------------------------------------------------------------| -| (R) Réalise | __R__éalise le processus | -| (A) Approuve | __A__pprouve la réalisation du processus | -| (C) Consulte | __C__onsulté pendant le processus | -| (I) Informé | __I__nformé des résultats du processus (via l'outillage, le portail ou la messagerie) | +| (R) Responsible | __R__esponsible for executing the process | +| (A) Accountable | __A__ccountable for approving the process execution | +| (C) Consulted | __C__onsulted during the process | +| (I) Informed | __I__nformed of the process results (via tooling, the portal, or messaging) | -## Définition votre besoin +## Define your requirements -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | |------------------------------------------------------------------------------------------------|-------------|-------------------| -| Définir l'architecture globale de votre plateforme Cloud Temple | **RA** | **CI** | -| Définir le nombre de tenants et le nombre de zone de disponibilité pour chaque tenant | **RA** | **CI** | -| Définir votre stratégie globale de reprise ou de continuité d'activité | **RA** | **CI** | -| Dimensionner correctement votre plateforme Cloud Temple (calcul, stockage, réseau, backup,...) | **RA** | **CI** | -| Souscrire aux services avec les informations nécessaires | **RA** | **I** | +| Define the overall architecture of your Cloud Temple platform | **RA** | **CI** | +| Define the number of tenants and the number of availability zones for each tenant | **RA** | **CI** | +| Define your overall disaster recovery or business continuity strategy | **RA** | **CI** | +| Properly size your Cloud Temple platform (compute, storage, network, backup,...) | **RA** | **CI** | +| Subscribe to services with the necessary information | **RA** | **I** | -## Mise en œuvre initiale de vos tenants Cloud Temple +## Initial Implementation of Your Cloud Temple Tenants -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | |--------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer la mise en oeuvre des **datacenters physiques** | | **RA** | -| Assurer la mise en oeuvre des infrastructures **calcul** | **I** | **RA** | -| Assurer la mise en oeuvre des infrastructures **stockage** | **I** | **RA** | -| Assurer la mise en oeuvre de la connectivité au **réseau backbone(1)** | **I** | **RA** | -| Acquérir et maintenir les licences logiciels essentiels pour le fonctionnement de la plateforme Cloud Temple | | **RA** | -| Implémenter la configuration de base de vos tenants Cloud Temple | **CI** | **RA** | -| Implémenter la configuration initiale pour le service de sauvegarde | **CI** | **RA** | -| *S'ils sont souscrit :* implémenter la configuration réseau initiale pour les services Internet et Firewall | **CI** | **RA** | -| Offrir l'assistance requise pour la prise en main de vos environnements Cloud Temple | **I** | **RA** | -| Effectuer les ajustements de configuration finaux du service après sa livraison | **RA** | **C** | -| Configurer un référentiel d'authentification externe pour la console Cloud Temple | **RA** | **C** | -| Créer les utilisateurs de chaque tenant dans la console Cloud Temple et affecter les droits | **RA** | | -| Valider la conformité de la plateforme livrée avec le référentiel SecNumCloud | **I** | **RA** | -| Valider la conformité de la plateforme livrée avec les spécifications requises | **RA** | **CI** | - -*(1) Le réseau backbone constitue l'infrastructure centrale de Cloud Temple, offrant une colonne vertébrale sur laquelle -reposent les réseaux clients spécifiques, lesquels sont intégrés et pris en charge par cette infrastructure principale.* - -## Intégrer votre système d'information dans vos environnements Cloud Temple - -| Activité | Rôle Client | Rôle Cloud Temple | +| Ensure the implementation of **physical data centers** | | **RA** | +| Ensure the implementation of **compute** infrastructure | **I** | **RA** | +| Ensure the implementation of **storage** infrastructure | **I** | **RA** | +| Ensure connectivity to the **backbone network(1)** | **I** | **RA** | +| Acquire and maintain essential software licenses for the operation of the Cloud Temple platform | | **RA** | +| Implement the base configuration of your Cloud Temple tenants | **CI** | **RA** | +| Implement the initial configuration for the backup service | **CI** | **RA** | +| *If subscribed:* implement the initial network configuration for Internet and Firewall services | **CI** | **RA** | +| Provide the required assistance for the onboarding of your Cloud Temple environments | **I** | **RA** | +| Perform final configuration adjustments of the service after delivery | **RA** | **C** | +| Configure an external authentication repository for the Cloud Temple console | **RA** | **C** | +| Create users for each tenant in the Cloud Temple console and assign permissions | **RA** | | +| Validate the delivered platform's compliance with the SecNumCloud reference framework | **I** | **RA** | +| Validate the delivered platform's compliance with the required specifications | **RA** | **CI** | + +*(1) The backbone network constitutes Cloud Temple's central infrastructure, providing a backbone on which +specific client networks are built, and which are integrated and supported by this primary infrastructure.* + +## Integrate your information system into your Cloud Temple environments + +| Activity | Client Role | Cloud Temple Role | |-------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Créer, installer, mettre à jour vos machines virtuelles | **RA** | | -| Installer et configurer les logiciels et middlewares sur vos machines virtuelles | **RA** | | -| Acheter et détenir les licences et les droits d'utilisation pour les systèmes d'exploitation de vos machines virtuelles | **RA** | | -| Configurer le réseau pour chacune vos machines virtuelles | **RA** | | -| S'assurer que chaque machine virtuelle est associée à un plan de sauvegarde cohérent | **RA** | **C** | -| S'assurer que chaque machine virtuelle est associée à un plan de reprise d'activité ou de continuité d'activité cohérent | **RA** | **C** | -| Implémenter une stratégie de protection antivirale sur vos machines virtuelles | **RA** | | -| Mettre en place une solution de métrologie et de surveillance sur vos machines virtuelles | **RA** | | -| Définir la politique de TAG de vos machines virtuelles | **RA** | | +| Create, install, and update your virtual machines | **RA** | | +| Install and configure software and middleware on your virtual machines | **RA** | | +| Purchase and hold licenses and usage rights for the operating systems of your virtual machines | **RA** | | +| Configure the network for each of your virtual machines | **RA** | | +| Ensure each virtual machine is associated with a consistent backup plan | **RA** | **C** | +| Ensure each virtual machine is associated with a consistent disaster recovery or business continuity plan | **RA** | **C** | +| Implement an antivirus protection strategy on your virtual machines | **RA** | | +| Deploy a telemetry and monitoring solution on your virtual machines | **RA** | | +| Define the TAG policy for your virtual machines | **RA** | | -## Opérations récurrentes +## Recurring Operations -### Gestion des accès et des identités +### Access and Identity Management -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | |--------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer l'accessibilité du service Console Cloud Temple et de l'API associée | | **RA** | -| Assurer l'accessibilité du système d'information déployé sur vos machines virtuelles | **RA** | | -| Gérer les habilitations physiques et logiques des équipes Cloud Temple aux infrastructures SecNumCloud. | | **RA** | -| Administrer les accès et la politique de sécurité associée liés à l'interface de la console Cloud Temple et à son API | **RA** | | -| Administrer les accès et la politique de sécurité associée au système d'information hébergé au sein de vos tenants Cloud Temple | **RA** | | +| Ensure accessibility of the Cloud Temple Console service and its associated API | | **RA** | +| Ensure accessibility of the information system deployed on your virtual machines | **RA** | | +| Manage physical and logical access permissions for Cloud Temple teams to SecNumCloud infrastructures. | | **RA** | +| Administer access and the associated security policy for the Cloud Temple console interface and its API | **RA** | | +| Administer access and the associated security policy for the information system hosted within your Cloud Temple tenants | **RA** | | -### maintien en condition opérationnelle et en condition de sécurité +### Operational and Security Readiness Maintenance -Les activités visant à maintenir en condition opérationnelle et sécuritaire pour les infrastructures et services -proposés par Cloud Temple, dans le cadre de son offre IaaS, sont réalisées dans l'objectif de conformité à la qualification SecNumCloud. +Activities aimed at maintaining the operational and security readiness of the infrastructure and services +provided by Cloud Temple, as part of its IaaS offering, are performed to ensure compliance with the SecNumCloud qualification. -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | |-------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer le maintien en condition opérationnelle des infrastructures **datacenters physiques** | **I** | **RA** | -| Assurer le maintien en condition de sécurité des infrastructures **datacenters physiques** | **I** | **RA** | -| Assurer le maintien en condition opérationnelle des infrastructures **calcul** | **I** | **RA** | -| Assurer le maintien en condition de sécurité des infrastructures **calcul (2)** | **RA** | **CI** | -| Assurer le maintien en condition opérationnelle des infrastructures **stockage** | **I** | **RA** | -| Assurer le maintien en condition de sécurité des infrastructures **stockage** | **I** | **RA** | -| Assurer le maintien en condition opérationnelle des infrastructures **réseaux backbone** | **I** | **RA** | -| Assurer le maintien en condition de sécurité des infrastructures **réseaux backbone** | **I** | **RA** | -| Assurer le maintien en condition opérationnelle des machines virtuelles déployées dans les tenants client **(3)** | **RA** | | -| Assurer le maintien en condition de sécurité des machines virtuelles déployées dans les tenants client **(3)** | **RA** | | -| Assurer le maintien en condition opérationnelle des middleswares déployées dans les tenants client | **RA** | | -| Assurer le maintien en condition de sécurité des middleswares déployées dans les tenants client | **RA** | | - -*(2) Cloud Temple fournit régulièrement les versions les plus récentes du système d'exploitation pour vos hyperviseurs. -Néanmoins, étant donné que Cloud Temple n'est pas informé des spécificités de vos environnements de production et des exigences -liées à vos charges de travail, **la décision de procéder à la mise à jour du système d'exploitation de vos hyperviseurs, -entraînant ainsi un redémarrage, vous revient**. Cette opération peut être réalisée à travers la console Cloud Temple ou via l'API. -Des services professionnels sont disponibles si vous souhaitez que Cloud Temple prenne en charge certaines opérations.* - -*(3) Cloud Temple propose des packs de licences pour pare-feu (Fortinet, Stormshield) et répartiteurs de charge (HAProxy), et -travaille en collaboration avec vos équipes pour la configuration initiale lors de la phase de mise en œuvre. Toutefois, -la responsabilité du maintien en condition opérationnelle et sécuritaire repose sur vous durant la phase d'exploitation -courante. Des services professionnels sont disponibles si vous souhaitez que Cloud Temple prenne en charge certaines opérations.* - -### Gestion des changements, des incidents, des problèmes et des capacités - -| Activité | Rôle Client | Rôle Cloud Temple | +| Ensure operational readiness of **physical datacenter** infrastructure | **I** | **RA** | +| Ensure security readiness of **physical datacenter** infrastructure | **I** | **RA** | +| Ensure operational readiness of **compute** infrastructure | **I** | **RA** | +| Ensure security readiness of **compute** infrastructure (2) | **RA** | **CI** | +| Ensure operational readiness of **storage** infrastructure | **I** | **RA** | +| Ensure security readiness of **storage** infrastructure | **I** | **RA** | +| Ensure operational readiness of **backbone network** infrastructure | **I** | **RA** | +| Ensure security readiness of **backbone network** infrastructure | **I** | **RA** | +| Ensure operational readiness of virtual machines deployed in client tenants (3) | **RA** | | +| Ensure security readiness of virtual machines deployed in client tenants (3) | **RA** | | +| Ensure operational readiness of middleware deployed in client tenants | **RA** | | +| Ensure security readiness of middleware deployed in client tenants | **RA** | | + +*(2) Cloud Temple regularly provides the latest operating system versions for your hypervisors. +However, as Cloud Temple is not aware of the specifics of your production environments and the requirements +associated with your workloads, **the decision to proceed with updating your hypervisors' operating systems, +thereby triggering a restart, rests with you**. This operation can be performed via the Cloud Temple console or through the API. +Professional services are available if you would like Cloud Temple to handle certain operations.* + +*(3) Cloud Temple offers license packs for firewalls (Fortinet, Stormshield) and load balancers (HAProxy), and +collaborates with your teams on the initial configuration during the implementation phase. However, +the responsibility for maintaining operational and security readiness rests with you during the routine operational +phase. Professional services are available if you would like Cloud Temple to handle certain operations.* + +### Change, Incident, Problem, and Capacity Management + +| Activity | Client Role | Cloud Temple Role | |-----------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Gérer les incidents sur les infrastructures **datacenters physiques** | **I** | **RA** | -| Gérer les problèmes sur les infrastructures **datacenters physiques** | | **RA** | -| Gérer les capacités sur les infrastructures **datacenters physiques** | | **RA** | -| Gérer les incidents sur les infrastructures **calcul** | **I** | **RA** | -| Gérer les problèmes sur les infrastructures **calcul** | | **RA** | -| Gérer les capacités sur les infrastructures **calcul** | **RA** | **CI** | -| Gérer les incidents sur les infrastructures **stockage** | **I** | **RA** | -| Gérer les problèmes sur les infrastructures **stockage** | | **RA** | -| Gérer les capacités sur les infrastructures **stockage** | **RA** | **CI** | -| Gérer les incidents sur les infrastructures **réseau backbone** | **I** | **RA** | -| Gérer les problèmes sur les infrastructures **réseau backbone** | | **RA** | -| Gérer les capacités sur les infrastructures **réseau backbone** | | **RA** | -| Mettre en place une nouvelle machine virtuelle ou créer un nouvel environnement applicatif au sein d'un tenant client | **RA** | | -| Modifier la configuration des machines virtuelles déployées | **RA** | | -| Supprimer une machine virtuelle déployée | **RA** | | -| Prendre la décision d'ajouter, de modifier ou de retirer des ressources sur la plateforme Cloud Temple | **RA** | **CI** | -| Exécuter la décision de modification des ressources sur la plateforme Cloud Temple | **I** | **RA** | -| Appliquer les tags aux machines virtuelles conformément à la politique définie | **RA** | | - -### Gestion de la performance - -| Activité | Rôle Client | Rôle Cloud Temple | +| Manage incidents on **physical datacenter** infrastructure | **I** | **RA** | +| Manage problems on **physical datacenter** infrastructure | | **RA** | +| Manage capacity on **physical datacenter** infrastructure | | **RA** | +| Manage incidents on **compute** infrastructure | **I** | **RA** | +| Manage problems on **compute** infrastructure | | **RA** | +| Manage capacity on **compute** infrastructure | **RA** | **CI** | +| Manage incidents on **storage** infrastructure | **I** | **RA** | +| Manage problems on **storage** infrastructure | | **RA** | +| Manage capacity on **storage** infrastructure | **RA** | **CI** | +| Manage incidents on **backbone network** infrastructure | **I** | **RA** | +| Manage problems on **backbone network** infrastructure | | **RA** | +| Manage capacity on **backbone network** infrastructure | | **RA** | +| Provision a new virtual machine or create a new application environment within a client tenant | **RA** | | +| Modify the configuration of deployed virtual machines | **RA** | | +| Delete a deployed virtual machine | **RA** | | +| Decide to add, modify, or remove resources on the Cloud Temple platform | **RA** | **CI** | +| Execute the decision to modify resources on the Cloud Temple platform | **I** | **RA** | +| Apply tags to virtual machines in accordance with the defined policy | **RA** | | + +### Performance Management + +| Activity | Client Role | Cloud Temple Role | |-------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer la surveillance du bon fonctionnement et de la fiabilité de tous les équipements impliqués dans la prestation du service qualifié SecNumCloud | **I** | **RA** | -| Assurer le suivi de la performance des ressources physiques de calcul, stockage et réseau mises à disposition de vos tenants **(4)** | **RI** | **A** | -| Superviser les performances des machines virtuelles soutenant vos environnements | **RA** | **I** | +| Ensure monitoring of the proper functioning and reliability of all equipment involved in delivering the SecNumCloud qualified service | **I** | **RA** | +| Monitor the performance of physical compute, storage, and network resources made available to your tenants **(4)** | **RI** | **A** | +| Supervise the performance of virtual machines supporting your environments | **RA** | **I** | -*(4) La plateforme Cloud Temple adopte une philosophie centrée sur **la fourniture d'infrastructures dédiées** pour les besoins de **calcul** (avec des lames physiques), de **stockage** (via des LUNs dédiées sur les SANs) -et de **réseau** (incluant des pare-feu et des répartiteurs de charge). Ces ressources dédiées sont mises à la disposition du client, dont l'utilisation -et la charge résultante dépendent directement de l'usage qu'il en fait. Il incombe donc au client de mettre en place et de gérer les systèmes de supervision -et de métrologie nécessaires pour assurer le suivi du fonctionnement optimal de son système d'information.* +*(4) The Cloud Temple platform adopts a philosophy centered on **providing dedicated infrastructures** for **compute** needs (with physical blades), **storage** (via dedicated LUNs on SANs), and **network** (including firewalls and load balancers). These dedicated resources are made available to the client, and their usage and resulting load depend directly on how they are utilized. It is therefore the client's responsibility to implement and manage the necessary monitoring and metrics systems to ensure optimal operation of their information system.* -### Gestion de la sauvegarde et de la reprise d'activité sur la sauvegarde intégrée +### Backup and Disaster Recovery Management on Integrated Backup -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | |-------------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer le maintien en condition opérationnelle sur les infrastructures de **sauvegarde** intégrées à la plateforme Cloud Temple **(5)** | | **RA** | -| Assurer le maintien en condition de sécurité des infrastructures de **sauvegarde** intégrées à la plateforme Cloud Temple | **I** | **RA** | -| Gérer les incidents sur les infrastructures **sauvegarde** intégrées à la plateforme Cloud Temple | **I** | **RA** | -| Gérer les problèmes sur les infrastructures **sauvegarde** intégrées à la plateforme Cloud Temple | | **RA** | -| Gérer les capacités sur les infrastructures **sauvegarde** intégrées à la plateforme Cloud Temple | **AI** | **RC** | -| Assurer le maintien en condition opérationnelle sur la solution de sauvegarde choisie au sein de ses tenants par le client **(6)** | **RA** | | -| Assurer le maintien en condition de sécurité sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les incidents sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les problèmes sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les capacités sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | **CI** | -| Gérer le cycle des vies des politiques de sauvegarde | **RA** | | -| S'assurer que les politiques de sauvegarde sont cohérentes avec le cycle de vie de la donnée | **RA** | | -| S'assurer que les plans de continuité d'activité ou de reprise d'activité sont cohérents avec le cycle de vie de la donnée | **RA** | | -| Effectuer des tests périodiques pour évaluer l'efficacité de la stratégie de sauvegarde | **RA** | | -| Effectuer des tests périodiques pour évaluer l'efficacité de la stratégie de reprise d'activité ou de continuité d'activité | **RA** | **CI** | - -*(5) Au 1er janvier 2024, la solution de sauvegarde intégrée à la plateforme Cloud Temple est IBM Spectrum Protect Plus. -Cette solution est entièrement automatisée et peut être gérée via la console Cloud Temple ou l'API Cloud Temple.* - -### Gestion de la sauvegarde et de la reprise d'activité pour les plateformes tierces au sein d'un tenant client - -| Activité | Rôle Client | Rôle Cloud Temple | +| Ensure operational readiness for the **backup** infrastructure integrated into the Cloud Temple platform **(5)** | | **RA** | +| Ensure security readiness for the **backup** infrastructure integrated into the Cloud Temple platform | **I** | **RA** | +| Manage incidents for the **backup** infrastructure integrated into the Cloud Temple platform | **I** | **RA** | +| Manage problems for the **backup** infrastructure integrated into the Cloud Temple platform | | **RA** | +| Manage capacity for the **backup** infrastructure integrated into the Cloud Temple platform | **AI** | **RC** | +| Ensure operational readiness for the backup solution selected by the client within its tenants **(6)** | **RA** | | +| Ensure security readiness for the backup solution selected by the client within its tenants | **RA** | | +| Manage incidents for the backup solution selected by the client within its tenants | **RA** | | +| Manage problems for the backup solution selected by the client within its tenants | **RA** | | +| Manage capacity for the backup solution selected by the client within its tenants | **RA** | **CI** | +| Manage the lifecycle of backup policies | **RA** | | +| Ensure backup policies are consistent with the data lifecycle | **RA** | | +| Ensure business continuity or disaster recovery plans are consistent with the data lifecycle | **RA** | | +| Conduct periodic tests to evaluate the effectiveness of the backup strategy | **RA** | | +| Conduct periodic tests to evaluate the effectiveness of the disaster recovery or business continuity strategy | **RA** | **CI** | + +*(5) As of January 1, 2024, the backup solution integrated into the Cloud Temple platform is IBM Spectrum Protect Plus. +This solution is fully automated and can be managed via the Cloud Temple console or the Cloud Temple API.* + +### Backup and Disaster Recovery Management for Third-Party Platforms within a Client Tenant + +| Activity | Client Role | Cloud Temple Role | |-------------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer le maintien en condition opérationnelle sur la solution de sauvegarde choisie au sein de ses tenants par le client **(6)** | **RA** | | -| Assurer le maintien en condition de sécurité sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les incidents sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les problèmes sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les capacités sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | **CI** | -| Gérer le cycle des vies des politiques de sauvegarde | **RA** | | -| S'assurer que les politiques de sauvegarde sont cohérentes avec le cycle de vie de la donnée | **RA** | | -| S'assurer que les plans de continuité d'activité ou de reprise d'activité sont cohérents avec le cycle de vie de la donnée | **RA** | | -| Effectuer des tests périodiques pour évaluer l'efficacité de la stratégie de sauvegarde | **RA** | | -| Effectuer des tests périodiques pour évaluer l'efficacité de la stratégie de reprise d'activité ou de continuité d'activité | **RA** | **CI** | - -*(6) Ceci concerne toute solution de sauvegarde supplémentaire mise en place dans les environnements du client et gérée par celui-ci. -Cloud Temple propose des services professionnels pour ceux qui souhaitent déléguer certaines opérations à Cloud Temple.* - -### Gestion de la documentation et du contrat - -| Activité | Rôle Client | Rôle Cloud Temple | +| Ensure operational readiness for the backup solution selected within the client's tenants **(6)** | **RA** | | +| Ensure security readiness for the backup solution selected within the client's tenants | **RA** | | +| Manage incidents for the backup solution selected within the client's tenants | **RA** | | +| Manage problems for the backup solution selected within the client's tenants | **RA** | | +| Manage capacity for the backup solution selected within the client's tenants | **RA** | **CI** | +| Manage the backup policy lifecycle | **RA** | | +| Ensure backup policies are consistent with the data lifecycle | **RA** | | +| Ensure business continuity or disaster recovery plans are consistent with the data lifecycle | **RA** | | +| Conduct periodic tests to evaluate the effectiveness of the backup strategy | **RA** | | +| Conduct periodic tests to evaluate the effectiveness of the disaster recovery or business continuity strategy | **RA** | **CI** | + +*(6) This applies to any additional backup solution deployed in the client's environments and managed by the client. +Cloud Temple offers professional services for those who wish to delegate certain operations to Cloud Temple.* + +### Documentation and Contract Management + +| Activity | Client Role | Cloud Temple Role | |-----------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer la gestion commerciale et contractuelle du client, incluant l'établissement de devis, le traitement des commandes et la gestion de la facturation | **I** | **RA** | -| Assurer le suivi contractuel de la prestation, incluant la validation des devis, le suivi des livraisons et la surveillance de la facturation | **RA** | **I** | -| Assurer la maintenance et la disponibilité de l'inventaire des ressources fournies par Cloud Temple relative à l'offre SecNumCloud | **I** | **RA** | -| Assurer la maintenance et la mise à disposition de la documentation technique relative à l'offre SecNumCloud | **I** | **RA** | -| Assurer le suivi du cycle de vie des machines virtuelles déployées dans vos environnements Cloud Temple via votre CMDB (Configuration Management Database) | **RA** | | -| Maintenir à jour la politique d'accès à l'interface de la console Cloud Temple ou à l'API Cloud Temple | **RA** | | +| Manage the client's commercial and contractual relationship, including preparing quotes, processing orders, and managing billing | **I** | **RA** | +| Monitor the contractual follow-up of the service, including validating quotes, tracking deliveries, and monitoring billing | **RA** | **I** | +| Maintain and ensure the availability of the inventory of resources provided by Cloud Temple for the SecNumCloud offering | **I** | **RA** | +| Maintain and provide access to the technical documentation for the SecNumCloud offering | **I** | **RA** | +| Monitor the lifecycle of virtual machines deployed in your Cloud Temple environments via your CMDB (Configuration Management Database) | **RA** | | +| Keep the access policy for the Cloud Temple console interface or the Cloud Temple API up to date | **RA** | | -### Gestion des journaux +### Log Management -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | |--------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Conserver et mettre à disposition les journaux de la plateforme IaaS Cloud Temple **(7)** | | **RA** | -| Conserver et mettre à disposition les journaux du système d'information hébergé au sein de vos tenants Cloud Temple | **RA** | | +| Retain and make available the logs of the Cloud Temple IaaS platform **(7)** | | **RA** | +| Retain and make available the logs of the information system hosted within your Cloud Temple tenants | **RA** | | -*(7) Au premier janvier 2024, la durée de rétention des journaux de la plateforme est d'une année.* +*(7) As of January 1, 2024, the log retention period for the platform is one year.* -## Connectivité au réseau client (mpls, fibre dédiée, ipsec, ...) +## Client network connectivity (mpls, dedicated fiber, ipsec, ...) -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | |------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Souscrire à une connectivité réseau opérateur pour accéder à un datacenter physique Cloud Temple (8) | **RA** | **CI** | -| Gérer le plan d'adressage IP | **RA** | **I** | -| Gérer les incidents sur les liens réseaux opérateurs client | **RA** | | -| Gérer les problèmes sur les liens réseaux opérateurs client | **RA** | **CI** | -| Gérer les capacités sur les liens réseaux opérateurs client | **RA** | **CI** | +| Subscribe to operator network connectivity to access a Cloud Temple physical datacenter (8) | **RA** | **CI** | +| Manage the IP addressing plan | **RA** | **I** | +| Manage incidents on client operator network links | **RA** | | +| Manage issues on client operator network links | **RA** | **CI** | +| Manage capacity on client operator network links | **RA** | **CI** | -*(8) Cloud Temple assume la responsabilité du réseau concernant son infrastructure backbone, ses points de collecte ainsi que -les points d'interconnexion datacenter, garantissant ainsi la connectivité entre ces points et son réseau backbone. -Dans l'offre d'hébergement en baie physique, Cloud Temple assume la responsabilité à partir de l'équipement situé en haut du rack, communément appelé "top of rack".* +*(8) Cloud Temple assumes responsibility for the network regarding its backbone infrastructure, its aggregation points as well as +the datacenter interconnection points, thereby ensuring connectivity between these points and its backbone network. +In the physical rack hosting offering, Cloud Temple assumes responsibility starting from the equipment located at the top of the rack, commonly referred to as "top of rack".* -## Réversibilité +## Reversibility -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Planifier le projet de réversibilité et choisir les infrastructures cibles | **RA** | **I** | -| Mettre en oeuvre les opérations de transition, qu'elles impliquent une extraction manuelle, l'utilisation d'API ou toute autre méthode tierce compatible avec la plateforme Cloud Temple. | **RA** | **I** | -| Transférer les données tout en contrôlant les répercussions de la migration sur la qualité du service fourni par le système d'information du client. | **RA** | | -| Procéder au démantèlement des configurations du Cloud Privé et des options associées au client, à la suite de la résiliation du contrat. | **I** | **RA** | -| Réaliser l'effacement sécurisé des données sur les supports de stockage et fournir une attestation | **I** | **RA** | +| Plan the reversibility project and select target infrastructures | **RA** | **I** | +| Implement transition operations, whether involving manual extraction, API usage, or any other third-party method compatible with the Cloud Temple platform. | **RA** | **I** | +| Transfer data while monitoring the impact of the migration on the service quality provided by the client's information system. | **RA** | | +| Proceed with dismantling Private Cloud configurations and client-associated options following contract termination. | **I** | **RA** | +| Perform secure data erasure on storage media and provide an attestation | **I** | **RA** | \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/contractual/iaas/raci_s3.md b/i18n/en/docusaurus-plugin-content-docs/current/contractual/iaas/raci_s3.md index 1db9a33f..2eef70b9 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/contractual/iaas/raci_s3.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/contractual/iaas/raci_s3.md @@ -1,74 +1,77 @@ --- -title: Matrice de responsabilité IaaS - Stockage Objet S3 +title: IaaS Responsibility Matrix - S3 Object Storage +slug: /contractual/storage/raci +displayed_sidebar: docSidebar --- -Voici le RACI du partage de responsabilité entre le client et Cloud Temple pour l'usage de la plateforme de Stockage Objets S3 Cloud Temple. -## Définition des différents rôles +Here is the RACI matrix for the shared responsibility model between the client and Cloud Temple for using the Cloud Temple S3 Object Storage platform. -Nous rappelons ici les différents rôle du RACI : +## Definition of the different roles -| Rôle | Description | +Here is a reminder of the different RACI roles: + +| Role | Description | |--------------|------------------------------------------| -| (R) Réalise | __R__éalise le processus | -| (A) Approuve | __A__pprouve la réalisation du processus | -| (C) Consulte | __C__onsulté pendant le processus | -| (I) Informé | __I__nformé des résultats du processus | +| (R) Executes | __R__uns the process | +| (A) Approves | __A__pproves the process execution | +| (C) Consults | __C__onsulted during the process | +| (I) Informed | __I__nformed of the process results | -## Définir votre besoin +## Define your requirements -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | |----------------------------------------------------------------------------------|-------------|-------------------| -| Valider que le produit Stockage Objet S3 est conforme au besoin de l'application | __RA__ | __CI__ | -| Souscrire au service avec les informations nécessaires | __RA__ | __I__ | +| Validate that the S3 Object Storage product meets the application's requirements | __RA__ | __CI__ | +| Subscribe to the service with the necessary information | __RA__ | __I__ | -## Mettre en oeuvre le service +## Implement the Service -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | |------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer le maintien en condition opérationnelle de la plateforme Stockage Objet S3 | __I__ | __RA__ | -| Assurer le maintien en condition de sécurité de la plateforme Stockage Objet S3 | __I__ | __RA__ | -| Créer les objets | __RA__ | | -| Créer les clefs d'accès et affecter les droits associés | __RA__ | | +| Maintain operational readiness of the S3 Object Storage platform | __I__ | __RA__ | +| Maintain security readiness of the S3 Object Storage platform | __I__ | __RA__ | +| Create objects | __RA__ | | +| Create access keys and assign associated permissions | __RA__ | | -## Opérations récurrentes +## Recurring Operations -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | |------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer le maintien en condition opérationnelle de la plateforme Stockage Objet S3 | __I__ | __RA__ | -| Assurer le maintien en condition de sécurité de la plateforme Stockage Objet S3 | __I__ | __RA__ | -| Assurer l'accessibilité du service Stockage Objet S3 | __I__ | __RA__ | -| Conserver et mettre à disposition les journaux de la plateforme Stockage Objet S3 | | __RA__ | -| Superviser le bon fonctionnement de la plateforme Stockage Objet S3 | __I__ | __RA__ | -| Suivre le cycle de vie des objets | __RA__ | | -| Suivre le cycle de vie des droits sur les objets | __RA__ | | -| Gérer la sécurité logique des objets | __RA__ | | -| Gérer les incidents sur le service Stockage objets S3 | __I__ | __RA__ | -| Gérer les problèmes sur le service Stockage objets S3 | __I__ | __RA__ | -| Gérer la capacité sur le service Stockage objets S3 | __I__ | __RA__ | -| Gérer les évolutions sur le service Stockage objets S3 | __I__ | __RA__ | - -## Gestion du chiffrement - -| Activité | Rôle Client | Rôle Cloud Temple | +| Ensure operational maintenance of the S3 Object Storage platform | __I__ | __RA__ | +| Ensure security maintenance of the S3 Object Storage platform | __I__ | __RA__ | +| Ensure accessibility of the S3 Object Storage service | __I__ | __RA__ | +| Retain and make available the logs of the S3 Object Storage platform | | __RA__ | +| Monitor the proper functioning of the S3 Object Storage platform | __I__ | __RA__ | +| Track the lifecycle of objects | __RA__ | | +| Track the lifecycle of object permissions | __RA__ | | +| Manage logical security of objects | __RA__ | | +| Manage incidents on the S3 Object Storage service | __I__ | __RA__ | +| Manage problems on the S3 Object Storage service | __I__ | __RA__ | +| Manage capacity for the S3 Object Storage service | __I__ | __RA__ | +| Manage changes for the S3 Object Storage service | __I__ | __RA__ | + +## Encryption Management + +| Activity | Client Role | Cloud Temple Role | |------------------------------------------------------------------------------------------|-------------|-------------------| -| Gérer le chiffrement des données avant déploiement sur le service Stockage Objet S3 | __RA__ | | -| Gérer le chiffrement sur l'espace de stockage alloué par le service Stockage objet S3 | __A__ | __R__ | +| Manage data encryption before deployment to the S3 Object Storage service | __RA__ | | +| Manage encryption on the storage space allocated by the S3 Object Storage service | __A__ | __R__ | -## Continuité d'activité +## Business Continuity -| Activité | Rôle Client | Rôle Cloud Temple | -|-------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer la continuité d'activité du service de stockage objets S3 | __I__ | __RA__ | -| Assurer la sauvegarde des données | __RA__ | | -| Réaliser des tests périodiques de restauration des données | __RA__ | | -| maintenir le plan de continuité d'activité et de reprise d'activité pour les applications | __RA__ | | +| Activity | Client Role | Cloud Temple Role | +|---|---|---| +| Ensure business continuity of the S3 object storage service | __I__ | __RA__ | +| Ensure data backup | __RA__ | | +| Perform periodic data restoration tests | __RA__ | | +| Maintain the business continuity and disaster recovery plan for applications | __RA__ | | -## Réversibilité +## Reversibility -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | |-------------------------------------------------------------------------------------------|-------------|-------------------| -| Mettre en oeuvre le projet de réversibilité (planification, outils, méthodes, cibles,...) | __RA__ | | -| Exporter les données depuis le service de Stockage Objets S3 | __RA__ | | -| Supprimer les données sur le service de Stockage Objets S3 | __RA__ | | -| Détruite les supports de stockage en fin de vie ou en erreur | | __RA__ | +| Implement the reversibility project (planning, tools, methods, targets,...) | __RA__ | | +| Export data from the S3 Object Storage service | __RA__ | | +| Delete data on the S3 Object Storage service | __RA__ | | +| Destroy storage media at end of life or in case of error | | __RA__ | \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/contractual/kubernetes/raci.md b/i18n/en/docusaurus-plugin-content-docs/current/contractual/kubernetes/raci.md index a6fd9c44..f86f475c 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/contractual/kubernetes/raci.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/contractual/kubernetes/raci.md @@ -1,5 +1,6 @@ --- -title: Responsibility Assignment Matrix (RACI) - Managed Kubernetes +title: Responsibility Matrix (RACI) - Managed Kubernetes +displayed_sidebar: docSidebar --- ## RACI @@ -8,15 +9,15 @@ title: Responsibility Assignment Matrix (RACI) - Managed Kubernetes | **Activity** | **Client** | **Cloud Temple** | | ------------------------------------------------------------------- | ---------- | ---------------- | -| Define the overall architecture of the Kubernetes service | C | RA | -| Size the Kubernetes service (number of nodes, resources) | C | RA | -| Install the Kubernetes service with default configuration | I | RA | +| Define the overall Kubernetes service architecture | C | RA | +| Size the Kubernetes service (number of nodes, resources) | C | RA | +| Install the Kubernetes service with a default configuration | I | RA | | Configure the Kubernetes service | C | RA | -| Set up the base network for the Kubernetes service | I | RA | -| Deploy initial configuration for identities and access | C | RA | -| Define scaling and high availability strategy | C | RA | +| Configure the base network of the Kubernetes service | I | RA | +| Deploy the initial identity and access configuration | C | RA | +| Define the scaling and high availability strategy | C | RA | -### Project and Business Applications Management +### Project and Business Application Management | **Activity** | **Client** | **Cloud Temple** | | -------------------------------------------------- | ---------- | ---------------- | @@ -25,16 +26,16 @@ title: Responsibility Assignment Matrix (RACI) - Managed Kubernetes | Configure CI/CD pipelines | RA | I* | | Manage container images and registries | RA | I* | -*These responsibilities may be delegated to Cloud Temple via a complementary managed services contract.* +*These responsibilities can be delegated to Cloud Temple through an additional managed services contract. ### Monitoring and Performance | **Activity** | **Client** | **Cloud Temple** | -| ------------------------------------------------ | ---------- | ---------------- | +| ----------------------------------------------- | ---------- | ---------------- | | Monitor Kubernetes service performance | I | RA | | Monitor application performance | RA | | -| Manage alerts related to the Kubernetes service | I | RA | -| Manage alerts related to applications | RA | | +| Manage Kubernetes service alerts | I | RA | +| Manage application alerts | RA | | ### Infrastructure Maintenance and Updates @@ -44,113 +45,113 @@ title: Responsibility Assignment Matrix (RACI) - Managed Kubernetes | Apply security patches to Kubernetes | C | RA | | Update deployed applications (operators*) | C | RA | -*Operator package included in Managed Kube - see sections: Managed Helm Packages +*Operator package included on Managed Kube - see chapters: Managed Helm Packages ### Security | **Activity** | **Client** | **Cloud Temple** | | -------------------------------------------------------------------------- | ---------- | ---------------- | -| Manage security for the Kubernetes service | RA | RA | -| Configure and manage pod security policies | RA | I* | +| Manage Kubernetes service security | RA | RA | +| Configure and manage pod security policies | RA | I* | | Manage SSL/TLS certificates for the Kubernetes service | C | RA | -| Manage SSL/TLS certificates for applications | RA | I* | -| Implement and manage Role-Based Access Control (RBAC) for base roles | C | R | -| Implement and manage Role-Based Access Control (RBAC) for client roles | RA | I* | +| Manage SSL/TLS certificates for applications | RA | I* | +| Implement and manage basic role-based access control (RBAC) | C | R | +| Implement and manage client role-based access control (RBAC) | RA | I* | -*These responsibilities may be delegated to Cloud Temple via a complementary managed services contract. +*These responsibilities can be delegated to Cloud Temple via an additional managed services contract. ### Backup and Disaster Recovery | **Activity** | **Client** | **Cloud Temple** | | -------------------------------------------------------------------------- | ---------- | ---------------- | -| Define the backup strategy for the Kubernetes service | I | RA | -| Implement and manage backups for the Kubernetes service | I | RA | -| Define the backup strategy for applications | RA* | I* | -| Implement and manage backups for applications | RA* | I* | -| Test disaster recovery procedures for the Kubernetes service | CI | RA | -| Test disaster recovery procedures for applications | RA* | CI* | +| Define the backup strategy for the Kubernetes service | I | RA | +| Implement and manage backups for the Kubernetes service | I | RA | +| Define the backup strategy for applications | RA* | I* | +| Implement and manage backups for applications | RA* | I* | +| Test disaster recovery procedures for the Kubernetes service | CI | RA | +| Test disaster recovery procedures for applications | RA* | CI* | -*These responsibilities may be delegated to Cloud Temple via a complementary managed services contract. +*These responsibilities can be delegated to Cloud Temple via a supplementary managed services contract. -### Support and Troubleshooting +### Support and Issue Resolution | **Activity** | **Client** | **Cloud Temple** | | --------------------------------------------------------- | ---------- | ---------------- | -| Provide level 1 support for infrastructure | I | RA | -| Provide level 2 and 3 support for infrastructure | I | RA | -| Resolve issues related to the Kubernetes service | C | RA | -| Resolve issues related to applications | RA | I | +| Provide Level 1 support for infrastructure | I | RA | +| Provide Level 2 and Level 3 support for infrastructure | I | RA | +| Resolve Kubernetes service issues | C | RA | +| Resolve application issues | RA | I | ### Capacity Management and Evolution | **Activity** | **Client** | **Cloud Temple** | | ------------------------------------------------------ | ---------- | ---------------- | -| Monitor Kubernetes resource usage | C | RA | -| Plan service capacity evolution | RA | C | -| Implement capacity changes | I | RA | -| Manage application and resource evolution | RA | I | +| Monitor Kubernetes resource usage | C | RA | +| Plan service capacity evolution | RA | C | +| Implement capacity changes | I | RA | +| Manage application and resource evolution | RA | I | ### Documentation and Compliance | **Activity** | **Client** | **Cloud Temple** | | ------------------------------------------------ | ---------- | ---------------- | -| Maintain Kubernetes service documentation | I | RA | -| Maintain application documentation | RA | I | -| Ensure Kubernetes service compliance | I | RA | -| Ensure application compliance | RA | I | -| Conduct Kubernetes service audits | I | RA | -| Conduct application audits | RA | I | +| Maintain Kubernetes service documentation | I | RA | +| Maintain application documentation | RA | I | +| Ensure Kubernetes service compliance | I | RA | +| Ensure application compliance | RA | I | +| Conduct Kubernetes service audits | I | RA | +| Conduct application audits | RA | I | ### Basic Kubernetes Operators/CRDs Management | **Activity** | **Client** | **Cloud Temple** | | ----------------------------------------------------------- | ---------- | ---------------- | -| Provisioning of default Operators catalog | CI | RA | -| Updating Operators | CI | RA | -| Monitoring Operators status | CI | RA | -| Troubleshooting Operator-related issues | CI | RA | -| Managing Operator permissions | CI | RA | -| Managing Operator resources (addition/removal) | CI | RA | -| Backing up Operator resources data | CI | RA | -| Monitoring Operator resources | CI | RA | -| Restoring Operator resources data | CI | RA | -| Security auditing of Operators | CI | RA | +| Provisioning of the default Operator catalog | CI | RA | +| Operator updates | CI | RA | +| Monitoring Operator status | CI | RA | +| Operator issue resolution | CI | RA | +| Operator permissions management | CI | RA | +| Operator resource management (add/remove) | CI | RA | +| Backup of Operator resource data | CI | RA | +| Operator resource monitoring | CI | RA | +| Restoration of Operator resource data | CI | RA | +| Operator security audit | CI | RA | | Operator support | CI | RA | -| License management for Operators | CI | RA | -| Management of specific support plans for Operators | CI | RA | +| Operator license management | CI | RA | +| Management of specific support plans for operators | CI | RA | -*Operator package included in Managed Kube – see sections: Managed Helm Packages* +*Operator package included on Managed Kube - see chapters: Managed Helm Packages -### Kubernetes Application/Operator/CRD Management (Business) +### Management of Kubernetes applications/operators/CRDs (business) | **Activity** | **Client** | **Cloud Temple** | | ----------------------------------------------------------- | ---------- | ---------------- | | Deployment of CRDs | RA* | I* | -| Updating Operators | RA | I | -| Monitoring Operator status | RA | I | -| Troubleshooting Operator-related issues | RA | I | -| Managing Operator permissions | RA | I | -| Managing Operator resources (addition/removal) | RA | I | -| Backing up Operator resource data | RA | I | -| Monitoring Operator resources | RA | I | -| Restoring Operator resource data | RA | I | -| Security auditing of Operators | RA | I | -| Supporting Operators | RA | I | -| License management for Operators | RA | I | -| Management of specific support plans for Operators | RA | I | - -*These responsibilities may be delegated to Cloud Temple via a complementary managed services contract.* +| Operator updates | RA | I | +| Operator status monitoring | RA | I | +| Operator issue resolution | RA | I | +| Operator permissions management | RA | I | +| Operator resource management (add/remove) | RA | I | +| Backup of Operator resource data | RA | I | +| Operator resource supervision | RA | I | +| Restoration of Operator resource data | RA | I | +| Operator security audit | RA | I | +| Operator support | RA | I | +| Operator license management | RA | I | +| Management of specific operator support plans | RA | I | + +*These responsibilities can be delegated to Cloud Temple via an additional managed services contract. ### Application Support | **Activity** | **Client** | **Cloud Temple** | | ------------------------------------------- | ---------- | ---------------- | -| Application Support (external service) | RA | I | +| Application support (external service) | RA | I | -Application support may also be provided as part of a complementary service. +Application support can also be provided as part of an additional service. -### RACI (synthetic) +### RACI (summary) -- Cloud Temple: responsible and accountable (RA) for the Kubernetes foundation, cluster security, infrastructure backups, and monitoring. -- Client: responsible and accountable (RA) for application projects, business operators, CI/CD pipelines, and application backups. -- "Grey zone": adaptations and extensions (IAM, specific operators, cluster compliance/security hardening) — billed on a project basis. +- Cloud Temple: responsible and executor (RA) of the Kubernetes platform, cluster security, infrastructure backup, monitoring. +- Client: responsible and executor (RA) of application projects, business operators, CI/CD pipelines, application backups. +- "Grey" area: adaptations and extensions (IAM, specific operators, cluster compliance/security hardening) - billed on a project basis. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/contractual/llmaas/raci.md b/i18n/en/docusaurus-plugin-content-docs/current/contractual/llmaas/raci.md index dd89870c..098bee1c 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/contractual/llmaas/raci.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/contractual/llmaas/raci.md @@ -1,70 +1,72 @@ --- -title: Matrice de responsabilité - LLMaaS +title: Responsibility Matrix - LLMaaS +displayed_sidebar: docSidebar --- -Voici le RACI du partage de responsabilité entre le client et Cloud Temple pour l'usage de la plateforme LLM as a Service (LLMaaS). -## Définition des différents rôles +Here is the RACI for the shared responsibility between the client and Cloud Temple for the use of the LLM as a Service (LLMaaS) platform. -Nous rappelons ici les différents rôle du RACI : +## Definition of the different roles -| Rôle | Description | +We remind you here of the different RACI roles: + +| Role | Description | | ------------ | ---------------------------------------- | -| (R) Réalise | __R__éalise le processus | -| (A) Approuve | __A__pprouve la réalisation du processus | -| (C) Consulte | __C__onsulté pendant le processus | -| (I) Informé | __I__nformé des résultats du processus | +| (R) Responsible | __R__esponsible for the process | +| (A) Approves | __A__pproves the process execution | +| (C) Consulted | __C__onsulted during the process | +| (I) Informed | __I__nformed of the process results | -## Définir votre besoin +## Define your requirements -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | --------------------------------------------------------------------- | ----------- | ----------------- | -| Valider que le service LLMaaS est conforme au besoin de l'application | __RA__ | __CI__ | -| Souscrire au service et sélectionner un tier de facturation | __RA__ | __I__ | +| Validate that the LLMaaS service meets the application requirements | __RA__ | __CI__ | +| Subscribe to the service and select a billing tier | __RA__ | __I__ | -## Mettre en oeuvre le service +## Implement the Service -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | ---------------------------------------------------------------------------------- | ----------- | ----------------- | -| Assurer le maintien en condition opérationnelle de la plateforme LLMaaS (API, GPU) | __I__ | __RA__ | -| Assurer le maintien en condition de sécurité de la plateforme LLMaaS | __I__ | __RA__ | -| Gérer les clés d'accès API (création, rotation, révocation) | __RA__ | | -| Développer et maintenir le code de l'application cliente | __RA__ | | +| Ensure operational readiness of the LLMaaS platform (API, GPU) | __I__ | __RA__ | +| Ensure security readiness of the LLMaaS platform | __I__ | __RA__ | +| Manage API access keys (creation, rotation, revocation) | __RA__ | | +| Develop and maintain the client application code | __RA__ | | -## Opérations récurrentes +## Recurring Operations -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | ---------------------------------------------------------------- | ----------- | ----------------- | -| Assurer la disponibilité de l'API LLMaaS | __I__ | __RA__ | -| Superviser le bon fonctionnement de la plateforme et des modèles | __I__ | __RA__ | -| Gérer les incidents sur la plateforme LLMaaS | __I__ | __RA__ | -| Gérer les problèmes sur la plateforme LLMaaS | __I__ | __RA__ | -| Gérer la capacité de l'infrastructure GPU | __I__ | __RA__ | -| Gérer les évolutions des modèles (ajout, dépréciation) | __C, I__ | __RA__ | -| Suivre la consommation et la facturation | __RA__ | __I__ | +| Ensure LLMaaS API availability | __I__ | __RA__ | +| Monitor platform and model operation | __I__ | __RA__ | +| Manage LLMaaS platform incidents | __I__ | __RA__ | +| Manage LLMaaS platform problems | __I__ | __RA__ | +| Manage GPU infrastructure capacity | __I__ | __RA__ | +| Manage model updates (additions, deprecations) | __C, I__ | __RA__ | +| Track consumption and billing | __RA__ | __I__ | -## Gestion de la sécurité +## Security Management -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | --------------------------------------------------------------------------- | ----------- | ----------------- | -| Sécuriser l'infrastructure physique et la plateforme LLMaaS | __I__ | __RA__ | -| Gérer les accès et les permissions des utilisateurs finaux de l'application | __RA__ | | -| Sécuriser les données et les prompts envoyés à l'API | __RA__ | __C__ | -| Assurer la confidentialité des données traitées par les modèles | __R__ | __A__ | -| Gérer la conformité de l'application finale (RGPD, etc.) | __RA__ | __I__ | +| Secure physical infrastructure and LLMaaS platform | __I__ | __RA__ | +| Manage access and permissions for application end users | __RA__ | | +| Secure data and prompts sent to the API | __RA__ | __C__ | +| Ensure confidentiality of data processed by models | __R__ | __A__ | +| Manage compliance of the final application (GDPR, etc.) | __RA__ | __I__ | -## Continuité d'activité +## Business Continuity -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | --------------------------------------------------------------------- | ----------- | ----------------- | -| Assurer la continuité d'activité de la plateforme LLMaaS | __I__ | __RA__ | -| Assurer la sauvegarde des données de l'application cliente | __RA__ | | -| Maintenir le plan de continuité d'activité pour l'application cliente | __RA__ | | +| Ensure business continuity of the LLMaaS platform | __I__ | __RA__ | +| Ensure backup of client application data | __RA__ | | +| Maintain the business continuity plan for the client application | __RA__ | | -## Réversibilité +## Reversibility -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | --------------------------------------------------------------------------- | ----------- | ----------------- | -| Mettre en oeuvre le projet de réversibilité (planification, outils, cibles) | __RA__ | __C__ | -| Exporter les données et le code de l'application cliente | __RA__ | | -| Supprimer les clés d'API et les accès au service | __RA__ | | +| Implement the reversibility project (planning, tools, targets) | __RA__ | __C__ | +| Export the client application's data and code | __RA__ | | +| Delete API keys and service access | __RA__ | | \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/contractual/network/raci.md b/i18n/en/docusaurus-plugin-content-docs/current/contractual/network/raci.md index 26147c57..57cd1a2e 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/contractual/network/raci.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/contractual/network/raci.md @@ -1,16 +1,17 @@ --- -title: Matrice de responsabilité Réseau +title: Network Responsibility Matrix +displayed_sidebar: docSidebar --- -### Connectivité réseau client +### Client network connectivity -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | |------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Souscrire à une connectivité réseau opérateur pour accéder à un datacenter physique Cloud Temple (6) | __RA__ | __CI__ | -| Gérer les incidents sur les liens réseaux opérateurs client | __RA__ | | -| Gérer les problèmes sur les liens réseaux opérateurs client | __RA__ | __I__ | -| Gérer les capacités sur les liens réseaux opérateurs client | __RA__ | __CI__ | +| Subscribe to an operator network connectivity to access a Cloud Temple physical datacenter (6) | __RA__ | __CI__ | +| Manage incidents on client operator network links | __RA__ | | +| Manage issues on client operator network links | __RA__ | __I__ | +| Manage capacity on client operator network links | __RA__ | __CI__ | -*(6) Cloud Temple assume la responsabilité du réseau concernant son infrastructure backbone, ses points de collecte ainsi que -les points d'interconnexion datacenter, garantissant ainsi la connectivité entre ces points et son réseau backbone. -Dans l'offre d'hébergement en baie physique, Cloud Temple assume la responsabilité à partir de l'équipement situé en haut du rack, communément appelé "top of rack".* +*(6) Cloud Temple assumes responsibility for the network regarding its backbone infrastructure, its collection points, as well as +the datacenter interconnection points, thereby ensuring connectivity between these points and its backbone network. +In the physical rack hosting offer, Cloud Temple assumes responsibility starting from the equipment located at the top of the rack, commonly referred to as "top of rack".* \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/contractual/network/raci_vpc.md b/i18n/en/docusaurus-plugin-content-docs/current/contractual/network/raci_vpc.md index 9e91b019..7f37b2c0 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/contractual/network/raci_vpc.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/contractual/network/raci_vpc.md @@ -5,190 +5,188 @@ slug: /contractual/network/raci-vpc # Shared Responsibility Model — VPC (Virtual Private Cloud) -This **RACI** model defines the distribution of responsibilities between the customer and Cloud Temple for the **VPC (Virtual Private Cloud)** service. +Here is the **RACI** model defining the allocation of responsibilities between the client and Cloud Temple for the use of the **VPC (Virtual Private Cloud)** service. -> **VPC service specifics** -> The VPC is a **fully managed network service by Cloud Temple**, offering a cloud-native experience: automatic routing, built-in high availability, and native IPAM/DHCP management. Cloud Temple guarantees the operation and availability of the underlying network infrastructure (VPC routers, inter-AZ backbone, external gateway). The customer is responsible for the design, configuration, and security of their network space: subnets, addressing, filtering policies, and interconnections. +> **VPC Offering Specifics** +> The VPC is a network service **fully managed by Cloud Temple**, providing a cloud-native experience: automatic routing, built-in high availability, and native IPAM/DHCP management. Cloud Temple guarantees the operation and availability of the underlying network infrastructure (VPC routers, inter-AZ backbone, external gateway). The client is responsible for the design, configuration, and security of their network space: subnets, addressing, filtering policies, and interconnections. --- ## Role Definitions -| Role | Description | -|---------------|----------------------------------------------------------------------------------------------| -| (R) Responsible | __R__esponsible for performing the process | -| (A) Accountable | __A__ccountable for the successful completion of the process | -| (C) Consulted | __C__onsulted during the process | -| (I) Informed | __I__nformed of the results of the process (via tooling, portal, or messaging) | +| Role | Description | +|--------------|---------------------------------------------------------------------------------------| +| (R) Executes | __E__xecutes the process | +| (A) Approves | __A__pproves the execution of the process | +| (C) Consulted| __C__onsulted during the process | +| (I) Informed | __I__nformed of the process results (via tooling, the portal, or messaging) | --- -## Physical Network Infrastructure & Backbone +## Physical network infrastructure & backbone -Cloud Temple is fully responsible for the physical infrastructure and network backbone on which the VPC is based. +Cloud Temple is fully responsible for the physical infrastructure and network backbone on which the VPC relies. -| Activity | Customer | Cloud Temple | -|-------------------------------------------------------------------------------------------------------------|----------|--------------| -| Ensure implementation and maintenance of **physical network infrastructure** (switches, backbone routers) | | **RA** | -| Ensure **inter-datacenter / inter-AZ** backbone connectivity of Cloud Temple | **I** | **RA** | -| Ensure the **backbone network** is maintained in operational condition | **I** | **RA** | -| Ensure the **backbone network** is maintained in secure condition | **I** | **RA** | -| Manage incidents, problems, and backbone network capacity | **I** | **RA** | -| Acquire and maintain licenses essential for network infrastructure operation | | **RA** | +| Activity | Client | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| Ensure the implementation and maintenance of **physical network infrastructures** (switches, backbone routers) | | **RA** | +| Ensure **inter-datacenter / inter-AZ** connectivity for the Cloud Temple backbone | **I** | **RA** | +| Ensure operational maintenance of the Cloud Temple **network backbone** | **I** | **RA** | +| Ensure security maintenance of the Cloud Temple **network backbone** | **I** | **RA** | +| Manage network backbone incidents, issues, and capacity | **I** | **RA** | +| Acquire and maintain licenses essential for network infrastructure operation | | **RA** | --- -## VPC Infrastructure (Router, Gateway & IPAM) +## VPC Infrastructure (router, gateway & IPAM) -Cloud Temple ensures the operation of the VPC core components. The customer configures their network space within this infrastructure. +Cloud Temple ensures the operation of the core VPC components. The client configures its network space within this infrastructure. -| Activity | Customer | Cloud Temple | -|-------------------------------------------------------------------------------------------------------------|----------|--------------| -| Ensure the **VPC Router** is maintained in operational condition *(1)* | **I** | **RA** | -| Ensure **high availability** of the VPC Router | **I** | **RA** | -| Ensure the **External Gateway** is maintained in operational condition *(1)* | **I** | **RA** | -| Ensure **high availability** of the External Gateway | **I** | **RA** | -| Ensure the underlying **IPAM & DHCP** service is operational | **I** | **RA** | -| Manage incidents and problems on VPC core components | **I** | **RA** | -| Update and maintain VPC core components in secure condition | **I** | **RA** | +| Activity | Client | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| Ensure the operational readiness of the **VPC router** *(1)* | **I** | **RA** | +| Ensure **high availability** of the VPC router | **I** | **RA** | +| Ensure the operational readiness of the **External Gateway** *(1)* | **I** | **RA** | +| Ensure **high availability** of the External Gateway | **I** | **RA** | +| Ensure the operation of the underlying **IPAM & DHCP** service | **I** | **RA** | +| Manage incidents and issues on core VPC components | **I** | **RA** | +| Update and maintain security compliance of core VPC components | **I** | **RA** | -*(1) The VPC Router and External Gateway are fully managed components by Cloud Temple. Their availability is guaranteed by Cloud Temple under the VPC service SLA.* +*(1) The VPC router and the External Gateway are fully managed components by Cloud Temple. Their availability is guaranteed by Cloud Temple as part of the VPC service SLA.* --- ## VPC Provisioning & Configuration -The customer is responsible for creating and configuring their VPC and the network resources it contains. +The client is responsible for creating and configuring their VPC as well as the network resources that compose it. -| Activity | Customer | Cloud Temple | -|-------------------------------------------------------------------------------------------------------------|----------|--------------| -| Create, modify, and delete a **VPC** | **RA** | **I** | -| Define the VPC network architecture (number of subnets, topology) | **RA** | | -| Create, modify, and delete **private networks (Private Networks / VLANs)** in the VPC | **RA** | **I** | -| Define the **IP addressing plan** (CIDR ranges) of private networks | **RA** | **I** | -| Configure **DHCP pools** (dynamic ranges, DNS, gateway) | **RA** | **C** | -| Activate and configure the **External Gateway** (Internet access, NAT, DNAT) *(2)* | **RA** | **C** | -| Manage **static routes** within the VPC | **RA** | | +| Activity | Client | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| Create, modify, and delete a **VPC** | **RA** | **I** | +| Define the VPC network architecture (number of subnets, topology) | **RA** | | +| Create, modify, and delete **private networks (Private Networks / VLANs)** in the VPC | **RA** | **I** | +| Define the **IP addressing plan** (CIDR ranges) for private networks | **RA** | **I** | +| Configure **DHCP pools** (dynamic ranges, DNS, gateway) | **RA** | **C** | +| Enable and configure the **External Gateway** (Internet access, NAT, DNAT) *(2)* | **RA** | **C** | +| Manage **static routes** within the VPC | **RA** | | -*(2) Activating the External Gateway opens Internet access for the VPC. The customer is responsible for the associated filtering rules and traffic control.* +*(2) Enabling the External Gateway opens Internet access for the VPC. The client is responsible for the associated filtering rules and traffic control.* --- ## Public IPs & Internet Exposure -| Activity | Customer | Cloud Temple | -|-------------------------------------------------------------------------------------------------------------|----------|--------------| -| Allocate the **pool of public IPs** available on the platform | **I** | **RA** | -| Order and associate **public IPs (floating IPs)** with their VPC | **RA** | **I** | -| Configure **NAT / DNAT** rules for service exposure | **RA** | | -| Manage the lifecycle of public IPs (association, release, move) | **RA** | **I** | -| Ensure that services exposed on the Internet comply with applicable security policies | **RA** | | +| Activity | Client | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| Allocate the **public IP pool** available on the platform | **I** | **RA** | +| Order and associate **public IPs (floating IPs)** with its VPC | **RA** | **I** | +| Configure **NAT / DNAT** rules for service exposure | **RA** | | +| Manage the lifecycle of public IPs (association, release, relocation) | **RA** | **I** | +| Ensure that services exposed to the Internet comply with applicable security policies | **RA** | | --- ## Network Security -| Activity | Customer | Cloud Temple | -|-------------------------------------------------------------------------------------------------------------|----------|--------------| -| Ensure **inter-tenant network isolation** at the platform level *(3)* | | **RA** | -| Define and configure **micro-segmentation policies** (security groups) *(4)* | **RA** | | -| Implement **traffic filtering** inbound/outbound (application firewall, IDS/IPS) *(5)* | **RA** | | -| Manage **TLS certificates** and SSL termination of exposed services | **RA** | | -| Conduct **penetration tests** on resources hosted in the VPC *(6)* | **RA** | **C** | -| Monitor **abnormal behavior** on tenant network flows | **RA** | | +| Activity | Client | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| Ensure **inter-tenant network isolation** at the platform level *(3)* | | **RA** | +| Define and configure **micro-segmentation policies** (security groups) *(4)* | **RA** | | +| Implement **traffic filtering** for inbound/outbound (application firewall, IDS/IPS) *(5)* | **RA** | | +| Manage **TLS certificates** and SSL termination for exposed services | **RA** | | +| Conduct **penetration tests** on resources hosted in the VPC *(6)* | **RA** | **C** | +| Monitor **anomalous behavior** on tenant network traffic | **RA** | | -*(3) Cloud Temple guarantees strict isolation between VPCs belonging to different tenants. No traffic can cross this barrier without explicit customer action.* -*(4) Micro-segmentation (security groups) will be available in H1 2026. Filtering policies applicable before this availability must be implemented by the customer via a dedicated security device.* -*(5) Application traffic filtering within the VPC is the customer's responsibility. Cloud Temple does not perform content inspection of tenant traffic.* -*(6) Penetration tests must be declared in advance to Cloud Temple, in accordance with the general terms of use.* +*(3) Cloud Temple guarantees strict isolation between VPCs belonging to different tenants. No traffic can cross this barrier without explicit action from the client.* +*(4) Micro-segmentation (security groups) will be available in S1 2026. Filtering policies applicable prior to this availability must be implemented by the client using dedicated security equipment.* +*(5) Application-level traffic filtering within the VPC is the client's responsibility. Cloud Temple does not perform content inspection of tenant traffic.* +*(6) Penetration tests must be declared in advance to Cloud Temple, in accordance with the terms of service.* --- -## Interconnection with External Networks +## Interconnection with external networks -| Activity | Customer | Cloud Temple | -|-------------------------------------------------------------------------------------------------------------|----------|--------------| -| Define the **interconnection strategy** with on-premise environments or other clouds | **RA** | **C** | -| Subscribe to and configure a **site-to-site VPN** access *(available H2 2026)* | **RA** | **C** | -| Subscribe to and configure **Cloud Connect** (dedicated link) access *(available H2 2026)* | **RA** | **C** | -| Manage **BGP / routes** associated with operator interconnections | **RA** | **CI** | -| Ensure **security of flows** transiting over interconnections | **RA** | | +| Activity | Client | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| Define the **interconnection** strategy with on-premise environments or other clouds | **RA** | **C** | +| Subscribe to and configure **site-to-site VPN** access *(available H2 2026)* | **RA** | **C** | +| Subscribe to and configure **Cloud Connect** access (dedicated link) *(available H2 2026)* | **RA** | **C** | +| Manage **BGP / routes** associated with operator interconnections | **RA** | **CI** | +| Ensure **traffic security** across interconnections | **RA** | | --- -## Connecting Resources to the VPC +## Connecting resources to the VPC -| Activity | Customer | Cloud Temple | -|-------------------------------------------------------------------------------------------------------------|----------|--------------| -| Attach **VM instances** to a VPC private network | **RA** | **I** | -| Attach **IaaS resources** (VMware VMs, OpenIaaS) to VPC private networks | **RA** | **C** | -| Configure **network interfaces** of resources connected to the VPC | **RA** | | -| Ensure connected resources apply **consistent network configurations** (gateway, DNS) | **RA** | | +| Activity | Client | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| Attach **VM instances** to a VPC private network | **RA** | **I** | +| Attach **IaaS resources** (VMware VMs, OpenIaaS) to VPC private networks | **RA** | **C** | +| Configure the **network interfaces** of resources connected to the VPC | **RA** | | +| Ensure that connected resources apply **consistent network configurations** (gateway, DNS) | **RA** | | --- ## Network Monitoring & Observability -| Activity | Customer | Cloud Temple | -|-------------------------------------------------------------------------------------------------------------|----------|--------------| -| Monitor the operation of **VPC core components** (router, gateway) | **I** | **RA** | -| Monitor the **performance of the Cloud Temple** network backbone | **I** | **RA** | -| Collect and analyze **network flow logs** (flow logs) of the VPC *(available H1 2026)* | **RA** | **I** | -| Implement **application flow monitoring** in the VPC | **RA** | | -| Monitor **latency and bandwidth** of flows within the VPC | **RA** | **I** | +| Activity | Client | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| Monitor the operation of **core VPC components** (router, gateway) | **I** | **RA** | +| Monitor the **performance of the Cloud Temple network backbone** | **I** | **RA** | +| Collect and analyze VPC **network flow logs** (flow logs) *(available H1 2026)* | **RA** | **I** | +| Implement **application flow monitoring** within the VPC | **RA** | | +| Monitor the **latency and bandwidth** of traffic within the VPC | **RA** | **I** | --- -## Change Management & Capacity +## Change & Capacity Management -| Activity | Customer | Cloud Temple | -|-------------------------------------------------------------------------------------------------------------|----------|--------------| -| Decide to add, modify, or remove network resources in their VPC | **RA** | **CI** | -| Manage capacity and scalability of the backbone network infrastructure | | **RA** | -| Plan and manage IP addressing plan growth in the VPC | **RA** | **C** | +| Activity | Client | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| Make the decision to add, modify, or remove network resources in the VPC | **RA** | **CI** | +| Manage capacity and scalability of the backbone network infrastructure | | **RA** | +| Plan and manage IP address space growth in the VPC | **RA** | **C** | --- ## Access & Identity Management -| Activity | Customer | Cloud Temple | -|-------------------------------------------------------------------------------------------------------------|----------|--------------| -| Ensure accessibility of **Cloud Temple Console** and network API | | **RA** | -| Manage entitlements of Cloud Temple teams to network infrastructure | | **RA** | -| Administer VPC access rights in Cloud Temple Console (IAM) | **RA** | | +| Activity | Client | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| Ensure accessibility of the **Cloud Temple Console** and the network API | | **RA** | +| Manage Cloud Temple teams' permissions for the network infrastructure | | **RA** | +| Administer VPC access rights in the Cloud Temple Console (IAM) | **RA** | | --- -## Logs +## Logs (logs) -| Activity | Customer | Cloud Temple | -|-------------------------------------------------------------------------------------------------------------|----------|--------------| -| Retain and provide access to **VPC platform logs** *(7)* | | **RA** | -| Collect and retain **flow logs** and tenant application logs | **RA** | | +| Activity | Client | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| Retain and make available the **VPC platform logs** *(7)* | | **RA** | +| Collect and retain **flow logs** and tenant application logs | **RA** | | -*(7) VPC platform log retention duration is specified in the corresponding service agreement.* +*(7) The retention period for VPC platform logs is specified in the corresponding service agreement.* --- -## Documentation & Contractual +## Documentation & Contractual Management -| Activity | Customer | Cloud Temple | -|-------------------------------------------------------------------------------------------------------------|----------|--------------| -| Manage commercial and contractual matters (quotes, orders, billing) | **I** | **RA** | -| Monitor contractual service delivery | **RA** | **I** | -| Maintain and provide access to VPC service technical documentation | **I** | **RA** | -| Document the network architecture deployed in the tenant (diagrams, CMDB) | **RA** | | - ---- +| Activity | Client | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| Manage commercial and contractual aspects (quotes, orders, invoicing) | **I** | **RA** | +| Ensure contractual monitoring of the service | **RA** | **I** | +| Maintain and ensure the availability of the VPC service technical documentation | **I** | **RA** | +| Document the network architecture deployed in its tenant (diagrams, CMDB) | **RA** | | ## Reversibility -| Activity | Customer | Cloud Temple | -|-------------------------------------------------------------------------------------------------------------|----------|--------------| -| Plan the network reversibility project and choose target architectures | **RA** | **I** | -| Export VPC configuration and network resources via API or provided tools | **RA** | **I** | -| Proceed with VPC configuration decommissioning following contract termination | **I** | **RA** | +| Activity | Client | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| Plan the network reversibility project and select target architectures | **RA** | **I** | +| Export VPC and network resource configuration via API or provided tools | **RA** | **I** | +| Proceed with decommissioning VPC configurations following termination | **I** | **RA** | --- -> *Professional services are available if you wish to delegate some or all of the responsibilities listed as the customer's to Cloud Temple. Contact your Cloud Temple account manager.* +> *Professional services are available if you wish to delegate all or part of the responsibilities listed as the client's responsibility. Contact your Cloud Temple sales representative.* \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/contractual/network/sla_vpc.md b/i18n/en/docusaurus-plugin-content-docs/current/contractual/network/sla_vpc.md index 1d372170..5c09dae1 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/contractual/network/sla_vpc.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/contractual/network/sla_vpc.md @@ -1,5 +1,5 @@ --- -title: VPC SLA +title: SLA VPC slug: /contractual/network/sla-vpc displayed_sidebar: docSidebar --- @@ -8,49 +8,49 @@ displayed_sidebar: docSidebar | | | | :--- | :--- | -| **Last updated** | April 17, 2026 | +| **Last Updated Date** | 17 April 2026 | -This document defines the Service Level Agreements (SLA) applicable to the **Virtual Private Cloud (VPC)** product provided by **Cloud Temple** (hereinafter referred to as "the Provider" or "Cloud Temple"). It supplements the Cloud Temple General Terms and Conditions and forms an inseparable whole with them. +This document defines the Service Level Commitments (SLA) applicable to the **Virtual Private Cloud (VPC)** product provided by **Cloud Temple** (hereinafter referred to as "the Provider" or "Cloud Temple"). It supplements Cloud Temple's General Terms of Sale and Service and forms an integral part thereof. --- ## 1. Definitions -Within this SLA, the following capitalized terms have the meanings set forth below: +For the purposes of this SLA, the following capitalized terms shall have the meanings set forth below: -- **Monthly Availability Rate**: The guaranteed uptime percentage for the VPC service data plane during a calendar month. -- **VPC Service**: All components managed by Cloud Temple constituting the Virtual Private Cloud: VPC router, Private Networks, and External Gateway with its NAT, DNAT, and Floating IP features. -- **Data Plane**: The network transport plane providing routing between private networks within the same VPC and Internet connectivity via the External Gateway. -- **Control Plane**: The APIs and interfaces (Cloud Temple Console) enabling the creation, modification, and deletion of VPC resources (networks, routers, floating IPs, security rules). -- **Unavailability Period**: Complete interruption of routing between private networks within the same VPC, or total loss of Internet connectivity via the enabled External Gateway, as detected by Cloud Temple's monitoring tools. -- **Downtime Duration**: Uninterrupted time during which the Unavailability Period is observed. To be counted under this SLA, a Downtime Duration must be at least **five (5) consecutive minutes**. +- **Monthly Availability Rate**: The guaranteed percentage of uptime for the VPC service data plane during a calendar month. +- **VPC Service**: The set of components managed by Cloud Temple that constitute the Virtual Private Cloud: VPC router, Private Networks, and External Gateway with its NAT, DNAT, and Floating IP features. +- **Data Plane**: The network transport plane responsible for routing traffic between the private networks within the same VPC, as well as Internet connectivity via the External Gateway. +- **Control Plane**: The APIs and interfaces (Cloud Temple Console) used to create, modify, and delete VPC resources (networks, routers, Floating IPs, security rules). +- **Downtime Period**: A complete interruption of routing between the private networks within the same VPC, or a total loss of Internet connectivity via the External Gateway when enabled, as detected by Cloud Temple's monitoring tools. +- **Downtime Duration**: The uninterrupted time during which the Downtime Period is observed. To be counted under this SLA, a Downtime Duration must be at least **five (5) consecutive minutes**. --- -## 2. Service Level Commitments (SLA) +## 2. Service Level Agreements (SLA) Cloud Temple commits to the following monthly availability levels: | Component | Guaranteed Monthly Availability Rate | | :--- | :---: | -| **VPC Data Plane** (inter-network routing, NAT, DNAT) | **99.99%** | -| **VPC Control Plane** (API, Cloud Temple Console) | **99.9%** | +| **VPC Data Plane** (routage inter-réseaux, NAT, DNAT) | **99.99 %** | +| **VPC Control Plane** (API, Console Cloud Temple) | **99.9 %** | -A Monthly Availability Rate of **99.99%** for the data plane corresponds to a maximum of **4.4 minutes** of permitted downtime per calendar month. +A Monthly Availability Rate of **99.99 %** for the data plane corresponds to a maximum of **4.4 minutes** of authorized downtime per calendar month. -In case of non-compliance with these commitments, the Client may claim Service Credits under the conditions defined in Article 5. +In the event of non-compliance with these commitments, the Customer may claim Service Credits under the conditions set forth in Article 5. --- -## 3. Availability Measurement and Scope +## 3. Measurement and Scope of Availability Monitoring and calculation of the Monthly Availability Rate are performed **exclusively by Cloud Temple's infrastructure monitoring tools**. **Scope of responsibility:** -This SLA covers only the network components **managed by Cloud Temple**: -- The VPC router and internal routing table. -- Private Networks (L2 segments) and their data plane availability. -- The External Gateway, its NAT, DNAT features, and associated Floating IPs. +This SLA covers only the network components **managed by Cloud Temple** : +- The VPC router and the internal routing table. +- Private Networks (segments L2) and their availability at the data plane level. +- The external gateway (External Gateway), its NAT and DNAT features, and the associated floating IPs. :::info Compute resources (VM Instances, IaaS OpenSource, IaaS VMware) connected to the VPC are subject to separate SLAs and are not covered by this document. @@ -58,19 +58,19 @@ Compute resources (VM Instances, IaaS OpenSource, IaaS VMware) connected to the --- -## 4. Exclusions +## 4. SLA Exclusions -This SLA does not constitute a commitment on elements outside Cloud Temple's direct control. The following are **not** considered Unavailability Periods: +This SLA does not constitute a commitment regarding elements outside Cloud Temple's direct control. Outages resulting from the following are **not** considered Downtime Periods: -1. **Client Configurations**: Network filtering rules (Security Groups, ACLs) configured by the Client blocking connectivity, IP address conflicts, misconfigured subnets or static routes. +1. **Client Configurations**: Network filtering rules (Security Groups, ACLs) configured by the Client that block connectivity, IP address conflicts, misconfigured subnets or static routes. -2. **Connected Resource Failures**: Failures at the operating system or application level on compute instances (VM Instances, IaaS, Bare Metal) connected to the VPC. +2. **Failures of Connected Resources**: Failures at the operating system or application level hosted on compute instances (VM Instances, IaaS, Bare Metal) connected to the VPC. -3. **External Internet Connectivity**: Connectivity interruptions beyond Cloud Temple's point of demarcation (Internet transit provider incidents, BGP upstream link degradations). +3. **External Internet Connectivity**: Connectivity interruptions occurring beyond the Cloud Temple demarcation point (incidents with Internet transit providers, degradation of upstream BGP links). -4. **Scheduled Maintenance**: Network infrastructure maintenance operations that have been previously notified within the maintenance windows provided in the Client's support contract. +4. **Scheduled Maintenance**: Maintenance activities on Cloud Temple's network infrastructure that have been subject to prior notification as part of the maintenance windows outlined in the Client's support contract. -5. **Abusive Behavior or Violation**: Suspension of the VPC service by Cloud Temple following a violation of the General Terms or security requirements (e.g., malicious network activity, non-compliance with Acceptable Use Policies). +5. **Abusive Behavior or Violation**: Suspension of the VPC service by Cloud Temple following a violation of the Terms and Conditions or security requirements (e.g., malicious network activity, failure to comply with the Acceptable Use Policy). 6. **Force Majeure**: Events beyond Cloud Temple's reasonable control (natural disasters, acts of war, national power outages, etc.). @@ -78,11 +78,11 @@ This SLA does not constitute a commitment on elements outside Cloud Temple's dir ## 5. Service Credits and Penalties -### 5.1 VPC Data Plane +### 5.1 VPC Data Plan -If the Monthly Availability Rate of 99.99% is not achieved for the data plane, the Client is eligible for a Service Credit calculated as a percentage of the monthly amount billed for the VPC service: +If the 99.99% Monthly Availability Rate is not met for the data plan, the Customer is eligible for a Service Credit calculated as a percentage of the monthly billed amount for the VPC service: -| Observed monthly availability rate | Service Credit | +| Actual Monthly Availability Rate | Service Credit | | :--- | :---: | | Between 99.00% and 99.98% | 10% | | Between 95.00% and 98.99% | 25% | @@ -90,12 +90,12 @@ If the Monthly Availability Rate of 99.99% is not achieved for the data plane, t ### 5.2 VPC Control Plane -If the Monthly Availability Rate of 99.9% is not achieved for the control plane, the Client is eligible for a Service Credit of **10%** of the monthly amount billed for the VPC service. +If the Monthly Availability Rate of 99.9% is not met for the control plane, the Customer is eligible for a Service Credit of **10%** of the monthly billed amount for the affected VPC service. -### 5.3 Claim Procedure +### 5.3 Claim Procedures -To obtain a Service Credit, the Client must submit a reasoned request by opening a ticket with Cloud Temple support within **thirty (30) calendar days** following the month in which the incident occurred. +To obtain a Service Credit, the Customer must submit a reasoned request by opening a ticket with Cloud Temple Support within **thirty (30) calendar days** following the month in which the incident occurred. The request must include: -- The UUID of the VPC concerned -- Precise timestamps of the observed Unavailability Period +- The UUID of the affected VPC +- The precise timestamps of the observed Downtime Period \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/contractual/paas/mco_mcs.md b/i18n/en/docusaurus-plugin-content-docs/current/contractual/paas/mco_mcs.md index 82ea704f..0f3b0304 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/contractual/paas/mco_mcs.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/contractual/paas/mco_mcs.md @@ -1,65 +1,74 @@ --- -title: MCO/MCS +title: MCO/MCS PaaS OpenShift +slug: /contractual/paas/mco-mcs +displayed_sidebar: docSidebar --- -**Operational Readiness Policy (MCO) and Security Readiness Policy (MCS) for the OpenShift SNC PaaS on Cloud Temple** + +**Operational Maintenance (MCO) and Security Maintenance (MCS) Policy for the SNC OpenShift PaaS **Cloud Temple**** ## Preamble -This policy outlines the responsibilities and recommendations for Operational Readiness Maintenance (ORM) and Security Compliance Maintenance (SCM) of your environments on the OpenShift SNC PaaS **Cloud Temple**. +This policy details the responsibilities and recommendations for Operational Support (MCO) and Security Support (MCS) of your environments on the OpenShift PaaS SNC **Cloud Temple**. + +--- -## Operational Readiness Maintenance (ORM) +## Operational Readiness (MCO) ### Cluster Management and Updates **Cloud Temple Responsibility:** - Full management of the underlying infrastructure, including master nodes, OpenShift version updates, and resilience of critical services deployed by **Cloud Temple**. -- Automatic minor/patch updates with no downtime for hosted workloads, unless otherwise notified. -- Restriction of permissions and features according to SecNumCloud constraints. -- Communication of upcoming updates and release-breaking changes for the next three months via the [**Cloud Temple Roadmap**](https://github.com/orgs/Cloud-Temple/projects/2) +- Automatic minor/patch updates without interruption for hosted workloads, unless otherwise notified. +- Restriction of rights and features to SecNumCloud constraints. +- Communication of upcoming updates and break-fix updates over the next three months via the [**Cloud Temple Roadmap**](https://github.com/orgs/Cloud-Temple/projects/2) **User Responsibility:** - Management of deployed workloads (applications, CI/CD tools) and their configurations. -- Testing workload updates in a staging environment before deploying to production. +- Testing workload updates in a staging environment before production deployment. - Ensuring workload compatibility with cluster components. -**Recommendations:** +**Recommendation:** -- Schedule application deployments outside maintenance windows to avoid conflicts with automatic cluster updates. +- Schedule application deployments outside of maintenance windows to avoid conflicts with automatic cluster updates. - Monitor **Cloud Temple** communications regarding major updates to plan necessary adjustments. -- Follow upcoming updates via the [**Product Roadmap**](https://github.com/orgs/Cloud-Temple/projects/2) -- Subscribe to [**incident notifications**](../../console/status.md#notification-management) +- Track upcoming updates via the [**Product Roadmap**](https://github.com/orgs/Cloud-Temple/projects/2) +- Subscribe to [**incident**](../../console/status.md#gestion-des-notifications) notifications -### Monitoring and Supervision +--- -**Cloud Temple Responsibility:** +### Supervision and monitoring -- Monitoring and supervision of the infrastructure and underlying services deployed by **Cloud Temple**. +**Responsibility of **Cloud Temple** :** + +- Supervision and monitoring of the infrastructure and underlying services deployed by **Cloud Temple**. **User Responsibility:** -- Monitoring and supervision of your workloads. +- Supervision and monitoring of their workloads. **Recommendation:** -Use the **native tools provided**: - -- Performance log and event analysis via the OpenShift console. -- Custom alert configuration based on cluster and pod metrics through the user interface. +Use the **provided native tools:** -Set critical alert thresholds: +- Analyze performance logs and events via the OpenShift console. +- Configure custom alerts based on cluster and pod metrics via the user interface. + +Configure critical alert thresholds: -- **Pod CPU/Memory usage**: ≥ 80%. -- **Disk space on persistent volumes**: ≥ 85%. -- **Pod startup failures**: more than X occurrences within 10 minutes. +- **Pod CPU/Memory**: ≥ 80 %. +- **Disk space on persistent volumes**: ≥ 85 %. +- **Pod startup failures**: more than X occurrences in 10 minutes. + +Automate alert escalation to your management tools for rapid response. -Automatically escalate alerts to your incident management tools for rapid response. +--- ### Backups and Restoration -Critical cluster components are automatically backed up by **Cloud Temple**. User workloads and data require dedicated management. +Critical cluster components are automatically backed up by **Cloud Temple**. Workloads and user data require dedicated management. **Cloud Temple Responsibility:** @@ -68,48 +77,50 @@ Critical cluster components are automatically backed up by **Cloud Temple**. Use **User Responsibility:** -- Back up critical workload data using solutions such as **Kasten**, available in the **Cloud Temple** catalog. +- Back up critical workload data using solutions such as the **Kasten** offering available in the **Cloud Temple** catalog. **Recommendation:** - Implement regular backup policies: - - Automatic backups of Persistent Volumes (PVs) using Kasten. - - Daily backups of Kubernetes configurations, secrets, and YAML deployments. -- Regularly test restorations to validate RPO. + - Automatic PV backups with Kasten. + - Daily backup of Kubernetes configurations, secrets, and YAML deployments. +- Regularly test restores to validate RPOs. -## Safety Condition Maintenance (SCM) +--- -### Secret and Configuration Management +## Security Maintenance (MCS) -Use OpenShift/Kubernetes secrets and recommend integrating centralized secret management systems. +### Secret and Configuration Management -**Cloud Temple Responsibility:** +Use of OpenShift/Kubernetes secrets and recommendation to integrate centralized secret management systems. -- Management of secrets and configuration for the infrastructure and underlying services supporting the offering is the responsibility of **Cloud Temple**. +**Responsibility **Cloud Temple** :** -**Customer Responsibility:** +- Managing the secrets and configuration of the infrastructure and underlying services for the offering is the responsibility of **Cloud Temple**. -- Management of secrets and configuration for the **Customer**'s workloads is the responsibility of the **Customer**. +**User Responsibility:** +- Managing the secrets and configuration of the **Client**'s workloads is the responsibility of the **Client**. + **Recommendation:** -- Do not store secrets in plain text within YAML files. +- Do not store secrets in plaintext in YAML files. - Use tools to encrypt sensitive information. ### Access Control (IAM) -Access reviews are performed through the Console and the "User Management" module within the OpenShift console. +Access reviews are performed via the Console and the "User Management" module of the OpenShift console. -For more details on this feature, refer to our [**guide**](../../console/iam/iam.md) and the [**documentation**](https://docs.redhat.com/en/documentation/openshift_container_platform/) provided by the vendor. +For more details on this feature, refer to our [**guide**](../../console/iam/iam.md) and the vendor's [**documentation**](https://docs.redhat.com/en/documentation/openshift_container_platform/). -**Responsibility of Cloud Temple:** +**Cloud Temple Responsibility:** - **Cloud Temple** is responsible for managing service and administrative accounts. -- **Cloud Temple** is responsible for integrating with the **Cloud Temple** identity system to manage access. -- **Cloud Temple** is responsible for the default setup of **RBAC** configuration and initial user permission restrictions. -- **Cloud Temple** is responsible for providing and maintaining the **multi-factor authentication** system to strengthen access security. - -**Responsibility of the User:** +- **Cloud Temple** is responsible for integration with the **Cloud Temple** identity system to manage access. +- **Cloud Temple** is responsible for the default setup of the **RBAC** configuration and initial user permission restrictions. +- **Cloud Temple** is responsible for providing and maintaining the **two-factor authentication** system to strengthen access. + +**User Responsibility:** - The **Client** must regularly review user access. - The **Client** is responsible for granting access to its users and onboarding them into the tenant. @@ -117,87 +128,91 @@ For more details on this feature, refer to our [**guide**](../../console/iam/iam ### Vulnerability Management -Vulnerabilities on the infrastructure and underlying services supporting the offering will be communicated through the incident module. +Vulnerabilities in the infrastructure and underlying services of the offering will be communicated via the incident module. -**Cloud Temple Responsibility:** +**Responsibility **Cloud Temple** :** -- **Cloud Temple** is responsible for communicating vulnerabilities on the infrastructure and underlying services as soon as they are detected, via the [**incident**](../../console/status.md) module in the Console. +- **Cloud Temple** is responsible for communicating vulnerabilities in the infrastructure and underlying services of the offering upon detection via the [**incident**](../../console/status.md) module of the Console. - **Cloud Temple** is responsible for applying patches within this scope. -- **Cloud Temple** is responsible for providing tools to analyze vulnerabilities in Docker images. By default, **Cloud Temple** deploys **[Quay]** to perform automated scanning of Docker images. +- **Cloud Temple** is responsible for providing tools to analyze Docker image vulnerabilities. By default, **Cloud Temple** implements **[Quay]** to perform automatic scanning of Docker images. -**Customer Responsibility:** +**User Responsibility:** -- The **Customer** is responsible for detecting and remedying vulnerabilities within their workloads. -- The **Customer** is responsible for updating their workloads to enable the prompt application of security patches. +- The **Client** is responsible for detecting and remediating vulnerabilities in its workloads. +- The **Client** is responsible for upgrading its workloads to enable the application of security patches as quickly as possible. **Recommendation:** -- Use the cluster alerting provided by **[Quay]** to analyze vulnerabilities and detect anomalous behaviors in the images used by the **Customer**. -- Subscribe to notifications from [**incidents**](../../console/status.md#notification-management). +- Use the cluster alerting provided by **[Quay]** to analyze vulnerabilities and detect abnormal behavior in images used by the **Client**. +- Subscribe to [**incident**](../../console/status.md#gestion-des-notifications) notifications. ### Encryption -Guaranteed native encryption on the **Cloud Temple** infrastructure, with recommendations for workloads. +Guarantee of native encryption on the **Cloud Temple** infrastructure, with recommendations for workloads. -**Cloud Temple Responsibility:** +**Responsibility of **Cloud Temple** :** - Redundancy mechanisms within the infrastructure. - Automatic backups of cluster configurations. -**User Responsibility:** +**User Responsibility :** - Back up critical workload data using solutions such as the **Kasten** offering available in the **Cloud Temple** catalog. -- Ensure workloads use resilience mechanisms and adjust deployments accordingly. +- Ensure that workloads utilize resilience mechanisms and adapt deployments to implement them. -**Recommendation:** +**Recommendation :** - Enable **TLS encryption** for all intra-pod communications. - Enable **TLS encryption** for all communications between **Cloud Temple** PaaS and IaaS offerings. -- Ensure data-at-rest encryption via **Cloud Temple** storage solutions. +- Ensure data at rest encryption via **Cloud Temple** storage solutions. -### Logging and Auditing +### Logging and Audit -Automatic recording of critical cluster events. +Automatic logging of critical cluster events. **Cloud Temple Responsibility:** -- **Cloud Temple** is responsible for logging and auditing the infrastructure and underlying services supporting the offering. +- **Cloud Temple** is responsible for logging and auditing the infrastructure and underlying services of the offering. **User Responsibility:** -- The **Customer** is responsible for logging and auditing their workloads. - +- The **Client** is responsible for logging and auditing their workloads. + **Recommendation:** -- Set up pipelines to centralize and analyze your workload logs: - - Use log collectors for aggregation, combined with a visualization tool. +- Configure pipelines to centralize and analyze your workload logs: + - Use collectors for log aggregation, along with a visualization tool. - Integrate logs into your **SIEM** (recommended). -## Incident Management and Business Continuity Plan (BCP) +--- + +## Incident Management and BCP (Business Continuity Plan) **Cloud Temple Responsibility:** - **Cloud Temple** is responsible for redundancy mechanisms within the infrastructure. -- **Cloud Temple** is responsible for automated backups of cluster configurations. -- **Cloud Temple** is responsible for resuming operations after an incident affecting the infrastructure or underlying services supporting the offering. +- **Cloud Temple** is responsible for automatic backups of cluster configurations. +- **Cloud Temple** is responsible for post-incident recovery on the infrastructure or on the services underlying the offering. -**Customer Responsibility:** +**User Responsibility:** -- The **Customer** is responsible for backing up critical workload data using solutions such as the **Kasten** offering available in the **Cloud Temple** catalog. -- The **Customer** must ensure that workloads leverage resilience mechanisms and must adapt their deployments accordingly. -- The **Customer** is responsible for the Business Impact Analysis (BIA) and Business Continuity Plan (BCP) of their workloads. +- The **Client** is responsible for backing up critical workload data using solutions such as the **Kasten** offering available in the **Cloud Temple** catalog. +- The **Client** must ensure that workloads utilize resilience mechanisms and must adapt their deployments to implement them. +- The **Client** is responsible for the DRP/BCP of their workloads. **"Disaster Recovery" Procedure** -- In case of complete loss of access to a cluster, the **Customer** must report an incident to **Cloud Temple** support via the support module in the console. -See the [**technical support request procedure**](../../console/console_quickstart.md#technical-support-access) +- In the event of complete loss of access to a cluster, the **Client** must report an incident to **Cloud Temple** support via the support module in the console. +See the [**technical support request procedure**](../../console/console_quickstart.md#accès-au-support-technique) + +--- ## General Recommendations -1. **Plan resources**: Ensure sufficient cluster capacity for peak workloads. -2. **Validate configurations**: Test applications in staging environments before deploying to production. -3. **Monitor regularly**: Use built-in tools to track resource usage and detect issues as early as possible. -4. **Stay informed**: Follow the roadmap and guides to avoid deprecated features. -5. **Contact support**: For unresolved issues, contact support via the [**technical support request procedure**](../../console/console_quickstart.md#technical-support-access) or by email at [**contact**](mailto:contact@cloud-temple.com). +1. **Plan resources** : Ensure sufficient cluster capacity for peak workloads. +2. **Validate configurations** : Test applications in staging environments before production deployment. +3. **Monitor regularly** : Use built-in tools to track resource usage and detect issues as early as possible. +4. **Stay informed** : Follow the roadmap and guides to avoid deprecated features. +5. **Contact support** : For unresolved issues, contact support via the [**technical support request procedure**](../../console/console_quickstart.md#accès-au-support-technique) or by email at [**contact**](mailto:contact@cloud-temple.com). -For detailed responsibilities, please review our [**responsibility matrix**](../../contractual/paas/raci.md). +To review responsibilities in detail, please refer to our [**responsibility matrix**](../../contractual/paas/raci.md). \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/contractual/paas/raci.md b/i18n/en/docusaurus-plugin-content-docs/current/contractual/paas/raci.md index d40c87ff..5331bc18 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/contractual/paas/raci.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/contractual/paas/raci.md @@ -1,146 +1,148 @@ --- -title: Matrice de responsabilité PaaS - OpenShift SecNumCloud +title: PaaS Responsibility Matrix - OpenShift SecNumCloud +displayed_sidebar: docSidebar --- -Voici le modèle RACI définissant la répartition des responsabilités entre le client et Cloud Temple pour l'utilisation du PaaS OpenShift SecNumCloud. -## Définition des différents rôles +Here is the RACI model defining the allocation of responsibilities between the client and Cloud Temple for the use of the OpenShift SecNumCloud PaaS. -Nous rappelons ici les différents rôles du RACI : +## Definition of the different roles -| Rôle | Description | +Here is a reminder of the different RACI roles: + +| Role | Description | | ------------ | ------------------------------------------------------------------------------------- | -| (R) Réalise | __R__éalise le processus | -| (A) Approuve | __A__pprouve la réalisation du processus | -| (C) Consulte | __C__onsulté pendant le processus | -| (I) Informé | __I__nformé des résultats du processus (via l'outillage, le portail ou la messagerie) | +| (R) Responsible | __R__esponsible for executing the process | +| (A) Accountable | __A__ccountable for approving the process execution | +| (C) Consulted | __C__onsulted during the process | +| (I) Informed | __I__nformed of the process results (via tooling, the portal, or messaging) | -## Mise en place initiale +## Initial Setup -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | -------------------------------------------------------------------- | ----------- | ----------------- | -| Définir l'architecture globale de la plateforme OpenShift | C | RA | -| Dimensionner la plateforme OpenShift (nombre de nœuds, ressources) | C | RA | -| Installer et configurer la plateforme OpenShift | I | RA | -| Configurer le réseau de base de la plateforme OpenShift | I | RA | -| Mettre en place la gestion des identités et des accès pour OpenShift | C | RA | -| Définir la stratégie de mise à l'échelle et de haute disponibilité | C | RA | +| Define the overall OpenShift platform architecture | C | RA | +| Size the OpenShift platform (number of nodes, resources) | C | RA | +| Install and configure the OpenShift platform | I | RA | +| Configure the base network for the OpenShift platform | I | RA | +| Set up identity and access management for OpenShift | C | RA | +| Define the scaling and high availability strategy | C | RA | -## Gestion des projets et des applications +## Project and Application Management -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | ------------------------------------------------- | ----------- | ----------------- | -| Créer et gérer les projets OpenShift | RA | C | -| Déployer et gérer les applications dans OpenShift | RA | C | -| Configurer les pipelines CI/CD | RA | C | -| Gérer les images de conteneurs et les registres | RA | C | +| Create and manage OpenShift projects | RA | C | +| Deploy and manage applications in OpenShift | RA | C | +| Configure CI/CD pipelines | RA | C | +| Manage container images and registries | RA | C | -## Maintenance et mises à jour +## Maintenance and Updates -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | ------------------------------------------------ | ----------- | ----------------- | -| Mettre à jour la plateforme OpenShift | I | RA | -| Appliquer les correctifs de sécurité à OpenShift | I | RA | -| Mettre à jour les applications déployées | RA | I | -| Gérer les mises à jour des images de conteneurs | RA | I | +| Update the OpenShift platform | I | RA | +| Apply security patches to OpenShift | I | RA | +| Update deployed applications | RA | I | +| Manage container image updates | RA | I | -## Surveillance et performance +## Monitoring and Performance -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | ---------------------------------------------------- | ----------- | ----------------- | -| Surveiller la performance de la plateforme OpenShift | I | RA | -| Surveiller la performance des applications | RA | I | -| Gérer les alertes liées à la plateforme | I | RA | -| Gérer les alertes liées aux applications | RA | I | +| Monitor OpenShift platform performance | I | RA | +| Monitor application performance | RA | I | +| Manage platform-related alerts | I | RA | +| Manage application-related alerts | RA | I | -## Sécurité +## Security -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | ------------------------------------------------------------------ | ----------- | ----------------- | -| Gérer la sécurité de la plateforme OpenShift | I | RA | -| Configurer et gérer les politiques de sécurité des pods | RA | C | -| Gérer les certificats SSL/TLS pour la plateforme | I | RA | -| Gérer les certificats SSL/TLS pour les applications | RA | C | -| Implémenter et gérer le contrôle d'accès basé sur les rôles (RBAC) | C | RA | +| Manage OpenShift platform security | I | RA | +| Configure and manage pod security policies | RA | C | +| Manage SSL/TLS certificates for the platform | I | RA | +| Manage SSL/TLS certificates for applications | RA | C | +| Implement and manage role-based access control (RBAC) | C | RA | -## Sauvegarde et reprise après sinistre +## Backup and Disaster Recovery -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | --------------------------------------------------------------------- | ----------- | ----------------- | -| Définir la stratégie de sauvegarde pour la plateforme OpenShift | C | RA | -| Mettre en œuvre et gérer les sauvegardes de la plateforme | I | RA | -| Définir la stratégie de sauvegarde pour les applications | RA | C | -| Mettre en œuvre et gérer les sauvegardes des applications | RA | I | -| Tester les procédures de reprise après sinistre pour la plateforme | I | RA | -| Tester les procédures de reprise après sinistre pour les applications | RA | C | +| Define the backup strategy for the OpenShift platform | C | RA | +| Implement and manage platform backups | I | RA | +| Define the backup strategy for applications | RA | C | +| Implement and manage application backups | RA | I | +| Test disaster recovery procedures for the platform | I | RA | +| Test disaster recovery procedures for applications | RA | C | -## Support et résolution des problèmes +## Support and Troubleshooting -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | ---------------------------------------------------------------- | ----------- | ----------------- | -| Fournir un support de niveau 1 pour la plateforme OpenShift | I | RA | -| Fournir un support de niveau 2 et 3 pour la plateforme OpenShift | I | RA | -| Résoudre les problèmes liés à la plateforme | I | RA | -| Résoudre les problèmes liés aux applications | RA | C | +| Provide Level 1 support for the OpenShift platform | I | RA | +| Provide Level 2 and 3 support for the OpenShift platform | I | RA | +| Resolve platform-related issues | I | RA | +| Resolve application-related issues | RA | C | -## Gestion des capacités et évolution +## Capacity Management and Evolution -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | -------------------------------------------------------- | ----------- | ----------------- | -| Surveiller l'utilisation des ressources de la plateforme | I | RA | -| Planifier l'évolution des capacités de la plateforme | C | RA | -| Implémenter les changements de capacité | I | RA | -| Gérer l'évolution des applications et leurs ressources | RA | C | +| Monitor platform resource usage | I | RA | +| Plan platform capacity evolution | C | RA | +| Implement capacity changes | I | RA | +| Manage application evolution and their resources | RA | C | -## Documentation et conformité +## Documentation and compliance -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | ------------------------------------------------------------- | ----------- | ----------------- | -| Maintenir la documentation de la plateforme OpenShift | I | RA | -| Maintenir la documentation des applications | RA | I | -| Assurer la conformité de la plateforme aux normes de sécurité | I | RA | -| Assurer la conformité des applications aux normes de sécurité | RA | C | -| Réaliser des audits de la plateforme | I | RA | -| Réaliser des audits des applications | RA | C | +| Maintain OpenShift platform documentation | I | RA | +| Maintain application documentation | RA | I | +| Ensure platform compliance with security standards | I | RA | +| Ensure application compliance with security standards | RA | C | +| Conduct platform audits | I | RA | +| Conduct application audits | RA | C | -### Gestion des opérateurs OpenShift +### OpenShift Operator Management -Les **opérateurs OpenShift** sont des extensions de la plateforme qui automatisent la gestion d'applications ou de services complexes sur Kubernetes. +**OpenShift operators** are platform extensions that automate the management of complex applications or services on Kubernetes. -Seuls les **Opérateurs** provenant des catalogues **Certifiés, Red Hat et MarketPlace** seront proposés sous réserve qu'ils soient **conformes aux exigences SecNumCloud** et qu'ils respectent les limitations de l'écosystème. +Only **Operators** from the **Certified, Red Hat, and Marketplace** catalogs will be offered, provided they are **compliant with SecNumCloud requirements** and adhere to ecosystem limitations. -L’installation, la surveillance et la gestion des mises à jour de ces opérateurs sont gérées par **Cloud Temple**, tandis que le **Client** est responsable de l'utilisation de ces opérateurs pour gérer ses charges de travail. +The installation, monitoring, and update management of these operators are handled by **Cloud Temple**, while the **Client** is responsible for using these operators to manage their workloads. -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | --------------------------------------------------------------- | ----------- | ----------------- | -| Mise à disposition des opérateurs dans le catalogue | CI | RA | -| Configuration initiale des Opérateurs via la Marketplace | CI | RA | -| Mise à jour des Opérateurs | I | RA | -| Surveillance de l’état des Opérateurs | I | RA | -| Résolution des problèmes liés aux Opérateurs | CI | RA | -| Gestion des autorisations des Opérateurs | C | RA | -| Gestion des ressources des Opérateurs (ajout/suppression) | CI | RA | -| Sauvegarde des données des ressources des Opérateurs | CI | RA | -| Supervision et monitoring des ressources Opérateurs | CI | RA | -| Restauration des données des ressources des Opérateurs | CI | RA | -| Audit de sécurité des Opérateurs | I | RA | -| Support des Opérateurs Red Hat | I | RA | -| Support des Opérateurs Certifiés | I | RA | -| Support des Opérateurs MarketPlace | I | RA | -| Gestion des licences et contrats de licenses sur les opérateurs | RA | I | -| Gestion des plans de supports spécifiques sur les opérateurs | RA | I | - -> **Note importante** : -> Seuls les opérateurs **déclaré supportés** par Cloud Temple et conformes à **SecNumCloud** sont mis à disposition. Tout opérateur non certifié ou provenant d’une source externe ne sera pas pris en charge ni validé pour être utilisé dans les environnements. -> La gestion des **licences** et des **plans de supports spécifiques** sur les opérateurs issue du catalogue **MarketPlace Red Hat** ne sont pas de la responsabilité de **Cloud Temple**. La gestion du support de ces opérateurs est déléguée défacto au partenaire fournissant le service. +| Operator provisioning in the catalog | CI | RA | +| Initial Operator configuration via the Marketplace | CI | RA | +| Operator updates | I | RA | +| Monitoring Operator status | I | RA | +| Operator issue resolution | CI | RA | +| Operator permissions management | C | RA | +| Operator resource management (add/remove) | CI | RA | +| Backup of Operator resource data | CI | RA | +| Supervision and monitoring of Operator resources | CI | RA | +| Restoration of Operator resource data | CI | RA | +| Operator security audit | I | RA | +| Red Hat Operators support | I | RA | +| Certified Operators support | I | RA | +| Marketplace Operators support | I | RA | +| License and license contract management for operators | RA | I | +| Specific support plan management for operators | RA | I | + +> **Important note** : +> Only operators **declared supported** by Cloud Temple and compliant with **SecNumCloud** are made available. Any uncertified operator or one from an external source will not be supported or validated for use in the environments. +> The management of **licenses** and **specific support plans** for operators from the **Red Hat Marketplace** catalog is not the responsibility of **Cloud Temple**. Support management for these operators is de facto delegated to the partner providing the service. --- -### Clarification sur l'assistance applicative +### Clarification on Application Support -**Assistance applicative (prestation complémentaire) :** +**Application Support (supplementary service):** -L'assistance applicative concernant le développement, la configuration, la gestion et la maintenance des applications **n'est pas sous la responsabilité de Cloud Temple**. Le périmètre se concentre uniquement sur la gestion de l'infrastructure OpenShift et des opérateurs. Le **support des charges de travail** (applications déployées) et des pipelines CI/CD sont de la responsabilité du client ou de tout prestataire tiers désigné pour cette tâche. +Application support regarding the development, configuration, management, and maintenance of applications **is not the responsibility of Cloud Temple**. The scope focuses solely on managing the OpenShift infrastructure and operators. **Workload support** (deployed applications) and CI/CD pipelines are the responsibility of the client or any designated third-party provider for this task. -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | --- | --- | --- | -| Assistance applicative (prestation complémentaire) | RA | C | +| Application Support (supplementary service) | RA | C | \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/contractual/paas/raci_ocp_std.md b/i18n/en/docusaurus-plugin-content-docs/current/contractual/paas/raci_ocp_std.md index 514809b5..7af637fd 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/contractual/paas/raci_ocp_std.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/contractual/paas/raci_ocp_std.md @@ -1,145 +1,148 @@ --- -title: Matrice de responsabilité - OpenShift Standard +title: Responsibility Matrix - OpenShift Standard +slug: /contractual/paas/raci-ocp-standard +displayed_sidebar: docSidebar --- -Voici le modèle RACI définissant la répartition des responsabilités entre le client et Cloud Temple pour l'utilisation de l'offre **OpenShift Standard**. -### Définition des différents rôles +Here is the RACI model defining the allocation of responsibilities between the client and Cloud Temple for the use of the **OpenShift Standard** service. -Nous rappelons ici les différents rôles du RACI : +### Definition of the different roles -| Rôle | Description | +We recall here the different RACI roles: + +| Role | Description | | ------------ | ------------------------------------------------------------------------------------- | -| (R) Réalise | __R__éalise le processus | -| (A) Approuve | __A__pprouve la réalisation du processus | -| (C) Consulte | __C__onsulté pendant le processus | -| (I) Informé | __I__nformé des résultats du processus (via l'outillage, le portail ou la messagerie) | - -### Mise en place initiale - -| Activité | Rôle Client | Rôle Cloud Temple | -| ---------------------------------------------------------------------------------------- | ----------- | ----------------- | -| Définir l'architecture globale du service OpenShift | C | RA | -| Dimensionner le service OpenShift (nombre de nœuds, ressources) | C | RA | -| Installer le service OpenShift avec une configuration par défaut | I | RA | -| Configuration du service OpenShift | RA | C | -| Configurer le réseau de base du service OpenShift | I | RA | -| Déploiement de la configuration initiale des identités et des accès pour OpenShift | C | RA | -| Définir la stratégie de mise à l'échelle et de haute disponibilité sur l'infrastructure | C | RA | - -### Gestion des projets et des applications - -| Activité | Rôle Client | Rôle Cloud Temple | +| (R) Responsible | __R__esponsible for executing the process | +| (A) Accountable | __A__ccountable for approving the process execution | +| (C) Consulted | __C__onsulted during the process | +| (I) Informed | __I__nformed of the process results (via tooling, the portal, or messaging) | + +### Initial Setup + +| Activity | Client Role | Cloud Temple Role | +| --- | --- | --- | +| Define the overall OpenShift service architecture | C | RA | +| Size the OpenShift service (number of nodes, resources) | C | RA | +| Install the OpenShift service with default configuration | I | RA | +| OpenShift service configuration | RA | C | +| Configure the base network for the OpenShift service | I | RA | +| Deploy the initial identity and access configuration for OpenShift | C | RA | +| Define the scaling and high availability strategy on the infrastructure | C | RA | + +### Project and Application Management + +| Activity | Client Role | Cloud Temple Role | | ------------------------------------------------- | ----------- | ----------------- | -| Créer et gérer les projets OpenShift | RA | C | -| Déployer et gérer les applications dans OpenShift | RA | C | -| Configurer les pipelines CI/CD | RA | C | -| Gérer les images de conteneurs et les registres | RA | C | +| Create and manage OpenShift projects | RA | C | +| Deploy and manage applications in OpenShift | RA | C | +| Configure CI/CD pipelines | RA | C | +| Manage container images and registries | RA | C | -### Maintenance et mises à jour +### Maintenance and Updates -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | ------------------------------------------------ | ----------- | ----------------- | -| Mettre à jour le service OpenShift | RA | I | -| Appliquer les correctifs de sécurité à OpenShift | RA | I | -| Mettre à jour les applications déployées | RA | I | -| Gérer les mises à jour des images de conteneurs | RA | I | +| Update the OpenShift service | RA | I | +| Apply security patches to OpenShift | RA | I | +| Update deployed applications | RA | I | +| Manage container image updates | RA | I | -### Surveillance et performance +### Monitoring and Performance -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | ---------------------------------------------------- | ----------- | ----------------- | -| Surveiller la performance du service OpenShift | RA | I | -| Surveiller la performance des applications | RA | I | -| Gérer les alertes liées au service OpenShift | RA | I | -| Gérer les alertes liées aux applications | RA | I | +| Monitor OpenShift service performance | RA | I | +| Monitor application performance | RA | I | +| Manage OpenShift service alerts | RA | I | +| Manage application alerts | RA | I | -### Sécurité +### Security -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | ------------------------------------------------------------------ | ----------- | ----------------- | -| Gérer la sécurité du service OpenShift | RA | I | -| Configurer et gérer les politiques de sécurité des pods | RA | C | -| Gérer les certificats SSL/TLS pour le service OpenShift | RA | I | -| Gérer les certificats SSL/TLS pour les applications | RA | C | -| Implémenter et gérer le contrôle d'accès basé sur les rôles (RBAC) | RA | I | +| Manage OpenShift service security | RA | I | +| Configure and manage pod security policies | RA | C | +| Manage SSL/TLS certificates for the OpenShift service | RA | I | +| Manage SSL/TLS certificates for applications | RA | C | +| Implement and manage role-based access control (RBAC) | RA | I | -### Sauvegarde et reprise après sinistre +### Backup and Disaster Recovery -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | --------------------------------------------------------------------- | ----------- | ----------------- | -| Définir la stratégie de sauvegarde pour le service OpenShift | RA | CI | -| Mettre en œuvre et gérer les sauvegardes du service OpenShift | RA | CI | -| Définir la stratégie de sauvegarde pour les applications | RA | CI | -| Mettre en œuvre et gérer les sauvegardes des applications | RA | CI | -| Tester les procédures de reprise après sinistre pour le service | RA | CI | -| Tester les procédures de reprise après sinistre pour les applications | RA | CI | +| Define the backup strategy for the OpenShift service | RA | CI | +| Implement and manage backups for the OpenShift service | RA | CI | +| Define the backup strategy for the applications | RA | CI | +| Implement and manage backups for the applications | RA | CI | +| Test disaster recovery procedures for the service | RA | CI | +| Test disaster recovery procedures for the applications | RA | CI | -### Support et résolution des problèmes +### Support and Issue Resolution -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | ---------------------------------------------------------------- | ----------- | ----------------- | -| Fournir un support de niveau 1 pour l'infrastructure | I | RA | -| Fournir un support de niveau 2 et 3 pour l'infrastructure | I | RA | -| Résoudre les problèmes liés au service OpenShift | RA | C | -| Résoudre les problèmes liés aux applications | RA | C | +| Provide Level 1 support for infrastructure | I | RA | +| Provide Level 2 and 3 support for infrastructure | I | RA | +| Resolve OpenShift service issues | RA | C | +| Resolve application issues | RA | C | -### Gestion des capacités et évolution +### Capacity Management and Evolution -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | ------------------------------------------------------------ | ----------- | ----------------- | -| Surveiller l'utilisation des ressources du service OpenShift | RA | C | -| Planifier l'évolution des capacités du service | RA | C | -| Implémenter les changements de capacité | I | RA | -| Gérer l'évolution des applications et leurs ressources | RA | C | +| Monitor OpenShift service resource usage | RA | C | +| Plan service capacity evolution | RA | C | +| Implement capacity changes | I | RA | +| Manage application and resource evolution | RA | C | -### Documentation et conformité +### Documentation and Compliance -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | ----------------------------------------------------------------- | ----------- | ----------------- | -| Maintenir la documentation du service OpenShift | I | RA | -| Maintenir la documentation des applications | RA | I | -| Assurer la conformité du service OpenShift aux normes de sécurité | RA | C | -| Assurer la conformité des applications aux normes de sécurité | RA | C | -| Réaliser des audits du service OpenShift | RA | C | -| Réaliser des audits des applications | RA | C | +| Maintain OpenShift service documentation | I | RA | +| Maintain application documentation | RA | I | +| Ensure OpenShift service compliance with security standards | RA | C | +| Ensure application compliance with security standards | RA | C | +| Conduct OpenShift service audits | RA | C | +| Conduct application audits | RA | C | -### Gestion des opérateurs OpenShift +### OpenShift Operators Management -Les **opérateurs OpenShift** sont des extensions du service qui automatisent la gestion d'applications ou de services complexes sur Kubernetes/OpenShift. +**OpenShift operators** are service extensions that automate the management of complex applications or services on Kubernetes/OpenShift. -Dans le cadre du service **OpenShift Standard**, aucune limitation sur les opérateurs n'est appliquée. Seul la mise à disposition de la fonctionnalité **OperatorHub** est assurée par **Cloud Temple**. Les opérateurs sont mis à disposition via le catalogue de la marketplace Red Hat. L’installation, la surveillance et la gestion des mises à jour de ces opérateurs sont gérés par le **Client**. -Le **Client** est responsable de l'utilisation de ces opérateurs pour gérer ses charges de travail. +Under the **OpenShift Standard** service, no limitations on operators are enforced. Only the provision of the **OperatorHub** feature is ensured by **Cloud Temple**. Operators are made available via the Red Hat Marketplace catalog. The installation, monitoring, and management of updates for these operators are handled by the **Client**. +The **Client** is responsible for using these operators to manage their workloads. -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | ----------------------------------------------------------------- | ----------- | ----------------- | -| Mise à disposition du catalogue d'Opérateurs par défaut | CI | RA | -| Mise à jour des Opérateurs | RA | CI | -| Surveillance de l’état des Opérateurs | RA | CI | -| Résolution des problèmes liés aux Opérateurs | RA | CI | -| Gestion des autorisations des Opérateurs | RA | CI | -| Gestion des ressources des Opérateurs (ajout/suppression) | RA | CI | -| Sauvegarde des données des ressources des Opérateurs | RA | CI | -| Supervision et monitoring des ressources Opérateurs | RA | CI | -| Restauration des données des ressources des Opérateurs | RA | CI | -| Audit de sécurité des Opérateurs | RA | CI | -| Support des Opérateurs | RA | CI | -| Gestion des licences et contrats de licenses sur les opérateurs | RA | I | -| Gestion des plans de supports spécifiques sur les opérateurs | RA | I | - -> **Note importante** : +| Provisioning of the default Operators catalog | CI | RA | +| Operators updates | RA | CI | +| Monitoring Operators status | RA | CI | +| Troubleshooting Operators issues | RA | CI | +| Managing Operators permissions | RA | CI | +| Managing Operators resources (ajout/suppression) | RA | CI | +| Backing up Operators resources data | RA | CI | +| Supervision and monitoring of Operators resources | RA | CI | +| Restoring Operators resources data | RA | CI | +| Operators security audit | RA | CI | +| Operators support | RA | CI | +| Managing licenses and license contracts for operators | RA | I | +| Managing specific support plans for operators | RA | I | + +> **Important note** : > -> - Tout **dommage** entraîné par l'installation d'un **opérateur** ou issu d'une **opération du client** est de la responsabilité du **Client**. -> - La gestion des **licences** et des **plans de supports spécifiques** sur les opérateurs ne sont pas de la responsabilité de **Cloud Temple**. +> - Any **damage** caused by the installation of an **operator** or resulting from a **client operation** is the responsibility of the **Client**. +> - The management of **licenses** and **specific support plans** for operators is not the responsibility of **Cloud Temple**. --- -### Clarification sur l'assistance applicative +### Clarification on Application Support -**Assistance applicative (prestation complémentaire) :** +**Application Support (Complementary Service) :** -L'assistance applicative concernant le développement, la configuration, la gestion et la maintenance des applications **n'est pas sous la responsabilité de Cloud Temple**. Le périmètre se concentre uniquement sur la gestion de **l'infrastructure sous-jacente au service OpenShift**. Le **support des charges de travail**, **la gestion du cluster jusqu'au système d'exploitation**, **la gestion des opérateurs** et les **pipelines CI/CD** sont de la **responsabilité du client** ou de tout **prestataire tiers désigné** pour cette tâche. +Application support regarding the development, configuration, management, and maintenance of applications **is not the responsibility of Cloud Temple**. The scope focuses solely on the management of **the underlying infrastructure for the OpenShift service**. **Workload support**, **cluster management down to the operating system**, **operator management**, and **CI/CD pipelines** are the **responsibility of the client** or any **designated third-party provider** for this task. -| Activité | Rôle Client | Rôle Cloud Temple | +| Activity | Client Role | Cloud Temple Role | | -------------------------------------------------- | ----------- | ----------------- | -| Assistance applicative (prestation complémentaire) | RA | C | +| Application Support (Complementary Service) | RA | C | \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/contractual/shared-responsibility.md b/i18n/en/docusaurus-plugin-content-docs/current/contractual/shared-responsibility.md index 8b2a287a..cf960748 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/contractual/shared-responsibility.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/contractual/shared-responsibility.md @@ -7,7 +7,7 @@ displayed_sidebar: docSidebar # Shared Responsibility Model -Cloud Temple operates according to a model of **shared responsibility** between the provider and the client. These RACI matrices (*Responsible, Accountable, Consulted, Informed*) precisely define who does what for each service. +Cloud Temple operates under a **shared responsibility** model between the provider and the customer. These RACI matrices (*Responsible, Accountable, Consulted, Informed*) precisely define who does what for each service. --- @@ -16,19 +16,19 @@ Cloud Temple operates according to a model of **shared responsibility** between
RACI IaaS (VMware & Open IaaS)
-
Responsibility breakdown for VMware and OpenStack IaaS infrastructure services.
+
Allocation of responsibilities for VMware and OpenStack IaaS infrastructure services.
View document →
--- -## VM Instances +## VM instances
-
Responsibility Model — VM Instances
-
Responsibility breakdown for the shared virtual machine service VM instances.
+
Responsibility Model — VM instances
+
Responsibility allocation for the shared VM instances service.
View document →
@@ -40,7 +40,7 @@ Cloud Temple operates according to a model of **shared responsibility** between
RACI Object Storage (S3)
-
Responsibility breakdown for the S3-compatible object storage service.
+
Responsibility assignment for the S3-compatible object storage service.
View document →
@@ -52,17 +52,17 @@ Cloud Temple operates according to a model of **shared responsibility** between
RACI PaaS OpenShift
-
Responsibility breakdown for the managed PaaS OpenShift platform.
+
Responsibility assignment for the managed OpenShift PaaS platform.
View document →
RACI PaaS OCP Standard
-
Responsibility breakdown for the OpenShift Container Platform Standard offering.
+
Responsibility assignment for the OpenShift Container Platform Standard offering.
View document →
MCO / MCS PaaS OpenShift
-
Policy for maintaining operational and security conditions of the PaaS platform.
+
Operational and security maintenance policy for the PaaS platform.
View document →
@@ -74,7 +74,7 @@ Cloud Temple operates according to a model of **shared responsibility** between
RACI Managed Kubernetes
-
Responsibility breakdown for the managed Kubernetes service.
+
Allocation of responsibilities for the managed Kubernetes service.
View document →
@@ -86,7 +86,7 @@ Cloud Temple operates according to a model of **shared responsibility** between
RACI LLMaaS
-
Responsibility breakdown for the LLM as a Service.
+
Responsibility allocation for the LLM as a Service.
View document →
@@ -98,12 +98,12 @@ Cloud Temple operates according to a model of **shared responsibility** between
RACI Network
-
Responsibility breakdown for Cloud Temple network services.
+
Responsibility allocation for Cloud Temple network services.
View document →
Responsibility Model — VPC
-
Responsibility breakdown for the managed Virtual Private Cloud (VPC) service.
+
Responsibility allocation for the managed Virtual Private Cloud (VPC) service.
View document →
-
+ \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/contractual/vm-instances/raci.md b/i18n/en/docusaurus-plugin-content-docs/current/contractual/vm-instances/raci.md index 69c72653..c646bf1e 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/contractual/vm-instances/raci.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/contractual/vm-instances/raci.md @@ -1,233 +1,235 @@ --- -title: Shared Responsibility Model — VM Instances +title: Shared Responsibility Model — VM instances slug: /contractual/vm-instances/raci --- -# Shared Responsibility Model — VM Instances +# Shared Responsibility Model — VM instances -This **RACI** model defines the distribution of responsibilities between the customer and Cloud Temple for the **VM Instances** service (shared virtual machines). +Here is the **RACI** model defining the allocation of responsibilities between the client and Cloud Temple for the use of the **VM instances** service (shared virtual machines). -> **VM Instances service specifics** -> Unlike the dedicated IaaS offering, the VM Instances service relies on a **shared and fully managed compute infrastructure by Cloud Temple**. Cloud Temple is responsible for the complete management of the hypervisor, system images, and infrastructure layer. The customer retains full responsibility for everything running inside their instances: guest operating system, applications, data, and application security. +> **VM instances offering specifics** +> Unlike the dedicated IaaS offering, the VM instances service relies on a computing infrastructure that is **shared and fully managed by Cloud Temple**. Cloud Temple handles the complete management of the hypervisor, system images, and the infrastructure layer. The client retains full responsibility for what runs inside their instances: guest operating system, applications, data, and application security. --- ## Role Definitions -| Role | Description | -|---------------|----------------------------------------------------------------------------------------------| -| (R) Responsible | __R__esponsible for performing the process | -| (A) Accountable | __A__ccountable for the successful completion of the process | -| (C) Consulted | __C__onsulted during the process | -| (I) Informed | __I__nformed of the results of the process (via tooling, portal, or messaging) | +| Role | Description | +|--------------|---------------------------------------------------------------------------------------| +| (R) Executes | __E__xecutes the process | +| (A) Approves | __A__pproves the execution of the process | +| (C) Consulted| __C__onsulted during the process | +| (I) Informed | __I__nformed of the process results (via tooling, the portal, or messaging) | --- ## Physical Infrastructure & Hypervisor -Cloud Temple is fully responsible for the infrastructure and hypervisor layer. The customer has no access to this layer. +Cloud Temple is fully responsible for the infrastructure and hypervisor layers. The client has no access to this layer. -| Activity | Customer | Cloud Temple | -|---------------------------------------------------------------------------------------------------|----------|--------------| -| Ensure implementation and maintenance of **physical datacenters** | | **RA** | -| Ensure implementation and maintenance of **shared compute** infrastructure | **I** | **RA** | -| Ensure implementation and maintenance of **storage** infrastructure | **I** | **RA** | -| Ensure implementation and maintenance of **backbone network** connectivity | **I** | **RA** | -| Manage, update, and maintain security of **hypervisors** *(1)* | **I** | **RA** | -| Ensure **high availability** of the hypervisor platform | **I** | **RA** | -| Manage incidents, problems, and capacity of infrastructure and hypervisor layers | **I** | **RA** | -| Acquire and maintain **licenses** essential to platform operation | | **RA** | +| Activity | Client | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|--------|--------------| +| Ensure the implementation and maintenance of **physical datacenters** | | **RA** | +| Ensure the implementation and maintenance of **shared compute infrastructure** | **I** | **RA** | +| Ensure the implementation and maintenance of **storage infrastructure** | **I** | **RA** | +| Ensure the implementation and maintenance of **backbone network connectivity** | **I** | **RA** | +| Manage, update, and maintain in a secure state the **hypervisors** *(1)* | **I** | **RA** | +| Ensure **high availability** of the hypervisor platform | **I** | **RA** | +| Manage incidents, issues, and capacity for the infrastructure and hypervisor layers | **I** | **RA** | +| Acquire and maintain the **licenses** essential for platform operation | | **RA** | -*(1) Hypervisors and the virtualization layer are entirely under Cloud Temple's responsibility. The customer has no access to the hypervisor or the underlying management layer.* +*(1) Hypervisors and the virtualization layer are entirely under the responsibility of Cloud Temple. The client has no access to the hypervisor or the underlying management layer.* --- -## Images, Templates & Catalogue +## Images, templates & catalog -| Activity | Customer | Cloud Temple | -|---------------------------------------------------------------------------------------------------|----------|--------------| -| Build, publish and maintain **official catalogue images** *(2)* | **I** | **RA** | -| Apply security patches and updates to **catalogue images** | | **RA** | -| Validate compliance and security of published catalogue images | | **RA** | -| **Derive** an official catalogue image to create a custom image *(3)* | **RA** | **I** | -| Ensure compliance, licensing and security of any derived custom image | **RA** | | -| Maintain and update derived custom images (OS patches, integrated tools) | **RA** | | +| Activity | Client | Cloud Temple | +|----------------------------------------------------------------------------------------------------------------|--------|--------------| +| Build, publish, and maintain the **official images** of the catalog *(2)* | **I** | **RA** | +| Apply security patches and updates to the **catalog images** | | **RA** | +| Validate the compliance and security of images published in the catalog | | **RA** | +| **Derive** an official catalog image to create a custom image *(3)* | **RA** | **I** | +| Ensure compliance, licenses, and security of any derived custom image | **RA** | | +| Maintain and update derived custom images (OS patches, built-in tools) | **RA** | | -*(2) Official catalogue images (Linux distributions, Windows Server, etc.) are built, maintained, and updated by Cloud Temple. Their initial security level is Cloud Temple's responsibility.* -*(3) The customer may derive an official catalogue image to create a custom image. From that point on, **full responsibility** for that image belongs to the customer: compliance, licensing, security updates, presence and update of tools, and hardening. Cloud Temple does not maintain derived images.* +*(2) The official catalog images (Linux distributions, Windows Server, etc.) are built, maintained, and updated by Cloud Temple. Their initial security level is the responsibility of Cloud Temple.* +*(3) The client can derive an official catalog image to create a custom image. From that point on, **full responsibility** for this image lies with them: compliance, licenses, security updates, presence and updating of tools, and hardening. Cloud Temple does not support the maintenance of these derived images.* --- -## Provisioning & Instance Lifecycle +## Instance Provisioning & Lifecycle -| Activity | Customer | Cloud Temple | -|---------------------------------------------------------------------------------------------------|----------|--------------| -| Create, start, stop, and delete **VM instances** | **RA** | **I** | -| Choose the flavor and starting image for the instance | **RA** | | -| Resize an instance (flavor change) *(4)* | **RA** | **I** | -| Manage **metadata and tags** associated with instances | **RA** | | -| Manage the **lifecycle** of instances (creation, modification, decommissioning) | **RA** | | -| Decide to add or reduce resources | **RA** | | +| Activity | Client | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|--------|--------------| +| Create, start, stop, and delete **VM instances** | **RA** | **I** | +| Choose the instance flavor and base image | **RA** | | +| Resize an instance (flavor change) *(4)* | **RA** | **I** | +| Manage **metadata and tags** associated with instances | **RA** | | +| Manage the **lifecycle** of instances (creation, modification, decommissioning) | **RA** | | +| Make the decision to add or reduce resources. | **RA** | | -*(4) Resizing may require an instance restart. The availability of the hosted application during this operation is the customer's responsibility.* +*(4) Resizing may require an instance restart. The availability of the hosted application during this operation is the client's responsibility. --- -## Guest Operating System & Tools +## Guest Operating System (Guest OS) & tools -The customer has full control and full responsibility for the operating system inside their instances. +The client has full control and full responsibility for the operating system inside their instances. -:::warning[SLA Validity Condition — Mandatory Tools] -**VM Instances tools** (hypervisor management agents) are **pre-installed by Cloud Temple** when deploying an instance from the catalogue. These agents are essential for platform operation and availability measurement. +:::warning[SLA Validity Condition — Required Tools] +The **VM instance tools** (hypervisor management agents) are **pre-installed by Cloud Temple** when deploying the instance from the catalog. These agents are essential for the proper functioning of the platform and for measuring availability. -**If the customer disables or removes these tools, the SLA is immediately void.** Cloud Temple can no longer guarantee or measure instance availability without these agents. The presence and proper functioning of the tools are the customer's sole responsibility throughout the instance's lifetime. +**If the client disables or removes these tools, the SLA is immediately void.** Cloud Temple can no longer guarantee or measure the instance's availability without these agents. The presence and proper functioning of the tools are under the client's sole responsibility during operation. ::: -| Activity | Customer | Cloud Temple | -|-------------------------------------------------------------------------------------------------------------|----------|--------------| -| **Pre-install tools** (hypervisor agents, PV drivers) upon deployment from catalogue *(5)* | | **RA** | -| Ensure **tools remain installed, enabled and up to date** throughout the instance's life *(6)* | **RA** | | -| Apply **security patches and updates** to the guest operating system | **RA** | | -| **Harden** the operating system configuration (CIS, ANSSI guidelines, etc.) | **RA** | | -| Manage **user accounts, passwords, and SSH keys** inside the instance *(7)* | **RA** | | -| Install and configure **monitoring agents** (OS metrics, system logs) | **RA** | | -| Maintain **regulatory compliance** applicable to hosted OS and data | **RA** | | +| Activity | Client | Cloud Temple | +|-----------------------------------------------------------------------------------------------------------------|--------|--------------| +| **Pre-install the tools** (hypervisor agents, PV drivers) during deployment from the catalog *(5)* | | **RA** | +| Ensure that the **tools remain installed, enabled, and up-to-date** throughout the instance's lifecycle *(6)* | **RA** | | +| Apply **security patches and updates** to the guest operating system | **RA** | | +| **Harden** the operating system configuration (CIS, ANSSI recommendations, etc.) | **RA** | | +| Manage **user accounts, passwords, and SSH keys** inside the instance *(7)* | **RA** | | +| Install and configure **monitoring agents** (OS metrics, system logs) | **RA** | | +| Maintain **regulatory compliance** applicable to OS and hosted data | **RA** | | -*(5) Cloud Temple provides an initial image from the catalogue with pre-installed tools. Responsibility for configuration, hardening, and subsequent OS updates belongs entirely to the customer from the first connection to the instance.* -*(6) Removal or disabling of tools by the customer immediately suspends the service level commitments (SLA) for the affected instance. Cloud Temple cannot be held responsible for malfunctions related to the absence of these agents.* -*(7) Access security to the instance (password strength, SSH key management, principle of least privilege) is entirely the customer's responsibility. Cloud Temple cannot be held responsible for a breach resulting from insufficiently secured access configuration.* +*(5) Cloud Temple provides an initial image at catalog release state with tools pre-installed. The responsibility for configuration, hardening, and subsequent operating system updates rests entirely with the client from the first connection to the instance.* +*(6) The removal or disabling of tools by the client results in the immediate suspension of service level commitments (SLA) for the affected instance. Cloud Temple cannot be held responsible for malfunctions related to the absence of these agents.* +*(7) The security of access to the instance (password strength, SSH key management, principle of least privilege) is under the client's sole responsibility. Cloud Temple cannot be held responsible for a compromise resulting from an insufficiently secure access configuration.* --- ## Instance Security & Internet Exposure :::danger[Customer Security Responsibility] -Cloud Temple only ensures **inter-tenant network isolation** at the platform level. Protecting each instance against network threats (Internet, internal flows) is **entirely the customer's responsibility**. An instance connected to the Internet without adequate filtering or with weak credentials exposes the customer to compromise risks for which Cloud Temple cannot be held responsible. +Cloud Temple only ensures **inter-tenant isolation** at the platform level. The protection of each instance against network threats (Internet, internal traffic) is **entirely the customer's responsibility**. An instance connected to the Internet without adequate filtering or with weak credentials exposes the customer to compromise risks for which Cloud Temple cannot be held liable. ::: -| Activity | Customer | Cloud Temple | -|-------------------------------------------------------------------------------------------------------------------|----------|--------------| -| Ensure **inter-tenant network isolation** at the platform level | | **RA** | -| **Protect Internet-exposed instances** (filtering rules, security groups, firewalls) *(A)* | **RA** | | -| Ensure no service is exposed to the Internet without an **explicit filtering rule** | **RA** | | -| Implement and maintain an **application firewall** (WAF, IDS/IPS) if required by criticality level | **RA** | | -| Configure **strong passwords and secure SSH keys** on all instances *(B)* | **RA** | | -| Apply the **principle of least privilege** on OS accounts and remote access (SSH, RDP) | **RA** | | -| Implement a **detection and incident response** solution (EDR, SIEM) if required | **RA** | | -| Perform **configuration hardening** of network and OS on instances (disabling unnecessary services) | **RA** | | -| Notify Cloud Temple in case of **suspected compromise** affecting the shared platform | **RA** | **C** | +| Activity | Customer | Cloud Temple | +|-----------------------------------------------------------------------------------------------------------------------|----------|--------------| +| Ensure **inter-tenant network isolation** at the platform level | | **RA** | +| **Protect instances exposed to the Internet** (filtering rules, security groups, firewalls) *(A)* | **RA** | | +| Ensure no service is exposed to the Internet without an **explicit filtering rule** | **RA** | | +| Implement and maintain an **application firewall** (WAF, IDS/IPS) if required by the criticality level | **RA** | | +| Configure **strong passwords and secure SSH keys** on all instances *(B)* | **RA** | | +| Apply the **principle of least privilege** to OS accounts and remote access (SSH, RDP) | **RA** | | +| Implement an **incident detection and response** solution (EDR, SIEM) if required | **RA** | | +| Perform **configuration hardening** for instance network and OS (disabling unnecessary services) | **RA** | | +| Notify Cloud Temple in case of **suspected compromise** affecting the shared platform | **RA** | **C** | -*(A) Any instance connected to the Internet via a public IP or NAT rule without adequate filtering is done so solely under the customer's responsibility. Cloud Temple does not inspect or filter tenant outbound or inbound traffic.* -*(B) The use of weak passwords, compromised SSH keys, or unrestricted root access constitutes a violation of security best practices. Cloud Temple cannot be held responsible for a breach resulting from insufficiently secured access configuration by the customer.* +*(A) Any instance connected to the Internet via a public IP or NAT rule without adequate filtering is the sole responsibility of the customer. Cloud Temple does not inspect or filter tenant inbound or outbound traffic.* +*(B) The use of weak passwords, compromised SSH keys, or unrestricted root access constitutes a breach of security best practices. Cloud Temple cannot be held liable for a compromise resulting from insufficiently secure access configuration by the customer.* --- ## Applications & Middleware -| Activity | Customer | Cloud Temple | -|---------------------------------------------------------------------------------------------------|----------|--------------| -| Install, configure, and maintain **applications** and **middleware** in instances | **RA** | | -| Apply **security patches** to applications and middleware | **RA** | | -| Acquire and hold **software licenses** for hosted applications | **RA** | | -| Implement an **antivirus strategy** on instances | **RA** | | -| Manage **application continuity** (load balancing, replication, clustering) | **RA** | | - ---- +| Activity | Client | Cloud Temple | +|---|---|---| +| Install, configure, and maintain **applications** and **middleware** in instances | **RA** | | +| Apply **security patches** for applications and middleware | **RA** | | +| Acquire and hold **software licenses** for hosted applications | **RA** | | +| Implement an **antivirus strategy** on instances | **RA** | | +| Manage **application continuity** (load balancing, réplication, clustering) | **RA** | | ## Network & Connectivity -| Activity | Customer | Cloud Temple | -|---------------------------------------------------------------------------------------------------|----------|--------------| -| Maintain the **backbone network** and shared network infrastructure | **I** | **RA** | -| Configure **network interfaces** of instances | **RA** | | -| Manage the **IP addressing plan** within the tenant | **RA** | **I** | -| Configure and manage **security groups** (filtering rules) | **RA** | | -| Subscribe to and configure **Internet access** (public IPs, NAT) | **RA** | | -| Manage incidents on **backbone** network links (Cloud Temple layer) | **I** | **RA** | +| Activity | Client | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|--------|--------------| +| Maintain the **backbone network** and shared network infrastructure | **I** | **RA** | +| Configure the **network interfaces** of instances | **RA** | | +| Manage the **IP addressing plan** within the tenant | **RA** | **I** | +| Configure and manage **security groups** (security groups / filtering rules) *(6)* | **RA** | | +| Subscribe to and configure **Internet access** (public IPs, NAT) | **RA** | | +| Manage incidents on **backbone** network links (Cloud Temple layer) | **I** | **RA** | + +*(6) The configuration of network filtering rules applicable to instances is the responsibility of the client. Cloud Temple ensures only inter-tenant isolation at the platform level.* --- ## Instance Storage -| Activity | Customer | Cloud Temple | -|---------------------------------------------------------------------------------------------------|----------|--------------| -| Maintain the shared **storage infrastructure** in operational condition | **I** | **RA** | -| Maintain the storage infrastructure in secure condition | **I** | **RA** | -| Create, attach, and manage **additional storage volumes** | **RA** | **I** | -| Ensure **data consistency** stored in instances | **RA** | | -| Define and apply a **data encryption policy** inside instances | **RA** | | +| Activity | Client | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|--------|--------------| +| Ensure the operational availability of the shared **storage infrastructure** | **I** | **RA** | +| Ensure the security readiness of the storage infrastructure | **I** | **RA** | +| Create, attach, and manage **additional storage volumes** | **RA** | **I** | +| Ensure **data consistency** of data stored in instances | **RA** | | +| Define and apply a **data encryption policy** within instances *(7)* | **RA** | | + +*(7) Encryption at rest for the underlying storage infrastructure is provided by Cloud Temple. Application-level data encryption (at the file system or database level) is the client's responsibility.* --- ## Backup & Snapshots -| Activity | Customer | Cloud Temple | -|---------------------------------------------------------------------------------------------------|----------|--------------| -| Maintain the **backup infrastructure** in operational condition | **I** | **RA** | -| **Activate and configure** the backup policy associated with an instance | **RA** | | -| **Trigger point-in-time snapshots** of an instance | **RA** | | -| Verify **consistency and restorability** of backups performed | **RA** | | -| Perform **periodic restoration tests** | **RA** | | -| Manage **storage capacity** dedicated to backups | | **RC** | -| Define the **continuity or recovery strategy** for hosted applications | **RA** | | +| Activity | Client | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|--------|--------------| +| Ensure the operational readiness of the **backup infrastructure** | **I** | **RA** | +| **Enable and configure** the backup policy associated with an instance | **RA** | | +| **Trigger manual snapshots** of an instance | **RA** | | +| Verify the **consistency and restorability** of performed backups | **RA** | | +| Perform periodic **restoration tests** | **RA** | | +| Manage **storage capacity** dedicated to backups | | **RC** | +| Define the **business continuity or disaster recovery strategy** for hosted applications | **RA** | | --- ## Monitoring & Performance -| Activity | Customer | Cloud Temple | -|---------------------------------------------------------------------------------------------------|----------|--------------| -| Monitor the proper functioning of **physical infrastructure and hypervisors** | **I** | **RA** | -| Monitor performance of **shared resources** (compute, storage, network) | **I** | **RA** | -| Monitor **instance performance** (CPU, RAM, disk I/O, network at guest level) | **RA** | | -| Implement a **metrics and alerting solution** for hosted applications | **RA** | | +| Activity | Client | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|--------|--------------| +| Monitor the proper functioning of the **physical infrastructure and hypervisors** | **I** | **RA** | +| Monitor the **performance of shared resources** (compute, storage, network) | **I** | **RA** | +| Monitor **instance performance** (CPU, RAM, disk I/O, guest-level network) | **RA** | | +| Implement a **metrics and alerting** solution for hosted applications | **RA** | | --- ## Access & Identity Management -| Activity | Customer | Cloud Temple | -|---------------------------------------------------------------------------------------------------|----------|--------------| -| Ensure accessibility of **Cloud Temple Console** and API | | **RA** | -| Manage **entitlements** of Cloud Temple teams to qualified SecNumCloud infrastructure | | **RA** | -| Administer access to **Cloud Temple Console** (users, roles, IAM) | **RA** | | -| Manage access **within instances** (OS accounts, SSH keys, bastion) | **RA** | | -| Configure an **external authentication directory** (SSO, LDAP) for the Console | **RA** | **C** | +| Activity | Client | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|--------|--------------| +| Ensure accessibility of the **Cloud Temple Console** and the API | | **RA** | +| Manage **permissions** for Cloud Temple teams accessing the SecNumCloud-qualified infrastructure | | **RA** | +| Administer access to the **Cloud Temple Console** (utilisateurs, rôles, IAM) | **RA** | | +| Manage access **within instances** (comptes OS, clés SSH, bastion) | **RA** | | +| Configure an **external authentication repository** (SSO, LDAP) for the Console | **RA** | **C** | --- ## Logs -| Activity | Customer | Cloud Temple | -|---------------------------------------------------------------------------------------------------|----------|--------------| -| Retain and provide access to **VM Instances platform logs** *(8)* | | **RA** | -| Collect, retain, and analyze **system and application logs** from instances | **RA** | | +| Activity | Client | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|--------|--------------| +| Retain and make available **platform logs** for VM instances *(8)* | | **RA** | +| Collect, retain, and analyze **system and application logs** for instances | **RA** | | -*(8) Platform log retention duration is specified in the VM Instances service agreement.* +*(8) The retention period for platform logs is specified in the VM instances service agreement.* --- ## Documentation & Contractual -| Activity | Customer | Cloud Temple | -|---------------------------------------------------------------------------------------------------|----------|--------------| -| Manage commercial and contractual matters (quotes, orders, billing) | **I** | **RA** | -| Monitor contractual service delivery (deliveries, billing) | **RA** | **I** | -| Maintain and provide access to technical service documentation | **I** | **RA** | -| Keep the **CMDB** up to date for instances deployed in the tenant | **RA** | | -| Keep access policy to Console and API up to date | **RA** | | +| Activity | Client | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|--------|--------------| +| Ensure commercial and contractual management (quotes, orders, invoicing) | **I** | **RA** | +| Ensure contractual tracking of the service (deliveries, invoicing) | **RA** | **I** | +| Ensure maintenance and availability of the service technical documentation | **I** | **RA** | +| Keep the **CMDB** up to date for instances deployed in its tenant | **RA** | | +| Keep the Console and API access policy up to date | **RA** | | --- ## Reversibility -| Activity | Customer | Cloud Temple | -|---------------------------------------------------------------------------------------------------|----------|--------------| -| Plan the reversibility project and choose target infrastructures | **RA** | **I** | -| Export data and instance images via API or provided tools | **RA** | **I** | -| Proceed with configuration decommissioning following contract termination | **I** | **RA** | -| Perform secure data erasure on storage media and provide attestation | **I** | **RA** | +| Activity | Client | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|--------|--------------| +| Plan the reversibility project and select target infrastructures | **RA** | **I** | +| Export data and instance images via the API or provided tools | **RA** | **I** | +| Proceed with decommissioning configurations following contract termination | **I** | **RA** | +| Perform secure data erasure on storage media and provide an attestation | **I** | **RA** | --- -> *Professional services are available if you wish to delegate some or all of the responsibilities listed as the customer's to Cloud Temple. Contact your Cloud Temple account manager.* +> *Professional services are available if you wish to delegate all or part of the responsibilities listed as being the client's responsibility. Contact your Cloud Temple sales representative.* \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/contractual/vm-instances/sla_vm-instances.md b/i18n/en/docusaurus-plugin-content-docs/current/contractual/vm-instances/sla_vm-instances.md index 294706f9..247f98fd 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/contractual/vm-instances/sla_vm-instances.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/contractual/vm-instances/sla_vm-instances.md @@ -1,24 +1,27 @@ --- title: SLA VM Instances slug: /contractual/vm-instances/sla +displayed_sidebar: docSidebar --- # Service Level Agreement (SLA) – VM Instances | | | | :--- | :--- | -| **Last updated** | 15 April 2026 | +| **Last Updated Date** | April 15, 2026 | -This document defines the Service Level Commitments (SLA) applicable to the **VM Instances** product provided by **Cloud Temple** (hereinafter "the Provider" or "Cloud Temple"). It supplements Cloud Temple's General Terms and Conditions and forms an inseparable whole with them. +This document defines the Service Level Commitments (SLA) applicable to the **VM Instances** product provided by **Cloud Temple** (hereinafter referred to as "the Provider" or "Cloud Temple"). It supplements Cloud Temple's General Terms of Sale and Service and constitutes an inseparable part thereof. --- ## 1. Definitions -- **Monthly Availability Rate**: The guaranteed uptime percentage for a VM Instance during a calendar month. -- **VM Instance**: The virtual private server provisioned on demand by the Customer on Cloud Temple's cloud infrastructure, based on high-performance shared compute and storage resources. -- **Unavailability Period**: Total loss of access and external connectivity to the VM Instance, measured exclusively at the level of Cloud Temple's underlying infrastructure (instance status reported as inactive, stopped or in error by the Cloud Temple hypervisor). -- **Unavailability Duration**: Uninterrupted time during which the Unavailability Period is observed. To be counted under this SLA, an Unavailability Duration must be at least **four (4) consecutive minutes**. +For the purposes of this SLA, the following capitalized terms shall have the meanings set forth below: + +- **Monthly Availability Rate** : The percentage of guaranteed uptime for a VM instance over a calendar month. +- **VM Instance** : The virtual private server provisioned on-demand by the Client on Cloud Temple's cloud infrastructure, based on high-performance shared compute and storage resources. +- **Downtime Period** : Total loss of access and external connectivity to the VM Instance, measured exclusively at the level of Cloud Temple's underlying infrastructure (instance status reported as inactive, stopped, or in error by the Cloud Temple hypervisor). +- **Downtime Duration** : The uninterrupted time during which the Downtime Period is observed. To be counted under this SLA, a Downtime Duration must be at least **four (4) consecutive minutes**. --- @@ -26,62 +29,62 @@ This document defines the Service Level Commitments (SLA) applicable to the **VM Cloud Temple commits to ensuring a Monthly Availability Rate of **99.95%** for each active VM Instance billed to the Customer. -This rate equates to a maximum of **21.9 minutes** of authorized Unavailability Duration per calendar month. In the event of non-compliance, the Customer may claim Service Credits under the conditions defined in Article 5. +This rate equates to a maximum of **21.9 minutes** of Permitted Downtime per calendar month. In the event of non-compliance with this commitment, the Customer may claim Service Credits under the conditions set forth in Article 5. --- -## 3. Availability Measurement & Scope +## 3. Measurement and Scope of Availability -Monitoring and calculation of the Monthly Availability Rate are performed **exclusively by Cloud Temple's infrastructure monitoring tools**, polling the instance state at the virtualization layer. +Monitoring and calculation of the Monthly Availability Rate are performed **exclusively by Cloud Temple's infrastructure monitoring tools**, probing the instance state at the virtualization layer. **Scope of responsibility:** -This SLA covers only the operation of compute resources (CPU, RAM) allocated on Cloud Temple's hardware infrastructure. +This SLA covers only the operation of compute resources (Compute : CPU, RAM) allocated on Cloud Temple's hardware infrastructure. :::info -Network connectivity (VPC, routing) or persistent storage are covered by separate SLA documents and are not covered by this commitment. +Network connectivity (VPC, routing) or persistent storage are subject to separate SLA documents and are not covered by this commitment. ::: -**UP status exclusion principle:** -As soon as the VM Instance is seen as "UP" or "RUNNING" by the Cloud Temple platform, the SLA commitment is considered met, regardless of the accessibility of the Customer's application layer. +**Exclusion based on UP status:** +Once the VM Instance is seen as « UP » or « RUNNING » by the Cloud Temple platform, the SLA commitment is considered met, regardless of the accessibility of the Client's application layer. --- -## 4. Exclusions from Guarantee +## 4. Warranty Exclusions -This SLA does not constitute a commitment on the availability of elements under the Customer's exclusive control. The following are therefore **not** considered Unavailability Periods: +This SLA does not constitute a commitment regarding the availability of elements that are under the exclusive control of the Client. Therefore, outages, loss of access, or failures resulting from the following are **not** considered Downtime Periods: -1. **OS or software failures**: Guest OS crash (e.g., Kernel Panic, Blue Screen of Death), CPU or RAM overload caused by Customer processes, or internal filesystem corruption. +1. **Operating System (OS) or software failures**: Guest OS crash (ex : *Kernel Panic*, *Blue Screen of Death*), CPU or RAM overload caused by Client processes, or internal file system corruption. -2. **Customer configurations**: Network or local firewall rules (iptables, firewalld) blocking access, network configuration errors within the OS via Cloud-init or post-deployment. +2. **Client configurations**: Network or local firewall rules (iptables, firewalld) blocking access, network configuration errors within the OS via Cloud-init or post-deployment. -3. **Application failures**: Shutdown or crash of a service hosted on the VM Instance (web server, database, containers, etc.). +3. **Application failures**: Stop or crash of a service hosted on the VM Instance (serveur web, base de données, conteneurs, etc.). -4. **Scheduled maintenance**: Hardware or software interventions on Cloud Temple's physical infrastructure that have been notified in advance within the maintenance windows provided by your support contract. +4. **Scheduled maintenance**: Hardware or software interventions on Cloud Temple's physical infrastructure that have been subject to prior notification as part of the maintenance windows provided for in your support contract. -5. **Absence or disabling of VM tools**: The hypervisor management agents (*tools*) pre-installed by Cloud Temple on each instance are essential for measuring and guaranteeing availability. If these tools have been disabled, removed, or rendered non-functional by the customer, Cloud Temple can no longer monitor the instance or objectively record an unavailability period. The SLA is **immediately suspended** for the duration during which the tools are absent or non-operational. The presence and proper functioning of the tools are the customer's sole responsibility throughout the instance's lifetime. +5. **Absence or deactivation of VM tools**: The hypervisor management agents (*tools*) pre-installed by Cloud Temple on each instance are essential for measuring and guaranteeing availability. If these tools have been deactivated, removed, or rendered non-functional by the client, Cloud Temple is no longer able to monitor the instance or objectively confirm a downtime period. The SLA is **immediately suspended** for the duration during which the tools are absent or non-operational. The presence and proper functioning of the tools are under the sole responsibility of the client throughout the entire lifecycle of the instance. -6. **Abusive behavior or violation**: Suspension of the VM Instance by Cloud Temple following a violation of the General Terms or security requirements (e.g., compromise, non-compliance with Cloud Temple Marketplace rules). +6. **Abusive behavior or violation**: Suspension of the VM Instance by Cloud Temple following a violation of the General Terms and Conditions or security requirements (ex : compromission, non-respect des règles de la Marketplace Cloud Temple). -7. **Force majeure**: Events beyond Cloud Temple's reasonable control. +7. **Force majeure**: Events beyond the reasonable control of Cloud Temple. --- ## 5. Service Credits and Penalties -If the Monthly Availability Rate of 99.95% is not achieved for a given VM Instance, the Customer is eligible for compensation in the form of Service Credits. +If the 99.95% Monthly Availability Rate is not met for a given VM Instance, the Client is eligible for compensation in the form of a Service Credit. -The Service Credit is calculated as a percentage of the monthly amount billed for the impacted VM Instance: +The Service Credit is calculated as a percentage of the monthly billed amount for the affected VM Instance: -| Monthly availability rate observed | Service Credit | -| :--- | :---: | +| Observed Monthly Availability Rate | Service Credit | +| :--- | ---: | | Between 99.00% and 99.94% | 10% | | Between 95.00% and 98.99% | 25% | | Below 95.00% | 100% | -### 5.1 Claim Process +### 5.1 Claim Procedures -To obtain a Service Credit, the Customer must submit a justified request by opening a ticket with Cloud Temple support within **thirty (30) calendar days** following the month in which the incident occurred. +To obtain a Service Credit, the Customer must submit a reasoned request by opening a ticket with Cloud Temple Support within **thirty (30) calendar days** following the month in which the incident occurred. The request must include: -- The UUID of the affected VM Instance -- The precise timestamps of the observed Unavailability Period +- The identifier (UUID) of the affected VM Instance +- The precise timestamps of the observed Downtime Period \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/databases_overview.md b/i18n/en/docusaurus-plugin-content-docs/current/databases_overview.md index ec471eb6..027b1267 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/databases_overview.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/databases_overview.md @@ -5,7 +5,7 @@ displayed_sidebar: docSidebar # Databases -Cloud Temple's managed databases relieve you of operational management (backups, updates, high availability) while remaining hosted on a SecNumCloud-qualified sovereign infrastructure. +Cloud Temple's managed databases relieve you of operational management (backups, updates, high availability) while remaining hosted on a qualified SecNumCloud sovereign infrastructure.
@@ -18,4 +18,4 @@ Cloud Temple's managed databases relieve you of operational management (backups,

PostgreSQL engine on Kubernetes with Point-in-Time Recovery, logical backup, and StandAlone or Distributed deployment.

Discover Managed PostgreSQL →
-
+ \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/faq.md b/i18n/en/docusaurus-plugin-content-docs/current/faq.md index 855d2d79..2b1b6c24 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/faq.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/faq.md @@ -6,7 +6,7 @@ hide_table_of_contents: true # Frequently Asked Questions -Find below the frequently asked questions about Cloud Temple products and services. +Below are the frequently asked questions about Cloud Temple's products and services. --- @@ -18,8 +18,8 @@ Find below the frequently asked questions about Cloud Temple products and servic
LLMaaS — Large Language Models
-
Questions about using language models, API formats, licenses, and use cases.
-
View FAQ →
+
Questions about the use of language models, API formats, licenses, and use cases.
+
View the FAQ →
@@ -35,7 +35,7 @@ Find below the frequently asked questions about Cloud Temple products and servic
Object Storage
Questions about bucket management, access rights, compatible protocols, and service limits.
-
View FAQ →
+
Consult the FAQ →
@@ -44,4 +44,4 @@ Find below the frequently asked questions about Cloud Temple products and servic Check the [product documentation](/home) or contact Cloud Temple support via the [console](https://console.cloud-temple.com). -:::: +:::: \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/home.md b/i18n/en/docusaurus-plugin-content-docs/current/home.md index c1ba71df..1bc8bc96 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/home.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/home.md @@ -1,5 +1,6 @@ --- tags: + - home - home - onboarding displayed_sidebar: docSidebar @@ -9,7 +10,7 @@ hide_table_of_contents: true

Cloud Temple Documentation

-

Everything you need to make the most of Cloud Temple's sovereign cloud services.

+

Everything you need to operate Cloud Temple's sovereign cloud services.

\ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/housing/housing.md b/i18n/en/docusaurus-plugin-content-docs/current/housing/housing.md index f928b854..93576ba5 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/housing/housing.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/housing/housing.md @@ -4,24 +4,24 @@ title: Overview # Housing Cloud Temple -The **Housing Cloud Temple** offers a physical hosting solution for your IT infrastructures in reliable and secure availability zones. Designed to meet the needs of companies, this offer allows you to host your equipment in shared or dedicated racks, while ensuring high-performance network connectivity and professional datacenter support services. +The **Housing Cloud Temple** provides a physical hosting solution for your IT infrastructure in reliable and secure availability zones. Designed to meet enterprise needs, this product allows you to host your equipment in shared or dedicated racks, while ensuring high-performance network connectivity and professional datacenter support services. -With flexible options and a high level of security, the Housing Cloud Temple guarantees the continuity and reliability of your operations, whether you are hosting appliances, servers, or benefiting from complementary services to optimize your infrastructure. +With flexible options and a high level of security, the Housing Cloud Temple ensures the continuity and reliability of your operations, whether hosting appliances and servers or leveraging complementary services to optimize your infrastructure.

Concepts

-

Discover the basics and essential principles to understand and master our infrastructure.

- Explore the concepts → +

Discover the fundamentals and key principles to understand and master our infrastructure.

+ Explore concepts →

Quickstart

Get started quickly with our resources by following clear and simple instructions.

- Launch the Quickstart → + Start the Quickstart →

Tutorials

-

Learn step by step how to configure and use our services with detailed guides.

- Discover the tutorials → +

Learn step-by-step how to configure and use our services with detailed guides.

+ Discover tutorials →
-
+
\ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/housing/quickstart.md b/i18n/en/docusaurus-plugin-content-docs/current/housing/quickstart.md index 3f33d003..fd536886 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/housing/quickstart.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/housing/quickstart.md @@ -3,39 +3,39 @@ title: Quickstart Guide --- -This **Quickstart Housing** guide will help you get started with the Cloud Temple physical hosting offer. It covers the essential steps to submit a hosting request, configure your equipment, and benefit from complementary services. +This **Quickstart Housing** guide helps you get started quickly with the Cloud Temple physical hosting product. It covers the essential steps to submit a hosting request, configure your equipment, and take advantage of additional services. -## Step 1: Submit a Hosting Request +## Step 1: Submit a hosting request 1. Access the Cloud Temple console. -2. Open a service request by providing : - - Name of your organization. +2. Open a service folder by providing: + - Your organization's name. - Contact details (email and phone number). - - Desired hosting type (shared 'U' or dedicated rack). - - Quantity and characteristics of equipment (size, weight, power consumption, etc.). + - Desired hosting type (shared per 'U' or dedicated per rack). + - Quantity and specifications of the equipment (size, weight, power consumption, etc.). -## Step 2: Prepare Your Equipment +## Step 2: Prepare your equipment -- Verify that your equipment meets technical constraints : - - Rack Unit (U) size. - - Maximum weight per 'U' (25kg for shared, up to 1000kg for dedicated rack). - - Power consumption (150W to 3Kw depending on the subscribed option). +- Verify that your equipment meets the technical constraints: + - Size in rack units (U). + - Maximum weight per 'U' (25kg for shared, up to 1000kg for a dedicated rack). + - Power consumption (150W to 3kW depending on the subscribed option). -## Step 3: Configure Network Connectivity +## Step 3: Configure network connectivity -1. Select the required port type : +1. Select the required port type: - Copper 1Gbps. - Fiber 1Gbps or 10Gbps. -2. Add connectivity options in Meet Me Room if needed for operator integration. +2. Add Meet Me Room connectivity options if necessary for operator integration. -## Step 4: Activate Hands & Eyes Services +## Step 4: Enable Hands & Eyes services -If needed, request technical assistance for : +If needed, request technical assistance for: - Installing your equipment. -- Configuring cabling. -- Performing occasional actions (reboot, photos, etc.). +- Configuring the cabling. +- Performing one-time actions (reboot, photos, etc.). -## Step 5: Validate the Installation +## Step 5: Validate the installation -Once your equipment is installed, verify its connectivity and proper functioning directly via the Cloud Temple console or in coordination with support. +Once your equipment is installed, verify its connectivity and proper operation directly via the Cloud Temple console or in coordination with support. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/housing/tutorials.md b/i18n/en/docusaurus-plugin-content-docs/current/housing/tutorials.md index 72074564..9ce19c9b 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/housing/tutorials.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/housing/tutorials.md @@ -1,11 +1,13 @@ + + --- title: Tutorials --- -These tutorials help you deploy and manage a Cloud Temple Bastion from the Console portal. +These tutorials help you deploy and manage a Bastion Cloud Temple from the Console portal.

Tutorials

-

No tutorials are currently available, but we are working on them actively. Please check back soon for more information!

- Go to the Home Page → -
+

No tutorials are available at the moment, but we are actively working on them. Check back soon to learn more!

+ Go to Home Page → +
\ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/iaas_bare-metal/concepts.md b/i18n/en/docusaurus-plugin-content-docs/current/iaas_bare-metal/concepts.md index 13c32ee8..89f0a848 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/iaas_bare-metal/concepts.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/iaas_bare-metal/concepts.md @@ -2,117 +2,133 @@ title: Concepts --- -The **Bare Metal** offering from Cloud Temple provides dedicated physical servers coupled with distributed block storage. -This solution offers full customization for clients who wish to manage their own software environments, whether installing a Linux or Windows system, or a hypervisor. -## A robust and flexible infrastructure +Cloud Temple's **Bare Metal** offering provides dedicated physical servers associated with distributed block storage. +This solution offers full customization for customers who wish to manage their own software environments, whether for installing a Linux, Windows, or hypervisor system. -The Bare Metal offering is based on an architecture designed to meet the requirements of critical workloads. +--- + +## A flexible hardware infrastructure -### Main Components +The Bare Metal offering is built on an architecture designed to meet the needs of critical workloads. -- **Cisco UCS Servers**: High-performance and reliable compute blades forming the foundation of the offering. -- **IBM Spectrum Virtualize Storage**: A distributed block storage solution providing resilience and high performance. +### Main components + +- **Cisco UCS Servers** : High-performance and reliable, these compute blades form the foundation of the offering. +- **IBM Spectrum Virtualize Storage** : A distributed block storage solution, providing resilience and high performance. ### Architecture -The distributed storage model provides a separation between computing (Bare Metal servers) and storage (distributed block), enabling: +The distributed storage model provides a separation between compute (Bare Metal servers) and storage (distributed block), enabling: -- Flexibility to map storage volumes across multiple Bare Metal servers according to requirements. -- Optimal customization of computing and storage configurations. +- Flexibility to map storage volumes across multiple Bare Metal servers based on requirements. +- Optimal customization of compute and storage configurations. - Enhanced resilience through the use of **Distributed RAID 6**. +--- + ## Regions and Availability Zones -The Bare Metal product is deployed within an availability zone. +The Bare Metal product is deployed in an availability zone. An [availability zone](../additional_content/concepts_az.md) is part of a [region](../additional_content/concepts_regional.md). -This deployment model allows you to select the location of your Bare Metal servers and distribute them across different availability zones (AZs). -This provides better load distribution, maximizes redundancy, and simplifies the implementation of a disaster recovery plan (DRP) in the event of an incident. +This deployment type allows you to choose the location of Bare Metal servers and distribute them across different availability zones (AZ). +This provides better load distribution, maximizes redundancy, and facilitates the implementation of a disaster recovery plan (DRP) in the event of an incident. + +--- ## Compute Blade Classes -The available compute blades for the Bare Metal offering provide a range of performance options to meet diverse requirements: +The compute blades available for the Bare Metal offering provide a range of performance levels to meet various needs: -| Reference | RAM **(1)** | Frequency **(2)** | Number of Cores / Threads | Connectivity **(3)** | GPU **(4)** | +| Reference | RAM **(1)** | Frequency **(2)** | Number of cores / threads | Connectivity **(3)** | GPU **(4)** | |-----------------------|--------------|-------------------------------------------|---------------------------|----------------------|----------------------| -| **ECO** | 384 GB | 2.20/3.0 GHz (Silver 4114 or equivalent) | 20 / 40 threads | 2 × 10 Gbit/s | - | -| **STANDARD** | 384 GB | 2.40/3.4 GHz (Silver 4314 or equivalent) | 32 / 64 threads | 2 × 25 Gbit/s | - | -| **ADVANCE** | 768 GB | 2.80/3.5 GHz (Gold 6342 or equivalent) | 48 / 96 threads | 2 × 25 Gbit/s | - | -| **PERFORMANCE 1** | 384 GB | 3.20/3.6 GHz (Xeon E-53I5Y or equivalent) | 16 / 32 threads | 2 × 25 Gbit/s | - | -| **PERFORMANCE 2** | 768 GB | 3.00/3.6 GHz (Gold 6354 or equivalent) | 36 / 72 threads | 2 × 25 Gbit/s | - | -| **PERFORMANCE 3** | 1536 GB | 2.60/3.5 GHz (Gold 6348 or equivalent) | 56 / 112 threads | 2 × 25 Gbit/s | - | -| **PERFORMANCE 4** | 512 GB | 2.50/4.1 GHz (Intel 6426Y or equivalent) | 32 / 64 threads | 2 × 25 Gbit/s | 2 × NVIDIA L40S 48GB | +| **ECO** | 384 GB | 2.20/3.0 GHz (Silver 4114 or equivalent) | 20 / 40 threads | 2 X 10 Gbit/s | - | +| **STANDARD** | 384 GB | 2.40/3.4 GHz (Silver 4314 or equivalent) | 32 / 64 threads | 2 X 25 Gbit/s | - | +| **ADVANCE** | 768 GB | 2.80/3.5 GHz (Gold 6342 or equivalent) | 48 / 96 threads | 2 X 25 Gbit/s | - | +| **PERFORMANCE 1** | 384 GB | 3.20/3.6 GHz (Xeon E-53I5Y or equivalent) | 16 / 32 threads | 2 X 25 Gbit/s | - | +| **PERFORMANCE 2** | 768 GB | 3.00/3.6 GHz (Gold 6354 or equivalent) | 36 / 72 threads | 2 X 25 Gbit/s | - | +| **PERFORMANCE 3** | 1536 GB | 2.60/3.5 GHz (Gold 6348 or equivalent) | 56 / 112 threads | 2 X 25 Gbit/s | - | +| **PERFORMANCE 4** | 512 GB | 2.50/4.1 GHz (Intel 6426Y or equivalent) | 32 / 64 threads | 2 X 25 Gbit/s | 2 x NVIDIA L40S 48 GB | ### Notes - -- **(1)** The amount of memory is the physically available memory on the blades and cannot be modified. -- **(2)** The frequencies listed correspond to the minimum base frequency and the turbo frequency. +- **(1)** The amount of memory is the physical memory available on the blades and cannot be modified. +- **(2)** The indicated frequencies correspond to the minimum base frequency and the turbo frequency. - **(3)** Physical connectivity is shared for network access and block storage access, thanks to a converged Cisco UCS architecture. -- **(4)** Available GPUs evolve with the latest technologies. As of May 1, 2024, the offering includes NVIDIA LOVELACE L40S GPUs. +- **(4)** Available GPUs evolve based on the latest technologies. As of May 1, 2024, the product includes NVIDIA LOVELACE L40S GPUs. Infrastructure availability is guaranteed at 99.9%, measured monthly, including maintenance windows. Any SLA-related request must be reported via an incident ticket. +--- + ## Block Storage Classes -Distributed block storage, based on **IBM Spectrum Virtualize**, offers a range of performance tiers suited to various use cases: +Distributed block storage, based on **IBM Spectrum Virtualize**, offers a range of performance tiers tailored to various use cases: -| Reference | IOPS/To | Primary Use Case | -|-----------------------------------|-------------------------|----------------------------------------| -| **FLASH - Essential** | 500 | Light workloads | -| FLASH - Standard - 1500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:medium:v1 | -| FLASH - Premium - 3000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:premium:v1 | -| FLASH - Enterprise - 7500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:enterprise:v1 | -| FLASH - Ultra - 15000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:ultra:v1 | -| **MASS STORAGE - Archival** | Not applicable | Cost-effective storage for archival | +| Reference | IOPS/To | Max IOPS / Volume | Max Bandwidth / Volume | Primary Use Case | +|-----------------------------------|----------------|---------------------------|-----------------------------|----------------------------------------| +| **FLASH - Essential** | 500 | 10,000 IOPS | 512 MB/s | Light workloads | +| **FLASH - Standard** | 1500 | 30,000 IOPS | 1024 MB/s | Standard workloads | +| **FLASH - Premium** | 3000 | 30,000 IOPS | 1024 MB/s | Intensive workloads | +| **FLASH - Enterprise** | 7500 | 30,000 IOPS | 1024 MB/s | Critical workloads | +| **FLASH - Ultra** | 15000 | 30,000 IOPS | 1024 MB/s | Ultra-intensive workloads | +| **MASS STORAGE - Archiving** | Not applicable | Not guaranteed | Not guaranteed | Cost-effective storage for archiving | -### Features +### Characteristics -- **Technology**: Flash NVMe with **Distributed RAID 6** for enhanced resilience. -- **Availability**: 99.99%, measured monthly. -- **Restrictions**: No limits on reads or writes. No automatic compression or deduplication, ensuring full utilization of allocated volumes. +- **Performance** : Effective performance scales linearly with allocated capacity (based on the IOPS/TB ratio), **up to the absolute hardware limit defined above**. (For example, a 10 TB Ultra tier volume will be physically limited to 30,000 IOPS and 1024 MB/s). +- **Technology** : NVMe Flash with **Distributed RAID 6** for enhanced resilience. +- **Availability** : 99.99%, measured monthly. +- **Restrictions** : No limits on reads or writes. No automatic compression or deduplication, ensuring full utilization of reserved volumes. -### Storage Block Security and Encryption +### Block Storage Security and Encryption -To ensure the confidentiality of your data at rest, our entire block storage infrastructure integrates a robust hardware-based encryption solution. +To ensure the confidentiality of your data at rest, our entire block storage infrastructure integrates robust hardware encryption. -- **Encryption Type**: Data is encrypted directly on the disks (`Data At Rest`) using the **XTS-AES 256** algorithm. -- **Compliance**: This encryption method complies with the **FIPS 140-2** standard, ensuring a high level of validated security. -- **Operation**: Encryption is applied at the time data is written to the physical storage medium. +- **Encryption Type** : Data is encrypted directly on the disks (`Data At Rest`) using the **XTS-AES 256** algorithm. +- **Compliance** : This encryption method complies with the **FIPS 140-2** standard, ensuring a validated high level of security. +- **Operation** : Encryption is applied at the time of writing data to the physical storage medium. -:::warning[Attention Point on Replication] -It is important to note that this encryption protects data stored on disks. It is not active "on-the-fly," meaning data is not encrypted during storage replication operations between availability zones. The security of data transfers is ensured through dedicated and secure communication channels. +:::warning[Replication Consideration] +It is important to note that this encryption protects data stored on disks. It is not active "on-the-fly", meaning data is not encrypted during storage replication operations between availability zones. Transfer security is ensured by dedicated and secure communication channels. ::: +--- + ## Bare Metal Console Access -Access to Bare Metal servers is provided directly from the **Cloud Temple console**. This feature offers full control over the server lifecycle, including: +Access to Bare Metal servers is provided directly through the **Cloud Temple console**. This feature offers full control over the server lifecycle, including: -- **KVM Access**: A direct interface to manage servers as if you were physically on-site. -- **Management of common operations**: Ability to perform actions such as power management, reboots, and **ISO mapping** for operating system installation. +- **KVM Access** : A direct interface for managing servers, as if you were physically on-site. +- **Routine Operations Management** : Ability to perform actions such as power management, reboots, or **ISO mapping** for operating system installation. -This level of access ensures maximum flexibility while maintaining strict security compliance. +This level of access ensures maximum flexibility while adhering to security constraints. -## Bare Metal Server Network Connectivity +--- + +## Bare Metal server network connectivity -Bare Metal servers come with advanced networking features. +Bare Metal servers are equipped with advanced networking capabilities. -### Layer 2 VLANs +### Layer 2 VLAN -It is possible to configure **Layer 2 VLANs** on the network interfaces of Bare Metal servers. Users can: +It is possible to configure **Layer 2 VLANs** on the network interfaces of Bare Metal servers. +Users can: - **Enable VLAN tagging** to associate one or more VLANs with a single interface. -- **Propagate VLANs directly** onto the network interfaces of servers. +- **Propagate VLANs** directly to the network interfaces of the servers. ### Network Interface Aggregation -Each server is equipped with **two network interfaces**. These interfaces can be used independently or combined to improve performance and provide redundancy: +Each server is equipped with **two network interfaces**. These interfaces can be used independently or combined for improved performance and redundancy: ### Network Performance -The performance of network interfaces is directly tied to the chosen blade class. For example: +The performance of network interfaces is directly related to the chosen blade class. Example: + +- **ECO** blades offer 2 x 10 Gbit/s connectivity. +- **STANDARD** blades and above feature 2 x 25 Gbit/s connectivity. -- **ECO** blades provide 2 x 10 Gbit/s connectivity. -- **STANDARD** and higher-tier blades offer 2 x 25 Gbit/s connectivity. +These network options ensure reliable, flexible connectivity tailored to a variety of professional workloads. -These network options ensure reliable, flexible, and workload-adapted connectivity suitable for a wide range of professional workloads. +--- \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/iaas_bare-metal/iaas_bare-metal.md b/i18n/en/docusaurus-plugin-content-docs/current/iaas_bare-metal/iaas_bare-metal.md index 558dd698..8146e9a5 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/iaas_bare-metal/iaas_bare-metal.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/iaas_bare-metal/iaas_bare-metal.md @@ -2,42 +2,44 @@ title: Overview --- -The __Bare Metal__ offer from Cloud Temple provides dedicated servers, fully customizable, to meet the needs of customers seeking total autonomy over their infrastructure. +# Bare Metal -Designed around cutting-edge Cisco UCS technologies for computing and IBM Spectrum Virtualize/FlashSystem for storage, this solution ensures optimal performance and exemplary reliability. +Cloud Temple's __Bare Metal__ product offers dedicated, fully customizable servers to meet the needs of clients seeking complete autonomy over their infrastructure. -With __Bare Metal__, you benefit from exclusive hardware, without sharing, allowing you to install and manage the software environment of your choice: hypervisor, Linux, Windows, or others. +Built around cutting-edge Cisco UCS technologies for compute and IBM Spectrum Virtualize/FlashSystem for storage, this solution guarantees optimal performance and exemplary reliability. -Direct access to your servers is provided via the Cloud Temple console, offering simplified management and immediate setup. Whether you're looking for infrastructure for your critical applications or hardware resources for your specific projects, the Bare Metal offer ensures flexibility, full control, and unmatched performance. +With __Bare Metal__, you benefit from exclusive, non-shared hardware, allowing you to install and manage your chosen software environment: hypervisor, Linux, Windows, or others. + +Direct access to your servers is provided via the Cloud Temple console, offering simplified management and immediate usability. Whether you are looking for infrastructure for your critical applications or hardware resources for your specific projects, the Bare Metal product ensures flexibility, full control, and unmatched performance.

Concepts

-

Discover the basics and essential principles to understand and master our infrastructure.

- Explore the concepts → +

Discover the fundamentals and essential principles to understand and master our infrastructure.

+ Explore concepts →

Quickstart

Get started quickly with our resources by following clear and simple instructions.

- Launch the Quickstart → + Launch Quickstart →

Tutorials

-

Learn step by step how to configure and use our services with detailed guides.

- Discover the tutorials → +

Learn step-by-step how to configure and use our services with detailed guides.

+ Discover tutorials →
## Purchase Platforms
-

Are you a public sector actor? The Bare Metal offer is available via:

+

Are you a public sector organization? The Bare Metal product is available via:

@@ -46,7 +48,7 @@ Direct access to your servers is provided via the Cloud Temple console, offering

- The CAIH marketplace for the healthcare sector + CAIH contract for the medical sector

@@ -54,4 +56,4 @@ Direct access to your servers is provided via the Cloud Temple console, offering Learn more → - + \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/iaas_bare-metal/quickstart.md b/i18n/en/docusaurus-plugin-content-docs/current/iaas_bare-metal/quickstart.md index fb6890b8..126e32fc 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/iaas_bare-metal/quickstart.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/iaas_bare-metal/quickstart.md @@ -6,26 +6,32 @@ import shivaBareMetalList from '@site/docs/iaas_bare-metal/images/shiva_bare-met import shivaBareMetalDetails from '@site/docs/iaas_bare-metal/images/shiva_bare-metal_details.png' import shivaBareMetalStoragelist from '@site/docs/iaas_bare-metal/images/shiva_bare-metal_storagelist.png' -# QuickStart for the Bare Metal Offering +# QuickStart for the Bare Metal Offer -This page guides you through the initial steps to use the **Bare Metal** offering from the Cloud Temple console. Follow these instructions to explore the available menus and features. +This page guides you through the initial steps to use the **Bare Metal** offer from the Cloud Temple console. Follow these instructions to explore the available menus and features. + +--- ## Prerequisites -Before you begin, ensure the following points: +Before you begin, ensure the following: -1. **Active subscription**: Your organization must have subscribed to the Bare Metal offering. +1. **Active subscription**: Your organization must be subscribed to the Bare Metal offer. 2. **User permissions**: Your user account must have the necessary permissions to access and manage Bare Metal resources. +--- + ## Access to the Bare Metal Interface -Once the subscription is activated and permissions are configured, a new menu titled **Bare Metal** appears in the Cloud Temple console. This menu contains two main submenus: **Bare Metal** and **Volumes**. +Once the subscription is activated and permissions are configured, a new menu titled **Bare Metal** appears in the Cloud Temple console. This menu contains two main sub-menus: **Bare Metal** and **Volumes**. -### 1. Submenu **Bare Metal** +--- -The **Bare Metal** submenu displays a table listing all available Bare Metal instances. This table includes the main information for each instance: +### 1. Bare Metal Sub-menu + +The **Bare Metal** sub-menu displays a table listing all available Bare Metal instances. This table includes the main information for each instance: - **Bare Metal Name** - **Status** @@ -34,23 +40,25 @@ The **Bare Metal** submenu displays a table listing all available Bare Metal ins -#### Key Features +#### Main Features - **Action Button**: Allows direct access to the Bare Metal administration console. -- **Clickable Name**: Clicking on the name of a Bare Metal instance opens a new page with **complete instance details**: +- **Clickable Name**: Clicking on a Bare Metal instance name displays a new page with the **complete details** of the instance: - Hardware information (RAM, CPU, GPU, etc.). - Network configuration (associated IP addresses). - Connectivity information for management. -### 2. Submenu **Volumes** +--- + +### 2. **Volumes** Submenu The **Volumes** submenu displays a table listing all storage volumes associated with your Bare Metal subscription. For each volume, the following information is available: - **Volume Name** - **Capacity** -- **Performance Class** (IOPS per To) +- **Performance Class** (IOPS per TB) - **Status** (Available, Deploying, etc.) @@ -58,13 +66,15 @@ The **Volumes** submenu displays a table listing all storage volumes associated :::info[BFS Volume (Boot from SAN)] **Volume 1** is the **BFS (Boot from SAN)** volume and must be used to install the operating system. -**Important:** This volume cannot be shared with other Bare Metal servers in the same availability zone (AZ). +**Important:** This volume cannot be shared with other Bare Metal instances in the same Availability Zone (AZ). ::: :::tip[Best Practice] -Prefer installing the OS on the **BFS** volume, and store your data on an additional **LUN** volume. This separation simplifies maintenance, backups, and system reinstallation when needed. +Prefer installing the OS on the **BFS** volume, and store your data on an additional **LUN** volume. This separation facilitates maintenance, backups, and system reinstallation if necessary. ::: -#### Key Features +#### Main Features - **Volume Management**: From this table, you can map volumes to your Bare Metal instances. + +--- \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/iaas_bare-metal/tutorials.md b/i18n/en/docusaurus-plugin-content-docs/current/iaas_bare-metal/tutorials.md index de1e5057..d1f4352c 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/iaas_bare-metal/tutorials.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/iaas_bare-metal/tutorials.md @@ -1,9 +1,11 @@ + + --- title: Tutorials ---

Tutorials

-

No Tutorial is available yet, but we are working on it actively. Come back soon for more information!

- Access the homepage → -
+

No tutorials are available at the moment, but we are actively working on them. Check back soon to learn more!

+ Go to homepage → + \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md b/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md index 5b2812fb..3d7e49c5 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md @@ -2,329 +2,347 @@ title: Concepts --- -Cloud Temple's __IaaS (Infrastructure as a Service)__ offering is designed to meet the critical needs of business continuity and disaster recovery, with a particular focus on demanding sectors such as industry, banking, and insurance. Built on cutting-edge technologies, this infrastructure ensures maximum availability and optimal performance for your critical workloads. +Cloud Temple's __IaaS (Infrastructure As A Service)__ offering is designed to meet critical business continuity and disaster recovery needs, with a particular focus on demanding sectors such as industry, banking, and insurance. Built on cutting-edge technologies, this infrastructure ensures maximum availability and optimal performance for your critical workloads. -## A Trusted Technology Platform +## A trusted technology platform -Cloud Temple's IaaS platform is built on internationally recognized technology partners: +Cloud Temple's IaaS platform relies on internationally renowned technology partners: - Compute: __CISCO UCS__. - Storage: __IBM Spectrum Virtualize__, __IBM FlashSystem__ for block storage, and __DELL ECS__ for object storage. -- Networking: __JUNIPER__. -- Virtualization: __Open Source Stack__, providing a reliable and proven foundation for managing your cloud environments. +- Network: __JUNIPER__. +- Virtualization: __Stack Opensource__, providing a reliable and proven foundation for managing your cloud environments. -This architecture is based on the __VersaStack__ model, a strategic alliance between Cisco and IBM, ensuring broad compatibility with leading software vendors. +This architecture is based on the __VersaStack__ model, a partnership between Cisco and IBM, ensuring extensive compatibility with major software vendors. ## A dedicated and automated infrastructure -Although fully automated through APIs and a Terraform provider, Cloud Temple's IaaS offering provides a unique infrastructure: +Although fully automated via APIs and a Terraform provider, Cloud Temple's IaaS product offers a unique infrastructure: -- __Dedicated resources__: Compute blades, storage volumes, and software stacks (virtualization, backup, firewalling, etc.) are never shared among clients. -- __Maximum predictability__: You control virtualization rates, IOPS pressure on storage, and benefit from clear, consumption-based monthly billing. +- __Dedicated resources__: Compute blades, storage volumes, and software stacks (virtualization, backup, firewalling, etc.) are never shared among customers. +- __Maximum predictability__: You control virtualization ratios, IOPS load on storage, and benefit from clear, monthly consumption-based billing. -The platform is certified __SecNumCloud__ by the [ANSSI](https://www.ssi.gouv.fr/), ensuring a high level of automation and security. +The platform is certified __SecNumCloud__ by [ANSSI](https://www.ssi.gouv.fr/), ensuring a high level of automation and security. -## Key Features +## Key features -- Dedicated and on-demand computing resources (CPU, RAM). +- Dedicated and on-demand compute resources (CPU, RAM). - On-demand storage (multiple classes available). -- Networking resources (Internet, private networks). +- Network resources (Internet, private networks). - Cross-backups with configurable retention. - Asynchronous replication for storage or virtual machines. - Management via the [Console](../console/console.md) or in Infrastructure as Code mode using APIs and the Terraform provider. -## Benefits +## Advantages -| Benefit | Description | +| Advantage | Description | |---------------------|------------------------------------------------------------------------------------------------------------------------------------------------| -| Digital Trust | Data hosting in France and GDPR compliance. | -| Security | Highly secure platform, certified __SecNumCloud__, __HDS__ (Health Data Hosting), __ISO 27001__, and __ISAE 3402 Type II__. | -| High Availability | Platform availability rate of 99.99%, measured monthly, including maintenance windows. | -| Resilience | Business continuity and disaster recovery plans implemented as needed. | -| Automation | Fully automated platform designed to integrate into a digital transformation program. | -| On Demand | Resources available on demand. | +| Digital Trust | Data hosting in France and GDPR compliance. | +| Security | Highly secure platform, certified __SecNumCloud__, __HDS__ (Hébergement des Données de Santé), __ISO 27001__ and __ISAE 3402 type II__. | +| High Availability | Platform availability rate of 99.99%, measured monthly, maintenance windows included. | +| Resilience | Implementation of business continuity or disaster recovery plans as needed. | +| Automation | Fully automated platform designed to integrate into a digital transformation program. | +| On Demand | Resources available on demand. | ## Regions and Availability Zones -The OpenIaaS product is deployed within an availability zone. +The OpenIaaS product is deployed in an availability zone. An availability zone is part of a region. -This deployment model allows you to choose the location of clusters and distribute them across different availability zones (AZ). -This provides better load distribution, maximizes redundancy, and facilitates the implementation of a Disaster Recovery Plan (DRP) in the event of an incident. +This deployment type allows you to choose the location of the clusters and distribute them across different availability zones (AZ). +This provides better load distribution, maximizes redundancy, and facilitates the implementation of a disaster recovery plan (DRP) in the event of an incident. + +--- ## Compute Blade Classes -The available compute blades for the Bare Metal offering provide a range of performance options to meet diverse requirements: +The compute blades available for the Bare Metal offering provide a range of performance levels to meet various needs: -| Reference | RAM __(1)__ | Frequency __(2)__ | Number of Cores / Threads | Connectivity __(3)__ | GPU __(4)__ | +| Reference | RAM __(1)__ | Frequency __(2)__ | Number of cores / threads | Connectivity __(3)__ | GPU __(4)__ | |-----------------------|--------------|-------------------------------------------|---------------------------|----------------------|----------------------| -| __ECO__ | 384 GB | 2.20/3.0 GHz (Silver 4114 or equivalent) | 20 / 40 threads | 2 × 10 Gbit/s | - | -| __STANDARD__ | 384 GB | 2.40/3.4 GHz (Silver 4314 or equivalent) | 32 / 64 threads | 2 × 25 Gbit/s | - | -| __ADVANCE__ | 768 GB | 2.80/3.5 GHz (Gold 6342 or equivalent) | 48 / 96 threads | 2 × 25 Gbit/s | - | -| __PERFORMANCE 1__ | 384 GB | 3.20/3.6 GHz (Xeon E-53I5Y or equivalent) | 16 / 32 threads | 2 × 25 Gbit/s | - | -| __PERFORMANCE 2__ | 768 GB | 3.00/3.6 GHz (Gold 6354 or equivalent) | 36 / 72 threads | 2 × 25 Gbit/s | - | -| __PERFORMANCE 3__ | 1536 GB | 2.60/3.5 GHz (Gold 6348 or equivalent) | 56 / 112 threads | 2 × 25 Gbit/s | - | -| __PERFORMANCE 4__ | 512 GB | 2.50/4.1 GHz (Intel 6426Y or equivalent) | 32 / 64 threads | 2 × 25 Gbit/s | 2 × NVIDIA L40S 48GB | +| __ECO__ | 384 GB | 2.20/3.0 GHz (Silver 4114 or equivalent) | 20 / 40 threads | 2 X 10 Gbit/s | - | +| __STANDARD__ | 384 GB | 2.40/3.4 GHz (Silver 4314 or equivalent) | 32 / 64 threads | 2 X 25 Gbit/s | - | +| __ADVANCE__ | 768 GB | 2.80/3.5 GHz (Gold 6342 or equivalent) | 48 / 96 threads | 2 X 25 Gbit/s | - | +| __PERFORMANCE 1__ | 384 GB | 3.20/3.6 GHz (Xeon E-53I5Y or equivalent) | 16 / 32 threads | 2 X 25 Gbit/s | - | +| __PERFORMANCE 2__ | 768 GB | 3.00/3.6 GHz (Gold 6354 or equivalent) | 36 / 72 threads | 2 X 25 Gbit/s | - | +| __PERFORMANCE 3__ | 1536 GB | 2.60/3.5 GHz (Gold 6348 or equivalent) | 56 / 112 threads | 2 X 25 Gbit/s | - | +| __PERFORMANCE 4__ | 512 GB | 2.50/4.1 GHz (Intel 6426Y or equivalent) | 32 / 64 threads | 2 X 25 Gbit/s | 2 x NVIDIA L40S 48 GB | ### Notes -- __(1)__ The amount of memory is the physically available memory on the blades and cannot be modified. -- __(2)__ The frequencies listed correspond to the minimum base frequency and the turbo frequency. -- __(3)__ Physical connectivity is shared for both network access and block storage access, thanks to a converged Cisco UCS architecture. -- __(4)__ Available GPUs evolve with the latest technologies. As of May 1, 2024, the offering includes NVIDIA LOVELACE L40S GPUs. +- __(1)__ The memory capacity is the physical amount available on the blades and cannot be modified. +- __(2)__ The indicated frequencies correspond to the minimum base frequency and the turbo frequency. +- __(3)__ Physical connectivity is shared for network access and block storage access, thanks to a converged Cisco UCS architecture. +- __(4)__ Available GPUs evolve based on the latest technologies. As of May 1, 2024, the product includes NVIDIA LOVELACE L40S GPUs. - __(5)__ High availability on a cluster is available only with a minimum of 2 nodes. -Infrastructure availability is guaranteed at 99.9%, measured monthly, including maintenance windows. Any SLA-related request must be reported via an incident ticket. +Infrastructure availability is guaranteed at 99.9%, measured monthly, including maintenance windows. Any request related to the SLA must be submitted via an incident ticket. + +--- ## Block Storage Classes -Distributed block storage, based on __IBM Spectrum Virtualize__, offers a range of performance tiers suited to various use cases: +Distributed block storage, based on __IBM Spectrum Virtualize__, offers a range of performance levels tailored to various use cases: -| Reference | IOPS/To | Primary Use Case | -|-----------------------------------|-------------------------|----------------------------------------| -| __FLASH - Essential__ | 500 | Light workloads | -| FLASH - Standard - 1500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:medium:v1 | -| FLASH - Premium - 3000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:premium:v1 | -| FLASH - Enterprise - 7500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:enterprise:v1 | -| FLASH - Ultra - 15000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:ultra:v1 | -| __MASS STORAGE - Archival__ | Not applicable | Cost-effective storage for archival | +| Reference | IOPS/To | Max IOPS Ceiling / Volume | Max Bandwidth / Volume | Primary Use Case | +|-----------------------------------|----------------|---------------------------|-----------------------------|----------------------------------------| +| **FLASH - Essential** | 500 | 10 000 IOPS | 512 MB/s | Light workloads | +| **FLASH - Standard** | 1500 | 30 000 IOPS | 1024 MB/s | Standard workloads | +| **FLASH - Premium** | 3000 | 30 000 IOPS | 1024 MB/s | Intensive workloads | +| **FLASH - Enterprise** | 7500 | 30 000 IOPS | 1024 MB/s | Critical workloads | +| **FLASH - Ultra** | 15000 | 30 000 IOPS | 1024 MB/s | Ultra-intensive workloads | +| **MASS STORAGE - Archiving** | Not applicable | Not guaranteed | Not guaranteed | Cost-effective storage for archiving | -### Features +### Characteristics -- __Technology__: Flash NVMe with __Distributed RAID 6__ for enhanced resilience. -- __Availability__: 99.99%, measured monthly. -- __Restrictions__: No limits on reads or writes. No automatic compression or deduplication, ensuring full utilization of allocated volumes. +- **Performance** : Effective performance scales linearly with allocated capacity (according to the IOPS/TB ratio), **up to the absolute hardware limit defined above**. (For example, a 10 TB Ultra class volume will be physically limited to 30,000 IOPS and 1024 MB/s). +- __Technology__ : NVMe Flash with __Distributed RAID 6__ for enhanced resilience. +- __Availability__ : 99.99%, measured monthly. +- __Restrictions__ : No limits on reads or writes. No automatic compression or deduplication, ensuring full utilization of reserved volumes. -### Storage Block Security and Encryption +### Block Storage Security and Encryption -To ensure the confidentiality of your data at rest, our entire block storage infrastructure integrates a robust hardware-based encryption solution. +To ensure the confidentiality of your data at rest, our entire block storage infrastructure incorporates robust hardware encryption. - __Encryption Type__: Data is encrypted directly on the disks (`Data At Rest`) using the __XTS-AES 256__ algorithm. -- __Compliance__: This encryption method complies with the __FIPS 140-2__ standard, ensuring a high level of validated security. -- __Operation__: Encryption is applied at the time data is written to the physical storage medium. +- __Compliance__: This encryption method complies with the __FIPS 140-2__ standard, ensuring a validated high level of security. +- __Operation__: Encryption is applied at the time of writing data to the physical storage medium. -:::warning[Attention Point on Replication] -It is important to note that this encryption protects data stored on disks. It is not active "on-the-fly," meaning data is not encrypted during storage replication operations between availability zones. Security of transfers is ensured through dedicated and secure communication channels. +:::warning[Replication Considerations] +It is important to note that this encryption protects data stored on disks. It is not active "on-the-fly", which means that data is not encrypted during storage replication operations between availability zones. Transfer security is ensured by dedicated and secure communication channels. ::: +--- + ## Networks The OpenIaaS product is compatible with [private networks](../network/private_network) and [internet access](../network/internet). Two types of networks are available from the virtual machine configuration. -### VLAN-type networks +### VLAN Networks -VLAN-type networks must be deployed at a rate of one VLAN per network interface card. If you wish to use multiple networks, simply create multiple network interface cards. +VLAN networks should be configured with one VLAN per network interface. If you want to use multiple networks, simply create multiple network interfaces. -A limitation exists regarding the maximum number of network cards that can be created on a VM, which is 7. +There is a limitation on the maximum number of network interfaces that can be created on a VM, which is 7. ### VLAN Trunk -When you need to propagate more than 7 VLANs, you must use a VLAN Trunk. -The VLAN Trunk allows all your VLANs to pass through a single network interface. VLAN ID configuration must be performed via virtual VLAN interfaces from the VM's operating system. The VLAN IDs are the same as those present and visible from the console. +In cases where you need to carry more than 7 VLANs, you must use a VLAN Trunk. +A VLAN Trunk allows all your VLANs to pass through a single card. The VLAN ID configuration must be done via VLAN-type virtual interfaces from the VM OS. The VLAN IDs are the same as those present and visible from the console. ## Virtual Machine Backup -The OpenIaaS offering includes a __native, non-bypassable distributed backup architecture__, a mandatory requirement for French SecNumCloud qualification. +The OpenIaaS offering integrates __a native distributed backup architecture that cannot be bypassed__, a mandatory requirement for the French SecNumCloud certification. -Backups are stored on the [SecNumCloud-certified Object Storage](../storage/oss), ensuring optimal protection in the event of a major datacenter failure. This approach allows data to be restored on a secondary datacenter, even in critical incidents such as fires. +Backups are stored on the [SecNumCloud qualified Object Storage](../storage/oss), ensuring optimal protection in the event of a major production datacenter failure. This approach allows you to restore your data to a secondary datacenter, even in the event of a critical incident such as a fire. ### Available Data Protection Services | Service | Description | |---|---| -| **Incremental Backup (Agentless)** | Agentless backup using native hypervisor mechanisms, to a remote S3 repository. | -| **Metadata Backup** | Protection of virtualization pool configurations and the backup orchestrator — essential for Disaster Recovery. | -| **Granular Restore** | Restore at the level of a full VM, individual virtual disk, or single file. | -| **S3 Multi-AZ Offloading** | Offloading to Cloud Temple's S3 object storage replicated across availability zones. | +| **Incremental Backup (Agentless)** | Agentless backup via hypervisor native mechanisms, to a remote S3 repository. | +| **Metadata Backup** | Protection of virtualization pool and backup orchestrator configurations — essential for Disaster Recovery. | +| **Granular Restoration** | Restoration possible at the full VM, individual virtual disk, or single file level. | +| **S3 Multi-AZ Offloading** | Offloading to Cloud Temple S3 object storage replicated across availability zones. | -Backup and restore speeds depend on the rate of change in the environments. Backup policies are fully configurable from the [Cloud Temple Console](../console/console.md) for each virtual machine. +Backup and restoration speeds depend on the change rate across environments. The backup policy is fully configurable from [the Cloud Temple Console](../console/console.md) for each virtual machine. -| Reference | Unit | Max IOPS Ceiling / LUN | Max Bandwidth / LUN | SKU | -|---|---|---| -| BACKUP - Service access | 1 VM | csp:(region):openiaas:backup:vm:v1 | +| Reference | Unit | SKU | +| ---------------------------------------------| ----- | ------------------------------ | +| BACKUP - Service Access | 1 VM | csp:(region):openiaas:backup:vm:v1 | --- -### Technical Backup Architecture +### Technical architecture of backup #### Overview -The architecture is based on a strict separation between the **control plane** (backup orchestrator) and the **data plane** (remote S3 storage): the backup orchestrator is hosted in Cloud Temple's management cluster (separate from and inaccessible to the client), while backup data is stored on a remote S3 repository, physically separated from the production infrastructure. Data transits encrypted between the two components via HTTPS/TLS 1.3. +The architecture relies on a strict separation between the **control plane** and the **data plane**: the backup orchestrator is hosted in the Cloud Temple management cluster (distinct and inaccessible to the client), while backup data is stored on a remote S3 repository, physically separated from the production infrastructure. Data is transmitted encrypted between the two components. #### Backup Orchestrator -The orchestrator is deployed in Cloud Temple's management cluster, **directly inaccessible to the client**. It orchestrates all backup jobs and manages encryption. +The orchestrator is deployed in the Cloud Temple management cluster, **directly inaccessible to the client**. It orchestrates all backup jobs and manages encryption. -- **Standard policies**: backup policies are applied by default to each tenant. -- **Custom policies**: the client can request specific frequencies or retention periods via a support ticket in the Cloud Temple console. +- **Standard policies** : backup policies are applied by default to each tenant. +- **Custom policies** : the client can request specific frequencies or retention periods via a support ticket in the Cloud Temple console. #### Remote S3 Storage -Backups are sent to Cloud Temple's [SecNumCloud-certified Object Storage](../storage/oss), with Multi-AZ replication to ensure resilience against the loss of an entire physical site. +Backups are sent to Cloud Temple's [SecNumCloud Qualified Object Storage](../storage/oss), with Multi-AZ replication to ensure resilience against the loss of an entire physical site. --- ### Backup Mechanism: Incremental Backup -The service uses an **incremental** backup mode. This mode targets a **Backup Repository** (the remote S3 storage) and never exports a full backup after the first one: only the **modified data blocks** are transferred at each cycle. +The service uses an **incremental** backup mode. This mode targets a **Backup Repository** (the remote S3 storage) and never exports a full backup after the first one: only the **modified data blocks** are transferred each cycle. :::info[Incremental Backup vs Replication] -**Incremental backup** targets a remote S3 repository and is optimized for **long-term protection**. It should not be confused with **replication** (hot Disaster Recovery) which targets a local Storage Repository — this mode is covered by the [virtual machine replication](#virtual-machine-replication) feature. +**Incremental backup** targets a remote S3 repository and is optimized for **long-term protection**. It should not be confused with **replication** (Hot Disaster Recovery) which targets a local Storage Repository — this mode is covered by the [virtual machine replication](#virtual-machine-replication) feature. ::: -#### Incremental Backup Lifecycle +#### Technical lifecycle of an incremental backup -**1. Local Snapshot Creation (Source)** +The following are the successive steps triggered with each backup job execution: -At job launch, the orchestrator requests the hypervisor to create a VM snapshot. This snapshot serves as a comparison point to calculate the delta against the previous reference snapshot. +**1. Local snapshot creation (Source)** -**2. Differential Export via Changed Block Tracking (CBT)** +Upon job launch, the orchestrator requests the hypervisor to create a VM snapshot. This snapshot serves as a comparison point to calculate the delta relative to the previous reference snapshot. + +**2. Differential export via Changed Block Tracking (CBT)** The orchestrator compares the new snapshot with the previous reference snapshot using CBT metadata. Only data blocks that have changed since the last backup are extracted — not the entire disk. -**3. Encryption and Transfer to S3** +**3. Encryption and transfer to S3** -Modified blocks are **encrypted on-the-fly by the orchestrator** and then sent via HTTPS/TLS 1.3 to the remote S3 bucket. +The modified blocks are **encrypted on the fly by the orchestrator** and then sent via HTTPS/TLS 1.3 to the remote S3 bucket. -**4. Snapshot Rotation (Coalesce)** +**4. Snapshot rotation (Coalesce)** -Once the transfer is validated, the old reference snapshot is deleted, and the new snapshot becomes the reference for the next cycle. The hypervisor then triggers a **coalesce** (merge) process to reintegrate the old delta data into the virtual disk chain. +Once the transfer is validated, the old reference snapshot is deleted, and the new snapshot becomes the reference for the next cycle. The hypervisor then triggers a **coalesce** process to reintegrate the old delta's data into the virtual disk chain. -:::warning[Coalesce I/O Impact] -The coalesce operation is **I/O-intensive** on the production storage. It is triggered automatically after each successful backup. It is recommended to schedule backup windows during periods of low application load. +:::warning[Impact I/O du Coalesce] +The coalesce operation is **I/O intensive** on the production storage. It is triggered automatically after each successful backup. It is recommended to schedule backup windows during periods of low application load. ::: -**5. S3 Retention Management (Merge) and Key Backup Interval** +**5. S3 retention management (Merge) and Key Backup Interval** + +On S3 storage, the orchestrator manages backup rotation by **merging** (*merge*) old deltas into the oldest retained full backup according to the retention policy. -On the S3 storage, the orchestrator manages backup rotation by merging old deltas into the oldest full backup retained according to the retention policy. A full backup is **periodically forced** (typically every 20 increments — *Key Backup Interval*) to create a clean starting point. +To ensure backup chain integrity, a full backup is **forced periodically** (typiquement tous les 20 incréments — *Key Backup Interval*). This creates a clean new starting point and limits the impact of potential corruption in any link of the chain. --- ### Impact on Production Storage Sizing -:::warning[Critical Note — Block Storage (Thick Provisioning)] -The OpenIaaS offering relies on high-performance Block storage (Fibre Channel / LVM). Snapshots used by incremental backup are provisioned in **Thick** mode: each snapshot consumes on the Storage Repository (SR) the **full nominal size of the VM disk**, not just the actual delta. +:::warning[Critical Consideration — Block Storage (Thick provisioning)] +The OpenIaaS offering relies on high-performance Block Storage (Fibre Channel / LVM). The snapshots used by incremental backup are provisioned in **Thick** mode: each snapshot consumes on the Storage Repository (SR) the **full nominal size of the VM disk**, and not just the actual delta. **Consumption example for a VM with a 50 GB disk:** -| Element | Consumption on SR | +| Item | SR Consumption | |---|---| | Active VM disk | 50 GB | | Permanent reference snapshot (for delta calculation) | 50 GB | | Temporary snapshot created during export | 50 GB | -| **Total required during backup window** | **up to 150 GB** | +| **Total required during the backup window** | **up to 150 GB** | -**Recommended sizing rule**: provision **at least 50% free space** on production storage relative to the total volume of backed-up VMs. +**Recommended sizing rule**: allocate **at least 50% free space** on production storage relative to the total volume of backed-up VMs, to accommodate this overhead inherent to high-performance block storage. ::: --- -### Backup Security and Encryption +### Security and Encryption of Backups -#### Encryption in Transit +#### Encryption in transit All communications between the backup orchestrator and S3 storage are encrypted via **HTTPS / TLS 1.3**. #### Encryption at Rest and Key Management -Encryption is applied by the backup orchestrator, **before** sending data to S3. +Encryption is applied by the backup orchestrator, **before** data is sent to S3. | Parameter | Value | |---|---| | **Algorithm** | AES-256 or ChaCha20-Poly1305 | -| **Key Generation** | Automatic at backup orchestrator deployment | -| **Key Storage** | Cloud Temple centralized Vault (never exposed in the client interface) | -| **Resilience** | In case of orchestrator loss, the key is re-injected from the Vault to restore the service | +| **Key Generation** | Automatic upon deployment of the backup orchestrator | +| **Key Storage** | Centralized Cloud Temple Vault (never exposed in the client interface) | +| **Resilience** | In the event of orchestrator loss, the key is re-injected from the Vault to restore the service | + +#### Network isolation (architecture SecNumCloud) -#### Network Isolation (SecNumCloud Architecture) +The backup infrastructure is designed to be **strictly isolated** from client environments: -- **Physical separation**: *Client*, *Administration*, and *Backup* networks rely on separate physical backbones and distinct routing contexts (VRF). -- **No lateral infection**: a compromised VM cannot reach the S3 storage or the backup orchestrator — no network path exists between them. +- **Physical separation**: the *Client*, *Administration*, and *Backup* networks rely on distinct physical backbones and separate routing contexts (VRF). +- **No lateral infection risk**: a compromised VM cannot reach S3 storage or the backup orchestrator — no network path exists between them. S3 is never "mounted" in the VM. #### Secure Administration +The administration of the backup platform is **reserved for the Cloud Temple Backup teams** and subject to SecNumCloud requirements: + | Control | Measure | |---|---| -| **Access bastion** | Mandatory access through a hardened internal administration bastion (Ubuntu Hardened) | -| **Workstation** | Access only from dedicated and secured administration laptops | -| **Authentication** | Mandatory MFA via a dedicated administration LDAP directory (separate from the office LDAP) | +| **Access Bastion** | Mandatory access through a hardened internal administration bastion (Ubuntu Hardened) | +| **Workstation** | Access only from dedicated and secure administration laptops | +| **Authentication** | Mandatory MFA via a dedicated administration LDAP directory (distinct from the office LDAP) | --- ### Monitoring and Audit -- **Backup logs**: visible to the client directly in the Cloud Temple Console — status (success/failure), volume, timestamp. -- **Administrator access logs**: accesses to backup infrastructure (orchestrator, S3) are logged and **audited monthly**. -- **Penetration testing (PASSI)**: regular pentests by PASSI-qualified providers under SecNumCloud qualification. -- **Physical security**: all equipment hosted in SecNumCloud zones (dedicated physical cages with biometric access control). +- **Backup logs** : visible to the client directly in the Cloud Temple Console — status (success/failure), volume, timestamp. +- **Administrator access logs** : access to backup infrastructure (orchestrator, S3) is logged and **audited monthly** to detect any anomalies. +- **Penetration tests (PASSI Pentests)** : the infrastructure undergoes regular penetration tests by qualified PASSI providers as part of maintaining SecNumCloud certification. +- **Physical security** : all equipment is hosted in SecNumCloud zones (dedicated physical cages with biometric access control) within Cloud Temple data centers. --- -### Compatibility and Special Cases +### Compatibility and Edge Cases -:::warning[VMs with continuous disk writes] -Some virtual machines are incompatible with this backup technology when their **disk write loads are constant** (active databases, transaction logs, etc.). The hypervisor cannot finalize the snapshot without freezing the VM, which can last several hours. +:::warning[VMs with Continuous Disk Writes] +Some virtual machines are not compatible with this backup technology when their **disk write loads are constant** (active databases, transaction logs, etc.). The hypervisor cannot then finalize the snapshot without freezing the VM, which can take several hours. -For these workloads, it is recommended to **complement or replace the hypervisor backup with an application-level backup**: database dump (pg_dump, mysqldump…), agent-based backup, or native application export. +For these workloads, we recommend **complementing or replacing the hypervisor backup with an application-level backup**: database dump (pg_dump, mysqldump…), agent-based backup, or native application export. ::: --- -### Creating a Backup Policy +### Creating a backup policy -Creating a backup policy is an administration operation performed **exclusively via a support request**, accessible via the buoy icon in the top-right corner of the interface. +Creating a backup policy is an administrative operation performed **exclusively via a support request**, accessible via the lifebuoy icon in the top right corner of the interface. The request must specify: -- Your Organization's name -- Contact details (email and phone) to finalize the configuration +- Your Organization name +- Contact details (email and phone number) to finalize the configuration - The tenant name - The backup policy name - Desired characteristics: frequency, retention (x days, y weeks, z months…) -#### Scheduling Constraints +#### Planning Constraints | Constraint | Value | |---|---| | **Minimum interval between two executions** | 24 hours | | **Maximum retention** | 24 months | -| **Simultaneous executions per policy** | 1 at a time | +| **Concurrent executions per policy** | 1 at a time | :::warning[A policy can only run once at a time] -Each backup policy is **single-instance**: only one execution can be active simultaneously. +Each backup policy is **single-instance** : only one execution can be active simultaneously. -**Practical consequence**: if you add many virtual machines to an existing policy and the previous backup has not finished when the next scheduled trigger occurs, **the new cycle will not start** — it will be skipped until the next occurrence. +**Practical consequence** : if you add many virtual machines to an existing policy and yesterday's backup is not yet completed at the scheduled trigger time, **the new cycle will not start** — it will be ignored until the next occurrence. -To avoid this: check execution times in the Console logs, adjust the policy frequency or size, or split VMs across multiple policies with staggered schedules. +To avoid this scenario: +- check the **execution durations** of your jobs from the Cloud Temple Console logs, +- adjust the **frequency** or **policy size** if backups regularly overflow into the next window, +- consider **distributing VMs across multiple policies** with staggered schedules for large environments. ::: :::info[Long-term retention — future availability] -**The maximum retention is currently 24 months.** Long-term retention (up to 10 years) will be integrated with the launch of our **Glacier** product, planned for **Q1 2027**, as a complementary subscription. +**Maximum retention is currently 24 months.** Long-term retention (up to 10 years) will be integrated with the launch of our **Glacier** product, scheduled for the **first quarter of 2027**, as an add-on subscription. -For such long retention periods, we recommend saving **exclusively flat files** and **database dumps**. Restoring a complete server after 10 years carries significant risks of obsolescence. +For such long retention periods, we recommend backing up **flat files exclusively** (raw files, static documents) as well as **database dumps**. Restoring a complete server after 10 years indeed carries significant risks: many services or dependencies may have become obsolete or incompatible with the current environment. -**Alternative available now**: the **agent-based backup** service, available as a complementary subscription. Contact support for more information. +**Alternative available now** : the **agent-based backup** service, available as an add-on subscription. Contact support for more information. ::: -## Virtual Machines +## Virtual machines ### vCPU Resource Management -vCPU resource modifications must be performed while the machine is powered off (cold). The platform supports up to 254 vCPUs per virtual machine (theoretical limit), with successful testing conducted on Linux VMs equipped with 128 vCPUs. +vCPU resource modifications are performed offline (with the machine powered off). The platform supports up to 254 vCPUs per virtual machine (theoretical limit), with successful tests conducted on Linux VMs equipped with 128 vCPUs. -It is important to note that guest operating system support is a determining factor when allocating resources. Allocating more resources than supported by the guest operating system may result in significant performance issues. +It is important to note that guest operating system support is a critical factor during resource allocation. An allocation exceeding the limits supported by the operating system can lead to significant performance issues. ### Memory Resource Management -Memory modifications are also performed cold. The following limits apply: +Memory modifications are also performed offline. The limits are as follows: - 1.5 TiB with memory snapshot support - 8 TiB without memory snapshot support -- 16 TiB (theoretical maximum, without security support, minus RAM allocated to Xen and the control domain) +- 16 TiB (theoretical limit without security support, minus RAM allocated to Xen and the control domain) -The actual usable memory may be limited by the guest operating system. Exceeding the limits supported by the guest OS may result in performance degradation. +The actually usable memory may be limited by the guest operating system. Exceeding the limits supported by the guest OS may result in performance degradation. ### Disk Management @@ -332,62 +350,61 @@ The actual usable memory may be limited by the guest operating system. Exceeding - Disks use the standard VHD format - The maximum number of virtual disks per virtual machine, including CD-ROM drives, is 24 -It is not possible to resize disks after they are created. To increase storage capacity, a new disk must be created. - -### Virtual Machine Tools +Disks cannot be resized once created. To expand storage capacity, it is necessary to create a new disk. -These tools are used to ensure optimal performance of virtual machines. When you need to perform an action requiring one of these tools, a message will appear on the Cloud Temple console. +### Tools for Virtual Machines -To install these tools, refer to the official Xen Server websites to obtain precise instructions based on your OS. +These tools are used to ensure optimal operation of virtual machines. When you need to perform an action that requires one of these tools, a message will appear on the Cloud Temple console. +To install these tools, you can consult the official XenServer websites to obtain detailed instructions based on your OS. #### Management Agent -The Management Agent is a component installed on each virtual machine. It enables the hypervisor to better manage the machine by providing access to more information and allows certain actions to be performed more cleanly. +The Management Agent is a component installed in each virtual machine. It enables the hypervisor to better manage the machine by providing access to additional information and allows certain operations to be executed more cleanly. #### PV Drivers (Paravirtualization Drivers) -PV Drivers are drivers installed within the virtual machine to enhance its performance. -Without these drivers, the machine still functions, but at a slower speed. Additionally, they enable certain advanced operations. -PV Drivers are natively included in most current Linux kernels. +PV Drivers are drivers installed in the virtual machine to improve its performance. +Without these drivers, the machine runs, but more slowly. Additionally, they enable certain advanced operations. +PV Drivers are natively installed on the majority of current Linux kernels. #### Tools -Tools are a set of software components that enhance the integration of the virtual machine with the virtualization infrastructure. +Tools are a set of software components that improve the integration of the virtual machine with the virtualization infrastructure. ## Catalogs -The catalog allows you to manage three essential types of items: +The catalog allows you to manage three essential types of elements: - Disk images (ISO) - Configuration templates - Pre-installed virtual machine templates -In the detailed view of a virtual machine template, you can access critical information such as location, number of disks, and number of network adapters. +In the detailed view of a virtual machine template, you can access crucial information such as the location, the number of disks, or the number of network adapters. -When the number of virtual disks is listed as 0, this indicates a configuration template without a preinstalled operating system, allowing you to deploy your own customized environment. +When the number of virtual disks is indicated as 0, it means that it is a configuration template without a pre-installed operating system, allowing you to deploy your own custom environment. ## Virtual Machine Replication -__Virtual Machine Replication__ from Cloud Temple ensures the protection and continuity of your critical data through automated copies of your environments to a separate availability zone. This feature, natively integrated into the Open Source IaaS offering, meets the most stringent requirements for business continuity and disaster recovery. +Cloud Temple's __virtual machine replication__ ensures the protection and continuity of your critical data through an automated copy of your environments to a distinct availability zone. This feature, natively integrated into the Open Source IaaS product, meets the strictest requirements for business continuity and disaster recovery. -### Automated and Secure Protection +### Automated and secure protection -Cloud Temple replication relies on a __SecNumCloud-certified__ infrastructure, ensuring: +Cloud Temple replication relies on a __SecNumCloud-certified infrastructure__, ensuring: -- __Asynchronous replication__: Continuous copying of your virtual machines without impacting production performance -- __Geographic separation__: Replicas stored in a different availability zone than the source -- __Full automation__: Fully automated process via the [Cloud Temple Console](../console/console.md) -- __Regulatory compliance__: Adherence to backup and business continuity requirements +- __Asynchronous replication__ : Continuous copying of your virtual machines without impacting production performance +- __Geographical separation__ : Storage of replicas in a different availability zone from the source +- __Full automation__ : Fully automated process via the [Cloud Temple Console](../console/console.md) +- __Regulatory compliance__ : Compliance with backup and business continuity requirements -### Benefits of Replication +### Advantages of Replication -| Benefit | Description | +| Advantage | Description | |-------------------------|------------------------------------------------------------------------------------------------------------------------------------------------| -| Business Continuity | Protection of your critical services in case of a major incident at the primary site. | -| Geographic Protection | Replication to a distinct availability zone, safeguarding against localized disasters. | -| Temporal Flexibility | Choose the replication interval according to your needs: from 1 minute to 24 hours. | -| Ease of Management | Fully integrated configuration and monitoring within the Cloud Temple Console. | -| SecNumCloud Compliance | Qualified infrastructure ensuring the highest level of security for your sensitive data. | +| Business Continuity | Protection of your critical services in the event of a major incident at the primary site. | +| Geographic Protection | Replication to a distinct availability zone, protecting against localized disasters. | +| Time Flexibility | Choose the replication interval according to your needs: from 1 minute to 24 hours. | +| Ease of Management | Configuration and monitoring fully integrated into the Temple Cloud Console. | +| SecNumCloud Compliance | Qualified infrastructure ensuring the highest level of security for your sensitive data. | ### Replication Configuration @@ -395,28 +412,28 @@ Cloud Temple replication relies on a __SecNumCloud-certified__ infrastructure, e Creating a replication policy defines the protection settings for your virtual machines: -- __Destination__: Select the target storage within the replication availability zone -- __Frequency__: Replication interval tailored to your recovery objectives (RPO) -- __Retention__: Number of recovery points to retain +- __Destination__ : Select the target storage in the replication availability zone +- __Frequency__ : Replication interval tailored to your recovery requirements (RPO) +- __Retention__ : Number of recovery points retained -#### Available intervals +#### Available Intervals -| Interval | Recommended usage | RPO (Maximum data loss) | -|-----------------------|---------------------------------------------|--------------------------| -| __1 to 59 minutes__ | Real-time critical applications | < 1 hour | -| __1 to 24 hours__ | Business applications and standard environments | < 24 hours | +| Interval | Recommended Use | RPO (Maximum Data Loss) | +|-------------------------|--------------------------------------------|-----------------------------| +| __1 to 59 minutes__ | Real-time critical applications | < 1 hour | +| __1 to 24 hours__ | Business applications and standard environments | < 24 hours | -#### Associating Virtual Machines +#### Virtual Machine Association Once the policy is created, you can associate your virtual machines to protect: -- __Single selection__: Select VMs from the Console interface -- __Automatic validation__: Compatibility and prerequisites verification -- __Immediate activation__: Automatic replication start after configuration +- __Simple selection__: Select VMs from the Console interface +- __Automatic validation__: Compatibility and prerequisites verification +- __Immediate activation__: Automatic replication startup after configuration ### Replica Management -#### Policy View +#### Policies View The Cloud Temple Console provides a centralized view of your replication policies with: @@ -425,53 +442,53 @@ The Cloud Temple Console provides a centralized view of your replication policie - Associated pool and storage - Available management actions -#### Replica View +#### Replicas View -The replica table allows you to visualize: +The replicas table allows you to view: -- Names of replicated virtual machines -- Source and target locations -- Associated replication policy -- Export of data in CSV format +- Name of replicated virtual machines +- Source and target location +- Associated replication policy +- Data export in CSV format ### Best practices #### Recommendations by workload type -- __Critical applications__: Replication every 1–30 minutes to minimize data loss -- __Business applications__: Hourly or bi-hourly replication depending on requirements -- __Development environments__: Daily replication typically sufficient +- __Critical applications__ : Replication every 1-30 minutes to minimize data loss +- __Business applications__ : Hourly or every two hours replication depending on requirements +- __Development environments__ : Daily replication is generally sufficient #### Policy Planning -- Create distinct policies according to the criticality of your applications -- Clearly name your policies to facilitate management -- Regularly check the status of your replicas from the console -- Document your replication strategy for your teams +- Create separate policies based on the criticality of your applications +- Name your policies clearly to facilitate management +- Regularly check the status of your replicas from the console +- Document your replication strategy for your teams __Important Note:__ -*Replication does not replace a full backup strategy. It serves as an essential complement to ensure business continuity in the event of a major incident at your primary site.* +*Replication does not replace a comprehensive backup strategy. It serves as an essential complement to ensure business continuity in the event of a major incident at your primary site.* -## High Availability +## High availability -High availability ensures the continuity of virtual machine (VM) services in the event of a physical host failure within an OpenIaaS pool. -With high availability (HA), each host in the pool regularly sends heartbeat signals to its peers via shared storage (Block Storage Heartbeat). If a host fails to respond for an extended period, it is considered failed. +High availability ensures service continuity for virtual machines (VMs) in the event of a physical host failure within an OpenIaaS pool. +With high availability (HA), each host in the pool regularly sends heartbeat signals to its peers via shared storage (Block Storage Heartbeat). In the event of a prolonged lack of response, the host is considered failed. -A designated Block Storage used as a heartbeat means it will serve as the basis for authenticating hosts that no longer respond. +A Block Storage designated as a heartbeat means it will serve as the basis for verifying the status of hosts that no longer respond. -To properly configure high availability within an OpenIaaS pool, it is mandatory to have __at least two hosts__ connected. +For high availability to be properly configured in an OpenIaaS pool, it is essential to have __at least two hosts__ connected. Each VM must be configured with a high availability restart priority level: #### Disabled -High availability is not configured. In the event of host failure, the virtual machine will not be restarted. + High availability is not configured. In the event of a host failure, the virtual machine will not be restarted. #### Restart -In the event of host failure, the virtual machine will be automatically restarted as soon as resources become available in the pool. Virtual machines configured in "restart" mode are prioritized over those configured in "best-effort" mode. + In the event of a host failure, the virtual machine will be automatically restarted as soon as resources are available in the pool. Virtual machines configured in "restart" mode take priority over those configured in "best-effort" mode. -#### Best-effort +#### Best-Effort -In the event of host failure, the virtual machine will be automatically restarted only if resources remain available after processing all virtual machines configured in "restart" mode. The "best-effort" mode performs only one attempt; therefore, if resources are insufficient, the virtual machine will not be restarted. + In the event of a host failure, the virtual machine will only be automatically restarted if resources remain available after processing all virtual machines configured in "restart" mode. The "Best-effort" mode makes only one attempt, so if resources are insufficient, the virtual machine will not be restarted. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/iaas_opensource.md b/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/iaas_opensource.md index 959fe8a0..e4c500dc 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/iaas_opensource.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/iaas_opensource.md @@ -2,24 +2,25 @@ title: Overview --- -The Cloud Temple Open Source IaaS product: a unique alliance between performance, security, and transparency. +The **Cloud Temple Open Source IaaS offering**: a unique alliance between performance, security, and transparency. -This offering ensures total control over your critical environments, while guaranteeing security, continuity, and regulatory compliance. With scalable resources and automated management, you benefit from a high-performance infrastructure tailored to your needs. Adopt the power of Open Source with the reliability and support of Cloud Temple. +This product guarantees complete control over your critical environments, while ensuring security, continuity, and regulatory compliance. +With scalable resources and automated management, you benefit from a high-performance infrastructure tailored to your needs. Embrace the power of Open Source with the reliability and support of Cloud Temple.

Concepts

-

Discover the basic principles essential to understanding and mastering our infrastructure.

+

Discover the fundamentals and essential principles to understand and master our infrastructure.

Explore concepts →

Quickstart

Get started quickly with our resources by following clear and simple instructions.

- Launch the Quickstart → + Launch Quickstart →
-
+

Tutorials

-

Learn step by step how to configure and use our services with detailed guides.

+

Learn step-by-step how to configure and use our services with detailed guides.

Discover tutorials →
@@ -27,22 +28,22 @@ This offering ensures total control over your critical environments, while guara ## Purchase Platforms
-

Are you a public sector actor? The IaaS Cloud Temple offering is available via:

+

Are you a public sector entity? The IaaS Cloud Temple product is accessible via:

@@ -50,4 +51,4 @@ This offering ensures total control over your critical environments, while guara Learn more → -
+
\ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/quickstart.md b/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/quickstart.md index fc160114..d4182e8c 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/quickstart.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/quickstart.md @@ -22,7 +22,7 @@ import openIaasVmConsoleClipboard from '@site/docs/iaas_opensource/images/open_i ### Virtual Machine Management -The interface for managing your virtual machines is available in the Console under the __'OpenIaaS'__ menu, located on the green bar on the left side of the screen. +The management interface for your virtual machines is available in the Console under the __'OpenIaaS'__ menu located on the green bar to the left of the screen. ### List of Virtual Machines @@ -30,7 +30,7 @@ In the __'Virtual Machines'__ section, you have access to the list of your virtu -For each virtual machine, you can access the following information: +You have access to the following information for each virtual machine: - Its name. - Its status (off, on). @@ -50,7 +50,7 @@ The following actions are available from this interface: -When you click the green dropdown arrow on the right side of the list for a virtual machine, you access all information related to that machine. +When you click the green dropdown arrow on the right side of the list for a virtual machine, you access all information regarding it. @@ -59,88 +59,89 @@ A quick action bar allows you to perform the following actions: - Power on the virtual machine. -- Power off the virtual machine. -- Restart the virtual machine. +- Power it off. +- Restart it. - Open the console. - Mount an ISO. - Unmount an ISO. -- Convert the virtual machine into a template. -- Move the virtual machine. -- Rename the virtual machine. -- Delete the virtual machine. +- Convert the virtual machine to a template. +- Move it. +- Rename it. +- Delete it. -In the __General__ tab, you find detailed information about your virtual machine, such as its physical location (AZ, Pool, Host), RAM, CPU, IP addresses, and other details. +In the '__General__' information tab, you will find detailed information about your virtual machine, such as its physical location (AZ, Pool, Host), RAM, CPU, IP addresses, and more. -The __Advanced__ tab allows you to view more specific information: +An '__Advanced__' tab allows you to view more specific information: -- Virtual machine UUID -- Guest tools -- Guest OS -- DVD drive +- Virtual machine UUID +- Guest tools +- Guest OS +- DVD drive -As well as modify certain settings such as: +As well as modify certain options such as: -- Boot order -- Secure Boot -- Automatic startup (not possible if no backup policy is associated with the VM) +- Boot order +- Secure Boot +- Auto-start (impossible si aucune politique de sauvegarde n'est associée à la VM) ### Virtual Machine Console -The console of a virtual machine is accessible from the list of virtual machines by clicking the __'Console'__ icon: +The virtual machine console is accessible from the virtual machines list by clicking the __'Console'__ icon: -A new browser tab opens, displaying the console of your machine, based on a VNC client: +A new browser tab opens and displays your machine's console, based on a VNC client: -Within the VNC menu, you can: +The VNC menu allows you to: -- request the transmission of specific key presses, -- force a keyboard mapping (in cases where your virtual machine uses a different keyboard layout than your web browser), -- open a text field that can be sent to the machine. This method replaces the previous non-functional clipboard, +- send specific keys, +- force a keyboard mapping (in case your virtual machine does not have the same keyboard layout as your web browser), +- open a text field that can be sent to the machine. This method replaces the old non-functional clipboard, - switch to full-screen mode, - change the window size (scaling). #### Keyboard Layout Support -Input entered in the console depends on the keyboard language of your web browser, the keyboard language of the virtual machine, and whether the 'enforce keyboard' option on the left side of the screen is enabled or not. +Input entered in the console depends on the keyboard language of your web browser, the keyboard language +of the virtual machine and whether the 'enforce keyboard' option on the left side of the screen is enabled or not. +Below is a summary of possible scenarios: -Here is a summary of the possible scenarios: +| Physical machine keyboard language (input) | Virtual machine keyboard language | 'enforce keyboard' option selected | Result (output) | +| ------------------------------------------------- | ----------------------------------------- | -------------------------------------- | ------------------------ | +| French | French | No | ✅ | +| French | French | Yes | Not recommended | +| French | English | No | English | +| French | English | Yes | ✅ | +| English | French | No | French | +| English | French | Yes | ✅ | +| English | English | No | ✅ | +| English | English | Yes | Not recommended | -| Physical Machine Keyboard Language (input) | Virtual Machine Keyboard Language | 'Enforce Keyboard' Option Selected | Result (output) | -| ------------------------------------------ | --------------------------------- | ---------------------------------- | ---------------------- | -| French | French | No | ✅ | -| French | French | Yes | Not recommended | -| French | English | No | English | -| French | English | Yes | ✅ | -| English | French | No | French | -| English | French | Yes | ✅ | -| English | English | No | ✅ | -| English | English | Yes | Not recommended | +__Note__ : -__Note__: +- If certain characters do not pass during manual input, you can try using the clipboard. -- If certain characters do not appear during manual input, you may try using the clipboard instead. +#### How the clipboard works -#### Clipboard Functionality - -This feature allows you to send an entire string of characters to your virtual machine. It is important to note that the "enforce keyboard" option affects how this string of characters is transmitted to your virtual machine. If you notice during console input that the "enforce keyboard" option is required, make sure to enable it before using the clipboard. -This functionality can be used to send a password, a command, or the content of a configuration file, for example: +This feature allows you to send an entire string of characters to your virtual machine. It is important to note that the "enforce keyboard" key affects how this string of characters +will be transmitted to your virtual machine. If you notice during console input that the "enforce keyboard" option is necessary, remember to enable it before using the clipboard. +This feature can be used to send a password, a command, or configuration file content, for example: -Upon clicking the "Paste" button, the content of your text field is sent to your virtual machine. +When clicking the "Paste" button, the content of your text field is sent to your virtual machine. ## Replication ### Access to Replication Management -The replication management interface is available in the Console under the __'OpenIaaS'__ > __'Replication'__ menu, located on the green bar on the left side of the screen. +The replication management interface is available in the Console in the __'OpenIaaS'__ > __'Replication'__ menu located on the green bar on the left side of the screen. @@ -155,7 +156,7 @@ To create a new policy, click the __'Add Policy'__ button. A form opens with the #### Step 1: General Information - __Name__ : Provide an explicit name for your policy -- __Frequency__ : Select the replication interval (1-59 minutes or 1-24 hours) +- __Frequency__ : Choose the replication interval (1-59 minutes or 1-24 hours) @@ -173,19 +174,19 @@ Verify the settings and click __'Add'__ to create the policy. ### Associating a VM with Replication -To protect a virtual machine, go to the details of your VM from the list of virtual machines. +To protect a virtual machine, access your VM details from the virtual machines list. -In the VM's detailed view, you will find a __'Replication'__ section: +In the VM detailed view, you will find a __'Replication'__ section: -Steps to associate a VM with replication: +The steps to associate a VM with replication: 1. Click on __'Configure a policy'__ -2. Select the desired replication policy from the dropdown list +2. Select the desired replication policy from the drop-down list 3. Confirm your selection -Replication will start automatically after confirmation. +Replication starts automatically after confirmation. ### Policy and Replica Management @@ -195,21 +196,21 @@ The __'Policies'__ tab allows you to view all your replication policies: -For each policy, you have access to the following information: +You have access to the following information for each policy: -- Its name -- Its replication frequency -- The destination availability zone -- The associated pool -- The block storage used +- Its name +- Its replication frequency +- The destination availability zone +- The associated pool +- The block storage used Available actions include: -- View details for each policy -- Modify parameters +- View details for each policy +- Modify settings - Delete an unused policy -#### Replica View +#### Replicas View The __'Replicas'__ tab displays all virtual machines currently being replicated: @@ -217,12 +218,12 @@ The __'Replicas'__ tab displays all virtual machines currently being replicated: You can view: -- The names of replicated virtual machines -- The source and target locations -- The associated replication policy +- The name of the replicated virtual machines +- The source and target locations +- The associated replication policy Available actions include: -- Export data to CSV format -- View replication details -- Manage replicas by policy +- Export data in CSV format +- View replication details +- Manage replicas by policy \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/create_vm.md b/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/create_vm.md index 6ea18cb5..7b9ec50e 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/create_vm.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/create_vm.md @@ -2,15 +2,15 @@ title: Create a virtual machine --- -This tutorial guides you through the different methods of creating a virtual machine in your OpenIaaS environment. +This tutorial guides you through the different methods for creating a virtual machine in your OpenIaaS environment. ## Introduction The Cloud Temple Console offers **three methods** to create an OpenIaaS virtual machine: -1. **From a Template**: Quick deployment from a preconfigured template -2. **XVA Import**: Import a virtual machine from an XVA file -3. **From Marketplace**: Deploy a certified image from the Cloud Temple catalog +1. **From a Template** : Rapid deployment from a preconfigured template +2. **Import XVA** : Import a virtual machine from an XVA file +3. **From the Marketplace** : Deploy a certified image from the Cloud Temple catalog ## Prerequisites @@ -19,33 +19,33 @@ The Cloud Temple Console offers **three methods** to create an OpenIaaS virtual - For XVA mode: have a valid XVA file - For Marketplace mode: have access to the Marketplace catalog -## Access to creation +## Access to Creation -From the **OpenIaaS** > **Virtual Machines** menu, click on the **New virtual machine** button. +From the **OpenIaaS** > **Virtual Machines** menu, click the **New Virtual Machine** button. -A window opens presenting the three available deployment methods. Select the desired method to continue. +A window opens displaying the three available deployment methods. Select the desired method to continue. --- -## Method 1: Deployment from a Template +## Method 1: Deployment from a Model -This method allows you to quickly create a virtual machine from a preconfigured template. +This method allows you to quickly create a virtual machine from a preconfigured model. -### Step 1: Pool and Template Selection +### Step 1: Pool and Model Selection -First select the **Pool** (availability zone) where you want to deploy your virtual machine, then choose the **Template** to use as a base. +First, select the **Pool** (availability zone) where you want to deploy your virtual machine, then choose the **Model** to use as a base. ### Step 2: General Information -Configure the basic parameters of your virtual machine: +Configure the basic settings of your virtual machine: -- **Name**: Unique name of the virtual machine (alphanumeric characters, hyphens, underscores, dots and spaces allowed) +- **Name**: Unique name for the virtual machine (alphanumeric characters, hyphens, underscores, periods, and spaces allowed) - **CPU**: Number of virtual cores (minimum 1) - **RAM**: Amount of memory with unit selection (MB, GB, TB) ### Step 3: Cloud Init (optional) -Cloud Init allows you to automate the initial configuration of your virtual machine at first boot. +Cloud Init allows you to automate the initial configuration of your virtual machine on first boot. You can configure: @@ -54,12 +54,12 @@ You can configure: - **Destroy After Boot**: Option to remove Cloud Init configuration after first boot :::info -This step is entirely optional. If you don't need Cloud Init, leave the default fields and proceed to the next step. +This step is entirely optional. If you do not need Cloud Init, leave the fields at their default values and proceed to the next step. ::: ### Step 4: Disk Configuration -Manage the virtual disks of your virtual machine. Template disks are automatically added and cannot be removed. +Manage the virtual disks of your virtual machine. The model's disks are automatically added and cannot be deleted. For each disk, configure: @@ -67,7 +67,7 @@ For each disk, configure: - **Capacity**: Disk size with unit selection (MB, GB, TB) - **Block Storage**: Destination storage -You can add up to 24 virtual disks in total. Click **Add disk** to create a new disk. +You can add up to 24 virtual disks in total. Click **Add a disk** to create a new disk. :::warning If you configure Cloud Init, at least one disk is required to store the configuration. @@ -90,62 +90,62 @@ Click **Add network adapter** to create a new interface. ### Step 6: High Availability -Configure the high availability level of your virtual machine. +Configure the high availability level for your virtual machine. :::tip -For more information on high availability configuration and the different modes available, consult the dedicated guide: [Managing high availability of a virtual machine](./high_availability/manage_vm) +For more information on configuring high availability and the different available modes, refer to the dedicated guide: [Managing high availability for a virtual machine](./high_availability/manage_vm) ::: -### Step 7: Summary and Validation +### Step 7: Summary and validation -Review your entire configuration before creating the virtual machine. +Review your complete configuration before creating the virtual machine. -The summary displays all configured parameters: +The summary displays all configured settings: - General information (name, CPU, RAM) -- Selected template +- Selected model - Cloud Init (if configured) - Disks - Network adapters - High availability -Click **Create** to launch the deployment of your virtual machine. +Click **Create** to start the deployment of your virtual machine. --- -## Method 2: Import from an XVA File +## Method 2: Import from an XVA file -This method allows you to import a virtual machine from an XVA format file (XenServer Virtual Appliance). +This method allows importing a virtual machine from an XVA file (XenServer Virtual Appliance). ### XVA Format Overview -The XVA format is the native export/import format of XCP-ng and XenServer. It contains a complete virtual machine with its disks and configuration. +The XVA format is the native export/import format for XCP-ng and XenServer. It contains a complete virtual machine along with its disks and configuration. -### Step 1: Virtual Machine Name +### Step 1: Virtual machine name -Define the name of your virtual machine. +Specify the name of your virtual machine. -The name must follow the same rules as for deployment from a template (alphanumeric characters, hyphens, underscores, dots and spaces). +The name must follow the same rules as deployment from a template (alphanumeric characters, hyphens, underscores, periods, and spaces). -### Step 2: XVA File Upload +### Step 2: Upload the XVA file Import your XVA file from your computer. :::info -The file must have the `.xva` extension. File names must contain only alphanumeric characters, hyphens, underscores and dots (no spaces). +The file must have the `.xva` extension. Filenames must only contain alphanumeric characters, hyphens, underscores, and periods (no spaces). ::: -Drag and drop your file into the designated area or click to select the file from your explorer. +Drag and drop your file into the designated area or click to select the file from your file explorer. ### Step 3: Storage Selection -Choose the destination storage for your imported virtual machine. +Select the destination storage for your imported virtual machine. -Select a Block Storage from the tree. The system automatically verifies that sufficient space is available to accommodate your XVA file. +Select a Block Storage from the tree. The system automatically verifies that the available space is sufficient to store your XVA file. -### Step 4: Summary and Validation +### Step 4: Summary and validation -Verify the information before launching the import. +Verify the information before starting the import. The summary displays: @@ -154,19 +154,19 @@ The summary displays: - The XVA file and its size - The destination storage -Click **Create** to launch the import of your virtual machine. +Click **Create** to start the import of your virtual machine. -### About the skip_set_template Option +### About the skip_set_template option -When importing an XVA file, the `skip_set_template` option determines whether the import result will be a directly usable virtual machine or a template. This option is particularly used with automation tools like Packer. More information: [XCP-ng documentation](https://xcp-ng.org/blog/2024/02/22/using-packer-with-xcp-ng/). +When importing an XVA file, the `skip_set_template` option determines whether the import result will be a ready-to-use virtual machine or a template. This option is particularly used with automation tools such as Packer. For more information: [XCP-ng documentation](https://xcp-ng.org/blog/2024/02/22/using-packer-with-xcp-ng/). --- -## Method 3: Deployment from Marketplace +## Method 3: Deployment from the Marketplace -The Cloud Temple Marketplace offers certified and ready-to-use virtual machine images. +Cloud Temple Marketplace offers certified and ready-to-use virtual machine images. -### Marketplace Image Selection +### Select a Marketplace Image Browse the catalog of images available for OpenIaaS. @@ -174,44 +174,44 @@ Only images compatible with the OpenIaaS platform are displayed. ### Virtual Machine Configuration -Configuration from Marketplace follows a similar process to deployment from a template, with some specificities: +Configuration from the Marketplace follows a process similar to deployment from a template, with a few specifics: -- System characteristics (OS, CPU, RAM) are predefined by the Marketplace image +- System specifications (OS, CPU, RAM) are predefined by the Marketplace image - You can customize the VM name - Cloud Init is available for initial configuration - Network mapping allows you to associate the image's network interfaces with your networks :::tip -For a detailed guide on Marketplace deployment, consult the dedicated tutorial: [Deploy an image on OpenIaaS](../../marketplace/tutorials/deploy_openiaas) +For a detailed guide on Marketplace deployment, refer to the dedicated tutorial: [Deploy an image on OpenIaaS](../../marketplace/tutorials/deploy_openiaas) ::: --- -## Best Practices +## Best practices -### Choosing the Deployment Method +### Deployment method selection -- **Template**: Ideal for standard and repetitive deployments within your organization -- **XVA**: Recommended for migrating existing VMs or using custom images -- **Marketplace**: Perfect for quickly starting with certified and maintained images +- **Model** : Ideal for standard and repeatable deployments within your organization +- **XVA** : Recommended for migrating existing VMs or using custom images +- **Marketplace** : Perfect for quickly getting started with certified and maintained images ### Resource Configuration -- **CPU and RAM**: Size according to the actual needs of your workload -- **Disks**: Plan a growth margin to avoid future resizing +- **CPU and RAM** : Size according to the actual requirements of your workload +- **Disks** : Allow for a growth margin to avoid future resizing -### High Availability +### High availability - Enable **Restart** mode for critical applications - Use **Best-Effort** for less critical environments ### Cloud Init -- Use Cloud Init to standardize the configuration of your VMs -- Document your Cloud Init configurations to facilitate their reuse -- Test your configurations on test VMs before production deployment +- Use Cloud Init to standardize your VM configurations +- Document your Cloud Init configurations to facilitate reuse +- Test your configurations on test VMs before deploying to production ### Security - Use explicit names to facilitate identification and management -- Plan a backup strategy from the creation of the VM +- Plan a backup strategy from the moment the VM is created \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/high_availability/manage_vm.md b/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/high_availability/manage_vm.md index 8bdb2818..44e19e0e 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/high_availability/manage_vm.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/high_availability/manage_vm.md @@ -1,5 +1,7 @@ + + --- -title: Managing a Virtual Machine +title: Virtual Machine Management --- import open_iaas_vm_ha_enable from '@site/docs/iaas_opensource/tutorials/images/open_iaas_vm_ha_enable.png' import open_iaas_vm_ha_how_to_find from '@site/docs/iaas_opensource/tutorials/images/open_iaas_vm_ha_how_to_find.png' @@ -9,7 +11,7 @@ import open_iaas_vm_ha_errors from '@site/docs/iaas_opensource/tutorials/images/ import open_iaas_vm_ha_warning from '@site/docs/iaas_opensource/tutorials/images/open_iaas_vm_ha_warning.png' In addition to pool management, virtual machines must also be configured. -To view the virtual machine configuration, go to the advanced options: +To view the virtual machine configuration, simply navigate to the advanced options: To modify this configuration: @@ -19,6 +21,6 @@ To modify this configuration: To view all virtual machines without high availability configuration: -To view all virtual machines that can prevent high availability activation on the pool: +To view all virtual machines that could prevent high availability activation on the pool: - + \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/concepts.md b/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/concepts.md index df0645ac..e0744b21 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/concepts.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/concepts.md @@ -2,489 +2,541 @@ title: Concepts --- -Cloud Temple's __IaaS (Infrastructure as a Service)__ offering is designed to meet the critical needs of business continuity and disaster recovery, with a particular focus on demanding sectors such as industry, banking, and insurance. Built on cutting-edge technologies, this infrastructure ensures maximum availability and optimal performance for your critical workloads. +Cloud Temple's __IaaS (Infrastructure As A Service)__ offering is designed to meet critical business continuity and disaster recovery needs, with a particular focus on demanding sectors such as industry, banking, and insurance. Built on cutting-edge technologies, this infrastructure ensures maximum availability and optimal performance for your critical workloads. -## A Trusted Technology Platform +## A trusted technological platform -Cloud Temple's IaaS platform is built on internationally recognized technology partners: +Cloud Temple's IaaS platform relies on internationally renowned technology partners: - Compute: __CISCO UCS__. - Storage: __IBM Spectrum Virtualize__, __IBM FlashSystem__ for block storage. -- Networking: __JUNIPER__. +- Network: __JUNIPER__. - Virtualization: __VMware__, providing a reliable and proven foundation for managing your cloud environments. - Backup: __IBM Spectrum Protect Plus__, for backup orchestration and storage. -This architecture is based on the __VersaStack__ model, a collaboration between Cisco and IBM, ensuring broad compatibility with leading software vendors. +This architecture is based on the __VersaStack__ model, a partnership between Cisco and IBM, ensuring extensive compatibility with major software vendors. -## A dedicated and automated infrastructure +## Dedicated and automated infrastructure -Although fully automated through APIs and a Terraform provider, Cloud Temple's IaaS offering provides a unique infrastructure: +Although fully automated via APIs and a Terraform provider, Cloud Temple's IaaS product offers a unique infrastructure: -- __Dedicated resources__: Compute blades, storage volumes, and software stacks (virtualization, backup, firewalling, etc.) are never shared among clients. -- __Maximum predictability__: You control virtualization rates, IOPS pressure on storage, and benefit from clear, consumption-based monthly billing. +- __Dedicated resources__: Compute blades, storage volumes, and software stacks (virtualization, backup, firewalling, etc.) are never shared among customers. +- __Maximum predictability__: You control virtualization ratios, IOPS load on storage, and benefit from clear, monthly consumption-based billing. -The platform is certified __SecNumCloud__ by the [ANSSI](https://www.ssi.gouv.fr/), ensuring a high level of automation and security. +The platform is certified __SecNumCloud__ by [ANSSI](https://www.ssi.gouv.fr/), ensuring a high level of automation and security. -## Key Features +## Key features -- Dedicated and on-demand computing resources (CPU, RAM). +- Dedicated and on-demand compute resources (CPU, RAM). - On-demand storage (multiple classes available). -- Networking resources (Internet, private networks). +- Network resources (Internet, private networks). - Cross-backups with configurable retention. - Asynchronous replication for storage or virtual machines. - Management via the [Console](../console/console.md) or in Infrastructure as Code mode using APIs and the Terraform provider. -## Benefits +## Advantages -| Benefit | Description | +| Advantage | Description | |---------------------|------------------------------------------------------------------------------------------------------------------------------------------------| -| Digital Trust | Data hosting in France and GDPR compliance. | -| Security | Highly secure platform, certified __SecNumCloud__, __HDS__ (Health Data Hosting), __ISO 27001__, and __ISAE 3402 Type II__. | -| High Availability | Platform availability rate of 99.99%, measured monthly, including maintenance windows. | -| Resilience | Business continuity and disaster recovery plans implemented as needed. | -| Automation | Fully automated platform designed to integrate into a digital transformation program. | -| On Demand | Resources available on demand. | +| Digital Trust | Data hosting in France and GDPR compliance. | +| Security | Highly secure platform, certified __SecNumCloud__, __HDS__ (Health Data Hosting), __ISO 27001__ and __ISAE 3402 type II__. | +| High Availability | Platform availability rate of 99.99%, measured monthly, maintenance windows included. | +| Resilience | Implementation of business continuity or disaster recovery plans as needed. | +| Automation | Fully automated platform designed to integrate into a digital transformation program. | +| On Demand | Resources available on demand. | ## Regions and Availability Zones -The VMware IaaS product is deployed within an availability zone. +The VMware IaaS product is deployed in an availability zone. An [availability zone](../additional_content/concepts_az.md) is part of a [region](../additional_content/concepts_regional.md). -This deployment model allows you to choose the location of clusters and enables their distribution across different availability zones (AZ). -This provides better load distribution, maximizes redundancy, and simplifies the implementation of a disaster recovery plan (DRP) in the event of an incident. +This deployment type allows you to choose the location of the clusters and distribute them across different availability zones (AZ). +This provides better load distribution, maximizes redundancy, and facilitates the implementation of a disaster recovery plan (DRP) in the event of an incident. + +--- ## Compute -The blades provided by Cloud Temple are of type __CISCO UCS B200__ or __CISCO UCS X210c__. They are fully managed by Cloud Temple (firmware, OS version, etc.) through the Cloud Temple console. +The blades provided by Cloud Temple are of the __CISCO UCS B200__ or __CISCO UCS X210c__ type. They are fully managed by Cloud Temple (firmware, OS version, ...) via the Cloud Temple console. -Several categories of compute blades are available in the catalog to support your workloads (virtualization, containerization, etc.). These blades feature different characteristics and performance levels to best meet your needs. The compute blade catalog is regularly updated. +Several categories of compute blades are available in the catalog to support your workloads (Virtualization, Containerization, ...). +These offer different specifications and performance levels to best meet your needs. The compute blade catalog is regularly updated. -When using with a virtualization offering, a hypervisor cluster must consist exclusively of compute blades of the same type (mixing different blade types within a single cluster is not allowed). +When used with a virtualization offering, a hypervisor cluster consists solely of compute blades of the same type (it is not possible to mix blades of different types within the same cluster). -| Reference | RAM __(1)__ | Frequency __(2)__ | Number of Cores / Threads | Connectivity __(3)__ | GPU __(4)__ | SKU for VMware Offering | -| --------------------- | ------------ | ----------------------------------------- | -------------------------- | -------------------- | -------------------- | ------------------------------- | -| ECO v3 Blade | 384 GB | 2.20/3.0 GHz (Silver 4114 or equivalent) | 20 / 40 threads | 2 × 10 Gbit/s | | csp:fr1:iaas:vmware:eco:v3 | -| STANDARD v3 Blade | 384 GB | 2.40/3.4 GHz (Silver 4314 or equivalent) | 32 / 64 threads | 2 × 25 Gbit/s | | csp:fr1:iaas:vmware:standard:v3 | -| ADVANCE v3 Blade | 768 GB | 2.80/3.5 GHz (Gold 6342 or equivalent) | 48 / 96 threads | 2 × 25 Gbit/s | | csp:fr1:iaas:vmware:advance:v3 | -| PERFORMANCE 1 v3 Blade| 384 GB | 3.20/3.6 GHz (Xeon E-53I5Y or equivalent) | 16 / 32 threads | 2 × 25 Gbit/s | | csp:fr1:iaas:vmware:perf1:v3 | -| PERFORMANCE 2 v3 Blade| 768 GB | 3.00/3.6 GHz (Gold 6354 or equivalent) | 36 / 72 threads | 2 × 25 Gbit/s | | csp:fr1:iaas:vmware:perf2:v3 | -| PERFORMANCE 3 v3 Blade| 1536 GB | 2.60/3.5 GHz (Gold 6348 or equivalent) | 56 / 112 threads | 2 × 25 Gbit/s | | csp:fr1:iaas:vmware:perf3:v3 | -| PERFORMANCE 4 v3 Blade| 512 GB | 2.50/4.1 GHz (Intel 6426Y or equivalent) | 32 / 64 threads | 2 × 25 Gbit/s | 2 × NVIDIA L40S 48GB | csp:fr1:iaas:vmware:perf4:v3 | +| Reference | RAM __(1)__ | Frequency __(2)__ | Number of cores / threads | Connectivity __(3)__ | GPU __(4)__ | SKU for the VMware offering | +| --------------------- | ------------ | ----------------------------------------- | -------------------------- | -------------------- | -------------------- | ----------------------------------- | +| ECO v3 Blade | 384 GB | 2.20/3.0 GHz (Silver 4114 or equivalent) | 20 / 40 threads | 2 x 10 Gbit/s | | csp:fr1:iaas:vmware:eco:v3 | +| STANDARD v3 Blade | 384 GB | 2.40/3.4 GHz (Silver 4314 or equivalent) | 32 / 64 threads | 2 x 25 Gbit/s | | csp:fr1:iaas:vmware:standard:v3 | +| ADVANCE v3 Blade | 768 GB | 2.80/3.5 GHz (Gold 6342 or equivalent) | 48 / 96 threads | 2 x 25 Gbit/s | | csp:fr1:iaas:vmware:advance:v3 | +| PERFORMANCE 1 v3 Blade| 384 GB | 3.20/3.6 GHz (Xeon E-53I5Y or equivalent) | 16 / 32 threads | 2 x 25 Gbit/s | | csp:fr1:iaas:vmware:perf1:v3 | +| PERFORMANCE 2 v3 Blade| 768 GB | 3.00/3.6 GHz (Gold 6354 or equivalent) | 36 / 72 threads | 2 x 25 Gbit/s | | csp:fr1:iaas:vmware:perf2:v3 | +| PERFORMANCE 3 v3 Blade| 1536 GB | 2.60/3.5 GHz (Gold 6348 or equivalent) | 56 / 112 threads | 2 x 25 Gbit/s | | csp:fr1:iaas:vmware:perf3:v3 | +| PERFORMANCE 4 v3 Blade| 512 GB | 2.50/4.1 GHz (Intel 6426Y or equivalent) | 32 / 64 threads | 2 x 25 Gbit/s | 2 x NVIDIA L40S 48GB | csp:fr1:iaas:vmware:perf4:v3 | -__Notes__: +__Notes__ : -- __(1)__ The memory amount delivered corresponds to the physical memory available on the blades. It is not possible to change the physical memory capacity of a blade. +- __(1)__ The delivered memory quantity is the physical memory available on the blades. It is not possible to change the physical memory quantity of a blade. -- __(2)__ Minimum base frequency / turbo frequency, expressed in GHz. By default, processors are configured in the BIOS for maximum performance. +- __(2)__ Base frequency / turbo frequency, expressed in GHz. By default, processors are configured for maximum performance at the BIOS level. -- __(3)__ Physical connectivity is shared between network and block storage access, as the underlying Cisco platform is converged. +- __(3)__ Physical connectivity is shared for network and block storage access, as the CISCO platform is converged. -- __(4)__ The available GPU offering is continuously evolving. As of May 1, 2024, the offering is based on NVIDIA LOVELACE L40S GPUs. By default, the PERF4 blade is delivered with two 48 GB L40S GPUs. Contact support for further details if needed. +- __(4)__ The available GPU offerings are constantly evolving. As of May 1, 2024, the offering is based on NVIDIA LOVELACE L40S GPUs. By default, the PERF4 blade is delivered with 2 L40S cards with 48 GB of RAM. Contact support for further details if necessary. -The compute offering availability is 99.99%, calculated monthly, including maintenance windows. Eligibility for SLA non-compliance claims requires the creation of an incident ticket. You must also have at least two hosts per cluster and enable the __High Availability__ (HA) feature. -This feature allows your architecture to automatically restart your virtual machines on the second hypervisor in case of failure. If a zone of availability contains only one hypervisor, automatic restart is not possible. +The compute offering availability is 99.99%, calculated monthly, including maintenance windows. Eligibility for SLA non-compliance is subject to +creating an incident ticket. You must also have at least two hosts per cluster and enable the __High Availability__ (HA) feature. +This feature allows your architecture to automatically restart your virtual machines on the second hypervisor. +In the event that an availability zone contains only one hypervisor, automatic restart is not possible. ## Network -The networking service on Cloud Temple's IaaS platform is built on a VPLS-based network infrastructure, providing flexible and high-performance segmentation to meet client requirements for connectivity and network isolation. +The network service on the Cloud Temple IaaS platform relies on a network infrastructure based on VPLS technology, offering flexible and high-performance segmentation to meet customers' needs for connectivity and network isolation. -### Layer 2 VLANs +### Level 2 VLANs -The VLANs provided in the IaaS offering are __layer 2__ types, delivering full network isolation and configurable adaptability according to your needs. +The VLANs provided in the IaaS product are of the __level 2__ type, offering complete network isolation and adaptable configuration according to requirements. -#### Key Concepts +#### Key concepts -- __Cross-cluster and Availability Zone (AZ) sharing__: - - VLANs can be shared across different AZs and clusters belonging to the same tenant. -- __Cross-tenant propagation__: - - VLANs can be propagated across multiple tenants within the same organization, enabling internal communications. +- __Sharing between clusters and Availability Zones (AZ)__: + - VLANs can be shared across different AZs and different clusters belonging to the same tenant. +- __Inter-tenant propagation__: + - VLANs can be propagated across multiple tenants belonging to the same organization, facilitating internal communications. + +--- ### Network Performance The network infrastructure ensures low latency for optimal performance: -- __Intra-AZ latency__: Less than __3 ms__. -- __Inter-AZ latency__: Less than __5 ms__. +- __Intra-AZ Latency__ : Less than __3 ms__. +- __Inter-AZ Latency__ : Less than __5 ms__. + +--- ### Key Points -1. __Flexibility__: VLANs can be configured to adapt to multi-cluster and multi-tenant environments. -2. __High performance__: Minimal latency ensures fast and efficient communication between availability zones. -3. __Isolation and security__: Layer 2 VLANs provide strict network segmentation to protect data and traffic. +1. __Flexibility__: VLANs can be configured to adapt to multi-cluster and multi-tenant environments. +2. __High Performance__: Minimal latency ensures fast and efficient communication between availability zones. +3. __Isolation and Security__: Level 2 VLANs provide strict network segmentation to protect data and traffic. + +--- ## Block Storage -Cloud Temple offers several classes of block storage based on [IBM FlashSystem](https://www.ibm.com/flashsystem/) and [IBM SVC](https://www.ibm.com/products/san-volume-controller) technology. +Cloud Temple offers several storage classes based on [IBM FlashSystem](https://www.ibm.com/flashsystem/) technology +and [IBM SVC](https://www.ibm.com/products/san-volume-controller). -The __IBM SVC__ technology enables delivering the required performance levels for our clients' environments, thanks to the large amount of embedded memory cache in the controllers and the ability to distribute a server's total IOPS across multiple SANs. +The __IBM SVC__ technology enables delivering the performance level required for our clients' environments thanks to the large +amount of embedded memory cache in the controllers and the ability to distribute all IOPS +from a server across multiple SANs. -It is also used to enable replication of your block storage LUNs across availability zones or to facilitate maintenance operations on storage arrays. +It is also used to enable the replication of your block storage LUNs between +availability zones or facilitate maintenance on storage arrays. -The storage is primarily NVMe flash-based, dedicated to professional workloads. The drives are used by the storage arrays in [__'Distributed RAID 6'__](https://www.ibm.com/docs/en/flashsystem-5x00/8.6.x?topic=configurations-distributed-raid-array-properties). +The storage is primarily NVME FLASH storage dedicated to enterprise workloads. +The disks are used by the storage arrays in [__'Distributed Raid 6'__](https://www.ibm.com/docs/en/flashsystem-5x00/8.6.x?topic=configurations-distributed-raid-array-properties). -### Storage Block Security and Encryption +### Block Storage Security and Encryption -To ensure the confidentiality of your data at rest, our entire block storage infrastructure integrates a robust hardware-based encryption solution. +To ensure the confidentiality of your data at rest, our entire block storage infrastructure integrates robust hardware encryption. - __Encryption Type__: Data is encrypted directly on the disks (`Data At Rest`) using the __XTS-AES 256__ algorithm. -- __Compliance__: This encryption method complies with the __FIPS 140-2__ standard, ensuring a high level of validated security. -- __Operation__: Encryption is applied at the time data is written to the physical storage medium. +- __Compliance__: This encryption method complies with the __FIPS 140-2__ standard, ensuring a validated high level of security. +- __Operation__: Encryption is applied when data is written to the physical storage medium. -:::warning[Attention Point on Replication] -It is important to note that this encryption protects data stored on disks. It is not active "on-the-fly," meaning data is not encrypted during storage replication operations between availability zones. Security of transfers is ensured through dedicated, secure communication channels. +:::warning[Note on Replication] +It is important to note that this encryption protects data stored on disks. It is not active "on-the-fly", which means data is not encrypted during storage replication operations between availability zones. Transfer security is ensured by dedicated and secure communication channels. ::: -The __'Mass Storage'__ storage class offers mechanical disks for archival needs in an economically efficient context. Several performance tiers are available: +The __'Mass Storage'__ storage class offers mechanical disks for archival needs in an economically efficient context. Several performance levels are available: -| Reference | Unit | Max IOPS Ceiling / LUN | Max Bandwidth / LUN | SKU | -|-----------------------------------|-------|----------------------------------------------| -| FLASH - Essential - 500 IOPS/To | 1 GiB | csp:(region):iaas:storage:bloc:live:v1 | -| FLASH - Standard - 1500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:medium:v1 | -| FLASH - Premium - 3000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:premium:v1 | -| FLASH - Enterprise - 7500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:enterprise:v1 | -| FLASH - Ultra - 15000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:ultra:v1 | -| MASS STORAGE - Archival | 1 TiB | csp:(region):iaas:storage:bloc:mass:v1 | +| Reference | Unit | Max IOPS Ceiling / LUN | Max Bandwidth / LUN | SKU | +|-----------------------------------|------|------------------------|---------------------|----------------------------------------------| +| FLASH - Essential - 500 IOPS/To | 1 Gio| 10 000 IOPS | 512 Mo/s | csp:(region):iaas:storage:bloc:live:v1 | +| FLASH - Standard - 1500 IOPS/To | 1 Gio| 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:medium:v1 | +| FLASH - Premium - 3000 IOPS/To | 1 Gio| 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:premium:v1 | +| FLASH - Enterprise - 7500 IOPS/To | 1 Gio| 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:enterprise:v1 | +| FLASH - Ultra - 15000 IOPS/To | 1 Gio| 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:ultra:v1 | +| MASS STORAGE - Archival | 1 Tio| Not guaranteed | Not guaranteed | csp:(region):iaas:storage:bloc:mass:v1 | *__Note__ :* -- *Actual performance for a storage class is tied to the volume actually ordered, based on the "IOPS/To" metric, meaning "maximum IOPS per allocated terabyte",* +- *The actual performance of a LUN (Datastore) increases linearly based on the allocated capacity (according to its IOPS/To ratio), __up to the absolute hardware ceiling defined above__.* -> *Thus, a 0.5 TiB volume in the 'Standard' performance class will have an IOPS limit capped at 750 IOPS,* -> *Similarly, a 10 TiB volume in the 'Ultra' performance class will have an IOPS limit of 150,000 IOPS,* +> *For example, a 0.5 To volume in the 'Standard' class will benefit from 750 IOPS.* +> *Conversely, a 10 To volume in the 'Ultra' class (theoretically 150 000 IOPS) will be capped by the absolute physical limit and will plateau at 30 000 IOPS and 1024 Mo/s.* -- *The IOPS limit is applied per volume, thus per Datastore in a VMware environment,* +- *These limitations (IOPS and bandwidth) apply at the storage volume level, i.e., at the Datastore level for a VMware environment,* - *Storage availability is 99.99% measured monthly, including maintenance windows,* - *There are no restrictions or quotas on read or write operations,* -- *There is no billing based on IOPS,* -- *No performance commitment is provided for the __'Mass Storage'__ class,* -- *The minimum size for a storage LUN is 500 GiB,* -- *When using storage replication, performance must be identical across both availability zones,* -- *No intelligent optimization mechanisms such as compression or deduplication are implemented: when you reserve 10 TiB of storage, you physically have 10 TiB of usable storage deployed on IBM machines.* +- *There is no IOPS-based billing,* +- *There is no performance commitment for the __'Mass Storage'__ class,* +- *The minimum size for a storage LUN is 500 Gio,* +- *When using a storage replication mechanism, performance must be identical across both availability zones,* +- *No "intelligent" optimization mechanisms such as compression or deduplication are implemented: when you reserve 10 Tio of storage, you physically have 10 Tio of usable storage deployed on the IBM machines.* - *Storage LUNs are dedicated to the client environment.* -### Usage within the VMware Compute Offering +### Usage within the VMware compute offering -Within the context of using block storage in the form of a datastore in Cloud Temple’s VMware compute offering, __you must take several important considerations into account__: +When using block storage as a datastore in Cloud Temple's VMware compute offering, __you must consider several important factors__ : -1. __Swap file (.VSWP) creation during VM startup__: When a virtual machine starts up, it creates a .VSWP file equal in size to its allocated memory on disk. Therefore, to successfully start your virtual machines, you must always have free space in your datastore equivalent to the total memory size of all your virtual machines. For example, if your datastore has 1 TiB of block storage and you want to start 10 virtual machines each with 64 GiB of memory, 640 GiB of disk space will be required. Without sufficient free space, VM startup will be limited by the available capacity to create swap files. +1. __Swap file (.VSWP) during virtual machine startup__ : When a virtual machine starts, it creates a .VSWP file on disk equal to its memory size. Therefore, to be able to start your virtual machines, you must always have free space in your datastore equivalent to the sum of the memory sizes of your virtual machines. For example, if your datastore has 1 TiB of block storage and you want to start 10 virtual machines with 64 GiB of memory each, 640 GiB of disk space will be required. Without this space, machine startup will be limited by the available capacity to create swap files. -2. __Free space required for backup snapshots__: The backup service uses instant snapshots. You must therefore always have sufficient free space to allow the creation of a snapshot during a VM backup. The size of the snapshot depends on the amount of write activity from the virtual machine and the time required to perform the backup. Generally, it is recommended to maintain at least 10% free space for this operation. +2. __Free space for backup snapshots__ : The backup service uses snapshots (snapshots). Therefore, you must always have sufficient free space to allow the creation of a snapshot when backing up a virtual machine. The size of the snapshot depends on the virtual machine's write volume and the time required to perform the backup. As a general rule, it is recommended to maintain at least 10% free space for this operation. -3. __Management of dynamic disks__: Exercise caution when using dynamic disks. If you do not properly manage their growth, a lack of physical space can result in the virtual machine freezing (in the best case), or crashing with data corruption (in the worst case). It is crucial to closely monitor available space on your datastores when using this type of disk. +3. __Dynamic disk management__ : Be cautious when using dynamic disks. If you do not control their growth, a lack of physical space can cause the virtual machine to freeze (freeze) in the best-case scenario, or crash with corruption in the worst-case scenario. It is crucial to closely monitor the available space on your datastores when using this type of disk. -Proactive disk space management is essential to ensure the proper operation of your virtual machines and the reliability of backups. Always ensure you have sufficient space available for swap files, snapshots, and dynamic disk growth. +Proactive disk space management is essential to ensure the proper functioning of your virtual machines and the reliability of backups. Always ensure you have the necessary space for swap files, snapshots, and the growth of dynamic disks. ## Backup Storage -The dedicated storage for backing up your virtual machines is automatically provisioned by the platform, up to the quota ordered. +The storage dedicated to backing up your virtual machines is auto-provisioned by the platform within the limits of the ordered quota. -| Reference | Unit | Max IOPS Ceiling / LUN | Max Bandwidth / LUN | SKU | +| Reference | Unit | SKU | |--------------------------|-------|------------------------------------------| | MASS STORAGE - Archiving | 1 TiB | csp:(region):iaas:storage:bloc:backup:v1 | -### Block Storage Replication +### Block-level storage replication #### Principles -To enable the implementation of your business continuity plans, when it is not possible to maintain business continuity using application-level mechanisms and virtual machine replication is not suitable, Cloud Temple offers __block-level storage replication mechanisms between availability zones within a region__. +To enable the implementation of your disaster recovery plans, when it is not possible to maintain business continuity using application-level mechanisms and virtual machine replication is not suitable, Cloud Temple offers __block-level storage replication mechanisms between availability zones within a region__. -These replication mechanisms are applied to the storage LUNs of your environments, complementing backup solutions. The decision to use a replication mechanism for a given environment __depends on multiple factors, including its criticality, acceptable data loss tolerance, and performance requirements for the application__. +These replication mechanisms are applied to the storage LUNs of your environments, in addition to backups. +The decision to use a replication mechanism for an environment __depends on numerous factors, including its criticality, the acceptable data loss, or the target performance__ for the application. -Cloud Temple provides two types of replication mechanisms deployed in an active/passive configuration: +Cloud Temple offers two types of mechanisms deployed in an active/passive configuration: -- __Asynchronous replication__ (or __'Global Mirror'__): *The __'Global Mirror'__ function provides an asynchronous copy process. When a host writes to the primary volume, the confirmation of the I/O completion is received before the write operation finishes on the secondary volume. If a failover operation is initiated, the application must recover and apply all updates that were not confirmed on the secondary volume. If I/O operations on the primary volume are paused briefly, the secondary volume can become an exact match of the primary volume. This function is comparable to a continuous backup process in which the latest updates are always missing. When using Global Mirror for disaster recovery purposes, you must consider how you intend to handle these missing updates.* +- __Asynchronous__ replication (or __'Global Mirror'__): *The __'Global Mirror'__ function provides an asynchronous copy process. +When a host writes to the primary volume, the I/O completion acknowledgment is received before the write operation +completes for the copy to the secondary volume. If a failover operation is initiated, the application +must recover and apply all updates that have not been confirmed on the secondary volume. +If I/O operations on the primary volume are paused for a short period, +the secondary volume can become an exact match of the primary volume. This function is comparable to a continuous +backup process in which the latest updates are always missing. +When using Global Mirror for disaster recovery purposes, you must consider how you want to handle these missing updates.* -- __Synchronous replication__ (or __'Metro Mirror'__): *The __'Metro Mirror'__ function is a type of remote copy that creates a synchronous copy of data from a primary volume to a secondary volume. With synchronous copies, host applications write to the primary volume but do not receive confirmation that the write operation is complete until the data has been written to the secondary volume. This ensures that both volumes contain identical data when the copy operation completes. After the initial copy operation finishes, the Metro Mirror function maintains a fully synchronized copy of the source data at the target site at all times. __As of January 1, 2024, the 'Metro Mirror' function is no longer available for sale.__* +- __Synchronous__ replication (or __'Metro Mirror'__): *The __'Metro Mirror'__ function is a type of remote copy that creates a synchronous copy +of data from a primary volume to a secondary volume. With synchronous copies, host applications write to the primary volume but do not receive confirmation +that the write operation is complete until the data is written to the secondary volume. This ensures that both volumes contain identical data when +the copy operation is complete. After the initial copy operation is complete, the Metro Mirror function +continuously maintains a fully synchronized copy of the source data on the target site. __As of January 1, 2024, the 'Metro Mirror' function is no longer offered for sale.__* -An "active" or "primary" site and a "passive" or "standby" site are then defined. The business continuity plan is activated in the event of a disaster or during a PRA test. The passive site then takes over from the active site. +An "active" or "primary" site and a "passive" or "standby" site are then defined. +The disaster recovery plan is activated in the event of a disaster or as part of a DR test request. +The passive site then takes over from the active site. #### Asynchronous Replication -When your workloads require short recovery times and application-level replication or virtual machine replication mechanisms are not acceptable or suitable, it is possible to replicate a SAN storage LUN between two Availability Zones within the same region. +When your workloads require short recovery time objectives and it is not acceptable +or suitable to use application replication / virtual machine replication mechanisms, +it is possible to replicate a SAN storage LUN between two availability zones within the same region. -This solution provides a __RPO of 15 minutes__ and an __RTO under 4 hours__. It enables much faster recovery than implementing a backup restoration process. +This product enables achieving an __RPO of 15min__ and an __RTO of less than 4H__. It allows for much faster recovery than +implementing a backup restoration. -In an asynchronously replicated storage volume (__Global Mirror__), the SAN virtualization controllers from both Availability Zones collaborate to perform write operations across both sites. The primary site does not wait for write acknowledgment from the secondary site. +In an asynchronous replication storage volume (__Global Mirror__), the SAN virtualization controllers of +both availability zones work together to perform write operations on both sites. +The master site does not wait for the write acknowledgment from the slave site. The steps of a write operation are as follows: -1. An hypervisor wishes to perform a __write operation on a Global-Mirror volume__: it sends its request to the SAN controller in its Availability Zone, -2. The local SAN controller requests the remote SAN controller to perform the write operation, -3. The local SAN controller does not wait for acknowledgment from the remote SAN and proceeds to perform the write locally, -4. It then sends the __acknowledgment__ back to the hypervisor that issued the request, -5. __Hypervisors at the remote site do not directly access the Global Mirror LUN__: a service request is required. +1. A hypervisor wishes to perform __a write operation on a Global-Mirror volume__: it sends its request to the SAN controller of its availability zone, +2. The local SAN controller requests the remote zone's SAN controller to perform the write operation, +3. the local SAN controller does not wait for the remote SAN's acknowledgment and performs the write locally, +4. It sends __acknowledgment__ to the hypervisor that issued the request, +5. __Hypervisors at the remote site do not directly access the Global Mirror LUN__: A service request is required. | SLA | Description | |-----------|---------------------------------------------------------------------------------------------------------------------------------------------------| -| RPO 15 min | In the event of a disaster at the primary datacenter, the maximum amount of data lost corresponds to at most the last 15 minutes of writes. | -| RTO < 4 h | In the event of a disaster at the primary datacenter, business continuity is guaranteed within 4 hours, depending on environment complexity. | +| RPO 15min | In the event of a disaster at the primary datacenter, the maximum amount of lost data corresponds to at most the last 15 minutes of writes | +| RTO < 4H | In the event of a disaster at the primary datacenter, business continuity recovery is guaranteed within 4 hours depending on environment complexity.| -In the event of a PRA activation, the Cloud Temple team performs a presentation operation of the __'Global Mirror'__ LUN to the remote hypervisors, enabling them to access the data. Therefore, this solution requires reserving compute resources and RAM at the 'standby' site to resume operations in case of disaster. +In the event of DR plan activation, the Cloud Temple team performs a LUN presentation operation for the __'Global Mirror' LUN__ to the remote hypervisors so they can access the data. Implementing this solution therefore requires having reserved compute and RAM resources at the 'standby' site to resume operations in case of a disaster. -Using this technology also requires doubling the disk space: the remote site must have exactly the same disk capacity as the local site. +Using this technology also requires doubling the disk space: it is necessary to have exactly the same amount of space on the remote site as on the local site. -This mechanism may impact application performance by up to 10%. __Only storage classes 500 IOPS/To, 1500 IOPS/To, and 3000 IOPS/To are compatible.__ +Using this mechanism may impact application performance by up to 10%. __Only storage classes 500 Iops/To, 1500 Iops/To, and 3000 Iops/TO are compatible.__ -| Reference | Unit | Max IOPS Ceiling / LUN | Max Bandwidth / LUN | SKU | +| Reference | Unit | SKU | |------------------------------------|--------|---------------------------------------------------| -| STORAGE - Global Replication SAN | 1 TiB | csp:(region):iaas:storage:licence:globalmirror:v1 | +| STORAGE - Global Replication SAN | 1 TiB | csp:(region):iaas:storage:licence:globalmirror:v1 | *__Note__*: -- *Since this offering is asynchronous, there is a possibility that some disk operations were not written to the remote site during a disaster. There may therefore be a risk to data consistency, which should be mitigated in the risk assessment of the business continuity plan.* -- *Block-level storage replication is transparent to virtual machines and applications.* -- *For this reason, it is important to prioritize application-level replication scenarios, or alternatively virtual machine replication.* -- *Compute and memory resources at the recovery site may be reduced to optimize costs, provided that a degraded operational state is acceptable for the business during the execution of the business continuity plan.* +- *Since the offering is asynchronous, it is possible during a disaster that some disk operations have not been written to the remote site. There may therefore be a risk to data consistency, which is mitigated in the risk analysis of the disaster recovery plan.* +- *Block storage replication is transparent to virtual machines and applications,* +- *In this regard, it is important to prioritize application replication scenarios or, alternatively, virtual machine replication,* +- *Compute and memory at the recovery site can be reduced to optimize costs if a degraded state is acceptable to the business during disaster recovery plan execution.* ## VMware Virtualization -The VMware Cloud Temple offering qualified SecNumCloud is based on the __VMware vSphere__ technology. +The VMware Cloud Temple virtualization offer, qualified under SecNumCloud, is based on __VMware vSphere__ technology. -The platform is managed automatically by Cloud Temple (security compliance maintenance, operational readiness maintenance, etc.). +The platform is managed automatically by Cloud Temple (security condition maintenance, operational readiness maintenance, ...). It can be controlled via the Console's graphical interface or through the associated APIs. -*__Note__*: *For security reasons related to the SecNumCloud qualification, -__the customer is not permitted to access the VMware virtualization platform directly__ (no direct access to vCenter, for example). -Indeed, the SecNumCloud qualification requires __complete segregation__ between the technical assets' management interfaces and the customer's interface (the Console).* +*__Note__*: *For security reasons related to the SecNumCloud qualification, +__the client is not allowed direct access to the VMware virtualization platform__ (no direct access to vCenter, in particular). +Indeed, the SecNumCloud qualification requires __total segregation__ between the technical asset management interfaces and the client interface (the Console).* -- The implemented products are VMware ESXi, VMware vCenter, and VMware Replication. -- *The virtualization offering's network does not use VMware NSX technology, but is instead managed physically using Juniper technology and the VPLS protocol.* -- *The storage does not use VMware vSAN technology, but exclusively IBM SANs over 32G Fiber Channel.* -- *No hidden optimization techniques are applied (compression, deduplication, etc.).* +- The products implemented are VMware ESXi, VMware vCenter, and VMware Replication. +- *The virtualization offer's network does not use VMware NSX technology, but is managed at the hardware level by Juniper technology and the VPLS protocol.* +- *The storage does not use VMware vSAN technology, but relies exclusively on IBM SANs using 32G fiber channel.* +- *No form of hidden optimization is implemented (compression, deduplication, ...).* -### Definition of a Compute Blade Cluster ('Cpool') +### Definition of a compute blade cluster ('Cpool') -The __'Cpool'__ is a grouping of VMware ESXi hypervisors, also known as an *'ESX cluster'*. +The __'Cpool'__ is a grouping of VMware ESXi hypervisors, also known as the *'ESX cluster'*. -All hosts within a __'Cpool'* belong to the __same tenant and the same availability zone (AZ)__. They must necessarily have the same class: -__It is not possible to mix different types of compute blades within the same cluster__. +All hosts present in a __'Cpool'__ belong to the same __tenant and availability zone__ (AZ). They must necessarily have the same class: +__it is not possible to mix different compute blade models within the same cluster__. -Since all compute blades are delivered with the maximum physical memory, a software-level RAM usage limit is applied at the cluster level to ensure it matches the billed RAM. +Since all compute blades are delivered with maximum physical memory, a software-enforced RAM usage limit is applied at the cluster level to ensure it matches the billed RAM. -By default, each compute blade has 128 GB of memory enabled within the __'Cpool'*. +By default, each blade has 128 GB of enabled memory within the __'Cpool'__. -A __'Cpool'* can contain a maximum of 32 hypervisors. Beyond this limit, a second cluster must be created. +A __'Cpool'__ can contain a maximum of 32 hypervisors. Beyond this limit, a second cluster will need to be created. -Storage can be shared among __'Cpool'* clusters. +Storage can be shared between __'Cpools'__. ### Memory Allocation for a 'Cpool' -RAM reservation is configurable per cluster. You can reduce or increase the amount of RAM to match your cluster-wide requirements. +RAM reservation is configurable per cluster. You can reduce or increase the amount of RAM to match your cluster-wide needs. -__Be careful not to exceed an average memory utilization of 85% per compute node__. -Indeed, VMware's technology uses a compression-based optimization method that can significantly impact the performance of your workloads and complicate diagnostics. -Similarly, excessive memory pressure on your compute nodes will force the hypervisor to offload part of its memory to disk to meet the needs of virtual machines. +__Do not exceed an average memory consumption of 85% per compute blade.__ +Indeed, VMware technology will use a compression-based optimization method that can significantly impact your workload performance and complicate troubleshooting. +Similarly, excessive memory pressure on your compute blades will force the hypervisor to offload part of its memory to disk to meet virtual machine requirements. -This situation, known as __'Ballooning'__, severely impacts the performance of all virtual machines located on the affected datastore. -__Diagnosis becomes complex in this context__, as your monitoring will show performance impacts at the CPU level rather than at the memory or storage level. -Also keep in mind that the first action the hypervisor performs when starting a virtual machine is to create a __memory swap file (.vswap)__ on disk, sized exactly to the amount of memory assigned to the virtual machine. You must __account for this when sizing your storage__. +This scenario, known as __'Ballooning'__, severely impacts the overall performance of virtual machines located on the affected datastore. +__Troubleshooting is complicated in this context__, as your monitoring will show impacts at the CPU level rather than memory or storage. +Also keep in mind that the first thing the hypervisor does when starting a virtual machine is to create __a memory swap file__ (.vswap) on +disk, sized to the memory of the affected virtual machine. You must __account for this when sizing your storage__. -Each compute node is delivered with 128 GB of memory enabled at the __'Cpool'__ level, but physically has access to the full amount of allocatable memory. +Each compute blade comes with 128GB of software-enabled memory at the __'Cpool'__ level, but physically has access to all allocatable memory. -For example, in a cluster of three hosts of type ```vmware:standard:v2```, the RAM reservation upon activation of the __'Cpool'__ will be 3 × 128 GB = 384 GB of RAM. -You can extend this up to a maximum of 3 × 384 GB = 1,152 GB of memory. +For example, for a cluster of three hosts of type ```vmware:standard:v2```, the RAM reservation upon activating _*'Cpool'* will be 3 x 128GB = 384 GB of RAM. +You can extend it to a maximum of 3 x 384GB = 1152GB of memory. - Minimum memory for a 'Cpool' = number of hosts × 128 GB of memory - Maximum memory for a 'Cpool' = number of hosts × physical memory capacity per compute node + Minimum memory for a 'Cpool' = number of hosts X 128GB of memory + Maximum memory for a 'Cpool' = number of hosts X the physical memory quantity of the compute blade ### Cloud Temple Virtual Machine Catalogs -Cloud Temple provides you with a catalog of `Templates` regularly enriched and updated by our teams. -To date, it includes dozens of `Templates` and images ready to be deployed on your virtual machines. +Cloud Temple provides you with a catalog of `Templates` regularly enriched and updated by our teams. +It currently includes dozens of `Templates` and images to mount on your virtual machines. ### Hypervisor Updates -Cloud Temple regularly provides updated builds for hypervisors to ensure security patches are applied. -However, updating hypervisors remains your responsibility, as we do not have visibility into your business constraints. +Cloud Temple regularly provides builds for hypervisors to ensure the application of security patches. +However, hypervisor updates remain your responsibility, as we have no visibility into your business constraints. -The update process is fully automated. To ensure service continuity, a minimum of two hypervisors is required per cluster during the update. Make sure you have the necessary permissions to perform these actions. +The update process is fully automated. To ensure service continuity, a minimum of two hypervisors per cluster is required during the update. Ensure you have the necessary permissions to perform these actions. -### VM Affinity Management +### Managing affinity for your virtual machines -__Affinity and anti-affinity rules__ allow you to control the placement of virtual machines across your hypervisors. -They can be used to manage resource utilization within your __'Cpool'__. -For example, they help balance workloads across servers or isolate resource-intensive workloads. -In a VMware __'Cpool'__, these rules are commonly used to manage virtual machine behavior during vMotion. -vMotion enables moving virtual machines from one host to another without service interruption. +__Affinity and anti-affinity rules__ allow you to control the placement of virtual machines on your hypervisors. +They can be used to manage resource utilization in your __'Cpool'__. +For example, they can help balance workload across servers or isolate resource-intensive workloads. +In a VMware __'Cpool'__, these rules are often used to manage virtual machine behavior with vMotion. +vMotion allows virtual machines to be moved from one host to another without service interruption. -You can configure the following rules through rule management: +You can configure the following through rule management: -- __Affinity Rules__: These rules ensure that certain virtual machines run on the same physical host. - They are used to improve performance by keeping virtual machines that frequently communicate together on the same server, thus reducing network latency. Affinity rules are particularly useful in scenarios where performance is critical, such as databases or applications requiring fast inter-server communication. +- __Affinity Rules__: These rules ensure that certain virtual machines run on the same physical host. +They are used to improve performance by keeping frequently communicating virtual machines +together on the same server to reduce network latency. Affinity rules are useful in scenarios +where performance is critical, such as with databases or applications that require fast inter-server communication. -- __Anti-Affinity Rules__: Conversely, these rules ensure that certain virtual machines do not run on the same physical host. - They are essential for availability and resilience—for example, to prevent all critical machines from being affected in the event of a single host failure. Anti-affinity rules are crucial for high-availability applications, such as in production environments where fault tolerance is a priority. - For instance, you wouldn’t want both of your Active Directory servers located on the same hypervisor. +- __Anti-Affinity Rules__: Conversely, these rules ensure that certain virtual machines do not run +on the same physical host. They are important for availability and resilience, for example, +to prevent critical machines from being affected simultaneously in the event of a single server failure. +Anti-affinity rules are crucial for applications requiring high availability, +such as in production environments where fault tolerance is a priority. +For example, you do not want your two Active Directories to be on the same hypervisor. -When creating a rule, you define the rule type (affinity / anti-affinity), the rule name, its activation status (__'Status'__), and the virtual machines involved within your hypervisor cluster. +When creating a rule, you define the rule type (affinity / anti-affinity), the rule name, +its activation state (__'Status'__), and the affected machines in your hypervisor cluster. -*Note: The affinity/anti-affinity rules available in the console are rules between virtual machines (not between hypervisors and virtual machines).* +*Note: The affinity/anti-affinity rules offered in the console are rules regarding virtual machines with respect to each other (no rules between hypervisors and virtual machines).* -### Asynchronous Replication of Your Virtual Machines in VMware Environment +### Asynchronous replication of your virtual machines in a VMware environment -Asynchronous replication of your virtual machines is a mechanism that pushes write operations from the source hypervisor to the standby site at regular intervals. +Asynchronous replication of your virtual machines is a mechanism that pushes write operations to the standby site at the source hypervisor level at regular time intervals. -After an initial hot copy of all active storage to the standby site, only write operations are pushed at regular intervals to the dormant site. -The interval depends on the volume of writes (ranging from every hour to every 24 hours). +After an initial hot copy of all active storage to the standby site, only writes are pushed at regular intervals to the standby site. +This interval depends on the write volume (from every hour to every 24 hours). -VM replication relies on the hypervisor’s snapshot mechanism. As such, this solution shares the same drawbacks, particularly sensitivity to the VM’s write volume, since the snapshot process is recursive and requires closing the snapshot. +Virtual machine replication relies on the hypervisor's snapshot mechanism. As such, +this solution has the same drawbacks, particularly sensitivity to the virtual machine's write volume, +as the snapshot process is a recursive mechanism for snapshot consolidation. -A typical example of a machine that does not support VM replication is an FTP server receiving real-time video streams from surveillance cameras. __The machine is constantly writing data and will not be able to close a snapshot without pausing the operating system for a significant period (several tens of minutes).__ If the hypervisor fails to close the snapshot, it will proceed to do so anyway—without any possibility to intervene, except by corrupting the virtual machine. +The typical example of a machine that does not support the virtual machine replication mechanism is an +FTP server that receives real-time streams from surveillance cameras. __The machine spends its time writing and will not be +able to consolidate a snapshot without pausing the operating system for a significant period of time +(several tens of minutes)__. If the hypervisor cannot consolidate the snapshot, it will do exactly that, +with no possibility of intervention except by corrupting the virtual machine. | SLA | Description | |-----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------| -| RPO of 1H to 24H | In the event of a disaster at the primary datacenter, the maximum amount of data lost corresponds to the last write push to the standby site. | -| RTO < 15 min | Virtual machine startup operation on the remote site after stopping the VM at the primary site. | +| RPO of 1H to 24H | In the event of a disaster at the primary datacenter, the maximum amount of data lost is that from the last push of writes to the standby site. | +| RTO < 15mn | Startup operation of the stopped virtual machine at the remote site | -In case of need or failure on a machine at the primary site, the mirrored machine at the standby site is activated. -Recovery requires reserving compute and RAM capacity at the standby site. It is also necessary to have the same storage space available at the passive site as at the active site. +If required, or in the event of a failure on a machine at the primary site, the mirrored machine at the standby site is activated. +Failover requires having reserved compute and RAM in standby at the standby site. It +is necessary to have the same storage capacity at the passive site as at the active site. -| Reference | Unit | Max IOPS Ceiling / LUN | Max Bandwidth / LUN | SKU | +| Reference | Unit | SKU | |-----------------------------------|------|-------------------------------------------------| -| PRA - VMware Inter-AZ Replication | 1 VM | csp:(region):iaas:vmware:licence:replication:v1 | +| DR - VMware Inter-AZ Replication | 1 vm | csp:(region):iaas:vmware:licence:replication:v1 | -*__Note__: The minimum RPO must be defined based on the rate of change on the virtual machine.* +*__Note__: The calculation of the minimum RPO must be defined based on the change rate on the virtual machine.* ## Virtual Machine Backup -Cloud Temple offers a __native, non-optional cross-architecture backup solution__ (mandatory for French secnumcloud certification). +Cloud Temple offers __a native, non-bypassable cross-backup architecture__ (it is mandatory in the French SecNumCloud qualification). -Backups are stored in a different availability zone and on a physically distinct datacenter from the one hosting the virtual machine. They are encrypted using the AES 256-bit symmetric key algorithm (cipher mode `xts-plain64`) to ensure data confidentiality. +Backups are stored in an availability zone and on a physical datacenter different from the one hosting the virtual machine. They are encrypted using a 256-bit AES symmetric key algorithm (cipher mode `xts-plain64`) to ensure data confidentiality. -This setup protects against major failures in the production datacenter and enables restoration on a secondary datacenter (e.g., in case of fire). +This protects against major failures in the production datacenter and allows restoration to a secondary datacenter (e.g., in case of fire). This solution includes: - Hot off-site backup of all disks, - Instant presentation and boot of a virtual machine from the mass storage infrastructure, followed by hot reloading onto production SANs, - Partial file restoration from backups, -- Retention limited solely by allocated mass storage space. +- Retention limited only by the allocated mass storage space. -The backup infrastructure is based on *IBM Spectrum Protect Plus*, a no-agent architecture solution that is easy to use, enables automation of backup processes, and optimizes mass storage usage. +This backup infrastructure is based on the *IBM Spectrum Protect Plus* solution, an agentless architecture solution, +easy to use, and enables backup process automation in addition to mass storage space optimization. -Backup and restore speeds depend on the change rate within the environments. -Backup policies are configurable per virtual machine via the [Cloud Temple Console](../console/console.md). +Backup and restore speeds depend on the change rate within the environments. +The backup policy is configurable from [the Cloud Temple Console](../console/console.md) for each virtual machine. *__Note:__* -*__Some virtual machines are incompatible with this backup technology__, which relies on the hypervisor’s snapshot mechanisms. These typically include VMs with constant disk write workloads. The hypervisor cannot close the snapshot, which forces the virtual machine to be frozen to complete the closure operation. This freeze can last several hours and cannot be stopped.* +*__Some virtual machines are not compatible with this backup technology__ which uses hypervisor snapshot mechanisms. +These are typically machines with constant disk write loads. The hypervisor cannot close the snapshot, which +requires freezing the virtual machine to complete the close operation. This freeze can last several hours and cannot be stopped.* -*In such cases, the recommended approach is to exclude the disk subject to continuous writes and back up the data using an alternative method.* +*The solution is then to exclude the disk that is the target of permanent writes and back up the data using another method.* -| Reference | Unit | Max IOPS Ceiling / LUN | Max Bandwidth / LUN | SKU | +| Reference | Unit | SKU | | ------------------------------------------------------- | ----- | ------------------------------ | | BACKUP - Access to IBM Spectrum Protect Plus service | 1 VM | csp:(region):iaas:backup:vm:v1 | #### Create a backup policy -To create a new backup policy, you must submit a request to support. Support is accessible via the buoy icon in the top-right corner of the window. +To add a new backup policy, you must submit a request to support. Support is accessible via the lifebuoy icon in the top right corner of the window. -Creating a new backup policy is done through a __service request__ specifying: +Creating a new backup policy is done by submitting a __service request__ specifying: Your Organization's name - A contact name, email address, and phone number to finalize the configuration + A contact's name along with their email and phone number to finalize the configuration The tenant name The backup policy name - The retention characteristics (x days, y weeks, z months, ...) + Retention settings (x days, y weeks, z months, ...) ## Advanced Data Protection (HSM/KMS) -Cloud Temple offers an __advanced virtual machine encryption solution__ based on Hardware Security Modules (HSM) and a Key Management Service (KMS). This feature enhances the protection of sensitive data through centralized and secure key management, seamlessly integrated into the SecNumCloud environment. +Cloud Temple offers an __advanced encryption solution for virtual machines__ based on hardware security modules (HSM) and a key management service (KMS). This feature enhances the protection of sensitive data through centralized and secure management of encryption keys, directly integrated into the SecNumCloud environment. ### Technical Architecture -The solution is built on a robust security infrastructure composed of: +The solution relies on a robust security infrastructure composed of: -- __HSM (Hardware Security Module)__ : __Thales Luna S790__ modules certified __FIPS 140-3 Level 3__ +- __HSM (Hardware Security Module)__ : Modules __Thales Luna S790__ certified to __FIPS 140-3 Level 3__ - __KMS (Key Management System)__ : __Thales CipherTrust Manager__ for centralized key management -- __VMware Integration__ : Communication via the __KMIP__ (Key Management Interoperability Protocol) +- __VMware Integration__ : Communication via the __KMIP__ (Key Management Interoperability Protocol) protocol #### High Availability Deployment The HSM infrastructure is deployed across __three availability zones__ in the FR1 region: -- PAR7S +- PAR7S - TH3S - AZ07 -This distribution ensures maximum __high availability__ and __resilience__ of the encryption service. +This distribution ensures maximum __high availability__ and __resilience__ for the encryption service. -### Key Hierarchy and Operation +### Operation and key hierarchy The system uses a __cryptographic key hierarchy__ to ensure data security: | Level | Key Type | Description | Location | -|-------|----------|-------------|----------| -| 1 | __Root of Trust (RoT)__ | Master key managed by KMS | HSM Luna | +|--------|-------------|-------------|--------------| +| 1 | __Root of Trust (RoT)__ | Master key per KMS | HSM Luna | | 2 | __Domain Key (DK)__ | Domain key per client (multi-tenant isolation) | HSM Luna | -| 3 | __Key Encryption Key (KEK)__ | Key encryption key per VM | CipherTrust Manager | +| 3 | __Key Encryption Key (KEK)__ | Encryption key per VM | CipherTrust Manager | | 4 | __Data Encryption Key (DEK)__ | Data encryption key per VM | VMware ESXi | #### Encryption Process -1. __Generation__: VMware ESXi generates a unique DEK for each virtual machine -2. __Protection__: The DEK is encrypted by the KEK stored in CipherTrust Manager -3. __Securing__: The KEK is itself protected by the HSM key hierarchy -4. __Storage__: The encrypted DEK is stored alongside the VM's configuration files +1. __Generation__: VMware ESXi generates a unique DEK for each virtual machine +2. __Protection__: The DEK is encrypted by the KEK stored in CipherTrust Manager +3. __Securing__: The KEK is itself protected by the HSM key hierarchy +4. __Storage__: The encrypted DEK is stored with the VM configuration files -### Security and Compliance +### Security and compliance #### Certifications -- __FIPS 140-3 Level 3__ : Highest level certification for HSMs +- __FIPS 140-3 Level 3__ : Highest-level certification for HSMs - __Common Criteria EAL4+__ : Advanced security evaluation - __SecNumCloud__ : ANSSI qualification integrated into the Cloud Temple environment -#### Multi-tenant Isolation +#### Multi-tenant isolation -- __Cryptographic Separation__: Each client has an isolated KMS domain -- __Dedicated Keys__: A specific Domain Key per client -- __Audit and Traceability__: Full logging of actions per domain +- __Cryptographic separation__ : Each client has an isolated KMS domain +- __Dedicated keys__ : A specific Domain Key per client +- __Audit and traceability__ : Complete logging of actions per domain -### Activation and Usage +### Activation and usage -VM encryption can be activated __with a single click__ from the [Console](../console/console.md). +Virtual machine encryption is enabled __with a single click__ from the [Console](../console/console.md). -For a detailed step-by-step guide with screenshots, see the [VM Encryption Tutorial](tutorials/vm_encryption.md). +For a detailed procedure with screenshots, see the [virtual machine encryption tutorial](tutorials/vm_encryption.md). #### Prerequisites -- __Key provider configured__: A HSM/KMS provider must be enabled on the vStack -- __Virtual machine powered off__: The VM must be stopped before encryption -- __No active replication__: The VM must not be replicated (incompatible with Global Mirror) -- __No snapshots__: No snapshots must be present -- __Service subscription__: Advanced protection service must be subscribed +- __Configured key provider__ : An HSM/KMS provider must be enabled on the vStack +- __Virtual machine powered off__ : The VM must be stopped before encryption +- __No active replication__ : The VM must not be replicated (incompatible with Global Mirror) +- __No snapshots__ : No snapshots must be present +- __Service subscription__ : The advanced protection service must be subscribed to -*__Note__: For more details on prerequisites and the complete procedure, refer to the [VM Encryption Guide](tutorials/vm_encryption.md).* +*__Note__ : For more details on the prerequisites and the complete procedure, refer to the [VM encryption guide](tutorials/vm_encryption.md).* ### Limitations and considerations #### Compatibility -- __Global Mirror__: Encrypted virtual machines are __not compatible__ with Global Mirror replication -- __Restore__: Backups of encrypted VMs retain their cryptographic protection -- __Export__: Exporting encrypted VMs requires specific procedures +- __Global Mirror__ : Encrypted virtual machines are __not compatible__ with Global Mirror replication +- __Recovery__ : Encrypted VM backups retain their cryptographic protection +- __Export__ : Exporting encrypted VMs requires specific procedures #### Performance -- __Minimal impact__: Hardware encryption ensures optimal performance -- __Transparency__: No impact on application operation +- __Minimal impact__ : Hardware encryption ensures optimal performance +- __Transparency__ : No impact on application operation ### Recommended Use Cases This advanced protection solution is particularly well-suited for: -- __Sensitive Data__: Personal information, financial data, trade secrets -- __Regulatory Compliance__: GDPR, HIPAA, PCI-DSS, ISO 27001, PDIS requirements -- __Critical Sectors__: Banking, insurance, healthcare, defense -- __Digital Sovereignty__: Protection against unauthorized access, even in case of compromise +- __Sensitive Data__ : Personal information, financial data, industrial secrets +- __Regulatory Compliance__ : GDPR, HIPAA, PCI-DSS, ISO 27001, PDIS requirements +- __Critical Sectors__ : Banking, insurance, healthcare, defense +- __Digital Sovereignty__ : Protection against unauthorized access, even in the event of a compromise -| Reference | Unit | Max IOPS Ceiling / LUN | Max Bandwidth / LUN | SKU | -|-----------|------|-----| +| Reference | Unit | SKU | +|-----------|-------|-----| | ADVANCED PROTECTION - VM Encryption via HSM/KMS | 1 VM | csp:(region):iaas:vmware:encryption:hsm:v1 | -*__Note__:* +*__Note__ :* -- *The service requires a specific subscription and is not included in the standard IaaS offering* -- *Key management remains fully under Cloud Temple’s control within the SecNumCloud environment* -- *Encryption keys never leave the French, sovereign infrastructure* +- *The service requires a specific subscription and is not included in the standard IaaS product* +- *Key management remains entirely under Cloud Temple's control within the SecNumCloud environment* +- *Encryption keys never leave the French and sovereign infrastructure* \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/iaas_vmware.md b/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/iaas_vmware.md index be65c986..d70f76ec 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/iaas_vmware.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/iaas_vmware.md @@ -2,36 +2,38 @@ title: Overview --- -The **IaaS Cloud Temple** offering, powered by VMware, is designed to meet the critical needs of businesses in terms of performance, security, and business continuity. With dedicated resources, a qualified **SecNumCloud** infrastructure, and fully automated options, this solution ensures optimal reliability for your sensitive workloads. +# IaaS VMware + +The **IaaS VMware offering** is designed to meet critical enterprise needs for performance, security, and business continuity. With dedicated resources, **SecNumCloud**-qualified infrastructure, and fully automated options, this service ensures optimal reliability for your sensitive workloads.

Concepts

-

Discover the basics and essential principles to understand and master our infrastructure.

- Explore the concepts → +

Discover the fundamentals and essential principles to understand and master our infrastructure.

+ Explore concepts →

Quickstart

Get started quickly with our resources by following clear and simple instructions.

- Launch the Quickstart → + Launch Quickstart →

Tutorials

-

Learn step by step how to configure and use our services with detailed guides.

- Discover the tutorials → +

Learn step-by-step how to configure and use our services with detailed guides.

+ Discover tutorials →
## Purchase Platforms
-

Are you a public sector actor? The IaaS Cloud Temple offering is accessible via:

+

Are you a public sector professional? The IaaS Cloud Temple product is available via:

@@ -40,7 +42,7 @@ The **IaaS Cloud Temple** offering, powered by VMware, is designed to meet the c

- The CAIH marketplace for the healthcare sector + CAIH market for the medical sector

@@ -48,4 +50,4 @@ The **IaaS Cloud Temple** offering, powered by VMware, is designed to meet the c Learn more → - + \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/quickstart.md b/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/quickstart.md index a07b61fd..4d7ca0bd 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/quickstart.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/quickstart.md @@ -34,7 +34,7 @@ import shivaCpool_007 from '@site/docs/iaas_vmware/images/shiva_cpool_007.png' import shivaCpool_008Build from '@site/docs/iaas_vmware/images/shiva_cpool_008_build.png' import shivaCpool_008Firm from '@site/docs/iaas_vmware/images/shiva_cpool_008_firm.png' import shivaCpool_006 from '@site/docs/iaas_vmware/images/shiva_cpool_006.png' -import shivaSupport from '@site/docs/./console/images/shiva_support.png' +import shivaSupport from '@site/docs/console/images/shiva_support.png' import shivaVmPolitiquesBackupAssignMandatory from '@site/docs/iaas_vmware/images/shiva_vm_politiques_backup_assign_mandatory.png' import shivaVmPolitiquesBackup from '@site/docs/iaas_vmware/images/shiva_vm_politiques_backup.png' import shivaVmDisquesVirtuelsPolitiques from '@site/docs/iaas_vmware/images/shiva_vm_disques_virtuels_politiques.png' @@ -56,22 +56,22 @@ import iaasVmwareEsxMemory from '@site/docs/iaas_vmware/images/iaas_vmware_esx_m ### Virtual Machine Management -The interface for managing your virtual machines is available in the Console under the __'IaaS'__ menu located on the green bar on the left side of the screen. +The management interface for your virtual machines is available in the Console in the __'IaaS'__ menu located on the green bar on the left side of the screen. -### List of Virtual Machines +### List of virtual machines -In the __'Virtual Machines'__ section, you have access to the list of your virtual machines hosted on your trusted Cloud. +In the __'Virtual Machines'__ section, you have access to the list of your virtual machines hosted on your trusted cloud. -For each virtual machine, you can access the following information: +You have access to the following information for each virtual machine: - its name, - the tags assigned to it, -- its status (off, on, in progress, host disconnected, or invalid), +- its status (off, on, processing, host disconnected, or invalid), - its manager (in a VMware environment, the associated vCenter), - its operating system, -- the number of virtual CPUs (vCPU), +- the number of virtual CPUs (vCPUs), - the amount of virtual memory (vRAM). ### Virtual Machine Actions @@ -86,8 +86,8 @@ The following actions are available from this interface: -__An alert banner may appear at the top of the list__: it indicates that critical alarms have been triggered on one or more of your virtual machines. -The __'View'__ button allows you to check the virtual machines affected by this notification. +__An alert banner may appear at the top of the list__: it indicates that critical alarms have been triggered on one or more of your virtual machines. +The __'View'__ button allows you to view the virtual machines affected by this notification. @@ -95,31 +95,31 @@ When you click the green dropdown arrow on the right side of the list for a virt -You access all information related to that machine: +You can access all information regarding it: -A quick action bar enables you to perform the following actions: +A quick action banner allows you to perform the following actions: - Power on the virtual machine; -- Power off the virtual machine; -- Restart the virtual machine; -- Modify guest OS power settings; +- Power it off; +- Restart it; +- Modify the guest OS power options; - Open the console; - Mount an ISO; - Unmount an ISO; - Clone the virtual machine; -- Move the virtual machine (vMotion); -- Rename the virtual machine; -- Delete the virtual machine. +- Move it (vMotion); +- Rename it; +- Delete it. -A quick view provides a visualization of the virtual machine’s __storage__, __CPU__, and __RAM__. +A quick view provides a visualization of the virtual machine's __storage__, __CPU__, and __RAM__. -In the __'General Information'__ tab, you find detailed information about your virtual machine, such as its OS, physical location (datacenter, datastore, etc.), RAM, CPU, IP addresses, logs, and more. +In the __'General Information'__ tab, you will find detailed information about your virtual machine, such as its OS, physical location (datacenter, datastore, etc.), RAM, CPU, IP addresses, logs, and more. @@ -127,100 +127,102 @@ From this view, you can perform the following actions: - Change the operating system (the virtual machine must be powered off), - Update the hardware version (the virtual machine must be powered off), -- Modify RAM or CPU settings. +- Modify the RAM or CPU. -An __'Advanced'__ tab allows you to view more specific information, such as "VMware Tools" details, hardware version, manager, and so on. +The __'Advanced'__ tab allows you to view more specific information such as "VMware Tools" details, hardware version, manager, etc... ### Editing the RAM or CPU of a virtual machine -Go to the __'Virtual Machines'__ tab, display the details of a virtual machine, select the __'General Info'__ tab, and click the edit button for the variable you want to modify: +Go to the __'Virtual Machines'__ tab, view the details of a virtual machine, +select the __'General Info'__ tab and click the edit button for the variable to modify : -### Disk Modes +### Disk modes You can add different disk modes: -- __Persistent__: Changes are immediately and permanently written to the virtual disk. __This is the recommended mode.__ -- __Non-persistent independent__: Changes made to the virtual disk are recorded in a new log file and deleted upon shutdown. Not affected by snapshots. __Not supported by backup.__ -- __Persistent independent__: Changes are immediately and permanently written to the virtual disk. Not affected by snapshots. __Not supported by backup.__ +- __Persistent__ : Changes are immediately and permanently written to the virtual disk. __This is the recommended mode.__ +- __Independent non-persistent__ : Changes made to the virtual disk are recorded in a new log and discarded on power off. Not affected by snapshots. __It is not supported by backup.__ +- __Independent persistent__ : Changes are immediately and permanently written to the virtual disk. Not affected by snapshots. __It is not supported by backup.__ ### Virtual Machine Controller Management -You can modify the disk controller type for your virtual machine. +You can change the disk controller type for your virtual machine. -Virtual machines can be equipped with SCSI and NVMe controllers, with a limit of 4 controllers of each type. Each controller can manage up to 15 disks. +Virtual machines can be equipped with SCSI and NVMe controllers, with a limit of 4 controllers of each type. Each controller can handle up to 15 disks. -A SCSI controller can be configured with different subtypes: Para Virtual, Bus Logic, LSI Logic, or LSI Logic SAS. +An SCSI controller can be configured with different subtypes: Para Virtual, Bus Logic, LSI Logic, or LSI Logic SAS. -The Para Virtual controller stands out due to its enhanced capabilities. It can support up to 64 disks when the virtual machine's hardware version is compatible with ESXi 6.7 or later. +The Para Virtual controller is distinguished by its extended capacity. It can support up to 64 disks when the virtual machine's hardware version is compatible with ESXi version 6.7 or later. -> __Important__: If you want to change the type of a Para Virtual controller that has more than 15 disks, you must first detach the disks from the affected slots. +> __Important__: If you want to change the type of a Para Virtual controller that has more than 15 disks, you must first detach the disks from the corresponding slots. ### Virtual Machine Console -The console of a virtual machine is accessible from the list of virtual machines by clicking the __'Console'__ icon: +The virtual machine console is accessible from the virtual machines list by clicking the __'Console'__ icon: -A new tab opens in your browser, displaying the console of your machine, based on a __VNC__ client: +A new browser tab opens and displays your machine's console, based on a __VNC__ client: -In the __VNC__ menu, you can: +The __VNC__ menu allows you to: -- request the transmission of specific keys, -- force a keyboard mapping (in case we were unable to correctly identify your keyboard), -- open a text field that can be sent to the machine. This method replaces the previous non-functional clipboard, +- send specific keys, +- force a keyboard layout mapping (in case we were unable to correctly identify your keyboard), +- open a text field to send to the machine. This method replaces the old non-functional clipboard, - switch to full-screen mode. -__Note__: +__Note__ : Window scaling is automatic. #### Keyboard Layout Support -The input entered in the console depends on the keyboard language of your web browser, the keyboard language of the virtual machine, and whether the 'enforce keyboard' option on the left side of the screen is enabled. Below is a summary of the possible scenarios: +Console input depends on your web browser's keyboard language, the virtual machine's keyboard language, and whether the 'enforce keyboard' option on the left side of the screen is enabled or not. Here is a summary of possible scenarios: -| Physical Machine Keyboard Language (input) | Virtual Machine Keyboard Language | 'Enforce Keyboard' Option Selected | Result (output) | -|--------------------------------------------|-----------------------------------|------------------------------------|------------------------| -| French | French | No | ✅ | -| French | French | Yes | Not recommended | -| French | English | No | English | -| French | English | Yes | ✅ | -| English | French | No | French | -| English | French | Yes | ✅ | -| English | English | No | ✅ | -| English | English | Yes | Not recommended | +| Physical machine keyboard language (input) | Virtual machine keyboard language | 'enforce keyboard' option selected | Result (output) | +| ------------------------------------------------- | ----------------------------------------- | -------------------------------------- | ------------------------ | +| French | French | No | ✅ | +| French | French | Yes | Not recommended | +| French | English | No | English | +| French | English | Yes | ✅ | +| English | French | No | French | +| English | French | Yes | ✅ | +| English | English | No | ✅ | +| English | English | Yes | Not recommended | -__Note__: +__Note__ : -- If certain characters do not appear during manual input, you may try using the clipboard. +- If certain characters do not pass during manual input, you can try using the clipboard. #### Clipboard Functionality -This feature allows you to send an entire string of characters to your virtual machine. It is important to note that the "enforce keyboard" option affects how this string of characters is transmitted to your virtual machine. If you notice during console input that the "enforce keyboard" option is required, make sure to enable it before using the clipboard. -This functionality can be used to send a password, a command, or the content of a configuration file, for example: +This feature allows you to send an entire string of characters to your virtual machine. It is important to note that the "enforce keyboard" key affects how this string of characters +will be transmitted to your virtual machine. If you notice during console input that the "enforce keyboard" option is necessary, remember to enable it before using the clipboard. +This feature can be used to send a password, a command, or a configuration file content, for example: -Upon clicking the "Paste" button, the content of your text field is sent to your virtual machine. +When clicking the "Paste" button, the content of your text field is sent to your virtual machine. ### Cloud Temple Virtual Machine Catalogs -Cloud Temple provides you with a catalog of `Templates` that is regularly enriched and updated by our teams. -To date, the catalog includes dozens of `Templates` and images ready to be deployed on your virtual machines. +Cloud Temple provides you with a `Templates` catalog regularly enriched and updated by our teams. +It currently includes several dozen `Templates` and images to mount on your virtual machines. -To publish an ISO/OVF, navigate to the __'Catalogue'__ view and click the __'Publish Files'__ button at the top of the page: +To publish an ISO/OVF, go to the __'Catalog'__ view and click the __'publish files'__ button at the top of the page: -You can also convert a virtual machine into a template and export it to the catalog. To do so, select a virtual machine and use the __'Clone'__ action button: +It is possible to convert a VM into a template and export it to the catalog. To do this, select a virtual machine and use the __'clone'__ action button: @@ -228,46 +230,46 @@ Select __'Export as vm-template'__: -Then fill in the required information. Once completed, you’ll be able to deploy a new VM from the template using the __'New Virtual Machine'__ button or from the __'Catalogues'__ page. It is also possible to export the VM in OVF format. +Then fill in the required information. You will then be able to deploy a new VM from the template using the __'New virtual machine'__ button or from the __'Catalogs'__ page. It is also possible to export the VM in OVF format. -__Pro tip__: It is possible to convert between OVA and OVF formats. -The most common method uses VMware Converter, but a simple alternative exists using the ```tar``` command: +__Good to know__: it is possible to convert an OVA file to OVF and vice versa. +The most commonly used method is VMware Converter, but there is also a simple method using ```tar``` -Extracting an OVA file: +Extracting the ova file: ``` tar -xvf vmName.ova ``` -Creating an OVA file from an OVF: +Creating an OVA file from an OVF file: ``` tar -cvf vmName-NEW.ova vmName.ovf vmName-disk1.vmdk vmName.mf ``` -### Advanced Virtual Machine Configuration: Extra Config +### Advanced virtual machine settings: Extra Config Extra Config provides a flexible way to include key=value pairs in a virtual machine's configuration. The keys and values are interpreted by the system when the virtual machine is deployed. -You can now directly modify __Extra Config__ properties in the advanced options of a virtual machine: +You can now modify __Extra Config__ properties in the advanced options of a virtual machine: -You can add a property from a predefined list of keys. Additionally, you can modify the value of a key you have added yourself. Pre-existing key=value pairs cannot be modified. +You can add a property from a list of keys. Additionally, you can modify the value of a key that you have added yourself. Existing key=value pairs are not modifiable. Please contact support for any requests to add new keys. -__Note__: *To enable GPU usage by the virtual machine, it is mandatory to enable the key 'pciPassthru.use64bitMMIO' and allocate the required MMIO (Memory-mapped I/O) space via 'pciPassthru.64bitMMIOSizeGB'. It is strongly recommended to refer to the [official NVIDIA documentation](https://docs.nvidia.com/vgpu/17.0/grid-vgpu-release-notes-vmware-vsphere/index.html#tesla-p40-large-memory-vms).* +__Note__ : *To use a GPU with the virtual machine, it is mandatory to enable the 'pciPassthru.use64bitMMIO' key and allocate the required MMIO (Memory-mapped I/O) space via 'pciPassthru.64bitMMIOSizeGB'. It is highly recommended to refer to the [official Nvidia documentation](https://docs.nvidia.com/vgpu/17.0/grid-vgpu-release-notes-vmware-vsphere/index.html#tesla-p40-large-memory-vms).* -### Advanced Virtual Machine Configuration: vAPP +### Advanced virtual machine settings: vAPP You can also modify __vAPP__ type properties in the advanced options of a virtual machine: -You can add a property, modify an existing one, or remove it. Four property types are available: String, Number, Boolean, and Password: +You can add a property, modify it, or delete it. Four types of properties are available: String, Number, Boolean, Password: @@ -275,229 +277,232 @@ __Note__: *The virtual machine must be stopped to modify its vAPP properties.* ### Management of __'hypervisors'__ and __'Cpool'__ (hypervisor clusters) -Your hypervisor management is performed in the __'Compute'__ submenu under the __'IaaS'__ menu, located in the green bar on the left side of your screen. +Your hypervisors are managed in the __'Compute'__ submenu of the __'IaaS'__ menu, located in the green sidebar on the left side of your screen. -In this submenu, you have visibility on: +In this submenu, you have a view of: -- The hypervisor software stack, their AZs, and their resources, +- The hypervisor software stack, their AZs and resources, - The backup software stack. -As of January 2024, the available hypervisor offering on the Cloud Temple-qualified infrastructure is based on VMware. The backup software used is IBM Spectrum Protect Plus. +As of January 2024, the hypervisor offering available on the Cloud Temple qualified infrastructure is based on VMware. The backup software used is IBM Spectrum Protect Plus. -### Managing VMware Clusters +### VMware Cluster Management -To access VMware cluster management, click on the __'Compute'__ submenu under the __'IaaS'__ menu: +To access VMware cluster management, click in the __'Compute'__ submenu of the __'IaaS'__ menu: By default, the first tab lists all hypervisors (across all clusters): -You can view detailed information about a hypervisor by clicking its name: +You can view the details of a hypervisor by clicking on its name: -There is one tab per hypervisor cluster to review the details of each: +There is a tab for each hypervisor cluster to view the details of each: -When you click on a cluster, you see a summary of its composition: +If you click on a cluster, you will see a summary of its composition: -- Total computing power expressed in GHz, -- Total available memory and usage ratio, -- Total storage space (all types combined) and percentage used, -- Automation mechanisms for handling compute host failures (__'vSphere DRS'_), -- Number of virtual machines, -- Number of hypervisors. +- The total compute power expressed in GHz, +- The total available memory and the utilization ratio, +- The total storage space (all types combined) as well as the used quota, +- Automation mechanisms for compute node unavailability (__'Vsphere DRS'__), +- The number of virtual machines, +- The number of hypervisors. -#### Interpreting the displayed usage data +#### Interpreting the displayed consumption data -__Provisioned Memory (Cluster):__ This graph represents the total amount of memory provisioned for the cluster. +__Provisioned Memory (Cluster):__ This chart represents the total amount of memory allocated to the cluster. -__Consumed Memory (Cluster):__ This view displays the memory actively consumed solely by the virtual machines in the cluster. This corresponds to the physical memory actually used by the VMs for their operations, which is a key indicator of the current workload. +__Used Memory (Cluster):__ This view displays the memory actively consumed solely by the cluster's virtual machines. It corresponds to the physical memory actually used by the VMs for their operations, which is a key indicator of the current workload. -__Worst Case Allocation (Cluster):__ This graph illustrates the memory that would be required if all the virtual machines in the cluster were to simultaneously consume all of the memory allocated to them (the maximum consumption scenario). The result also includes the memory necessary for the operation of the cluster as well as various VMware-specific parameters (the calculation is not simply equal to the sum of the RAM of all virtual machines). This helps anticipate critical resource needs and prevent memory exhaustion. +__Worst-Case Allocation (Cluster):__ This chart illustrates the memory that would be required if all virtual machines in the cluster were to simultaneously consume their entire allocated memory (the maximum consumption scenario). The result also includes the memory required for cluster operations as well as various VMware-specific parameters (the calculation is not simply equal to the sum of the RAM of all virtual machines). This allows anticipating critical resource needs and preventing memory exhaustion. -__Consumed Memory (ESX):__ Unlike the cluster graphs, this one shows the total memory consumed on a specific ESX host. This includes not only the memory used by the virtual machines hosted on this host, but also the memory consumed by the hypervisor system itself (ESXi overhead). - -{/*TODO: Add missing page. */} -{/* When viewing a cluster's page, several tabs are available. The _*'Rules'*tab allows you to define [affinity / anti-affinity rules](compute.md#managing-affinity-of-your-virtual-machines)*/} +__Used Memory (ESX):__ Unlike the cluster charts, this one shows the total memory consumed on a specific ESX host. This includes not only the memory used by the virtual machines hosted on this host, but also the memory consumed by the hypervisor's own system (ESXi overhead). -In the _*'Hosts'* tab, you see the following information for each hypervisor: +You will see the following for each hypervisor in the __'Hosts'__ tab: -- CPU and Memory usage, -- Number of assigned virtual machines, -- Availability of a new OS build for the hypervisor, if applicable, -- Hypervisor status (connected in production, in maintenance, powered off, etc.), -- Action menu. +- __CPU__ and __Memory__ usage, +- The number of affected virtual machines, +- The availability of a new build for the hypervisor's operating system, if applicable, +- The hypervisor status (connected in production, in maintenance, powered off, ...), +- An action menu. -Several actions are available from the _*'Hosts'* tab: +Several actions are possible from the __'Hosts'__ tab: -- Request new hypervisors using the _*'Add Host'* button: +- order new hypervisors via the __'Add a host'__ button: -- View detailed information about a hypervisor: +- the possibility to view __the details of a hypervisor__: -- Put a hypervisor into or take it out of __maintenance mode__, -- __Update__ the hypervisor if needed; to do so, __it must be in maintenance mode__. There are two types of updates: +- to put a hypervisor in or out of __maintenance mode__, +- to __update__ this hypervisor if applicable; to do so, __it must be in maintenance mode__. There are two types of updates: -1. VMware builds (new hypervisor versions): +1. VMware builds (new versions of the hypervisor): -1. Firmware update for your compute node (BIOS and daughter card firmware): +1. Updating the firmware of your compute blade (BIOS and daughter board firmware): *__Note__*: -- Cloud Temple provides hypervisor builds at regular intervals. -It is important to keep your hypervisors regularly updated, especially to apply security patches. -However, __we do not automatically update your hypervisors__. Cloud Temple does not have visibility into your workload availability commitments. -Therefore, we leave it to you to manage your change process and apply new builds at the most appropriate time. -- The update process is fully automated. You must have at least two hypervisors in your cluster to ensure uninterrupted service during updates. +- *Cloud Temple provides hypervisor builds at regular intervals. +It is important to regularly update your hypervisors, particularly to allow the application of security patches. +However, __we do not update your hypervisors automatically__. Cloud Temple has no visibility into the availability commitments of your workloads. +We therefore leave it to you to implement your change management process and apply the new builds at the most appropriate time.* +- *The update process is fully automated. You must have at least two hypervisors in your cluster to enable zero-downtime updates.* {/*TODO: Add missing page. */} -{/* -*You must have the appropriate [permissions](../console/permissions.md) to perform these actions.**/} +{/* -*Il est nécessaire d'avoir les permissions adéquates pour effectuer les différentes actions.**/} -You can also view all affinity/anti-affinity rules for your hypervisor cluster in the _*'Rules'* section. +You will also see all affinity/anti-affinity rules for your hypervisor cluster in the __'Rules'__ section. -### Managing VM Affinity +### Managing affinity for your virtual machines -__Affinity and anti-affinity rules__ allow you to control the placement of virtual machines across your hypervisors. -They can be used to manage resource utilization within your __'Cpool'__. -For example, they can help balance workloads across servers or isolate resource-intensive workloads. -In a VMware __'Cpool'__, these rules are often used to manage the behavior of virtual machines during vMotion. -vMotion enables moving virtual machines from one host to another without service interruption. +The __affinity and anti-affinity rules__ allow you to control the placement of virtual machines on your hypervisors. +They can be used to manage resource utilization in your __'Cpool'__. +For example, they can help balance workload across servers or isolate resource-intensive workloads. +In a VMware __'Cpool'__, these rules are often used to manage virtual machine behavior with vMotion. +vMotion allows virtual machines to be moved from one host to another without service interruption. -You can configure rules using the following options: +You can configure the following through rule management: -- __Affinity Rules__: These rules ensure that certain virtual machines run on the same physical host. - They are used to improve performance by keeping virtual machines that frequently communicate together on the same server, thus reducing network latency. Affinity rules are particularly useful in scenarios where performance is critical, such as databases or applications requiring fast inter-server communication. +- __Affinity Rules__: These rules ensure that certain virtual machines run on the same physical host. +They are used to improve performance by keeping frequently communicating virtual machines +together on the same server to reduce network latency. Affinity rules are useful in scenarios +where performance is critical, such as with databases or applications that require fast communication between servers. -- __Anti-Affinity Rules__: Conversely, these rules ensure that certain virtual machines do not run on the same physical host. - They are essential for availability and resilience—for example, to prevent all critical machines from being affected in the event of a single server failure. Anti-affinity rules are crucial for high-availability applications, such as in production environments where fault tolerance is a priority. - For instance, you would not want both of your Active Directory servers located on the same hypervisor. +- __Anti-Affinity Rules__: Conversely, these rules ensure that certain virtual machines do not run +on the same physical host. They are important for availability and resilience, for example, +to prevent critical machines from being affected in the event of a single server failure. +Anti-affinity rules are crucial for applications requiring high availability, +such as in production environments where fault tolerance is a priority. +For example, you do not want your two Active Directories on the same hypervisor. -When creating a rule, you define the rule type (affinity / anti-affinity), the rule name, its activation status (__'Status'__), and the virtual machines involved within your hypervisor cluster. +When creating a rule, you define the rule type (affinité / anti-affinité), the rule name, +its activation status (__'Statut'__), and the affected machines in your hypervisor cluster. -*Note: The affinity/anti-affinity rules available in the console are rules between virtual machines (not between hypervisors and virtual machines).* +*Note: The affinity/anti-affinity rules offered in the console are rules regarding virtual machines with respect to each other (no rules between hypervisors and virtual machines).* ## Backup -### Create a Backup Policy +### Create a backup policy -To create a new backup policy, you must submit a request to support. Support is accessible via the buoy icon in the top-right corner of the window. +To add a new backup policy, you must submit a request to support. Support is accessible via the lifebuoy icon in the top right corner of the window. -Creating a new backup policy is done through a __service request__ specifying: +The creation of a new backup policy is done via __a service request__ specifying: - Your Organization's name - A contact name, email address, and phone number to finalize the configuration + Your Organization name + A contact name with their email and phone number to finalize the configuration The tenant name The backup policy name - The retention characteristics (x days, y weeks, z months, ...) + The characteristics (x days, y weeks, z months, ...) -### Assign a Backup Policy to a Virtual Machine +### Assign a backup policy to a virtual machine -When an SLA is assigned to a virtual machine (VM), all disks associated with that VM automatically inherit the same SLA. Subsequently, you can manually trigger a backup execution via the __Backup Policies__ tab. If no manual launch is performed, the backup will run automatically according to the schedule defined by the SLA. +When an SLA is assigned to a virtual machine (VM), all disks associated with that VM automatically inherit the same SLA. You can then manually trigger the backup execution via the "Backup Policies" tab. If not triggered manually, the backup will run automatically according to the schedule configured by the SLA. -SecNumCloud requires that a backup policy be assigned to a virtual machine before it is started. Otherwise, you will receive the following notification: +SecNumCloud requires a backup policy to be assigned to a virtual machine before it starts. Otherwise, you will see the following notification: -Click on the __Backup Policies__ tab in your virtual machine's menu. You can view the backup policy or policies assigned to this VM here. +Click the __'Backup Policies'__ tab in your virtual machine's menu. You can view the backup policy or policies assigned to it. -To assign a new backup policy to the virtual machine, click the __Add Policy__ button and select the desired backup policy. +To assign a new backup policy to the virtual machine, click the __'Add a policy'__ button and select the desired backup policy. ### Assign a backup policy to a virtual disk -It is also possible to assign an SLA directly to a specific virtual disk of a machine. In this case, the virtual machine does not inherit this SLA applied individually to the disk. However, it is not possible to manually trigger backup execution at the disk level, as this functionality is not supported in Spectrum Protect Plus. +It is also possible to assign an SLA directly to a specific virtual disk of a machine. In this case, the virtual machine does not inherit this SLA applied individually to the disk. However, it is not possible to manually trigger backup execution at the disk level, as this feature is not supported in Spectrum Protect Plus. -On the other hand, it is possible to exclude specific disks from one or more backup policies (SLAs) of the VM, thereby allowing the removal of one or more SLAs on a per-disk basis. This approach provides the flexibility to manually initiate backup execution for a specific SLA without affecting all disks of the virtual machine, enabling more granular backup management. +Conversely, it is possible to exclude certain disks from one or more backup policies (SLA) of the VM, which allows unassigning one or more SLA(s) on a per-disk basis. This approach offers the flexibility to manually trigger backup execution for an SLA without affecting all disks of the virtual machine, thereby enabling more granular backup management. -Click on the action bar of the disk to which you want to assign a backup policy. Then, click on __'Policies'__ and select the desired backup policy. +Click the action bar of the disk to which you want to assign a backup policy. Then, click __'Policies'__ and select the desired backup policy. -*Note*: The policy to be added must reside in a different availability zone than the virtual machine. +*Note*: The policy to add must be located in a different availability zone than the virtual machine. ### Run a backup policy -In the __'Backup Policies'__ menu of your virtual machine, click the __'Run'__ button in the __'Actions'__ column for the backup policy you wish to execute. +In the __'Backup Policies'__ menu of your virtual machine, click the __'Run'__ button in the __'Actions'__ column for the backup policy you want to run. -You can also run a backup policy from the __'Backups'__ section in your virtual machine's menu. Click the __'Run Backup'__ button, then select the backup you want to execute from the dropdown list. +To run a backup policy, you can also start from the __'Backups'__ section in your virtual machine's menu. Click the __'Run Backup'__ button, then select the backup you want to run from the dropdown list. ### Remove a backup policy -In the __'Backup Policies'__ menu of your virtual machine, click the __'Remove'__ button in the __'Actions'__ column for the backup policy you wish to remove. +In the __'Backup Policies'__ menu of your virtual machine, click the __'Remove'__ button in the __'Actions'__ column of the backup policy you wish to remove. -__Warning: It is not possible to remove the last SLA on an active virtual machine:__ +__Note: It is not possible to remove the last SLA from a running virtual machine:__ ### Deleting a backup policy: case of a suspended backup policy ("held") -When the last resource is disassociated from an SLA policy, the system automatically detects this situation. As a result, all jobs associated with this SLA policy are automatically moved to the "Held" ("Suspended") state. It is important to note that direct deletion of the SLA policy is not possible at this stage due to the presence of dependent jobs. To proceed with the deletion of the policy, a specific sequence of steps must be followed. +When the last resource is disassociated from an SLA policy, the system automatically detects this situation. As a result, all jobs associated with this SLA policy automatically switch to the "Suspended" ("Held") state. It is important to note that at this stage, direct deletion of the SLA policy is not possible due to the existence of dependent jobs. To proceed with the policy deletion, a series of steps must be followed. -First, verify that the affected jobs are indeed in the "Held" state. Once confirmed, these jobs can be deleted. Only after removing these dependent jobs can the SLA policy be permanently erased from the system. +You must verify that the affected jobs are indeed in the "Suspended" state. Once this verification is complete, these jobs can be deleted. Only after deleting these dependent jobs can the SLA policy be permanently removed from the system. -A special case requires particular attention: adding a new resource to an SLA policy whose dependent jobs have not yet been deleted. In this scenario, the job identifiers will be preserved. However, it is crucial to note that jobs in the "Held" state will not resume automatically. Manual intervention will be required to reactivate them and allow their execution. +A special case requires specific attention: adding a new resource to an SLA policy whose dependent jobs have not been deleted. In this situation, the job identifiers will be retained. However, it is crucial to note that jobs in the "Suspended" state will not automatically resume. Manual intervention will be required to reactivate them and allow their execution. -> __Note:__ For any clarification regarding this situation, please contact Cloud Temple support. +note : For any clarification regarding this situation, contact Cloud Temple support. The Cloud Temple console prevents assigning a virtual machine to a suspended policy: -Similarly, it is not possible to start a virtual machine associated with a suspended backup policy: +Similarly, it is not possible to start a virtual machine that is associated with a suspended backup policy: -### Restore a Backup +### Restore a backup -The __'Backups'__ tab in your virtual machines menu allows you to access the list of backups for that machine. +The __'Backups'__ tab in your virtual machines' menu allows you to access the list of their backups. To restore a backup, click the __'Restore'__ button on the row corresponding to the backup you wish to restore. -1. __Production Mode__: Production mode enables disaster recovery at the local site using either the primary storage or a remote disaster recovery site, replacing the original machine images with recovery images. All configurations are transferred during recovery, including names and identifiers, and all data copy jobs associated with the virtual machine continue to run. During a production restore, you can choose to replace the virtual machine's storage with a virtual disk from a previous virtual machine backup. +1. __Production mode__: Production mode allows for disaster recovery on the local site from primary storage or a remote disaster recovery site, by replacing the original machine images with recovery images. All configurations are transferred as part of the recovery, including names and identifiers, and all data copy jobs associated with the virtual machine continue to run. During a production mode restore, you can choose to replace the storage in the virtual machine with a virtual disk from a previous virtual machine backup. -2. __Test Mode__: Test mode creates temporary virtual machines for development, testing, snapshot verification, and disaster recovery validation based on a repeatable schedule, without impacting production environments. Test machines run as long as needed for testing and verification, then are automatically cleaned up. Using isolated networking, you can establish a secure environment to test your work without interfering with production virtual machines. Virtual machines created in test mode have unique names and identifiers to prevent conflicts in your production environment. +2. __Test mode__: Test mode creates temporary virtual machines for development, testing, snapshot verification, and disaster recovery verification based on a repeatable schedule, without impacting production environments. Test machines run as long as necessary to perform the test and verification, after which they are cleaned up. Through isolated networking, you can establish a secure environment to test your workloads without interfering with virtual machines used for production. Virtual machines created in test mode have unique names and identifiers to avoid conflicts in your production environment. -3. __Clone Mode__: Clone mode creates permanent or long-running copies of virtual machines for use cases requiring persistent duplicates, such as data exploration or duplicating a test environment on an isolated network. Virtual machines created in clone mode have unique names and identifiers to avoid conflicts in your production environment. In clone mode, be mindful of resource consumption, as this mode creates permanent or long-term virtual machines. +3. __Clone mode__: Clone mode creates copies of virtual machines for use cases requiring permanent or long-running copies for data exploration or duplicating a test environment on an isolated network. Virtual machines created in clone mode have unique names and identifiers to avoid conflicts in your production environment. In clone mode, you must be mindful of resource consumption as clone mode creates permanent or long-term machines. -__Restore is set to 'TEST' mode by default to protect production__, and you can choose the name of the restored VM: +__Restoration defaults to "TEST" mode to preserve production__ and you can choose the name of the restored VM: -Note that if testing is successful, you can promote a virtual machine from test mode to production mode: +Note that if the tests are satisfactory, it is possible to move a virtual machine from test mode to production mode: - + \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/backup/iaas_backup.md b/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/backup/iaas_backup.md index 3b20119b..14e36c6e 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/backup/iaas_backup.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/backup/iaas_backup.md @@ -31,8 +31,8 @@ There are 2 ways to clone a virtual machine: -- The second solution consists of cloning the virtual machine using __a backup__ of the virtual machine and then using __the clone restore mode__ of a backup. -Go to the __'Backup'__ section of your virtual machine and choose the __'Restore'__ action: +- The second method involves cloning the virtual machine by using __a backup__ of the virtual machine, then using __restore in clone mode__ on a backup. +Navigate to the __'Backup'__ section of your virtual machine and select the __'Restore'__ action: @@ -40,15 +40,15 @@ Then select the __'Clone'__ restore option: -#### Why when I go to the "Backup Policies" page and select a policy, I don't see the same virtual machines as when I go to "Backup Reports" and select the same policy? +#### Why, when I go to the "backup policies" page and select a policy, do I not see the same virtual machines as when I go to "backup reports" and select the same policy? -This means that the missing virtual machines had the relevant policy assigned for a period of time (explaining their presence in the backup reports) but __this is no longer the case at present__. +This means that the missing virtual machines had the policy in question assigned to them for a period of time (explaining their presence in the backup reports) but that __this is no longer the case currently__. #### How to add a backup policy to a virtual machine? -Go to the page __'Virtual Machines'__ in the __'IaaS'__ section of the vertical menu on the left side of the screen. +Navigate to the __'Virtual Machines'__ page in the __'IaaS'__ section of the green menu bar on the left side of the screen. -Select a virtual machine then the __'Backup Policies'__ tab of this machine: +Select a virtual machine and then the __'Backup Policies'__ tab for that machine: @@ -56,127 +56,130 @@ Add the desired backup policy: -### How to remove a backup policy from a virtual machine? +### How to delete a backup policy from a virtual machine? -Go to the page __'Virtual Machines'__, select a virtual machine then the __'Backup Policies'__ tab of this machine. +Go to the __'Virtual Machines'__ page, select a virtual machine, and then the __'Backup Policies'__ tab for that machine. -Remove the desired backup policy and confirm the deletion: +Delete the desired backup policy and confirm the deletion: -__*Note:*__ *Attention! __Secnumcloud requires that there is at least one backup policy__ for each virtual machine.* +__*Note:*__ *Caution! __Secnumcloud requires at least one backup policy__ for each virtual machine.* -### How to know if a backup has been successfully executed? +### How to verify if a backup was executed successfully? There are 2 possible solutions: -1. Go to the __'Jobs'__ page of the __'Backup'__ menu in the vertical menu on the left side of your screen. Choose the job corresponding to the backup and select it. -Then find the *jobsession* corresponding to your backup, select it using the __'Actions'__ menu. +1. Go to the __'Jobs'__ page under the __'Backup'__ menu in the green banner on the left side of your screen. Choose the job corresponding to the backup and select it. +Then, find the *job session* corresponding to your backup, and select it using the __'Actions'__ menu. -These actions allow you to get detailed logs of the backup execution. You can search in the backup logs: +These actions allow you to view the detailed logs of the backup execution. You can search within the backup logs: -1. Go to the __'Backup Reports'__ page and select the policy that interests you: +1. Go to the __'Backup Reports'__ page and select the policy you are interested in: -You can then filter by date, download the report in __PDF__ or __CSV__ format to use it in third-party tools. +You can then filter by date, download the report in __PDF__ or __CSV__ format to process it in third-party tools. -### How to launch a restore? +### How to perform a restore? -Go to the page __'Virtual Machines'__, select a virtual machine then the __'Backups'__ tab of this machine. To launch the restore, select the backup to restore. +Navigate to the __'Virtual Machines'__ page, select a virtual machine, then the __'Backups'__ tab for that machine. To start the restore, select the backup to restore. ### What is the quiescing option? -Quiescing is a process consisting of notifying the system to put it in an appropriate state before the snapshot begins. -By default, __quiescing is enabled__. It can be manually disabled in cases where the system handles the snapshot poorly or if the hypervisor agent is not installed on the virtual machine. +__quiescing__ is a process that prepares the system to enter an appropriate state before the snapshot begins. +By default, __quiescing is enabled__. It can be manually disabled if the system handles the snapshot poorly or if the hypervisor agent is not installed on the virtual machine. -To do this, in the __'Backups'__ section of your virtual machine, click on __'Modify options'__ and disable quiescing: +To do this, in the __'Backups'__ section of your virtual machine, click __'Edit options'__ and disable __quiescing__ : -### What are the restore options for a virtual machine? +### What are the restoration options for a virtual machine? -3 main options to restore a VM, on its original target or on a different target: +3 main options to restore a VM, either to its original target or to a different target: -- __'CLONE'__: Restores the virtual machine by renaming it, without replacing the original virtual machine. +- __'CLONE'__ : Restores the virtual machine by renaming it, without replacing the original virtual machine. -- __'PRODUCTION'__: Restores and __replaces__ the production virtual machine (the currently running virtual machine is __deleted__). +- __'PRODUCTION'__ : Restores and __replaces__ the production virtual machine (the currently running production virtual machine is __destroyed__) -- __'TEST'__: Restores the production virtual machine __without overwriting__ it. +- __'TEST'__ : Restores the production virtual machine __without overwriting it__. -### How to restore and replace the production virtual machine without keeping the currently running virtual machine? +### How to restore and replace the production virtual machine, without keeping the currently running production virtual machine? -Choose the __'PRODUCTION'__ restore mode. The 'overwrite the virtual machine' option is enabled by default. +Select the __'Production'__ restore mode. The 'overwrite virtual machine' option is selected by default. ### Why is the number of virtual machines different between the backup and compute modules? -The difference in virtual machines may come from the fact that the backup module has not retrieved the latest created machines. +The difference in the number of virtual machines may be due to the backup module not having discovered the most recently created machines. -To update the backup module, you need to request the backup software layer to re-inventory the virtual machines. -To do this, in the __'Infrastructure'__ menu of the vertical menu on the left side of the screen, navigate to the __'Spectrum Protect Plus'__ submenu and use the __'Action'__ button of the inventory: +To update the backup module, you must request the backup software layer to re-inventory the virtual machines. +To do this, in the __'Infrastructure'__ menu of the green banner on the left side of the screen, navigate to the __'Spectrum Protect Plus'__ submenu and use the __'Action'__ button for the inventory: -Note that you have the date of the last inventory indicated. +Note that the date of the last inventory is displayed. -If a difference in virtual machines persists, it may come from the virtual machines hosting the system allowing backups. Indeed, these do not count themselves in the calculation of the number of machines on the backup module. +If a virtual machine discrepancy persists, it may be due to the virtual machines hosting the backup system. +Indeed, they do not count themselves toward the machine count on the backup module. -### How to inventory the virtual machines on the backup module? +### How to inventory virtual machines on the backup module? -To launch an inventory of the virtual machines on the backup module, in the __'Infrastructure'__ menu of the vertical menu on the left side of the screen, navigate to the __'Spectrum Protect Plus'__ submenu and use the __'Action'__ button of the inventory: +To launch an inventory of virtual machines on the backup module, in the __'Infrastructure'__ menu of the green banner on the left side of the screen, navigate to the __'Spectrum Protect Plus'__ submenu and use the __'Action'__ button for the inventory: -Note that you have the date of the last inventory indicated. +Note that the date of the last inventory is displayed. -### Why does the backup of my virtual machine fail indicating a snapshot problem? +### Why does my virtual machine backup fail with a snapshot issue? -This error means that it is the first time your machine is trying to be backed up. +This error indicates that this is the first time your machine is attempting to be backed up. -__During the first backup of a virtual machine, no snapshot should be present on the machine.__ +__When performing the first backup of a virtual machine, no snapshots should be present on the machine.__ -### How to restore and replace the production virtual machine, while keeping and renaming the production virtual machine? +### How to restore and replace the production virtual machine, while retaining and renaming the original production virtual machine? -Here's how to proceed: +Here is how to proceed: -- Choose the __'CLONE'__ mode (the clone mode causes a change in the virtual machine's MAC address and UUID), -- Rename the restored virtual machine with the final name (of the production VM), -- Rename the old production virtual machine (with _OLD). +- Select the __'CLONE'__ mode (clone mode changes the virtual machine's MAC address and UUID), +- Rename the restored virtual machine with its final name (the production VM name), +- Rename the old production virtual machine (to _OLD). -### How to restore a virtual machine without replacing the original machine? +### How to restore a virtual machine without replacing the original virtual machine? -Here's how to proceed: +Here is how to proceed: -- Choose the __'CLONE'__ mode (the clone mode causes a change in the virtual machine's MAC address and UUID) -- Define the name of the clone (_REST or others) +- Select the __'CLONE'__ mode (clone mode changes the virtual machine's MAC address and UUID) +- Set the clone name (_REST or other) ### Why can't I delete a disk in instant access mode on my virtual machine? -Run the backup inventory: in the __'Infrastructure'__ menu of the vertical menu on the left side of the screen, navigate to the __'Spectrum Protect Plus'__ submenu and use the __'Action'__ button of the inventory: +Run the backup inventory: in the __'Infrastructure'__ menu of the green banner on the left side of the screen, navigate +to the __'Spectrum Protect Plus'__ submenu and use the __'Action'__ button of the inventory: -Perform the disk deletion once the inventory is complete. Refresh the virtual machine to verify that the disk has been removed. +Perform the disk deletion once the inventory is complete. Refresh the virtual machine to verify that the disk has been successfully deleted. ### Why can't I start a virtual machine with a policy in Held status (suspended policy)? -A policy in "Held" status is a feature that allows temporarily suspending retention and data deletion actions, ensuring that data remains intact and available beyond their standard retention period for specific reasons such as compliance or legal needs. +A policy in "Held" status is a feature that allows temporarily suspending data retention and deletion actions, ensuring that data remains intact and available beyond its standard retention period for specific reasons such as compliance or legal requirements. -Suppose a company has a 30-day backup retention policy for certain production data. Due to a legal investigation, they receive a request to preserve all relevant backups indefinitely. You can suspend the associated backup policy via the "Held" status to prevent automatic deletion of these backups after 30 days, ensuring the data remains available for the duration of the investigation. -A suspended backup policy (in Held status) will not execute the backups of the assigned schedule, the virtual machine cannot then be considered protected, which does not comply with SecNumCloud standards. +Assume a company has a 30-day backup retention policy for certain production data. Due to a legal investigation, they receive a request to preserve all relevant backups for an indefinite period. You have the option to suspend the associated backup policy via the "Held" status to prevent the automatic deletion of these backups after 30 days, ensuring that the data remains available throughout the duration of the investigation. -Do not hesitate to ask our support team for advice on this subject. +A suspended backup policy (in Held status) will not execute the backups from its assigned schedule, meaning the virtual machine can no longer be considered protected, which does not comply with SecNumCloud standards. + +Do not hesitate to ask our support team for advice on this matter. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_template.md b/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_template.md index edab081d..8a12fa91 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_template.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_template.md @@ -1,5 +1,5 @@ --- -title: Deployment from a Template +title: Deployment from a template tags: - iaas_vmware - tutorials @@ -8,43 +8,40 @@ import shivaCatalogsCharger from '@site/docs/iaas_vmware/tutorials/images/shiva_ import shivaCatalogsAjout from '@site/docs/iaas_vmware/tutorials/images/shiva_catalogs_ajout.png'; import shivaCatalogsDeployer from '@site/docs/iaas_vmware/tutorials/images/shiva_catalogs_deployer.png'; -This guide will enable you to deploy your first instances on the Cloud of Trust in less than 5 minutes. +This guide will allow you to deploy your first instances on the Trusted Cloud in less than 5 minutes. ## __Prerequisites__ -1. Have subscribed to the Cloud Temple offering (IaaS subscription). -2. Have the necessary permissions enabled for the __'IaaS'__ object driver. +1. Have subscribed to the Cloud Temple product (subscription to the IaaS product). +2. Have permissions enabled for the __'IaaS'__ object driver. -## Deploy a Virtual Machine from a Template +## Deploy a virtual machine from a Template -This guide walks you through the steps to deploy a virtual machine from a Template in the Console. +This guide shows you step by step how to deploy a virtual machine from a Template in the Console. -In the Console portal, go to the __"Trusted Cloud"__ tab, then __"Catalogs"__. Before you can deploy a Template, it must first be uploaded to your private catalog, under the __"My Catalog"__ tab. +On the Console portal, navigate to the "Trusted Cloud" tab, then "Catalogs". Before you can deploy a Template, it must be loaded into your private catalog, in the "My Catalog" tab. -To do this, you have two options: - -- Import your own Template directly into your private catalog, or -- Import a template from Cloud Temple's public catalog. +To do this, you have two options: import your own Template directly into your private catalog, or import a template from the Cloud Temple public catalog. ### Import a Personal Template into the Private Catalog -In the "My Catalog" tab, click on "Publish Files". +In the "My Catalog" tab, click on "Publish files". -Then follow the template publishing steps by entering its name and description, and selecting its location within a library. +Then follow the template publishing steps, entering its name and a description, and choosing its location in a library. The template should then appear in your private catalog. ### Import a Template from the Public Catalog -In the "Public Catalog" tab, click the "Add to My Catalog" button of the desired template to import it into your private catalog. It should then appear in your private catalog. +In the "Public Catalog" tab, click the "Add to my catalog" button for the Template of your choice to import it into your private catalog. It should then appear in your private catalog. ### Deploy the Template -Once the template has been imported into your private catalog, you can deploy it by clicking "Deploy." +Once the Template is imported into your private catalog, you can deploy it by clicking "Deploy". -Then follow the resource deployment steps, selecting its physical location (datacenter, compute cluster, datastore) and other optional configuration parameters. +Next, follow the deployment steps for the resource, selecting its physical location (datacenter, compute cluster, datastore) and other optional configuration parameters. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_terraform.md b/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_terraform.md index fc82bb0d..239fb2a2 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_terraform.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_terraform.md @@ -7,19 +7,19 @@ tags: import statusCloudInit from '@site/docs/iaas_vmware/tutorials/images/status_cloud_init.png'; import cloudInitOutput from '@site/docs/iaas_vmware/tutorials/images/cloud-init-output.png'; -This guide will allow you to deploy your first instances on the Trust Cloud in less than 5 minutes. +This guide will enable you to deploy your first instances on the Cloud de Confiance in less than 5 minutes. ## __Prerequisites__ -1. Have subscribed to the Cloud Temple offer (subscription to the IaaS offer). -2. Have the permissions enabled for the __'IaaS'__ object driver +1. Have subscribed to the Cloud Temple product (subscription to the IaaS product). +2. Have permissions enabled for the __'IaaS'__ object driver. -## Deploy a Virtual Machine via Terraform +## Deploy a virtual machine via Terraform -In this section, we will see how to deploy a virtual machine on the Trust Cloud via the Cloud Temple Terraform provider in a few minutes. -If you have not yet used the Cloud Temple provider, follow the instructions at [this address](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest/docs) to install it and authenticate to your tenant. +In this section, we will see how to deploy a virtual machine on the Cloud de Confiance in a few minutes using the Terraform Cloud Temple provider. +If you have not yet used the Cloud Temple provider, follow the instructions at [the following address](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest/docs) to install it and authenticate to your tenant. -We will start by creating a .tf file that describes the instance we want to deploy. +We will start by creating a .tf file that describes the instance we wish to deploy. The following script allows you to deploy a virtual machine from scratch. ```hcl @@ -58,16 +58,16 @@ resource "cloudtemple_compute_virtual_machine" "scratch" { The parameters used in this script are as follows: -- datacenter_id (required): datacenter in which the virtual machine is deployed -- host_cluster_id (required): cluster in which the virtual machine is deployed -- name (required): name of the machine -- memory: RAM allocated to the machine initially -- cpu: number of vCPU allocated to the machine initially -- num_cores_per_socket: number of cores per socket -- datastore_cluster_id: datastore to which the machine is attached -- guest_operating_system_moref: guest operating system +- datacenter_id (required) : datacenter in which the virtual machine is deployed +- host_cluster_id (required) : cluster in which the virtual machine is deployed +- name (required) : machine name +- memory : RAM allocated to the machine initially +- cpu : number of vCPUs allocated to the machine initially +- num_cores_per_socket : number of cores per socket +- datastore_cluster_id : datastore to which the machine is attached +- guest_operating_system_moref : operating system of the machine -Other parameters can be applied to a virtual machine during its deployment. You can find all these parameters on the following page of the [Terraform documentation](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest/docs/resources/compute_virtual_machine) +Additional parameters can be applied to a virtual machine during its deployment. You can find all of these parameters on the following page of the [Terraform documentation](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest/docs/resources/compute_virtual_machine) Once the .tf file is created and saved, run the following command to verify your code: @@ -75,7 +75,7 @@ Once the .tf file is created and saved, run the following command to verify your terraform validate ``` -Then, plan the deployment and check that the plan matches what you want to achieve: +Then, plan the deployment and verify that the plan matches what you intend to do: ``` terraform plan @@ -89,14 +89,14 @@ terraform apply ## Use cloud-init to configure a virtual machine deployed from the Terraform provider -The __'cloud-init'__ tool allows you to customize a virtual machine, or a cloud instance, during its first boot. It is a widely used standard. +The __'cloud-init'__ tool enables customization of a virtual machine or cloud instance during its first boot. It is a widely adopted standard. For more information, refer to the [documentation](https://cloudinit.readthedocs.io/en/latest/) ### Compatibility -In order to be able to configure a virtual machine deployed from the Cloud Temple Terraform provider via cloud-init, the __OVF__ used to deploy it must be __compatible__ with __cloud-init__. +To be able to configure a virtual machine deployed from the Terraform Cloud Temple provider via cloud-init, the __OVF__ used to deploy it must be __compatible__ with __cloud-init__. -To check the compatibility of your virtual machine with cloud-init, enter the following command: +To verify your virtual machine's compatibility with cloud-init, enter the following command: `systemctl status cloud-init.service` @@ -104,12 +104,12 @@ If cloud-init is correctly installed on the machine, you should see a response l -If needed, you can find cloud-init compatible images on the internet (for example [Ubuntu Cloud Image](https://cloud-images.ubuntu.com/)) or install it yourself on your machine before converting it to an OVF. +If needed, you can find cloud-init compatible images online (for example [Ubuntu Cloud Image](https://cloud-images.ubuntu.com/)) or install it yourself on your machine before converting it to an OVF. ### Deployment -Now that you are sure the deployed OVF is compatible with cloud-init, here is an example of a Terraform file (.tf) that you can use to configure your virtual machine. -NB: All examples shown here can be found in the examples folder of the Cloud Temple Terraform provider repository here: [Examples](https://github.com/Cloud-Temple/terraform-provider-cloudtemple/tree/main/examples) +Now that you are certain that the deployed OVF is fully compatible with cloud-init, here is an example of a Terraform (.tf) file that you can use to configure your virtual machine. +Note: All examples shown here can be found in the examples folder of the Cloud Temple Terraform provider repository here: [Examples](https://github.com/Cloud-Temple/terraform-provider-cloudtemple/tree/main/examples) #### `main.tf` @@ -177,27 +177,27 @@ users: plain_text_passwd: password ``` -The interesting element here is the presence of the cloud-init property, you can see that it is composed of two sub-properties: __network-config__, and __user-data__. +The interesting aspect here is the presence of the cloud-init property; you can see that it consists of two sub-properties: __network-config__, and __user-data__. -These last ones are part of a set of 7 properties that you can use to configure your virtual machine with cloud-init. +These are part of a set of 7 properties that you can use to configure your virtual machine with cloud-init. -- __user-data__: This value must be encoded in base64 and contains notably configuration information for the user accounts of the virtual machine. You can also add scripts to install or update packages. -- __network-config__: This value must be encoded in base64 and contains notably network configuration information for the virtual machine. -- __public-keys__: Indicates that the instance should fill the 'authorized_keys' of the default user with this value. -- __instance-id__: Allows to define a unique instance identifier with cloud-init. -- __password__: If defined, the default user's password will be set to this value to allow password-based connection. The password will only be valid for one connection. If the value is 'RANDOM', a random password will be generated and displayed on the console. -- __hostname__: Specifies a hostname for the deployed instance. -- __seedfrom__: Allows to define a URL where cloud-init will go to retrieve the configuration files it must use. +- __user-data__ : This value must be base64 encoded and notably contains configuration information for the virtual machine's user accounts. You can also add scripts to install or update packages. +- __network-config__ : This value must be base64 encoded and notably contains network configuration information for the virtual machine. +- __public-keys__ : Indicates that the instance should populate the default user's 'authorized_keys' with this value. +- __instance-id__ : Allows setting a unique instance identifier for cloud-init. +- __password__ : If set, the default user's password will be set to this value to allow password-based login. The password will only be valid for a single login. If the value is 'RANDOM', a random password will be generated and displayed on the console. +- __hostname__ : Specifies a hostname for the deployed instance. +- __seedfrom__ : Allows setting a URL from which cloud-init will fetch the configuration files it needs to use. For more information on how cloud-init works, please refer to the [official documentation](https://cloudinit.readthedocs.io/en/latest/) ### Execution -To verify the correct execution of cloud-init, you should be able to connect with the user you configured in the user-data.yml file or the hostname should change to be set to the one you put in 'hostname'. +To verify that cloud-init executed correctly, you should be able to log in using the user you configured in the user-data.yml file, or the hostname should have been updated to the one you specified in ‘hostname’. -In case of issues, you can check the cloud-init logs using the following command: +If you encounter any issues, you can check the cloud-init logs using the following command: `sudo cat /var/log/cloud-init-output.log` -You should see various information about the execution of cloud-init. In the following screenshot, it can be seen that the network configuration was successfully completed. +You should see various details regarding the cloud-init execution. As shown in the screenshot below, the network configuration completed successfully. - + \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/vm_encryption.md b/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/vm_encryption.md index 0d4189b4..c145c170 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/vm_encryption.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/vm_encryption.md @@ -1,5 +1,5 @@ --- -title: Encrypt a Virtual Machine +title: Encrypt a virtual machine tags: - iaas_vmware - tutorials @@ -10,15 +10,15 @@ import shivaHsmKms_002 from '@site/docs/iaas_vmware/tutorials/images/shiva_hsm_k import shivaHsmKms_003 from '@site/docs/iaas_vmware/tutorials/images/shiva_hsm_kms_003.png' import shivaHsmKms_004 from '@site/docs/iaas_vmware/tutorials/images/shiva_hsm_kms_004.png' -This tutorial guides you through encrypting an IaaS VMware virtual machine from the Console portal. +This tutorial helps you encrypt an IaaS VMWare virtual machine from the Console portal. ### Prerequisites -1. **Key Provider (HSM/KMS)**: - - A key provider must be configured on the vStack. (If no key provider is configured, please contact support via a ticket.) - - Ensure the key provider is properly enabled. +1. **Key Provider (HSM/KMS)** : + - A key provider must be configured on the vStack. (If no key provider is configured, please contact the support team via a ticket.) + - Ensure that the key provider is properly enabled. -2. **Virtual Machine State**: +2. **Virtual Machine State** : - The virtual machine must be powered off. - The virtual machine must not be in spp mode 'test'. - The virtual machine must not already be encrypted. @@ -27,24 +27,24 @@ This tutorial guides you through encrypting an IaaS VMware virtual machine from ### Interface -After logging into the Console web portal, navigate to the **'IaaS'** menu, then the **'Configuration'** submenu, and select the **'vCenters'** tab to check whether encryption is enabled for the specific vStack. +Once logged into the Console web portal, from the **'IaaS'** menu, under the **'Configuration'** submenu, and then the **'vCenters'** tab, you will find the information indicating whether encryption is enabled on the vstack in question. -Next, go to the **'Virtual Machines'** submenu and select the virtual machine you wish to encrypt. +Next, go to the **'Virtual Machines'** submenu and select the machine you wish to encrypt. In the virtual machine's general information, you will find the status indicating whether the machine is already encrypted or not. -If the virtual machine meets the prerequisites, proceed with the process by clicking the toolbar button displaying a lock icon labeled **'Encrypt Virtual Machine'**. +If the virtual machine meets the prerequisites, you can continue the procedure by clicking the button with a padlock icon in the toolbar labeled **'Encrypt Virtual Machine'**. -A confirmation window will appear—select **Encrypt**. +A confirmation window will appear; select Encrypt. -Once the operation is complete, you should see the updated status indicating that your virtual machine is now encrypted. +Once the action is complete, you should see the updated information indicating that your machine is encrypted. - + \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/llmaas/api.md b/i18n/en/docusaurus-plugin-content-docs/current/llmaas/api.md index 26d7deca..f2089849 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/llmaas/api.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/llmaas/api.md @@ -16,44 +16,46 @@ https://api.ai.cloud-temple.com/v1 All requests require an `Authorization` header with your API token: ``` -Authorization: Bearer YOUR_API_TOKEN +Authorization: Bearer VOTRE_TOKEN_API ``` ## Rate Limiting and Billing -### The Third-Party Principle: Access Tier, Budget, and Capacity +### The Tier Principle: Access Level, Budget, and Capacity -Our third-party system is designed as **complete service envelopes** that define three key aspects of your usage: +Our tier system is designed as **complete service packages** that define three key aspects of your usage: -1. **An Access Tier (Purchase Credit):** For Tiers 1 to 4, this is an upfront amount to be paid in advance to activate the service and unlock the technical and budgetary capabilities of the selected tier. -2. **A Monthly Budget Limit:** This is the cap on your monthly consumption, ensuring full control over your costs. -3. **Technical Capacity:** These are the throughput limits (tokens per day and per hour) that guarantee stable and predictable performance for your call volume. +1. **An Access Tier (Upfront Credit)**: For Tiers 1 to 4, this is an upfront amount to be paid in advance to activate the service and unlock the technical and budgetary capabilities of the selected tier. +2. **A Monthly Budget Limit**: This is the cap on your monthly consumption, ensuring complete control over your costs. +3. **Technical Capacity**: These are the throughput limits (tokens per day and per hour) that guarantee stable and predictable performance for your call volume. -Choosing a tier therefore involves balancing your initial investment, your projected monthly budget, and the required technical capacity. Your consumption within this envelope is then billed according to the current pricing rates. +Choosing a tier is therefore a balance between the initial investment, the projected monthly budget, and the required technical capacity. Your consumption within this package is then billed according to the current rates. -### Third-Party Tiers +### Tiers Table -| Tier | Purchase Credit | Monthly Limit | Tokens Output/Hour | Tokens Output/Day | Description | -|------|------------------|----------------|--------------------|-------------------|-----------| -| **Tier 1** | 200 € | 1,000 € | 150,000 | 3,600,000 | Standard usage | -| **Tier 2** | 500 € | 3,000 € | 300,000 | 7,200,000 | Professional usage | -| **Tier 3** | 1,000 € | 5,000 € | 450,000 | 10,800,000 | High volume | -| **Tier 4** | 4,000 € | 10,000 € | 600,000 | 14,400,000 | Enterprise | -| **Monthly Billing** | N/A | Unlimited | High priority | High priority | Contact sales | +| Tier | Purchase Credit | Monthly Limit | Output Tokens/Hour | Output Tokens/Day | Description | +| ------------------------- | --------------- | ------------- | ------------------ | ----------------- | -------------------- | +| **Tier 1** | 200 € | 1 000 € | 150 000 | 3 600 000 | Standard usage | +| **Tier 2** | 500 € | 3 000 € | 300 000 | 7 200 000 | Professional use | +| **Tier 3** | 1 000 € | 5 000 € | 450 000 | 10 800 000 | High volume | +| **Tier 4** | 4 000 € | 10 000 € | 600 000 | 14 400 000 | Enterprise | +| **Monthly Billing** | N/A | Unlimited | High priority | High priority | Sales contact | -**Note**: Rate limits are calculated based on output tokens. Token pricing varies by usage: +**Note**: Rate limits are calculated based on output tokens. Pricing varies by usage: -- **Input tokens**: 1.90 € / million -- **Output tokens (standard)**: 8.00 € / million -- **Output tokens (reasoner)**: 8.00 € / million (applies to most advanced models for complex agent-like or reasoning tasks) +| Usage Type | Rate | +| ------------------------------------ | ---------------------------------------------- | +| **Input Tokens** | 1.8 € / million | +| **Output Tokens (chat/completion)** | 8.00 € / million | +| **Reasoning Tokens** | 8.00 € / million | +| **Reranking** | 4.00 € / million reranked tokens | +| **Async Batch (input)** | 0.9 € / million (−50% vs standard) | +| **Async Batch (output)** | 4.00 € / million (−50% vs standard) | +| **Audio Transcription** | 0.01 € / minute (any started minute is billed) | -#### **Audio Billing** +### Limit Headers -- **Audio Transcription**: 0.01 € / minute (any started minute is billable) - -### Rate Limit Headers - -Responses include informative headers: +Responses include informational headers: ``` X-RateLimit-Limit-Requests: 1000 @@ -61,7 +63,7 @@ X-RateLimit-Remaining-Requests: 999 X-RateLimit-Reset-Requests: 1640995200 ``` -### Error 429 - Rate Limit Exceeded +### Error 429 - Limit Reached ```json { @@ -84,13 +86,13 @@ Generates conversational responses. ```bash curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ -H "Content-Type: application/json" \ - -H "Authorization: Bearer YOUR_API_TOKEN" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ -d '{ - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "messages": [ { "role": "user", - "content": "Explain photosynthesis" + "content": "Expliquez la photosynthèse" } ], "max_tokens": 200, @@ -100,19 +102,19 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ #### Parameters -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `model` | string | ✅ | Model ID (see [catalog](./models)) | -| `messages` | array | ✅ | Conversation (role: system/user/assistant) | -| `stream` | boolean | ❌ | Enables streaming (default: false) | -| `temperature` | float | ❌ | Creativity 0.0-2.0 (default: 0.7) | -| `max_tokens` | integer | ❌ | Token limit (default: 1024) | -| `top_p` | float | ❌ | Nucleus sampling 0.0-1.0 (default: 1.0) | -| `presence_penalty` | float | ❌ | Presence penalty -2.0 to 2.0 (default: 0) | -| `frequency_penalty` | float | ❌ | Frequency penalty -2.0 to 2.0 (default: 0) | -| `user` | string | ❌ | Unique user ID | -| `tools` | array | ❌ | List of tools the model can call. | -| `tool_choice` | string/object | ❌ | Controls whether the model should call a tool. "none", "auto", or `{"type": "function", "function": {"name": "my_function"}}`. | +| Parameter | Type | Required | Description | +| ------------------- | ------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------- | +| `model` | string | ✅ | Model ID (see [catalog](./models)) | +| `messages` | array | ✅ | Conversation (role: system/user/assistant) | +| `stream` | boolean | ❌ | Enable streaming (default: false) | +| `temperature` | float | ❌ | Creativity 0.0-2.0 (default: 0.7) | +| `max_tokens` | integer | ❌ | Token limit (default: 1024) | +| `top_p` | float | ❌ | Nucleus sampling 0.0-1.0 (default: 1.0) | +| `presence_penalty` | float | ❌ | Presence penalty -2.0 to 2.0 (default: 0) | +| `frequency_penalty` | float | ❌ | Frequency penalty -2.0 to 2.0 (default: 0) | +| `user` | string | ❌ | Unique user ID | +| `tools` | array | ❌ | List of tools the model can call. | +| `tool_choice` | string/object | ❌ | Controls whether the model should call a tool. "none", "auto", or `{"type": "function", "function": {"name": "my_function"}}`. | #### Standard Response @@ -121,13 +123,13 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ "id": "chatcmpl-bc52de347f2e4068b7bde380c0f8db37", "object": "chat.completion", "created": 1749114814, - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "choices": [ { "index": 0, "message": { "role": "assistant", - "content": "Photosynthesis is a biological process..." + "content": "La photosynthèse est un processus biologique..." }, "finish_reason": "stop" } @@ -149,7 +151,7 @@ If the model decides to call a tool, the response will have a `finish_reason` of "id": "chatcmpl-9f27a53f52b44a9693753f2a5e1f7a73", "object": "chat.completion", "created": 1749115200, - "model": "qwen3:14b", + "model": "gpt-oss:120b", "choices": [ { "index": 0, @@ -178,15 +180,15 @@ If the model decides to call a tool, the response will have a `finish_reason` of } ``` -After receiving a `tool_calls` response, you must execute the tool on your side, then send the result back to the model using a message with `role: "tool"`. +After receiving a `tool_calls` response, you must execute the tool on your end, then return the result to the model using a message with the `role: "tool"`. ```json { - "model": "qwen3:14b", + "model": "gpt-oss:120b", "messages": [ { "role": "user", - "content": "What's the weather like in Paris?" + "content": "Quel temps fait-il à Paris ?" }, { "role": "assistant", @@ -204,7 +206,7 @@ After receiving a `tool_calls` response, you must execute the tool on your side, { "role": "tool", "tool_call_id": "call_abc123", - "content": "{\"temperature\": \"22\", \"unit\": \"celsius\", \"description\": \"Sunny\"}" + "content": "{\"temperature\": \"22\", \"unit\": \"celsius\", \"description\": \"Ensoleillé\"}" } ] } @@ -214,43 +216,40 @@ After receiving a `tool_calls` response, you must execute the tool on your side, With `"stream": true`, the response arrives token by token: -**Response Headers:** - +**Response Headers :** ``` Content-Type: text/event-stream Cache-Control: no-cache ``` -**Event Format:** - +**Event Format :** ``` -data: {"choices":[{"delta":{"content":"La"},"finish_reason":null,"index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"granite3.3:8b","object":"chat.completion.chunk"} +data: {"choices":[{"delta":{"content":"La"},"finish_reason":null,"index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"gpt-oss:120b","object":"chat.completion.chunk"} -data: {"choices":[{"delta":{"content":" photo"},"finish_reason":null,"index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"granite3.3:8b","object":"chat.completion.chunk"} +data: {"choices":[{"delta":{"content":" photo"},"finish_reason":null,"index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"gpt-oss:120b","object":"chat.completion.chunk"} -data: {"choices":[{"delta":{"content":""},"finish_reason":"stop","index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"granite3.3:8b","object":"chat.completion.chunk"} +data: {"choices":[{"delta":{"content":""},"finish_reason":"stop","index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"gpt-oss:120b","object":"chat.completion.chunk"} data: [DONE] ``` -**Chunk Structure:** +**Chunk Structure :** +- `choices[].delta.content` : Incremental content +- `finish_reason` : `null` during streaming, then `"stop"` +- End signal : `data: [DONE]` -- `choices[].delta.content`: Incremental content -- `finish_reason`: `null` during streaming, then `"stop"` -- End signal: `data: [DONE]` - -### Multimodal Queries (Vision) +### Multimodal Requests (Vision) To analyze images, you can send a request where the `content` field of a user message is an array containing both text and images. The format for an image is an object with `type: "image_url"` and an `image_url` field containing the image URL in `data URI` (base64) format. -:::info[Compatibility Note] -Although the standard and recommended format is `{"type": "image_url", "image_url": {"url": "data:..."}}`, the API also supports, for flexibility, a simplified format `{"type": "image", "image": "data:..."}`. However, we recommend using the standard `image_url` format for better compatibility with the OpenAI ecosystem. +:::info Compatibility Note +Although the standard and recommended format is `{"type": "image_url", "image_url": {"url": "data:..."}}`, the API also supports a simplified format `{"type": "image", "image": "data:..."}` for flexibility. However, it is recommended to use the standard `image_url` format for better compatibility with the OpenAI ecosystem. ::: -:::tip[OCR and Document Analysis] -For specific document analysis tasks (PDFs, scans, tables), we recommend using the specialized model **DeepSeek-OCR**. See the [dedicated documentation](./ocr). +:::tip OCR and Document Analysis +For specific document analysis tasks (PDFs, scans, tables), we recommend using the specialized **DeepSeek-OCR** model. See the [dedicated documentation](./ocr). ::: #### Vision Request Example @@ -258,7 +257,7 @@ For specific document analysis tasks (PDFs, scans, tables), we recommend using t ```bash curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ -H "Content-Type: application/json" \ - -H "Authorization: Bearer YOUR_API_TOKEN" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ -d '{ "model": "gemma3:27b", "messages": [ @@ -267,7 +266,7 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ "content": [ { "type": "text", - "text": "What do you see in this image?" + "text": "Que vois-tu sur cette image ?" }, { "type": "image_url", @@ -285,24 +284,24 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ ### POST /v1/completions :::warning -**Note**: The `/v1/completions` endpoint uses the same format as `/v1/chat/completions` with messages. +**Note**: The `/v1/completions` endpoint uses the same format as `/v1/chat/completions` with messages. For simple text completion, use a user message with your prompt. ::: -Text completions using the chat format. +Text completions via chat format. #### Request ```bash curl -X POST "https://api.ai.cloud-temple.com/v1/completions" \ -H "Content-Type: application/json" \ - -H "Authorization: Bearer YOUR_API_TOKEN" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ -d '{ - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "messages": [ { "role": "user", - "content": "Complete this sentence: Artificial intelligence is" + "content": "Complétez cette phrase: L'intelligence artificielle est" } ], "max_tokens": 100, @@ -314,9 +313,9 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/completions" \ Identical to `/v1/chat/completions` - see previous section. -#### Answer +#### Response -Same format as `/v1/chat/completions`. +Format identical to `/v1/chat/completions`. ### POST /v1/audio/transcriptions @@ -326,34 +325,34 @@ Audio transcription to text (Whisper). ```bash curl -X POST "https://api.ai.cloud-temple.com/v1/audio/transcriptions" \ - -H "Authorization: Bearer YOUR_API_TOKEN" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ -F "file=@audio.wav" \ - -F "language=en" \ + -F "language=fr" \ -F "response_format=json" ``` #### Parameters -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `file` | binary | ✅ | Audio file (wav, mp3, m4a). | -| `language` | string | ❌ | ISO 639-1 language code (e.g., "fr"). Automatic detection if not provided. | -| `initial_prompt` | string | ❌ | Context or specific words to improve transcription accuracy. | -| `task` | string | ❌ | Task to perform: `transcribe` (default) or `translate` (translate to English). | -| `response_format` | string | ❌ | `json` (default, equivalent to `verbose_json`). Formats `text`, `srt`, `vtt` are not currently supported. | +| Parameter | Type | Required | Description | +| ----------------- | ------ | --------- | ------------------------------------------------------------------------------------------------------------------ | +| `file` | binary | ✅ | Audio file (wav, mp3, m4a). | +| `language` | string | ❌ | ISO 639-1 language code (e.g., "fr"). Automatic detection if not provided. | +| `initial_prompt` | string | ❌ | Context or specific words to improve transcription accuracy. | +| `task` | string | ❌ | Task to perform: `transcribe` (default) or `translate` (translate to English). | +| `response_format` | string | ❌ | `json` (default, equivalent to `verbose_json`). The `text`, `srt`, `vtt` formats are not currently supported. | #### Response (`json`) ```json { - "text": "Hello, this is an audio transcription test.", + "text": "Bonjour, ceci est un test de transcription audio.", "segments": [ { "id": 0, "seek": 0, "start": 0.0, "end": 4.0, - "text": " Hello, this is an audio transcription test.", + "text": " Bonjour, ceci est un test de transcription audio.", "tokens": [ 50364, 40365, 33, 2373, 359, 456, 2373, 323, 1330, 2373, 2264, 50564 ], "temperature": 0.0, "avg_logprob": -0.25, @@ -361,7 +360,7 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/audio/transcriptions" \ "no_speech_prob": 0.05 } ], - "language": "en" + "language": "fr" } ``` @@ -374,21 +373,21 @@ Creates an embedding vector representing the input text. ```bash curl -X POST "https://api.ai.cloud-temple.com/v1/embeddings" \ -H "Content-Type: application/json" \ - -H "Authorization: Bearer YOUR_API_TOKEN" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ -d '{ "model": "granite-embedding:278m", - "input": "The text to vectorize" + "input": "Le texte à vectoriser" }' ``` #### Parameters -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `model` | string | ✅ | ID of the embedding model (see [catalog](./models)) | -| `input` | string or array of strings | ✅ | The text or list of texts to vectorize. | +| Parameter | Type | Required | Description | +| --------- | -------------------------- | --------- | ----------------------------------------------------- | +| `model` | string | ✅ | Embedding model ID (see [catalog](./models)) | +| `input` | string or array of strings | ✅ | The text or list of texts to vectorize. | -#### Answer +#### Response ```json { @@ -413,6 +412,96 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/embeddings" \ } ``` +### POST /v1/rerank + +Reorders a list of documents by relevance to a query. Compatible with the Cohere API (v1 and v2). + +**Billing** : €4 / million reranked tokens. Ideal for improving the accuracy of RAG pipelines. + +#### Request + +```bash +curl -X POST "https://api.ai.cloud-temple.com/v1/rerank" \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ + -d '{ + "model": "nvidia/llama-nemotron-rerank-vl-1b-v2", + "query": "Quelle est la capitale de la France ?", + "documents": [ + "Paris est la capitale et la plus grande ville de France.", + "Lyon est une grande ville du sud-est de la France.", + "La France est un pays d'\''Europe occidentale." + ], + "top_n": 2 + }' +``` + +#### Parameters + +| Parameter | Type | Required | Description | +| ----------- | ------- | --------- | --------------------------------------------------------------------------- | +| `model` | string | ✅ | Reranking model ID (see [catalog](./models#modèles-de-reranking)) | +| `query` | string | ✅ | The search query | +| `documents` | array | ✅ | List of documents to rerank | +| `top_n` | integer | ❌ | Number of results to return (default: all) | + +#### Response + +```json +{ + "id": "rerank-7f3a2b1c", + "results": [ + { + "index": 0, + "relevance_score": 0.9874, + "document": { + "text": "Paris est la capitale et la plus grande ville de France." + } + }, + { + "index": 2, + "relevance_score": 0.5231, + "document": { + "text": "La France est un pays d'Europe occidentale." + } + } + ], + "usage": { + "billed_units": { + "search_units": 3 + } + } +} +``` + +The `/v2/rerank` endpoint (Cohere SDK v2) is also available with the same request format. + +#### Python Example (Cohere SDK) + +```python +import cohere + +# Compatible with the Cohere SDK by pointing to the LLMaaS API +co = cohere.Client( + api_key="VOTRE_TOKEN_API", + base_url="https://api.ai.cloud-temple.com" +) + +results = co.rerank( + model="nvidia/llama-nemotron-rerank-vl-1b-v2", + query="Quelle est la capitale de la France ?", + documents=[ + "Paris est la capitale et la plus grande ville de France.", + "Lyon est une grande ville du sud-est de la France.", + "La France est un pays d'Europe occidentale." + ], + top_n=2 +) + +for result in results.results: + print(f"Index: {result.index}, Score: {result.relevance_score:.4f}") +``` + ### GET /v1/models List of available models. @@ -421,26 +510,26 @@ List of available models. ```bash curl -X GET "https://api.ai.cloud-temple.com/v1/models" \ - -H "Authorization: Bearer YOUR_API_TOKEN" + -H "Authorization: Bearer VOTRE_TOKEN_API" ``` -#### Answer +#### Response ```json { "object": "list", "data": [ { - "id": "granite3.3:8b", + "id": "gpt-oss:120b", "object": "model", "created": 1749110897, "owned_by": "CloudTemple", - "root": "granite3.3:8b", - "aliases": ["granite3.3:8b"], + "root": "gpt-oss:120b", + "aliases": ["gpt-oss:120b"], "max_model_len": 60000, "permission": [ { - "id": "modelperm-granite3.3:8b-1749110897", + "id": "modelperm-gpt-oss:120b-1749110897", "object": "model_permission", "allow_sampling": true, "allow_view": true, @@ -526,16 +615,16 @@ curl -X GET "https://api.ai.cloud-temple.com/v1/models" \ ## Examples by Language -### Python with requests +### Python avec requests ```python import requests import json # Configuration -# It is recommended to protect your API key by using environment variables. +# It is recommended to protect your API key using environment variables. # Example: API_KEY = os.getenv("LLMAAS_API_KEY") -API_KEY = "YOUR_API_TOKEN" +API_KEY = "VOTRE_TOKEN_API" BASE_URL = "https://api.ai.cloud-temple.com/v1" headers = { @@ -545,9 +634,9 @@ headers = { # Chat completion payload = { - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "messages": [ - {"role": "user", "content": "Hello!"} + {"role": "user", "content": "Bonjour !"} ], "max_tokens": 100 } @@ -557,35 +646,33 @@ try: f"{BASE_URL}/chat/completions", headers=headers, json=payload, - timeout=30 # Added timeout for the request + timeout=30 # Adding a timeout for the request ) - response.raise_for_status() # Raises an exception for HTTP error codes (4xx, 5xx) + response.raise_for_status() # Raises an exception for HTTP error codes (4xx, 5xx) result = response.json() print(result["choices"][0]["message"]["content"]) except requests.exceptions.HTTPError as e: - print(f"HTTP error: {e.response.status_code} - {e.response.text}") + print(f"Erreur HTTP: {e.response.status_code} - {e.response.text}") except requests.exceptions.RequestException as e: - print(f"Network error: {e}") + print(f"Erreur réseau: {e}") except json.JSONDecodeError: - print(f"JSON decoding error: {response.text}") + print(f"Erreur de décodage JSON: {response.text}") except Exception as e: - print(f"An unexpected error occurred: {e}") + print(f"Une erreur inattendue est survenue: {e}") ``` ### Python with Streaming -### Python with Streaming - ```python import requests import json -def stream_chat(message, model="granite3.3:8b"): - # It is recommended to protect your API key by using environment variables. +def stream_chat(message, model="gpt-oss:120b"): + # It is recommended to protect your API key using environment variables. # Example: API_KEY = os.getenv("LLMAAS_API_KEY") - API_KEY = "YOUR_API_TOKEN" + API_KEY = "VOTRE_TOKEN_API" BASE_URL = "https://api.ai.cloud-temple.com/v1" headers = { @@ -606,10 +693,10 @@ def stream_chat(message, model="granite3.3:8b"): headers=headers, json=payload, stream=True, - timeout=30 # Added timeout for the request + timeout=30 # Adding a timeout for the request ) - response.raise_for_status() # Raises an exception for HTTP error codes (4xx, 5xx) + response.raise_for_status() # Raises an exception for HTTP error codes (4xx, 5xx) for line in response.iter_lines(): if line: @@ -624,18 +711,18 @@ def stream_chat(message, model="granite3.3:8b"): if content: print(content, end='', flush=True) except json.JSONDecodeError: - print(f"JSON decoding error in stream: {data}") + print(f"Erreur de décodage JSON dans le stream: {data}") continue - print() # New line after the stream + print() # New line after the stream except requests.exceptions.HTTPError as e: - print(f"HTTP Error: {e.response.status_code} - {e.response.text}") + print(f"Erreur HTTP: {e.response.status_code} - {e.response.text}") except requests.exceptions.RequestException as e: - print(f"Network Error: {e}") + print(f"Erreur réseau: {e}") except Exception as e: - print(f"An unexpected error occurred: {e}") + print(f"Une erreur inattendue est survenue: {e}") # Usage -stream_chat("Explain quantum physics") +stream_chat("Expliquez la physique quantique") ``` ### JavaScript/Node.js @@ -644,9 +731,9 @@ stream_chat("Explain quantum physics") const axios = require('axios'); // Configuration -// It is recommended to protect your API key by using environment variables. -// Example: const API_KEY = process.env.LLMAAS_API_KEY; -const API_KEY = 'YOUR_API_TOKEN'; +// Il est recommandé de protéger votre clé API en utilisant des variables d'environnement. +// Exemple: const API_KEY = process.env.LLMAAS_API_KEY; +const API_KEY = 'VOTRE_TOKEN_API'; const BASE_URL = 'https://api.ai.cloud-temple.com/v1'; async function chatCompletion(message) { @@ -654,7 +741,7 @@ async function chatCompletion(message) { const response = await axios.post( `${BASE_URL}/chat/completions`, { - model: 'granite3.3:8b', + model: 'gpt-oss:120b', messages: [ { role: 'user', content: message } ], @@ -665,20 +752,20 @@ async function chatCompletion(message) { 'Content-Type': 'application/json', 'Authorization': `Bearer ${API_KEY}` }, - timeout: 30000 // Added a timeout for the request (30 seconds) + timeout: 30000 // Ajout d'un timeout pour la requête (30 secondes) } ); return response.data.choices[0].message.content; } catch (error) { - console.error('Error:', error.response?.data || error.message); - // More detailed error handling can be added here if needed - // For example: if (error.response?.status === 429) { console.error("Rate limit exceeded"); } + console.error('Erreur:', error.response?.data || error.message); + // Gestion plus détaillée des erreurs peut être ajoutée ici si nécessaire + // Par exemple: if (error.response?.status === 429) { console.error("Rate limit exceeded"); } } } -// Usage -chatCompletion('Hello!').then(response => { +// Utilisation +chatCompletion('Bonjour !').then(response => { if (response) { console.log(response); } @@ -696,7 +783,7 @@ async function fetchCompletion(message) { 'Authorization': `Bearer ${API_KEY}` }, body: JSON.stringify({ - model: 'granite3.3:8b', + model: 'gpt-oss:120b', messages: [ { role: 'user', content: message } ], @@ -725,58 +812,58 @@ def safe_api_call(payload): return response.json() except requests.exceptions.HTTPError as e: if response.status_code == 429: - print("Rate limit reached, waiting...") - time.sleep(60) # Wait for 1 minute + print("Rate limit atteint, attendre...") + time.sleep(60) # Wait 1 minute return safe_api_call(payload) # Retry else: - print(f"HTTP error: {e}") + print(f"Erreur HTTP: {e}") except requests.exceptions.RequestException as e: - print(f"Network error: {e}") + print(f"Erreur réseau: {e}") ``` ### Cost Optimization -1. **Use appropriate models**: Smaller models for testing -2. **Limit max_tokens**: Avoid overly long responses -3. **Reuse conversations**: Efficient context window -4. **Monitoring**: Track your usage in the Console +1. **Use appropriate models** : Smaller models for testing +2. **Limit max_tokens** : Avoid overly long responses +3. **Reuse conversations** : Efficient context window +4. **Monitoring** : Track your usage in the Console ### Security -1. **Protect your token**: Environment variables -2. **Regular rotation**: Rotate your keys periodically -3. **Input validation**: Sanitize user data -4. **Client rate limiting**: Implement your own limits +1. **Protect your token** : Environment variables +2. **Regular rotation** : Change your keys periodically +3. **Input validation** : Sanitize user data +4. **Client rate limiting** : Implement your own limits -## SDKs and Integrations +## SDK and Integrations -The LLMaaS API is compatible with existing OpenAI SDKs by simply changing the base URL: +The LLMaaS API is compatible with existing OpenAI SDKs by modifying the base URL: ### OpenAI Python SDK ```python from openai import OpenAI -# It is recommended to protect your API key by using environment variables. +# It is recommended to protect your API key using environment variables. # Example: api_key=os.getenv("LLMAAS_API_KEY") client = OpenAI( - api_key="YOUR_API_TOKEN", + api_key="VOTRE_TOKEN_API", base_url="https://api.ai.cloud-temple.com/v1" ) try: response = client.chat.completions.create( - model="granite3.3:8b", + model="gpt-oss:120b", messages=[ - {"role": "user", "content": "Hello!"} + {"role": "user", "content": "Bonjour !"} ], - max_tokens=50 # Added max_tokens for consistency with tests + max_tokens=50 # Added max_tokens for consistency with tests ) print(response.choices[0].message.content) except Exception as e: - print(f"OpenAI SDK Error: {e}") + print(f"Erreur OpenAI SDK: {e}") ``` ### LangChain @@ -785,41 +872,41 @@ except Exception as e: from langchain_openai import ChatOpenAI from langchain.schema import HumanMessage -# Chat Model Configuration (LLMaaS Compatible) -# It is recommended to protect your API key by using environment variables. +# Chat model configuration (compatible with LLMaaS) +# It is recommended to protect your API key using environment variables. # Example: api_key=os.getenv("LLMAAS_API_KEY") chat = ChatOpenAI( - api_key="YOUR_API_TOKEN", + api_key="VOTRE_TOKEN_API", base_url="https://api.ai.cloud-temple.com/v1", - model="granite3.3:8b", + model="gpt-oss:120b", # Note: Parameters like max_tokens are passed via model_kwargs - # to ensure compatibility across LangChain versions. + # to ensure compatibility between LangChain versions. model_kwargs={"max_tokens": 200} ) try: # Usage with messages - messages = [HumanMessage(content="Explain AI in 3 sentences")] + messages = [HumanMessage(content="Expliquez l'IA en 3 phrases")] response = chat.invoke(messages) print(response.content) # Or with a simple string - response = chat.invoke("Hello, how are you?") + response = chat.invoke("Bonjour, comment ça va ?") print(response.content) except Exception as e: - print(f"LangChain error: {e}") + print(f"Erreur LangChain: {e}") ``` #### Using Embeddings -:::warning[Incompatibility with standard LangChain clients] -Currently, using the embedding endpoint with standard LangChain classes (`langchain_openai.OpenAIEmbeddings` or `langchain_community.OllamaEmbeddings`) is incompatible with our API. +:::warning Incompatibility with standard LangChain clients +Currently, using the embedding endpoint via standard LangChain classes (`langchain_openai.OpenAIEmbeddings` or `langchain_community.OllamaEmbeddings`) is incompatible with our API. -- `OpenAIEmbeddings` sends pre-computed tokens instead of raw text, which is rejected. +- `OpenAIEmbeddings` sends pre-calculated tokens instead of raw text, which is rejected. - `OllamaEmbeddings` does not handle the required Bearer Token authentication. -Until a permanent solution is available, it is recommended to either create a custom embedding class or call the API directly, as demonstrated in the `exemples/simple-rag-demo` example. +Until a permanent solution is available, it is recommended to create a custom embedding class or call the API directly, as demonstrated in the `exemples/simple-rag-demo` example. ::: ```python @@ -829,9 +916,9 @@ import httpx class LLMaaSEmbeddings(Embeddings): """ - Custom embedding class to interact with Cloud Temple's LLMaaS API. - This class is designed to be compatible with LangChain's `Embeddings` interface, - enabling its use within LangChain pipelines while calling our specific API. + Classe d'embedding personnalisée pour interagir avec l'API LLMaaS de Cloud Temple. + Cette classe est conçue pour être compatible avec l'interface `Embeddings` de LangChain, + permettant son utilisation dans des pipelines LangChain tout en appelant notre API spécifique. """ def __init__(self, api_key: str, base_url: str = "https://api.ai.cloud-temple.com/v1", model_name: str = "granite-embedding:278m"): self.api_key = api_key @@ -849,12 +936,12 @@ class LLMaaSEmbeddings(Embeddings): response = client.post(f"{self.base_url}/embeddings", headers=self.headers, json=payload) response.raise_for_status() data = response.json()['data'] - # Sort embeddings by index to ensure correct order + # Sort embeddings by their index to guarantee order data.sort(key=lambda e: e['index']) return [item['embedding'] for item in data] except httpx.HTTPStatusError as e: - print(f"HTTP error during embedding retrieval: {e.response.status_code}") - print(f"Response: {e.response.text}") + print(f"Erreur HTTP lors de la récupération de l'embedding : {e.response.status_code}") + print(f"Réponse : {e.response.text}") return [] def embed_documents(self, texts: List[str]) -> List[List[float]]: @@ -865,11 +952,11 @@ class LLMaaSEmbeddings(Embeddings): # Usage # embeddings = LLMaaSEmbeddings( -# api_key="YOUR_API_TOKEN", +# api_key="VOTRE_TOKEN_API", # base_url="https://api.ai.cloud-temple.com/v1", # model_name="granite-embedding:278m" # ) -# vector = embeddings.embed_query("My text to vectorize") +# vector = embeddings.embed_query("Mon texte à vectoriser") ``` ## Support @@ -877,4 +964,4 @@ class LLMaaSEmbeddings(Embeddings): - **Documentation** : [Quick Start Guide](./quickstart) - **Model Catalog** : [Full List](./models) - **Console** : Management and monitoring via Cloud Temple Console -- **Support** : Through Cloud Temple Console +- **Support** : Via the Cloud Temple Console \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/llmaas/batch.md b/i18n/en/docusaurus-plugin-content-docs/current/llmaas/batch.md new file mode 100644 index 00000000..02f8d558 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/llmaas/batch.md @@ -0,0 +1,536 @@ +--- +title: Batch API +sidebar_position: 6 +--- + +# Batch API — Asynchronous Processing + +:::info Availability +The Batch API is in **phased rollout**. Check availability on your account in the [Cloud Temple Console](https://console.cloud-temple.com) or contact commercial support. +::: + +## What is the Batch API? + +The **Batch API** enables the submission of large volumes of requests **asynchronously**, processed during off-peak hours. In exchange for a processing delay tolerance (a few hours), you benefit from a **50% discount** on standard rates. + +### When to use the Batch API? + +| Use Case | Suitable for Batch? | +|----------|---------------------| +| Classification/labeling of millions of documents | ✅ Ideal | +| Mass summary generation | ✅ Ideal | +| Entity extraction on a large corpus | ✅ Ideal | +| High-volume vectorization (embedding) | ✅ Ideal | +| Model evaluation (benchmarks) | ✅ Ideal | +| Real-time chatbot | ❌ Use `/v1/chat/completions` | +| Interactive response < 2 seconds | ❌ Use the standard API | +| SSE Streaming | ❌ Use the standard API | + +## Pricing + +| Usage | Batch | Standard | Savings | +|-------|-------|----------|---------| +| **Input tokens** | **0.9 € / million** | 1.8 € / million | −50% | +| **Output tokens** | **4.0 € / million** | 8.0 € / million | −50% | + +### Savings example + +To process 1 million documents of 500 tokens with responses of 200 tokens: +- **Standard** : (500 × 1.8 + 200 × 8) / 1 = 2 500 € +- **Batch** : (500 × 0.9 + 200 × 4) / 1 = 1 250 € +- **Savings : 1 250 € (−50%)** + +## Batch Pipeline Architecture + +``` +1. Preparation 2. Submission 3. Processing +──────────────────────── ───────────────────── ───────────────────── +Create a JSONL file → POST /v1/batches → Asynchronous processing +with N requests (returns batch_id) during off-peak hours + +4. Polling 5. Retrieval +───────────────────────── ───────────────────────── +GET /v1/batches/{id} → GET /v1/files/{file_id} → JSONL results +(status: validating, (download the +in_progress, completed) results) +``` + +## Input File Format (JSONL) + +Each line in the file is an independent JSON request: + +```json +{"custom_id": "req-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gpt-oss:120b", "messages": [{"role": "user", "content": "Résume ce texte : L'IA générative est..."}], "max_tokens": 200}} +{"custom_id": "req-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gpt-oss:120b", "messages": [{"role": "user", "content": "Classifie ce ticket : Mon accès VPN ne fonctionne plus."}], "max_tokens": 50}} +{"custom_id": "req-3", "method": "POST", "url": "/v1/embeddings", "body": {"model": "granite-embedding:278m", "input": "Texte à vectoriser pour la recherche sémantique."}} +``` + +### Required fields per line + +| Field | Type | Description | +|-------|------|-------------| +| `custom_id` | string | Unique identifier for your request (for retrieval) | +| `method` | string | Always `"POST"` | +| `url` | string | Target endpoint (e.g., `/v1/chat/completions`, `/v1/embeddings`) | +| `body` | object | Request body (same format as a direct call) | + +## Endpoints API + +### POST /v1/batches — Submit a batch + +```bash +# 1. Upload du fichier JSONL +curl -X POST "https://api.ai.cloud-temple.com/v1/files" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ + -F "purpose=batch" \ + -F "file=@requests.jsonl" +``` + +```json +{ + "id": "file-abc123xyz", + "object": "file", + "purpose": "batch", + "filename": "requests.jsonl", + "bytes": 4096, + "created_at": 1749110753 +} +``` + +```bash +# 2. Soumission du batch +curl -X POST "https://api.ai.cloud-temple.com/v1/batches" \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ + -d '{ + "input_file_id": "file-abc123xyz", + "endpoint": "/v1/chat/completions", + "completion_window": "24h" + }' +``` + +```json +{ + "id": "batch-def456uvw", + "object": "batch", + "endpoint": "/v1/chat/completions", + "input_file_id": "file-abc123xyz", + "status": "validating", + "created_at": 1749110800, + "request_counts": { + "total": 100, + "completed": 0, + "failed": 0 + } +} +``` + +### GET /v1/batches/\{batch_id\} — Check status + +```bash +curl -X GET "https://api.ai.cloud-temple.com/v1/batches/batch-def456uvw" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" +``` + +**Possible statuses:** + +| Status | Description | +|--------|-------------| +| `validating` | Validating input file | +| `in_progress` | Processing requests | +| `finalizing` | Compiling results | +| `completed` | All results are available | +| `failed` | Overall failure (see `errors`) | +| `cancelled` | Cancelled by user | + +```json +{ + "id": "batch-def456uvw", + "status": "completed", + "output_file_id": "file-ghi789rst", + "request_counts": { + "total": 100, + "completed": 99, + "failed": 1 + }, + "completed_at": 1749118000 +} +``` + +### GET /v1/files/\{file_id\}/content — Retrieve results + +```bash +curl -X GET "https://api.ai.cloud-temple.com/v1/files/file-ghi789rst/content" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ + -o results.jsonl +``` + +**Results format (JSONL):** + +```json +{"id": "batch-def456uvw", "custom_id": "req-1", "response": {"status_code": 200, "body": {"id": "chatcmpl-...", "choices": [{"message": {"role": "assistant", "content": "Résumé : L'IA générative..."}}], "usage": {"prompt_tokens": 45, "completion_tokens": 87}}}} +{"id": "batch-def456uvw", "custom_id": "req-2", "response": {"status_code": 200, "body": {"id": "chatcmpl-...", "choices": [{"message": {"role": "assistant", "content": "Catégorie: Réseau/VPN"}}], "usage": {"prompt_tokens": 22, "completion_tokens": 8}}}} +{"id": "batch-def456uvw", "custom_id": "req-3", "error": {"code": "server_error", "message": "Processing failed"}} +``` + +## Exemple Python Complet + +```python +""" +Exemple complet d'utilisation de la Batch API LLMaaS. +Cas d'usage : classification de tickets de support en masse. +""" +import httpx +import json +import time +import os +from pathlib import Path + +API_KEY = os.getenv("LLMAAS_API_KEY") +BASE_URL = "https://api.ai.cloud-temple.com/v1" +HEADERS = { + "Authorization": f"Bearer {API_KEY}", + "Content-Type": "application/json" +} + + +# ══════════════════════════════════════════════════════ +# STEP 1: Prepare requests in JSONL format +# ══════════════════════════════════════════════════════ + +def create_batch_file(tickets: list[str], output_path: str = "batch_input.jsonl") -> str: + """ + Crée un fichier JSONL avec une requête de classification par ticket. + + Args: + tickets: Liste des tickets à classifier + output_path: Chemin du fichier JSONL de sortie + + Returns: + Chemin du fichier créé + """ + with open(output_path, "w", encoding="utf-8") as f: + for i, ticket in enumerate(tickets): + request = { + "custom_id": f"ticket-{i:04d}", + "method": "POST", + "url": "/v1/chat/completions", + "body": { + "model": "gpt-oss:120b", + "messages": [ + { + "role": "system", + "content": ( + "Tu es un expert en support IT. " + "Classifie le ticket dans une seule catégorie parmi : " + "Réseau, Sécurité, Logiciel, Matériel, Accès, Autre. " + "Réponds uniquement avec le nom de la catégorie." + ) + }, + { + "role": "user", + "content": ticket + } + ], + "max_tokens": 10, + "temperature": 0.0 + } + } + f.write(json.dumps(request, ensure_ascii=False) + "\n") + + print(f"✅ Fichier JSONL créé : {output_path} ({len(tickets)} requêtes)") + return output_path + + +# ══════════════════════════════════════════════════════ +# STEP 2: Upload the file +# ══════════════════════════════════════════════════════ + +def upload_batch_file(file_path: str) -> str: + """ + Upload le fichier JSONL vers l'API. + + Returns: + file_id retourné par l'API + """ + print(f"📤 Upload de {file_path}...") + + with open(file_path, "rb") as f: + with httpx.Client(timeout=60.0) as client: + response = client.post( + f"{BASE_URL}/files", + headers={"Authorization": f"Bearer {API_KEY}"}, + files={"file": (Path(file_path).name, f, "application/jsonl")}, + data={"purpose": "batch"} + ) + response.raise_for_status() + + file_id = response.json()["id"] + print(f"✅ Fichier uploadé : {file_id}") + return file_id + + +# ══════════════════════════════════════════════════════ +# STEP 3: Submit the batch +# ══════════════════════════════════════════════════════ + +def submit_batch(file_id: str) -> str: + """ + Soumet un batch pour traitement asynchrone. + + Returns: + batch_id retourné par l'API + """ + print(f"🚀 Soumission du batch (fichier: {file_id})...") + + with httpx.Client(timeout=30.0) as client: + response = client.post( + f"{BASE_URL}/batches", + headers=HEADERS, + json={ + "input_file_id": file_id, + "endpoint": "/v1/chat/completions", + "completion_window": "24h" + } + ) + response.raise_for_status() + + data = response.json() + batch_id = data["id"] + print(f"✅ Batch soumis : {batch_id} (statut: {data['status']})") + return batch_id + + +# ══════════════════════════════════════════════════════ +# STEP 4: Polling until completion +# ══════════════════════════════════════════════════════ + +def wait_for_completion(batch_id: str, poll_interval: int = 30) -> dict: + """ + Interroge l'API jusqu'à la complétion du batch. + + Args: + batch_id: L'identifiant du batch + poll_interval: Intervalle de polling en secondes + + Returns: + Le statut final du batch + """ + print(f"⏳ En attente de la complétion du batch {batch_id}...") + + terminal_statuses = {"completed", "failed", "cancelled", "expired"} + + while True: + with httpx.Client(timeout=30.0) as client: + response = client.get( + f"{BASE_URL}/batches/{batch_id}", + headers=HEADERS + ) + response.raise_for_status() + + batch = response.json() + status = batch["status"] + counts = batch.get("request_counts", {}) + + print( + f" Statut: {status} | " + f"Complétées: {counts.get('completed', 0)}/{counts.get('total', 0)} | " + f"Échouées: {counts.get('failed', 0)}" + ) + + if status in terminal_statuses: + return batch + + time.sleep(poll_interval) + + +# ══════════════════════════════════════════════════════ +# STEP 5: Retrieve and parse results +# ══════════════════════════════════════════════════════ + +def download_results(output_file_id: str, save_path: str = "batch_output.jsonl") -> list[dict]: + """ + Télécharge et parse les résultats du batch. + + Returns: + Liste des résultats par custom_id + """ + print(f"📥 Téléchargement des résultats ({output_file_id})...") + + with httpx.Client(timeout=60.0) as client: + response = client.get( + f"{BASE_URL}/files/{output_file_id}/content", + headers={"Authorization": f"Bearer {API_KEY}"} + ) + response.raise_for_status() + + # Save raw file + with open(save_path, "wb") as f: + f.write(response.content) + + # Parse results + results = [] + for line in response.text.strip().split("\n"): + if line: + results.append(json.loads(line)) + + print(f"✅ {len(results)} résultats récupérés → {save_path}") + return results + + +# ══════════════════════════════════════════════════════ +# MAIN PROGRAM +# ══════════════════════════════════════════════════════ + +def main(): + # Examples of IT support tickets + tickets = [ + "Mon accès VPN ne fonctionne plus depuis ce matin.", + "L'imprimante du 3ème étage n'imprime plus en couleur.", + "Je ne peux pas me connecter à mon compte Office 365.", + "Mon ordinateur est très lent depuis la mise à jour d'hier.", + "Le site web de facturation interne affiche une erreur 500.", + "Besoin d'accès au dossier partagé RH sur le serveur.", + "Mon badge ne fonctionne plus à l'entrée du datacenter.", + "Outlook ne reçoit plus d'emails depuis 2 heures.", + ] + + print(f"🎯 Traitement de {len(tickets)} tickets en mode Batch\n") + + # Complete pipeline + jsonl_file = create_batch_file(tickets) + file_id = upload_batch_file(jsonl_file) + batch_id = submit_batch(file_id) + + final_status = wait_for_completion(batch_id, poll_interval=30) + + if final_status["status"] != "completed": + print(f"❌ Batch terminé avec statut : {final_status['status']}") + return + + output_file_id = final_status.get("output_file_id") + if not output_file_id: + print("❌ Aucun fichier de sortie disponible.") + return + + results = download_results(output_file_id) + + # Display results + print("\n" + "═" * 60) + print("📊 RÉSULTATS DE CLASSIFICATION") + print("═" * 60) + + for result in results: + custom_id = result["custom_id"] + idx = int(custom_id.split("-")[1]) + + if "error" in result: + category = f"ERREUR: {result['error']['message']}" + else: + category = result["response"]["body"]["choices"][0]["message"]["content"].strip() + + ticket_text = tickets[idx] if idx < len(tickets) else "?" + print(f"[{custom_id}] {category:12s} | {ticket_text[:60]}...") + + +if __name__ == "__main__": + main() +``` + +## Partial Error Handling + +The batch can be **partially successful**: some requests succeed while others fail. + +```python +def process_results(results: list[dict]) -> tuple[list, list]: + """Sépare les succès des échecs dans les résultats.""" + successes = [] + failures = [] + + for result in results: + if "error" in result: + failures.append({ + "custom_id": result["custom_id"], + "error": result["error"] + }) + else: + response_body = result["response"]["body"] + successes.append({ + "custom_id": result["custom_id"], + "content": response_body["choices"][0]["message"]["content"], + "usage": response_body.get("usage", {}) + }) + + print(f"✅ Succès : {len(successes)} | ❌ Échecs : {len(failures)}") + return successes, failures +``` + +## Limitations and Constraints + +| Constraint | Value | +|-----------|--------| +| **Maximum JSONL file size** | 100 MB | +| **Maximum number of requests per batch** | 50,000 | +| **Guaranteed processing time** | < 24h (typically 2-4h) | +| **Results file retention** | 7 days | +| **Concurrent batches per account** | 10 | + +:::warning Asynchronous processing +The batch does not guarantee processing order. Results may appear in a different order than the input order. Use the `custom_id` field to associate each result with its original request. +::: + +## Advanced Use Cases + +### Batch Embedding + +```python +# Batch vectorization of 10,000 documents +def create_embedding_batch(documents: list[str]) -> str: + with open("embed_batch.jsonl", "w") as f: + for i, doc in enumerate(documents): + request = { + "custom_id": f"doc-{i:05d}", + "method": "POST", + "url": "/v1/embeddings", + "body": { + "model": "granite-embedding:278m", + "input": doc[:500] # Model context limit + } + } + f.write(json.dumps(request) + "\n") + return "embed_batch.jsonl" +``` + +### Batch Cancellation + +```python +def cancel_batch(batch_id: str) -> dict: + with httpx.Client(timeout=30.0) as client: + response = client.post( + f"{BASE_URL}/batches/{batch_id}/cancel", + headers=HEADERS + ) + response.raise_for_status() + return response.json() +``` + +### List of batches + +```python +def list_batches(limit: int = 20) -> list[dict]: + with httpx.Client(timeout=30.0) as client: + response = client.get( + f"{BASE_URL}/batches", + headers=HEADERS, + params={"limit": limit} + ) + response.raise_for_status() + return response.json()["data"] +``` + +## Resources + +- **Complete example code** : [`exemples/simple_batch/`](https://github.com/Cloud-Temple/product-llmaas-how-to/tree/main/simple_batch) +- **Model catalog** : [Batch-compatible models](./models) +- **API Reference** : [Complete API documentation](./api) +- **Detailed pricing** : [LLMaaS pricing](./api#rate-limiting-et-facturation) \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/llmaas/concepts.md b/i18n/en/docusaurus-plugin-content-docs/current/llmaas/concepts.md index 94c2088c..941ae31e 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/llmaas/concepts.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/llmaas/concepts.md @@ -7,143 +7,134 @@ sidebar_position: 3 ## Overview -The **LLMaaS** (Large Language Models as a Service) offering from Cloud Temple provides secure and sovereign access to the most advanced artificial intelligence models, with the **SecNumCloud certification** from ANSSI. +Cloud Temple's **LLMaaS** (Large Language Models as a Service) provides secure and sovereign access to the most advanced artificial intelligence models, with ANSSI's **SecNumCloud qualification**. ## 🏗️ Technical Architecture -### Cloud Infrastructure Temple +### Cloud Temple Infrastructure import ArchitectureLLMaaS from '@site/docs/llmaas/images/llmaas_architecture_001.png'; -Technical Architecture of LLMaaS Cloud Temple +LLMaaS Cloud Temple Technical Architecture ### Main Components #### 1. **API Gateway LLMaaS** - -- **OpenAI Compatible**: Seamless integration with existing ecosystem -- **Rate Limiting**: Quota management by billing tier -- **Load Balancing**: Intelligent distribution across 12 GPU machines -- **Monitoring**: Real-time metrics and alerting +- **Compatible OpenAI** : Seamless integration with the existing ecosystem +- **Rate Limiting** : Quota management per billing tier +- **Load Balancing** : Intelligent distribution across 12 GPU machines +- **Monitoring** : Real-time metrics and alerting #### 2. **Authentication Service** - -- **Secure API Tokens**: Automatic rotation -- **Access Control**: Granular permissions per model -- **Audit Trails**: Full access traceability +- **Secure API Tokens** : Automatic rotation +- **Access Control** : Granular permissions per model +- **Audit trails** : Complete access traceability ## 🤖 Models and Tokens ### Model Catalog -*Complete catalog: [Model List](./models)* +*Complete catalog: [Model list](./models)* ### Token Management #### **Token Types** - -- **Input tokens**: Your prompt and context -- **Output tokens**: Response generated by the model -- **System tokens**: Metadata and instructions +- **Input tokens** : Your prompt and context +- **Output tokens** : Model-generated response +- **System tokens** : Metadata and instructions #### **Cost Calculation** - ``` -Total cost = (Input tokens × 1.9€/M) + (Output tokens × 8€/M) + (Reasoning output tokens × 8€/M) +Chat/Completion = (Tokens entrée × 1.8€/M) + (Tokens sortie × 8€/M) + (Tokens sortie Raisonnement × 8€/M) +Reranking = Documents rerankés × 4€/M +Batch (async) = (Tokens entrée × 0.9€/M) + (Tokens sortie × 4€/M) +Audio (ASR) = 0.01€ / minute de transcription ``` #### **Optimization** - -- **Context window**: Reuse conversations to save costs -- **Appropriate models**: Choose size based on complexity -- **Max tokens**: Limit response length +- **Context window** : Reuse conversations to save costs +- **Appropriate models** : Choose the size based on complexity +- **Max tokens** : Limit response length ### Tokenization ```python -# Token Estimation Example +# Example of token estimation def estimate_tokens(text: str) -> int: - """Approximate estimation: 1 token ≈ 4 characters""" + """Estimation approximative : 1 token ≈ 4 caractères""" return len(text) // 4 -prompt = "Explain photosynthesis" -response_max = 200 # maximum desired tokens +prompt = "Expliquez la photosynthèse" +response_max = 200 # desired max tokens estimated_input = estimate_tokens(prompt) # ~6 tokens -total_cost = (estimated_input * 1.9 + response_max * 8) / 1_000_000 -print(f"Estimated cost: {total_cost:.6f}€") +total_cost = (estimated_input * 1.8 + response_max * 8) / 1_000_000 +print(f"Coût estimé: {total_cost:.6f}€") ``` ## 🔒 Security and Compliance ### SecNumCloud Qualification -The LLMaaS service is hosted on a technical infrastructure that holds the **SecNumCloud 3.2 qualification** from ANSSI, ensuring: +The LLMaaS service runs on a technical infrastructure that holds the **ANSSI SecNumCloud 3.2 qualification**, ensuring: #### **Data Protection** - -- **End-to-end Encryption**: TLS 1.3 for all communications -- **Secure Storage**: Data encrypted at rest (AES-256) -- **Isolation**: Dedicated environments per tenant +- **End-to-end encryption** : TLS 1.3 for all communications +- **Secure storage** : Data encrypted at rest (AES-256) +- **Isolation** : Dedicated environments per tenant #### **Digital Sovereignty** - -- **Hosting in France**: Cloud Temple datacenters certified -- **French law**: Native GDPR compliance -- **No exposure**: No data transfers to foreign clouds +- **France Hosting** : Certified Cloud Temple datacenters +- **French Law** : Native GDPR compliance +- **No Exposure** : No transfers to foreign clouds #### **Audit and Traceability** - -- **Complete logs**: All interactions tracked -- **Retention**: Stored according to legal policies -- **Compliance**: Audit reports available +- **Complete logs** : All interactions tracked +- **Retention** : Retention according to legal policies +- **Compliance** : Audit reports available ### Security Controls import SecurityControls from '@site/docs/llmaas/images/llmaas_security_002.png'; -Security Controls LLMaaS +LLMaaS Security Controls ### Prompt Security -Prompt analysis is a **native and integrated** security feature of the LLMaaS platform. Enabled by default, it aims to detect and prevent attempts at "jailbreaking" or injecting malicious prompts before they even reach the model. This protection is based on a multi-layered approach. +Prompt analysis is a **native and integrated** security feature of the LLMaaS platform. Enabled by default, it aims to detect and prevent "jailbreak" attempts or malicious prompt injections before they even reach the model. This protection relies on a multi-layered approach. -:::tip[Contact support for deactivation] -It is possible to disable this security analysis for very specific use cases, although this is not recommended. For any questions regarding this or to request deactivation, please contact Cloud Temple support. +:::tip Contact support for deactivation +It is possible to disable this security analysis for very specific use cases, although it is not recommended. For any questions regarding this or to request a deactivation, please contact Cloud Temple support. ::: #### 1. Structural Analysis (`check_structure`) - -- **Malformed JSON detection**: The system checks whether the prompt starts with a `{` and attempts to parse it as JSON. If parsing succeeds and the JSON contains suspicious keywords (e.g., "system", "bypass"), or if parsing fails unexpectedly, this may indicate an injection attempt. -- **Unicode normalization**: The prompt is normalized using `unicodedata.normalize('NFKC', prompt)`. If the original prompt differs from its normalized version, this may indicate the use of deceptive Unicode characters (homoglyphs) to bypass filters. For example, "аdmin" (Cyrillic) instead of "admin" (Latin). - -#### 2. Suspicious Pattern Detection (`check_patterns`) - -- The system uses regular expressions (`regex`) to identify known attack patterns in prompts, across multiple languages (French, English, Chinese, Japanese). -- **Examples of detected patterns**: - - **System Commands**: Keywords such as "ignore the instructions", "ignore instructions", "忽略指令", "指示を無視". - - **HTML Injection**: Hidden or malicious HTML tags, for example ` -Managed **Core** Kubernetes by Cloud Temple is a container orchestration solution based on a selection of Open Source products, designed to offer a secure, resilient, and automated base layer on Cloud Temple's SecNumCloud platforms. Each cluster is deployed in a Cloud Temple IaaS environment entirely dedicated to the customer. +Managed **Core** Kubernetes by Cloud Temple is a container orchestration solution based on a selection of Open Source products, designed to provide a secure, resilient, and automated foundational layer on Cloud Temple's SecNumCloud platforms. Each cluster is deployed in a fully client-dedicated Cloud-Temple IaaS environment. -This offering is designed for teams with an excellent command of Kubernetes and Cloud Native tools, who want to build their own platform on minimalist and robust foundations. It targets open source enthusiasts who are looking for a streamlined, portable solution, without any vendor overlay, on a minimalist and immutable OS designed for automation and security. +This product is designed for teams with excellent mastery of Kubernetes and Cloud Native tools, who wish to build their own platform on minimalist and robust foundations. It is aimed at open source enthusiasts looking for a streamlined, portable solution without proprietary management layers, running on a minimalist and immutable OS designed for automation and security. ### Key Benefits -- **Sovereignty and Reversibility**: The solution relies exclusively on open source standards (Kubernetes CNCF) to avoid any technological dependency and guarantee the portability of your applications. -- **"Zero-Trust" Security by design**: The architecture is based on Talos OS, an immutable operating system with no direct access (no shell, no SSH), which drastically reduces the attack surface and provides a solid foundation for a "Zero-Trust" security strategy. -- **Modern Network Foundations**: The integration of Cilium for CNI and MetalLB for service exposure provides a performant and standard network base, ready to accommodate your own security and filtering components. +- **Sovereignty and Reversibility** : The solution relies exclusively on open source standards (Kubernetes CNCF) to avoid any technological dependency and ensure the portability of your applications. +- **"Zero-Trust" by design** : The architecture is built on Talos OS, an immutable operating system without direct access (ni shell, ni SSH), which drastically reduces the attack surface and provides a solid foundation for a "Zero-Trust" security strategy. +- **Modern Network Foundations** : The integration of Cilium for the CNI and MetalLB for service exposure delivers a high-performance, standard network foundation, ready to host your own security and filtering components. -### A Base Platform Ready to Be Extended +### A foundational platform ready to be extended -The "Managed Core" offering natively includes a minimal and coherent stack of cutting-edge open source tools to provide you with the foundations of a Kubernetes cluster: +The "Managed Core" offering natively includes a minimal and consistent stack of cutting-edge open source tools to provide the foundations for a Kubernetes cluster: -- **OS and Network**: Talos, Cilium, MetalLB +- **OS and Networking** : Talos, Cilium, MetalLB From this foundation, you are free to integrate your own tools for continuous deployment, observability, backup, and cost management. @@ -44,41 +46,41 @@ From this foundation, you are free to integrate your own tools for continuous de ## Deployment Architectures -We offer two distinct architectures to meet your needs, whether for development environments or critical production. +We offer two distinct architectures to meet your needs, whether for development environments or critical production environments. ### "Dev/Test" Architecture -Ideal for POC environments, this compact architecture deploys all resources within a single availability zone (AZ). +Ideal for POC environments, this compact architecture deploys all resources within a single Availability Zone (AZ). -- **Use cases**: Development, testing, proof-of-concept (POC). +- **Use case**: Development, testing, proof-of-concept (POC). - **Key points**: - 1 Control Plane node. - 3 Worker nodes (or more). - - No high availability SLA. - - No security restrictions. + - Does not benefit from a high availability SLA. + - No security restrictions -Mono-AZ Architecture +Single-AZ Architecture ### Production Architecture (Multi-AZ) -Designed for production and critical applications, this architecture distributes resources across three availability zones (AZ) to guarantee high availability and maximum resilience, in compliance with SecNumCloud requirements. +Designed for production and critical applications, this architecture distributes resources across three Availability Zones (AZ) to ensure high availability and maximum resilience, in compliance with SecNumCloud requirements. -- **Use cases**: Production applications, critical services, platforms requiring an SLA. -- **Key points**: - - **High Availability**: 3 Control Plane nodes distributed across 3 AZs. - - **Distributed Workers**: A minimum of 3 worker nodes, one per AZ. - - **Bare Metal Nodes (Optional)**: Possible integration of **"Bare Metal"** type worker nodes for specific performance needs, notably **GPU support**. - - **SLA of 99.90%**. +- **Use Case** : Production applications, critical services, platforms requiring an SLA. +- **Key Points** : + - **High Availability** : 3 Control Plane nodes distributed across 3 AZs. + - **Distributed Workers** : At least 3 worker nodes, one per AZ. + - **Bare Metal Nodes (Optional)** : Possible integration of **"Bare Metal"** worker nodes for specific performance requirements, particularly **GPU support**. + - **99.90% SLA**, measured monthly. -Multi-AZ Architecture +Multi-AZ Architecture --- -### Included Technical Components +### Technical Components Included -The "Managed Core" offering includes the following components: +The "Managed Core" offer includes the following components: -- **Operating System**: Talos OS -- **Storage**: Rook-Ceph -- **CNI (Container Network Interface)**: Cilium -- **Load Balancer**: MetalLB +- **Operating System** : Talos OS +- **Storage** : Rook-Ceph +- **CNI (Container Network Interface)** : Cilium +- **Load Balancer** : MetalLB \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md index bca81b7a..f619a052 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md @@ -1,5 +1,5 @@ --- -title: Managed Kubernetes Overview +title: Overview --- # Managed Kubernetes @@ -8,83 +8,83 @@ title: Managed Kubernetes Overview

Concepts

Discover the fundamentals and essential principles to master our infrastructure.

- Explore the concepts → + Explore concepts →
-

Getting Started

-

Get up and running quickly by following clear and simple instructions.

- Launch the Quickstart → +

Getting Started Guide

+

Get started quickly by following clear and simple instructions.

+ Start the Quickstart →

Tutorials

-

Learn step by step how to configure and use our services with detailed guides.

- Discover the tutorials → +

Learn step-by-step how to configure and use our services with detailed guides.

+ Discover tutorials →
-Managed Kubernetes by Cloud Temple is a container orchestration solution based on Open Source products, designed to offer a high level of security, resilience, and automation on Cloud Temple's SecNumCloud platforms. Each cluster is deployed in a Cloud Temple IaaS environment entirely dedicated to the customer. +Managed Kubernetes by Cloud Temple is a container orchestration solution based on Open Source products, designed to provide a high level of security, resilience, and automation on Cloud Temple's SecNumcloud platforms. Each cluster is deployed in a fully client-dedicated Cloud-Temple IaaS environment. -This offering is designed for teams with a solid knowledge of Kubernetes and open source enthusiasts who are looking for a native, portable solution, without any vendor overlay, on a minimalist and immutable OS designed for automation and security. +This product is designed for teams with solid Kubernetes knowledge and open source enthusiasts seeking a native, portable, vendor-neutral solution on a minimalist, immutable OS designed for automation and security. ### Key Benefits -- **Sovereignty and Reversibility**: The solution relies on open source standards (Kubernetes CNCF) to avoid any technological dependency and guarantee the portability of your applications. The Veeam Kasten backup tool, included in the offering, is specifically designed to facilitate migrations from one cloud to another. -- **"Zero-Trust" Security and Governance**: The architecture is based on Talos OS, an immutable operating system with no direct access (no shell, no SSH), which drastically reduces the attack surface. This approach is coupled with governance tools like Kyverno for policy management and Capsule for fine-grained rights management, providing a solid foundation for a "Zero-Trust" security strategy. -- **Cost Control and Integration**: The solution natively integrates FinOps tools like OpenCost for precise consumption tracking. The pricing model is transparent, based on consumed IaaS resources, and the use of recognized open source components (Cilium, Ceph, ArgoCD) facilitates integration into your existing ecosystems. +- **Sovereignty and Reversibility** : The solution relies on open source standards (Kubernetes CNCF) to avoid technological lock-in and ensure the portability of your applications. The Veeam Kasten backup tool, included in the product, is specifically designed to facilitate migrations from one cloud to another. +- **"Zero-Trust" Security and Governance** : The architecture is built on Talos OS, an immutable operating system with no direct access (no shell, no SSH), which drastically reduces the attack surface. This approach is combined with governance tools such as Kyverno for policy management and Capsule for fine-grained rights management, forming a solid foundation for a "Zero-Trust" security strategy. +- **Cost Management and Integration** : The solution natively integrates FinOps tools such as OpenCost for precise consumption tracking. The pricing model is transparent, based on consumed IaaS resources, and the use of recognized open source components (Cilium, Ceph, ArgoCD) facilitates integration into your existing ecosystems. -### A Complete and Ready-to-Use Platform +### A complete and ready-to-use platform -The solution natively includes a complete and coherent stack of cutting-edge open source tools to cover all application lifecycle needs: +The solution natively includes a complete and coherent stack of cutting-edge open source tools to cover all application lifecycle requirements: -- **Network and Security**: Cilium, Hubble, MetalLB, Ingress Nginx, Kyverno, Capsule -- **Storage**: Rook-Ceph -- **Continuous Deployment (GitOps)**: ArgoCD -- **Observability**: Prometheus, Grafana, Loki -- **Backup and Migration**: Veeam Kasten -- **Cost Management (FinOps)**: OpenCost +- **Networking and Security** : Cilium, Hubble, MetalLB, Ingress Nginx, Kyverno, Capsule +- **Storage** : Rook-Ceph +- **Continuous Deployment (GitOps)** : ArgoCD +- **Observability** : Prometheus, Grafana, Loki +- **Backup and Migration** : Veeam Kasten +- **Cost Management (FinOps)** : OpenCost --- ## Deployment Architectures -We offer two distinct architectures to meet your needs, whether for development environments or critical production. +We offer two distinct architectures to meet your needs, whether for development environments or critical production environments. ### "Dev/Test" Architecture -Ideal for POC environments, this compact architecture deploys all resources within a single availability zone (AZ). +Ideal for POC environments, this compact architecture deploys all resources within a single Availability Zone (AZ). -- **Use cases**: Development, testing, proof-of-concept (POC). -- **Key points**: +- **Use Case** : Development, testing, proof-of-concept (POC). +- **Key Points** : - 1 Control Plane node. - 3 Worker nodes (or more). - - Distributed storage (Ceph) is co-located on worker nodes. - - No high availability SLA. - - No security restrictions. + - Distributed storage (Ceph) is co-located on the worker nodes. + - Does not benefit from a high availability SLA. + - No security restrictions -Mono-AZ Architecture +Single-AZ Architecture ### Production Architecture (Multi-AZ) -Designed for production and critical applications, this architecture distributes resources across three availability zones (AZ) to guarantee high availability and maximum resilience, in compliance with SecNumCloud requirements. +Designed for production and critical applications, this architecture distributes resources across three Availability Zones (AZ) to ensure high availability and maximum resilience, in compliance with SecNumCloud requirements. -- **Use cases**: Production applications, critical services, platforms requiring an SLA. -- **Key points**: +- **Use Case**: Production applications, critical services, platforms requiring an SLA. +- **Key Points**: - **High Availability**: 3 Control Plane nodes distributed across 3 AZs. - **Dedicated Storage**: 3 dedicated and distributed storage nodes for performance and resilience. - - **Distributed Workers**: A minimum of 3 worker nodes, one per AZ. - - **Bare Metal Nodes (Optional)**: Possible integration of **"Bare Metal"** type worker nodes for specific performance needs, notably **GPU support**. - - **SLA of 99.90%**. + - **Distributed Workers**: At least 3 worker nodes, one per AZ. + - **Bare Metal Nodes (Optional)**: Integration of **"Bare Metal"** worker nodes is possible for specific performance requirements, particularly **GPU support**. + - **99.90% SLA**. -Multi-AZ Architecture +Architecture Multi-AZ --- -### Detailed Technical Components +### Detailed technical components -The offering includes in detail the following components: +The offer includes the following components in detail: - CNI Cilium, with observability interface (Hubble) -- Internal and external Ingresses MetalLB and nginx +- Internal and external MetalLB and nginx Ingresses - Distributed storage Rook-Ceph - Cert-Manager - ArgoCD @@ -92,5 +92,5 @@ The offering includes in detail the following components: - Container registry Harbor - Cost management with OpenCost - Advanced security policies with Kyverno and Capsule -- Veeam Kasten (backup, cross-environment automations and reversibility) -- SSO authentication with an External OIDC Identity Provider (Microsoft Entra, FranceConnect, Okta, AWS IAM, Google, Salesforce, ...) +- Veeam Kasten (backup, cross-environment automations, and reversibility) +- SSO authentication with an external OIDC Identity Provider (Microsoft Entra, FranceConnect, Okta, AWS IAM, Google, Salesforce, ...) \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/quickstart.md b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/quickstart.md index 555ed33e..60682d99 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/quickstart.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/quickstart.md @@ -2,28 +2,29 @@ title: Getting Started Guide --- -Welcome to the **Managed Kubernetes** Cloud Temple getting started guide. +Welcome to the **Managed Kubernetes** Cloud Temple Getting Started Guide. -The goal of this section is to direct you to the resources needed to get started with your cluster. +The goal of this section is to guide you to the resources needed to get started with your cluster. --- -## Before You Begin +## Before you begin -To interact with your cluster, several elements are essential: +To interact with your cluster, several elements are required: -1. **The `kubeconfig` file**: This file, provided to you by Cloud Temple teams upon service delivery, contains all the information needed to connect securely. +1. **The `kubeconfig` file**: This file, provided to you by the Cloud Temple teams upon service delivery, contains all the information needed to connect securely. 2. **The `kubectl` tool**: This is the standard command-line interface for managing a Kubernetes cluster. -3. **The `kubelogin` tool** (if OIDC is used): If your cluster is configured to authenticate via an OIDC identity provider (such as Entra ID/Azure AD), you must install the `kubelogin` tool to manage the authentication flow. Follow the [kubelogin installation guide](https://github.com/int128/kubelogin). +3. **The `kubelogin` tool** (if OIDC is used): If your cluster is configured to authenticate via an OIDC identity provider (such as Entra ID/Azure AD), you must install the `kubelogin` tool to handle the authentication flow. Follow the [kubelogin installation guide](https://github.com/int128/kubelogin). -:::info[Recommended graphical tools:] -For a more visual experience and simplified management of your resources, we recommend using **Lens**. It is a powerful tool for Kubernetes that allows you to explore your cluster, manage your applications, and visualize their status graphically. -Some of our tutorials will use Lens to illustrate procedures. You can download it here: [https://k8slens.dev/](https://k8slens.dev/). +:::info[Recommended GUI Tools: +] +For a more visual experience and simplified resource management, we recommend using **Lens**. It is a powerful Kubernetes tool that allows you to explore your cluster, manage your applications, and visualize their status graphically. +Some of our tutorials will use Lens to illustrate the procedures. You can download it here: [https://k8slens.dev/](https://k8slens.dev/). ::: --- -## Accessing Your Managed Kubernetes Cluster +## Access your Managed Kubernetes cluster Your production cluster is identified by a 5-letter code (6 letters in Dev/Test). This code is used to construct the URLs for the various interfaces. In the tutorials, we will use **"ctodev"**. @@ -39,7 +40,8 @@ The URLs are: - opencost.external-secured.**identifier**.mk.ms-cloud-temple.com - opencost-mcp.external-secured.**identifier**.mk.ms-cloud-temple.com -:::info[Secured URLs] +:::info[Secure URLs +] The URLs above are only accessible from known public IPs, configured in the solution's firewall. If you wish to add a public IP, you must submit a support request. ::: @@ -48,35 +50,37 @@ The URLs above are only accessible from known public IPs, configured in the solu - argocd.internal.**identifier**.mk.ms-cloud-temple.com - hubble.internal.**identifier**.mk.ms-cloud-temple.com -:::info[Internal URLs] -The URLs above are not exposed on the Internet. They are only accessible on the Internal Managed Kubernetes network. +:::info[Internal URLs +] +The URLs above are not exposed on the Internet. They are only accessible on the Managed Kubernetes Internal network. ::: --- -## Your Permissions +## Your permissions -:::warning[Dev/Test] -For **"Dev/Test"** Managed Kubernetes clusters, the service account provided to you has all permissions across the entire cluster (ClusterAdmin) +:::warning[Dev/Test +] +For **"Dev/Test"** managed Kubernetes clusters, the service account provided to you has all permissions across the entire cluster (ClusterAdmin) ::: On **"Production"** clusters, your permissions are limited. You have an **"Extended Viewer"** right on cluster resources. This right grants read-only access to key resources, both at the cluster level and for diagnostics: - Namespaces: allow tenants to list namespaces for tools and dashboards. - Pods, deployments, replicaset...: allow tenants to list resources deployed on the cluster. -- Nodes: provide visibility into node capacity, taints, and labels to understand scheduler behavior. -- StorageClasses, PVs, PVCs, VolumeAttachments, and CSIDrivers: allow tenants to identify available storage classes and troubleshoot PVC-to-PV binding issues or CSI driver errors. +- Nodes: provide visibility into node capacity, taints, and labels to understand the scheduler's behavior. +- StorageClasses, PVs, PVCs, VolumeAttachments, and CSIDrivers: allow tenants to identify available storage classes and troubleshoot PVC-to-PV binding issues or CSI driver-related errors. - IngressClasses: inform users about available ingress controllers for application routing. - NetworkPolicies, ResourceQuotas, LimitRanges, and Events: essential for diagnosing network restrictions, scheduling failures, or resource quota violations. -The service account provided to you has also been made **owner of a first Capsule *tenant***. +The service account provided to you has also been made the **owner of a first *Capsule tenant***. You can create Namespaces, which will be attached to your Capsule tenant. -External accounts (OIDC) are members of this same Capsule tenant, which allows them to interact freely within the **namespaces** associated with the tenant. (See the tutorial "Manage permissions with Capsule") +External accounts (OIDC) are members of this same Capsule tenant, allowing them to interact freely within the **namespaces** associated with the tenant. (See the "Manage permissions with Capsule" tutorial) Some actions are not permitted: -- listing / creating Capsule tenants -- creating CRDs: If you need to deploy an application with CRDs (such as an operator helm chart), you will need to interact with support to have these CRDs imported (via extraction of yamls from the helm chart). You can then deploy your helm chart with the --skip-crds option. See: [Helm 3 Documentation](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/) +- list / create Capsule tenants +- create CRDs: If you need to deploy an application with CRDs (e.g., a Helm chart for an operator), you will need to contact support to have these CRDs imported (by extracting the YAML files from the Helm chart). You can then deploy your Helm chart using the `--skip-crds` option. See: [Helm 3 Documentation](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/) --- @@ -84,11 +88,11 @@ Some actions are not permitted:
-

Tutorial: Deploy Your First Application

+

Tutorial: Deploy your first application

- Follow a detailed guide to connect, deploy a "Hello World" application, and expose it on the Internet. + Follow a detailed guide to connect, deploy a "Hello World" application, and expose it to the Internet.

@@ -99,11 +103,11 @@ Some actions are not permitted:
-

Tutorial: Understanding Networking

+

Tutorial: Understand networking

- Discover the addressing plan, Ingress Controllers, and how to expose your services securely. + Learn about the addressing scheme, Ingress Controllers, and how to expose your services securely.

@@ -114,7 +118,7 @@ Some actions are not permitted:
-

Tutorial: Manage Permissions with Capsule

+

Tutorial: Manage permissions with Capsule

@@ -126,4 +130,4 @@ Some actions are not permitted:

-
+
\ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/firstdeploy.md b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/firstdeploy.md index f2d1e0fe..74863286 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/firstdeploy.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/firstdeploy.md @@ -4,16 +4,16 @@ title: Tutorial - Deploy your first application ## Objectives -This tutorial guides you step by step through your first deployment on a **Managed Kubernetes** cluster. By the end of this guide, you will have: +This tutorial guides you step by step to perform your first deployment on a **Managed Kubernetes** cluster. By the end of this guide, you will have: - Deployed a simple web application. -- Exposed that application inside the cluster via a Service. +- Exposed this application within the cluster via a Service. - Made the application accessible from the Internet via an Ingress. ## Prerequisites -- You have configured your cluster access as described in the [quick-start guide](../quickstart.md). -- You have a namespace on which you have deployment rights. In this tutorial, we will use a namespace named `hello-world`. +- You have configured your cluster access as described in the [quickstart guide](../quickstart.md). +- You have a namespace with deployment permissions. In this tutorial, we will use a namespace named `hello-world`. ## Step 1: Create a namespace @@ -25,7 +25,7 @@ kubectl create namespace hello-world ## Step 2: Deploy a "Hello World" application -We will deploy a demo application that displays a simple web page. +We will deploy a demonstration application that displays a simple web page. 1. Create a file named `deployment.yaml` with the following content: @@ -60,24 +60,24 @@ We will deploy a demo application that displays a simple web page. kubectl apply -f deployment.yaml ``` -3. Verify that the deployment has been created and that the pods are running: +3. Verify that the deployment was created and that the pods are running: ```bash kubectl get deployment -n hello-world - # You should see your deployment with 2/2 replicas ready. + # Vous devriez voir votre déploiement avec 2/2 replicas prêts. NAME READY UP-TO-DATE AVAILABLE AGE hello-world-deployment 2/2 2 2 102s kubectl get pods -n hello-world - # You should see two pods with the "Running" status. + # Vous devriez voir deux pods avec le statut "Running". NAME READY STATUS RESTARTS AGE hello-world-deployment-669dfbd799-294zz 1/1 Running 0 2m21s hello-world-deployment-669dfbd799-plcbg 1/1 Running 0 2m21s ``` -## Step 3: Expose the application inside the cluster (Service) +## Step 3: Expose the application in the cluster (Service) -To allow the various components of the cluster to communicate with our application, we need to create a **Service**. +To allow the different components of the cluster to communicate with our application, we need to create a **Service**. 1. Create a file named `service.yaml`: @@ -107,9 +107,9 @@ To allow the various components of the cluster to communicate with our applicati ## Step 4: Make the application accessible from the Internet (Ingress) -To expose our service on the Internet, we will use an **Ingress** resource. The Managed Kubernetes offering provides several pre-configured `ingressClassName` values. We will use `nginx-external` for public exposure. +To expose our service to the Internet, we will use an **Ingress** resource. The Managed Kubernetes offering provides several preconfigured `ingressClassName`s. We will use `nginx-external` for public exposure. -1. Create an `ingress.yaml` file. **Remember to replace `your-cluster-id`** with your cluster identifier (e.g. `ctodev`). +1. Create a file `ingress.yaml`. **Remember to replace `votre-cluster-id`** with your cluster's identifier (e.g., `ctodev`). ```yaml apiVersion: networking.k8s.io/v1 @@ -120,7 +120,7 @@ To expose our service on the Internet, we will use an **Ingress** resource. The spec: ingressClassName: nginx-external rules: - - host: "hello-world.external.your-cluster-id.mk.ms-cloud-temple.com" # change me + - host: "hello-world.external.votre-cluster-id.mk.ms-cloud-temple.com" # changez moi http: paths: - path: / @@ -138,13 +138,13 @@ To expose our service on the Internet, we will use an **Ingress** resource. The kubectl apply -f ingress.yaml ``` -## Step 5: Verify access +## Step 5: Verify Access -A wildcard DNS entry already points all URLs ending in ".external.your-cluster-id.mk.ms-cloud-temple.com" to the IP of the "external" ingress. +A DNS entry "*" already points all URLs ending with ".external.votre-cluster-id.mk.ms-cloud-temple.com" to the IP of the "external" ingress. Applications published on this DNS suffix are therefore directly accessible. ```bash -curl http://hello-world.external.your-cluster-id.mk.ms-cloud-temple.com +curl http://hello-world.external.votre-cluster-id.mk.ms-cloud-temple.com ``` You should receive a response from the demo NGINX server. @@ -168,12 +168,13 @@ RawContent : HTTP/1.1 200 OK Server: ng... ``` -:::warning[Going further: security in production] +:::warning[Going further: security in production +] This tutorial has shown you the basics of deployment. For a production environment, it is crucial to apply additional security measures: -- **Use secure images**: Prefer images from your secure corporate registry such as **Harbor** rather than public images. -- **Control network flows**: Implement `NetworkPolicies` to restrict communications to only the necessary flows between your applications. -- **Apply governance policies**: Use tools like **Kyverno** to enforce security rules (e.g. prohibit "root" containers, require resource `requests` and `limits`, etc.). +- **Use secure images** : Prefer images from your secure enterprise registry such as **Harbor** rather than public images. +- **Control network traffic** : Set up `NetworkPolicies` to restrict communications to only the necessary traffic between your applications. +- **Apply governance policies** : Use tools like **Kyverno** to enforce security rules (e.g., forbid "root" containers, require resource `requests` and `limits`, etc.). ::: ## Cleanup @@ -184,4 +185,4 @@ To delete all the resources you created during this tutorial, you can simply del kubectl delete namespace hello-world ``` -Congratulations, you have deployed and exposed your first application on Managed Kubernetes! +Congratulations, you have deployed and exposed your first application on Managed Kubernetes! \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/argocdguestbook.png b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/argocdguestbook.png deleted file mode 100644 index 1ebb7ab01b50dfc30c9cd5a7341ad5b822640771..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150815 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 IYWeoR03N|)<^TWy diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/cillium.png b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/cillium.png deleted file mode 100644 index ae41ac76111528c40edad8308ffccc9a011bf1b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108152 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 V1gV*?;Y+ANSzcZ4ovi8O{{VuEDS7|^ diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp.png b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp.png deleted file mode 100644 index a73ef0039a6e7693d3ced0ff6d123ca8b49d93c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 291688 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 z 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

vs{UyxIC!?{58j2!bD$Q= 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

?-oV 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 z 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 z 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

X6bsrg;O6@=l( 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%0DcbKP-B^Fm(4_aw`wxI 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 diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp2.png b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp2.png deleted file mode 100644 index 04b4e033b0a1515312f6f57023909a1860e27de1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22533 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 |d|Ec_+BV;3)d|`9V&n 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 M$K;N_k **Important**: This range remains **in a private address space**. For **public exposure**, it is necessary to create a **NAT rule (DNAT)** on your infrastructure firewall to redirect traffic from one of your external public IPs to the private IP address assigned by MetalLB. +> **Important**: This range remains **within a private address space**. For **public exposure**, it is necessary to create a **NAT (DNAT) rule** on your infrastructure's firewall to redirect traffic from one of your external public IPs to the private IP address assigned by MetalLB. ## Public IPs -Your Managed Kubernetes cluster was delivered with 2 public IPv4 addresses. +Your managed Kubernetes cluster was originally delivered with 2 public IPv4 addresses. The 1st IP is used on port 6443 for the Kubernetes API (in our example ctodev.mk.ms-cloud-temple.com:6443) -This same IP is also NATed on the *"nginx-external-secured"* ingress controller for port 443. This enables exposure of the various consoles made available to you (see the quickstart guide). Access to this public IP is **filtered** with a list of allowed IPs. +This same IP is also NATed to the ingress controller *"nginx-external-secured"* on port 443. This allows exposing the various consoles made available to you (see the quickstart guide). Access to this public IP is **filtered** using a list of authorized IPs. --- -The 2nd public IP is NATed on the *"nginx-external"* ingress controller, on ports 80 and 443. +The 2nd public IP is NATed to the ingress controller *"nginx-external"*, on ports 80 and 443. -Applications exposed with the *"nginx-external"* ingress class will therefore be directly accessible from the Internet on this IP. +Applications exposed with the ingress class *"nginx-external"* will therefore be directly accessible from the Internet via this IP. -*If you wish to modify firewall rules (adding/removing allowed IPs), you must submit a support request.* +*If you wish to modify the firewall rules (add/remove allowed IPs), you must submit a support request.* -*It is possible to add additional public IPs if you wish.* +*It is possible to add additional public IPs if desired.* ## DNS -For internal DNS (CoreDNS), the cluster will have these parameters: +For internal DNS (CoreDNS), the cluster will have the following settings: -- Cluster name: `` -- Internal domain: `-cluster.local` (in our example: ctodev-cluster.local) +- Cluster name: `` +- Internal domain: `-cluster.local` (in our example: ctodev-cluster.local) -This internal domain is crucial for inter-service communication within the cluster. It allows an application to contact another application simply by using its Kubernetes service name, without needing to know its internal IP address. +This internal domain is critical for inter-service communication within the cluster. It enables an application to reach another application using only its Kubernetes service name, without needing to know its internal IP address. -For example, a service named `api-backend` in the `production` namespace will automatically be resolvable at the address `api-backend.production.svc.ctodev-cluster.local`. +For example, a service named `api-backend` in the `production` namespace will automatically resolve to the address `api-backend.production.svc.ctodev-cluster.local`. --- The public DNS zone used for Managed Kubernetes clusters is `.mk.ms-cloud-temple.com` -The *"nginx-external"* ingress (mapped to public IP #2) is accessible at `"*.external..mk.ms-cloud-temple.com"`. -If you publish an application with this ingress-class, you can access it directly via this domain name. See the tutorial: [Deploy your first application](./firstdeploy) +The *"nginx-external"* ingress (mapped to public IP #2) is accessible at `"*.external..mk.ms-cloud-temple.com"`. +If you deploy an application with this ingress-class, you can access it directly via this domain name. See the tutorial: [Deploy your first application](./firstdeploy) -## Hubble: Network Observability at Your Fingertips +## Hubble: Network observability at your fingertips -Hubble is a graphical and command-line interface for visualizing and understanding the network flows of your cluster. Based on Cilium, it provides you with a detailed map of services, dependencies, and network policies in real time. +Hubble is a graphical and command-line interface for visualizing and understanding the network flows of your cluster. Built on Cilium, it provides a detailed map of services, dependencies, and network policies in real time. With Hubble, you can: - **Visualize traffic flows** between your pods and services. - **Identify connectivity issues** and network errors. - **Verify the enforcement of your security policies** (Network Policies). -- **Explore the dependencies** between your different applications. +- **Explore dependencies** between your various applications. -### Accessing the Hubble Interface +### Access the Hubble UI -The Hubble graphical interface is exposed on an internal URL of your cluster. Access is not possible via `kubectl` port-forwarding because users do not have sufficient rights on the `kube-system` namespace. +The Hubble UI is exposed on an internal URL within your cluster. Access is not possible via `kubectl` port-forwarding because users do not have sufficient permissions in the `kube-system` namespace. -To access it, you must be connected to the cluster's internal network (for example, via a bastion or a VPN). The URL to use is as follows: +To access it, you must be connected to the cluster's internal network (e.g., via a bastion host or VPN). The URL to use is as follows: -`http://hubble.internal..mk.ms-cloud-temple.com` +`http://hubble.internal..mk.ms-cloud-temple.com` -For this URL to be resolvable from your workstation, you will probably need to add an entry to your `hosts` file or to your internal DNS. You can get the internal IP address of the Hubble Ingress with the following command: +To make this URL resolvable by your workstation, you will likely need to add an entry to your `hosts` file or internal DNS. You can retrieve the internal IP address of the Hubble Ingress using the following command: ```bash kubectl get ingress hubble-ui -n kube-system @@ -176,18 +178,18 @@ kubectl get ingress hubble-ui -n kube-system ### Creating Internal DNS Zones (Private Cluster) -To strengthen security and simplify access to your services and the Kubernetes API from your internal network, it is recommended to create an internal DNS zone. This zone will allow resolving the domain names of your Ingresses and the Kubernetes API to their respective private IP addresses, avoiding transit through public networks. +To enhance security and simplify access to your services and the Kubernetes API from your internal network, it is recommended to create an internal DNS zone. This zone will allow you to resolve the domain names of your Ingresses and the Kubernetes API to their respective private IP addresses, thereby avoiding transit over public networks. -**Example configuration with our "ctodev" cluster, with the assigned range** **10.20.0.0/22:** +**Example configuration with our "ctodev" cluster, whose assigned range is** **10.20.0.0/22:** -Based on the URLs provided in the quickstart guide, you can configure your internal DNS as follows: +Based on the URLs provided in the getting started guide, you can configure your internal DNS as follows: -1. **Create the private DNS zone** on your internal DNS servers for `..mk.ms-cloud-temple.com` +1. **Create the private DNS zone** on your internal DNS servers for `..mk.ms-cloud-temple.com` -2. **Add the following type A records**: +2. **Add the following A records:** - **For the Kubernetes API:** - - `. -> 10.20.0.20` (virtual IP of the API) + - `. -> 10.20.0.20` (Virtual IP of the API) - **For internal services (via the `nginx-internal` Ingress):** - `hubble.internal -> 10.20.1.1` @@ -205,7 +207,7 @@ This configuration ensures that traffic to the API and internal services remains

-:::warning[Going further: security in production] -This document explains the fundamental networking concepts. For a production deployment, it is crucial to apply additional security measures: +:::warning[Pour aller plus loin : la sécurité en production +] +This document explains fundamental networking concepts. For a production deployment, it is crucial to implement additional security measures: -- **Use secure images**: Prefer images from your secure corporate registry such as **Harbor** rather than public images. -- **Control network flows**: Implement `NetworkPolicies` to control communications to only the necessary flows between your applications. -- **Apply governance policies**: Use tools like **Kyverno** to enforce security rules (e.g. prohibit "root" containers, require resource `requests` and `limits`, etc.). -::: +- **Use secure images**: Prefer images from your secure enterprise registry such as **Harbor** over public images. +- **Control network traffic**: Set up `NetworkPolicies` to restrict communications to only the necessary traffic flows between your applications. +- **Apply governance policies**: Use tools like **Kyverno** to enforce security rules (e.g., disallowing "root" containers, requiring resource `requests` and `limits`, etc.). +::: \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingargocd.md b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingargocd.md index b4be2416..a13bd7ca 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingargocd.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingargocd.md @@ -1,73 +1,73 @@ --- -title: Using ArgoCD for your GitOps deployments +title: Use ArgoCD for your GitOps deployments --- import argocdguestbook from '@site/docs/managed_kubernetes/tutorials/images/argocdguestbook.png' ## Objectives -This tutorial explains how to use **ArgoCD**, the GitOps continuous deployment tool integrated into your **Managed Kubernetes** cluster. By the end of this guide, you will know: +This tutorial explains how to use **ArgoCD**, the GitOps continuous deployment tool integrated into your **Managed Kubernetes** cluster. By the end of this guide, you will know how to: - What the GitOps approach is. - How to access the ArgoCD interface. - How to deploy an application using ArgoCD to synchronize a Git repository. -## The GitOps Principle with ArgoCD +## The GitOps principle with ArgoCD -**GitOps** is a practice that involves using a Git repository as the single source of truth for declaring the desired state of your infrastructure and applications. +**GitOps** is a practice that involves using a Git repository as the single source of truth to declare the desired state of your infrastructure and applications. -**ArgoCD** is the tool that implements this principle. It continuously monitors a Git repository and compares the state defined there (via Kubernetes manifests) with the actual state of your cluster. If it detects a difference, it automatically applies the changes so that the cluster matches what is declared in Git. +**ArgoCD** is the tool that implements this principle. It continuously monitors a Git repository and compares the state defined there (via des manifestes Kubernetes) with the actual state of your cluster. If it detects a difference, it automatically applies the changes so that the cluster matches what is declared in Git. The benefits are numerous: - **Reliable and reproducible deployments.** -- **Complete traceability** of all changes via Git history. +- **Complete traceability** of all changes via the Git history. - **Fast recovery** after an incident by reverting to a previous commit. -- **Improved security** by limiting direct access to the cluster. +- **Enhanced security** by limiting direct access to the cluster. ## Accessing the ArgoCD Interface -The ArgoCD web interface is exposed on an internal URL of your cluster. To access it, you must be connected to the cluster's internal network (for example, via a bastion or a VPN). +The ArgoCD web interface is exposed via an internal URL within your cluster. To access it, you must be connected to the cluster's internal network (for example, via a bastion host or VPN). -The URL to use is as follows, replacing ``: +The URL to use is as follows, replacing `` : -`http://argocd.internal..mk.ms-cloud-temple.com` +`http://argocd.internal..mk.ms-cloud-temple.com` -You can get the internal IP address of the ArgoCD Ingress with the following command: +You can retrieve the internal IP address of the ArgoCD Ingress using the following command : ```bash kubectl get ingress argocd-server -n argocd ``` :::info -The password for the `admin` account is provided to you by the Cloud Temple teams upon delivery of your cluster. +The password for the `admin` account is provided by the Cloud Temple teams upon cluster delivery. ::: -## Deploying an Application with ArgoCD +## Deploy an application with ArgoCD We will now deploy a test application using the GitOps approach. ### 1. The Git Repository -ArgoCD needs a Git repository containing the Kubernetes manifests of the application to deploy. For this tutorial, we will use the ArgoCD example repository: `https://github.com/argoproj/argocd-example-apps`. We will deploy the `guestbook` application found in this repository. +ArgoCD requires a Git repository containing the Kubernetes manifests for the application to be deployed. For this tutorial, we will use the ArgoCD example repository: `https://github.com/argoproj/argocd-example-apps`. We will deploy the `guestbook` application located in this repository. ### 2. Prepare the Destination Namespace -For the application to be deployed in a namespace managed by Capsule, we must first create this namespace and apply the appropriate tenant label to it. +To enable the application to be deployed in a namespace managed by Capsule, we must first create this namespace and apply the appropriate tenant label to it. Run the following commands: ```bash -# Create the namespace +# Crée le namespace kubectl create namespace guestbook -# Apply the label to associate it with the Capsule "default" tenant (if needed, as the namespace was probably already associated with your tenant at creation) +# Applique le label pour l'associer au tenant "default" de Capsule (si besoin, car le namespace a surement déjà été associé avec votre tenant lors de sa création) kubectl label namespace guestbook capsule.clastix.io/tenant=default ``` -### 3. Create the Application in ArgoCD +### 3. Create the application in ArgoCD -Now that the namespace is ready, we can declare the application to ArgoCD. +Now that the namespace is ready, we can register the application with ArgoCD. 1. Create a file named `app-guestbook.yaml` with the following content: @@ -92,14 +92,14 @@ Now that the namespace is ready, we can declare the application to ArgoCD. selfHeal: true ``` - This manifest asks ArgoCD to: + This manifest instructs ArgoCD to: - Create an application named `guestbook`. - Monitor the `argocd-example-apps` repository. - Focus on the `guestbook` folder in this repository. - Deploy the manifests found in the `guestbook` namespace of the local cluster. - - Maintain synchronization automatically (`automated`). + - Maintain automatic synchronization (`automated`). -2. You have two options for creating the application in ArgoCD: +2. You have two options to create the application in ArgoCD: **Option A: Via `kubectl` (GitOps Approach)** @@ -109,23 +109,23 @@ Now that the namespace is ready, we can declare the application to ArgoCD. kubectl apply -f app-guestbook.yaml ``` - **Option B: Via the ArgoCD Web Interface** + **Option B: Via the ArgoCD web interface** You can also create the application directly from the graphical interface: - In the ArgoCD UI, click **"+ NEW APP"**. - - In the top right of the creation screen, click **"EDIT AS YAML"**. + - In the top right corner of the creation screen, click **"EDIT AS YAML"**. - Paste the content of your `app-guestbook.yaml` file into the editor. - Click **"CREATE"**. -### 4. Verify the Synchronization +### 4. Verify Synchronization -As soon as you apply the manifest, ArgoCD detects this new `Application` resource and begins its work. +Once you apply the manifest, ArgoCD detects this new `Application` resource and begins its work. 1. **Via the web interface:** - Log in to the ArgoCD interface. - You should see a new card for the `guestbook` application. - After a few moments, its status should change to `Healthy` and `Synced`. - - By clicking on the card, you can visualize all the Kubernetes resources (Deployment, Service, etc.) that have been created. + - By clicking on the card, you can view all Kubernetes resources (Deployment, Service, etc.) that have been created. @@ -155,33 +155,34 @@ As soon as you apply the manifest, ArgoCD detects this new `Application` resourc ### 5. The GitOps Cycle -Now, if you modify a manifest in the Git repository, ArgoCD will detect the change and automatically update the application in the cluster. That is the magic of GitOps! +Now, if you modify a manifest in the Git repository, ArgoCD will detect the change and automatically update the application in the cluster. That's the magic of GitOps! ## Cleanup -To delete the application and all associated resources, you can simply delete the ArgoCD `Application` resource. +To remove the application and all associated resources, you can simply delete the `Application` resource in ArgoCD. -1. **Via the web interface:** - - In the ArgoCD UI, find the `guestbook` application. - - Click on the three dots (...) to open the menu and select **"Delete"**. +1. **Via the web UI :** + - In the ArgoCD UI, locate the `guestbook` application. + - Click the three dots (...) to open the menu and select **"Delete"**. - Check the **"Foreground"** option to ensure that all managed resources (pods, services, etc.) are also deleted in cascade. -2. **Via `kubectl`:** - - Delete the `app-guestbook.yaml` file you created: +2. **Via `kubectl` :** + - Delete the `app-guestbook.yaml` file you created : ```bash kubectl delete -f app-guestbook.yaml ``` -ArgoCD will now delete all components of the `guestbook` application. Once the deletion synchronization is complete, the `guestbook` namespace will be empty. You can then delete it with the following command: +ArgoCD will now delete all components of the `guestbook` application. Once the deletion sync is complete, the `guestbook` namespace will be empty. You can then delete it with the following command : ```bash kubectl delete namespace guestbook ``` -:::info[Going further: secrets management] -This tutorial uses a public repository without sensitive data. For your production applications, it is crucial never to store secrets (passwords, API keys) in plain text in your Git repository. Solutions like **Sealed Secrets** or **HashiCorp Vault** integrate with ArgoCD to manage your secrets securely. A future tutorial will detail this approach. +:::info[Going further: secrets management +] +This tutorial uses a public repository without sensitive data. For your production applications, it is crucial to never store secrets (passwords, API keys) in plaintext in your Git repository. Solutions such as **Sealed Secrets** or **HashiCorp Vault** integrate with ArgoCD to manage your secrets securely. A future tutorial will detail this approach. ::: ## Conclusion -You have deployed your first application with ArgoCD following GitOps principles. This powerful approach allows you to manage your deployments declaratively, reliably, and securely. We encourage you to adopt it for all your applications on Managed Kubernetes. +You have deployed your first application with ArgoCD following GitOps principles. This powerful approach allows you to manage your deployments declaratively, reliably, and securely. We encourage you to adopt it for all your applications on Managed Kubernetes. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingcapsule.md b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingcapsule.md index de7a129c..dc3560a3 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingcapsule.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingcapsule.md @@ -1,10 +1,10 @@ --- -title: Managing permissions with Capsule +title: Manage permissions with Capsule --- ## Objectives -This tutorial will guide you in using **Capsule**, the multi-tenancy tool integrated into your **Managed Kubernetes** cluster. By the end of this guide, you will know: +This tutorial will guide you through using **Capsule**, the multi-tenancy tool integrated into your **Managed Kubernetes** cluster. By the end of this guide, you will know how to: - What a **Capsule Tenant** is and how it organizes your permissions. - How to **create and manage Namespaces** within your Tenant. @@ -12,36 +12,36 @@ This tutorial will guide you in using **Capsule**, the multi-tenancy tool integr ## What is Capsule? -Capsule is a Kubernetes controller that introduces the concept of a **Tenant** to group multiple Namespaces together. In the Cloud Temple Managed Kubernetes offering, Capsule is used to delegate the management of your own Namespaces to you autonomously, without needing intervention from a cluster administrator. +Capsule is a Kubernetes controller that introduces the concept of a **Tenant** to group multiple Namespaces. In Cloud Temple's Managed Kubernetes product, Capsule is used to delegate management of your own Namespaces to you, enabling full autonomy without requiring intervention from a cluster administrator. -Upon delivery of your cluster, the Cloud Temple teams have created a first Tenant for you and designated you as its **owner (Tenant Owner)**. +Upon cluster delivery, the Cloud Temple teams created a first Tenant for you and designated you as the **owner (Tenant Owner)**. :::tip -By default, your first Tenant is called `default` and the owner service account is `defaultapp`. +By default, your first Tenant is named `default` and the owner service account is `defaultapp`. ::: To learn more about the project, you can visit the [official Capsule website](https://projectcapsule.dev/). -## Step 1: Know the Name of Your Tenant +## Step 1: Know your Tenant name -As a `Tenant Owner`, you do not have the permissions to list the `Tenant` resource directly. The name of your Tenant is communicated to you by the Cloud Temple teams upon delivery of the service. +As a `Tenant Owner`, you do not have permissions to list the `Tenant` resource directly. Your Tenant name is provided to you by the Cloud Temple teams during service delivery. -If you have forgotten the name of your Tenant, you can find it by inspecting the labels of the Namespaces you have access to. The following command lists all namespaces that are attached to a Capsule tenant and displays their labels: +If you have forgotten your Tenant name, you can find it by inspecting the labels of the Namespaces you have access to. The following command lists all namespaces attached to a Capsule tenant and displays their labels: ```bash kubectl get ns -l capsule.clastix.io/tenant --show-labels ``` -Look for the label `capsule.clastix.io/tenant`. The value of this label is the name of your Tenant. You can then use this name to filter and see only the Namespaces of your Tenant: +Look for the `capsule.clastix.io/tenant` label. The value of this label is your Tenant name. You can then use this name to filter and view only the Namespaces of your Tenant: ```bash -# Once you know the name of your tenant, for example "my-tenant" +# Once you know your tenant name, for example "my-tenant" kubectl get ns -l capsule.clastix.io/tenant=my-tenant ``` ## Step 2: Create a New Namespace -Your main advantage as a `Tenant Owner` is being able to create Namespaces yourself. You can do it directly with a single `kubectl` command. +Your main advantage as a `Tenant Owner` is the ability to create Namespaces yourself. You can do this directly with a single `kubectl` command. Run the following command to create a namespace named `mon-projet-dev`: @@ -51,33 +51,33 @@ kubectl create namespace mon-projet-dev Capsule will intercept this request. Since you are the owner of a Tenant, it will authorize the creation of the Namespace and automatically associate it with your Tenant. -## Step 3: Verify the Namespace Association +## Step 3: Verify Namespace Association -Once the Namespace is created, you can verify that it has been properly attached to your Tenant. +Once the Namespace is created, you can verify that it has been properly associated with your Tenant. ```bash kubectl get ns mon-projet-dev --show-labels ``` -You will notice that Capsule has added a label to your Namespace, indicating which Tenant it belongs to. This is the mechanism that guarantees isolation between the different Tenants of the cluster. +You will notice that Capsule has added a label to your Namespace, indicating which Tenant it belongs to. This mechanism ensures isolation between the different Tenants in the cluster. ``` NAME STATUS AGE LABELS mon-projet-dev Active 1m capsule.clastix.io/tenant=votre-tenant ``` -## Step 4: Understand Policy Inheritance +## Step 4: Understanding policy inheritance -One of the greatest advantages of Capsule is that all security policies, resource quotas (`ResourceQuota`) and resource ranges (`LimitRange`) defined at the Tenant level by administrators are **automatically inherited** by all the Namespaces you create. +One of the biggest advantages of Capsule is that all security policies, resource quotas (`ResourceQuota`) and resource ranges (`LimitRange`) defined at the Tenant level by administrators are **automatically inherited** by all Namespaces you create. -This ensures that your projects comply with consumption limits (CPU, memory, storage) and security rules (such as default network policies or security constraints defined by **Kyverno**) defined for your environment, without you having to reconfigure them for each Namespace. +This ensures that your projects comply with consumption limits (CPU, memory, storage) and security rules (such as default network policies or security constraints defined by **Kyverno**) set for your environment, without having to reconfigure them for each Namespace. :::info -Specific quotas have been set on your Capsule Tenant to limit the use of persistent storage (Ceph-Block and Ceph-FileSystem) to the total space available in the cluster. If you need to modify these quotas for a specific project, please submit a request to Cloud Temple support. +Specific quotas have been set on your Capsule Tenant to limit the use of persistent storage (Ceph-Block and Ceph-FileSystem) to the total available space in the cluster. If you need to modify these quotas for a specific project, please submit a request to Cloud Temple support. ::: ## Conclusion -Thanks to Capsule, you have complete autonomy to manage the Namespaces of your teams while benefiting from a secure and pre-configured framework by the cluster administrators. You can create, modify, and delete Namespaces at will, knowing that the necessary safeguards are automatically applied. +With Capsule, you have full autonomy to manage your teams' Namespaces while benefiting from a secure, preconfigured framework established by cluster administrators. You can create, modify, and delete Namespaces at will, knowing that the necessary guardrails are automatically enforced. -If you need to create a new Tenant to isolate another set of projects or teams, you can request this from Cloud Temple support. +If you need to create a new Tenant to isolate another set of projects or teams, you can submit a request to Cloud Temple support. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggapi.md b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggapi.md index 229a3452..fcdc000a 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggapi.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggapi.md @@ -6,50 +6,51 @@ import gapischema from '@site/docs/managed_kubernetes/tutorials/images/gapi.png' ## Introduction -The Gateway API is the new Kubernetes standard for managing incoming traffic. It succeeds the traditional Ingress resource by offering more flexibility, more features (advanced routing, load balancing, etc.) and a better separation of responsibilities. +The Gateway API is the new Kubernetes standard for managing inbound traffic. It succeeds the traditional Ingress resource by offering more flexibility, features (advanced routing, load balancing, etc.), and better separation of responsibilities. -In your Cloud Temple Managed Kubernetes cluster, **Cilium** is used as the CNI and natively implements Gateway API support. +In your Managed Kubernetes Cloud Temple cluster, **Cilium** is used as the CNI and natively implements Gateway API support. -:::info[Supported versions] -This documentation applies to clusters using **Cilium 1.8.4 or higher**. -**Gateway API CRDs version 1.4** are pre-installed on your cluster. +:::info[Supported Versions +] +This documentation applies to clusters using **Cilium 1.8.4 or later**. +The **Gateway API CRDs version 1.4** are preinstalled on your cluster. ::: ## Objectives -This tutorial will guide you to: +This tutorial will guide you through: -- Understand the basic Gateway API resources (GatewayClass, Gateway, HTTPRoute). +- Understand the core Gateway API resources (GatewayClass, Gateway, HTTPRoute). - Deploy a test application. - Expose this application via a Cilium Gateway. - Test access. ## Prerequisites -- An operational Cloud Temple Managed Kubernetes cluster. +- An operational Managed Kubernetes Cloud Temple cluster. - The `kubectl` tool configured to access your cluster. - The `cilium` tool. ## Key Concepts -Gateway API decomposes network configuration into three main resources: +The Gateway API decomposes network configuration into three main resources: -1. **GatewayClass**: Defines the type of controller (here, `io.cilium/gateway`). -2. **Gateway**: Instantiates a network entry point (load balancer). -3. **HTTPRoute**: Defines routing rules (paths, headers) toward Kubernetes Services. +1. **GatewayClass** : Defines the type of controller (here, `io.cilium/gateway`). +2. **Gateway** : Instantiates a network entry point (load balancer). +3. **HTTPRoute** : Defines routing rules (paths, headers) to Kubernetes Services. Schema GAPI -## Step 1: Verify the Version and GatewayClass +## Step 1: Check the version and GatewayClass -You can verify that your cluster uses a compatible version of Cilium (1.8.4+) using the commands: +You can verify that your cluster is using a compatible version of Cilium (1.8.4+) using the following commands: ```bash cilium status cilium config view | grep -w "enable-gateway-api" ``` -Then make sure the Cilium `GatewayClass` is available on your cluster: +Then, ensure that Cilium's `GatewayClass` is available on your cluster: ```bash kubectl get gatewayclass @@ -62,15 +63,16 @@ NAME CONTROLLER ACCEPTED AGE cilium io.cilium/gateway True 2d ``` -:::info[Note] -If no GatewayClass is listed, make sure the Gateway API feature is enabled in your Cilium installation. +:::info[Note +] +If no GatewayClass is listed, ensure that the Gateway API feature is enabled in your Cilium installation. ::: -## Step 2: Deploy a Demo Application +## Step 2: Deploy a demo application We will deploy a simple application that returns information about the pod (echo-server). -Create an `apps.yaml` file: +Create a file `apps.yaml`: ```yaml apiVersion: apps/v1 @@ -143,7 +145,7 @@ Apply the configuration: kubectl apply -f gateway.yaml ``` -Verify that the Gateway has obtained an IP address (this may take a few moments for the LoadBalancer to be provisioned by the Cloud Temple infrastructure): +Verify that the Gateway has obtained an IP address (it may take a few moments for the LoadBalancer to be provisioned by the Cloud Temple infrastructure): ```bash kubectl get gateway my-gateway @@ -153,9 +155,9 @@ Wait for the `PROGRAMMED` field to be `True` and for `ADDRESS` to display an IP. ## Step 4: Create an HTTPRoute -Now that we have an "entry point" (Gateway), we need to direct traffic to our service. +Now that we have a "gateway" (Gateway), we need to route traffic to our service. -Create an `httproute.yaml` file: +Create a `httproute.yaml` file: ```yaml apiVersion: gateway.networking.k8s.io/v1 @@ -199,9 +201,9 @@ You should receive a JSON response from the `echo-server` application indicating ## Advanced Features (Example: Canary Release) -Gateway API greatly facilitates advanced deployment scenarios, such as Canary Release (weighted traffic splitting). +The Gateway API greatly facilitates advanced deployment scenarios, such as Canary Release (weighted traffic distribution). -Suppose we have a v2 of our application. We can split traffic 90% to v1 and 10% to v2 simply by adjusting the weights in `backendRefs`: +Assume we have a v2 of our application. We can distribute 90% of the traffic to v1 and 10% to v2 simply by adjusting the weights in `backendRefs` : ```yaml apiVersion: gateway.networking.k8s.io/v1 @@ -223,4 +225,4 @@ spec: ## Conclusion -You have set up a modern service exposure infrastructure with Cilium Gateway API. This standardized approach, semantically richer than Ingress, is recommended to take advantage of the advanced network capabilities of Kubernetes. +You have set up a modern service exposure infrastructure with the Cilium Gateway API. This standardized approach, which is more semantically rich than Ingress, is recommended to leverage the advanced capabilities of Kubernetes networking. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggpu.md b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggpu.md index 92991a4b..08d07d64 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggpu.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggpu.md @@ -1,5 +1,5 @@ --- -title: Using an NVIDIA GPU +title: Using an nVidia GPU --- import nvidiasmi from '@site/docs/managed_kubernetes/tutorials/images/nvidiasmi.png' @@ -10,11 +10,11 @@ This tutorial shows you how to deploy a pod that uses a GPU resource on a Manage ## Prerequisites -- A Managed Kubernetes cluster with at least one "Bare Metal" worker node with a GPU. +- A Managed Kubernetes cluster with at least one "Bare Metal" type worker node with a GPU. ## Example Pod Manifest -Here is an example pod manifest that runs the `nvidia-smi` command to verify the presence and status of the GPU card. +Here is an example of a pod manifest that runs the `nvidia-smi` command to verify the presence and status of the GPU. ```yaml apiVersion: v1 @@ -22,7 +22,7 @@ kind: Pod metadata: name: nvidia-cuda-check spec: - runtimeClassName: nvidia # Key for Talos NVIDIA + runtimeClassName: nvidia # Clé pour Talos NVIDIA restartPolicy: Never containers: - name: nvidia-version-check @@ -33,7 +33,7 @@ spec: ### Manifest Explanation -- **`runtimeClassName: nvidia`**: This is the most important part. It tells Kubernetes to use the NVIDIA runtime. The NVIDIA toolkit then takes care of injecting the NVIDIA drivers directly into the pod, allowing the container to access the GPU. +- **`runtimeClassName: nvidia`**: This is the most important part. It instructs Kubernetes to use the NVIDIA runtime. The NVIDIA toolkit then handles injecting the NVIDIA drivers directly into the pod, allowing the container to access the GPU. - **`restartPolicy: Never`**: Since this pod is just a verification command, we do not want it to restart after execution. - **`image: "nvidia/cuda:..."`**: We use an image provided by NVIDIA that contains the necessary tools to interact with the GPU. - **`command: ["nvidia-smi"]`**: This is the command that will be executed inside the container. `nvidia-smi` is a command-line tool that provides information about NVIDIA GPUs. @@ -48,12 +48,12 @@ For more information on how the NVIDIA toolkit works, you can consult the [offic kubectl apply -f nvidia-smi.yaml ``` -2. **Check the pod logs** to see the output of the `nvidia-smi` command: +2. **Check the pod logs** to view the output of the `nvidia-smi` command: ```shell kubectl logs nvidia-cuda-check ``` -If everything is configured correctly, you should see output similar to the following, showing the details of your GPU card: +If everything is configured correctly, you should see an output similar to this, showing the details of your GPU card: -nvidia-smi command result +nvidia-smi command result \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingharbor.md b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingharbor.md index 4a5cbe4a..1002a995 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingharbor.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingharbor.md @@ -2,43 +2,43 @@ title: Using Harbor --- -Harbor is an OCI artifact registry (container images, Helm charts, SBOM, signatures, etc.) offering fine-grained project management, access control, vulnerability scanning, retention policies, and signature management. This guide explains how to use it with Cloud Temple Managed Kubernetes, from connecting to the registry all the way to integration in your Kubernetes deployments and CI/CD pipelines. +Harbor is an OCI artifact registry (container images, Helm charts, SBOM, signatures, etc.) offering fine-grained project management, access control, vulnerability scanning, retention policies, and signature management. This guide explains how to use it with Cloud Temple Managed Kubernetes, from connecting to the registry to integrating it into your Kubernetes deployments and CI/CD pipelines. :::note -In this guide, replace the following variables with your own values: +In this guide, replace the following variables with your values: -- `` : your cluster code (e.g.: `ctodev`) -- `` : public Harbor URL built as follows: `harbor.external-secured..mk.ms-cloud-temple.com` (e.g.: `harbor.external-secured.ctodev.mk.ms-cloud-temple.com`) +- `` : your cluster code (ex: `ctodev`) +- `` : public Harbor URL constructed as follows: `harbor.external-secured..mk.ms-cloud-temple.com` (ex: `harbor.external-secured.ctodev.mk.ms-cloud-temple.com`) - `` : your Harbor project name - `` : target Kubernetes namespace -- `` / `` : credentials of a Harbor robot account +- `` / `` : credentials for a Harbor robot account ::: ## Prerequisites - Access to the Console and the Managed Kubernetes service -- An existing Harbor project (or rights to create one) -- Tools installed locally: +- An existing Harbor project (or permissions to create one) +- Locally installed tools: - Docker or Podman - kubectl (configured on your cluster) - Helm v3.8+ (OCI support) - - Optional: `cosign` for image signatures + - Optional: `cosign` for image signing - Outbound network access to `` over HTTPS (443) - No additional certificates required: Harbor's TLS certificate is public and trusted -## Key Concepts +## Essential Concepts - Project: logical space (public or private) that contains repositories. - Repository: collection of tags for a given image (`/app-web:1.0.0`). - Robot accounts: technical identities with limited privileges, intended for CI/CD. -- Vulnerability scanning: automatic analysis (e.g.: Trivy) on upload and on demand. +- Vulnerability scans: automatic analysis (e.g., Trivy) on upload and on demand. - Policies: tag immutability, retention, security rules. - OCI artifacts: images, Helm charts (OCI), SBOM, signatures. -## Connecting to the Registry (Docker / Podman) +## Connecting to the registry (Docker / Podman) -Prefer a **robot account** attached to the project for CI/CD operations. +Prefer a **robot account** associated with the project for CI/CD operations. ```bash # Docker @@ -48,14 +48,15 @@ docker login podman login ``` -- Username: `` (e.g.: `robot$myproject+pusher`) +- Username: `` (e.g., `robot$monprojet+pusher`) - Password: `` -:::tip[Certificates] -The Harbor instance managed by Cloud Temple presents a publicly trusted certificate. No additional CA configuration is normally required in Docker or Podman. +:::tip[Certificates +] +The Harbor instance managed by Cloud Temple has a recognized public certificate. No additional CA configuration is normally required in Docker or Podman. ::: -## Creating a Project +## Create a project Via the Harbor UI: @@ -63,44 +64,45 @@ Via the Harbor UI: - Name: ``, visibility: Private (recommended) - Options: enable tag immutability, auto-scan on push, etc. -:::info[Best Practices] +:::info[Best practices +] -- One project per application or per functional domain. +- One project per application or functional domain. - Restrict roles (maintainer, developer, guest). - Enable auto-scan and retention policies. ::: -## Pushing an Image +## Push an image Example with Docker: ```bash -# Build locally +# Construire localement docker build -t app-web:1.0.0 . -# Tag to Harbor +# Tag vers Harbor docker tag app-web:1.0.0 //app-web:1.0.0 -# Push +# Pousser docker push //app-web:1.0.0 ``` Recommended organization: -- `/:` (e.g.: `payments/api:2.3.4`) +- `/:` (e.g., `payments/api:2.3.4`) - Tag immutability to prevent overwrites - Semantic tags: `1.2.3`, `1.2`, `latest` (use `latest` with caution) -## Pulling an Image +## Pull an image ```bash docker pull //app-web:1.0.0 ``` -Verify scan results and the signature (if enabled) before promoting to production. +Check the scan results and signature (if enabled) before promotion to prod. -## Using Images in Kubernetes +## Using images in Kubernetes ### 1) Create a pull secret @@ -113,7 +115,7 @@ kubectl create secret docker-registry harbor-pull-secret \ ``` :::tip -The --docker-email parameter is no longer required on recent versions of kubectl (and can be omitted). +The --docker-email parameter is no longer required in recent versions of kubectl (and can be ignored). ::: ### 2) Reference the secret in your workloads @@ -167,7 +169,7 @@ kubectl run pull-check --rm -it --image=//app-web:1.0.0 \ -n --command -- sh -c 'echo OK' ``` -For a promotion to production, prefer using a digest: +For promotion to production, prefer using a digest: ```yaml image: //app-web@sha256: @@ -176,44 +178,45 @@ image: //app-web@sha256: ## Robot Accounts and Permissions - Projects > `` > Robot Accounts > New Robot -- Scopes: limit to the necessary actions (`pull` for runtime, `push` for CI) +- Scopes: limit to necessary actions (`pull` for runtime, `push` for CI) - Expiration: set a duration and a rotation process - Store the token as a secret (Kubernetes/CI) -:::caution[Least Privilege] +:::caution[Least Privilege +] Do not use personal accounts for your pipelines. Prefer one robot per project, or even per environment. ::: -## Vulnerability Scanning +## Vulnerability Scans - Enable "Scan on push" at the project level - Trigger on demand from the UI or API -- Set policies: block pull if severity >= `High` (according to governance) +- Configure policies: block pull if severity >= `High` (according to governance) -You can export reports (JSON) or display the CVEs and affected layers. +You can export reports (JSON) or view the affected CVEs and layers. -## Retention and Immutability +## Retention and immutability -- Retention: keep, for example, the last `N` tags matching a pattern (e.g.: `release-*`) -- Immutability: prevent overwriting existing tags -- Garbage Collection: scheduled by Harbor administration (removes orphan blobs) +- Retention: keep, for example, the last `N` tags matching a pattern (e.g., `release-*`) +- Immutability: prevent rewriting of existing tags +- Garbage Collection: scheduled by Harbor administration (removes orphaned blobs) -These mechanisms reduce storage costs and strengthen traceability. +These mechanisms reduce storage costs and enhance traceability. ## Helm Charts (OCI) -Helm v3.8+ supports OCI natively. +Helm v3.8+ natively supports OCI. ```bash -# Login +# Connexion helm registry login \ --username '' \ --password '' -# Package the chart +# Packaging du chart helm package charts/myapp -# Push the chart +# Push du chart helm push myapp-0.1.0.tgz oci:////charts # Pull / Install @@ -226,10 +229,10 @@ helm install myapp oci:////charts/myapp --version 0.1.0 -n < With `cosign`: ```bash -# Login (if needed to fetch public key in Harbor) +# Login (si nécessaire pour fetch public key dans Harbor) cosign login -# Sign an image (local key or KMS) +# Sign an image (clé locale ou KMS) cosign sign //app-web:1.0.0 # Verify the signature @@ -237,7 +240,7 @@ cosign verify //app-web:1.0.0 ``` :::note -On older versions of cosign, it may be necessary to export COSIGN_EXPERIMENTAL=1. +On older versions of cosign, you may need to export COSIGN_EXPERIMENTAL=1. ::: Harbor can display attestations (signatures, SBOM) and enforce signature policies. @@ -296,22 +299,21 @@ jobs: ## Troubleshooting - `denied: requested access to the resource is denied` - - Check robot account rights on the project and/or repository name + - Check the robot account permissions on the project and/or the repo name - `name unknown` / `manifest unknown` - - Non-existent project, misspelled repo, non-existent tag + - Non-existent project, misspelled repo name, non-existent tag - `x509: certificate signed by unknown authority` - - Update the runner's certificate store (ca-certificates), check for the absence of a TLS-intercepting proxy; add the proxy's CA if necessary and/or sync the system clock -- 401/403 when pulling in Kubernetes - - `imagePullSecrets` secret missing or expired credentials + - Update the runner's certificate store (ca-certificates), verify there is no intercepting TLS proxy; add the proxy's CA if necessary and/or synchronize the system clock +- 401/403 during pull in Kubernetes + - Missing `imagePullSecrets` secret or expired credentials - `413 Request Entity Too Large` - - Image size too large relative to the Ingress/Registry configuration; optimize the image or adjust the config (via Cloud Temple support) - -## Best Practices + - Image size too large relative to the Ingress/Registry configuration; optimize the image or adjust the configuration (via Cloud Temple support) +## Best practices - Private projects by default, dev/preprod/prod separation -- Dedicated robot accounts, regular token rotation +- Dedicated service accounts, regular token rotation - Tag immutability and promotion by digest - Scan policy: severity threshold and documented remediation - Strict retention, scheduled deletion of obsolete artifacts - Logging/auditing: export and retain access/activity logs -- SBOM and signature integration for the software supply chain +- SBOM and signature integration for the supply chain \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingkasten.md b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingkasten.md index 7670058a..bdb943a6 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingkasten.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingkasten.md @@ -1,5 +1,5 @@ --- -title: Backing Up Your Applications with Veeam Kasten +title: Back up your applications with Veeam Kasten --- import k10dashboard from '@site/docs/managed_kubernetes/tutorials/images/k10dashboard.png' @@ -8,56 +8,59 @@ import k10infrabackups from '@site/docs/managed_kubernetes/tutorials/images/k10i ## Introduction -Veeam Kasten K10 is a backup and restore solution designed specifically for Kubernetes environments. In the Cloud Temple Managed Kubernetes service, Kasten is integrated to allow you to protect your applications, restore data when needed, and ensure business continuity. +Veeam Kasten K10 is a backup and restore solution specifically designed for Kubernetes environments. In Cloud Temple's Managed Kubernetes product, Kasten is integrated to allow you to protect your applications, restore data when needed, and ensure business continuity. This tutorial will guide you through the basic steps to back up and restore an application using Kasten. ## Prerequisites -Before you begin, make sure you have the following: +Before you begin, ensure you have the following: - An active Managed Kubernetes cluster. -- Your cluster identifier (for example, `ctodev`). +- Your cluster ID (e.g., `ctodev`). - An application deployed in your cluster that you want to back up. -## 1. Accessing the Kasten Dashboard +## 1. Access the Kasten Dashboard -The Kasten dashboard is accessible via a secure URL, built from your cluster identifier. +The Kasten dashboard is accessible via a secure URL, constructed from your cluster's identifier. -1. **Build the access URL**: - The URL is based on the following template: `https://k10.external-secured..mk.ms-cloud-temple.com/k10/` - Replace `` with your cluster identifier. For example, if your identifier is `ctodev`, the URL will be: `https://k10.external-secured.ctodev.mk.ms-cloud-temple.com/k10/`. +1. **Construct the access URL** : + The URL is based on the following template: `https://k10.external-secured..mk.ms-cloud-temple.com/k10/` + Replace `` with your cluster's identifier. For example, if your identifier is `ctodev`, the URL will be: `https://k10.external-secured.ctodev.mk.ms-cloud-temple.com/k10/`. -2. **Navigate to the URL** in your browser. +2. **Access the URL** in your browser. :::info Security Note - Access to this URL is restricted to the public IP addresses you have declared. If you cannot connect, make sure your IP address is authorized by contacting Cloud Temple support. + Access to this URL is restricted to the public IP addresses you have registered. If you are unable to log in, ensure your IP address is authorized by contacting Cloud Temple support. ::: -:::tip[Built-in Quick Start Guide] -The Kasten console includes an interactive quick start guide on its home page. Feel free to follow it for a first hands-on experience directly from the interface. +:::tip[Built-in Quick Start Guide +] +The Kasten console includes an interactive quick start guide on its home page. Feel free to follow it for a first-time setup directly from the interface. ::: ## 2. Understanding Backup Storage -By default, Kasten is pre-configured to use Cloud Temple's object storage (S3) service to store your backups securely and durably. +By default, Kasten is preconfigured to use Cloud Temple's object storage (S3) service to securely and durably store your backups. -No configuration is required on your part. The storage location is already defined in the Kasten dashboard, under **Settings > Locations**. This configuration ensures that your data is stored on sovereign infrastructure. +No configuration is required. The storage location is already configured in the Kasten dashboard, under **Settings > Locations**. This configuration ensures that your data is stored on a sovereign infrastructure. -:::info[Cost Model] -The Veeam Kasten service is included in the Managed Kubernetes offering. Backup storage on our sovereign S3 is billed on a usage basis. See our pricing grid for more details. +:::info[Pricing Model +] +The Veeam Kasten service is included in the Managed Kubernetes product. Backup storage on our sovereign S3 is billed based on usage. Refer to our pricing table for more details. ::: -## 3. Creating a Backup Policy +## 3. Create a Backup Policy A backup policy (`Policy`) is a set of rules that define when and how to back up your applications. -:::warning[Existing Backup Policy] -A backup policy named `infra-backups` is already configured in your Kasten instance. This policy ensures the backup of the essential components delivered with the cluster. +:::warning[Politique de sauvegarde existante +] +A backup policy named `infra-backups` is already configured in your Kasten instance. This policy backs up the essential components delivered with the cluster. @@ -68,25 +71,25 @@ You must create your own policies to back up the applications you deploy. 1. In the Kasten dashboard, go to the **Policies** section and click **Create New Policy**. -2. **Name your policy**: Give it a descriptive name, for example `backup-my-app-daily`. +2. **Name your policy**: Provide a descriptive name, for example `backup-my-app-daily`. 3. **Define the frequency (Action)**: - - **Action**: `Snapshot`. + - **Action**: `Snapshot` (instantané). - **Frequency**: Choose the frequency that suits you (for example, `Daily` at `02:00`). 4. **Select the resources to back up**: - **Select resources by**: You can select applications by name (`Application Name`), by namespace (`Namespace`), or by labels. - - To back up all applications in a namespace, choose `Namespace` and select the desired namespace. + - To back up all applications in a namespace, select `Namespace` and choose the desired namespace. 5. **Click `Create Policy`** to save. -The policy will run automatically at the defined frequency. You can also trigger a manual run by clicking the "Play" button (▶️) next to the policy. +The policy will run automatically at the defined frequency. You can also trigger a manual run by clicking the "Play" (▶️) button next to the policy. -## 4. Restoring an Application +## 4. Restore an Application -Kasten makes it easy to restore an application to its previous state from a restore point. +Kasten facilitates restoring an application to its previous state from a restore point. -1. In the dashboard, go to the **Applications** section. You will see the list of your applications and their compliance status relative to backup policies. +1. In the dashboard, go to the **Applications** section. You will see the list of your applications and their compliance status with respect to backup policies. 2. **Select the application** you want to restore. @@ -94,21 +97,21 @@ Kasten makes it easy to restore an application to its previous state from a rest The application page displays a list of available restore points. Choose the one you want to use and click **Restore**. 4. **Configure the restore**: - - You can choose to restore to a new namespace or to replace the existing application. For this tutorial, we will replace the existing application. + - You can choose to restore to a new namespace or replace the existing application. For this tutorial, we will replace the existing application. - Click **Restore** to start the process. -Kasten will now restore the application to the state captured in the snapshot. You can follow the progress in the dashboard. +Kasten will now restore the application to the state captured in the snapshot. You can track the progress in the dashboard. ## 5. Backup Security -Protecting your backup data is a priority. Kasten's integration in the Managed Kubernetes offering meets the highest security standards. +Protecting your backup data is a priority. The integration of Kasten into the Managed Kubernetes product adheres to the highest security standards. -- **Encryption**: In accordance with SecNumCloud requirements, all your backups are encrypted. Data is encrypted in transit to S3 storage using the **TLS 1.3** protocol and at rest in storage buckets using the **AES-256** algorithm. +- **Encryption** : In compliance with SecNumCloud requirements, all your backups are encrypted. Data is encrypted in transit to S3 storage using the **TLS 1.3** protocol and at rest in storage buckets using the **AES-256** algorithm. -- **Permission Management**: Access to the Kasten interface and its features is controlled by a permissions system based on Kubernetes RBAC. Only authorized users can create, modify, or execute backup and restore policies, thus ensuring strict governance of your backup operations. +- **Permission Management** : Access to the Kasten interface and its features is controlled by a permissions system based on Kubernetes RBAC. Only authorized users can create, modify, or execute backup and restore policies, ensuring strict governance of your backup operations. ## Conclusion You have learned how to use Veeam Kasten to perform basic backup and restore operations in your Managed Kubernetes cluster. Kasten offers many advanced features, such as application migration between clusters and granular retention policies, which you can explore to strengthen your data protection strategy. -For more information, consult the [official Kasten K10 documentation](https://docs.kasten.io/latest/). +For more information, see the [official Kasten K10 documentation](https://docs.kasten.io/latest/). \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingopencost.md b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingopencost.md index b0b4585f..39ab9d1a 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingopencost.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingopencost.md @@ -1,5 +1,5 @@ --- -title: Tracking Costs with OpenCost +title: Track costs with OpenCost --- import opencostui from '@site/docs/managed_kubernetes/tutorials/images/opencost.png' import opencostgrafana from '@site/docs/managed_kubernetes/tutorials/images/opencostgrafana.png' @@ -17,53 +17,53 @@ This tutorial introduces **OpenCost**, the cost monitoring and optimization tool ## What is OpenCost? -OpenCost is an open-source solution, a CNCF (Cloud Native Computing Foundation) standard, that provides real-time visibility into the costs of your Kubernetes environments. It helps you understand precisely what is consuming resources in your cluster and how that translates into costs. +OpenCost is an open-source solution, a CNCF (Cloud Native Computing Foundation) standard, that provides real-time visibility into the costs of your Kubernetes environments. It helps you understand exactly what is consuming resources in your cluster and how that translates into costs. -In the Managed Kubernetes offering, OpenCost is pre-installed and configured to give you a clear view of your spending. It is directly parameterized with the real costs of Cloud Temple infrastructure. +In the Managed Kubernetes product, OpenCost is pre-installed and configured to give you a clear view of your spending. It is directly configured with the actual costs of the Cloud Temple infrastructure. -## Accessing the OpenCost Interface +## Access the OpenCost interface -The OpenCost interface is exposed on a secure URL specific to your cluster. To access it, use the following URL, replacing `identifier` with your cluster identifier (for example, `ctodev`): +The OpenCost interface is exposed via a secure URL specific to your cluster. To access it, use the following URL by replacing `identifiant` with your cluster's identifier (for example, `ctodev`): -`https://opencost.external-secured.identifier.mk.ms-cloud-temple.com` +`https://opencost.external-secured.identifiant.mk.ms-cloud-temple.com` :::info -Access to this URL is restricted to the IP addresses you have declared to Cloud Temple support. If you cannot access it, please contact support to check the firewall rules. +Access to this URL is restricted to the IP addresses you have provided to Cloud Temple support. If you are unable to access it, please contact support to verify the firewall rules. ::: OpenCost UI -## Exploring the Cost Breakdown (Allocations) +## Explore Cost Allocation (Allocations) -The main and most detailed view of OpenCost is the **Allocations** dashboard. This is where you can visualize your resource consumption in real time. +The main and most detailed view in OpenCost is the **Allocations** dashboard. This is where you can visualize your resource consumption in real time. -This view allows you to break down costs by native Kubernetes concepts. The "Aggregate by" dropdown menu is the main tool for your analysis; it allows you to group costs by: +This view allows you to break down costs by native Kubernetes concepts. The "Aggregate by" dropdown menu is your primary analysis tool, enabling you to group costs by: -- **Namespace**: For a view by environment or by team. +- **Namespace**: To get a view per environment or team. - **Deployment**, **StatefulSet**, etc.: To analyze the cost of a specific application. - **Controller**: For a more technical view. ### Aggregation by Labels -For an even more granular financial analysis, OpenCost can aggregate costs based on **Kubernetes labels**. There is no direct "Label" option in the menu, but OpenCost ingests your labels and allows you to create custom aggregations. For this, a consistent labeling strategy is essential. For example, by using labels such as `team: backend` or `product: api-gateway`, you will be able to analyze costs that precisely correspond to your organization. -For this type of analysis, you need to go through OpenCost's AI integration. +For even more granular financial analysis, OpenCost can aggregate costs based on **Kubernetes labels**. There is no direct "Label" option in the menu, but OpenCost ingests your labels and allows you to create custom aggregations. To do this, a consistent labeling strategy is essential. For example, by using labels such as `team: backend` or `product: api-gateway`, you can analyze costs that precisely match your organization. +For this type of analysis, you must use the OpenCost AI integration. ## Grafana Dashboard -A Grafana dashboard is also available to visualize OpenCost data. This dashboard provides an alternative and complementary view to the OpenCost interface, and it retains the complete history of cost metrics, allowing you to analyze trends over the long term. +A Grafana dashboard is also available to visualize OpenCost data. This dashboard provides an alternative and complementary view to the OpenCost interface, and it retains the complete history of cost metrics, allowing you to analyze long-term trends. OpenCost Grafana Dashboard -## Advanced Usage: Integration with AI (MCP Server) +## Advanced Usage: AI Integration (Serveur MCP) -For advanced users, OpenCost can be queried directly from the Cline conversational assistant (or others) thanks to the **MCP (Multi-purpose Co-processor) servers** system. This allows you to script queries and obtain cost data directly in your conversations. +For advanced users, OpenCost can be directly queried from the Cline conversational assistant (ou autre) using the **MCP (Multi-purpose Co-processor) servers** system. This allows you to script queries and retrieve cost data directly within your conversations. -### 1. Configuring the OpenCost MCP in Cline +### 1. Configuring MCP OpenCost in Cline -To connect Cline to your OpenCost instance, you need to add the following configuration to your `cline_mcp_settings.json` file. This file is usually found in the Cline configuration directory. +To connect Cline to your OpenCost instance, you must add the following configuration to your `cline_mcp_settings.json` file. This file is typically located in Cline's configuration directory. -We recommend creating an MCP server named "opencost-xxxxx" where xxxxx is the name of your managed Kubernetes cluster. -The MCP server URL follows this format: `https://opencost-mcp.external-secured.identifier.mk.ms-cloud-temple.com` +We recommend creating an MCP server named "opencost-xxxxx", where xxxxx is the name of your managed Kubernetes cluster. +The MCP server URL follows the format `https://opencost-mcp.external-secured.identifiant.mk.ms-cloud-temple.com` For example, for the "bestie" cluster: ```json @@ -87,44 +87,45 @@ To generate the `` value from your credentials, use one of the following **For Linux/macOS:** ```bash -echo -n 'finopsadm:YOUR_PASSWORD' | base64 +echo -n 'finopsadm:VOTRE_MOT_DE_PASSE' | base64 ``` **For Windows (PowerShell):** ```powershell -$credentials = [System.Text.Encoding]::UTF8.GetBytes("finopsadm:YOUR_PASSWORD") +$credentials = [System.Text.Encoding]::UTF8.GetBytes("finopsadm:VOTRE_MOT_DE_PASSE") [System.Convert]::ToBase64String($credentials) ``` -Once this file is saved, Cline will automatically load the `opencost-xxxxx` MCP at startup. +Once this file is saved, Cline will automatically load the `opencost-xxxxx` MCP on startup. -### 2. Querying OpenCost with the MCP +### 2. Querying OpenCost with MCP -:::tip[Prerequisites] -To interact with the MCP in natural language, the underlying AI must have access to language models (LLMs), either locally (LMStudio, etc.), or via a connection to public services like GPT-5 or Gemini, or by using our sovereign **[LLM-as-a-Service](pathname:///llmaas/llmaas)** offering. +:::tip[Prerequisites +] +To interact with the MCP in natural language, the underlying AI must have access to language models (LLMs), either locally (LMStudio, etc), or via a connection to public services like GPT-5 or Gemini, or by using our sovereign **[LLM-as-a-Service](pathname:///llmaas/llmaas)** product. ::: -After configuration, you can use LLM tools to perform natural language queries on this MCP server. +After configuration, you can use the LLM tools to perform natural language queries on this MCP server. #### Example -"Use the MCP 'opencost-bestie', and tell me what percentage of cluster costs are not allocated to resources" +"use the MCP "opencost-bestie", and tell me what percentage of the cluster's costs are not allocated to resources" You will get this: -AI opencost response +réponse IA opencost #### Example 2 -"Use the MCP 'opencost-bestie', and list the costs associated with persistent volumes for yesterday" +"use the MCP "opencost-bestie", and list the costs associated with persistent volumes for yesterday" -AI opencost response 2 +opencost AI response 2 #### Example 3 -"Use the MCP opencost-bestie, and tell me what percentage of cluster costs are allocated to the application with the label 'nginx'. (filter of the form filter: 'label:app:frontend')" +"use the opencost-bestie MCP, and tell me what percentage of the cluster costs are allocated to the application with the label "nginx". (filter of the form filter: "label:app:frontend" )" -AI opencost response 3 +opencost AI response 3 ## Conclusion -OpenCost provides you with powerful tools for a detailed, real-time analysis of your Kubernetes cluster costs. By primarily using the **Allocations** view and combining it with a good labeling strategy, you can get a clear view of your spending, aligned both with your technical deployments and your internal organization. Using LLMs and the OpenCost MCP server allows you to go further in exploiting the data. +OpenCost provides you with powerful tools for fine-grained and real-time analysis of your Kubernetes cluster costs. By primarily using the **Allocations** view and combining it with a robust labeling strategy, you can gain a clear overview of your expenses, aligned with both your technical deployments and your internal organization. Leveraging LLMs and the OpenCost MCP server allows you to take data utilization even further. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_mariadb/concepts.md b/i18n/en/docusaurus-plugin-content-docs/current/managed_mariadb/concepts.md index 1410baa3..3d5c1ae1 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/managed_mariadb/concepts.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/managed_mariadb/concepts.md @@ -5,113 +5,111 @@ sidebar_position: 1 # Key Concepts of Managed MariaDB -This section presents the fundamental concepts of our **Managed MariaDB** service. Understanding these principles will help you get the most out of your managed database, aligning its capabilities with your application needs and security requirements. +This section outlines the core concepts of our **Managed MariaDB** service. Understanding these principles will help you get the most out of your managed database by aligning its capabilities with your application requirements and security requirements. ## Sovereignty and SecNumCloud Compliance -At the heart of our offering is **digital sovereignty**. The Managed MariaDB service is entirely hosted on the Cloud Temple infrastructure, qualified **SecNumCloud 3.2** by the ANSSI. +At the core of our product lies **digital sovereignty**. The MariaDB Managed service is fully hosted on the Cloud Temple infrastructure, certified **SecNumCloud 3.2** by ANSSI. -- **100% French hosting**: Your data remains on national territory, protected from extraterritorial laws. -- **Native compliance**: The solution is designed to meet the strictest regulatory requirements (GDPR, HDS, LPM, NIS2, PCI-DSS). -- **Open Source and Reversibility**: By relying on open standards such as MariaDB Community Server and Galera, we guarantee the absence of technological dependency (*vendor lock-in*) and full data portability. +- **100% Hosting in France**: Your data remains on national territory, shielded from extraterritorial laws. +- **Native Compliance**: The solution is designed to meet the strictest regulatory requirements (RGPD, HDS, LPM, NIS2, PCI-DSS). +- **Open Source and Reversibility**: By leveraging open standards such as MariaDB Community Server and Galera, we guarantee freedom from technological dependency (*vendor lock-in*) and complete portability of your data. ## High Availability Architecture: Galera Cluster + MaxScale -For distributed environments, our service relies on **Galera Cluster** to offer high availability without data loss. +For distributed environments, our product relies on **Galera Cluster** to provide high availability without data loss. -- **Synchronous Replication**: Unlike traditional asynchronous replication, each transaction is validated on all cluster nodes *before* being confirmed. This guarantees a **Recovery Point Objective (RPO) of zero**: no validated data can be lost in the event of a failure. -- **Multi-AZ Distribution**: The cluster is spread across three distinct Availability Zones (AZ). The failure of an entire datacenter causes no service interruption or data loss. -- **Automatic Failover**: In the event of an incident on a node, traffic is automatically redirected to healthy nodes, ensuring a **minimal Recovery Time Objective (RTO)**. -- **MaxScale Proxy**: MaxScale is an advanced proxy, router and load balancer for MariaDB. It manages automatic failover in replication, balances requests (writes to primary, reads to replicas via ReadWriteSplit) and offers filters for cache, audit (QLAfilter) or security (RegexFilter). +- **Synchronous Replication** : Unlike traditional asynchronous replication, each transaction is validated across all cluster nodes *before* being confirmed. This ensures a **Recovery Point Objective (RPO) of zero** : no committed data can be lost in the event of a failure. +- **Multi-AZ Distribution** : The cluster is distributed across three distinct Availability Zones (AZ). The failure of an entire datacenter causes no service interruption or data loss. +- **Automatic Failover** : In the event of a node incident, traffic is automatically redirected to healthy nodes, ensuring a **minimal Recovery Time Objective (RTO)**. +- **MaxScale Proxy** : MaxScale is an advanced proxy, router, and load balancer for MariaDB. It handles automatic replication failover, balances queries (writes vers primary, reads vers replicas via ReadWriteSplit), and provides filters for caching, auditing (QLAfilter), or security (RegexFilter). ## Deployment Models -We offer two models to adapt to the criticality of your workloads. +We offer two models to accommodate the criticality of your workloads. ### 1. StandAlone This model deploys a single instance of the MariaDB engine. -- **Use case**: This deployment model is perfectly suited for simple applications, such as CMS, which use only a single endpoint to connect to databases. -- **Resilience**: Although it is a single instance, the underlying storage is replicated across 3 AZs, allowing automatic restart on another AZ in the event of hardware failure. -- **SLA**: 99.9% (outside maintenance windows). +- **Use case**: This deployment model is perfectly suited for simple applications, such as CMSs, which use only a single endpoint to connect to databases. +- **Resilience**: Although it is a single instance, the underlying storage is replicated across 3 AZs, allowing automatic restart on another AZ in case of hardware failure. +- **SLA**: 99.9% (excluding maintenance windows). ### 2. Distributed -This model deploys a **Galera cluster of 3 instances** of the MariaDB engine, supplemented by a **MaxScale** proxy. +This model deploys a **Galera cluster of 3 instances** of the MariaDB engine, complemented by a **MaxScale** proxy. -- **Use case**: This deployment model is perfectly suited for applications with distributed access, such as data or business intelligence applications, which benefit from read-only access without impact on data ingestion. +- **Use Case**: This deployment model is ideally suited for applications with distributed access, such as data or business intelligence applications, which benefit from read-only access without impacting data ingestion. - **Components**: - **3 MariaDB Nodes**: One primary read-write (RW) node and two secondary read-only (RO) nodes. - - **MaxScale Proxy**: An intelligent router that distributes requests. It sends writes to the primary node and distributes reads across all nodes (`ReadWriteSplit`), thus optimising performance. -- **SLA**: 99.9% (outside maintenance windows). + - **MaxScale Proxy**: An intelligent router that distributes queries. It routes writes to the primary node and distributes reads across all nodes (`ReadWriteSplit`), thereby optimizing performance. +- **SLA**: 99.9% (excluding maintenance windows). -> **Important Note**: It is not possible to change the deployment model of an existing cluster (for example, from *StandAlone* to *Distributed*). This operation requires the creation of a new cluster in the desired model, via a restore. +> **Important Note**: It is not possible to change the deployment model of an existing cluster (for example, from *StandAlone* to *Distributed*). This operation requires creating a new cluster in the desired model via a restore. ## Backup and Restoration (PITR) -The protection of your data is ensured by a dual backup strategy. +Your data protection is ensured by a dual backup strategy. -1. **Physical Backup and Point-in-Time Recovery**: - - We perform daily complete physical backups (`mariabackup`) (without service interruption). - - With the **distributed** version, transaction logs (*binary logs*) are continuously archived. This combination allows a PiTR restore up to the moment just before an incident. +1. **Physical Backup and Point-in-Time Recovery** : + - We perform complete daily physical backups (`mariabackup`) (without service interruption). + - With the **distributed** version, transaction logs (*binary logs*) are continuously archived. This combination enables PiTR restoration up to the moment just before an incident. -2. **Logical Backup (`mysqldump`)**: - - Logical exports of databases are also performed. +2. **Logical Backup (`mysqldump`)** : + - Logical exports of the databases are also performed. - They offer fine granularity to restore or export an individual database. -All backups are encrypted at rest and stored on our S3 Object Storage, itself SecNumCloud qualified. +All backups are encrypted at rest and stored on our SecNumCloud-qualified S3 Object Storage. ## Multi-Level Security -Security is integrated at every layer of the service. +Security is integrated into every layer of the service. -- **Network Isolation**: Database instances are **never exposed on the Internet**. Access is exclusively via the client's private network. -- **End-to-end encryption**: - - **In transit**: All connections (client to database and between cluster nodes) are encrypted in TLS 1.3. - - **At rest**: Data on disk (InnoDB tablespaces) and backups are encrypted in AES-256. -- **Access Management**: Authentication is secure (`ed25519` or `sha256_password` plugins), and rights are managed according to the principle of least privilege. +- **Network Isolation**: Database instances are **never exposed to the Internet**. Access is exclusively via the client's private network. +- **End-to-End Encryption**: + - **In transit**: All connections (client to database and between cluster nodes) are encrypted using TLS 1.3. + - **At rest**: Data on disk (InnoDB tablespaces) and backups are encrypted using AES-256. +- **Access Management**: Authentication is secured (using `ed25519` or `sha256_password` plugins), and permissions are managed according to the principle of least privilege. ## Managed Service ("Zero Ops") -The goal of Managed MariaDB is to relieve you of operational complexity. Our teams ensure: +The goal of MariaDB Managed is to offload operational complexity. Our teams handle: - Provisioning and initial configuration. -- Full lifecycle management: minor updates, application of security patches. +- Complete lifecycle management: minor updates, applying security patches. - 24/7 monitoring of the infrastructure and service. -- Management and verification of backups. +- Backup management and verification. -This allows your teams to focus on application development and data exploitation. +This enables your teams to focus on application development and data operations. ## Version Policy & Lifecycle -The MariaDB Foundation publishes versions with long-term support (LTS), which guarantees stability and predictability. Our service relies on these versions to ensure the longevity of your infrastructure. +The MariaDB Foundation releases versions with long-term support (LTS), ensuring stability and predictability. Our service leverages these versions to ensure the long-term viability of your infrastructure. -| Version | Type | Supported until | +| Version | Type | Supported Until | | :--- | :--- | :--- | | **MariaDB 11.4** | LTS | May 2029 | | **MariaDB 11.8** | LTS | June 2028 | -- **Minor updates**: Security patches and bug fixes are applied by our teams in *rolling update* (node by node) to cause no service interruption. -- **Major updates**: Major version upgrades are planned in collaboration with you to align with your schedule. -- **End of support**: We notify you at least 180 days before the end of support of an LTS version to plan the migration to the next version. - -## Instance sizes - -***StandAlone*** and ***Distributed*** instances are available in predefined sizes: - -| Size | vCPU/node | RAM/node | Max Conn | Working Set Max | Total DB Max | -| :-- | :-- | :-- | :-- | :-- | :-- | -| **Micro** | 1 | **2.00 Gi** | **40** | **1-2 GiB** | **2-8 GiB** | -| **Small** | 1 | **4.00 Gi** | **80** | **2-5 GiB** | **8-16 GiB** | -| **Medium** | 2 | **4.00 Gi** | **80** | **2-5 GiB** | **8-16 GiB** | -| **Med-Large**| 2 | **8.00 Gi** | **150** | **4-10 GiB** | **16-32 GiB** | -| **Large** | 4 | **8.00 Gi** | **150** | **4-10 GiB** | **16-32 GiB** | -| **X-Large** | 4 | **16.00 Gi** | **250** | **8-20 GiB** | **32-64 GiB** | -| **2X-Large**| 8 | **16.00 Gi** | **250** | **8-20 GiB** | **32-64 GiB** | -| **3X-Large**| 8 | **32.00 Gi** | **500** | **16-40 GiB** | **64-128 GiB** | -| **4X-Large**| 16 | **32.00 Gi** | **500** | **32-80 GiB** | **128-256 GiB** | -| **5X-Large**| 16 | **64.00 Gi** | **500** | **32-80 GiB** | **128-256 GiB** | -| **6X-Large**| 32 | **128.00 Gi**| **500** | **64-160 GiB** | **256-512 GiB** | - -> **Note**: Storage is provisioned separately and can be increased live (from 2Gi to 512Gi) (but not reduced, except by recreating a new instance). +- **Minor Updates** : Security patches and bug fixes are applied by our teams via *rolling update* (node by node) to ensure zero service interruption. +- **Major Updates** : Major version upgrades are planned in collaboration with you to align with your schedule. +- **End of Support** : We notify you at least 180 days before the end of support for an LTS version to plan the migration to the next version. + +## Instance Sizes + +***StandAlone*** and ***Distributed*** instances are available with predefined sizes: + +| Size | vCPU | Memory | innodb_buffer_pool_size | innodb_buffer_pool_instances | max_allowed_packet | table_open_cache | maxconn | +| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | +| **XS** | 1000m | 4096Mi | 2458M | 2 | 256M | 800 | 80 | +| **S** | 1000m | 8192Mi | 4915M | 4 | 512M | 1600 | 150 | +| **M** | 2000m | 8192Mi | 4915M | 4 | 512M | 1600 | 150 | +| **L** | 2000m | 16384Mi | 9830M | 8 | 1G | 3200 | 250 | +| **XL** | 4000m | 16384Mi | 9830M | 8 | 1G | 3200 | 250 | +| **XXL** | 4000m | 32768Mi | 19660M | 16 | 1G | 6400 | 500 | +| **3XL** | 8000m | 32768Mi | 19660M | 16 | 1G | 6400 | 500 | +| **4XL** | 8000m | 65536Mi | 39320M | 16 | 1G | 10000 | 500 | + + +> **Note**: Storage is provisioned separately and can be scaled up dynamically (from 2Gi to 128Gi) (but not scaled down, except by recreating a new instance.). \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_mariadb/images/Distributed.png b/i18n/en/docusaurus-plugin-content-docs/current/managed_mariadb/images/Distributed.png deleted file mode 100644 index ee4a1e353a2658a16bc1f5124435c901c6cb9349..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72032 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

VwShLNe#3Wqi1Ep5M@G#07mwr^kgWb7IrbRcTu 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%0ApFbHUlp4zL?BR+4PH$q6>=m>6tw4 zTUyG;U|iv}N~da&k(DL4RlotDM9`@O6$yz`RYTAw5*11(+8qz{>(jz~dPn;6;kELq zcKPQM47l#`U@^pk6-{K|GJIP6Pw!M2Jiyn2P*jYh|F5Z#O8)1Yu(-QMEu^u6)^t%c z-~flp*3QUuAy|?J=R|V&*e;#}X?iQHD_rKgdK(dq>KS|PwMa-GA=N{?| zQ2efOlMfoEl#+)>&HQ>qLV}{Is%n3Z#_ia9PWeZCq|A_(6}7(ZEN(aL|2HfDeuua{ z{afCXK1{SOhqrHdYs9T~Wr8!lUDb?hXmU!*w$ob&)CmbtbzZ;!tNr6j^{(!^x3)g?K^DRh?>RV@x5GpFlWBe@1rwLPxxhn~0zi{gu33d9D$aEzXS&~x=^Y0#B zn?Q@p;I%qAn}^CM;^xUgo12?IG+b(HLjaXH?a~bq|EVsp_mikmSf1e3Y1SkY$EHv} zNZo?Ut5bQwgAH#^7{4y?LaR}o4Wyd%Z%Yc|s`)-+BB!i;xjo72xh`CZuZzL3k8*x_5GhQp=ezi94Pf8OfV43>Fs$81MxL%u$TSwzd`^L{Q>s7n2 zK>Z^bGW^3$-j^X77QT))1c+NEgGL!u)v$SaW+by_3i*k9^4=T>60)VUAIyK+a1!%} zzf(@f`iS|~Ej5r{q+XW|GH5WppBAFl@muXmHttE4PR*py4CLoa_5&;kl~Z%!>%zCW z#vpdCLAS|?i~$yIgTIV`CG}^S#S|kt@u>DT z1DX_Hk`%wl2`o+_lxhb=x{wBCm}*?y#uhmf4R;@My;YHd>NJ8xrg(M5fMqwmRHWdE z*+iY=An>(#0N$LvS{Mvz- z{0azoS`ADq$w%^95`gMEplL0TnkER zKT9*dadN?ST8DAIE_9C znH;;O_H)rSOLDgyjLClpFoM1|2u<9VU}GSB^D3B>Z^SCu;4%tdN?zRK0*k6wzZXiA zy|=~wmAEB6He}IlM^^=984L^lT zzc;*Bo2e$zT5q~c(qE~Vo3T4D!9JCrERZ*|+Y{=V!ps#?`R1Ej1BG~1hw2RP#`cgY zv!-1d|IK-g?%v-QB(jylQj>r?nK?pTs=3Ei{?6MfA`I*Llw0Tu`R#N? zq<8qDXdHe=O=D2DrvZ9!I=c_+hy!=Hc=j z@}+u?7h{twbWKDGLLS`Teji;TFN&t~QUIHb8?5<1S$%h1gRP?{m)VXmB}{2y0{G;Y z)$;W>NS~&p? zzwvhQ)eN5o^EUc+Wc-|8?uTKbTTo*l+U1|a4dw2&xtA;@Ul1#&%u^l!R!NgBdrJCT zfZ-Y=8cocsLC=z>5`G&U+*G8KKPUw4=J%8kvicu%w@07*;pr5KNJY(itxOgfFHC2d zPR>)EC&9igLCURvp4zLfr({{;%+ BDS-e0 diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_mariadb/images/StandAlone.png b/i18n/en/docusaurus-plugin-content-docs/current/managed_mariadb/images/StandAlone.png deleted file mode 100644 index b45d0458aaa988c2404e508a15eeb92d3803a869..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42541 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 diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_mariadb/images/stack.png b/i18n/en/docusaurus-plugin-content-docs/current/managed_mariadb/images/stack.png deleted file mode 100644 index e66ea488e66549c99d5e00ba0743278bb2a52456..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8593 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 -# Managed MariaDB (preview)

Concepts

-

Discover the foundations and essential principles to master our infrastructure.

+

Discover the fundamentals and essential principles to master our infrastructure.

Explore concepts →
-

Getting Started

+

Getting Started Guide

Get started quickly by following clear and simple instructions.

Launch Quickstart →
@@ -22,59 +27,60 @@ title: Overview ### Overview > -> This product is in preview, and its documentation may contain errors or approximations. +> This product is in a preliminary version, and its documentation may contain errors or approximations. -**Managed MariaDB (on Kubernetes) by Cloud Temple** is a managed MariaDB database engine solution, hosted on Kubernetes. It complements the managed database engine offerings on virtual machines (referred to here as **Managed MariaDB (on IaaS)**) +**Managed MariaDB (on Kubernetes) by Cloud Temple** is a managed MariaDB database engine solution hosted on Kubernetes. It complements the managed database engine offerings on virtual machines (referred to here as **Managed MariaDB (on IaaS)**) -This offering is suitable for customers with Kubernetes workloads using MariaDB/MySQL databases, or customers who wish to consolidate many MariaDB/PostgreSQL database engines on a single Kubernetes cluster (pooling). It is particularly well-suited for small and medium-sized databases that do not require tuning or specific features. For large databases or those requiring special tuning, it is preferable to opt for the **Managed MariaDB (on IaaS)** offering, which allows more customisation by our DBA expert teams. +This product is suitable for customers running Kubernetes workloads with MariaDB/MySQL databases, or for customers who wish to consolidate multiple MariaDB/PostgreSQL database engines on a single Kubernetes cluster (consolidation). It is particularly well-suited for small and medium-sized databases that do not require tuning or specific features. For large-scale databases or those requiring specific tuning, it is preferable to choose the **Managed MariaDB (on IaaS)** product, which allows for more customization by our DBA expert teams. -MariaDB engines can be chosen in version 11.4 LTS or 11.8 LTS. +MariaDB engines can be selected in version 11.4 LTS or 11.8 LTS. -All backups use Cloud-Temple S3 storage (SNC qualified) with at-rest encryption. +All backups use Cloud-Temple S3 storage (SNC-certified) with at-rest encryption. -![Stack architecture](@site/docs/managed_mariadb/images/stack.png) +![Architecture stack](@site/docs/managed_mariadb/images/stack.png) ### Key Benefits -- **Sovereignty and Reversibility**: The solution relies exclusively on open source standards to avoid any technological dependency and guarantee the portability of your applications. -- **Simplicity and delegation**: The solution allows you to delegate to Cloud-Temple the management of database engines, in particular: updates and backups. +- **Sovereignty and Reversibility** : The solution relies exclusively on open source standards to avoid technological dependency and ensure the portability of your applications. +- **Simplicity and Delegation** : The solution enables delegating to Cloud-Temple the management of database engines, specifically: updates and backups. ## Deployment Models -We offer two deployment models to meet your needs: ***StandAlone*** or ***Distributed***. +We offer two deployment models to meet your needs: ***StandAlone*** or ***Distributed***. ### StandAlone The ***StandAlone*** model deploys a single instance of the MariaDB engine in a multi-AZ infrastructure. -The storage used by this instance is replicated across 3 AZs, and allows automatic restart of the MariaDB instance on another AZ in the event of a failure. +The storage used by this instance is replicated across 3 AZs and allows for automatic restart of the MariaDB instance on another AZ in case of failure. -- **Use case**: This deployment model is perfectly suited for simple applications, such as CMS, which use only a single endpoint to connect to databases. +- **Use case**: This deployment model is perfectly suited for simple applications, such as CMSs, which use only a single endpoint to connect to databases. - **Key points**: - 1 database engine instance - - storage distributed across 3 AZs for automatic recovery in the event of a failure + - storage distributed across 3 AZs for automatic recovery in case of failure - physical (`mariabackup`) and logical (`mysqldump`) backups - - SLA 99.9% (outside maintenance windows) + - 99.9% SLA (excluding maintenance windows) -![StandAlone Architecture](@site/docs/managed_mariadb/images/StandAlone.png) +![Architecture StandAlone](@site/docs/managed_mariadb/images/StandAlone.png) ### Distributed -The ***Distributed*** model deploys a cluster of 3 instances of the MariaDB engine, with Galera in "single primary" mode and MaxScale: +The ***Distributed*** model deploys a cluster of 3 MariaDB engine instances, with Galera in "single primary" mode and MaxScale: -- a MaxScale endpoint allows routing to the different instances depending on the type of request (read or write). +- a MaxScale endpoint enables routing to the different instances based on the query type (read or write). ![MaxScale](@site/docs/managed_mariadb/images/maxscale.png) + - the read-write (RW) instance is accessible via a specific endpoint. - The 2 read-only (RO) instances are accessible via another specific endpoint. -Thus, applications can choose to use RW or RO connections, or let MaxScale route itself to the most appropriate endpoints. +Thus, applications can optionally use RW or RO connections, or let MaxScale automatically route to the most suitable endpoints. -- **Use case**: This deployment model is perfectly suited for applications with distributed access, such as data or business intelligence applications, which benefit from read-only access without impact on data ingestion. -- **Key points**: +- **Use case** : This deployment model is perfectly suited for applications with distributed access, such as data or business intelligence applications, which benefit from read-only access without impacting data ingestion. +- **Key points** : - 3 database engine instances with Galera in "single primary" mode - MaxScale proxy for efficient query routing. - - storage distributed across 3 AZs for automatic recovery in the event of a failure - - PiTR and Logical backups - - SLA 99.9% (outside maintenance windows) + - storage distributed across 3 AZs for automatic failover + - PiTR and logical backups + - SLA 99.9 % (excluding maintenance windows) -![Distributed Architecture](@site/docs/managed_mariadb/images/Distributed.png) +![Architecture Distributed](@site/docs/managed_mariadb/images/Distributed.png) \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_mariadb/quickstart.md b/i18n/en/docusaurus-plugin-content-docs/current/managed_mariadb/quickstart.md index d5ed1ca3..bade57f7 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/managed_mariadb/quickstart.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/managed_mariadb/quickstart.md @@ -1,33 +1,33 @@ ---- -title: Getting Started Guide ---- - -Welcome to the **Managed MariaDB** Cloud Temple getting started guide. - -The goal of this section is to guide you towards the resources needed to get started with your product. - -## Before you begin - -Make sure you have the access credentials provided by Cloud-Temple. - -Make sure that network flows are open to the IPs provided to you. - -## Accessing your Managed MariaDB cluster - -Depending on the deployment model chosen, you have one or more endpoints. - -**StandAlone**: 1 endpoint only (1 IP only), accessible on port 3306. - -**Distributed**: - -- 1 MaxScale Endpoint, accessible on port 3306, capable of distributing your queries to the most appropriate instances (this is the preferred endpoint) -- 1 R/W Endpoint, accessible on port 3306, which points to the primary instance, in read-write mode. -- 1 R/O Endpoint, accessible on port 3306, which points to all instances, in read-only mode. - -## Your permissions - -You have no permissions at the database engine level (neither `SUPER`, nor `ALL_PRIVILEGE`) - -You cannot reconfigure the engine or its options, nor install the performance_schema. - -Requests to add databases, users or grants must be submitted to the Cloud-Temple teams. +--- +title: Getting Started Guide +--- + +Welcome to the **Managed MariaDB** Cloud Temple Getting Started Guide. + +The objective of this section is to guide you to the resources needed to get started with your product. + +## Before you begin + +Ensure you have the access credentials provided by Cloud-Temple. + +Ensure that network traffic is open to the IPs provided to you. + +## Access your Managed MariaDB cluster + +Depending on the chosen deployment model, you have one or more endpoints. + +**StandAlone** : 1 endpoint (1 IP), accessible on port 3306. + +**Distributed** : + +- 1 Maxscale Endpoint, accessible on port 3306, capable of distributing your queries to the most suitable instances (this is the preferred endpoint) +- 1 R/W Endpoint, accessible on port 3306, which points to the primary instance, for read-write access. +- 1 R/O Endpoint, accessible on port 3306, which points to all instances, for read-only access. + +## Your permissions + +You do not have any permissions at the database engine level (neither `SUPER` nor `ALL_PRIVILEGE`). + +You cannot reconfigure the engine or its options, nor install the performance_schema. + +Requests to add databases, users, or grants must be submitted to the Cloud-Temple teams. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_postgresql/concepts.md b/i18n/en/docusaurus-plugin-content-docs/current/managed_postgresql/concepts.md index 754ba38c..7a515b3e 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/managed_postgresql/concepts.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/managed_postgresql/concepts.md @@ -5,113 +5,110 @@ sidebar_position: 1 # Key Concepts of Managed PostgreSQL -This section presents the fundamental concepts of our **Managed PostgreSQL** service. Understanding these principles will help you get the most out of your managed database, aligning its capabilities with your application needs and security requirements. +This section presents the fundamental concepts of our **Managed PostgreSQL** service. Understanding these principles will help you get the most out of your managed database by aligning its capabilities with your application requirements and security standards. ## Sovereignty and SecNumCloud Compliance -At the heart of our offering is **digital sovereignty**. The Managed PostgreSQL service is entirely hosted on the Cloud Temple infrastructure, qualified **SecNumCloud 3.2** by the ANSSI. +At the core of our product lies **digital sovereignty**. The Managed PostgreSQL service is fully hosted on the Cloud Temple infrastructure, certified **SecNumCloud 3.2** by ANSSI. -- **100% French hosting**: Your data remains on national territory, protected from extraterritorial laws. +- **100% France-based hosting**: Your data remains on national territory, shielded from extraterritorial laws. - **Native compliance**: The solution is designed to meet the strictest regulatory requirements (GDPR, HDS, LPM, NIS2, PCI-DSS). -- **Open Source and Reversibility**: By relying on open standards such as PostgreSQL Community Server and Patroni, we guarantee the absence of technological dependency (*vendor lock-in*) and full data portability. +- **Open Source and Reversibility**: By leveraging open standards such as PostgreSQL Community Server and Patroni, we guarantee no technological dependency (*vendor lock-in*) and full portability of your data. ## High Availability Architecture: Patroni Cluster -For distributed environments, our service relies on **Patroni Cluster** to offer high availability without data loss. +For distributed environments, our product relies on **Patroni Cluster** to provide high availability without data loss. -- **Synchronous Replication**: Unlike traditional asynchronous replication, each transaction is validated on all cluster nodes *before* being confirmed. This guarantees a **Recovery Point Objective (RPO) of zero**: no validated data can be lost in the event of a failure. -- **Multi-AZ Distribution**: The cluster is spread across three distinct Availability Zones (AZ). The failure of an entire datacenter causes no service interruption or data loss. -- **Automatic Failover**: In the event of an incident on a node, traffic is automatically redirected to healthy nodes, ensuring a **minimal Recovery Time Objective (RTO)**. +- **Synchronous Replication**: Unlike traditional asynchronous replication, each transaction is committed on all cluster nodes *before* being confirmed. This ensures a **Zero Recovery Point Objective (RPO)**: no committed data can be lost in the event of a failure. +- **Multi-AZ Distribution**: The cluster is distributed across three distinct Availability Zones (AZ). The failure of an entire datacenter results in no service interruption or data loss. +- **Automatic Failover**: In the event of a node failure, traffic is automatically redirected to healthy nodes, ensuring a **minimal Recovery Time Objective (RTO)**. ## Deployment Models -We offer two models to adapt to the criticality of your workloads. +We offer two models to accommodate the criticality of your workloads. ### 1. StandAlone This model deploys a single instance of the PostgreSQL engine. -- **Use case**: This deployment model is perfectly suited for simple applications, such as CMS, which use only a single endpoint to connect to databases. -- **Resilience**: Although it is a single instance, the underlying storage is replicated across 3 AZs, allowing automatic restart on another AZ in the event of hardware failure. -- **SLA**: 99.9% (outside maintenance windows). +- **Use case** : This deployment model is perfectly suited for simple applications, such as CMSs, which use only a single endpoint to connect to databases. +- **Resilience** : Although it is a single instance, the underlying storage is replicated across 3 AZs, allowing automatic restart on another AZ in case of hardware failure. +- **SLA** : 99.9% (excluding maintenance windows). ### 2. Distributed -This model deploys a **Patroni cluster of 3 instances** of the PostgreSQL engine, supplemented by a **PgBouncer** proxy. +This model deploys a **Patroni cluster with 3 instances** of the PostgreSQL engine, complemented by a **PgBouncer** proxy. -- **Use case**: This deployment model is perfectly suited for applications with distributed access, such as data or business intelligence applications, which benefit from read-only access without impact on data ingestion. -- **Components**: - - **3 PostgreSQL Nodes**: One primary read-write (RW) node and two secondary read-only (RO) nodes. - - **PgBouncer Proxy**: An intelligent router that distributes requests. It sends writes to the primary node and distributes reads across secondary nodes (*read/write splitting*), thus optimising performance. -- **SLA**: 99.9% (outside maintenance windows). +- **Use case**: This deployment model is ideally suited for applications with distributed access, such as data or business intelligence applications, which benefit from read-only access without impacting data ingestion. +- **Components** : + - **3 PostgreSQL Nodes** : One primary read-write (RW) node and two secondary read-only (RO) nodes. + - **PgBouncer Proxy** : An intelligent router that distributes queries. It routes writes to the primary node and distributes reads across the secondary nodes (*read/write splitting*), thereby optimizing performance. +- **SLA** : 99.9% (excluding maintenance windows). -> **Important Note**: It is not possible to change the deployment model of an existing cluster (for example, from *StandAlone* to *Distributed*). This operation requires the creation of a new cluster in the desired model, via a PiTR restore. +> **Important Note** : It is not possible to change the deployment model of an existing cluster (for example, from *StandAlone* to *Distributed*). This operation requires creating a new cluster in the desired model, via a PiTR restore. ## Backup and Restoration (PITR) -The protection of your data is ensured by a dual backup strategy. +Your data protection is ensured by a dual backup strategy. 1. **Physical Backup (Point-in-Time Recovery - PITR)**: - - We perform daily complete physical backups with `pg_basebackup` (without service interruption). + - We perform complete daily physical backups using `pg_basebackup` (without service interruption). - Transaction logs (*WAL*) are continuously archived. - - This combination allows a restoration "to the second" up to the moment just before an incident. + - This combination enables restoration to the exact second, up to the moment just before an incident. 2. **Logical Backup (`pg_dump`)**: - - Logical exports of databases are also performed. - - They offer fine granularity to restore or export an individual database. + - Logical exports of the databases are also performed. + - They offer fine-grained control to restore or export an individual database. -All backups are encrypted at rest and stored on our S3 Object Storage, itself SecNumCloud qualified. +All backups are encrypted at rest and stored on our S3 Object Storage, which is itself SecNumCloud certified. ## Multi-Level Security -Security is integrated at every layer of the service. +Security is integrated into every layer of the service. -- **Network Isolation**: Database instances are **never exposed on the Internet**. Access is exclusively via the client's private network. -- **End-to-end encryption**: - - **In transit**: All connections (client to database and between cluster nodes) are encrypted in TLS 1.3. - - **At rest**: Data on disk and backups are encrypted in AES-256. -- **Access Management**: Authentication is secure and rights are managed according to the principle of least privilege. +- **Network Isolation**: Database instances are **never exposed to the Internet**. Access is exclusively via the client's private network. +- **End-to-End Encryption**: + - **In transit**: All connections (client to database and between cluster nodes) are encrypted using TLS 1.3. + - **At rest**: Data on disk and backups are encrypted using AES-256. +- **Access Management**: Authentication is secured and permissions are managed according to the principle of least privilege. ## Managed Service ("Zero Ops") -The goal of Managed PostgreSQL is to relieve you of operational complexity. Our teams ensure: +The objective of Managed PostgreSQL is to offload operational complexity. Our teams handle: - Provisioning and initial configuration. -- Full lifecycle management: minor updates, application of security patches. +- Full lifecycle management: minor updates, security patch application. - 24/7 monitoring of the infrastructure and service. -- Management and verification of backups. +- Backup management and verification. -This allows your teams to focus on application development and data exploitation. +This allows your teams to focus on application development and data operations. ## Version Policy & Lifecycle -The PostgreSQL community publishes versions with long-term support (LTS), which guarantees stability and predictability. Our service relies on these versions to ensure the longevity of your infrastructure. +The PostgreSQL community releases versions with long-term support (LTS), ensuring stability and predictability. Our service relies on these versions to ensure the longevity of your infrastructure. -| Version | Type | Supported until | +| Version | Type | Supported Until | | :--- | :--- | :--- | | **PostgreSQL 15** | LTS | Nov 2027 | | **PostgreSQL 16** | LTS | Nov 2028 | -- **Minor updates**: Security patches and bug fixes are applied by our teams in *rolling update* (node by node) to cause no service interruption. -- **Major updates**: Major version upgrades are planned in collaboration with you to align with your schedule. -- **End of support**: We notify you at least 180 days before the end of support of an LTS version to plan the migration to the next version. - -## Instance sizes - -***StandAlone*** and ***Distributed*** instances are available in predefined sizes: - -| Size | vCPU/node | RAM/node | Max Conn | Working Set Max | Total DB Max | -| :-- | :-- | :-- | :-- | :-- | :-- | -| **Micro** | 1 | **2.00 Gi** | **40** | **1-2 GiB** | **2-8 GiB** | -| **Small** | 1 | **4.00 Gi** | **80** | **2-5 GiB** | **8-16 GiB** | -| **Medium** | 2 | **4.00 Gi** | **80** | **2-5 GiB** | **8-16 GiB** | -| **Med-Large**| 2 | **8.00 Gi** | **150** | **4-10 GiB** | **16-32 GiB** | -| **Large** | 4 | **8.00 Gi** | **150** | **4-10 GiB** | **16-32 GiB** | -| **X-Large** | 4 | **16.00 Gi** | **250** | **8-20 GiB** | **32-64 GiB** | -| **2X-Large**| 8 | **16.00 Gi** | **250** | **8-20 GiB** | **32-64 GiB** | -| **3X-Large**| 8 | **32.00 Gi** | **500** | **16-40 GiB** | **64-128 GiB** | -| **4X-Large**| 16 | **32.00 Gi** | **500** | **32-80 GiB** | **128-256 GiB** | -| **5X-Large**| 16 | **64.00 Gi** | **500** | **32-80 GiB** | **128-256 GiB** | -| **6X-Large**| 32 | **128.00 Gi**| **500** | **64-160 GiB** | **256-512 GiB** | - -> **Note**: Storage is provisioned separately and can be increased live (from 2Gi to 512Gi) (but not reduced, except by recreating a new instance). +- **Minor Updates** : Security patches and bug fixes are applied by our teams via *rolling update* (node by node) to cause no service interruption. +- **Major Updates** : Major version upgrades are planned in collaboration with you to align with your schedule. +- **End of Support** : We notify you at least 180 days before the end of support for an LTS version to plan the migration to the next version. + +## Instance Sizes + +***StandAlone*** and ***Distributed*** instances are available with predefined sizes: + +| Size | vCPU | Memory | innodb_buffer_pool_size | innodb_buffer_pool_instances | max_allowed_packet | table_open_cache | maxconn | +| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | +| **XS** | 1000m | 4096Mi | 2458M | 2 | 256M | 800 | 80 | +| **S** | 1000m | 8192Mi | 4915M | 4 | 512M | 1600 | 150 | +| **M** | 2000m | 8192Mi | 4915M | 4 | 512M | 1600 | 150 | +| **L** | 2000m | 16384Mi | 9830M | 8 | 1G | 3200 | 250 | +| **XL** | 4000m | 16384Mi | 9830M | 8 | 1G | 3200 | 250 | +| **XXL** | 4000m | 32768Mi | 19660M | 16 | 1G | 6400 | 500 | +| **3XL** | 8000m | 32768Mi | 19660M | 16 | 1G | 6400 | 500 | +| **4XL** | 8000m | 65536Mi | 39320M | 16 | 1G | 10000 | 500 | + +> **Note**: Storage is provisioned separately and can be scaled up on the fly (from 2Gi to 128Gi) (but not scaled down, except by recreating a new instance.). \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_postgresql/managed_postgresql.md b/i18n/en/docusaurus-plugin-content-docs/current/managed_postgresql/managed_postgresql.md index d780e5ff..3705e462 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/managed_postgresql/managed_postgresql.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/managed_postgresql/managed_postgresql.md @@ -2,18 +2,18 @@ title: Overview --- -# Managed PostgreSQL (preview) +# Managed PostgreSQL Preview

Concepts

-

Discover the foundations and essential principles to master our infrastructure.

+

Discover the fundamentals and essential principles to master our infrastructure.

Explore concepts →
-

Getting Started

+

Getting Started Guide

Get started quickly by following clear and simple instructions.

- Launch Quickstart → + Launch the Quickstart →
@@ -21,63 +21,63 @@ title: Overview ### Overview > -> This product is in preview, and its documentation may contain errors or approximations. +> This product is in a preliminary version, and its documentation may contain errors or inaccuracies. -**Managed PostgreSQL (on Kubernetes) by Cloud Temple** is a managed PostgreSQL database engine solution, hosted on Kubernetes. It complements the managed database engine offerings on virtual machines (referred to here as **Managed PostgreSQL (on IaaS)**) +**Managed PostgreSQL (on Kubernetes) by Cloud Temple** is a managed PostgreSQL database engine solution hosted on Kubernetes. It complements the managed database engine offerings on virtual machines (referred to here as **Managed PostgreSQL (on IaaS)**) -This offering is suitable for customers with Kubernetes workloads requiring PostgreSQL databases, or customers who wish to consolidate many PostgreSQL database engines on a single Kubernetes cluster (pooling). It is particularly well-suited for small and medium-sized databases that do not require tuning or specific features. For large databases or those requiring special tuning, it is preferable to opt for the **Managed PostgreSQL (on IaaS)** offering, which allows more customisation by our DBA expert teams. +This product is suitable for customers who have Kubernetes workloads requiring PostgreSQL databases, or for customers who wish to consolidate multiple PostgreSQL database engines on a single Kubernetes cluster (consolidation). It is particularly well-suited for small and medium-sized databases that do not require tuning or specific features. For large-scale databases or those requiring specific tuning, it is recommended to choose the **Managed PostgreSQL (on IaaS)** product, which allows for more customization by our DBA expert teams. ### Key Benefits -- **Sovereignty and Reversibility**: The solution relies exclusively on open source standards to avoid any technological dependency and guarantee the portability of your applications. -- **Simplicity and delegation**: The solution allows you to delegate to Cloud-Temple the management of database engines, in particular: updates and backups. +- **Sovereignty and Reversibility** : The solution relies exclusively on open source standards to avoid technological dependency and ensure the portability of your applications. +- **Simplicity and Delegation** : The solution enables delegating to Cloud-Temple the management of database engines, specifically: updates and backups. ## Deployment Models -We offer two deployment models to meet your needs: ***StandAlone*** or ***Distributed***. +We offer two deployment models to meet your needs: ***StandAlone*** or ***Distributed***. ### StandAlone The ***StandAlone*** model deploys a single instance of the PostgreSQL engine in a multi-AZ infrastructure. -The storage used by this instance is replicated across 3 AZs, and allows automatic restart of the PostgreSQL instance on another AZ in the event of a failure. +The storage used by this instance is replicated across 3 AZ, and allows automatic restart of the PostgreSQL instance on another AZ in case of failure. -- **Use case**: This deployment model is perfectly suited for simple applications, such as CMS, which use only a single endpoint to connect to databases. +- **Use case**: This deployment model is perfectly suited for simple applications, such as CMSs, which use only a single endpoint to connect to databases. - **Key points**: - 1 database engine instance - - storage distributed across 3 AZs for automatic recovery in the event of a failure + - storage distributed across 3 AZ for automatic failover in case of failure - physical and logical backups - - SLA 99.9% (outside maintenance windows) + - 99.9% SLA (excluding maintenance windows) ### Distributed -The ***Distributed*** model deploys a cluster of 3 instances of the PostgreSQL engine, with Patroni in "single primary" mode and PgBouncer: +The ***Distributed*** model deploys a cluster of 3 PostgreSQL database engine instances, with Patroni in "single primary" mode and PgBouncer: -- a PgBouncer endpoint allows routing to the different instances depending on the type of request (read or write). +- a PgBouncer endpoint enables routing to the different instances based on the query type (read or write). - the read-write (RW) instance is accessible via a specific endpoint. -- Read-only (RO) instances are accessible via another specific endpoint. +- the read-only (RO) instances are accessible via another specific endpoint. -Thus, applications can choose to use RW or RO connections, or let PgBouncer route itself to the most appropriate endpoints. +Thus, applications can choose to use RW or RO connections, or let PgBouncer automatically route to the most suitable endpoints. -- **Use case**: This deployment model is perfectly suited for applications with distributed access, such as data or business intelligence applications, which benefit from read-only access without impact on data ingestion. +- **Use case**: This deployment model is ideally suited for applications with distributed access, such as data or business intelligence applications, which benefit from read-only access without impacting data ingestion. - **Key points**: - 3 database engine instances with Patroni in "single primary" mode - PgBouncer proxy for efficient query routing. - - storage distributed across 3 AZs for automatic recovery in the event of a failure + - storage distributed across 3 AZs for automatic failover in case of failure - PiTR and Logical backups - - SLA 99.9% (outside maintenance windows) + - SLA 99.9% (excluding maintenance windows) ### Common Features #### Versions -PostgreSQL engines can be chosen from all supported versions (currently 14 to 18) [See "versioning policy" on the official PostgreSQL website](https://www.postgresql.org/support/versioning/) +PostgreSQL engines can be selected from all supported versions (currently 14 to 18) [See the "versioning policy" on the official PostgreSQL website](https://www.postgresql.org/support/versioning/) #### Backup 2 types of backups are implemented: -- Point in Time Restoration (PiTR): daily physical backup of the entire engine and its transaction logs (WAL), allowing the entire server to be restored to a precise earlier date without losing transactions. -- Logical backup (pg_dump): logical database exports, for individual restoration/export per database. +- Point in Time Restoration (PiTR): daily physical backup of the entire engine and its transaction logs (WAL), allowing the entire server to be restored to a specific past date without transaction loss. +- Logical backup (pg_dump): logical exports of databases, for individual restore/export per database. -All backups use Cloud-Temple S3 storage (SNC qualified) with at-rest encryption. +All backups use Cloud-Temple S3 storage (SNC-qualified) with at-rest encryption. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_postgresql/quickstart.md b/i18n/en/docusaurus-plugin-content-docs/current/managed_postgresql/quickstart.md index 6c83a016..65506917 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/managed_postgresql/quickstart.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/managed_postgresql/quickstart.md @@ -1,24 +1,24 @@ ---- -title: Getting Started Guide ---- - -Welcome to the **Managed PostgreSQL** Cloud Temple getting started guide. - -The goal of this section is to guide you towards the resources needed to get started with your product. - ---- - -## Before you begin - -> being written ---- - -## Accessing your Managed PostgreSQL cluster - -> being written ---- - -## Your permissions - -> being written ---- +--- +title: Getting Started Guide +--- + +Welcome to the **Managed PostgreSQL** Cloud Temple Getting Started Guide. + +The goal of this section is to guide you to the resources needed to get started with your product. + +--- + +## Before you begin + +> In progress +--- + +## Access your Managed PostgreSQL cluster + +> Work in progress +--- + +## Your permissions + +> In progress +--- \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managedproducts_overview.md b/i18n/en/docusaurus-plugin-content-docs/current/managedproducts_overview.md index 444142f3..5a2c59b2 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/managedproducts_overview.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/managedproducts_overview.md @@ -4,40 +4,40 @@ title: Overview of Managed Product Offerings ## What is a managed product? -Managed products at Cloud Temple are cloud services fully operated by the provider, allowing customers to focus on their applications without managing the underlying infrastructure. +Managed products at Cloud Temple are fully managed cloud services provided by the vendor, enabling customers to focus on their applications without managing the underlying infrastructure. -These products include solutions such as Managed Kubernetes, Managed MariaDB, Managed PostgreSQL, Managed Firewall, or Managed SOC, where Cloud Temple handles configuration, monitoring, maintenance, and scalability. +These products include solutions such as managed Kubernetes, managed MariaDB, managed PostgreSQL, managed Firewall, or managed SOC, where Cloud Temple handles configuration, monitoring, maintenance, and scalability. -They are built on a sovereign SecNumCloud-qualified infrastructure, with high availability (multi-AZ), automation, and SLA-backed support. +They are built on a SecNumCloud-qualified sovereign infrastructure, featuring high availability (multi-AZ), automation, and SLA support. **Key benefits** -- Operational freedom: Cloud Temple manages the control plane, backups, security, and updates, simplifying orchestration for your deployments. +- Operational offloading: Cloud Temple manages the control plane, backups, security, and updates, simplifying orchestration for your deployments. -- Industry standards: simple, well-known, battle-tested, and open-source products. +- Industry standards: simple, recognized, battle-tested, and open-source products. -## Our managed product portfolio +## Our managed products portfolio -### Managed databases +### Managed Databases -- **Managed MariaDB (on Kubernetes)**: a MariaDB database engine solution that runs "on-top" of our *Managed Kubernetes* / *Managed Core Kubernetes* offerings. [View the page](./managed_mariadb) +- **Managed MariaDB (on Kubernetes)**: a MariaDB database engine solution that runs "on-top" of our *Managed Kubernetes* / *Core Managed Kubernetes* offerings. [See details](./managed_mariadb) -- **Managed PostgreSQL (on Kubernetes)**: a PostgreSQL database engine solution that runs "on-top" of our *Managed Kubernetes* / *Managed Core Kubernetes* offerings. [View the page](./managed_postgresql). +- **Managed PostgreSQL (on Kubernetes)**: a PostgreSQL database engine solution that runs "on-top" of our *Managed Kubernetes* / *Core Managed Kubernetes* offerings. [See details](./managed_postgresql). -- **Managed MongoDB (on Kubernetes)**: a MongoDB database engine solution that runs "on-top" of our *Managed Kubernetes* / *Managed Core Kubernetes* offerings. (documentation in progress) +- **Managed MongoDB (on Kubernetes)**: a MongoDB database engine solution that runs "on-top" of our *Managed Kubernetes* / *Core Managed Kubernetes* offerings. (documentation in progress) -### Data products +### Data Products -- **Managed Kafka (on Kubernetes)**: An Apache Kafka solution with schema registry that runs "on-top" of our *Managed Kubernetes* / *Managed Core Kubernetes* offerings. (documentation in progress) +- **Managed Kafka (on Kubernetes)** : An Apache Kafka solution, with a schema registry that runs "on-top" of our *Managed Kubernetes* / *Core Managed Kubernetes* offerings. (documentation in progress) -- **Managed Airflow**: *coming soon!* +- **Managed Airflow** : *coming soon!* -- **Managed Superset**: *coming soon!* +- **Managed Superset** : *coming soon!* -### Security products +### Security Products -- **Managed KMS**: *coming soon!* +- **Managed KMS** : *coming soon!* -- **Managed SIEM**: *coming soon!* +- **Managed SIEM** : *coming soon!* ---- +--- \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/market_place_public.md b/i18n/en/docusaurus-plugin-content-docs/current/market_place_public.md index 5a22e56f..94b78a82 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/market_place_public.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/market_place_public.md @@ -1,5 +1,5 @@ --- -title: Purchase Platforms +title: Procurement Platforms tags: - ugap - caih @@ -9,10 +9,10 @@ tags: ## Purchase Platforms
-

Are you a public sector actor? The IaaS Cloud Temple offer is accessible via:

+

Are you a public sector organization? The IaaS Cloud Temple product is available via:

- Learn more → + Learn more → -
+
\ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/marketplace/concepts.md b/i18n/en/docusaurus-plugin-content-docs/current/marketplace/concepts.md index e9db9bc4..801d9bde 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/marketplace/concepts.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/marketplace/concepts.md @@ -2,24 +2,28 @@ title: Concepts --- -The **Cloud Temple Marketplace** is a centralized platform that simplifies access to and deployment of ready-to-use cloud solutions in a sovereign and secure environment. +The **Marketplace Cloud Temple** is a centralized platform that facilitates access and deployment of ready-to-use cloud solutions in a sovereign and secure environment. + +--- ## Definition and Positioning -The Cloud Temple Marketplace positions itself as a driver of digital transformation for businesses seeking reliable services, hosted in Europe, with simple and rapid integration. +The Cloud Temple Marketplace positions itself as a digital transformation driver for companies seeking reliable services, hosted in Europe, with simple and fast integration. It enables: -- **Centralizing** access to validated partner solutions -- **Simplifying** the deployment of cloud environments -- **Accelerating** the implementation of digital projects -- **Ensuring** compliance and security of deployments +- **Centralize** access to validated partner solutions +- **Simplify** the deployment of cloud environments +- **Accelerate** the implementation of digital projects +- **Ensure** the compliance and security of deployments + +--- -## Types of solutions available +## Types of available solutions ### Virtual Machine Images -Virtual machine images form the current core of the Marketplace offering. These pre-configured images enable rapid deployment of standardized environments. +Virtual machine images currently form the core of the Marketplace product. These pre-configured images enable rapid deployment of standardized environments. **Features:** @@ -30,39 +34,43 @@ Virtual machine images form the current core of the Marketplace offering. These ### Partner Solutions -The Marketplace also provides access to solutions developed by our partner vendors, covering various business domains. +The Marketplace also provides access to solutions developed by our publisher partners, covering various business domains. **Access Process:** -- Browse the catalog from the console -- Directly connect with the partner -- Deploy on Temple Cloud infrastructure +- Browsing the catalog from the console +- Direct contact with the partner +- Deployment on the Cloud Temple infrastructure -## Integration with the Cloud Temple Ecosystem +--- + +## Integration with the Cloud Temple ecosystem ### Cloud Temple Console -The Marketplace is natively integrated into the Cloud Temple console, offering: +The Marketplace is natively integrated into the Cloud Temple console, providing: -- **Unified access** from your usual management interface -- **Direct deployment** onto existing infrastructures +- **Unified access** from the standard management interface +- **Direct deployment** on existing infrastructures - **Centralized management** of resources and solutions -### Compatibility with Services +### Compatibility with services -The Marketplace solutions are designed to seamlessly integrate with: +Marketplace solutions are designed to integrate seamlessly with: -- **OpenSource IaaS**: Deployment on OpenIaaS infrastructure -- **VMware IaaS**: Integration with the vSphere environment +- **Open Source IaaS** : Deployment on OpenIaaS infrastructure +- **VMware IaaS** : Integration with the vSphere environment + +--- -## Security and Compliance +## Security and compliance ### Sovereign Hosting All solutions deployed via the Marketplace benefit from: -- **Hosting exclusively in France** -- **SecNumCloud certification** of the infrastructure +- **Hosting in France** exclusively +- **SecNumCloud qualification** for the infrastructure ### Solution Validation @@ -70,4 +78,4 @@ The solutions offered in the Marketplace undergo a rigorous selection process en - **Compatibility** with the Cloud Temple infrastructure - **Security** of images and applications -- **Reliability** of publisher partners +- **Reliability** of publisher partners \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/marketplace/marketplace.md b/i18n/en/docusaurus-plugin-content-docs/current/marketplace/marketplace.md index 1993a6cb..a8995175 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/marketplace/marketplace.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/marketplace/marketplace.md @@ -2,11 +2,13 @@ title: Overview --- -The __Cloud Temple Marketplace__ provides simplified access to essential cloud solutions and top software from our partner vendors, deployed with just a few clicks in a secure environment. +# Marketplace -This sovereign platform centralizes ready-to-use cloud solutions, enabling businesses to quickly deploy services tailored to their needs—from infrastructure foundations to advanced business applications. +The __Cloud Temple Marketplace__ provides simplified access to essential cloud solutions and top-tier software from our publisher partners, deployed in just a few clicks within a secure environment. -By collaborating with a network of recognized technology partners, Cloud Temple ensures a rigorous selection of pre-validated, reliable, and compatible products that integrate seamlessly with existing environments. Smooth navigation, detailed product pages, and direct access to vendors streamline decision-making and accelerate deployments within a sovereign and secure framework. +This sovereign platform centralizes ready-to-use Cloud solutions, enabling businesses to rapidly deploy services tailored to their needs, from infrastructure foundations to advanced business applications. + +By collaborating with a network of recognized technology partners, Cloud Temple ensures a rigorous selection of pre-validated, reliable products compatible with existing environments. Smooth navigation, detailed product pages, and direct access to providers streamline decision-making and accelerate deployments within a sovereign and secure framework.
@@ -19,9 +21,9 @@ By collaborating with a network of recognized technology partners, Cloud Temple

Get started quickly with the Marketplace by following clear and simple instructions.

Launch Quickstart →
-
+

Tutorials

-

Learn step by step how to use the Marketplace with detailed guides.

+

Learn step-by-step how to use the Marketplace with detailed guides.

Discover tutorials →
-
+
\ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/marketplace/quickstart.md b/i18n/en/docusaurus-plugin-content-docs/current/marketplace/quickstart.md index 33bc7e47..aa0e64f3 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/marketplace/quickstart.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/marketplace/quickstart.md @@ -6,71 +6,79 @@ import marketplaceSolutionDetails from '@site/docs/marketplace/images/marketplac # QuickStart for the Cloud Temple Marketplace -This page guides you through the initial steps to use the **Cloud Temple Marketplace** from the console. Follow these instructions to explore available solutions and deploy them quickly. +This page guides you through the initial steps to use the **Cloud Temple Marketplace** from the console. Follow these instructions to discover available solutions and deploy them quickly. --- ## Prerequisites -Before you begin, ensure the following points are met: +Before you begin, ensure the following: -1. **Active Subscription**: Your organization must have an active subscription to at least one Cloud Temple service (OpenSource IaaS or VMware IaaS) to enable deployments. During contact with our partners, no specific subscription is required. -2. **User Permissions**: Your user account must have the necessary permissions to access the console and write permissions on target environments when deploying resources. -3. **Target Environment**: Have a tenant configured for solution deployments. +1. **Active subscription**: To enable deployments, your organization must have subscribed to at least one Cloud Temple service (Open Source IaaS or VMware IaaS). When working with our partners, you do not need a specific subscription. +2. **User permissions**: Your user account must have the necessary rights to access the console and write permissions on the target environments when you want to deploy resources there. +3. **Target environment**: Have a tenant configured for solution deployment. -## Access to the Marketplace +--- + +## Marketplace Access ### 1. Access from the Console Once logged into the Cloud Temple console, you can access the Marketplace in several ways: - **Main menu**: A **Marketplace** menu is available in the main navigation -- **Virtual machine pages**: The Marketplace is also accessible from the virtual machine creation pages within OpenIaaS and VMware environments +- **Virtual machine pages**: The Marketplace is also accessible from the virtual machine creation pages in OpenIaaS and VMware environments ### 2. Marketplace Page -The Marketplace page displays a catalog of available solutions. Each solution shows: +The Marketplace page presents a catalog of available solutions. Each solution displays: -- **Name and logo** of the solution -- **Short description** -- **Publisher/Partner** +- **Name and logo** of the solution +- **Short description** +- **Publisher/Partner** - **Solution type** (VM Image, SaaS Solution, etc.) -## Viewing solution details +--- + +## Viewing the details of a solution -### Access to Detailed Information +### Access to detailed information -Clicking on a solution takes you to a details page containing: +By clicking on a solution, you access a details page that includes: -- **Complete description** of the solution -- **Technical specifications** (if applicable) -- **Deployment prerequisites** -- **Documentation** provided by the publisher -- **Available deployment options** +- **Complete description** of the solution +- **Technical specifications** (if applicable) +- **Deployment prerequisites** +- **Documentation** provided by the vendor +- **Available deployment options** +--- + ## Available actions -Depending on the type of solution, different actions are available: +Depending on the solution type, different actions are possible: -### Deploying Virtual Machine Images +### Deploying virtual machine images For solutions compatible with your OpenIaaS or VMware environments, you can deploy directly from the Marketplace. -**Important Note:** Direct deployment is only available for images that list your environment among their compatible targets. +**Important note:** Direct deployment is only available for images that list your environment among their compatible targets. -**Detailed Guides:** +**Detailed guides:** - [How to deploy an image on OpenIaaS?](tutorials/deploy_openiaas) - [How to deploy an image on VMware?](tutorials/deploy_vmware) ### Contact with Partners -For solutions requiring coordination, you can contact the publisher partner directly. +For solutions requiring matchmaking, you can contact the vendor partner directly. **Detailed guide:** - [How to contact a partner?](tutorials/contact_partner) + +--- \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/marketplace/tutorials/contact_partner.md b/i18n/en/docusaurus-plugin-content-docs/current/marketplace/tutorials/contact_partner.md index 6bf610e9..ec41e659 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/marketplace/tutorials/contact_partner.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/marketplace/tutorials/contact_partner.md @@ -5,39 +5,39 @@ import marketplaceContactAccess from '@site/docs/marketplace/images/marketplaceC import marketplaceContactConfirm from '@site/docs/marketplace/images/marketplaceContactConfirm.png' import marketplaceContactEmail from '@site/docs/marketplace/images/marketplaceContactEmail.png' -This tutorial guides you through contacting an editor partner via the Cloud Temple Marketplace. +This tutorial guides you through contacting a publisher partner via the Cloud Temple Marketplace. ## Usage Context Use this feature when: -- The solution requires coordination with the partner -- You want to obtain additional information -- The solution is not directly deployable (no VM image available) +- The solution requires connecting with the partner +- You need additional information +- The solution is not directly deployable (no VM Image) ## Contact Steps -### 1. Access the form +### 1. Form Access -From the detail page of a partner solution, click on **Contact Partner**: +From the partner solution details page, click **Contact the partner** : -### 2. Sending the Request +### 2. Sending the request Validate and send your contact request: -You will receive an email confirmation of the request submission. +You will receive an email confirmation upon submission of your request. -### 3. Connection +### 3. Matching The partner will automatically receive an email with your information: **Example email sent to the partner:** -## Best Practices +## Best practices -- **Be precise** in describing your requirement -- **Specify the intended use context** -- **Mention your technical or regulatory constraints** +- **Be precise** in describing your requirements +- **Specify the intended** use context +- **Mention your technical** or regulatory constraints \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_openiaas.md b/i18n/en/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_openiaas.md index c170b349..628ab8e0 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_openiaas.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_openiaas.md @@ -1,50 +1,60 @@ --- -title: Customize an OpenIaaS Image +title: Customize an OpenIaaS image --- import marketplaceOpenIaasExportTemplate from '@site/docs/marketplace/images/marketplace_openiaas_export_template.png' import marketplaceOpenIaasExportTemplateButton from '@site/docs/marketplace/images/marketplace_openiaas_export_template_button.png' import marketplaceOpeniaasDeployFromTemplate from '@site/docs/marketplace/images/marketplace_openiaas_deploy_from_template.png' -This tutorial explains how to customize a virtual machine image (VMI) provided by OpenIaaS through the Marketplace to create your own reusable templates. +This tutorial explains how to customize an OpenIaaS virtual machine image (VMI) provided by the Marketplace to create your own reusable templates. ### General Principle -The Marketplace provides generic operating systems (OS). Deploying from the Marketplace gives you a clean, quickly and easily deployable base, eliminating the need for manual uploads and accelerating your deployments. +The Marketplace provides generic operating systems (OS). Deploying from the marketplace gives you a solid foundation that can be quickly and easily deployed, avoiding manual uploads and accelerating your deployments. -Once the image is deployed, it becomes a virtual machine that you can configure. You can then export it as a reusable template available to all users within your tenant. +Once the image is deployed, it becomes a virtual machine that you can configure. You can then export it as a reusable template for all users in your tenant. + +--- ## Customization Steps 1. **Deploy the base image** from the Marketplace. -2. **Configure the virtual machine** according to your requirements. +2. **Configure the virtual machine** according to your needs. 3. **Create a template** from the configured virtual machine. -4. **Deploy a new virtual machine** from your customized template. +4. **Deploy a new virtual machine** from your custom template. + +--- ### Step 1: Deploy the base image -Follow the tutorial [Deploy an image on OpenIaaS](deploy_openiaas.md) to get started. +Follow the [Deploy an image on OpenIaaS](./deploy_openiaas.md) tutorial to get started. + +--- ### Step 2: Configure the virtual machine -Once the virtual machine is deployed, configure it according to your needs (software installation, security setup, etc.). +Once the virtual machine is deployed, configure it according to your needs (software installation, security configuration, etc.). + +--- ### Step 3: Create a template from the virtual machine -1. From your list of virtual machines, select the configured virtual machine. +1. From your virtual machines list, select the configured virtual machine. 2. Select **"Export"** from the action bar. -3. Follow the steps in the Console to export the template. +3. Follow the Console steps to export the template. +--- + ### Step 4: Deploy from your new template -You can deploy from the **Catalog** page or from the **Virtual Machines** page. +You can deploy from the "Catalog" page or from the "Virtual Machines" page. To deploy from the **Virtual Machines** page: 1. Click on **"Create a virtual machine"**. -2. Choose **"Deploy from a template"**. +2. Select **"Deploy from a template"**. 3. Select your new template from the list. - + \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_vmware.md b/i18n/en/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_vmware.md index f8210623..73b73323 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_vmware.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_vmware.md @@ -1,5 +1,5 @@ --- -title: Customize a VMware Image +title: Customize a VMware image --- import marketplaceVMwareExportTemplate from '@site/docs/marketplace/images/marketplace_vmware_export_template.png' import marketplaceVMwareExportTemplateButton from '@site/docs/marketplace/images/marketplace_vmware_export_template_button.png' @@ -9,42 +9,52 @@ This tutorial explains how to customize a VMware virtual machine image (VMI) pro ### General Principle -The Marketplace provides generic operating systems (OS). Deploying from the Marketplace gives you a clean, quickly and easily deployable base, eliminating the need for manual uploads and accelerating your deployments. +The Marketplace provides generic operating systems (OS). Deploying from the marketplace gives you a solid foundation that can be quickly and easily deployed, avoiding manual uploads and accelerating your deployments. -Once the image is deployed, it becomes a virtual machine that you can configure. You can then export it as a reusable template available to all users within your tenant. +Once the image is deployed, it becomes a virtual machine that you can configure. You can then export it as a reusable template for all users in your tenant. + +--- ## Customization Steps 1. **Deploy the base image** from the Marketplace. -2. **Configure the virtual machine** according to your requirements. +2. **Configure the virtual machine** according to your needs. 3. **Create a template** from the configured virtual machine. -4. **Deploy a new virtual machine** from your customized template. +4. **Deploy a new virtual machine** from your custom template. + +--- ### Step 1: Deploy the base image -Follow the [Deploy an image on VMware](deploy_vmware.md) tutorial to get started. +Follow the [Deploy an image on VMware](./deploy_vmware.md) tutorial to get started. + +--- ### Step 2: Configure the virtual machine Once the virtual machine is deployed, configure it according to your needs (software installation, security configuration, etc.). +--- + ### Step 3: Create a template from the virtual machine -1. From your list of virtual machines, select the configured virtual machine. +1. From your virtual machines list, select the configured virtual machine. 2. Select **"Export"** from the action bar. -3. Follow the steps in the Console to export the template. +3. Follow the Console steps to export the template. +--- + ### Step 4: Deploy from your new template -You can deploy from the **Catalog** page or from the **Virtual Machines** page. +You can deploy from the "Catalog" page or from the "Virtual Machines" page. To deploy from the **Virtual Machines** page: -1. Click on **"Create a virtual machine"**. -2. Choose **"Deploy from a template"**. +1. Click **"Create a virtual machine"**. +2. Select **"Deploy from a template"**. 3. Select your new template from the list. - + \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_openiaas.md b/i18n/en/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_openiaas.md index 5d71dfc0..57bdfaa7 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_openiaas.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_openiaas.md @@ -8,29 +8,29 @@ This tutorial guides you through deploying a virtual machine image from the Clou ## Prerequisites -- Have an OpenIaaS environment configured +- Have a configured OpenIaaS environment - Have permissions to create virtual machines -- The image must have **OpenIaaS** in its list of compatible targets +- The image must have **OpenIaaS** in its compatible targets ## Deployment Steps -### 1. Selection and Deployment +### 1. Selection and deployment -From the detail page of a compatible OpenIaaS solution, select your target environment and click **Deploy**: +From the details page of an OpenIaaS-compatible solution, select your target environment and click **Deploy** : ### 2. Virtual Machine Configuration -Set up the basic parameters of your virtual machine: +Configure the basic settings of your virtual machine: -- **VM Name** +- **Name** of the VM - **Resources** (CPU, RAM) - **Storage** - **Network** -Deployment typically takes less than 10 minutes, depending on the image size. +Deployment typically takes less than 10 minutes depending on the image size. ## Alternative Access @@ -38,11 +38,11 @@ You can also access Marketplace images directly from the **Virtual Machines** pa 1. Go to **Virtual Machines** > **Create a VM** 2. Select **Marketplace Images** in the source options -3. Choose your solution from the integrated catalog +3. Choose your solution from the built-in catalog ## Deployment Tracking -Once the deployment is initiated: +Once the deployment is launched: -- Monitor the progress from the OpenIaaS console -- The VM will appear in your list of virtual machines +- Track progress from the OpenIaaS console +- The VM will appear in your virtual machines list \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_vmware.md b/i18n/en/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_vmware.md index d4996cae..0692a5a0 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_vmware.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_vmware.md @@ -10,39 +10,39 @@ This tutorial guides you through deploying a virtual machine image from the Clou - Have a configured VMware environment - Have permissions to create virtual machines -- The image must have **VMware** in its list of compatible targets +- The image must have **VMware** in its compatible targets ## Deployment Steps -### 1. Selection and Deployment +### 1. Selection and deployment -From the detail page of a compatible VMware solution, select your target environment and click **Deploy**: +From the details page of a VMware-compatible solution, select your target environment and click **Deploy** : ### 2. Virtual Machine Configuration -Set up the basic parameters of your virtual machine: +Configure the basic settings of your virtual machine: -- **VM Name** +- **Name** of the VM - **Resources** (CPU, RAM) - **Storage** - **Network** -Deployment typically takes less than 10 minutes, depending on the image size. +Deployment typically takes less than 10 minutes depending on the image size. ## Alternative Access You can also access Marketplace templates directly from the VMware interface: -1. Go to **vSphere** > **Deploy a VM** -2. Select **Marketplace Template** as the source +1. Navigate to **vSphere** > **Deploy a VM** +2. Select **Template Marketplace** as the source 3. Browse the available images in the built-in catalog ## Deployment Tracking -Once the deployment is initiated: +Once the deployment has started: -- Monitor progress from the VMware console -- The VM will appear in your vSphere inventory +- Track progress from the VMware console +- The VM will appear in your vSphere inventory \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/network/internet/advanced_concepts.md b/i18n/en/docusaurus-plugin-content-docs/current/network/internet/advanced_concepts.md index 8ecc7512..75e4de04 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/network/internet/advanced_concepts.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/network/internet/advanced_concepts.md @@ -8,27 +8,27 @@ This page presents the advanced BGP routing features available on the Cloud Temp ## BGP Communities -Cloud Temple offers a variety of BGP communities to control the path selection used by your traffic. +Cloud Temple offers a variety of BGP communities to control the path selection for your traffic. -### What is a BGP Community? +### What is a BGP community? BGP communities are optional attributes that can be attached to BGP routes to mark, filter, or influence routing. ### Actions on Local Preference -The following BGP communities allow you to modify the **local preference** of your prefixes, thereby influencing the path selection toward the machine announcing the prefix within AS33930. +The following BGP communities allow you to modify the **local preference** of your prefixes, thereby influencing the path selection toward the device announcing the prefix within AS33930. -You can adjust the local preference of a prefix within the Cloud Temple Internet backbone in AS 33930 by using the following communities: +You can modify the local preference of a prefix within the Cloud Temple Internet backbone in AS 33930 using the following communities: | BGP Community | Priority | Local Preference | -|:--------------|:---------|:----------------:| +|:---------------|:------------|:----------------:| | 33930:40010 | Low priority | 10 | -| *Default* | Cloud Temple Backbone (default) | 100 | +| *Default* | Cloud Temple backbone (default) | 100 | | 33930:40150 | Medium priority | 150 | | 33930:40200 | High priority | 200 | -| 33930:40250 | Maximum priority | 250 | +| 33930:40250 | Maximum priority | 250 | -**Note:** The higher the local preference value, the more preferred the path is in BGP routing decisions. By default, without a specific community, your prefixes use the standard local preference of 100. +**Note :** The higher the local preference value, the more preferred the path is in BGP routing decisions. By default, without a specific community, your prefixes use the standard local preference of 100. ## Configuration @@ -37,25 +37,25 @@ To apply a BGP community to your announcements: 1. Define a policy that tags the prefix with the community 2. Apply this policy to the BGP session with Cloud Temple route servers -### Example configuration (bird) +### Configuration example (bird) ```junos # Define a policy that tags the prefix with the community filter p_bkb_rs_001_export { - if net ~ [203.0.113.0/32] - then { - bgp_community.add((33930, 40250)); - accept; - } - if net ~ [203.0.113.1/32] - then { - accept; - } - else reject; +if net ~ [203.0.113.0/32] + then { + bgp_community.add((33930,40250)); + accept; + } +if net ~ [203.0.113.1/32] + then { + accept; + } +else reject; } # Apply this policy to the BGP session with Cloud Temple route servers -protocol bgp p_bkb_rs_001 { +protocol bgp p_bkb_rs_001 { local 100.64.3.226 as 65551; neighbor 100.64.0.1 as 33930; multihop; @@ -67,4 +67,4 @@ protocol bgp p_bkb_rs_001 { } ``` -The prefix 203.0.113.0/32 will be advertised with a **local preference of 250**, and the prefix 203.0.113.1/32 will be advertised with a **local preference of 100** (default) within AS33930. +The 203.0.113.0/32 prefix will be advertised with a **local preference of 250** and the 203.0.113.1/32 prefix will be advertised with a **local preference of 100** (par défaut) within AS33930. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/network/internet/concepts.md b/i18n/en/docusaurus-plugin-content-docs/current/network/internet/concepts.md index f6d1bc86..8c25fa16 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/network/internet/concepts.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/network/internet/concepts.md @@ -4,116 +4,116 @@ title: Concepts ## CloudTemple Internet Infrastructure -CloudTemple operates as a **Cloud Service Provider (CSP)** with an independent, highly resilient, and secure Internet infrastructure. Our operator-grade connectivity is built upon a dedicated Autonomous System Number (ASN), granting us full control over routing and ensuring high availability for all our services. +CloudTemple operates as a **Cloud Service Provider (CSP)** with its own autonomous Internet infrastructure, highly resilient and secure. Our carrier-grade connectivity relies on our own AS number, which provides us with complete routing control and guarantees high availability for all our services. -This autonomous infrastructure enables us to offer advanced Internet connectivity, tailored to all CloudTemple service offerings—from dedicated hosting to IaaS solutions and PaaS services. +This autonomous infrastructure enables us to offer Internet connectivity with advanced features, tailored to all types of CloudTemple offerings, from dedicated hosting to IaaS solutions and PaaS services. -## Network Architecture and Redundancy +## Network architecture and redundancy -Our network features a redundant architecture designed to optimize performance and ensure continuous service availability. CloudTemple operates an independent, self-contained system with a dedicated set of public IP prefixes, enabling direct global connectivity. +Our network benefits from a redundant architecture designed to optimize performance and ensure service continuity. CloudTemple operates an independent autonomous system with a set of assigned public IP prefixes, ensuring direct global connectivity. -This connectivity is built on **two distinct paths** to maximize resilience: +This connectivity relies on **two distinct paths** to maximize resilience : -**Transit Connectivity:** Two primary transit providers ensure global redundancy, enabling optimal routing of Internet traffic toward our infrastructure. +**Transit connectivity :** Two primary transit operators ensure global redundancy, enabling optimal routing of Internet traffic to our infrastructure. -**Internet Exchange Points (IXPs):** Our presence at two Internet Exchange Points (IXPs) in Paris significantly reduces latency for European users while enhancing regional service performance. This approach also provides natural redundancy against provider outages. +**Exchange points :** Our presence at two Internet Exchange Points (IXP) in Paris allows us to significantly reduce latency for European users while improving regional service performance. This approach also guarantees natural redundancy against provider outages. -The use of the BGP4 protocol ensures efficient routing of your Internet traffic to the active gateway of your architecture, particularly in multi-zone availability deployment scenarios—such as firewall clusters distributed across two availability zones. +The use of the BGP4 protocol ensures efficient routing of your Internet traffic to the active gateway of your architecture, particularly in multi-availability zone deployment scenarios, as is the case with firewall clusters distributed across two availability zones. -## Built-in DDoS Protection +## Integrated anti-DDoS protection -All incoming traffic to the CloudTemple infrastructure benefits from advanced DDoS protection provided by **F5**, a global leader in network security. This protection operates transparently and automatically. +All incoming traffic to the CloudTemple infrastructure benefits from advanced anti-DDoS protection, provided by **F5**, a global leader in network security. This protection operates seamlessly and automatically. -Volumetric attacks are detected and mitigated directly at the F5 network edge, well before reaching the CloudTemple network. This upstream filtering ensures that no traffic saturation can impact our Internet connections, and only legitimate requests reach our infrastructure. +Volumetric attacks are detected and mitigated directly at the F5 network edge, before even reaching the CloudTemple network. This upstream filtering ensures that no saturation can affect our Internet connections, and only legitimate requests reach our infrastructure. -**All CloudTemple services** are protected at no additional cost, including customer prefixes that can be migrated to our infrastructure. This integrated approach transforms a security requirement into an operational advantage for our customers. +**All CloudTemple services** benefit from this protection at no additional cost, including customer prefixes that can be migrated to our infrastructure. This integrated approach transforms a security constraint into an operational advantage for our customers. -## Public IP Address Assignment +## Public IP Address Allocation -CloudTemple offers a flexible Public IP address assignment system based on Provider Aggregated (PA) addresses, allowing clients to reserve public IP addresses **one at a time** according to their specific requirements. +CloudTemple offers a flexible Public Provider Aggregated (PA) IP address allocation system, allowing customers to reserve public IP addresses **individually** according to their specific needs. -### Reservation Process +### IP Reservation Process -Reserving public IP addresses is done directly through the CloudTemple console, providing self-service and immediate management: +Public IP address reservation is performed directly through the CloudTemple console, providing self-service and immediate management: -**Via the console API:** Integration possible within your automation and provisioning workflows. +**Via the console API:** Can be integrated into your automation and provisioning workflows. **Via the web console:** Intuitive interface accessible from the *Internet* section of your client area. -The reservation process follows these simple steps: log in to the console, navigate to *Internet* > *Manage IP Addresses*, select *Reserve a new address*, choose between IPv4 or IPv6, then confirm the request. +The reservation process follows these simple steps: log in to the console, navigate to *Internet* > *Manage IP addresses*, select *Reserve a new address*, choose between IPv4 or IPv6, and then validate the order. ### Billing -Billing for public IP addresses is based on unit of work (UoW) and starts as soon as the IP address is reserved, ensuring full cost transparency. +Public IP address billing is charged per unit of work (UoW) and begins as soon as the address is reserved, ensuring complete cost transparency. | Reference | Unit | SKU | -|-----------|------|-----| +|-----------|-------|-----| | Network - Dedicated Public IPv4 | 1 IPv4 | RSIP-IP4-UNIT | | Network - Dedicated Public IPv6 | 1 IPv6 | RSIP-IP6-UNIT | ## IPv4 Blocks -IPv4 addresses are delivered **within available stock limits** for our customers, per IP address. +IPv4 provisioning is subject to **available stock limits** for our customers, per IP address. -To order IPv4 addresses, go to the ***'Public IPs'*** menu under Networks in the green sidebar on the left, and click the ***"Order IPv4 addresses or IPv6 prefixes"*** button. +IPv4 address orders are placed from the ***'Public IPs'*** menu under the Networks menu in the green sidebar on the left, via the ***"Order IPv4 addresses or IPv6 prefixes"*** button. -You can also view the address blocks assigned to you within the same menu. +You can view the address blocks assigned to you in this same menu. -| Reference | Unit | SKU | -| ----------------------------- | ------ | ---------------------------- | -| Public IPv4 Network | IPv4/32 | csp:(region):network:ipv4:v2 | +| Reference | Unit | SKU | +| ----------------------------- | ----- | ---------------------------- | +| Dedicated Public IPv4 Network | IPv4/32 | csp:(region):network:ipv4:v2 | ## IPv6 Blocks -IPv6 prefix allocation is performed from the ***'Public IPs'*** menu under Networks in the green sidebar, using the ***"Order IPv4 addresses or IPv6 prefixes"*** button. +IPv6 prefix ordering is performed from the ***'Public IPs'*** menu in the Networks menu in the green left sidebar, via the ***"Order IPv4 addresses or IPv6 prefixes"*** button. -You can also view the prefixes assigned to you within the same menu. +You can view the prefixes assigned to you in this same menu. -| Reference | Unit | SKU | +| Reference | Unit | SKU | | ------------------------------------- | ------- | ---------------------------- | -| Network - Dedicated Public IPv6 Range | IPv6/48 | csp:(region):network:ipv6:v1 | +| Network - Dedicated Public IPv6 Ranges | IPv6/48 | csp:(region):network:ipv6:v1 | -## Client IP Prefix Migration +## Customer IP Prefix Migration -CloudTemple supports clients wishing to migrate their own IP prefixes to our infrastructure, facilitating migration projects while preserving existing network identity. +CloudTemple assists customers who wish to migrate their own IP prefixes to our infrastructure, thereby facilitating migration projects while preserving the existing network identity. -### Benefits of Migration +### Migration Benefits -This approach allows you to retain your IP identity when migrating to CloudTemple, ensuring seamless continuity for your applications and clients. You maintain full control over the use of your IP addresses while benefiting from CloudTemple's infrastructure. +This approach allows you to retain your IP address during migration to CloudTemple, ensuring seamless continuity for your applications and clients. You maintain full control over the use of your IP addresses while benefiting from the CloudTemple infrastructure. ### Integration Process -Your IP prefix (for example `203.0.113.0/24`) is integrated into the CloudTemple backbone network and advertised from our AS. Once integrated, the prefix can be freely assigned to your virtual machines, load balancers, or other services. +Your IP prefix (e.g., `203.0.113.0/24`) is integrated into the CloudTemple backbone network and announced from our AS. Once integrated, the prefix can be freely associated with your virtual machines, load balancers, or other services. -**All addresses within the migrated prefix automatically benefit from F5 anti-DDoS protection**, with no additional configuration or extra cost. +**All addresses in the migrated prefix automatically benefit from F5 anti-DDoS protection**, with no additional configuration or extra cost. -### Requirements +### Prerequisites -IP prefix migration requires that the prefix be registered with a recognized Internet registry (ARIN, RIPE, APNIC, etc.) and that you are its legitimate owner. BGP management can be handled by your own team or supported by CloudTemple's technical team, according to your preferences. +IP prefix migration requires that the prefix be registered in a recognized Internet registry (ARIN, RIPE, APNIC, etc.) and that you are the legitimate owner. BGP management can be handled by your teams or take advantage of CloudTemple technical support, depending on your preferences. -## Reserved Internet Bandwidth +## Internet Bandwidth Reservation -Internet bandwidth is reserved in increments of 100 Mbps. The maximum available capacity for a gateway is 10 Gbps, potentially limited by the technical specifications of your gateway. +Internet bandwidth can be reserved in increments of 100 Mbps. The maximum capacity available for a gateway is 10 Gbps, potentially limited by your gateway's technical specifications. -Billing is based on the 95th percentile over the billing period, typically one month. You may therefore occasionally benefit from bursts exceeding your reserved capacity. +Billing is calculated based on the 95th percentile over the billing period, usually one month. This allows you to occasionally burst beyond your reserved capacity. | Reference | Unit | SKU | | ----------------------------------------- | -------- | --------------------------------------- | -| Network - Reserved Internet Bandwidth | 100 Mbps | csp:(region):network:trafic:internet:v1 | +| Network - Reserved internet bandwidth | 100 Mbps | csp:(region):network:trafic:internet:v1 | ***Note:*** -*There is no **volume-based billing** of the type **'egress fees'**. You are charged only for the bandwidth reservation.__* +*There is no **volumetric billing** of the **'egress fees'** type. You only pay for the bandwidth reservation.* -## Availability by Offer +## Availability by Product -All of these Internet connectivity features are available across all CloudTemple offers, ensuring a consistent experience regardless of the service type used. +All of these Internet connectivity features are available on all CloudTemple offerings, ensuring a consistent experience regardless of the service type used. -| Offer | Internet Connectivity | DDoS Protection | RSIP Management | Prefix Migration | +| Offering | Internet Connectivity | DDoS Protection | RSIP Management | Prefix Migration | |-------|----------------------|------------------|---------------|-------------------| | Dedicated Hosting | ✓ | ✓ | ✓ | ✓ | | Shared Hosting | ✓ | ✓ | ✓ | ✓ | -| IaaS VMware | ✓ | ✓ | ✓ | ✓ | -| IaaS OpenSource | ✓ | ✓ | ✓ | ✓ | -| PaaS OpenShift | ✓ | ✓ | ✓ | ✓ | +| VMware IaaS | ✓ | ✓ | ✓ | ✓ | +| OpenSource IaaS | ✓ | ✓ | ✓ | ✓ | +| OpenShift PaaS | ✓ | ✓ | ✓ | ✓ | -This unified approach ensures that all our customers benefit from high-quality carrier-grade Internet access, built-in security, and advanced features, regardless of their technology choice. +This unified approach ensures that all our customers benefit from carrier-grade Internet access, with integrated security and advanced features, regardless of their technology choice. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/network/internet/internet.md b/i18n/en/docusaurus-plugin-content-docs/current/network/internet/internet.md index e345dc8c..4129fa95 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/network/internet/internet.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/network/internet/internet.md @@ -2,13 +2,15 @@ title: Overview --- -Cloud Temple provides its customers with blocks of __public IP addresses__ of at least 1 IPv4 or 64 IPv6, registered with the RIPE, to enable your Internet connectivity. +# Internet + +Cloud Temple provides its clients with blocks of __public IP addresses__ of at least 1 IPv4, or 64 IPv6, registered with RIPE, to enable your Internet connectivity.

Concepts

-

Discover the basics and essential principles to understand and master our infrastructure.

- Explore the concepts → +

Discover the fundamentals and essential principles to understand and master our infrastructure.

+ Explore concepts →

Quickstart

@@ -18,6 +20,6 @@ Cloud Temple provides its customers with blocks of __public IP addresses__ of at

Tutorials

Learn step by step how to configure and use our services with detailed guides.

- Discover the tutorials → + Discover tutorials →
-
+
\ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/network/internet/tutorials/pfSense.md b/i18n/en/docusaurus-plugin-content-docs/current/network/internet/tutorials/pfSense.md index 437768ad..b408c76a 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/network/internet/tutorials/pfSense.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/network/internet/tutorials/pfSense.md @@ -1,5 +1,5 @@ --- -title: Deploy an open source pfSense firewall +title: Deploy an open-source pfSense firewall tags: - internet - tutorials @@ -16,117 +16,117 @@ import routeServerNeighbor from '@site/docs/network/internet/images/route_server import neighborsOverview from '@site/docs/network/internet/images/neighbors_overview.png'; import pfSenseBgpStatus from '@site/docs/network/internet/images/pfsense_bgp_status.png'; -This guide will help you deploy your __open source pfSense firewall__ in the Cloud of Trust in just a few minutes. +This guide will help you deploy your __open-source pfSense firewall__ in the Trusted Cloud in just a few minutes. ## Prerequisites The prerequisites for this guide are as follows: -1. Have subscribed to the Cloud Temple offering: you must have your organization, tenant, and access credentials, +1. Have subscribed to the Cloud Temple product: you must have your organization, tenant, and access credentials, 2. Have permissions on the compute module. -This document describes the steps required to deploy a virtual pfSense firewall. +This document describes the steps to follow to deploy a pfSense virtual firewall. -## Deploy an open source pfSense firewall +## Deploy an open-source pfSense firewall -[pfSense](https://www.pfsense.org) is an open source project based on FreeBSD that enables the deployment of a virtual firewall. +[pfSense](https://www.pfsense.org) is an open source project based on FreeBSD that allows you to set up a virtual firewall. -A pfSense firewall is managed via a web interface, so you need a second machine with a graphical interface that has an IP address within the same LAN network as the firewall in order to configure it. +A pfSense firewall is administered via a web interface, so you need a second machine +with a graphical interface and an IP address in the same LAN network as the firewall to configure it. -We will need a pair of virtual machines: +We will need a set of two VMs: -- The first one will be the machine where we deploy the firewall. -- The second one will be the machine from which we will administer the firewall. +- the first will be the machine on which we will deploy the firewall +- the second will be the machine from which we will administer the firewall. -### Request an Internet Access Delivery +### Request internet access delivery -The first step is to retrieve [your internet access information here](https://docs.cloud-temple.com/network/internet/quickstart#gestion-de-vos-connectivites-internet). -You must have the following information: +The first step is to retrieve [the internet access information here](https://docs.cloud-temple.com/network/internet/quickstart#gestion-de-vos-connectivites-internet). + You must have the following information: -- public prefix -- interconnection prefix -- any-cast gateway -- IP range -- local AS -- Cloud Temple AS -- keepalive timers and hold-time timer +- public prefix +- interconnection prefix +- anycast gateway +- IP range +- local AS +- Cloud Temple AS +- keepalive timers and hold-time timer - route server addresses -### Network Interface Installation and Configuration +### Network interface installation and configuration You can then deploy your pfSense VM: -1. __Install the firewall__ from the pfSense template in Console: - - [(Deploy via Console)](../../../iaas_vmware/tutorials/deploy_vm_template) +1. __Firewall installation__ from the pfSense template in Console: + - [(Deploy via console)](../../../iaas_vmware/tutorials/deploy_vm_template) - [(Deploy via Terraform)](../../../iaas_vmware/tutorials/deploy_vm_terraform). -2. __Configure the LAN and WAN interfaces__ of the firewall: the WAN interface must be in your internet VLAN, with its IP address assigned from the IP range provided by the CDS, along with the default gateway. -3. __Deploy the second management machine__. -4. __Configure the interface__ of the management VM: this machine must be on the same network as the one where the firewall's LAN interface was configured. +2. __Configuration of the LAN and WAN interfaces__ of the firewall: the WAN interface must be in your internet vLAN, its IP will be assigned from the IP range communicated to you by the CDS, as well as the default GW. +3. __Installation of the second machine__ for management. +4. __Interface configuration__ of the management VM: this machine must be in the same network as the one in which the firewall's LAN interface was configured. -### Accessing the Firewall +### Firewall Access -Once both VMs are properly installed, the next step is to access the firewall to begin its configuration. +Once both VMs are properly installed, the second step is to access the firewall to begin its configuration. -- Access the firewall's web interface from the management VM: +- access the firewall's web interface from the management VM: -- Default login credentials: - - username: *admin* - - password: *pfsense* (remember to change the default password) +- default login: + - username : *admin* + - password : *pfsense* (remember to change the default password) -### Firewall Configuration +### Firewall configuration +This step involves configuring the BGP neighbors for the FW. -This step involves configuring the BGP neighbors on the firewall. - -- First, make sure to allow BGP traffic over TCP port 179 in __'Firewall > Rules'__: +- first, make sure to allow BGP traffic on TCP port 179 in __'Firewall > Rules'__ : -- Go to __'Services > FRR BGP'__ to begin configuring your BGP session: +- Go to __'services > FRR BGP'__ to begin configuring your BGP session : -- Check the first two boxes and enter your local AS number and the timers provided by the CDS. +- Check the first two boxes and enter your local AS number and the timer values provided by the CDS. -### BGP Neighbor Configuration +### BGP Neighbors Configuration -In the Neighbors section, click __+Add__ to start creating your BGP neighbors. +In Neighbors, click +Add to start creating your BGP neighbors. -- For each neighbor: enter its IP address in __'General Options > Name/address'__: +- For each neighbor: enter its IP address in __'General Options > Name/address'__ -- Enter the remote AS (corresponding to the Cloud Temple AS number) in the Basic Options as follows: +- enter the remote AS (corresponding to the Cloud Temple AS number) in Basic Options as follows: -- Finally, in the Advanced Options, perform the following: +- and finally in Advanced Options, do the following: -- Check the box that defines the neighbor type. In our case, it is a __route server__: +- check the box that defines your neighbor type. In our case, it is ``a route`` server: -- Lastly, don't forget to save your changes by clicking __'Save'__: +- finally, don't forget to save your changes by clicking __'save'__: -### Checking the BGP session status with neighbors +### Verification of the BGP session status with neighbors -In Status, you can view the state of the BGP session you just configured. +In Status, you can see the BGP session status that you just configured -Ensure that the __BGP State__ is set to __established__. +Ensure that the __BGP State__ is __established__. ### Announce your public prefix -To announce your public prefix, you can create /32 routes and redistribute them as static: +To announce your public prefix, you can create /32 routes and perform static redistribution: -- In __*System > Routing > Static Routes*__ : create your static routes as /32, setting the Gateway to Null4-127.0.0.1. -- In __*Services > FRR package > BGP > Network Distribution*__ : enable ``redistribution`` locally by selecting IPV4 in ``Redistribute`` FRR static routes. +- in __*System > Routing > Static Routes*__: create your /32 static routes by setting the Gateway to Null4- 127.0.0.1 +- in __*Services > FRR package > BGP > Network Distribution*__: enable local ``redistribution`` by selecting IPv4 in the ``Redistribute`` FRR static routes. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/network/network_overview.md b/i18n/en/docusaurus-plugin-content-docs/current/network/network_overview.md index 08beb486..441e5e62 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/network/network_overview.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/network/network_overview.md @@ -5,7 +5,7 @@ displayed_sidebar: docSidebar # Network -Cloud Temple's network services allow you to build a topology adapted to your architecture: isolation via private networks, advanced routing with VPC, or direct Internet connectivity. +Cloud Temple's network services allow you to build a topology tailored to your architecture: isolation via private networks, advanced routing with VPC, or direct Internet connectivity.
@@ -15,7 +15,7 @@ Cloud Temple's network services allow you to build a topology adapted to your ar

Private Network

-

Private networks to interconnect your resources without going through the Internet, with full topology control.

+

Private networks to interconnect your resources without going through the Internet, with full control over the topology.

Discover Private Network →
@@ -23,4 +23,4 @@ Cloud Temple's network services allow you to build a topology adapted to your ar

High-availability Internet connectivity: public IP addresses, BGP, and direct access for your exposed workloads.

Discover Internet →
-
+

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ʻTC*{GziX=r)w9c( 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 diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/k10dashboard.png b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/k10dashboard.png deleted file mode 100644 index d836a1536129b67fcf461f9bd7bbd85726adb041..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153879 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 z 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�qlGZm^ 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 iXLGgi5t$cuYOCGIIj54_}X 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 G+5ZdL1}U!q diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/nvidiasmi.png b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/nvidiasmi.png deleted file mode 100644 index 54abb537c84e9be00586ff9fb7f5b02c2a8d3d4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19640 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 I&MBb@07n5-pa1{> diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencost.png b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencost.png deleted file mode 100644 index d845e487f63f4e593888c05bacfd628f393e566d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89375 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�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 hH(? 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 z zV)&#H-PXe17g__#wG6@GF4}7p4)c)s$P5H+Vi>zv?0oa+qVv?el(Z(Fri` z?IY6{ho*9tJ=%W^(AE6b-kBpgg&n++bF(t-N>hiptbGyhe|fDz?Jd&7d3K$|WJ+~< zKrHVnNj^Q2B1yER!xf4^rE+Di22F}8t&@8(`|KPkj-7l?o9m6`FnXk7MR6$YqP$J= zuKdc5z>785Xo%h}5KdS%_`bfTRbL$r`rN9J`&0?c-Nie18jAi1q@xqT6Iprh^{1tr zz(}g-1SQ0h$KH;OVq%Xsfsqn25^QaH>a9K6603Bh@WcL4i&tUhXm?ql_llNoNS4xD%2rlL~}aR6BAI9D#eP?_a=)g!{CKj8HTnW+9YF8NDTpZ{Yi#U zviIoZ{P7}NC<2As;G?;;x!EYHTzBIYA_L0e>CEdQ`YSq*%ClYY%idnKn~fs1QeO-9 z;g=ik!EknU#w_Y|8F`@r0Q1W_fXzU$d~7iI6)}<_B0F1|6Bzh|mVWg|lZbSGC&{Sq zxX+Q^JsPuU+Gy#7>FJfqrS00d?hB|}!NwH!R9raZN7e>oAyD$Jt^6iVl#1K*CF|sr zU_QzIQWc~$$iYv^nw%=g22l9&&0lx850^*CK-I87?v>7h#0+D-H_5N4`Vc0f*up=f zd#QeXEm%VMZWO~F4QEzCFEex_Ee3ieaCNX%?G?6>X{*vQPUCLFY0bh>XQWpt zG4rQ%vG+R6APX|t@?;J7?r_6_9KPR!=%=s}1J<^a;gTC?k}%4Kl%2CpuFH&u5{2TX z>K2_9*md5TqY4$U;e#IEa=Wf&R9)Vx?u5%UgUeEugP@rFc72H$ zH~G~0^wy&%F_Hua{~Jmn__l=WjQ8ju^8<^2v~?blgSwS$ZeO8LoSsjDTXjB{s4XK^ z>m_|ZPxFeqy?xbfoFnu&27}7Ep^_LWuHTpiFJ@L_NG4hKv`*I5fg-%YOR$>CD};zG zsx6S44Mz8yN^7Vbr7dS~c|6Z_K!G8SPt|7}lsV>jgenD}R)+`}i)0?jJuToQg(i2XVLZ<}X@C5Y3uUQkVi%9FpG7J;?8j=v*rm>t8Udxkj$@ySt{`f+g26Au7 zNaaz#(%pT^8@(9hs?GP4*3e1ty981+=0zI9go_Jj!Gp4kLx-pLqkUO8s2EiOf{Lf9 zd(bFIaF{Gy%WEy?WCMpxbOsDK7=%P~Zk%XX0}N9!3HU5ajIURrU3Ee0?E33cgLbeU zquv&^aDu``D#kL%j?C^R)qFz8*g!~xu{M3KF2?*2S)yTnvHzO2$Zw7L3Yl|jDCzE z?as!`vT{-7@<)Jl$(~4uT6z^EF1&)DaBVKkP(|-e2B zH8BcVmHn0A+B_+Lx~zS|Cxvw-vm+@L=@Px3DSVvqwU6S$*57UTKwNd6ZT3cuTqF%& zmkHi0l6}ahq%hhc!1rTco}VS@qaV#yOnkTannS?jaWvuvW3vT8ukA4G*t%_zKja$1 zM>J{@7*L(TzdBR-+5d4scsKt~=j@2M4J~&d07+A!>oFdgrx_n6b07}*m)^0Fz+a^k zI=3e^HGE;1#*C!xN|Ug^P8WCX-&oLhR$d=VxXXEYSEb<@=3IF=Y@u)i14W|;I=0Me zAYb89;>(stCbZWa$D4eTHdLVg(zB0T5!-v@la@!OlBLT+Tb9}1v?casC7zU!-wG*I zm1ejttGfi=j5G06BKdRe`sY*ju+k$_3uGl3W#`F`=5<01>?XcnO?6inmmO7I4F+`Q z$2r@VJfDf!4i2WFXa6!!sb9=78EH3!rt&0KBF?&5(wuo*TFg9#-K1x3MfYc>Ln~=` zu8_Naerf=FIWRa-Li)qR3LbwYpFI`T9#kk1`8K*S%%^Vx%k1Gie(ckyF?yKOv-KmY z*?9fYJKS(SwMQ+umFK&-p+V_J{>7Q~0oPRJj1e#0F`E;1?p+h=2<7ODb{R0`?Bun= z#pHCD>D*MH5moxEMmyQidDlH~qS}J#pf`al{<6#xCs-Avi3Vn_%d~Q^qboPOxl6s z=q}bH^;B1oP3uU@=nwC7nZfTfYPfR)n)4+FO`X;I9iUz_>nc|+?loF*KOOt(qD1v7 zxYx|je;I);cfCLDrF!|Qod!)4*%AH=QX`V|LuLHz6x=jeOR>65K5MV6)0|NN&`sdC z^xjjY9eV=nvGDo@TO-N39e{nxb5p(#rb*VsYrd)3U^WWu9qY}x^In2i?L4Y~9kaI9&&{-dzyxlU-^ z;z@B3b&7o?B2*ZF8^3M&T|XDk@5_ zAy%R}93|$Ze_}&LMfI%*8)UP31aNNaDYMb=x=L|ez;@)Cy#yz=ng&u8b>!<`2k0+l z=)2c-EMlA@IoOhW-L}_VmJX#7hZ)5Ydbj;ra^U=m%`m{6q+3ilZOi2rOeCfuk^eeA zP&$d@D5F1|m=m%S#kO+7nU!2Mb-WlB$G??>&GYzOyN}2(xh` z`trw++{ziA?FpWxZ*9U0`?dr*`H@vVsH#6LKL<)cltnYZ52N zs3u(^QCv06cAYmLyiZuCOa<_{Odo|&ruXOK<|I3gdJ>8VM&hVEvlP>isnRv_UrW9m zC}v6HOFhB$&U4wW<5vGrX4!VD^K~_)=9N!Py;{I{o;_ka0VhIwjLqAtE^*7MLXHLr28~uB z&P)LKr|kr$$~LJ%G8Rcs-AxnD#b(^XN@&fQVeq3kDTQ0cHc% zysmCO%BlU=aiZ}|q)c<}7GdZ;{H@Kej%yKF4dBCFfO?-d->NQpz*X~m87e0$Z9zc^ z!rs$5iHw_g#N45&0BkIOrSb_OU6p4$g|MD?w(ef?G8d(OQ|y~0{(P1z-^+~5!CY&g z_e5@4EDdEVFb8@-!D`;Q+LdaV$Zoj0{^63a{rYV;;N5AM;@Mr9c!%`x#@9N)MyWBl zqR<~DD`$P}^&IdWA(;{Uq24d4RFcdUFax}`>$!ABl@j6|9sEm)T*J$lOPiJ;K8pjn1aAEC9A<9_PpjBcu!i`8LUjFY^sqv)bgu@@?53@m zY<9%XQd^GEtC1jVXh|`1Tz}W^tCjOzXsW;e1dyC;Pk4NB(%Iep70BDJvbgv-lJ=U* znrVC$ihl`2-`oPni;KlbJow_k%*1~f92vqgD88O4RyUj!?j}`Ktx~-!$0>^7RJvZY zkL9agvQO;h`q^zHCN4-A3$89Z1oqK=hmqBkcK{{dECg+5Tkdq_Mt+@w%L+}8A< zso1S4AF{|YGhJSMz&)i`?wuYivL9mksutSbGGogA@I=E-P$F1!)GW;D;3Bkgya|dA z;7N9S`DhZAVrNn`S})Za#~qA|M1t5<=aRn+Utm^eM*LSuPtzj2UQG;h0;Sk$Udf9? zAae$PI{X2Bb5DUx z_8n5segK*xFVD$KAYe0tf0?4L6J~@sush%732mWJ(exf=ZJJqj;pMRbj7}a)H@ngp z9Y-D&Bf}jYn#kxHlX-zsNB2Xq=iMLw)dMAP978TKGiH0n4B&l{mjYry{;OIf-9O*w zXwb_K1A(6Z;xXFA`xCBZ4H_AeSM+SlwT^aMmesqO6Q9y5SPJWN>&d8}E?J#zgR-P> zVzf3%fOT))IEXEpfT?MGY+2dLcw!%MCvtdvr*f0#J3H)vvfM7rh)Zfc_gMWGDyL)S zVH72E>6LYu^XeJw?hNa&3?-^Voq{}ZS{6Or4F_fA+uRBQXtYDrxj`FSbi@L^IvfJi4D z6|?vh^_+vZ=$-V9u4qg zdSJtWRxj`Gcc|i*tsOQVb^~?W0LqKVOc_32t0%g|?%l>^4MhWM-#pxw4~3Fv%5#7! z?G-IudajQ|vV|Vuc=t<|H5l@*Af5jo6jLX!suaf7Kylgk%u1bq-VcpOhNkasP?9O9t>}@bKEac?uU>*?D^Qk&3-_a8x=Cm5d9L`mKhC_h8 zl;p98o&s3YZvTgv!^98%>~Bj$2NQP#>+MKh_279Y9kssD&VzMntz%H@gAxON^Us1f{5H>p#IzQ0|F; z7t;K<&?2%PdKp984*<9x`vTZE-CvH~{rz21w>R7t>jXWU^4o97oGG)~=zV|pjpIFl zmKwVqH2HH67TdEhkn|Cckx$Ne!Pc_y6&-Hs47S6D{kh82PDg|F?=NRRTj4(-l)C>L zp@d8nl{(OcuIuNO#`zQvTIyK}sg-m(5dZRpk7h6|+v7Lu3`TGD_W=)u`ripPUP3a0 z8}jSX#l%FqC!sW3avjOcZujY<+b`69CF8x7k$H8*b{)tJH$D{wDkfh zHnz+B!a@VQ44!PeK{s1t-kG%?0F*=dS?M-0>z2l%!vR-)J*a4WJy>47-#DsSUH!3v z!Vm>UQ(;D>&!*J@IHZQBsn|?)zu_wouprWsu9>*A?!yzZv!1FRp({MNs;qc`8qkqOU%xh+jBskbwDfnm44u z2XE*0Uw8{UJ|=2axEf3R@mBx&I84nAbIoJ1KZM+D;uqJg{TT1 z?eCYgvomp*1gLa$ewTVAfXryT9-GTzx%Ea6IE@ji<12mQDSpz&x-8c%CTz#~PPyMa zjA1>!NRCjTB`zMUju3Lm);Gfeam7Jf*IqGt%}z|@ky(k1MmvAW*?`duYXJNX4wM-m z>^^YP)6)yT+48n`sE!!^TWE4)fKKMBXn@{F5+k=2suavrS>ZE)@FmuQ9`JHjvo$Mi z?E?ZVY*d`zDk??*aN}!7amq&Y~E|eZ1t|Sy?GxC0lG`3dj&dLGEYxg zkj!hM*+sGff0eW+%P;35O;-<=g1*>%j1!GKqNAV7#L5xEm0|iYfE+`}z|0&5sXjF5 zDFF&KXx_*Z{k1*Bi=yv)n~*;n<;Djp6sQXV z!_RKBut)k*+o2XGNKtgbL4HDcPg1fsr1P1ru5Zv7*xVyU#?m9?t z2(E+6nfF`g=A8fLpSxbGXS%1ms-9g{yY_ReCE?^eBJ`!AiT7rzv`R5(l=b1JFPe9Q zGoSgeDeuwesb^f0ztyFv4OtOi>U*M?JE`m^8tDaBNCD{o^HD{p4&n>W;lx>+m|4kl zKVQ3EzwC_BzzKp`cPV-NIuch(SgFgD))EZQ>qJ2pBVcC0``b6_IxS;1}yv_VG?yvV`7cDAk}x~6HY*Ay?B7A2uQ4eQ?cjb>IH zK1w=QMq=UQgy&QkodS_0iH87}YzGLO84C6K4>>gN{6}4#<}X=!Yy+GaK{P>QvZBJJ zIrRnf9bG*7rv}ZdFwoJVlFB(0J36-y?W?fR%R9La-dH@e*6`^6E4RwmV81bW<$6?%~Axr&gw(VAQVz>u||fNog4hhLw%k zf;s~_W-p<;=Rta?!hGO|k=jmfzs+tZFzvRyA*fV@dA9I}IyF$m!On5L}m z7|Q-D=03vC$I>HP4_hT(OI{|S{wC{e^`{9#PGFz~l+4;HEn4Nf6%=!pgSzg2)2Y=YHC4+bm zd5`Fxbwi=e4P5*d-_iuQ=_!?dgP{1IiuKiox@KQofSn$+24V(KJZka7*U6^3b8RD) zYErm9OkYaOY;}BWN_=Zv#w8i-5?!p-02`tL)>;Qde`{g0zccL0n|=667uNsB+gi#~ zlVT4PtGMfSJ=3lueu<*BnPgSrb%3w}o%Q*(-q7mRIFDXFS@9I6ubF}%NrdhvH^hZ4 zJ@L$9_j4E-MOii+ekv-4XtR;|=;0|jDN>5s6UkO2-)rY;>w*#t#bRQUk$K;<7uGye zv*tp1COG-XqOEVlS8lcMZc#1`yjOcDE!}y;h8c^Q^z2A6yykrZqVMts1?>&k`-lIM2K%1j2Ue5Z8 zqdXKAc6>X1f&wXZlGh)Ukr2j<3pgWOg}nE7&Y|OZyzcXu9IE95Pg}$bOTG`fNTiof z+ZyLyb;YdqGZmY*9~`YarrG73J$r@6TQIwo9MzVjD;ra;?`l*kf@@1xo5kbxxBTn9 zlO=7?FXC{|nCykzbNyT>8%Ys9Tz04+;EmVML?KDejZjI)>(yyE`1Fd)j{|cT<0URX zgSEbwb}mfF|L_^Si*jCh?`!xtB#0t5bEette;;zAC!TCho?av5a_rM)P#DN<1GdN7 zf#(To>(PhwF+?4ak8G0jYVBmrClayPhzaAG#%dnb{S05{NbalL?#4qi(vQN>&g~c+ zpd$3N*|>+b*RIBA_7Ij9k1Af*ZG9L+&fs~|n9k!Kvhh^*czu2u`3&;Q6p?ai%DPx8 z*{bPR5|&OwL!t)O9OrOL0SueRxyk0l81j9`(hZX7s9N`DCr(Wc6Nbu)Lezv6gVB)9 zZpX$sVy2}&vjRzl4brrd{5H)Bk-f}Lev!S-+0Ily={Hl|iIZBlT>eaGbl^O^^2n;0 zmVfoD&qtv+imgN2t*^BYgrQ0a8BmdK)JXedxmd;Ta$!kvaW1!Yak2D4t5wMJ0oTh2 z8cMx9<>I?Yo&Alj6=v+dAEIPce>;Wj<~Q{PaysdWQtvdEVoilww$d)bsdn$iTwu@l zju4jpza+t)1oRbJ*||fgNbZUA$*|gPuZCE}iu++!_wgsAD+Uo{Q?Y_hwK^lslG}@v z!GUUppRa3n;1(bzPyBaAS1Jw(wl#n5>xUYiAqr8vMA$>!$z?)z1$Q_8+U{WK?~xrYK9)eF2hhB zW==Va+~`I3Z5872E@S^$N2DEipNk{0KZz2t?7mYg2cyB`+21Jzglv~2l6)Zl-4p#7z+HdROH($XC7PKl zSg+tTB|?oGR65LBR0|61(SjvvY({)PwfK6jqR?d*q^+4B`*t157st3#^yXx(8VQgD zM*ym?GqDC|Sw$3PQLS~}nk|zMRZHL3+VKXHpZ`nEt*!AO(#9ujQwb`KIe)7?tR!En znG?M_-8y)0`G1*{# zZWQaL{fDm(d zDTSumzzVGe(3_zdr$P`)NY$x}<*hxl74+z6=BG|c`T`iI-s+E&zj z!aj7@zJf$}`V32JOY$RfqSupx@;5?KlmNPg)xYv>ltg)4z|72McQCcBr?q=^Bz7DXt4+{R(1+5;v28EOxiidZPcqyXBz=h{gj>+oe2AiuLjm?ZDE#^xZFA&ST z?kEa#vHnP-y!-`E!wt!7br4b-=WAWOH z?EX`sFZn&XhrB7ZEmP@cgw7m4s#pfH8u8#lRwH@14>#IEsg}V);H9CP?hXdp=%+z} z(X~w3mQBiK3)Wpy-|#CJ7RkkO;T`$ebe1(K%aty4z z;gA4la8ySJ&+0?P5vyL7$ecbGu=aT^rJS>l9&B|ZQ4c@7kaKTxr^T*$38`Puyy?;p-Ue8?c) z{6u{Q@5!0|JuAdLo_}zNxcQxTjL=H8XU$w+N&gXMRYEp{G`aaB7V{#eUH0(T2K%di z=?OqwX(dqGL@JtA$e^$MwSeG)Lh$1Sv&RE$rR~sI-=^w>UV4K>Td{LtsHV+PNc=W+ zg8ko;>w?)qc%1;>rg5@2?dzqQY@5q+Rg4SlcF zZRW4`Fd}hsu0PC)nRE1&yvA@((f9;s?=ih+wR9Ok`VH#<*Ri6cYNI3fQZDLGv59yQ zsA7UcN^;8Hi#rMR4F`p6et9@-7qTKz)%zMSiL8LB=LvZ-hQ^Q7SVzLpLHvkDS+M4x z&VD(4BlP1)CA^E=k3^ubb^Q`4{ozJKC?x;w)=?*{Z;_zYP{dU(d_M?Lk4A!KmBmcZ z`|NKsHAP-mv>$QILGeOmsVz_6#S%p26~TC*Qwq&wkPj2xxH2hY=EA?)a)H{c9r=JJ zjjO>qN~xsbI7g6ZHCawYX!|_q@|($!K8a#o4BcWRs_ju>SQ4SN?mEGJTy<|;D^gFI z_$)tpFqy~cgRCTl(d4R_rJVy;4ZE1+BY_<8-j0N$)Sid9+~8u$f3at{8OTDL`B}{l zRT=xp%Ej21LWb^rNC9Q=>%P72Ooh?LXHo)5b8hDK-xjvm?}=tT%{wnldC4O|E3-Rc2uTVM@e0#{CYi8RQ%Np_H9{LC&coL zL(=Q@O9^kVXn4T7Pjhhi6M?(Yu6{3m!Y}?)jBgtxmTUK@B~l+~>%C?)s8_??oq#x< zc?!5t>#N4+nyHE zLQI&dIK4k@WpFe}JDfy0D9f@6dF|*gc*?BWykrBwQo)?zTqTdXy%$@>oF+<1POt1b z&NoNs<6bN04x5A=XYNb$Bv?6uOr{9S{pyxds@A9O*?E>DNW_kzj>-kV=T|8+ZTb-)QeUx(KyM@OfAr&9l^wvB0 z3Jqf`%@e3?k(t&+QqM1Au(=O^#udGYC~1tV-(WqAC-aG+m*E^x-!mTh^~zsvp8D_r z)wTIqwk@Cyy`{vSncU)7R?}B~Pw~4MwdD?4*3rB~Skmg12}M{7j{2)_HlG(dUkjmN zd^NvpEZ#R}|k<$pBqf6^F-87l|fp=3nMY*Wc^{0gr*T77Gs} z2l^`dmHzsb5PUwm(GjMQr^RbH@dB%5Al=*3lDK}}6*@QY41neaQ-7b-KEYE{=0ClL z?=)4idutXXdTy2#Z7%0LY(w)h!nJVud;!_7AUV_o5;OmsI_A)G`)ngQRn2ad%NFh= zX7_c6Xmw0Wi7Fu{?%+q$FsdH_rbK^IS!dS@$u3-K7q7*(1 zCN2mPzi(ie;TC-1`;!z$vVzhW)AOj+|{@nrrR&IvJ(l(ipdhR3E=eHbOt zOoU6#?DgS|rUGo1hQQNAdt^W_C)P?}&p(FtdPeYC{+IXM z>}#CKd|uV1Iiu{xwAF25&TOS3+Y!$|M8Uu4x#&D;r@xE#Jl`nW{ElntQPO z>9pMq6fowd{<%w8^uCtx=^nvIa>MA^TT3Q_>?jf9cO}twV3RM#eG{RVLO-0Cybbkc zLNzRUk0IGwJA+Vh*T<(yAx6LoYdExv*Lu3eSgcEFIHKfC%usr&p-c213dLwVW8yqj z;kVF~ORY|m!SH{R|JqeTAM8esstdP4l=y3#t4HG&4~@bNKSt0(r_V*|SU+>q zL|}U?ldRi*_+cfypL=O`X%5z^x@|=)&{cIb-fzkBdYnbrMFQN3j=Br+Jp8Q&FS)Ra z&rFs!#OEuI$9aY&*q)gP*{?Vj>(%U3Geju$shX7!1pbQJ9j!M30nWmbu{W(3dVDNG zznGr)AYunKDb1AtefCc*+aZ3gEhln|&P<FV@+ z*hJC~8&%Qgf@TH-d$anM0G5K?=n##^Pnh=dF!|y8N?eQSa4?QGPdGx2*O?_qd}y`| zO~dW$u`{W8FNkwU{v3mW1AzE`R6>8skmx>b615=58);K zpxx<9lZ8p}3O|+SuB3{`P))6|)cA!Vt#H%0$_wBmv?b#2@#QxIFT$5Zs4UBnNgP+@ zb+&|xl+UkhvYlGpYcq1%6x`0DRrXhS5n@TUUHc|ZOydG%Ve)rd&6lW8&5^fA0+(^y z?C`NH9BjJ!^hBTi{kOx;myyrB zH~HAwcTIgR79`xONA!)T9js1!RsJ(zoiVEq#Uu4We^&AD>A)~OBXzR8&5x)2n*vb< zl+p(GXI;X#yk*y(qQm#Nm09CTDm2B?E3+8Zpa!1$X-j{KveuZkg}xvfN$uXtJMk9I zafuKzimJpPWVh=^07V#Rp6tnr728+KU+{C*@%6K#;z!WSy`&Po4ptfpGGxiVG=~>d zOWGF%;-zxYAr#1$`an(=blx$(&qa@Y?m}5=z8Huc?jvK&mX~_`ET=XiI>yrB zR7J;Y#}tIzF$JhMY(9Q4@qg$|JaK(9XV#hF22^j=mrHRMP(&BEaQgb|7rjsG=o2oD zedo=0^{GmAkqJ;h&<0y~fLXC|@}BM|7X^}2yK06^bzs3XUesUK=nddXprIKxo%<+&5YKk*ZX`kojQq2d#fmof=(o8 zm6j3>2KK%!ujltWSX*8DEqdJU&OBIP2{mcZnRe6yM^6@5l?MVZ25*~PrN`ADe*J#Y z&g0XxARx6b#7vnE4WV;CyYzAIHKEMNZwb!oKt!UNJUOxYjPSSB!)Ag4WpaH0davsM znN3@{F?F##HFdDEwAYPoVC>D-^(Ws3#r>-TY6j3$$!Kkv$Dk0EH4U${i-FwY2?qnf zKlX`s+;ngr>vR$n#vd!spP zRe7(^p#9{X3)=Oc1p}6~^gG--&%0VrjU7JpZ&Ht&Tc*=XuOGyR)q>y`_teeyK*3%@ z0KsVcnc0vV^|+1ij*mN2gM&^+vX;B<){~9ZfI^O|M`Mo|7v)3t#*23RlLd5b&kAlS6(=-t9oZ%!u!2hQl za|c4U&T~kZzWCN`ga@@f0{d#er@vOY99u3dqA3??(RiDq&Ocoo*hJ;-!2Pb-LQOXR zeLj+-%>{oYJZfKbuU;*Ax^`wMbz8F})6Y`*fxxI)vjpHhyS~cI-<3sr-X5^=2j<`6 z(zCPrVTBRM^k|Fbwzqe!&1oX4EVx7BL-H~%iX*@Udj*D~%D+{~ZcDCUiS?)6T&Xw6 zYRTf7=4U{CRUoIEf3;9WdjjX}h@ksj#MGmn!Bt@LB_L0NShg3l)4y40&kb;7;OiXU zB)#0*1?j}{3`{Mw*g$!R&^qmHXH>;PL$nK}(}jr~ubk9RoPG zk#)}?z_9qyU*I%k+vikX=ecirg2E-v-+TLZclIwWa;|mz#kHCDP6x`Xy?NtJ7^;EG zuxCw~7L_}VrV4NCI;a;1RE;YM=8*-iE!B+|ZA%_?etO79fVUtfbhvm44Y%bE<*qr8S-B(2_dI+613VArT&T8nRX*JX-_VG@B5BE>)Ka6FZgd#3$_V-2-$K1%ecuxLH`<@YWzC|ZA#pT@Jd$X&q)-OHpiWhF4 zlWyCC{gjr342)puDSVf7g)*DN)cFy#Bu+-6dt=0S!Q2SXmH^L?m2duN-0ERv8Mkq>qot9=rCJ6P3`rR;H-d-Fy<*0etmPod+D)*~tKFK*aAaZlq*Y$GMN()VqK_kbda{5+l=8H- z#L&Kj6g4vP;ao%sFY&be`;?Q8E7t-v$efO5)(~EZOBPTN$8~*uPR~dhr<3=n(cre? z06lg}1d@`V@^g42us0wQXs-$ZNy5yOcT3qAG=gY7Za<&GMc29CGj6FtgyqUFR)Lc) zB6GIUk!IelhCcYKsf4=tdP{#&=#lvDOwH7Z2s>R(0$n%_h-pX-FIQ6@x?;NRcvsdq zw96(f7dR$(+V?|KY|C~E9Qq`dVLi%E6RYB?2`uW5g~Yl#-lRG&9Ve9(^m*U<~RMVWc4Gi-hO zR+wq9I~T~@nQH%Gp+{O%Mjg6&vJ%3~@4nq*b5b0bL2$MIP>8JgR`(5cjXT{Cf-)<3 zD|L((*kqCSH^8iuu86HYqv;(>)BIx-Ma)VKxq@Y8o$z@kpP@XGG=iK|rt!sODEV@x zL;Y*ahbdkxCjoRdj!3)R)AhD-k!EITHC-16vUX3QIN4pE->Ph1>QDr<6$CE+5e(4~ zciu#L|0X{0Cjv728DM{F9LK|T(4HY7ltDzMt{nwltI8J=w=;5}_q5G+_-pJ+voLu) za{xaV*r=zi{A87=0|0g^{zzcG`1azl_EvIkxC^I1%NxB zCVAf7@?!9@&rJ(%b8xj8tJ9v&sonYGSC@=osxcjSvt?DAUz!M7m@K_p3x6;1{IOF2 zkvi~20*;zpuvQZDT1Z-TK8ou#rcPW1^M!O({i_Wd13BUszAe95R|dIAI92EWW6%*V zD&JqnD|3D*&dE8|UY2T!8A@O_bU6zi8Ivq+T=kM4ON{wuec}u~VAAbdorHCx#@qH+ zTN^2hCanifBZYzz5G;68(!Rt2~FgLGJz7@A9?`g=XI%FLz~CkkcN(?7n- zT6>%3pQt`gq!SHpm*zOr^9r7w+>FtnnWo#)CtYn^w~ zqFzlYa2|3|z$=ki2K|NROP5zk3zOzA$zdtB>Y0x$h(5z_wp?TgrOgbKY)uJ05cQ8x z)UlCMdcF#7cKVTChU<7e#v;|njzPx7M~M^nt3tICl1sT~dNj=}3X6o74r*+%#ro<; zGwnFlLWRqT-1=W&!{Iow5&vblqj;ffg6*^IgdyPGMMzQ$WSf|K>*(}^yOf@8pL zMd+Mk?zuoDST~c?0Sig$a!uAh$!f+HUCyVgFrAAg?{N4lW3=Okt4v}UpO|5yLB8gR zx|Lt^(!rbeQ&If4qMc~7@Xm^7meco~;`T-}ddKavC(`AnCxj#@I(CAn5!Coj7yhEx0@@kNm` z_s_H6dcI;5MfQ#6(UbdPo@A&XP;JO{Tn=Qzg`psLf9N~2CJJmM`O_5sV#3shZ}yWo z=b1H!+9;$X0sIiT4ezhTlQjI`?Y}#32WWeG=q3_^WfD>mxNrb*H;#eQkT%KQ{<$*= zc4YxjO2x9=^=;ciT>+i6&z*-27s_l=GYf&8K()SW%H=UU#m&Nh#4C@!S$B3cRrbkO z=h&vcBw8`sf&H2usYe%b9t=ADhB3*AMwQX(s?i?Q=|TTE29z~(!ehm?b4K#E|2+U3 zLUD;qp2pMa^riCh0DeqA?LYU%`?Dlj;t{dE8#VZwV;*yj>4N=WFz9A)uxf$`uP=hGJI*< za$V-HB8X&QoOw}VqA3HMnmB4rI<8FJ5|qNN3Bh`VvYGIA!IXW1m27r&G@Gu5M7jI- z?;jlPXe{jrg+_Q|`&v?LCV%T9M~c#63RNd%&C6Gz+$FiX% z$&AIO4v&7~%%;pbNFUMDb^H6NaHR;~=OE0CKF8u#Sf8B37& zdtHZVth}DSL%gl}EX&Q9#_Z&9@4P+i^Ov{BYLPX2#cs0D;G0UzAK`5vG4 z4vdY!uZNS>=P&{6XZ&4B>xwCkc-mU=;|d6|%204{a4w}z?1h@e{z+#8qEINf`w3!% z`W3I`d>!tlx_|hO>G<10UOxI~@jXxJF;U5u1sC|^@iK?Nx9)eYgste(pU??kyC*b< z>dgtz2ZuEwa__58_P*276}STBSsJ|&OiA(6A+HgTFK5tQG@=eeeL8PdiJS|g}FGk zb}M}R4~wXOmPU%r-kvJwrGv*0V=-M`Xejzi z-HCchjZ($IKri88MQ;^U_O3Z-^RPsY0{?n|MKbzJ|H{JsOhQsAF1gqX>qUrXsC<)u z@aD4mzjl1LPVTcI)>D*pPy$^PAi>&f?Ye{Ew@ECxwO!#9{+;cUQUfcYv@XRuk#6F^ zXa@RU!#;d>3nD9nrHaP(SDywn$8QD8l?+z2wD3x4^K`p>UY-l+JUZ$^VWxz+NHGO_ zAgt6P^PE7B^`fn?E z1(cKN(a`99W5HS@EW0FlV?{KSpV@NdIcWk-?g)(qa=)xT{C4{i8=}ZnLNPPSD3{8L z?z#d+Eyx?-*WFbivuYiqXN<~XO5`=``8+N37jI-@0W~-U^FX|;r+0E`_ zLfKXf1J%p#0fn{-IzEv>S9lQb3U9M9Bj9Pz{7iy2h|N62y(O|*!S|vC98ocB&U1nD zLRUps5(~#WReRyGTbth`rWFD{gchw2md4gsB0An5?XGn!3=e0+ueGPVcQapK^(Too zOqf~Gvm^0^Y-hB_`RCCp;3V*AH^-d=@oAtO$<5EuYTmZUcBxyGx z0ew(4ZLOJE(DK#SIU8};+&VMxiBIS57}bf7gg?aLST%hkC{TQU{Ykyu301i}##yEz z;6tu~{+hlLH)?|spTmbRds$9Cg!fWds`mKwWMlcy_6M|oB*iKo0}4$e&787kNV$iy zMHRmJX`I7swX8rEp6F4&`;alJe+NJGFR7>5_@o=(<%s!PF(rQtn~YD2Z{3y`M8lj8 zMti7wLZC5=k9Edi@|n2pNEviEgwtEzjrptjRT{XOFIQGDb_!&J8#*F zJ4aT8ACI+T<%8{->>}v@X(#_Fa%46_>5OPBKmAPmw!h{So~i<3G~PSr^gSJ&m_CYA510vB;O*ozp-27$)S{U8tH z-(fZg>Hh>uNfUsz?+pmRoO>C>1mVobup-se**>INon8W|R#pJZA+UEkv=e>S5 zDK>k9JjnB02~Q1$lC-=k|CGwv5l=D*3FaaRsral2#xf87cH&K%?x>pY-C25{i@p+= zI)r`kR8mCbh@ z26wcY_}t-EsDAeOcN^b!aHTm0N$J3C6C{Cd;fT5I_0q+%V4Up3t%t8)i#pX zPfJrk38*A&o*H`BSw_FlaVqsU_iyotGYh8KCsI1Vm%X&{tZ_lmcfM!S!)1i@DqwwX zdz|8n66wf-{nYl3wGtf72LuNmJ6D{uD}_R%D&3kGgzWZEl)aO+4Va*W8>jGPPo|MQ zD!1aHyo><8`R%%j7s1iQ13aD26-UZ(SCNl+X=v)VN9@1Q*{#sT#@FL6qn{i#n@5yB zX>r3qDdw4$*2n5&+(KW!b?}(HZfXTe$n2) zs4#Kv%ti;h`sU6{u%H zmIhaxz#HE?M`6icmP7#Qsg!xZ&cmte_tPVLr&pNYzvUrapG8mTOqhEHr3zNRHUl3K z3m<|Dv#J&>yvbRF-S6vhUxEy{m{}nLV9DgR187qp1ZTJXinvn8pBp6d?69sB#9;valkftHGewdnQ*b6?h zHY}G188~uN*DQ*;XD)q94(*=U9-*Yt+oU=b-7k{nS9(@(&Hej3-o`H|yP`9s8HJ!$ zZ4(}sMz$1CdCZqEmO&qF0Ux!{a`OQD0?N+m?=kCqdb!w2SA%JD-R?JLcAj@<8wBR5 zXJ!=Gwg|MPGP=jAw}bx~v}Z3Gki)q_7%9!@^*kwiqLbNvt~GM3p19$oL%_4c% zTuiB^B{B=Htaq*3ZGnL5KHu-9!P73g|Lok>O9l1+`KbAu6406eU1c~ZX*3LpzRPY5 z%(u5#?KUjJThRoFDz4f1w44n@jb*q4`3iUUHd?IM^B_{lJ7<(ttDU({$4@^1hi=gY z-j#bk?zAbFG3zo(bkDA^dEHs2Ib^TH^gNDk)n`3=X3%HWs=t*nu<0T)F|4+Nb4}6K$r7M z%8WaCqPG&b)$H6Ybck{77FI?USU^F2+{uWGsQcT~@D8T8fe2drphP=9r3mrq&Wvkj z`v>JjXNr5PoxVBUpHbn&1TIUKhA=vw$caNZJz}Ni>yGNyr6hrwhHm@}>0=UycZEjXwF1w@glY-?{=t@yk?EFAM>G5W$8L$^nvQ#(*cb%X&DSD}*%S@UIkY zwuW%fnjU4ECeGx$JD!ANd@A6;ucZrLgXK*3t#Ujq3&D&#KYe)$V_ z0@5owv#WK~HoS&rYfoHoAgm!9Sfk0u3TM)($G{XL>Llyi3vBi|k6~>k(u=ac3DI4Q zRW}|qkT&ZfC<)FqjD0w}=nifzH~Y_^m2*ZyOPop=s`Ep+C<^RbHwFGF(o5pQ&Bxj1 zFMaic_rB}6zPbr&M2aY+-5?~U;N9FqRi=#gaB_-pq@YoX%0a%MUg6bHcG$^2S{A>pTHM++p`*#0$(x+ZU(*i)GeMCv zvPejhIy#H(8__J?L3xx5QJ~9`i-yKV}dweEM;dY89QuIC6+6wPx5j z6(nmjt?=fGO3}KH$%KCnHz6xsn5>t0CIUwHat1{4*`_&a_4btK{H}k9zS2McA^)|2 zJ{bAqt7EaxkC_&qfLhI!s3#A13J;nb6Wx-`>J?}t?)RAy*oK)aT}6#g*HHBI@Y04_ z{xWn#xxHcCVaQ#^&`9be)rdqS139E|JGt0`i2w2hG+Fdz)G5N2UnR_Kd-^{SXD-4~ zEK8uf%?AHo{=!{@)ypxAX9!dpIA?2DiML?W{<2GqT+)rXdRJ>m#jP&&t=0#kLYFN&W19Pd~wz z!PIntS4%IekB+|-udh)2JcSegdA`*vVWUkFqb{Y^(ZMxY%_V@Gjq}BRP$# zERSl=&o&@?Pa0Jns>@^jMnEpMkjohiAf%?6MW~#RDQdBmlCE>EjCj2N<1xde0hs&t zI;xe|J(I~;T6swmjMhvWA#47T#1CrV%Y0m<=tl7MDkr)oAsG|Px}XjgHWIt&ha1RSA5P6fSiKqQX%L06u<&MN*c3p_We+NM__S-Wy(A&)&RF?H=1T#^<4(jN z(VGx#^YTM86AhnwNEw9Qz6YH>Cp)H9rbnmP!h|=Kh2x=b_fO3iV<# z&hp0}8VX@b>jt9d<;iL?fRE*+=AVw|vHcKyY`dST*NuBlxB_ZB!fy2Fy}RS+zy6`4 z__buhC8(php9#2Hw-3xIWzJ`gG2NvwB8pM)=6hk=-(!{cClB794xI@ozqz9^zhEix z$B?W;AMS+*Op1CEfA2aBVFfpuM5pgN3}IAqJ)(TsnZ~xboI<8IZSu&EyVuA|Sro4= zw^A$-<892zY@1QgDuQomQitA8DtSrL;vRd*ECEIWpjM5wbR-Oio?^UL@0>ZV5pL5wXUviKTa4$MOPP0X{f6^PU=rIFff2YO1fp!+U^98@y~8JWnYlWYHb&P zR;&Ft3Sn=ceAlJZ;go+W?}I`~Z{Bj}nQ-D5s=Sr<)eq`vuhgTXjj4F@g$&RbzPe$s z;1yz0SQG5C^T^OkTcHPN>NQl}>To{+&K-ZMDJ<{csXdPU{GQ2zrv5wctlR$ALxGNf zr#PX3Av992xau}x@}cTNEHK26anDTl%sN-^Er^_sT) z^ZMCHPtMzCB$Ul>7|*h*xAE-KOb|98o{|7j?G3(RhhPB}vyw#aZ4@)tlRi zFP}-)`+=VjK%Lxy`vjKAs;WbpUi%#v+UD_%-;gBMkU+0jHu)mRPlU zvAc_$xS=h85zO(d$gF~Wakd1x`^M`XVp|xuSy(f>7*JB0O{d{A&F0H_ zLgUYqfX60eQwiV0ZCnlK@ksqvp{|%1xq;8Z+0wGe?Az*Afo82F^7{DEt$`A46)OE3 zx3Z`{IpBlc;-B;E($Na!tXv`ci#{CBi8y+=L5E+hUJLo8>X82wyuor8qWy*XPSerD z9*u7DoTkM{H%W8q0|F%DWr^7LEKA^|jQ`ELrhmcfdJXDVSA^@umek6@TsnaLph-Rl z=NG(ToaCZa=vG=xB~)=2G}lLCiwA+VWE;+F*0KHv>|`RWlHw>fj0 zwGtrulnI?pg4{vg7}zF+1uT++y~F*I_EWjEMC)*Y?pWgI-4Lvt6|<-jL4W+`ahjiB zBLE61J(P@v>XY{gDLKU(>Y&53jR5-BXk&I3D5VK?CK4G6it8_2e+>{-E{Yg`vbmIe z9o)M4;zVQCW(tb!f0(w^AGtY?y=Vg8mCnS!w;ko~T;8UQjmwksmcq#*wIyat>y{8W z4o@v$w%*Wf6X`Y&FSIh7g+8gKqlw*N%dOq#jy92B9C+Bu&B(;D)s*69CMRX{Wrf_@ zJ+S@xO=G8btk}*duEupy(+Rrkt!}!l)r}roS&54w^xMCPc+gzeS|m3TTfXp&?ZJ@I zA5O_4;5=@g#wi#uGp8LSyrZlxRwCQWn`6%bbSqXZF#sM|f76S&tcauK-?rg2q26k8 zrP5Pu^?@;vclLiJNhVV6uHKsnv~%`?IO&<^>E;@3#mb%9Q%N8|;^dDv#(I&An-J@- z6)0~QqLkBNJ(jidGt7+ST5pUBO~x~wla<)ikfTSQW>XnF+>U0rnvxrJ5!O8OB4-@O zmgO|YsFE@&&a{2bxwAL6{06jgD)!EMkf^P}KX&FKKiI91F(MAvh=f;H6oLr%Jg_>`l%iMBpefKfy=ld!JA^c6@2$7>vkpqRJ`f(s%SvF!#%i&Kh zba1x)OXq_bF(HW&lyqt{Oyd%m-%YFre zv^}vMywaFS&EJE5=IChIOlV|LA2h^&Qjr3w2j9gREy-&D5Nxl{KM)Ew#`f_Fs?dlP{gwoa--HD#@dk6(ASB6Buf?=4_d};xvi>2IL=y7s2HJky$inEGwA+HJxPMPa7Uke06QqV|?*0^Een?rCT zxZc3l=Z0*j^p1hkJ+wv$B$SKI7k^t{-DCaKe%p&Vyv?3(bvFEzB(S^sdEXG=x znEB6*o8J6%zQ@3jJ`Qj~C2uIAPmxF{PgU%1cd^+B}-9PT>^_Kkyw|Hyd zLQ$$(tWJzb8!c~{&)ylc%aUGJb4o%JiFW;7QebIn)z@2Pzl`)gqUu48je7Ou#5=Ha z{SE+2ZK&Uhej}Ho8`ayN)}FnedoRB^h5|SRHOMpTHoe{BU5_a~yxt7D)|-Yq74%Zy z0H4as=^$x_LVG8Rrr#HThSfpf$bG$sLq{&@PbloaYAMca3B=}AsB4+;r+F88KCM; zwm#~#EoS|BT~(my$2@9*4n5DC2gsJZmgrkUC^)4aOm@cWzxlh+S>n^Pu#t{bv;gfo zv6054)>y8l0l;gYP>S<=`n6iO>x&P>F2LG+5=pfmw3Ykn46N7V%ewy$ZEqD8SC<5e zCc!PZyE_DT2^I+M&{%MnMnZ5B+}%C62Y2@dn&9s4?sl5_=RVw-`Oe#U;e+nY+O=xc zDwp1@*_IA#U-Z6B29FO(YFT#d?$d@w$V}{N3#l1jCtNz~gkVvg9O;|{T;p&huzHNs$)(&vB{`p`69bsi5E%7*SPTknyvLZJ z)Av^U^{nrO7!x0ASqasKWwr&xMMB?cRdp9)3eU#PN5>Dvgzn&AC=!a#be&a~Dy~LM zhzz2x;dGuAT0iQ!QbBk(5}FF{(}wVkJ*XVOp99e`1UBdHdq4l4OdzGeB*tBh7yHpu zL<5Zp;LFy}iC8bLpQ5WYq#>6RD zVM#aPQKS32W0oURJ#33u9am7z@q3?a;aW-PZLZLndb;M|vrxAL$HfwvOvq7|Px2sD z8*93LYTl0j%c$7AeDea6^t=Dn*5wKD@g0!E|?t=He=`d9{r2Z*>VrzI6Yi zl2^oWT`U}&3s5O*Ok7&u1W#hkRm8S#Tk7z}t4GY!6YNuT$ic;>jJ{JmbJUTcy?;AY znuc>n<@*pFb04XZ!xD4ED%f-_*&;(*uoHcMh8hfSvQ%jG=!!niJY(VMSG6xZ&mFKX zmeYU+fM%S%4P1D1yx3iwz;H>Sbt+1Mgt(ojV9@Fc#IO%Z(7ZYnp7nGD6?7F9rX{J- zV(V@d9$A0e?uxe~C%QQ8y}9waZ_R+?j*pEe8rvY~=es_yI_z}Hyvd^-IJ2m0U`)yr z>|9C6XJ9O7bpMM!NMA8v-)7#qcQ`DiTx+?skq9YZziVAQ}3lhXYBLHcE}u}j`JZ?c(I{uo)mQD5@0 z4+`PDvU!3Gs0uYp#4Kazl}Z5MWzU`zeX&{%IeuxITPY@H)={c&jej|r?F@~2YEI0k zl>@V6#T1P!v>sLCN2ed*TkQ{8n0wH%l+{OB7;(N4fzcwRz+AJCxa%h*!Vd!v2gseA zd_436bc0i)?@(U7HFvji1u$h~$`75nK90t4E~i9V4XLNa3;zsvo9ejm_k>VY3vvcR zDeS9)z}UR?x6O%!v6d^N7DZa`Ln06sE@NZn(2T5RNhlxkr>Sy|&5ZS_zM57SJ!|p% zBT8msy%bx^KBtOuOBussO%cR6dcGLxJExYpyYCRQV}huK1y>G-{lL6u+{R#wH) z4NV*s6@ZwfCHGhWC8-29BN1fA&SLLtS?B@?Hx^p%4cH5GoUkuOYDQ2OtyNr-7sjT8XXPq(M zf~x<)>oH!HFQhxRYtwBoGQz&`r8)qKw9Y%fI(-&deu$lO*vDRL zT^Hw`fH=w5+DO77s4lH?cz?1RmsVs`nkKcXB1{t5Jf@90?f*@zwjz?5_j~*^P2+*H z?E%6|M!F0-POZ(pV8#)^LYv{4Uq6mJp^a+MwWo9HkZ++kdhG<4-gLdDK+Wq0( z&u#m*s)NO{GW~j^WCSwwO@!U^^*V}~ho=Ei>&Da(d;Pn3sZ@1#Y=44kP8LRC9qjT2 zz9kkG{>>ZTXZEe{X-cau4^iere~P{-L&hi4v03XhwEbFfW}(Yjh$!2&5E5ype>bNk zs*I>(oU5Jv$f3=Vz%#titQ=3$r^+uPHvc5RmO=6Ov6YC^mlm+-#I=cB>b!~!gi4U0 z{=wR)WvM8c@c>?Vc@8 zLVeF)#gnx6x}UP0i_>J#@1Va6TMnPDG)7^XfbxDC(Xn)kM0jup7UjwM{L1Vvba|<6 zCC#7Ph(PS(_f*(47vG-vVnb!SW+Ec(PJU>89-l@k6LR|L!+2Q_kZw0`50A38ntEW7 z7%UrOGMoLo=lS;-IPKb24ho3Ie+k`qrP$!<<9up(qG8~Rk=u%Wwn?pvh+wteE(mk2 zI{!)h^oK08v1fW<9nhe>6MVm=#&S9*A)|{KF?iQ#MxdQF5L0H8huz+jVB2r;X8B%$ zVI8@C=AxvaK!5r0uoszaO3Ww!yL~k`H9dHmC5)!*o%3Njx9rsAZ zBqa0|*uM_<%O769*go8Jn3$UbAJ3FQX=%{{ zwz}%#+sbravp^m8?RsO)r>;)QO)d1)y5w-?f{#`iE_M4+=3Y|${uUI~H8t80ON{Bq zxs2mg#xpKWLMx-ptx0+fM|r%h3k0iou_QkZ=|6?|1CrJJ9~pwhKCQTa}-;1TivBtvr(%VpJd#4d<(8#j|dC5}}^P*=QJ zgF1m*zX4RM98OYwT!TZ+Rk+CeLg_?{A)SdJDZ&pVZE^UAD0d#@qC8+|XvP~tDF+l> z!)17C89c)6 zk73WBl^q%!=^QNwN6A0mqjs-u6BM6!II^w(npv&v&DZN06~S6&E1V<}NDB}jhzUPY z;Z8`7SQS0-GI@V_%AB^Hr;*6bJ5%!`)8DT*AF$4|_Fn21rMps=4)gRhjNJ#)L~{rX zrV!AX;hh*BMOYnbhgN&E&iCjvEt-6&0CC3_^7JGzc$d9b!o0mlr|7nhJPsU>c2wrM zcd${9(tljsD;6u?{`!2zw2Wx(fx1B8amL@8U}pm!+X&74S=(PgupMxr8}eY|{;X)j zW2WNO7N0R2I`3YtcIxYsQK5Q!Oz?oW5vX*1uF@-G@Bwz8 zg>#dlsii!Pb9I(%`~!ap83E%nbBv=O0Gs(7jR}1T1-yf&1rr>NDzX&|SiFxIYToRc zad8GItHmFF;c<4EyidrRuzp(=>`nr}!%%F}zroYF&ZNfV0utqghqd3`6u)|8#To9& zD1AwHXhAzrzh!G9?EZQ4I6O~} znP3_Cqeq7L+QVqKMLld?pXNOQb>2Sxl${tvmvXlnfv{}?PX3zf8OIonj8u(wjigjF zsQbsq2dZ{J^Zfp^7k#-Rdt!9%u3#Ls28f0_#CkNaO52BvAR_SOvye-opYn?f>OqK< zs{%*d{@)s6a4OZti;~?>5u-Rd;C}B~B#7C;a#rz3_7Bxwg}Iwym(h+QexSJ_=VSd# z{!(2trR|E z_^hm$1SWKBZ4`sn`^#~Um&asXK^rxecs}I-=KkyPHipd_GD-tVj}PJrmtBx-`y@L8 zb3E+#s@J;s6B2P&hQdb=uFAbbB>oB)Q>yT0c(ksRcEvn)yb~pb7s2H$EVZ_UX-2DO zZ=9L^1z$*#j2aU52*AWGT~Z>oV#$~$=5#>iWU2oZTA$&ZNq@j8Zb13wh^{dWn5iwW zdynjc{d~aZt3RGR5 z8Op4%k66nbD|rowR6o%S@~&vEw6<-sQjNtQt1!O>{&C!w!Cr~`h48mH5ND^~IFFs> z=Gz)^|4V@;&@R7l@KWkTIZDa-ot@C6s(^u<^7D!N@ZB6cP+xxF0nXqL zQ@dv2cu@#CPs!W)jiKoa<@i-xdmz5EeyiF>?)o4w+l0{R9==ma9AX0a9*%BsS~brq zcqhKH=^g{4AkB~K2REAPrLC4QGq8ML)!R7yV!L^aA<0*!IbK?3i0jSC_2|7S5BU`% zjzz=n)p6Mzq8W@dm7iXofKZ6k?cUv4L!FlY$YM7CxffBUTlMQSmyw$W=zPhr^0=qk zes2eLD69kWu=d_M4P|4@cpk=B4qJ=U({GyX9BDC!7B#16s#xUCR@R$C&0JUveUk!xVX{ z)lT|HAszH;UOa;gDmn3s0`BvbQ#{g(@v! zP^nzzjyv zti@;GjLzhj{3_2`jAKT9`#ZC=NN{n2Ty)+7-lJ7uzkeE zDb13G(Xxr)vd?P--$rgL!b@68Gchq{>DZeQWhFbIeKIh^BDCSN(&7tkKJ2=utM$XM z+M5!_W8t}*6m}opzxQ{UdH!axK{;>p%Vq6)y!T6$izPe3MTi@1^8s{=lSiP4?UT9W z5&;2g#ru>Ys=X1C#n2N}{7X0Waqlv_81Zu13ohEi>cPMJUl>2o?2|Oi7Ab0q#T&b% zniz2(E&<~xf$~#da{IUE~w1Hbr!w{f$_vv*Z<#5Vw!*@8W$@kd8C7?_ySa&q4w2_9Nn0QQTU zab!Y%3?w8ZNIzGNrZyQ?TxI8gFa%s_^~|zX!{$$RJ2isduX=2e%1D{=Smv`>dzA=z>zDu<9{kDr#OodT`pCsq;ZsLDX64j zK+^s4fbppUJCc7)kDNT^G6A~=o5?~1+-dp|!n-+V#CNyEK{3!hh>Yo}+xlD~;n5SucTL&h`D#Y=q|3FR`q^&*n->UGoU1 zL+y7Tt9dGT=LVA2S)teSRhJ5Bc6$71m_NKHdlIbTUvI$fQv5-9LsFa$pP6gkpVKXy z&Oz2*f*MqF`&iPWJlYT6J*LS7^G$qB-0N)mJ_1v0G#{zC2QP8?*PijwzaqO?B_0!5 z=}aolq4EUU#yfcK#sNZ~ojzQr*G_MrJ1Z_63JxG|cu#ndx@fQQ4u<&-kuewU|IKAP{$#^va`2%gxHFbhr2Vg?Cw`P>W+m z#X}?B@aOBcd~lANA~p6gF5KZgcqa}$SFY^cRG!|HUjM*ew@L!0(3S3|&S`h1ZMPc4 z^$0!%!JNwEk-0cfc4}FrH2%ccY&xc9Rj2XFJE^Pj2pDy!R~}KY+jnO9ylM?&l& zUpwHJ&-o`Xu^%&Na_WuDjW-DPb$QDPU-jUi@wugn94YQ{ZukdcVQ5*Rbte}m)FAx- zdddRGOd&qz221;k@_gP)K6#?E0lT>a{y62ILihw)45?zDHfeKS7Pep9O`IZt9PN4Ub^7 z^5vC$4`dp6k4sr#F$DPXPt6DEWRubDEe|1Fsw(!vg&v}2ho9$SzqMg^sWUmGqJxMH zLE?gBT$y`qASoDme%h!5{rk#;CCE?|U1tR=HRbi^2{f@Q!G`!YpbPD1uLX{SIJTvG zB~-D(AolZ30Z78ciGW6a@STHDN0Qz9rK(=i0l)?IFv&~!--cdA1;H;o^ajpQ%Vl{0 zcrW%iKHN%yPbTy2aB(XLojuV=0czYo#*ijS1vrO#?KHWqiplMG0|MBs6l{S|XXj)l zRhg%h1mIJ_N{_XQzU!P%1>Sv8U%{>i&Bn~TMM%Tt&Thj1XE_cBDQcQF_a9HzCa zJULBaAWJ@Hbu-kI9qC?)>7>p{unx8w=KrCgh#px3cMZnQbdgG!!XdSiYSCL%nCQ$SQ7SEc+31TZrr7g0vP`?Gq29Pn+%QScT!hE zK`|Op6S~cEii{ITh>(}_{%8s6>IufXA+2~Q;6*t$J{w{jM<$kAOV3QPC{4fn(p%#}`q!X}A}8W}zUaJ}>L` zC@R7B-^u}}%Yg>E6n5khc(d>3@W(7O23)Bu^p`iizxP-V(j&(4-FFc5AA-%%UcHQ- zUpKCo>?1FPRj)?MG{JL?8mdnX*JNcCcc+`52SYzM55%TAM^47Vx#9)*uf{d>_;ZomARrc_POBKy z9{(JU8l+cYL-zDH13{agzlktjSbFy(zxxZKciTegtbfaI6cU}F|L&FQXXmb=ur2YY z9g4>H%0!{xPlv~R^L3$X`tElsDQ@-}L(e07-m@+|lsn(SM*u{1sln83Ewhg>5`2N~`b%g~VDaNNF zMB^NO-pT1KC)*Ahlv|5qt+;p+W z4IDX?`Qj>cDrY9>kyNNubSqiif5_qkNV>hWy25AaW%xeS0;1N1M|SMQ_~UFHa9Ah7 z(tFS*4vgbUX-rJ*npQZrI4yoc2COf%K|xxG{c)UDiZAWTasA@CMAxFSuLL^_S6et6 z*M`r#K#05i0Nt1hncfr&DZiqeZO493x#ZH}wBSPwSf7+Sf0s{$E*L?CxN6RI&*Ut8VWdA~Zs17bZsp@Ht@i{^>KNXk&fbI z*f_nT$Y!<&;u{grnFQ>%O+O$xKw6~2^@ZeMgaUL26q@Ysvs?^Wth{z5_#5)gmF}a| zm1%&B?9K&G%;6*5j==`^=KZNN89LFm0=a>BUe@eX6~G!J9Y3r%l_SyFwM70^z65i^ z=1BXnmRpz5N?et_bs44I>M`(i4X$*Zwd5|o7oMO%^mh{euHQ!<3osV2I1 zW69p*T zU~LFbg(YhECP3*EUj{E~%4RZ$8%f*5HEPJ}`c)5%)fK3UNXk`J_c7K&5jR^5HhE&Z z6xb=SS>&~!mIiK-Mq*$)`3Y|?xP69cTNUv-z?=nbbnp+N`j{fKM!lY_^ljx~tNy0X znOcEuiDYs9QN${Kdgz-3KCchlI(=RHk@vH5OddQyUBM+BVvQ1Jt;u>wnx)$0F=6Vd zv(zR_H^TUvtR>GTT+Z}ohP|w(`IX7p(g}3^_-*oiuP2V>85@L_(kl1YcZPlWR`_dh z^N;vJL;U?z5y}Lv>W7WxU+1gZGpm{q!8bpa7yZzkTK0$ssIEC5MTTZPK1yr=HaVy& z=!6*YDl$R;ees-9u>JL#DA zBEGsU{FKp^J+G#E8X96V{mF~OFZiT4@>@dw3hvQbySqPTEh#-nkw5qCnj53EG(*O^B~BkT&~ao&9{GU*-*RIXHIZZa01!egux398#Z zZ-e*;#imcQAI?74<1G~G_>u!7((o4vigqwxuFe16c21^|%le&{Qwzsq;VA2}S=r=t zgX`-V4^YAfri!J=dY>}%q7aUTl8mvzYlZ8@r2Y?VKA`2j&E5vYP^Ur z5)!I$o!V$AEHOu)hsi}F9TwfYmI4%XWra%!W`krV852F2sogF~Zc>j97If0ctK>HT z#K7|OViE&Lq;-eq;I5t9zx}B;@zj6|CD^(E)PfvpzHoKj&;`+MO)+Mz%%ycXj_-7Z z`mb}ex2zWgGl{$CwyQsBV$Si2EJzG@TkK;F-kE=JD51XPV92W26pZVw>xcZ4YRNV+ zt{A+bBP8^xhb`{jhjoLZp4>I=YW)JN$g?_fs9b-Vc=jLQ-hwj_e>icc3PT4T&Bagn z<|)ZvdB9@*X29`8xF6b^_gQ#_)lbK1|fE6U##kPxNw9`TH^0uJg8@ zUtWxJF-C$#ZZ0t^NM^->c|SUG8OmMZP}-^U_h8?cnQWd8%Q?G?SEw>j-<}!PPw%=|St;~Zxw@*0ytyFo)of7>rK&ZE4ejF{4OdqPwd zVpi2GLxX*cQ3Y;ixP#UGx@~@otPX%#4`Y}JiCKUh(U3{tOOKMAXZKB!^o?0ku}>FiQHG1zamrh?kabEpWM7flV%len3^ zyp@Z?8q4ep3Sr}HClHGRud`y7=qqNC^$V7q0zLv|W#xCzo`jA>Vpg-e?qky>ZaP}C zaytlL@9nW5cEQwb)$nCUn+W~`L1A3cZFjOttm2-wh&H`Q+92-j%xR5sviwzQn~h$A z?UQX9-F4DBk$lNr7Rpc5>#l~MnkS(JU&SvLJ?;#RDGmZXePu5~RvUxLPfhW>pOi@A zZb>Qz*eKrRV^Q_h?DjoN1QOyKE1~l$D3W`MrSBuH6aGj~zTP%$_Ynw{Fy6F)iAe1o zeVn_JqJX*f$VrRex{bupymzmsFafTiB)3U$+P~@cbkttc-t|+v=du?vORZ6)E8Kk{ zvxG%Ife}+%?j*8_q?>8lG2y*j$_@Qt)&~(^2;+m|xAM?lZZh2?4|%dYQ96yK-syw- zOA(&h#{X)zkWheYoL;=U6{k0OaX>5{A(<)&)P`;6ASKiBB{=P^V#67=X5pZo=~B<~G-@ zqaxIiwpkLsR_r*Q%sPB;j}r}izl&0W73+CVVC(L&rqqP|JMe0GfcL8OXQfI-s_Y^- z#sLLT56sEe8y&-pNZmS9J<=iQYubCrcQ;jo1|Rx$uoKD#8;&*WYWJMduv49I%{P9B z((Q;Jn$H3!dXWMedRMw8vKe+_#klBwGL2RVX?d^BbHL5}u#B(5nVLx(YumxOx$2`) z2KZS~7X!C^>XR%p+baC@3M93M-*mXPT@AU>vm_mh6S-9Nf?S%}Xt%B^&b7lrS8Hkl zv>pZ4Hca#`ttBA&B{C8f0{t(n6H0_vZ1w-Bw2Fj2To1^&R*b%_$qJzmjWFSLXTH`t zU^@U>#mbGjFJhW%6JUwZ6vXOqG3Fd9m=3g7f5e_rFA?tP@JW@cVB6GsnE7V^31vTs zHQGpY9G_DoQn})yN}czSZ{0%m(l`mLM264dm)@{Z#K`N{p>S}2yAR=#4dY1%)^$k7 z+-1N|YYavaLK5yeg)+_9tl_5R?WTiy_f`e{@;&yyDAuMPP}Bbsb}l>T`6d$B8{RFn z%*^i@zqASrJ%I7>W-Y?!W<+N0Dd@QwmRbQun!~qhI@@fEX@yM=%_OUS6BrdF z%mPwsEeq>MhMI>}1o3(%(Jt(XJ*1?&d#;+uBlK9XE~b0O?lY;c{IL?^v%Wl9JyDpI zh1;=zj)`_BL;qa3^f%SFV)?3Y?rZWs4+Fg)U5RiN2zY;VMuf@NJ=;yU?X)INh{dw% zj2rq|&pXvRrex0NbAn}EJ56VI<~3?2L%02y>`u)^d7?GMS$P zEN4Ou;W>IlR388zMmafLOR`TKT$kJG-=`LeK#^GG*3`;@D!=gId-+9WbM~2#G>VR# z%OL{z@HzXH&s&_<$~V*JGOYjd7W`X|TCGpdbY!lIlKVGS9n`EOs5oiwqIOOUphtbv zBofjYcZudvD5?H@cL_HZmzb&uFu`e(fz+(>a3p4O^IluXGwznu|DIy1kSM1Abiy-A z$8!Z#$KegE?;qyQlKtXD_}vE#dCnofu22J{W73`#1ZfNgtmNzCic{78HVc^`P;tWx zQ(O2Ys``3DmOU=yLC8;6)ho#Q_w}7RrVvgnkST2mT3(3pbeL~(ldBOMhu$(TlkWEx zO~i9bCJckm7r_TU)pjeo?9aq;k`F06ORUNUqtq4ZJ208w?@&=Xhe@)7<9p7j@^;d8 zJXWSS%_4J7tDGDgvGNPZ>T;rNf0h_9KDB+75lEG^gF3Bb|1z7pK5N34Ymo>kP~eQ2 zn<2YlIBIVCJF`kMAp9QsKFJFK5o3c7U)h(RJmN}K(&8e4hx5HT;SoRIIHWTvMy;;0 z6^VWT3Emi8E=*WT?d-h#X>zF-x!)xFZtL8xJhMcpi^@ zrr}?~X`l+R=3%dxjt;`wj>Aci)pvRUr?OXYQOGJ167kb}JNZ8Ob5?_~xE8&a4`A>~f&U8L{B znRk5|yG^PTdGF{n(I()L+7$!mT{L(dF49rI$q#KK(M(!57ooo%HU+IayqM%2mHk5h zN>;o8Jb9{sxKUa!7rBHJ1yCOH=yMs;WGujsr~k8p_(p2%2n2oq0XF1MLz@39`}Ow_0uo7Hp7EbkX|#+PTB*X29x z-LWjwk-hUJHplP_GoH){0dGAqd~T}v3h$FSx&|H{VgK;Vk+pX^+pzy@Zx+(zgM;X~ zRW)_S%MV=X;gJ+PJVB7rg)Dksjc)BbFuV@ze|cQzJAK35mbXu?hcah-9U4gaJ}dnI z9c8i&Kz!h%1^@S>JeNblo`Oebnw#6-XHUZI_ZIZ0 z<+>mc>vuHGBgxkx4tPsDRlk3#fq!T`iL8HVe>n1*vEkG668Rsy4R%b7RA7;fk8s(a zV~g%o(3`7qrInNncn1x0{SCCW-`LowtfJDL_2pGGw+Rw&&U8M;@Q;Wpx{q1Kj8wxfc%Y}Zc zjWo)Ji>&|H2(9q zL#Vfx`2IX)BK|B*S2!>+)#9t8IRU&ou48|F5R(zZgt!gnFe|^ijIaJAg<1`)_m6=vvyvyx2~$ ztGBQH_8zY2f7zl9#lOVHrH$4fi=aF4r{;(U8e3WxH}YV@JM{gu)@7``E|Q<^YCB`% z8$NL%yt{5NxW8^uf5OxBH^0rfnpvnkd(seoJi&$J90(oWWabZcC3T9H6JKo3R}~xy z*O#q!HHpD3z&g_};&8@hWiPLbQg|C@DJS~{X=&ax~gv)&uepa6^lk<;)urv-^N&f zmF=VANZKPZH#au~wR0`@JOeL?g+3N|kX8b_f7hRhgdN|Ro12q(Y|*!`KB4S_`xsBF z4SyAI_{iz79BXymj)Ni=mhgpkf&AvL-Jny-(o`r~4*OQtr26);#KxErT{J`=X4B>N zP+}=|r_Zbxpi`f@kv@MkaLeI$&6U1CDPj9=*IzX3BKwac-A48SVoO6vYVr)*3g1q@ z7e%p{>a8GWlI{$yl6rycGU(+%C?5W}zowp^&ZUg9pZL@SStqZ03SOBqiS~NxMv$n| zBWQQF5H{FRiVD!hy1KezTvyylJp|z1AtGM7op0|dmDVN6vg<=Q6%`E?U0TG(+MaJs z7-3@Kb%_V2Sa4cFUS53qk=(^pouUl=o6yw#x6s@qz*vOb?cf}UqbC)j0YFN^{Xg+Q ziq7)gv46dTUv~+>45C1cl@kM-FoNgKb zKha0^{LW#IJ(jIaU}Jwh(ho5-7WMr3^#)jcpdaulI4lflc=bLQr*`cgcPGYpi(maA z`S<_OUF@i@S)2q&?s0u2pJZ;c_1`%k&4p}jQGNYd0n{0Mm!6>qAx?qWii8BQxy5-X zC0$+JV{f_Nbg^4EOgf$=k0dAW@uo>Ar;L^aOq>^9}gc+K5&;@8dpm6J69W< zC4?h^6h2p%E^?kkN}u>+H$mRM_L8*aJ?%YUtr5=>d09n;MUmE&$#Yu6a&g> z5E7+1^V+#bV4}zu9RS~=kt7>67qcd%1TiGHc@PZN;70l{dEF?(M4X|UNJkhElalfi zkRki+o2Eja#N}uKN^h@(s+LxrL>Oc${N_ojw2ck&__*@4ojtpDAzzA}Vh~tpe1XZC6V#tt2cRjo=rpSu=!y1q1@Oa?59sQ@HuTze>A^bE*9ufCB1Xb)=Wm# z748f{!ggKxsc)!nu@Qw9_wm>rC5JhQ*Ky{0?|fJr9$kH8zj8w2s3kXO8qF%a7x(XJ`*@ z2GoN6?F*MyKSU7ulFVd+^q=w3xcz?`8am(Bk_kD|ib(3`JZ)qAR(=!Cj5T5ZdHUr3 zUH?{_%c2CNBFP&y4Zytv7p_yl*jNmpgG1+PrBF_ep>BshD9NBar}2(Pj%R!VQ-o(w zTAEt1sXP`c^MxeZ?dMb}$hKf}Z9YfzSiYUGgm7qx83oXjkeOj zA$9NQY;zrL2m+504*7qb)F(w6M(Fo@BvXD}eu0~NbJYM3M@I?~$WRbBw*#wVF?eM{ zdT8|jrr_jSH0W%}Fq~T3Ls^~EdQqf}u}pGGO1-8uG_ffe#LxewJ$Ccbu)Zy%8uLFi z^-qylzaZ8PlPcCPUS9sSqm97)`~b(ef8CtMpI^Uz9U1~tDP|NdsYPr-bQj1jB6|LM zq72Rd>oo)sY?hPP$4Xa86z!W`9P)UnFu~5kVofh--2tb9V?L7TJc+K z4HF}NRO5rDsm$PcCCRRN-_J-@W z^fsAyyw~1E8kpL(&MbzuWpxB$GS5!T!%5z<;TqQBcaiC%dck#$F{MN0smH}%NV z;UnZg{9oPtF?~qCl(!@L<{Hbo!`*JzN57bunVnrf)af$PE3f>E6jRZ}FZgmH8G@2d zE0U4Ve_~xb1QhfNsX*mAwJ8m&qyTT&}!%o^wriht7EXE5HLZA$kE$K?QRg>{N zJ6<=b++>Y-H03!1jfe^bEWzwtGJlljAuI%K+D(Qv=N z>8ctEe25=Z$|E8r^n-_(w};ihp4Dfh`BD%+EbbpPvb>>Dn~w19HfiQCc{&Lj+LE3B zwMu0Dk$zvvvb%d{Bxs*D{M#p7X(fAwKTyGBNe>g@Fnej@lXy^M=lpyCYx_gEc+jmT z$&U|3)0%t^4y4u{cgW`Eny{$tZ40(G(!I+<`zl&EgA0()=`_=oa>H zFnZQP!)_;Sza0o0MG+R~6v0aaY)MTL1}Py}T~G=Na|WUrZHO zmbDPqc2fgS!Ci`m8uu=dIX8UW$Cc43P}?#dw<}+kXMMn^fmc@xD>yspJFP?BtR9l~ z!#ZsH{2g;vYm=J;QQ(PXAKPv)5pe^ z6SJe_^Muzi5O}MhO<;eqkQDMo0z^bW{FX2lQ|ZBi;E=)1qen|V))D>gb~S7M@Z`}( zP{tA-w>AE$_Y-qk$4Vz{C9{dH8wnI7O%!P)<Gu(<)+%&c&B>qXdy~XkG2#dbRrgzB7K>O-A@mze-nY+o|CG#m0y7 z^P@vap$dbnxcJ$h>+OozH$rB$x%*=DZ&}7ct2-QJ>eDm&HHlS@eH1j;$z8v(3Ga3e zQOe4Qh7U&5HA%B`iNDQ;STYKmuIm9@BaG+q<}?@YAB=_WH3PUgv}!k06T#!&VC<;2 z@Dz8I&zt=lR;Rh)eQ)BVdrA%fzi~R7`O{Dw504vKWc52}R1ALn$t80bq=?H_QA62h ziL1N_gLbp#sL`RNzJ9t-DjM{zvo?uJ!EnG3ZpD+8EbX5o%LWD`2Ataf%+ zedfigWS4&q5f`>l<*8)uB$MIQVf^Boa>-JL4V3T7xN z0#O90x9U=B$7-9cxd{+}Wh6_qk0zK1#Fjz-Yd;150Mn>UR60`SyN2#;0|P1VnlIBz zqd6@!ecGH3D0|vLe)o|wsp`R?2I2B&nJhh4%az&EFO;%$^_a2nZ{r?e$y19+E?3_b zOn4`3k0=sZi@e#pr~bdA#wOYAHFY> z2*a3M%9_yR8M=}9{)&LR%Fz>9tjXGfj#xL0FP|2h)03&Q!%{-#pMm3IY@K}_7n z=0-zP%b_ig0u1hNp9~>w^v3dvwE%#PorA!-x`+!i2qj$I$(vmEA5Xvb!>TQsEnn-HE zCwC<8TatX&F~jgNdAPQ=K5z*cd@!G!jl)}p^0HCYuLJ(C zgW%Idj>n+@CXZc9k|j^X2nOHi5_)kf=Z!@N3}D{jS!f($PWZtFZ1KSTwqhUn9ZMwd zhhqANnT)Y5-7TO3Rq=Zfl60(4YY3wl@k+i&BH0ar!v*s8q<*B_P0X-qwEd)~M|L>2 z-FgQ8n)tkFxbpm<y11Ak5EztP{6Q+e(?AiJd^AB$?C^U20lC+pklQA9! zcn$<@$kNb$Prx41xJVn#TU;6p1B@QglA6E#3QD<|d0&0>0q^?Tb-wyWM@CnAA?a?& zJQ9Qf6Y=}Ahi{g-*$SB>`TpYYtXTslzN)wos-L{a8Fhby)9mI!)#5C7kr?0#*yml9 z(1k7}JE8LdFL5VUl#_9}BMo4A7>{VBzxRs&N0cN3{187c>FS)Hl?^0wn6uojc#tM0 zYIxRILZ!7ovoa)vdeADG-yAiKc<-_4LJ9yKN4JR1uIz)d3Uka&Y=M{7LFTfiEjga> z_(CaN@9RM*T%W$b66O~RqLQaZA6a-m{~zMsIx5PjT^lD<1f&H-N~NV6BnC;57!{>q zK)O@9y9A|S2nFc|hwhY??uJ2f=$e7~J@~%wIqzBLoZnjCAK&`^U@wMv*0cAspF6Jm zy6$b`dD=3TqAm6y*Gx>I)+=qWg51V(@|ry69;p72z2i%r?Mu5;3g`D1?sfw17b82W zpw_RwZJ7B-S(n$;8yVfW_-8%-4^^#8>b0LDT6~GiFqei*SR~GFXk)r7snuGp0&=*A zOk&LhKweepowFJC*jn1#XvKP?^+)p2k4miXN#(p_gWg834n+k*VzAWC1?r2d`}3#M zUKCAdY?)DnQo({k6B_elh*jWF;BBfR;p-G7;5zt8gNvIYD#kH4wZ$346!yx_tW z{viSrT(*6enVhtRaFZtb&Iva){f;oleGM+hlex7%z0XEc^d=mtw~<3`E;?xugHz`P z@7hgDygv8Fa+|kX_1WtDWfdbclRfVt)+TpaSAP`&@*I)#<7W`n`EYw%+n2Avc_7VD zi}N9a*-l>PH@0I%3>`hg2F?(Z27eTCq`{NY;|^8r!|1O_*ZWk1%lrF%rfZ-6g8I+< z9iqJGq~}Q;*R-x@`nG*HVK|E=71bDc6O5LyScimXu;4f5GHpX&X7{__D!Gaxlu(wKN|JL! zxG;tVTWEXQ-OQuYS*9qypWUT&KsDmv=;WP{k%eJ+g30Nrg3eEKf3qE-AGtZ|RseSh zC@l5VRDlTdd&QMzNZr`0k540l=Y>TcLVAiA<@JhT7u7EWsnO!W-QUTuyW7jfJk|5S^^^l<$Lb!uomqHBCCI}%0o?txs8q?Y`^P; zv-cstMq^q`HfSX9N1Re;SG3@E?-Pl^ zX1T6Yp3+e2)M@PTc)Z6iD9m2{$5T~DNE0h5;al76g@=d3V-7mJ z4ptnS(S{6DWsuFQ(;ct#YkA2Fdr@CH329|zfoc~QO)ahGi0*Z1EbsFAG+E1jm!LcB zHH#RyprZ*hM3t%1so=4tF~Gso1Dmy zNT#aD7sZIPDMgc#Pv0y{U~P|9yskCyE`s>BzArjIiA(lg=}UiZBl%E;PXB?I8^=U6 z32paLJG5WxYE}0hmV(+l4A2YZ-?N+5Z(h83scz})9w?|`G*x-g%cflKdWXnIuiAN_ zc1yd4w_^O~!{XxiCw~^Jv^~{b?op*sP0V_n-S6(}i-?c!pP2m{eMfGICsBrYzU+4J zS=4Ybl+yGQ)C#5G-D;x}uK=R!A$`H;)cr_=k19FfrI)2cJ~_xb?Tai;y;pQ}AXA8w zn%Gc=?0Y9?m+#qn)sazNFw2Ha8uX%y)e4#nhL=3rF^8)9jK?U*4<@xZ88A z0Z+HNf71EUncw7#(_EInS>03H2ZB3<@=2T{uD-+>y6c@n66EA&{J%O#mY$SY;)NDC zTVwyw`ysAUuh^GaB}0szLGw~0@8c?i@Py`j>pz-lhW}xD)tm5NIyyNiDk|oxNj{b-@Bl9&+4%xkjh^1A(9bS@sbK+n zp}jvK9||XUb7y0y84usLtM{fpGP(RtN3T3Wlud``lakSY9^6CDd?e#ZrHbKNzPudf zGxK7#VYeGe5@TNMp=~N!k}U5x&y_%N3=ey!S=6|;<%V3hQM4?&ChQ^C#o_Z}simBl zv%J=}X|VItgzeF!Vx|%|eE*<3V|zxy^2WEe@Tb?vl$1J^Iy*B#|=nkI$1_ z(#aBn)G=w&MpIDF8$qZc@Ctq!Ce5fFB;X3Ix_mRE-$SbQ%`vlL!2KB0V}=dU&l9fG zq1gG^AN%^r76ybpZ+N`gn@Maf(&10l7Z`gYk6F7W^PqNn-vs{F=KFyySttmWRdY7|8chk?_IwGlf866O#oBYKSJi4|t z4VKXlIq*)zPJ-u@0eGfMr!ev2?s={Z`-TfcJZRI;|E0*f+%eLZJu!QvqqU;89?5Ft zaO)L$nt)=$1rlbqIB#}vbOfKTbHlKu7mE01EAdK6=_w~?Fz{Wi_cSX8u(pvkHQdK= z$-uI*4EIsxPE!MnjKl(6@mN{eRdVab2I6-%MD!sl(C+0k!u(+c(xeBp@ z>NbZbd;Q<`s~NlG9Jf-5t`TX2#Ur$JE{BZ1nHp=vBC!qK>Kp~D5zssq+o1_NkZCe^ zFfOkwq~eDSB3zmJT}7kP>9x%jcx`d6!N7?rq{WEzO~XBY+p7gSS0#tzf@~(&lBbItGyax^B=`3Wn_s>ESPks ztBo;+cesv?eNd4eP$WG{!+p#fn9}h);$`0%5sjO$gbkMy7aS{?OYf181D{_1IdM(y zzZDceDmOR#SkE6YxPlvNW}D$p5K!NP{UNvFhCzcBtA4E)Ry?*E?OMl(jf9=g8JbNQ z-bs-Td%S_cKz{tta~k@imO(~OxBsiAy?r?|?{?3&(&(SsU#WNTHIFyt%t6VDP858b z8EwwxjlU|&C=X-G`eLe&h02XDU4{xg_&>EdCN>Kt@#HB-d&A-rDuDCaJvQ!r#KU@Y z9>aZMx|cUV50{5$T4^EmE@f;`UpuHKots=ml_-ZMJqS--udhD&+?W9MWQ~-|R+<-g zS-FbtVu^h+gk#6ppIUOYSR)ndv~I&0cZxY$?E*zv`EdI%C#_2n(*4^W5KD%!y8`t-G@p&SUFYN?UklG{MM7pEtPGyGeu%N@qcv2SY01|9X8Ph7v$D8>_Y}6lk+Jy2iP&U#1}Nb* z^5aA2N3-k z)LIROa=j;>q>cB*!J04j^4?xY6w=h;;uj_%?IL9FM!6%g?HnX?f5i*6ioQ>b<(jB^7IPYClq;{B1IAwT8V@peq{yzWgtayY{bNA z^rhB=&2G$vhrDYdGRgc5V-BRhq-KH^HGL|zhmQ}MJIl~Bzn0`oTt^I1Rmx{zvvUP% z5&h;Cqj`CC8;PP*-NskbSCTrbeVGxp8`HD1mAepj^Sza>NbX^rW#D*k7Ji06U(~Vt z(eZJDFt6r+7D;yy;8_B#hEX8myZPDZ7(%8PLLU#DW$bHXrkdm?H0Y7~=_)4q)V{Mu zfn~nZ($}XHv+1y^|B2*w)?%OoPUhmBTFAynW3S7E{JuROO%}cJhLYy@&&fMNKmX7e zmV8J~9-E%t^{I8Di-4M%`WYD2wdn0x>!Om~Sa6%Zr#_N7s-uoA6TKKIQe)>EreS#t ziB+R)2`;|0=a>woI9wJJTSE-k2-NrFCPm(H&e^EqA9eEzPQqiOO7v?H+Z?d)4w&XE z&2ty3$XnRTRxSi?J-aQ)@G2On;l97#y!s@NS|}@pToMjOzQLN4vTUb+h^c#-UbUs} zc6DB+o7gqjK?MaA$ZTZ=7_3)2SX4|O&^X_I1ogcy$-hJJjje>W9s>r~-e@@;edv(W zn2d#|*rctw#_qj;ME+VgAO&^sfSC}Nsr*Esr$184(&cmeZs8_&uyJ=NS;D^JuP-A} z83K_h-)$<|2&olH7A)7JGohSvYkv{1g>LizW9Z1n?K{-HL}?&CgJz&J==KRrJw zXXf^(A(4B6VM&_3?c<|$*dzK@hUC7K{-}fMxcxHj7qeAtaGx*8Wq)=k1nr}Eks128 z;S75usGX?7r-O2Lwn>Ii{5Dj5+t3)97FG-2OW-0l3(tXBeW67x_{>hL-XW3 zZea%W<{9yWU;O+k`ga2U;d0HfwjYNULhB9Xp46xq?i=-M3d|SnGo^ldBt)U1LBF%e z^-m9~Ot66q>mO*8e)&=o;D1FL%Gly8w+G`p^dmJrQ|v_m1OA`(2C>qJ}`K z^TB5z5F(`H=_bWIp>XlRev2O^1qVF%F8=*PjDDeXD&6Mikqu3P7!zuV;&{}&p=?)c z?2^|^X-dJ-KMCl1J3}dX(9MQFKkRF=yIz6yS{rfpnSW$+XCzw2#yR!jeSEMQU4qB@ zp^-QxST|0Z$k4A*Trd)%^-9qKHzy|tWpsF)KT+4W5cHOYO7bJ#S_n?O3f0XJ#Rj1% zH(<`%(c9eM^cOqvK4aJi+(M>7;1j=g) z%iCP}ZI$ij-*sqJIhxQa2|($4v2Pdu_#Hr~Ngm77gk53B#>JU0H8Wte?9D08r;Iso zkEcY_Vu{dFcL3BHtlt$f3S3Mqm6oSCY0;cI$(=vvaSvVd7*8K9dDXn!K|Cs8+P}a_ z`Vi1*QqVR@G91AsjWItr+NZvQ7Eb5XeevrYjg0@mo&=Z!Qa7A2uoXpg{avy@R&qx- z|dY;$ZLSfPZ+^5g)VA?x6w$IIl*7BQBz17#J1AJ?EjQTY+2IQW(CsrMs z1aW~MDSL4&E=mFn#2>YkWQX)YE&YP;)_gZUw%;vjfrKkHgg|{+Z827O8I#;bk2Cx) zW-x^I9=V&jrX`%aj@9xwPGZrun3>NUwf3qz`(PXEK^Y*0kB4`(HCZBdEz^-Kd``u@#Geirs^3|1_{<9u!7Ox{;6FBo&Re9i zhA%NWwOJ7z0xwRiL#vp>YeDfk%Q4f8uXSJW)-t?t4nw#osQuxMvH)|!gY!&@lgWDP zq&G@z6Rlkk;~>$X&aJ)bw7{E-GQJ78tGr*@=p8Jx8>!q? zfqVex)*QeGt7Hc-EI*^bh`71RpzU!o7cAeEgoDIGs^vy@ zZ*IPjC=LAkm$;swGv@`s@0~sDJS}+f=#{SF3`TNoKNgPGM|FGiHVciV>3y=5zxDx(9 zu^E7ThwN{m?!VpA|9v9z|MLm(fNh$W&*UoRC9g&-2UW8Pc??Imf0j%>f2=mQRiUi; zu)p=jFoM$%P`p~}v>0?TV>YU`$N|6j2_-y>P&uRLv430aH3`_itc_I3Uf4kBy7j3^hA8x3Ood}(lfd*Qf_?1F+|V=s;u8Mq zGa*e2!SHSq6T3hdjKBstAe+A2-8OW-3MpaWy*jffT#r6tqGyDnT z_S_pdth#9r=u)NuY29)X+jVDN7+E1+#uT8t3MxnLSM7lY*vTV*xtT7SyW$j z`>kIMsYBo?Rf@NS_;G{Pi(a4^Yei+9R(Xv^B8Lzd{+r0@54P#(-*G$!%98$5Nys_< zK3b`&NsXfB>-q5^C<_dmA$*(U9i@8$+^yWJ)$)#hi{0ECf_T>j%)kw+{XdTpt zOuy%)7_>Sg932F4MkqY`vHVfoebF2DAm7sI&lqjePv=UQ>m829rQDvAg$HSu*qE4P zR?}zr5?6!8FP3pN2U}B$9PF+=X3n-Czq?_xIb4J9xe6$qEEbS&ONK85Q1xzK(i8P< zz#Po0k|-SDwgy{0HP-Y;eCL9ly$yuZ8{*MRt8cM#5xHQr#f0r5kP|F@H9>2?ME~a5 zZ?R+MZn^Mv^YHjE$70<|d~-bGA*p>SYBQ(q8`I#t-{;v6fq47@mx_z<)x^v%(8n6AyM&Xi#Zg~;n` zsY$wSnDthMI)WgjGrzhCKu1@xHAU&)>>V6dawzpze0PMaZi*0YZj;$S@lCzKTV_Tq zS>dBC;WbaFqyh8aQU1Et-TIeEd6K~SO3(wU()s(*^gO$Dd4J%k@|IrDT)u;O_rKTl z6ROgB9pdhG*tin)JZC3}^b3!2JHwHWvQ&91DT@ORcGiWW=#w$C>ams zU*Uwvj=Gu0GN%?vYda@UNXQJ4Ygl>U;~`iALo{eP2JE`wNnDM7 zUriP>c$_Xiswk444O_B*A%2Bf6YB8=`bZ_$`%w+(`0mY_)QYg~kc~=N1E_VOoiYg* zJeH@&MTthq@0@)e9vh2Hg1FrUdOoSjD>y7KOU~Bpv<8?#N(XWPh!JX*p)cj&Kyv0n zsHy#aLo*{oU;KPP3E(wWtTqYXQZ&@^7Kgw2%V3sQRJXM)VzL)i?ugxH%6;p|@Gy~X zp!X^}qUYfNTOw2q!c%pV{IAjWd6BH@o>HgDZ?!uj&xIc+;sh;HOTDxt+5aBHw|dD< zMf3iZZ3X{L2PL1I>}9K~OJjX!{?idm=WFK)6s&*T{j?0pDdosn^;A^HI|VYt zeCtTQAB;C{;x^e}_y*B4AIaX)(n=8*Mbz~b$#{ETm;bC>?=O?w+;i3c`vtPn&{*`j z4cQ&qn`lI8V-n~~S|=t-W^p4FHpLY;TT6?tkNABq9LQXwXsnKklmSy{UiTs?4CG|t zjofj5L-(r?wDy~YyW;v784g16gq|^d94RfE^j9Lmol_t^-MOZjP6{j0dCH4ek{bsz zh(7!pS!hG7>bLi+VauK~0GobZZeS%;^kjsPZ|*^!lL1VD4E90>RiH~#|GA6y$$^U( z&6uJ{VlHf0_5~4s7UPkOi>+6(Q%kfla?yESCNE)u*+ >G748njSvC=oxk)Mj5Kw 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

\ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/additional_content/concepts_az.md b/i18n/es/docusaurus-plugin-content-docs/current/additional_content/concepts_az.md index dc9873fe..287cb303 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/additional_content/concepts_az.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/additional_content/concepts_az.md @@ -4,15 +4,15 @@ title: Conceptos - Zonas de disponibilidad ## Zonas de disponibilidad -Cada sitio físico dentro de una región dispone de una o varias salas privadas para nuestras infraestructuras. Estas salas están exclusivamente reservadas para Cloud Temple. +Cada sitio físico dentro de una región dispone de una o varias salas privadas para nuestras infraestructuras. Estas salas son de uso exclusivo de Cloud Temple. -__Cada sala física corresponde a una zona de disponibilidad (AZ / Availability Zone)__ y es completamente autónoma desde el punto de vista de electricidad, refrigeración, cálculo, almacenamiento y red. -Por lo tanto, elegir una zona de disponibilidad implica elegir un sitio físico y una región. +__Cada sala física corresponde a una zona de disponibilidad (AZ / Availability Zone)__ y es totalmente autónoma en términos de electricidad, refrigeración, cómputo, almacenamiento y red. +La elección de una zona de disponibilidad implica por tanto la elección de un sitio físico y de una región. -La consola selecciona automáticamente zonas de disponibilidad en sitios físicos distintos para distribuir su infraestructura en el mayor número posible de sitios físicos. +La Consola le propone automáticamente zonas de disponibilidad en sitios físicos distintos con el fin de distribuir su infraestructura en el máximo número de sitios físicos. -*__Nota: Si desea una configuración específica para un contexto particular (varias AZ en el mismo sitio físico), es necesario solicitar soporte.__* +*__Nota: Si desea una configuración específica para un contexto particular (plusieurs AZ sur le même site physique), es necesario realizar una solicitud de soporte.__* -| Referencia de comando | Unidad | SKU | -|--------------------------------------------------------------|------------------|---------------------------| -| TENANT - *(REGIÓN)* - Activación de una zona de disponibilidad | 1 AZ por tenant | csp:*(REGIÓN)*:iaas:az:v1 | +| Referencia de pedido | Unidad | SKU | +|--------------------------------------------------------------|-----------------|---------------------------| +| TENANT - *(REGION)* - Activación de una zona de disponibilidad | 1 AZ por tenant | csp:*(REGION)*:iaas:az:v1 | \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/additional_content/concepts_regional.md b/i18n/es/docusaurus-plugin-content-docs/current/additional_content/concepts_regional.md index 6ccbd7c4..05426ee4 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/additional_content/concepts_regional.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/additional_content/concepts_regional.md @@ -1,6 +1,4 @@ - --- - title: Conceptos - Regiones --- @@ -8,10 +6,10 @@ import iaasAz001 from '@site/docs/additional_content/images/iaas_az_001.png'; ## Regiones -La infraestructura Cloud Temple está prevista para permitir la continuidad de actividad de sus aplicaciones y plataformas. -Dentro de una región, usted disfruta de una continuidad de red de nivel 2. +La infraestructura Cloud Temple está diseñada para garantizar la continuidad operativa de sus aplicaciones y plataformas. +Dentro de una región, dispone de una continuidad de red de nivel 2. -Así, es posible definir una arquitectura técnica en la región de París, utilizando 3 sitios físicos para permitir la implementación de una plataforma de alta disponibilidad con cuórum. +Por lo tanto, es posible definir una arquitectura técnica en la región de París, utilizando 3 sitios físicos para permitir la implementación de una plataforma de alta disponibilidad con quórum. En enero de 2024, la plataforma IaaS Cloud Temple dispone de las siguientes regiones: @@ -19,7 +17,7 @@ En enero de 2024, la plataforma IaaS Cloud Temple dispone de las siguientes regi ### Región FR1 -La región FR1 está basada en tres sitios físicos en la región parisina: +La región FR1 está basada en tres sitios físicos en la región de París: - FR1 - AZ05 (PAR7S) - FR1 - AZ06 (TH3S) @@ -27,8 +25,8 @@ La región FR1 está basada en tres sitios físicos en la región parisina: -Cada sitio está a más de 30 km en línea recta de los demás. En promedio, se deben considerar 80 km de distancia óptica entre cada sitio. La latencia garantizada entre los sitios es inferior a 4 ms. +Cada sitio se encuentra a más de 30 km en línea recta de los demás. En promedio, se debe considerar una distancia óptica de 80 km entre cada sitio. La latencia garantizada entre los sitios es inferior a 4 ms. ### Extensiones regionales -La apertura de nuevas regiones está principalmente asociada a las oportunidades de mercado. En enero de 2024, la apertura de una región en el sur de Europa y una región en el norte de Europa están en estudio. +La apertura de nuevas regiones está principalmente asociada a las oportunidades de mercado. En enero de 2024, la apertura de una región en el sur de Europa y una región en el norte de Europa están en estudio. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/bastion/bastion.md b/i18n/es/docusaurus-plugin-content-docs/current/bastion/bastion.md index 51e87cec..8630b123 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/bastion/bastion.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/bastion/bastion.md @@ -2,26 +2,28 @@ title: Visión general --- -El **Templo Bastión Cloud** es un servicio seguro y gestionado que simplifica la administración de sus infraestructuras a través de conexiones RDP o SSH. +# Bastión -Accesible desde la consola del Templo Cloud, garantiza una gestión centralizada al tiempo que protege sus equipos de cualquier exposición en Internet. +El **Bastion Cloud Temple** es un servicio seguro y gestionado que simplifica la administración de sus infraestructuras mediante conexiones RDP o SSH. -Con su enfoque centrado en la seguridad y sus funcionalidades avanzadas como el Infrastructure as Code, el Bastión cumple con los requisitos de entornos Cloud, híbridos e on-premises. +Accesible desde la consola Cloud Temple, garantiza una gestión centralizada mientras protege sus equipos de cualquier exposición a Internet. + +Con su enfoque orientado a la seguridad y sus funciones avanzadas como Infrastructure as Code, el Bastión satisface las necesidades de entornos Cloud, híbridos y on-premises.

Conceptos

-

Descubra los conceptos básicos y principios esenciales para comprender y dominar nuestra infraestructura.

- Explora los conceptos → +

Descubra las bases y principios esenciales para comprender y dominar nuestra infraestructura.

+ Explorar los conceptos →

Quickstart

-

Comience rápido con nuestras recursos siguiendo instrucciones claras y simples.

- Inicie el Quickstart → +

Comience rápidamente con nuestros recursos siguiendo instrucciones claras y sencillas.

+ Iniciar el Quickstart →
-
+

Tutoriales

-

Aprenda paso a paso la configuración y el uso de nuestros servicios con guías detalladas.

- Descubra los tutoriales → +

Aprenda paso a paso a configurar y utilizar nuestros servicios con guías detalladas.

+ Descubrir los tutoriales →
-
+
\ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/bastion/concepts.md b/i18n/es/docusaurus-plugin-content-docs/current/bastion/concepts.md index 989b0f1e..8664ae57 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/bastion/concepts.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/bastion/concepts.md @@ -1,38 +1,40 @@ --- title: Conceptos --- -import bastion from '@site/docs/bastion/images/bastion.svg' +import bastion from '@site/docs/bastion/images/bastion.png' ## ¿Qué es el Bastion Cloud Temple? -El Bastion Cloud Temple es un servicio gestionado que le proporciona una conexión RDP o SSH segura desde la consola Cloud Temple hacia sus infraestructuras físicas y virtuales, ya sean ubicadas en la nube de confianza, en una nube pública o en entornos on-premise. La solución Bastion permite administrar sus equipos sin exponerlos directamente a Internet. +El Bastion Cloud Temple es un servicio gestionado que le proporciona conectividad RDP o SSH segura desde la consola +Cloud Temple hacia sus infraestructuras físicas y virtuales, ya estén ubicadas en el Cloud de confianza, en un +Cloud público o on-premise. La solución Bastion permite administrar sus equipos sin exponerlos a Internet. -## Ventajas +## Las ventajas -| Ventaja | | -|------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| Gestión centralizada | El Bastión Cloud Temple es accesible directamente desde la Consola. | -| Seguridad | Los equipos administrados a través del Bastión no están expuestos a Internet, lo que los protege especialmente frente al análisis de sus puertos por parte de usuarios maliciosos. | -| Infraestructura como Código | Las APIs permiten gestionar completamente el Bastión Cloud Temple "como código" (creación de sesión, conexión, modificación y eliminación de sesión). | +| Ventaja | Descripción | +|------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| Gestión centralizada | El Bastion Cloud Temple es accesible directamente desde la Consola. | +| Seguridad | Los equipos administrados a través del Bastion no están expuestos a Internet, lo que los protege en particular del escaneo de sus puertos por parte de usuarios malintencionados. | +| Infrastructure as Code | Las APIs permiten gestionar el Bastion Cloud Temple completamente "as Code" (creación de sesión, conexión, modificación y eliminación de sesión). | -## References (SKU) +## Referencias (SKU) -| Reference | Unit | SKU | -|------------------------------------|:--------:|:-----------------------:| -| ADMINISTRATION - Bastion SSH & RDP | 1 Session | cmp:bastion:session:std | +| Referencia | Unidad | SKU | +|------------------------------------|:---------:|:-----------------------:| +| ADMINISTRACIÓN - Bastión SSH & RDP | 1 Sesión | cmp:bastion:session:std | -### Bastion Appliance +### La Appliance Bastion -The Bastion Appliance is a virtual machine deployed close to your equipment. This appliance enables a secure, direct flow from the Console platform to the equipment being managed, which resides in the same virtual network. +La Appliance Bastion es una máquina virtual desplegada cerca de sus equipos. Esta Appliance permite el tránsito de un flujo seguro y directo desde la plataforma Console hacia los equipos a administrar, que se encuentran en la misma red virtual. -The traffic is encrypted and encapsulated within a VPN tunnel. The solution does not require opening a connection from the Internet to your infrastructure. It is sufficient for the appliance to have access to the public IP address of the Bastion Console module on port 443. +El flujo está cifrado y encapsulado en un túnel VPN. La solución no requiere abrir un flujo desde Internet hacia sus infraestructuras. Basta con que la Appliance tenga acceso a la IP pública del módulo Console Bastion en el puerto 443. -A single appliance can be used to quickly connect to a piece of equipment. For each connection, the desired protocol, the machine's IP address, and your credentials must be specified. To avoid entering these details for every connection, it is possible to create sessions associated with equipment that is regularly managed. +Una Appliance puede utilizarse para establecer una conexión rápida hacia un equipo. En cada conexión, deben especificarse el protocolo deseado, la dirección IP de la máquina y sus credenciales. Para evitar tener que completar esta información en cada conexión, es posible crear sesiones asociadas a equipos que se administran con regularidad. -### Sesiones +### Las Sesiones -Una sesión es una configuración de conexión a un equipo a través de un Bastión. Consiste en definir el equipo a administrar y la Appliance que se utilizará para hacer pasar el flujo, permitiendo así conectarse más rápidamente a dicho equipo. +Una sesión es una configuración de conexión a un equipo a través de un Bastion. Consiste en definir un equipo a administrar y el Appliance a utilizar para hacer transitar el tráfico, lo que permite así conectarse más rápidamente a dicho equipo. -Esta solución es adecuada en el caso de una conexión regular a un equipo que se debe administrar. Se conservan la información esencial, y únicamente se requieren sus credenciales al momento de conectarse. +Esta solución es adecuada en el caso de una conexión regular a un equipo a administrar. Se conserva la información esencial, solo se requieren sus credenciales al momento de la conexión. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/bastion/quickstart.md b/i18n/es/docusaurus-plugin-content-docs/current/bastion/quickstart.md index 29e570bc..582501ba 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/bastion/quickstart.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/bastion/quickstart.md @@ -8,77 +8,77 @@ import creerSession3 from '@site/docs/bastion/images/creer_session3.png' import ouvrirSession from '@site/docs/bastion/images/ouvrir_session.png' import ouvrirSession2 from '@site/docs/bastion/images/ouvrir_session2.png' -Esta guía de inicio le presenta cómo solicitar la creación de una Appliance y cómo registrar una nueva sesión y conectarse a ella. +Esta guía de inicio le presenta cómo solicitar la creación de una Appliance y cómo crear una nueva sesión y conectarse a ella. -## Requis +## Prerrequisitos -1. Tener suscrito a la oferta Cloud Temple (suscripción Appliance Bastion). -2. Los equipos a administrar deben ser accesibles desde la red donde se despliega la Appliance Bastion. -3. Tener permisos sobre el módulo Bastion. -4. En el caso de un despliegue de la Appliance on-premise, los flujos correspondientes deben estar abiertos. +1. Haber suscrito el producto Cloud Temple (suscripción Appliance Bastion). +2. Los equipos a administrar deben ser accesibles desde la red donde se ha desplegado la Appliance Bastion. +3. Contar con los permisos sobre el módulo Bastion. +4. En el caso de un despliegue de la Appliance onpremise, los flujos correspondientes deben estar abiertos. ## Los flujos necesarios para el funcionamiento del producto Bastion -Varios flujos son necesarios para el correcto funcionamiento de la Appliance Bastion. +Se requieren varios flujos para el correcto funcionamiento del Appliance Bastion. -### Puerta de enlace bastión +### La pasarela bastión | Origen | Destino | Protocolo | |--------------------------|-----------------------------------------|-----------| -| Appliance bastion cliente | 91.223.207.71 (botg.shiva.cloud-temple.com) | UDP/4242 | +| Appliance bastión cliente| 91.223.207.71 (botg.shiva.cloud-temple.com) | UDP/4242 | -### RDP Administration Flow +### Flujo de administración RDP -| Source | Destination | Protocol | +| Origen | Destino | Protocolo | |--------------------------|-----------------------------|-----------| -| Client bastion appliance | Instances to administer | TCP/3389 | +| Aparato bastión del cliente | Las instancias a administrar | TCP/3389 | -### SSH administration flow +### Flujo de administración SSH -| Source | Destination | Protocol | +| Origen | Destino | Protocolo | |--------------------------|-----------------------------|-----------| -| Client bastion appliance | Instances to administer | TCP/22 | +| Appliance bastión del cliente | Las instancias a administrar | TCP/22 | ## Solicitar la creación de una Appliance -Antes de poder desplegar una Appliance, es necesario realizar una solicitud de suscripción a una Appliance mediante un ticket al soporte técnico. -El soporte técnico está disponible en la Consola a través del ícono de balsa en la barra superior derecha de la ventana. +Antes de poder implementar una Appliance, es necesario realizar una solicitud de suscripción a una Appliance a través de una solicitud al soporte. +El soporte es accesible en la Consola desde el icono de salvavidas en la barra superior derecha de la ventana. ## Registrar un equipo -Para acceder con regularidad a un equipo que deba administrarse, es más conveniente crear una sesión, que solo le solicitará su nombre de usuario y contraseña en cada conexión. +Para acceder regularmente a un equipo que deba administrarse, es más adecuado crear una sesión, que solo solicitará su nombre de usuario y contraseña en cada conexión. -Para ello, vaya al panel « Equipos » del menú « Bastión» y haga clic en el botón « Nuevo equipo ». +Para ello, vaya a la pestaña « Equipos » del menú « Bastión » y, a continuación, haga clic en el botón « Nuevo equipo ». -A continuación, rellene la información necesaria para crear su equipo: +A continuación, complete la información necesaria para crear su equipo : - - Nombre del equipo; - - Descripción; - - Appliance asociada; - - Tipo de protocolo (SSH o RDP); - - Dirección IP del host; + - Nombre del equipo ; + - Descripción ; + - Appliance asociada ; + - Tipo de protocolo (SSH o RDP) ; + - Dirección IP del host ; - Configuración del teclado. -Debería aparecer una notificación en la parte superior derecha de la página indicando la creación del equipo. A continuación, la sesión se añadirá a la lista de sus equipos. +Debería aparecer una notificación que indique la creación del equipo en la esquina superior derecha de la página. La sesión se añade posteriormente a la lista de sus equipos. -Para crear un nuevo equipo, también puede pasar por el panel « Appliances », haciendo clic en la barra de acciones de la Appliance a la que desea asociar un equipo. +Para crear un nuevo equipo, también puede acceder a la pestaña « Appliances » haciendo clic en la barra de acciones de la Appliance a la que desea asociar un equipo. ## Conectarse a un equipo -Diríjase al panel « Equipos » del panel « Bastión ». Haga clic en la barra de acciones del equipo que desea abrir y luego en el botón « Abrir ». +Vaya a la pestaña « Equipos » de la pestaña « Bastión ». Haga clic en la barra de acciones del equipo que desea abrir y, a continuación, en el botón « Abrir ». -En cada conexión al equipo, solo necesita proporcionar sus credenciales de autenticación. +En cada conexión al equipo, solo deberá proporcionar sus credenciales de autenticación. -Después de ingresar sus identificadores, aparecerá una notificación que confirma el inicio de la conexión con su equipo y se abrirá la consola hacia su máquina virtual. +Una vez introducidas sus credenciales, aparecerá una notificación que confirma el inicio de la conexión a su equipo y se abrirá la consola hacia su máquina virtual. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/bastion/tutorials.md b/i18n/es/docusaurus-plugin-content-docs/current/bastion/tutorials.md index 482fb1ab..39428185 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/bastion/tutorials.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/bastion/tutorials.md @@ -14,80 +14,80 @@ import modifierSession from '@site/docs/bastion/images/modifier_session.png' import modifierSession2 from '@site/docs/bastion/images/modifier_session2.png' import supprimerSession from '@site/docs/bastion/images/supprimer_session.png' -Estos tutoriales le ayudan a implementar y gestionar un Bastión Cloud Temple desde la Consola. +Estos tutoriales le ayudan a implementar y gestionar un Bastion Cloud Temple desde la Consola. -## Requis +## Prerrequisitos -1. Tener suscrito a la oferta Cloud Temple (suscripción Appliance Bastion). +1. Haber suscrito el producto Cloud Temple (suscripción Appliance Bastion). 2. Los equipos a administrar deben ser accesibles desde la red donde se despliega la Appliance Bastion. -3. Tener permisos sobre el módulo Bastion. +3. Contar con los permisos del módulo Bastion. 4. En el caso de un despliegue de la Appliance on-premise, los flujos correspondientes deben estar abiertos. -## Interface +## Interfaz -Una vez conectado al portal web Console, dirígete al menú izquierdo y selecciona la pestaña "Bastion". +Una vez conectado al portal web Console, acceda a la pestaña "Bastion" del menú izquierdo. -La pestaña « Equipos » te permite consultar la lista de tus equipos. Un equipo corresponde a una configuración de conexión a través de una Appliance Bastion. Para cada equipo se indica su nombre, sus etiquetas, su descripción, la Appliance asociada, el tipo de conexión (SSH o RDP), la IP del host y finalmente la configuración del teclado. +La pestaña « Equipos » le permite consultar la lista de sus equipos. Un equipo corresponde a una configuración de conexión mediante una Appliance Bastion. Para cada equipo, se indican su nombre, sus etiquetas, su descripción, la Appliance asociada, el tipo de conexión (SSH o RDP), la IP del host y, por último, la configuración del teclado. -Puedes filtrar la lista de tus equipos según las etiquetas asignadas, y un motor de búsqueda te permite buscar una sesión por su nombre. +Puede filtrar la lista de sus equipos según las etiquetas asignadas y un motor de búsqueda permite buscar una sesión por su nombre. -La pestaña « Appliances » te muestra la lista de tus Appliances Bastion. Para cada Appliance se especifica su nombre y su descripción. +La pestaña « Appliances » le muestra la lista de sus Appliances Bastion. Para cada Appliance, se especifican el nombre y la descripción. -Está disponible un motor de búsqueda para permitirte buscar una Appliance por su nombre. +Dispone de un motor de búsqueda para permitirle buscar una Appliance por su nombre. -## Deploy an Appliance +## Desplegar una Appliance -Before deploying an Appliance, you must submit a subscription request for an Appliance through a support ticket. +Antes de poder desplegar una Appliance, es necesario realizar una solicitud de suscripción a una Appliance a través de una solicitud al soporte. -## Abrir un flujo hacia un equipo +## Abrir una conexión hacia un equipo -En la pestaña « Appliances », haga clic en la barra de acciones del appliance que desea abrir. A continuación, pulse el botón « Abrir ». +En la pestaña « Appliances », haga clic en la barra de acciones del Appliance que desea abrir. A continuación, haga clic en el botón « Abrir ». -A continuación, rellene la información necesaria para la conexión: +Complete a continuación la información necesaria para la conexión: - - Selección del protocolo (SSH o RDP); - - Dirección IP del host a administrar; - - Información de identificación; + - Selección del protocolo (SSH ou RDP) ; + - Dirección IP del host a administrar ; + - Información de identificación ; - Configuración del teclado. -A continuación, pulse « Conectar » para abrir el appliance. Se abrirá entonces la consola de la máquina virtual que se va a administrar. +Luego, haga clic en « Conectar » para abrir el Appliance. Se abrirá entonces la consola de la máquina virtual a administrar. -## Registrar un equipo +## Guardar un equipo -Para acceder con regularidad a un equipo que deba administrarse, es más conveniente crear una configuración de equipo, que solo le solicitará su nombre de usuario y su contraseña en cada conexión. +Para acceder con regularidad a un equipo que deba administrarse, es más conveniente crear una configuración de equipo, la cual solo solicitará su nombre de usuario y contraseña en cada conexión. -Para ello, vaya al panel « Equipos » del menú « Bastión», y haga clic en el botón « Nuevo equipo ». +Para ello, diríjase a la pestaña « Equipos » del menú « Bastion » y, a continuación, haga clic en el botón « Nuevo equipo ». -A continuación, rellene la información necesaria para crear su equipo: +A continuación, complete la información necesaria para crear su equipo: - - Nombre del equipo; - - Descripción; - - Appliance asociada; - - Tipo de protocolo (SSH o RDP); - - Dirección IP del host; + - Nombre del equipo ; + - Descripción ; + - Appliance asociada ; + - Tipo de protocolo (SSH o RDP) ; + - Dirección IP del host ; - Idioma del teclado. -Debería aparecer una notificación en la parte superior derecha de la página indicándole la creación de su configuración de equipo. A continuación, la configuración se añadirá a la lista de sus equipos. +Debería aparecer una notificación que indique la creación de su configuración de equipo en la esquina superior derecha de la página. La configuración se agregará posteriormente a la lista de sus equipos. -Para crear una nueva conexión, también puede pasar por el panel « Appliances », haciendo clic en la barra de acciones de la Appliance a la que desee asociar una configuración de equipo. +Para crear una nueva conexión, también puede acceder a la pestaña « Appliances » haciendo clic en la barra de acciones de la Appliance a la que desea asociar una configuración de equipo. ## Conectarse a un equipo -Diríjase al panel « Equipos » dentro del panel « Bastión ». Haga clic en la barra de acciones del equipo que desea abrir y luego en el botón « Abrir ». +Diríjase a la pestaña « Equipos » de la pestaña « Bastión ». Haga clic en la barra de acciones del equipo que desea abrir y, a continuación, haga clic en el botón « Abrir ». @@ -95,20 +95,20 @@ En cada conexión al equipo, solo necesita proporcionar sus credenciales de aute -Después de ingresar sus identificadores, aparecerá una notificación que confirma el inicio de la sesión y se abrirá la consola hacia su máquina virtual. +Una vez introducidas sus credenciales, aparecerá una notificación que confirma el inicio de la sesión y se abrirá la consola hacia su máquina virtual. ## Modificar la configuración de un equipo -Diríjase a la pestaña « Equipos » en la sección « Bastión», haga clic en la barra de acciones del equipo que desea modificar y luego en el botón « Modificar ». +Vaya a la pestaña « Equipos » de la sección « Bastion », haga clic en la barra de acciones del equipo que desea modificar y haga clic en el botón « Modificar ». -A continuación, puede modificar el nombre del equipo, su descripción, la Appliance asociada, el protocolo (SSH o RDP), la dirección IP del host o el idioma del teclado. +A continuación, puede modificar el nombre del equipo, su descripción, el Appliance asociado, el protocolo (SSH o RDP), la dirección IP del host o el idioma del teclado. -## Delete a device configuration +## Eliminar una configuración de equipo -Go to the « Devices » tab in the « Bastion » section, click on the action bar of the device you want to delete, and click the « Delete » button. +Acceda a la pestaña « Equipos » de la sección « Bastión », haga clic en la barra de acciones del equipo que desea eliminar y haga clic en el botón « Eliminar ». - + \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/changelog.md b/i18n/es/docusaurus-plugin-content-docs/current/changelog.md index 4b5fc354..9e550e84 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/changelog.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/changelog.md @@ -1,164 +1,179 @@ --- -title: Registro de Cambios +title: Seguimiento de Cambios sidebar_position: 2 --- # Registro de Cambios -### 17 de abril de 2026: VM Instances — Documentación ilustrada y tutoriales +### 4 de mayo de 2026 : Parches de seguridad — imagen Docker (CVE Alpine) -- **VM Instances — Actualización de documentación**: Revisión completa e ilustración de la documentación de VM Instances. La guía de inicio (`quickstart.md`) cubre ahora todo el recorrido del usuario ilustrado: acceso a la sección, lista de VMs, asistente de creación en 9 pasos (familia de instancia, zona de disponibilidad, plantilla de SO, flavor, nombre/copia de seguridad, Cloud Init, discos, red, resumen) y gestión de 4 pestañas (Información, Discos, Red, Snapshots). -- **VM Instances — Tutoriales**: Creación de 3 tutoriales dedicados en una carpeta `tutorials/`: (1) **Crear su primera VM** (asistente completo ilustrado + Cloud Init + disco adicional), (2) **Gestionar los discos** (añadir disco desde la consola + particionado Linux), (3) **Tomar y gestionar snapshots** (crear, restaurar, eliminar + buenas prácticas y comparación snapshot/copia de seguridad). La navegación lateral se actualiza con 3 entradas individuales en la categoría Tutoriales. +- **Seguridad (Docker)** : Adición de `apk upgrade --no-cache` en la etapa final `nginx:stable-alpine` de los Dockerfiles de producción (`Dockerfile` y `Dockerfile.prebuilt`). Esta actualización corrige todas las CVE Críticas y Altas detectadas por Harbor/Trivy en la imagen `3.24.3`, relacionadas con los paquetes Alpine congelados: `libcrypto3`, `libssl3`, `libxml2`, `libxslt`, `libexpat`, `libpng`, `zlib`, `c-ares`, `musl`, `xz-libs`, `busybox`, `curl`. El próximo build generará una imagen con todos estos paquetes en su última versión corregida. -### 17 de abril de 2026: Traducción de Private Backbone y armonización terminológica +### 30 de abril de 2026: Aclaraciones sobre el rendimiento del almacenamiento -- **Private Backbone**: Traducción completa de la documentación del servicio Private Backbone al inglés, alemán, español e italiano. -- **Terminología**: Armonización del vocabulario en la documentación francesa — sustitución sistemática de "offre" y "service" por "produit" para alinear con la terminología comercial de Cloud Temple. +- **Almacenamiento (IaaS VMware, OpenSource, Bare Metal)** : Se han añadido límites absolutos de IOPS y ancho de banda máximo para todas las clases de almacenamiento. Esta información permite dimensionar mejor los entornos en función de los requisitos de rendimiento. -### 16 de abril de 2026: Refactorización de la navegación, documentos contractuales y actualizaciones +### 24 de abril de 2026 : Enriquecimiento de la documentación de copia de seguridad IaaS OpenSource -- **Navegación — Compute**: VM Instances (preview), IaaS OpenSource e IaaS VMware agrupados bajo una única categoría **Compute** en la navegación (PR #277). -- **Navegación — Network**: VPC (preview) y Private Backbone agrupados bajo una única categoría **Network** en la navegación. -- **Documentos contractuales**: Reestructuración completa de la documentación contractual — creación de una página hub `/contracts` (condiciones generales, condiciones particulares, acuerdos de servicio SecNumCloud, SLA VM Instances) y una página hub `/shared-responsibility` (matrices RACI por servicio: IaaS, S3, PaaS, Kubernetes, LLMaaS, Red). El menú lateral contractual es reemplazado por una columna dedicada **Contractual** en el footer. Traducciones disponibles en EN/DE/ES/IT. -- **VM Instances**: Actualización del acuerdo de nivel de servicio (SLA) del 99,9 % al 99,95 %. -- **IaaS OpenSource**: Nota sobre el período máximo de retención de copias de seguridad (24 meses máximo, migración a Glacier prevista para T1 2027). +- **IaaS OpenSource (Sauvegarde)** : Enriquecimiento de la sección de copia de seguridad con detalles sobre la arquitectura técnica (sauvegarde incrémentale, impact du Thick provisioning sur le stockage), la seguridad (chiffrement AES-256, isolation réseau), el monitoreo y las restricciones de planificación. Traducciones disponibles EN/DE/ES/IT. -### 15 de abril de 2026: Nueva documentación de VM instances (Cloud Public) +### 20 de abril de 2026 : Actualización del dimensionamiento de Managed Database -- **VM instances**: Publicación de la documentación inicial del servicio VM instances (en preview), la nueva oferta de máquinas virtuales compartidas de Cloud Temple. La documentación cubre la descripción general del servicio, los conceptos técnicos (clases de servicio Development/General Purpose/Performance, flavors predefinidos y personalizados, almacenamiento, red VPC, copia de seguridad) y una guía de inicio completa. El servicio está organizado bajo una nueva categoría **Cloud Public** en la navegación. +- **MariaDB y PostgreSQL gestionados** : Actualización de los perfiles de dimensionamiento máximo disponibles para los servicios de bases de datos gestionadas. -### 15 de abril de 2026: Mejora de la documentación IaaS VMware — métricas de clúster +### 17 de abril de 2026 : VM Instances — documentación ilustrada, tutoriales y traducciones -- **IaaS VMware**: Añadida documentación detallada sobre las métricas mostradas en la vista de un clúster VMware desde la Consola Cloud Temple. Cubre los tres gráficos de memoria del clúster: **Memoria aprovisionada** (total de memoria asignada a las VMs), **Memoria consumida** (memoria física activamente utilizada por las VMs) y **Asignación en el peor caso** (proyección del consumo máximo simultáneo), con una descripción precisa de lo que representa cada indicador para anticipar las necesidades de recursos. +- **VM Instances — Enriquecimiento documental** : Rediseño completo e ilustración de la documentación de VM Instances. La guía de inicio rápido (`quickstart.md`) cubre ahora todo el recorrido ilustrado del usuario: acceso a la sección, lista de VMs, asistente de creación en 9 pasos (familia de instancia, zona de disponibilidad, plantilla SO, diseño, nombre/copia de seguridad, Cloud Init, discos, red, resumen), y gestión de las 4 pestañas (Información, Discos, Red, Instantáneas). +- **VM Instances — Tutoriales** : Creación de 3 tutoriales dedicados en un directorio `tutorials/` : (1) **Crear su primera VM** (asistente completo ilustrado + Cloud Init + disco adicional), (2) **Gestionar los discos** (adición desde la consola + particionado de Linux), (3) **Crear y gestionar instantáneas** (creación, restauración, eliminación + buenas prácticas y comparación instantánea/copia de seguridad). La navegación lateral se actualiza con 3 entradas individuales en la categoría Tutoriales. -### 15 de abril de 2026: Documentación Managed MariaDB, Managed PostgreSQL y correcciones multilingües +### 17 de abril de 2026: Documentos contractuales, traducciones y armonización terminológica -- **Managed MariaDB**: Publicación inicial de la documentación del servicio Managed MariaDB (vista previa): descripción general del servicio, conceptos técnicos (arquitecturas StandAlone y Distributed), guía de inicio rápido. -- **Managed PostgreSQL**: Publicación inicial de la documentación del servicio Managed PostgreSQL (vista previa): descripción general del servicio, conceptos técnicos, guía de inicio rápido. -- **Correcciones multilingües (imágenes)**: Corrección de referencias de imágenes en las traducciones de las secciones Managed Kubernetes y Managed MariaDB para todos los idiomas (EN, DE, ES, IT) — conversión de rutas relativas `./images/` a rutas absolutas `@site/docs/...` para una correcta visualización en todos los idiomas. -- **Corrección de enlaces rotos**: Resolución de varios enlaces rotos: referencias a licencias LLMaaS, enlace a la consola en el tutorial rclone (OSS), enlace IAM en la documentación de red (EN), enlaces relativos en la sección Terraform (EN). +- **Documentos contractuales — Reestructuración** : La página `contracts.md` se reorganiza con la jerarquía de los documentos contractuales en la parte superior de la página, incluyendo la lista de prioridad de los 6 documentos (CGVU, Convención SecNumCloud, Convención específica ¹, PAS ², CPU, DPA) y un recuadro de precisiones contractuales. -### 15 de abril de 2026: Nuevo módulo Gestor de costos +### 16 de abril de 2026: Rediseño de la navegación, documentos contractuales y actualizaciones -- **Consola (Gestor de costos)**: Añadida documentación completa del nuevo módulo de seguimiento del consumo accesible desde la Consola Cloud Temple. Cubre el panel de control, el consumo global (con proyección de fin de mes), el desglose por producto y servicio, los detalles de facturación línea por línea y el catálogo de precios. +- **Navegación — Compute** : Agrupación de VM Instances (preview), IaaS OpenSource e IaaS VMware bajo una única categoría **Compute** en la navegación (PR #277). +- **Navegación — Network** : Agrupación de VPC (preview) y Private Backbone bajo una única categoría **Network** en la navegación. +- **Documentos contractuels** : Reestructuración completa de la documentación contractual — creación de una página central `/contracts` (condiciones generales, condiciones particulares, convenios de servicio SecNumCloud, SLA de VM instances) y de una página central `/shared-responsibility` (matrices RACI por servicio: IaaS, S3, PaaS, Kubernetes, LLMaaS, Red). El menú lateral contractual se reemplaza por una columna dedicada **Contractuel** en el pie de página. Traducciones disponibles EN/DE/ES/IT. +- **VM Instances** : Actualización del compromiso de nivel de servicio (SLA) del 99,9 % al 99,95 %. +- **IaaS OpenSource** : Adición de una nota sobre la duración máxima de retención de las copias de seguridad (máximo 24 meses, migración a Glacier prevista para el T1 2027). -### 26 de marzo de 2026: Actualización de la lista de subencargados (DPA) +### 15 de abril de 2026 : Nueva documentación de instancias VM (Cloud Public) -- **Contractual**: Actualización del Acuerdo de Procesamiento de Datos (DPA) - revisión de la lista de subencargados (eliminación de Microsoft Azure y Amazon Web Services, modificación de la actividad de Iron Mountain) y adición de la fecha de autorización. Propagación de los cambios en inglés, alemán, español e italiano. +- **instancias VM** : Publicación de la documentación inicial del servicio de instancias VM (en vista previa), nueva oferta de máquinas virtuales compartidas de Cloud Temple. La documentación cubre la visión general del servicio, los conceptos técnicos (clases de servicio Development/General Purpose/Performance, plantillas predefinidas y personalizadas, almacenamiento, red VPC, copia de seguridad), así como una guía de inicio completa. El servicio está organizado bajo una nueva categoría **Cloud Public** en la navegación. -### 19 de marzo de 2026: Mejoras en la documentación de IaaS y Terraform +### 15 de abril de 2026 : Mejora de la documentación de IaaS VMware — métricas de clúster -- **IaaS OpenSource**: Se ha añadido una guía completa para crear una máquina virtual. El tutorial cubre los tres métodos de implementación disponibles (plantilla, importación XVA, Marketplace) con instrucciones paso a paso y recomendaciones de mejores prácticas. -- **IaaS VMware**: Se ha añadido una página índice que enumera todos los tutoriales disponibles para facilitar la navegación y el descubrimiento de las guías. -- **Terraform**: Nueva sección que explica cómo recibir automáticamente notificaciones sobre las nuevas versiones del Provider de Terraform a través de GitHub. +- **IaaS VMware** : Se ha añadido documentación detallada sobre las métricas mostradas en la vista de un clúster VMware desde la Consola Cloud Temple. Cubre los tres gráficos de memoria del clúster : **Memoria asignada** (cantidad total asignada a las VMs), **Memoria consumida** (memoria física realmente utilizada por las VMs) y **Asignación en el peor de los casos** (proyección del consumo máximo simultáneo), con la descripción precisa de lo que representa cada indicador para anticipar las necesidades de recursos. -### 19 de marzo de 2026: Actualización del DPA y cumplimiento de HDS +### 15 de abril de 2026: Documentación de Managed MariaDB, Managed PostgreSQL y correcciones multilingües -- **Contractuel** : Mise à jour de l'Annexe Contractuelle sur les Données à Caractère Personnel (DPA) vers la version 1.0. Intégration des dernières exigences de la certification HDS (Hébergeur de Données de Santé) et actualisation de la liste des sous-traitants autorisés. Traduction complète en anglais, allemand, espagnol et italien. +- **Managed MariaDB** : Publicación de la documentación inicial del servicio Managed MariaDB (en vista previa) : presentación del servicio, conceptos técnicos (arquitecturas StandAlone y Distributed), guía de inicio. +- **Managed PostgreSQL** : Publicación de la documentación inicial del servicio Managed PostgreSQL (en vista previa) : presentación del servicio, conceptos técnicos, guía de inicio. +- **Correcciones multilingües (imágenes)** : Corrección de las referencias de imágenes en las traducciones de las secciones Managed Kubernetes y Managed MariaDB para todos los idiomas (EN, DE, ES, IT) — conversión de las rutas relativas `./images/` a rutas absolutas `@site/docs/...` para garantizar un renderizado correcto en todos los idiomas. +- **Corrección de enlaces rotos** : Resolución de varios enlaces rotos en la documentación : referencias a las licencias LLMaaS, enlace a la consola en el tutorial de rclone (OSS), enlace IAM en la documentación de red (EN), enlaces relativos en la sección de Terraform (EN). -### 21 Février 2026 : Amélioration du référencement SEO +### 15 de abril de 2026 : Nuevo módulo Gestor de costos -- **SEO** : Correction de l'URL de production (`https://docs.cloud-temple.com`) et du chemin de base (`/`) dans la configuration Docusaurus, garantissant des URLs canoniques correctes pour l'indexation Google. -- **Sitemap** : Activation de la génération automatique du sitemap (`/sitemap.xml`) pour améliorer le crawling et l'indexation par les moteurs de recherche. -- **Robots.txt** : Ajout d'un fichier `robots.txt` autorisant le crawling complet du site et pointant vers le sitemap. +- **Consola (Gestionnaire des coûts)** : Se añade la documentación completa del nuevo módulo de seguimiento de consumo accesible desde la Consola Cloud Temple. Cubre el panel de control, el consumo global (avec projection de fin de mois), la distribución por producto y por servicio, los detalles de facturación línea por línea y el catálogo de precios. -### 21 Février 2026 : Concepts avancés réseau et améliorations multilingues +### 26 de marzo de 2026 : Actualización de la lista de subprocesadores (DPA) -- **Réseau (Internet)** : Nouvelle page de **concepts avancés** documentant les communautés BGP et le contrôle de la Local Preference sur le backbone Internet Cloud Temple (AS33930). Inclut un guide de configuration avec exemple Bird. -- **LLMaaS** : Mise à jour du catalogue de modèles et ajout du cycle de vie des modèles. Ajout des modèles LTS (Long Term Support). -- **Console (Sécurité)** : Amélioration de la qualité des traductions des alertes de sécurité (anglais, allemand, espagnol, italien). -- **Multilingue** : Traduction de la nouvelle page concepts avancés réseau vers les 4 langues (en, de, es, it) et amélioration globale de la qualité des traductions existantes. -- **IaaS Bare Metal** : Ajout de précisions sur le volume BFS (Boot from SAN) dans le guide de démarrage : le Volume 1 est dédié à l'installation de l'OS, non partageable au sein d'une même AZ, avec recommandation de stocker les données sur un volume LUN additionnel. -- **Stockage Objet (OSS)** : Ajout d'une page **FAQ** couvrant l'accès S3, les whitelists IP, les liens pré-signés et les scénarios d'usage recommandés. +- **Contractual** : Actualización del Anexo Contractual sobre Datos Personales (DPA) - revisión de la lista de subprocesadores (retiro de Microsoft Azure y Amazon Web Services, modificación de la actividad para Iron Mountain) y adición de la fecha de autorización. -### 10 Février 2026 : Mise à jour des tarifs LLMaaS +### 19 de marzo de 2026 : Mejoras en la documentación de IaaS y Terraform -- **LLMaaS** : Mise à jour globale des tarifs de l'API (Input : 1,9€/M, Output : 8€/M, Raisonneur : 8€/M) dans l'ensemble de la documentation technique et commerciale. +- **IaaS OpenSource** : Se ha añadido una guía completa para crear una máquina virtual. El tutorial cubre los tres métodos de despliegue disponibles (plantilla, importación XVA, Marketplace) con instrucciones paso a paso y recomendaciones de buenas prácticas. +- **IaaS VMware** : Se ha añadido una página que agrupa todos los tutoriales disponibles para facilitar la navegación y el descubrimiento de las guías. +- **Terraform** : Nueva sección que explica cómo recibir automáticamente las notificaciones de las nuevas versiones del proveedor de Terraform a través de GitHub. -### 5 Février 2026 : Précisions sur les engagements de service (SLA) +### 19 de marzo de 2026: Actualización del DPA y cumplimiento HDS -- **Managed Kubernetes** : Mise à jour complète et finalisation des engagements de niveau de service (SLA) pour l'offre Managed Kubernetes. +- **Contractual**: Actualización del Anexo Contractual sobre Datos Personales (DPA) a la versión 1.0. Integración de los últimos requisitos de la certificación HDS (Proveedor de Servicios de Alojamiento de Datos de Salud) y actualización de la lista de subcontratistas autorizados. Traducción completa en inglés, alemán, español e italiano. -### 21 Janvier 2026 : Améliorations et traductions de sécurité +### 21 de febrero de 2026: Mejora del SEO -- **Console Management** : Mise à jour des traductions internationales (anglais, allemand, espagnol, italien) pour les alertes de sécurité dans la console de gestion. +- **SEO**: Corrección de la URL de producción (`https://docs.cloud-temple.com`) y de la ruta base (`/`) en la configuración de Docusaurus, garantizando URLs canónicas correctas para la indexación en Google. +- **Sitemap**: Activación de la generación automática del sitemap (`/sitemap.xml`) para mejorar el rastreo y la indexación por parte de los motores de búsqueda. +- **Robots.txt**: Adición de un archivo `robots.txt` que permite el rastreo completo del sitio y apunta al sitemap. -### 19 Janvier 2026 : Extension Managed Kubernetes et VPC +### 21 de febrero de 2026: Conceptos avanzados de red y mejoras multilingües -- **Managed Kubernetes** : Ajout du support pour les nœuds **Bare Metal** et les **GPUs** (NVIDIA). -- **Managed Kubernetes** : Nouveau tutoriel sur l'utilisation des GPUs dans un cluster Kubernetes. -- **Managed Kubernetes** : Remplacement de KubeCost par un guide plus récent sur **OpenCost**. -- **Network (VPC)** : Documentation complète du service Virtual Private Cloud (VPC), incluant les concepts de haute disponibilité (HA), les guides de démarrage et les tutoriels. -- **Multilingue** : Traduction intégrale du service VPC et des nouveaux contenus Kubernetes vers l'anglais, l'allemand, l'espagnol et l'italien. +- **Red (Internet)** : Nueva página de **conceptos avanzados** que documenta las comunidades BGP y el control de la Local Preference en el backbone de Internet Cloud Temple (AS33930). Incluye una guía de configuración con un ejemplo de Bird. +- **LLMaaS** : Actualización del catálogo de modelos y adición del ciclo de vida de los modelos. Inclusión de modelos LTS (Long Term Support). +- **Consola (Seguridad)** : Mejora de la calidad de las traducciones de las alertas de seguridad (inglés, alemán, español, italiano). +- **Multilingüe** : Traducción de la nueva página de conceptos avanzados de red a los 4 idiomas (en, de, es, it) y mejora general de la calidad de las traducciones existentes. +- **IaaS Bare Metal** : Adición de aclaraciones sobre el volumen BFS (Boot from SAN) en la guía de inicio: el Volumen 1 está dedicado a la instalación del SO, no compartible dentro de una misma AZ, con recomendación de almacenar los datos en un volumen LUN adicional. +- **Almacenamiento de Objetos (OSS)** : Adición de una página **FAQ** que cubre el acceso S3, las listas blancas IP, los enlaces prefirmados y los escenarios de uso recomendados. -### 15 Décembre 2025 : Stabilisation et corrections multilingues +### 10 de febrero de 2026 : Actualización de tarifas de LLMaaS -- **Multilingue (Terraform, LLMaaS, Harbor)** : Correction majeure des traductions en Espagnol, Italien et Allemand. Résolution des problèmes de syntaxe MDX (blocs de code vides, balises non échappées) qui empêchaient la compilation du site. -- **Multilingue (Images)** : Rétablissement des chemins d'images corrects dans les versions italienne et allemande pour les sections Bastion et IaaS VMware. -- **Build** : Validation du déploiement pour l'ensemble des 5 langues supportées. +- **LLMaaS** : Actualización global de las tarifas de la API (Input : 1,9€/M, Output : 8€/M, Raisonneur : 8€/M) en toda la documentación técnica y comercial. -### 11 Décembre 2025 : Nouveautés Managed Kubernetes +### 5 de febrero de 2026: Aclaraciones sobre los acuerdos de nivel de servicio (SLA) -- **Managed Kubernetes** : Ajout d'un nouveau tutoriel sur l'utilisation de **Gateway API** pour la gestion avancée du trafic. -- **Managed Kubernetes** : Mise à jour de la documentation sur la gestion des quotas (Ceph) et optimisation des outils de gestion des coûts (OpenCost). +- **Managed Kubernetes**: Actualización completa y finalización de los acuerdos de nivel de servicio (SLA) para la oferta Managed Kubernetes. -### 22 Novembre 2025 : Nouveautés LLMaaS et améliorations globales +### 21 de enero de 2026: Mejoras y traducciones de seguridad -- **LLMaaS (OCR)** : Ajout d'une documentation complète pour **DeepSeek-OCR**, notre nouveau modèle spécialisé dans l'analyse de documents (PDF, images), capable d'extraire du texte structuré, des tableaux et des formules mathématiques. -- **Multilingue** : Résolution de problèmes d'accessibilité sur les versions italienne et allemande de la documentation. -- **Qualité** : Correction de l'affichage des blocs de code dans les tutoriels LLMaaS et rétablissement des images manquantes dans le guide de démarrage IaaS VMware (version italienne). +- **Gestión de la consola** : Actualización de las traducciones internacionales (inglés, alemán, español, italiano) para las alertas de seguridad en la consola de gestión. -### 20 Novembre 2025 : Mise à jour majeure PaaS OpenShift +### 19 de enero de 2026 : Extensión Managed Kubernetes y VPC -- **PaaS OpenShift (PR #194)** : Refonte et mise à jour complète de la documentation OpenShift, incluant de nouvelles captures d'écran et une traduction intégrale en anglais, espagnol, allemand et italien pour accompagner notre expansion internationale. +- **Managed Kubernetes** : Se añade soporte para los nodos **Bare Metal** y los **GPUs** (NVIDIA). +- **Managed Kubernetes** : Nuevo tutorial sobre el uso de GPUs en un clúster de Kubernetes. +- **Managed Kubernetes** : Se reemplaza KubeCost por una guía más reciente sobre **OpenCost**. +- **Network (VPC)** : Documentación completa del servicio Virtual Private Cloud (VPC), que incluye los conceptos de alta disponibilidad (HA), las guías de inicio y los tutoriales. +- **Multilingüe** : Traducción completa del servicio VPC y de los nuevos contenidos de Kubernetes al inglés, alemán, español e italiano. -### 3 Novembre 2025 : Amélioration des tutoriels Kubernetes +### 15 de diciembre de 2025 : Estabilización y correcciones multilingües -- **Managed Kubernetes** : Ajout d'un nouveau tutoriel sur le déploiement continu avec **ArgoCD** et l'approche GitOps. -- **Managed Kubernetes** : Revue et améioration des tutoriels existants. Les guides sur le déploiement, le réseau, la gestion des permissions (Capsule) et la sauvegarde (Kasten) ont été enrichis pour mieux adresser les questions de sécurité, de gouvernance et de coût, en réponse aux attentes des profils RSSI et Acheteur. +- **Multilingüe (Terraform, LLMaaS, Harbor)** : Corrección importante de las traducciones al español, italiano y alemán. Resolución de problemas de sintaxis MDX (blocs de code vides, balises non échappées) que impedían la compilación del sitio. +- **Multilingüe (Images)** : Restauración de las rutas de imágenes correctas en las versiones italiana y alemana para las secciones Bastión e IaaS VMware. +- **Build** : Validación del despliegue para las 5 idiomas admitidas. -### 28 Octobre 2025 : Nouvelle documentation Managed Kubernetes et améliorations diverses +### 11 de diciembre de 2025 : Novedades de Managed Kubernetes -- **Managed Kubernetes (PR #193 & améliorations)**: Ajout d'une documentation complète pour le nouveau service Managed Kubernetes. La section inclut une presentazione del service, i concetti tecnici, un guide di démarrage, un primo tutoriel, e la matrice di responsabilités (RACI). Le contenu a été enrichi pour mieux répondre aux attentes des différents profils d'utilisateurs. -- **Stockage Objet (PR #190, #189)**: Ajout de deux nouveaux tutoriels pour le service de Stockage Objet : un sur la gestion des accès aux buckets S3 et un autre sur l'utilisation de Restic pour les sauvegardes. -- **Contractuel (PR #191)**: Correction et mise à jour du document "Data Processing Agreement" (DPA). +- **Managed Kubernetes** : Añadido un nuevo tutorial sobre el uso de **Gateway API** para la gestión avanzada del tráfico. +- **Managed Kubernetes** : Actualización de la documentación sobre la gestión de cuotas (Ceph) y optimización de las herramientas de gestión de costos (OpenCost). -### 18 Octobre 2025 : Maintenance et nouvelles documentations +### 22 Noviembre 2025 : Novedades LLMaaS y mejoras globales -- **LLMaaS** : Ajout d'une nouvelle question à la FAQ pour présenter la page de statut publique ([llmaas.status.cloud-temple.app](https://llmaas.status.cloud-temple.app/)), permettant de suivre en temps réel la disponibilité et les performances de chaque modèle. -- **Contractuel** : Mise à jour majeure du Data Processing Agreement (DPA v2) pour refléter les dernières exigences légales et de conformité. -- **Console** : Amélioration et clarification de la documentation concernant la gestion des commandes. -- **Marketplace** : Ajout d'un tutoriel détaillé sur la personnalisation des images de machines virtuelles (VM) pour créer des templates réutilisables. -- **LLMaaS** : Ajout d'un guide pour configurer l'extension VSCode CLINE afin d'utiliser les modèles de langage de Cloud Temple directement depuis l'éditeur. -- **Stockage Objet (OSS)** : Ajout de précisions sur la politique de cycle de vie (Lifecycle) pour la suppression des données. -- **Stockage Objet (OSS)** : Ajout d'un guide de dépannage pour les erreurs de checksum (`XAmzContentSHA256Mismatch`) avec AWS CLI et Terraform. -- **LLMaaS** : Mise à jour de la liste des modèles disponibles et retraduction de plus de 50 documents pour assurer la cohérence. +- **LLMaaS (OCR)** : Adición de documentación completa para **DeepSeek-OCR**, nuestro nuevo modelo especializado en el análisis de documentos (PDF, imágenes), capaz de extraer texto estructurado, tablas y fórmulas matemáticas. +- **Multilingüe** : Resolución de problemas de accesibilidad en las versiones italiana y alemana de la documentación. +- **Calidad** : Corrección de la visualización de bloques de código en los tutoriales LLMaaS y restauración de imágenes faltantes en la guía de inicio IaaS VMware (versión italiana). -### 14 Août 2025 : Améliorations et corrections +### 20 Noviembre 2025 : Actualización principal PaaS OpenShift -- **LLMaaS** : Mise à jour et clarification des réponses de la FAQ pour mieux adresser les questions techniques et stratégiques. Ajout de la FAQ à la navigation. -- **Général** : Correction de several liens de navigation internes à travers la documentation pour une expérience plus fluide. +- **PaaS OpenShift (PR #194)** : Rediseño y actualización completa de la documentación de OpenShift, que incluye nuevas capturas de pantalla y una traducción completa al inglés, español, alemán e italiano para acompañar nuestra expansión internacional. -### Juillet 2025 : Nouveautés et mises à jour majeures +### 3 de noviembre de 2025: Mejora de los tutoriales de Kubernetes -- **Stockage Objet (OSS)** : - - Refonte complète de la section tutoriels avec des guides dédiés pour des outils populaires : AWS CLI, Minio Client (`mc mirror`), Cloudberry Explorer, et le SDK Python Boto3. - - Ajout de précisions sur les concepts de comptes de stockage et le verrouillage d'objets (Object Lock). +- **Managed Kubernetes** : Se ha añadido un nuevo tutorial sobre el despliegue continuo con **ArgoCD** y el enfoque GitOps. +- **Managed Kubernetes** : Revisión y mejora de los tutoriales existentes. Las guías sobre despliegue, red, gestión de permisos (Capsule) y copia de seguridad (Kasten) se han enriquecido para abordar mejor las cuestiones de seguridad, gobernanza y coste, en respuesta a las expectativas de los perfiles CISO y Comprador. + +### 28 de octubre de 2025 : Nueva documentación de Managed Kubernetes y mejoras varias + +- **Managed Kubernetes (PR #193 & améliorations)**: Se ha añadido una documentación completa para el nuevo servicio Managed Kubernetes. La sección incluye una presentación del servicio, los conceptos técnicos, una guía de inicio, un primer tutorial y la matriz de responsabilidades (RACI). El contenido se ha enriquecido para responder mejor a las expectativas de los diferentes perfiles de usuarios. +- **Almacenamiento de Objetos (PR #190, #189)**: Se han añadido dos nuevos tutoriales para el servicio de Almacenamiento de Objetos: uno sobre la gestión de accesos a los buckets S3 y otro sobre el uso de Restic para las copias de seguridad. +- **Contractual (PR #191)**: Corrección y actualización del documento "Data Processing Agreement" (DPA). + +### 18 de octubre de 2025 : Mantenimiento y nuevas documentaciones + +- **LLMaaS** : Se ha añadido una nueva pregunta a la FAQ para presentar la página de estado pública ([llmaas.status.cloud-temple.app](https://llmaas.status.cloud-temple.app/)), que permite seguir en tiempo real la disponibilidad y el rendimiento de cada modelo. +- **Contractuel** : Actualización importante del Acuerdo de Tratamiento de Datos (DPA v2) para reflejar los últimos requisitos legales y de cumplimiento. +- **Console** : Mejora y aclaración de la documentación sobre la gestión de pedidos. +- **Marketplace** : Se ha añadido un tutorial detallado sobre la personalización de imágenes de máquinas virtuales (VM) para crear plantillas reutilizables. +- **LLMaaS** : Se ha añadido una guía para configurar la extensión CLINE de VSCode con el fin de utilizar los modelos de lenguaje de Cloud Temple directamente desde el editor. +- **Almacenamiento de Objetos (OSS)** : Se han añadido aclaraciones sobre la política de ciclo de vida (Lifecycle) para la eliminación de datos. +- **Almacenamiento de Objetos (OSS)** : Se ha añadido una guía de resolución de problemas para los errores de checksum (`XAmzContentSHA256Mismatch`) con AWS CLI y Terraform. +- **LLMaaS** : Actualización de la lista de modelos disponibles y retraducción de más de 50 documentos para garantizar la coherencia. + +### 14 de agosto de 2025 : Mejoras y correcciones + +- **LLMaaS** : Actualización y aclaración de las respuestas de la FAQ para abordar mejor las preguntas técnicas y estratégicas. Se ha añadido la FAQ a la navegación. +- **General** : Corrección de varios enlaces de navegación internos en toda la documentación para una experiencia más fluida. + +### Julio de 2025 : Novedades y actualizaciones principales + +- **Almacenamiento de Objetos (OSS)** : + - Rediseño completo de la sección de tutoriales con guías dedicadas para herramientas populares: AWS CLI, Minio Client (`mc mirror`), Cloudberry Explorer y el SDK de Python Boto3. + - Añadidas aclaraciones sobre los conceptos de cuentas de almacenamiento y el bloqueo de objetos (Object Lock). - **IaaS OpenSource** : - - Ajout d'une documentation détaillée sur la gestion de la Haute Disponibilité (HA) pour les pools de ressources et les machines virtuelles. -- **Console** : - - Mise à jour de la page des alertes de sécurité avec les dernières vulnérabilités. -- **Réseau** : - - Ajout de nouvelles captures d'écran pour illustrer la configuration de la connectivité IPv6. - -### 29 Juin 2025 : finalisation de la documentation LLMaaS - -- Validation de la suite de tests complète. -- Correction et validation des pipelines RAG with FAISS et Qdrant. -- Enrichissement des tutoriels avec des explications techniques plus détaillées. -- Ajout d'une section sur la sécurité des prompts et le cycle de vie des modèles dans les concepts. -- Amélioration de la page d'explication du RAG avec schémas et détails sur les modèles d'embedding. -- Mise à jour de la documentation de l'API, du guide de démarrage et de la présentation du service. -- Ajout du princing pour l'endpoint Transcription Audio. -- Ajout du planning prévisionnel de cycle de vie des modeles. -- Ajout de la matrice de responsabilité pour l'offre LLMaaS. + - Añadida documentación detallada sobre la gestión de la Alta Disponibilidad (HA) para los grupos de recursos y las máquinas virtuales. +- **Consola** : + - Actualización de la página de alertas de seguridad con las últimas vulnerabilidades. +- **Red** : + - Añadidas nuevas capturas de pantalla para ilustrar la configuración de la conectividad IPv6. + +### 29 de junio de 2025 : finalización de la documentación de LLMaaS + +- Validación del conjunto completo de pruebas. +- Corrección y validación de los pipelines de RAG con FAISS y Qdrant. +- Enriquecimiento de los tutoriales con explicaciones técnicas más detalladas. +- Adición de una sección sobre la seguridad de los prompts y el ciclo de vida de los modelos en los conceptos. +- Mejora de la página de explicación del RAG con diagramas y detalles sobre los modelos de embedding. +- Actualización de la documentación de la API, la guía de inicio y la presentación del servicio. +- Adición de los precios para el endpoint de Transcripción de Audio. +- Adición de la planificación prevista del ciclo de vida de los modelos. +- Adición de la matriz de responsabilidades para la oferta LLMaaS. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/compute_overview.md b/i18n/es/docusaurus-plugin-content-docs/current/compute_overview.md index 28f2cb90..ab02ddec 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/compute_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/compute_overview.md @@ -1,26 +1,26 @@ --- -title: Compute +title: Cómputo displayed_sidebar: docSidebar --- -# Compute +# Cómputo -Los servicios Compute de Cloud Temple le permiten desplegar y operar máquinas virtuales en una infraestructura soberana y segura. Elija la tecnología que se adapta a sus necesidades: instancias cloud compartidas, infraestructura open source o virtualización VMware. +Los servicios de Cómputo de Cloud Temple le permiten desplegar y operar máquinas virtuales en una infraestructura soberana y segura. Elija la tecnología que se adapte a sus necesidades: instancias cloud compartidas, infraestructura open source o virtualización VMware.
-

VM Instances Preview

-

Instancias cloud compartidas, desplegadas en minutos desde el Marketplace. Ideal para cargas de trabajo flexibles.

- Descubrir VM Instances → +

Instancias VM Vista previa

+

Instancias cloud compartidas, desplegadas en unos minutos desde el Marketplace. Ideal para cargas de trabajo flexibles.

+ Descubrir Instancias VM →

IaaS OpenSource

-

Infraestructura virtualizada open source (OpenStack). Control total sobre sus VMs, redes y almacenamiento en una base certificada SecNumCloud.

+

Infraestructura virtualizada open source (OpenStack). Control total sobre sus VMs, redes y almacenamiento en una plataforma SecNumCloud.

Descubrir IaaS OpenSource →

IaaS VMware

-

Infraestructura VMware gestionada. Compatible con su entorno vSphere existente, con las garantías de una nube soberana calificada.

+

Infraestructura VMware gestionada. Compatible con su entorno vSphere existente, con las garantías de un cloud soberano certificado.

Descubrir IaaS VMware →
-
+
\ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/console/api.md b/i18n/es/docusaurus-plugin-content-docs/current/console/api.md index 69f68138..57d9e06e 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/console/api.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/console/api.md @@ -1,5 +1,5 @@ --- -title: Documentación de la API +title: Documentación API --- import ShivaProfil001 from '@site/docs/console/images/shiva_profil_001.png' import ShivaProfil002 from '@site/docs/console/images/shiva_profil_002.png' @@ -11,173 +11,173 @@ import ShivaApi002 from '@site/docs/console/images/shiva_api_002.png' import ShivaApi003 from '@site/docs/console/images/shiva_api_003.png' import ShivaApi004 from '@site/docs/console/images/shiva_api_004.png' -## Introducción +## Introduction -La API de Cloud Temple le permite crear y gestionar todos sus recursos en la nube de forma programática. Todo lo que puede hacer a través de la consola de Cloud Temple también se puede realizar a través de la API, desde la creación de máquinas virtuales hasta la configuración de la gestión de identidades y accesos. +La API Cloud Temple le permite crear y gestionar todos sus recursos cloud de forma programática. Todo lo que puede realizar a través de la consola Cloud Temple también se puede llevar a cabo mediante la API, desde la creación de máquinas virtuales hasta la configuración de la gestión de identidades y accesos. -Esta documentación le guía en el uso de la API de Cloud Temple, desde la autenticación hasta las mejores prácticas, incluyendo la gestión del ciclo de vida de los endpoints. +Esta documentación le guía en el uso de la API Cloud Temple, abarcando la autenticación, las buenas prácticas y la gestión del ciclo de vida de los endpoints. -## Inicio rápido: Su primera solicitud de API +## Inicio rápido : Tu primera solicitud de API -:::info[Resumen - 3 pasos para empezar] -1. 🔑 **Generar su PAT** desde la consola +:::info[Resumen - 3 pasos para comenzar] +1. 🔑 **Generar tu PAT** desde la consola 2. 🚀 **Probar con curl** en `/iam/v2/roles` 3. ✅ **Analizar la respuesta** JSON ::: ### Requisitos previos -Antes de comenzar, debe tener una cuenta de Cloud Temple con los permisos apropiados para generar claves API. +Antes de comenzar, debe disponer de una cuenta de Cloud Temple con los permisos adecuados para generar claves API. ### Pasos -1. **Generar su clave API**: Inicie sesión en la [consola de Cloud Temple](https://shiva.cloud-temple.com/login) y genere su Personal Access Token (consulte la sección [Claves API](#claves-api-personal-access-token) a continuación). +1. **Generar tu clave API** : Inicia sesión en la [consola Cloud Temple](https://shiva.cloud-temple.com/login) y genera tu Personal Access Token (consulta la sección [Claves API](#clés-api-personal-access-token) a continuación). -2. **Probar su primera solicitud**: Ejecute el siguiente comando curl, reemplazando `` con su token: +2. **Probar tu primera solicitud** : Ejecuta el siguiente comando curl reemplazando `` por tu token : ```bash curl -X GET \ - -H "Authorization: Bearer " \ + -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ "https://shiva.cloud-temple.com/api/iam/v2/roles" ``` -3. **Analizar la respuesta**: Recibirá la lista de roles IAM disponibles en su tenant, lo que le permitirá comprender los permisos existentes. +3. **Analizar la respuesta** : Recibirás la lista de roles IAM disponibles en tu tenant, lo que te permitirá comprender los permisos existentes. ## Autenticación -### Claves API (Personal Access Token) +### Claves API (Token de acceso personal) -La __clave API__ le permite autenticarse al realizar solicitudes a la API. La generación de una clave API, también conocida como __Personal Access Token (PAT)__, es una forma segura de conectarse a las API de la consola sin usar una interfaz gráfica. Cada uno de estos tokens está vinculado a un tenant y al usuario que lo creó. +La __clave API__ permite autenticarse cuando desea realizar solicitudes a la API. La generación de una clave API, también conocida como __Token de acceso personal (PAT)__, es una forma segura de conectarse a las API de Console sin pasar por una interfaz gráfica. Cada uno de estos tokens está vinculado a un tenant y al usuario que lo creó. -La creación de este token se realiza desde su cuenta. Puede generar varias claves y configurar los permisos para cada una dentro de los límites de sus derechos. +La creación de este token se realiza desde su cuenta. Es posible generar varias claves y configurar los permisos para cada una, dentro de los límites de sus derechos. #### Crear una clave API -Para crear una clave API, simplemente __haga clic en su perfil__: +Para crear una clave API, solo necesitas __hacer clic en tu perfil__ : -En el menú del perfil, haga clic en __'Personal Access Token'__ +En el menú del perfil, haz clic en __'Token de acceso personal'__ -Verá entonces todas las claves API creadas para este usuario en este tenant. Haga clic en __'Nuevo token de acceso personal'__ +Verás en pantalla todas las claves API que se han creado para este usuario en este tenant. Haz clic en __'Nuevo token de acceso personal'__ -Debe entonces: +Debes entonces: -- Especificar el nombre de este nuevo token, -- Establecer una fecha de vencimiento (validez máxima de 12 meses), -- Elegir los permisos asociados con el token. +- Indicar el nombre de este nuevo token, +- Indicar una fecha de expiración (máximo 12 meses de validez), +- Seleccionar los permisos asociados al token. -Los detalles de su token se mostrarán entonces. __Advertencia: no podrá acceder a estos detalles más adelante.__ +Los detalles de tu token se mostrarán a continuación. __Atención, ya no será posible acceder a ellos posteriormente.__ -Si no registra esta información, deberá eliminar y recrear el token. +Si no anotas esta información, deberás eliminar y volver a crear el token. -Por razones de seguridad, se recomienda crear varios tokens, cada uno con un propósito específico (un token por aplicación o proceso de negocio) en lugar de crear un token con todos los permisos. +Por motivos de seguridad, se recomienda crear varios tokens, cada uno con un propósito específico (un token para cada aplicación o cada proceso de negocio) en lugar de crear 1 token con todos los permisos. -Verá entonces el token recién creado y su fecha de vencimiento futura. +A continuación, verás el nuevo token creado y su fecha de expiración. :::info[Ciclo de vida del token de autenticación] -Cuando usa su __Personal Access Token (PAT)__ para autenticarse con la API, recibe a cambio un token de acceso. Es importante tener en cuenta que este token de acceso es un __JSON Web Token (JWT)__ con una vida útil limitada. +Cuando utilices tu __Personal Access Token (PAT)__ para autenticarte en la API, recibirás a cambio un token de acceso. Es importante destacar que este token de acceso es un __JSON Web Token (JWT)__ con una duración de vida limitada. -- __Vida útil__: Cada token JWT es válido durante __5 minutos__. -- __Verificación__: Puede verificar la fecha de emisión (`iat`) y la fecha de vencimiento (`exp`) de su token decodificándolo. Herramientas en línea como [jwt.io](https://jwt.io) hacen esto fácil. +- __Duración de vida__ : Cada token JWT es válido durante __5 minutos__. +- __Verificación__ : Puedes verificar la fecha de emisión (`iat`) y la fecha de expiración (`exp`) de tu token al decodificarlo. Herramientas en línea como [jwt.io](https://jwt.io) te permiten hacerlo fácilmente. -Una vez que el token expire, deberá volver a autenticarse con su PAT para obtener uno nuevo. Por lo tanto, se recomienda gestionar este ciclo de vida en sus scripts y aplicaciones planificando la renovación automática del token. +Una vez expirado el token, deberás volver a autenticarte con tu PAT para obtener uno nuevo. Por lo tanto, se recomienda gestionar este ciclo de vida en tus scripts y aplicaciones previendo una renovación automática del token. ::: -## Acceso al portal API +## Acceso al portal de APIs -La documentación OpenAPI 3.0 (Swagger) para las API de la consola de Cloud Temple está disponible directamente en la aplicación: +La documentación OpenAPI 3.0 (Swagger) de las APIs de la consola Cloud Temple está disponible directamente en la aplicación: -El acceso a la API requiere autenticación. Una vez autenticado, todas las operaciones deben incluir el encabezado __'Authorization'__ con el token de acceso bearer obtenido durante la fase de autenticación. +El acceso a las APIs requiere autenticación. Una vez autenticado, todas las operaciones deben incluir el encabezado __'Authorization'__ con el bearer access token obtenido durante la fase de autenticación. -Las URL de los endpoints se proporcionan directamente en __Swagger__ (en el objeto "Servers" de cada página de API). +La URL de los puntos de acceso se indica directamente en __Swagger__ (en el objeto "Servers" de cada página de APIs). ### Explorar la documentación interactiva -El portal API le permite: +El portal de API le permite: -- Ver todos los endpoints disponibles por módulo -- Probar solicitudes directamente desde la interfaz -- Ver modelos de datos (esquemas) para cada recurso -- Ver códigos de respuesta posibles para cada endpoint +- Consultar todos los endpoints disponibles por módulo +- Probar directamente las solicitudes desde la interfaz +- Ver los modelos de datos (esquemas) para cada recurso +- Consultar los códigos de respuesta posibles para cada endpoint -## Estructura de endpoints +## Estructura de los endpoints -### Formato de URL +### Formato de las URLs -Las URL de la API de Cloud Temple siguen una estructura consistente: +Las URLs de la API Cloud Temple siguen una estructura coherente : ``` -https://shiva.cloud-temple.com/api/{module}/v{version}/{resource} +https://shiva.cloud-temple.com/api/{module}/v{version}/{ressource} ``` -Donde: -- `{module}`: El módulo en cuestión (compute, iam, network, backup, etc.) -- `{version}`: La versión de la API (v1, v2, etc.) -- `{resource}`: El recurso a manipular (virtual-machines, users, networks, etc.) +Donde : +- `{module}` : El módulo correspondiente (compute, iam, network, backup, etc.) +- `{version}` : La versión de la API (v1, v2, etc.) +- `{ressource}` : El recurso a manipular (virtual-machines, users, networks, etc.) ### Ejemplos de endpoints ``` -# Máquinas virtuales (Compute) +# Machines virtuelles (Compute) GET https://shiva.cloud-temple.com/api/compute/v1/virtual-machines POST https://shiva.cloud-temple.com/api/compute/v1/virtual-machines GET https://shiva.cloud-temple.com/api/compute/v1/virtual-machines/{id} PATCH https://shiva.cloud-temple.com/api/compute/v1/virtual-machines/{id} DELETE https://shiva.cloud-temple.com/api/compute/v1/virtual-machines/{id} -# Identidad y acceso (IAM) +# Identité et accès (IAM) GET https://shiva.cloud-temple.com/api/iam/v1/users POST https://shiva.cloud-temple.com/api/iam/v1/users GET https://shiva.cloud-temple.com/api/iam/v1/users/{id} -# Redes +# Réseaux GET https://shiva.cloud-temple.com/api/network/v1/virtual-networks POST https://shiva.cloud-temple.com/api/network/v1/virtual-networks ``` -### Organización por módulos +### Organización por módulo -La API de Cloud Temple está organizada en módulos funcionales: +La API Cloud Temple está organizada en módulos funcionales: | Módulo | Descripción | URL base | |--------|-------------|----------| -| Consola Cloud Temple | Características generales | `/api/v1/` | -| Identidad (IAM) | Gestión de usuarios y accesos | `/iam/v1/` | -| VMware IaaS | Recursos de virtualización VMware | `/compute/v1/` | -| OpenIaaS | Recursos Xen Orchestra | `/openiaas/v1/` | +| Consola Cloud Temple | Funcionalidades generales | `/api/v1/` | +| Identidad (IAM) | Gestión de usuarios y acceso | `/iam/v1/` | +| IaaS VMware | Recursos de virtualización VMware | `/compute/v1/` | +| OpenIaaS | Recursos de Xen Orchestra | `/openiaas/v1/` | | S3 | Almacenamiento de objetos | `/s3/v1/` | | OpenShift | Plataforma PaaS | `/openshift/v1/` | -| Bastion | Dispositivos bastion SSH/RDP | `/bastion/v1/` | +| Bastión | Dispositivos bastión SSH/RDP | `/bastion/v1/` | | Red | Gestión de red nivel 2 y 3 | `/network/v1/` | -| Housing | Colocation y housing | `/housing/v1/` | +| Alojamiento | Colocación y housing | `/housing/v1/` | | Marketplace | Catálogo de soluciones | `/marketplace/v1/` | -| Soporte | Tickets y soporte | `/support/v1/` | +| Soporte | Tickets y asistencia | `/support/v1/` | | Notificación | Sistema de notificaciones | `/notification/v1/` | | LLMaaS | Inteligencia artificial | `/llmaas/v1/` | -## Actividades +## Las actividades -El seguimiento de solicitudes de tipo escritura (POST, PUT, PATCH, DELETE) se gestiona a través de la gestión de actividades. Cada una de estas solicitudes genera automáticamente una actividad asociada. Un código de estado HTTP 201 confirma la creación exitosa de la actividad. El identificador único de esta actividad se devuelve en los encabezados de respuesta bajo la clave 'Location'. +El seguimiento de las solicitudes de tipo escritura (POST, PUT, PATCH, DELETE) se realiza mediante la gestión de actividades. Cada solicitud de este tipo genera automáticamente una actividad asociada. Un código de estado HTTP 201 confirma la creación exitosa de la actividad. El identificador único de esta actividad se devuelve en los encabezados de la respuesta, bajo la clave 'Location'. -Una vez que se recupera el identificador, es posible acceder a los detalles de la actividad utilizando la API del módulo Activity: +Una vez recuperado el identificador, es posible acceder a los detalles de la actividad utilizando la API del módulo Activity : -El contenido de la actividad incluye toda la información esencial para identificar la operación, su fecha de ejecución y su estado de progreso. Aquí está el modelo de actividad: +El contenido de la actividad incluye toda la información esencial para identificar la operación, su fecha de ejecución, así como su estado de avance. A continuación se muestra el modelo de una actividad : ```json { @@ -199,19 +199,19 @@ El contenido de la actividad incluye toda la información esencial para identifi } ``` -### Estados de actividad +### Estados de una actividad -El objeto __state__ puede tomar diferentes formas según el estado de la actividad: +El objeto __state__ puede adoptar diferentes formas según el estado de la actividad, a saber: -#### waiting +#### esperando -Estado antes de que la operación haya comenzado: +Estado antes de que comience la operación: ```json waiting: {} ``` -#### running +#### en ejecución Estado cuando la operación está en curso: @@ -223,7 +223,7 @@ running: { } ``` -#### failed +#### fallido Estado si la operación falló: @@ -235,9 +235,9 @@ failed: { } ``` -#### completed +#### completado -Estado si la operación está completada: +Estado si la operación está finalizada : ```json completed: { @@ -247,40 +247,40 @@ completed: { } ``` -:::info[Identificador de recurso creado] -El identificador (UUIDv4) del recurso creado está disponible en el resultado de la actividad una vez que se completa. +:::info[Identificador del recurso creado] +El identificador (UUIDv4) del recurso creado está disponible en el resultado de la actividad una vez que esta se haya completado. ::: ## Límites de API ### ¿Por qué límites? -La consola de Cloud Temple define __límites en el volumen de solicitudes__ que un usuario puede hacer a la API durante un período especificado. La implementación de estos límites de tasa es una medida común en la gestión de API, adoptada por varias razones esenciales: +La consola Cloud Temple define __límites en el volumen de solicitudes__ que un usuario puede enviar a la API durante un período determinado. La implementación de estos límites de frecuencia es una medida común en la gestión de APIs, adoptada por varias razones esenciales: -- __Prevención de abusos__: Estos límites ayudan a salvaguardar la integridad de la API al prevenir el uso abusivo o descuidado que podría comprometer su operación. -- __Aseguramiento de la calidad del servicio__: Al regular el acceso a la API, aseguramos una distribución justa de recursos, permitiendo a todos los usuarios beneficiarse de una experiencia estable y de alto rendimiento. +- __Prevención de abusos__ : Estos límites contribuyen a preservar la integridad de la API evitando usos abusivos o torpes que puedan comprometer su funcionamiento. +- __Garantía de la calidad de servicio__ : Al regular el acceso a la API, aseguramos una distribución equitativa de los recursos, permitiendo que todos los usuarios disfruten de una experiencia estable y eficiente. -Tome por ejemplo un script mal diseñado o ineficiente que intenta llamadas API repetidas, arriesgando la saturación de recursos y la degradación del rendimiento. Al establecer umbrales de solicitud, prevenimos estas situaciones y mantenemos __un servicio fluido e ininterrumpido__ para todos nuestros clientes. +Tomemos el ejemplo de un script mal diseñado o ineficiente que intenta realizar llamadas repetitivas a la API, lo que podría saturar los recursos y degradar el rendimiento. Estableciendo límites de solicitudes, prevenimos estas situaciones y garantizamos el mantenimiento de __un servicio fluido y sin interrupciones__ para toda nuestra base de clientes. -### ¿Cuáles son los límites de tasa para la API de la consola de Cloud Temple? +### ¿Cuáles son los límites de tasa para la API de la consola Cloud Temple? -Aplicamos restricciones cuantitativas en las interacciones de los usuarios con la consola para cada producto. +Aplicamos restricciones cuantitativas a las interacciones de los usuarios con la consola para cada producto. -Los límites se definen en __solicitudes por segundo (r/s) y por IP de origen__. Más allá del umbral límite, el sistema responderá con un código de error HTTP 429, indicando que se ha excedido el límite de solicitudes autorizadas. +Los límites se definen en __solicitudes por segundo (r/s) y por IP de origen__. Si se supera el umbral límite, el sistema responderá con un código de error HTTP 429, indicando que se ha excedido el límite de solicitudes permitidas. -Aquí están los límites definidos: +A continuación se detallan los límites definidos: | Producto | Umbral límite | |---|---| | Consola Cloud Temple | 25 r/s | | Identidad (IAM) | 25 r/s | -| VMware IaaS | 25 r/s | +| IaaS VMware | 25 r/s | | OpenIaaS | 25 r/s | | S3 | 25 r/s | | OpenShift | 25 r/s | -| Bastion | 25 r/s | +| Bastión | 25 r/s | | Red | 25 r/s | -| Housing | 25 r/s | +| Alojamiento | 25 r/s | | Marketplace | 25 r/s | | Soporte | 25 r/s | | Notificación | 25 r/s | @@ -288,9 +288,9 @@ Aquí están los límites definidos: ### Rutas específicas -Ciertos endpoints de API específicos, particularmente aquellos relacionados con la autenticación o acciones sensibles, tienen límites más restrictivos para mejorar la seguridad y garantizar la estabilidad. +Ciertos endpoints de API específicos, en particular los relacionados con la autenticación o acciones sensibles, tienen límites más restrictivos para reforzar la seguridad y garantizar la estabilidad. -| Ruta | Umbral límite | +| Ruta | Umbral de límite | |---|---| | Autenticación (IAM) | 5 r/s | | IaaS - Almacenamiento (Datastores) | 20 r/s | @@ -298,7 +298,7 @@ Ciertos endpoints de API específicos, particularmente aquellos relacionados con ### ¿Cómo funcionan los límites de tasa? -Si el número de solicitudes enviadas a un endpoint de API excede el límite autorizado, el endpoint responderá con __un código de respuesta HTTP 429__. Este código indica que el usuario ha excedido el número permitido de solicitudes. Cuando esto ocurre, el endpoint de API también proporcionará un objeto JSON como respuesta, que contiene información detallada sobre la limitación aplicada: +Si el número de solicitudes enviadas a un punto de API supera el límite permitido, el punto de API responderá devolviendo __un código de respuesta HTTP 429__. Este código indica que el usuario ha superado el número de solicitudes permitidas. Cuando esto ocurre, el punto de API también proporcionará un objeto JSON como respuesta, el cual contendrá información detallada sobre la limitación aplicada: ```json { @@ -309,104 +309,103 @@ Si el número de solicitudes enviadas a un endpoint de API excede el límite aut } ``` -### ¿Cómo evitar hacer demasiadas solicitudes? +### ¿Cómo evitar realizar demasiadas solicitudes? -Se recomienda limitar el número de llamadas API realizadas por su automatización para permanecer por debajo del límite de tasa establecido para el endpoint. +Se recomienda limitar el número de llamadas a la API realizadas por su automatización para mantenerse por debajo del límite de tasa establecido para el punto de conexión. -Esta situación ocurre a menudo cuando se ejecutan múltiples solicitudes en paralelo utilizando múltiples procesos o hilos. +Esta situación suele ocurrir cuando varias solicitudes se ejecutan en paralelo, utilizando varios procesos o hilos. -Hay varias formas de mejorar la eficiencia de su automatización, incluyendo el uso de mecanismos de __almacenamiento en caché__ y la implementación __de un sistema de reintento con backoff exponencial__. Este método implica tomar una breve pausa cuando se encuentra un error de límite de tasa, luego reintentar la solicitud. Si la solicitud falla nuevamente, la duración de la pausa se aumenta gradualmente hasta que la solicitud tenga éxito o hasta que se alcance un número máximo de reintentos. +Existen varias formas de mejorar la eficiencia de su automatización, como utilizar mecanismos de __caché__ y configurar __un sistema de reintento con retroceso exponencial__. Este método consiste en realizar una breve pausa cuando se encuentra un error de límite de tasa y luego volver a intentar la solicitud. Si la solicitud vuelve a fallar, la duración de la pausa se incrementa gradualmente hasta que la solicitud tenga éxito o hasta que se alcance un número máximo de reintentos. -Este enfoque tiene muchas ventajas: +Este enfoque presenta numerosas ventajas: -- __El backoff exponencial__ asegura que los intentos iniciales se realicen rápidamente mientras proporciona retrasos más largos en caso de fallos repetidos. -- Agregar __variación aleatoria__ a la pausa ayuda a prevenir que todos los intentos ocurran simultáneamente. +- El __retroceso exponencial__ garantiza que los primeros intentos se ejecuten rápidamente, mientras que prevé tiempos de espera más largos en caso de fallos repetidos. +- La adición de __una variación aleatoria__ a la pausa ayuda a evitar que todos los intentos se produzcan simultáneamente. -Es importante tener en cuenta que __las solicitudes fallidas no afectan su límite de tasa__. Sin embargo, reenviar continuamente una solicitud podría no ser una solución viable a largo plazo, ya que este comportamiento podría cambiar en el futuro. Por lo tanto, recomendamos no depender exclusivamente de este mecanismo. +Es importante tener en cuenta que __las solicitudes fallidas no afectan su límite de tasa__. Sin embargo, seguir enviando continuamente una solicitud podría no ser una solución viable a largo plazo, ya que este comportamiento podría modificarse en el futuro. Por lo tanto, le recomendamos no depender exclusivamente de este mecanismo. -Las bibliotecas de Python __[Backoff](https://pypi.org/project/backoff/)__ y __[Tenacity](https://pypi.org/project/tenacity/)__ son buenos puntos de partida para implementar estrategias de mitigación. +Las bibliotecas __[Backoff](https://pypi.org/project/backoff/)__ y __[Tenacity](https://pypi.org/project/tenacity/)__ en Python son un buen punto de partida para implementar estrategias de retroceso. -## Ciclo de vida y obsolescencia de endpoints +## Ciclo de vida y desuso de endpoints -### Política de obsolescencia +### Política de desuso -Cloud Temple se compromete a mantener la compatibilidad de la API a lo largo del tiempo. Sin embargo, cuando es necesario evolucionar la API (nuevas características, optimizaciones, correcciones de seguridad), algunos endpoints pueden quedar obsoletos y luego eliminarse. +Cloud Temple se compromete a mantener la compatibilidad de su API a lo largo del tiempo. Sin embargo, cuando sea necesario actualizar la API (nuevas funcionalidades, optimizaciones, correcciones de seguridad), algunos endpoints pueden ser descontinuados y posteriormente eliminados. -#### Regla mínima de 3 meses +#### Regla de 3 meses como mínimo -Cuando un endpoint se marca como obsoleto: +Cuando un endpoint se marca como obsoleto : -1. **Anuncio oficial**: La obsolescencia se anuncia en las notas de lanzamiento de la consola -2. **Período de transición**: El endpoint permanece **accesible y funcional durante al menos 3 meses** después del anuncio -3. **Fecha de eliminación**: Se comunica una fecha específica de eliminación final en el momento del anuncio -4. **Alternativa documentada**: El nuevo endpoint de reemplazo está documentado y disponible +1. **Anuncio oficial** : La obsolescencia se anuncia en las notas de versión de la consola +2. **Período de transición** : El endpoint permanece **accesible y funcional durante al menos 3 meses** después del anuncio +3. **Fecha de eliminación** : Se comunica una fecha concreta de eliminación definitiva desde el anuncio +4. **Alternativa documentada** : El nuevo endpoint de reemplazo está documentado y disponible Esta regla de 3 meses le da el tiempo necesario para adaptar su código y migrar a los nuevos endpoints. ### ¿Cómo identificar un endpoint obsoleto? -#### En el portal API (Swagger) +#### En el portal de API (Swagger) -Los endpoints obsoletos aparecen tachados en la documentación de Swagger: +Los endpoints descontinuados aparecen tachados en la documentación de Swagger : -~~POST /v1/antiguo/endpoint~~ +~~POST /v1/ancien/endpoint~~ -La descripción del endpoint incluye: -- La fecha de anuncio de obsolescencia -- La fecha de eliminación planificada -- El endpoint de reemplazo recomendado +La descripción del endpoint incluye : +- La fecha de anuncio de la descontinuación +- La fecha prevista de eliminación +El endpoint de reemplazo recomendado -### Mejores prácticas para gestionar obsolescencias +### Buenas prácticas para gestionar las descontinuaciones -1. **Monitorear funciones obsoletas**: Consulte regularmente las funciones obsoletas en la consola para estar informado de las obsolescencias próximas. +1. **Supervisa las funcionalidades descontinuadas** : Consulta regularmente las funcionalidades descontinuadas en la consola para estar informado sobre las descontinuaciones próximas. -2. **Planificar sus migraciones**: Tan pronto como se anuncie una obsolescencia, planifique la migración de su código al nuevo endpoint dentro de 3 meses. +2. **Planifica tus migraciones** : Tan pronto como se anuncie una descontinuación, planifica la migración de tu código al nuevo endpoint en un plazo de 3 meses. -3. **Probar nuevos endpoints**: Pruebe los nuevos endpoints tan pronto como estén disponibles, incluso durante el período de transición. +3. **Prueba los nuevos endpoints** : Prueba los nuevos endpoints tan pronto como estén disponibles, incluso durante el período de transición. -4. **Documentar sus dependencias**: Mantenga una lista de endpoints que usa su aplicación para facilitar las migraciones futuras. +4. **Documenta tus dependencias** : Mantén una lista de los endpoints que utiliza tu aplicación para facilitar las migraciones futuras. -## Mejores prácticas +## Buenas prácticas -### Seguridad de tokens +### Seguridad de los tokens :::danger[Reglas de seguridad esenciales] -- 🚫 Nunca exponga sus tokens en código versionado (Git, etc.) -- 🔐 Use variables de entorno para almacenar tokens -- 🎯 Cree tokens con permisos mínimos (principio de privilegio mínimo) -- 🔄 Renueve sus tokens regularmente (máximo 12 meses) -- ⚠️ Revoque inmediatamente cualquier token comprometido +- 🚫 Nunca expongas tus tokens en código versionado (Git, etc.) +- 🔐 Utiliza variables de entorno para almacenar los tokens +- 🎯 Crea tokens con permisos mínimos (principio de mínimo privilegio) +- 🔄 Renueva regularmente tus tokens (máximo 12 meses) +- ⚠️ Revoca inmediatamente cualquier token comprometido ::: -### Manejo de errores +### Gestión de errores -Siempre maneje los errores HTTP en su código. Preste especial atención a los siguientes códigos: +Gestione siempre los errores HTTP en su código. Preste especial atención a los siguientes códigos: | Código | Descripción | Acción recomendada | |------|-------------|-------------------| -| **401** Unauthorized | Token expirado o inválido | Re-autenticarse con su PAT | -| **403** Forbidden | Permisos insuficientes | Verificar los derechos del token | +| **401** Unauthorized | Token expirado o inválido | Reautenticar con su PAT | +| **403** Forbidden | Permisos insuficientes | Verificar los permisos del token | | **429** Too Many Requests | Límite de tasa alcanzado | Esperar antes de reintentar (backoff) | -| **500/503** Server Error | Error temporal del servidor | Reintentar más tarde | +| **500/503** Server Error | Error de servidor temporal | Reintentar más tarde | -### Optimización de llamadas API - -- Usar paginación para listas grandes -- Almacenar en caché datos que cambian raramente -- Usar filtros para limitar los datos devueltos +### Optimización de las llamadas a la API +- Utilizar paginación para listas grandes +- Almacenar en caché los datos que cambian con poca frecuencia +- Utilizar filtros para limitar los datos devueltos - Agrupar operaciones cuando sea posible -- Seguir el estado de actividad asíncrono en lugar de sondeo intensivo +- Supervisar el estado de las operaciones asíncronas en lugar de realizar polling intensivo -### Reintento con backoff exponencial +### Reintentos con backoff exponencial -Para manejar errores temporales o limitación de tasa (HTTP 429), implemente una estrategia de reintento con backoff exponencial: +Para gestionar errores temporales o el rate limiting (HTTP 429), implemente una estrategia de reintentos con backoff exponencial: -:::tip[Estrategia de reintento recomendada] -- ⏱️ **Espera progresiva**: 1s, 2s, 4s, 8s... -- 🎲 **Variación aleatoria**: Evita que todos los clientes reintenten simultáneamente -- 🔄 **Límite de reintentos**: Máximo 3-5 intentos -- 📚 **Bibliotecas Python**: [Backoff](https://pypi.org/project/backoff/) o [Tenacity](https://pypi.org/project/tenacity/) -::: +:::tip[Estrategia de reintentos recomendada] +- ⏱️ **Espera progresiva** : 1s, 2s, 4s, 8s... +- 🎲 **Variación aleatoria** : Evita que todos los clientes reintenten simultáneamente +- 🔄 **Límite de intentos** : Máximo 3-5 intentos +- 📚 **Bibliotecas de Python** : [Backoff](https://pypi.org/project/backoff/) o [Tenacity](https://pypi.org/project/tenacity/) +::: \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/console/billing/concepts.md b/i18n/es/docusaurus-plugin-content-docs/current/console/billing/concepts.md index 489f855d..11099578 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/console/billing/concepts.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/console/billing/concepts.md @@ -1,108 +1,85 @@ --- -title: Gestor de costes +title: Gestor de costos --- import billingDashboardPreview from '@site/docs/console/billing/images/billing_dashboard_preview.png' -import billingDashboardTotal from '@site/docs/console/billing/images/billing_dashboard_consumption_total.png' -import billingDashboardPerProduct from '@site/docs/console/billing/images/billing_dashboard_consumption_per_product.png' -import billingDashboardPerService from '@site/docs/console/billing/images/billing_dashboard_consumption_per_service.png' +import billingDashboardConsumptionTotal from '@site/docs/console/billing/images/billing_dashboard_consumption_total.png' +import billingDashboardConsumptionPerProduct from '@site/docs/console/billing/images/billing_dashboard_consumption_per_product.png' +import billingDashboardConsumptionPerService from '@site/docs/console/billing/images/billing_dashboard_consumption_per_service.png' import billingConsumptionDetails from '@site/docs/console/billing/images/billing_consumption_details.png' import billingPricesList from '@site/docs/console/billing/images/billing_prices_list.png' -El **Gestor de costes** es accesible desde el menú principal de la Consola Cloud Temple. Le ofrece una visión completa y transparente del consumo de recursos cloud, permitiéndole gestionar sus gastos de forma autónoma. +## Presentación -:::info -El acceso al Gestor de costes requiere los derechos apropiados en su tenant. Póngase en contacto con su responsable comercial para obtener más información y conocer las condiciones de acceso al servicio. -::: - -## Panel de control - -El panel de control del Gestor de costes es la página de inicio del módulo. Ofrece una vista resumida de todo su consumo para el período seleccionado. +El **Gestor de costos** es el módulo de la Consola Cloud Temple dedicado a la **visibilidad de su consumo**. Le permite seguir en tiempo real el uso de sus recursos cloud dentro de un tenant y tener una visión clara de sus gastos. -Panel de control del Gestor de costes +Este módulo responde a una necesidad fundamental: **comprender qué consume, cuándo lo consume y a qué costo**, sin tener que navegar por tablas complejas o facturas detalladas. -Desde este panel puede: - -- **Seleccionar un período** de análisis (mes actual, mes anterior o un rango de fechas personalizado), -- **Navegar entre las distintas pestañas** para refinar el análisis de su consumo, -- **Exportar sus datos de consumo** para integrarlos en sus herramientas de informes internas. - -## Consumo global +:::info +El Gestor de costos muestra el **consumo real** de sus recursos en el tenant seleccionado. Los datos se actualizan periódicamente para reflejar su uso actual. +::: -La pestaña **Consumo global** muestra el importe total consumido durante el período seleccionado. Es el punto de partida para comprender la evolución general de sus gastos cloud. +## Panel de control principal -Consumo global del período +La página de inicio del Gestor de Costos presenta un resumen visual de su consumo. Al abrirlo, dispone de una vista general que le permite identificar rápidamente las tendencias de consumo y las partidas más importantes. -Este gráfico le permite visualizar: + -- El **importe total** consumido durante el período, -- La **evolución temporal** de su consumo (día a día o mes a mes según la granularidad elegida), -- Posibles **picos de consumo** para identificar rápidamente anomalías o incrementos de carga. +El panel de control está organizado en torno a varios ejes complementarios, accesibles a través de las pestañas disponibles en la parte superior de la página. -:::info -**Lectura del gráfico para el mes en curso** +## Consumo total -Para el mes en curso, el gráfico distingue dos zonas visuales: +La pestaña **Consumo total** ofrece una vista agregada de todo su consumo durante el período seleccionado. Este gráfico le permite observar la evolución de sus gastos a lo largo del tiempo e identificar posibles picos o tendencias. -- La parte **azul (sólida)** representa el **consumo real hasta la fecha**, es decir, los recursos efectivamente consumidos desde el inicio del mes, -- La parte **naranja (rayada)** representa la **previsión** estimada hasta el final del mes, calculada en base a su ritmo de consumo actual. + -Esta proyección le permite anticipar su presupuesto de fin de mes en tiempo real. -::: +Puede ajustar el **período de visualización** para refinar su análisis: día, semana, mes o rango personalizado. La curva de consumo total es directamente legible y no requiere conocimientos técnicos específicos. ## Consumo por producto -La pestaña **Consumo por producto** le permite identificar el desglose de sus gastos según los productos Cloud Temple a los que está suscrito. - -Desglose del consumo por producto - -Cada producto (IaaS, Almacenamiento, Red, etc.) se presenta con: +La pestaña **Consumo por producto** desglosa su consumo según las principales familias de servicios de Cloud Temple a las que se ha suscrito: compute, almacenamiento, red, etc. -- Su **participación relativa** en el consumo total, -- Su **importe absoluto** para el período, -- La **tendencia** con respecto al período anterior. + -Esta vista es especialmente útil para identificar qué productos representan las partidas de gasto más importantes y orientar sus decisiones de optimización. +Esta vista es particularmente útil para **identificar las partidas de gasto más significativas** y orientar las decisiones de optimización. Cada producto se representa con su participación relativa en el consumo global, lo que facilita su lectura y comparación. ## Consumo por servicio -La pestaña **Consumo por servicio** refina el análisis desglosando el consumo a nivel de los servicios individuales dentro de cada producto. +La pestaña **Consumo por servicio** ofrece un nivel de detalle adicional al desglosar el consumo por **servicio específico** dentro de cada producto. -Desglose del consumo por servicio + -Esta vista detallada le permite: +Este nivel de granularidad le permite profundizar en el análisis: por ejemplo, puede distinguir el consumo de sus máquinas virtuales, su almacenamiento en bloque, sus instantáneas o su ancho de banda de red, e identificar así con precisión los recursos que generan mayores costos. -- Identificar con precisión **qué servicios** contribuyen más a su facturación, -- Comparar el consumo de servicios similares, -- Detectar servicios infrautilizados o sobredimensionados para **optimizar su huella cloud**. +## Detalle del consumo -## Detalles de consumo +La vista **Detalle del consumo** presenta una tabla exhaustiva que enumera todos los recursos consumidos durante el período. Cada fila corresponde a un recurso identificable (máquina virtual, volumen de almacenamiento, dirección IP pública, etc.) con su nivel de consumo asociado. -La sección **Detalles de consumo** lista todas las líneas de facturación individuales del período seleccionado. Es la vista más detallada del Gestor de costes. + -Detalles de las líneas de consumo +Este detalle es valioso para los equipos que deseen realizar un **desglose analítico** de sus costos o para identificar recursos potencialmente no utilizados que podrían desactivarse con el fin de optimizar los gastos. -Para cada línea de consumo encontrará: +## Cuadro de tarifas -- El **nombre del recurso** consumido, -- La **cantidad** consumida y la **unidad de medida** asociada (horas, GB, solicitudes, etc.), -- El **precio unitario** aplicado, -- El **importe total** de esta línea durante el período. +La pestaña **Cuadro de tarifas** (o **Lista de precios**) hace referencia a todos los precios unitarios aplicables a los recursos disponibles en su tenant. Se trata del catálogo de precios vigente que le permite anticipar el costo de nuevos recursos antes de su implementación. -Esta vista es indispensable para realizar una conciliación contable precisa o para analizar en detalle el uso de recursos específicos. + -## Catálogo de precios +Cada entrada del cuadro indica : -El **Catálogo de precios** recoge los precios unitarios de todos los recursos y servicios disponibles en su tenant Cloud Temple. +- El **tipo de recurso** afectado +- La **unidad de facturación** (por hora, por GB, por unidad, etc.) +- El **precio unitario** aplicable -Catálogo de precios unitarios +:::tip +El cuadro de tarifas es su referencia para **simular el costo** de una infraestructura antes de solicitarla. Combine esta información con los datos de consumo para identificar las palancas de optimización. +::: -Este catálogo le permite: +## Buenas prácticas -- **Anticipar el coste** de un nuevo recurso antes de pedirlo, -- Realizar **simulaciones presupuestarias** para sus proyectos cloud, -- Comparar precios entre diferentes niveles o configuraciones de recursos. +Para sacar el máximo provecho del Gestor de costos, aquí tiene algunas recomendaciones: -:::tip -Los precios mostrados en el catálogo son las tarifas contractuales aplicables a su tenant. Pueden diferir de las tarifas públicas en función de su contrato Cloud Temple. -::: +- **Consulte regularmente** su consumo para detectar rápidamente cualquier desviación de costos. +- **Compare los períodos** : la herramienta le permite analizar la evolución mes a mes para identificar tendencias. +- **Utilice la vista por servicio** para identificar recursos subutilizados u olvidados (instantáneas antiguas, volúmenes desconectados, etc.). +- **Cruce con la tabla de precios** para evaluar el impacto financiero de cualquier cambio de infraestructura antes de realizarlo. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/console/console.md b/i18n/es/docusaurus-plugin-content-docs/current/console/console.md index 5c8bf736..be6719fa 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/console/console.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/console/console.md @@ -4,37 +4,97 @@ title: Visión general ## La Consola Cloud Temple -La consola Cloud Temple es la plataforma de gestión en la nube (**Cloud Management Platform**) integrada de Cloud Temple. Constituye el punto central para gestionar todo su conjunto de recursos en la nube, ofreciéndole una interfaz única y potente. +La consola Cloud Temple es la plataforma de gestión cloud (**Cloud Management Platform**) integrada de Cloud Temple. Es el punto central para gestionar todos sus recursos cloud, ofreciéndole una interfaz única y potente. -Gracias a la **Consola**, puede supervisar y operar sus infraestructuras en la nube con gran facilidad. A continuación, se presenta una visión general de sus funciones principales: +Gracias a la **Consola**, puede supervisar y gestionar sus infraestructuras cloud con gran facilidad. A continuación, un resumen de sus principales funcionalidades:

El módulo IAM

Descubra el módulo IAM (Identity Access Management) de la consola Cloud Temple.

- Aquí → + Ir aquí →

Soporte

-

Visualización de operaciones programadas y gestión de Incidentes

- Aquí → +

Visualización de operaciones planificadas y gestión de Incidentes

+ Ir aquí →

Desplegar infraestructura

-

Solicitar y seguir el despliegue de nuevas recursos.

- Descubrir los menús → +

Solicite y supervise el despliegue de nuevos recursos.

+ Explorar menús →

Métricas

-

Solicitar y seguir el despliegue de nuevas recursos.

- Descubrir los menús → +

Solicite y supervise el despliegue de nuevos recursos.

+ Explorar menús →
+
-

Gestor de costes

-

Realice un seguimiento y analice el consumo de recursos cloud por producto y por servicio.

+

Gestor de costos

+

Supervise y analice su consumo de recursos cloud por producto y por servicio.

Acceder al módulo →
+ +### Gestión de sus productos y servicios Cloud Temple + +La consola le permite gestionar de forma eficiente sus servidores virtuales, su almacenamiento, sus redes y sus servicios Cloud desde una interfaz centralizada. + +### Monitoreo e informes + +Obtenga una visión completa de sus recursos gracias a herramientas de monitoreo e informes integradas, para garantizar que sus entornos funcionen de manera óptima. + +### Automatización y orquestación + +Con su **API potente**, la consola simplifica la automatización de tareas repetitivas y la orquestación de flujos de trabajo complejos. Implemente, gestione y escale sus recursos en unos pocos clics o mediante scripts personalizados. + +### Seguridad y cumplimiento + +La consola integra funciones avanzadas para: + +- Gestionar identidades y accesos, +- Filtrar accesos para cumplir con los requisitos regulatorios, +- Reforzar sus políticas de seguridad. + +### Asistencia técnica y soporte al cliente + +La consola ofrece acceso directo a sus expedientes de asistencia técnica. Dispone de: + +- De un soporte al cliente dedicado para resolver sus problemas técnicos, +- De asistencia para la configuración inicial de sus servicios. + +### Servicios profesionales + +¿Necesita experiencia? Aproveche el acompañamiento de nuestros ingenieros para: + +- Asesoramiento personalizado, +- Ayuda en la implementación de arquitecturas cloud, +- Formación para sus equipos. + +El portal Cloud Temple **'Console'** es **la plataforma de gestión cloud** (Cloud Management Plateform) integrada de **Cloud Temple**. + +La Consola Cloud Temple le permite gestionar los recursos cloud, como servidores virtuales, almacenamiento, redes y servicios de aplicaciones. +Es una interfaz de gestión centralizada que le permite diseñar y operar su infraestructura cloud. + +La Consola Cloud Temple permite, entre otras cosas, a sus equipos: + +- **La gestión de sus productos y servicios** Cloud Temple, +- **La supervisión y el reporting** del funcionamiento de sus recursos cloud, +- **La automatización y la orquestación**: la Consola, gracias a su API, permite automatizar tareas repetitivas y orquestar flujos de trabajo complejos para implementar, gestionar y escalar sus recursos cloud, +- **La seguridad y el cumplimiento**: la Consola permite el control de identidad y el filtrado de accesos para garantizar el cumplimiento normativo y el respeto a sus políticas de seguridad, +- **Integración de los marcos de adopción Cloud** (Cloud Adoption Framework): gracias a sus funciones de hibridación, puede garantizar la continuidad operativa con proveedores de cloud de terceros (Microsoft Azure et Amazon AWS) desde una única interfaz, facilitando la integración y la gestión de sus entornos de aplicaciones multi-cloud. +- **El acceso y el seguimiento de los expedientes de asistencia técnica**: También está disponible una asistencia técnica dedicada. Esto incluye el soporte al cliente para la resolución de problemas técnicos, así como la asistencia en la configuración inicial. +- **La posibilidad de suscribirse a servicios profesionales**: para gestionar eficazmente sus entornos Cloud, sus equipos pueden beneficiarse de la asistencia de nuestros ingenieros para asesoramiento, ayuda en la implementación de arquitecturas o formación. + +## Acceso a las funcionalidades de usuario mediante la API + +El acceso a todas las funcionalidades de la Consola es posible a través de la API de Consola. +Puede obtener el detalle de los verbos y las configuraciones a través de **'Perfil'** y **'APIs'** + +## Proveedor Terraform + +Cloud Temple pone a su disposición un [provider Terraform](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest) para gestionar *"como código"* su plataforma Cloud. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/console/console_quickstart.md b/i18n/es/docusaurus-plugin-content-docs/current/console/console_quickstart.md index 29edcfee..314157b0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/console/console_quickstart.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/console/console_quickstart.md @@ -1,5 +1,5 @@ --- -title: Guía rápida +title: Inicio rápido --- import shivaLogin from '@site/docs/console/images/shiva_login.png' import shivaHome from '@site/docs/console/images/shiva_home.png' @@ -14,25 +14,25 @@ import shivaOnboard_009 from '@site/docs/console/images/shiva_onboard_009.png' import shivaOnboard_008 from '@site/docs/console/images/shiva_onboard_008.png' import shivaSupportCriticities from '@site/docs/console/images/shiva_incident_criticities.png' -## Requis +## Requisitos -- Tener suscrito a una oferta Cloud Temple. Para suscribirse de forma sencilla, puede [contactarnos](https://www.cloud-temple.com/contactez-nous/) o por correo electrónico a la dirección __contact@cloud-temple.com__. +- Haber suscrito un producto Cloud Temple. Para suscribirse, puede [contactarnos](https://www.cloud-temple.com/contactez-nous/) o por correo electrónico a la dirección __contact@cloud-temple.com__. - Tener acceso a la Consola -- Tener su dirección IPv4 pública declarada en la zona de confianza Cloud Temple (el acceso a la Consola está limitado a las direcciones de confianza identificadas) +- Tener declarada su dirección IPv4 pública en la zona de confianza de Cloud Temple (el acceso a la Consola está limitado a las direcciones de confianza identificadas) -## Conexión a su inquilino Cloud Temple +## Conexión a su tenant de Cloud Temple -La consola está disponible a través de la siguiente URL: [Console](https://shiva.cloud-temple.com) o bien desde la URL directa que le fue proporcionada por correo electrónico. +La consola es accesible a través de la siguiente URL: [Consola](https://shiva.cloud-temple.com) o bien desde la URL directa que se le ha comunicado por correo electrónico. -La primera página le permite seleccionar la [organización](iam/concepts.md#organizaciones) en la que fue creado su usuario. -Una vez que haya especificado la empresa, haga clic en __'Conectarse'__. +La primera página le permite seleccionar [la organización](iam/concepts.md#organisations) en la que se ha creado su usuario. +Una vez introducida la empresa, haga clic en __'Iniciar sesión'__. -A continuación, se le redirigirá a una página donde se le pedirá que se autentique. -Una vez conectado, llegará a esta página. +A continuación, será redirigido a una página que le solicitará autenticarse. +Una vez conectado, accederá a esta página. -Aquí encontrará todas las métricas relacionadas con los productos suscritos en su ámbito. En caso de problemas con sus productos VMware y/o OpenIaaS, se mostrarán alertas, cuyo color está relacionado con su gravedad. +Encontrará allí todas las métricas relacionadas con los productos suscritos en su ámbito. En caso de problema(s) con sus productos VMware y/o OpenIaaS, se mostrarán alertas; el color está relacionado con su importancia. @@ -40,64 +40,64 @@ Aquí encontrará todas las métricas relacionadas con los productos suscritos e La consola está disponible en __francés__, __inglés__. Puede cambiar el idioma de funcionamiento mediante el icono __idioma__ situado en la parte superior derecha de la pantalla. -El cambio de idioma de un usuario debe realizarse en su __'Perfil'__, en la parte superior derecha de la pantalla, dentro de los __'Ajustes de usuario'__. +El cambio de idioma de un usuario debe realizarse en su __'Perfil'__, en la parte superior derecha de la pantalla, en los __'Ajustes de usuario'__. -La configuración se realiza para cada inquilino [Tenant](iam/concepts.md#management-of-owners-on-a-tenant). +La configuración se aplica a cada tenant [Tenant](iam/concepts.md#tenant). ## Acceso al soporte técnico -En cualquier momento, puede contactar al __equipo de soporte Cloud Temple__ a través del __icono de 'balsa'__ situado en la parte superior derecha de la pantalla. +En cualquier momento, puede contactar al __equipo de soporte de Cloud Temple__ a través de __el ícono 'boya'__ ubicado en la esquina superior derecha de la pantalla. Será guiado durante todo el proceso de solicitud de soporte. -La primera etapa consiste en identificar el tipo de solicitud de soporte: +El primer paso es identificar el tipo de solicitud de soporte: -- Solicitar consejos sobre el uso de un producto (fuera de incidentes), +- Solicitar asesoramiento sobre el uso de un producto (fuera de incidentes), - Solicitar asistencia relacionada con su cuenta de cliente, -- Reportar un incidente o solicitar soporte técnico. -- Solicitar la asistencia de un servicio profesional (puesta a disposición de un ingeniero Cloud Temple ante una problemática). +- Declarar un incidente o solicitar soporte técnico. +- Solicitar la asistencia de un servicio profesional (puesta a disposición de un ingeniero de Cloud Temple para resolver un problema). -A continuación, tiene la posibilidad de proporcionar detalles adicionales e incluir archivos (por ejemplo, imágenes o registros). +Posteriormente, tiene la posibilidad de proporcionar detalles e incluir archivos (imágenes o registros, por ejemplo). -El cliente también puede especificar un nivel de criticidad (P1 a P5) en la descripción del ticket, en caso de un incidente de seguridad, tal como: +El solicitante también puede especificar un nivel de criticidad (P1 a P5) en la descripción del ticket, en caso de un incidente de seguridad, como: -__CRÍTICO (P1)__: +__CRÍTICA (P1)__: -- Suspensión de fuga de datos sensibles -- Detección de acceso no autorizado a sus datos -- Compromiso de sus credenciales de administración +- Sospecha de fuga de datos sensibles +- Detección de un acceso no autorizado a sus datos +- Comprometimiento de sus credenciales de administración - Indisponibilidad total de sus servicios críticos - Comportamientos anómalos en datos sensibles - Violación de datos personales -__ALTO (P2)__: +__ALTA (P2)h__: -- Fallos en el acceso de usuarios +- Mal funcionamiento de los accesos de usuario - Anomalía en el cifrado de sus datos -- Pérdida de acceso a ciertas funciones críticas +- Pérdida de acceso a ciertas funcionalidades críticas - Incoherencia en los datos -- Lentitud significativa que afecta la actividad +- Lentitud importante que afecta a la actividad -__MEDIO (P3)__: +__MEDIA (P3)__: - Problema de rendimiento localizado - Incidente en una función no crítica - Error de configuración con impacto limitado - Dificultad de acceso puntual -__BAJO (P4)__: +__BAJA (P4)__: - Solicitud de investigación - Anomalía sin impacto directo -- Consulta de conformidad +- Consulta sobre cumplimiento - Necesidad de aclaración técnica __SERVICIO OPERATIVO (P5)__: @@ -106,51 +106,51 @@ __SERVICIO OPERATIVO (P5)__: -Una vez realizada su solicitud, podrá recuperar sus solicitudes a través del __icono de 'balsa'__ situado en la parte superior derecha de la pantalla: +Una vez realizada su solicitud, es posible encontrar sus solicitudes a través de __el ícono 'boya'__ ubicado en la esquina superior derecha de la pantalla: -## Acceso a las funcionalidades del usuario a través de la interfaz web +## Acceso a las funcionalidades de usuario a través de la interfaz web -Todas las funcionalidades accesibles para su usuario (según sus permisos) se encuentran a la izquierda de la pantalla, en la barra verde. -Las funcionalidades están agrupadas por módulo. Principalmente, esto incluye: +El conjunto de funcionalidades accesibles para su usuario (en función de sus permisos) se encuentra a la izquierda de la pantalla, en la barra verde. +Las funcionalidades están agrupadas por módulo. Esto incluye principalmente: - El __inventario__ de sus recursos, - El __seguimiento de operaciones__, -- El __piloto de recursos IaaS__ (Cálculo, almacenamiento, red, ...), -- El __piloto de recursos OpenIaaS__ (Cálculo, almacenamiento, red, ...), -- El acceso a los __servicios complementarios__ (Bastión, monitorización, ...), -- La __administración de su organización__ (Gestión de tenants, permisos, ...). +- La __gestión de recursos IaaS__ (Cálculo, almacenamiento, red, ...) +- La __gestión de recursos OpenIaaS__ (Cálculo, almacenamiento, red, ...) +- El acceso a los __servicios complementarios__ (Bastión, monitoring, ...) +- La __administración de su organización__ (Gestión de tenants, permisos, ...) -La activación de un módulo para un usuario depende de sus permisos. Por ejemplo, el módulo __'Pedido'__ no estará disponible si el usuario no dispone del permiso __'ORDER'__. +La activación de un módulo para un usuario depende de los permisos de este. Por ejemplo, el módulo __'Pedido'__ no estará disponible si el usuario no cuenta con el permiso __'ORDER'__. -A continuación se presenta una descripción de los diferentes módulos disponibles. Nuevos módulos se añaden regularmente a la consola: +A continuación se presenta una descripción de los diferentes módulos disponibles. Nuevos módulos se añaden regularmente para enriquecer la consola:
-- __Panel de control__: permite obtener rápidamente una visión general del __total de recursos de cálculo y almacenamiento__, las estadísticas de la __copia de seguridad__ y un __resumen de los casos de soporte__, -- __Inventario__: permite tener una visión de todos sus recursos del tipo __'máquinas virtuales'__. Si se utilizan __etiquetas__, permite visualizar por __etiqueta__ (por ejemplo, vista empresarial, vista aplicativa, ...), -- __Infogestión__: proporciona acceso al seguimiento de sus __solicitudes de soporte__ y a la __metodología de servicios__, -- __IaaS__: permite el __piloto de infraestructuras IaaS VMware__ (máquinas virtuales, clústeres, hipervisores, replicaciones, copias de seguridad, ...), -- __OpenIaaS__: permite el __piloto de recursos Xen Orchestra__ (máquinas virtuales, copias de seguridad, ...), -- __OpenShift__: permite el piloto de su **arquitectura PaaS RedHat OpenShift** y la gestión de sus contenedores en las 3 zonas de disponibilidad de la plataforma. -- __Bastión__: Permite desplegar y gestionar appliances bastión SSH/RDP en sus redes, -- __Red__: permite el piloto de los __redes de nivel 2 y 3__, de las __IP públicas__ y de sus __circuitos de telecomunicaciones__, -- __Colocación__: Ofrece la vista sobre los equipos ubicados en zonas de __colocación compartida o dedicada__, -- __Pedido__: Permite realizar pedidos de recursos y seguir los despliegues, -- __Administración__: Agrupa las funciones de administración de usuarios y tenants, así como el acceso a la auditoría global. +- __Panel de Control__ : permite obtener rápidamente una visión del __total de recursos de cálculo y almacenamiento__, las estadísticas de la __copia de seguridad__ y un __resumen de los expedientes de soporte__, +- __Inventario__ : permite obtener una visión del conjunto de sus recursos de tipo __'máquinas virtuales'__. Si se utilizan __etiquetas__, permite obtener una vista por __etiqueta__ (por ejemplo, vista empresarial, vista de aplicación, ...), +- __Gestión externa__ : da acceso al seguimiento de sus __solicitudes de soporte__ y a la __métrica de los servicios__, +- __IaaS__ : permite la __gestión de infraestructuras IaaS VMware__ (Máquinas virtuales, clústers, hipervisores, réplicas, copias de seguridad, ...), +- __OpenIaaS__ : permite la __gestión de recursos Xen Orchestra__ (Máquinas virtuales, copias de seguridad, ...), +- __OpenShift__ : permite la gestión de su **arquitectura PaaS RedHat OpenShift** y la administración de sus contenedores en las 3 zonas de disponibilidad de la plataforma. +- __Bastión__ : Permite desplegar y gestionar appliances de bastión SSH/RDP en sus redes, +- __Red__ : permite la gestión de __redes de nivel 2 y 3__, de las __IPs públicas__ y de sus __circuitos de telecomunicaciones__, +- __Colocación__ : Ofrece la visión de los equipos situados en zona de __colocación compartida o dedicada__, +- __Pedido__ : Permite el pedido de recursos y el seguimiento de los despliegues, +- __Administración__ : Agrupa las funciones de administración de usuarios y tenants, así como el acceso al registro global.
-Los pictogramas __'NEW'__ indican que el producto correspondiente ha sido provisionado pero aún no está calificado como __oferta SecNumCloud__, y los pictogramas __'BETA'__ indican que el producto ha sido provisionado y acaba de ser calificado como __oferta SecNumCloud__. +Los pictogramas __'NEW'__ indican que el producto en cuestión ha sido aprovisionado pero aún no está cualificado para la __oferta SecNumCloud__, y __'BETA'__ indican que el producto en cuestión ha sido aprovisionado y acaba de ser cualificado para la __oferta SecNumCloud__. -__Auditoría - Seguimiento de Actividades__ +__Registro - Seguimiento de Actividades__ ===================================== -La página de actividades tiene como objetivo proporcionar una visibilidad completa sobre todas las operaciones de lectura y escritura realizadas dentro de la consola, garantizando así una trazabilidad y seguridad mejoradas. Destaca dos pestañas principales: Recientes y Archivados. +La página de actividades está destinada a proporcionar una visibilidad completa sobre todas las operaciones de lectura y escritura realizadas dentro de la consola, asegurando así una trazabilidad y una seguridad mejoradas. Destaca las dos pestañas principales: Recientes y Archivadas. -### __Estructura de la página__ +### __Estructura de la Página__ #### __Pestañas__ @@ -161,17 +161,17 @@ La página de actividades tiene como objetivo proporcionar una visibilidad compl - __Archivados__ -- Operaciones durante un período más largo +- Operaciones en un período más largo - Operaciones archivadas para trazabilidad y cumplimiento -#### __Information Displayed__ +#### __Información Mostrada__ -- Date and Time +- Fecha y Hora -- Operation Type - - Status -- User -- Operation Description +- Tipo de operación + - Estado +- Usuario +- Descripción de la operación #### __Funcionalidad__ @@ -179,28 +179,28 @@ La página de actividades tiene como objetivo proporcionar una visibilidad compl ### __Uso__ -- __Acceso:__ permiso `activity_read` -- __Navegación:__ - - Seleccione la pestaña "Recientes" para operaciones en tiempo real. +- __Acceso :__ permiso `activity_read` +- __Navegación :__ + - Seleccione la pestaña "Recientes" para las operaciones en tiempo real. - Elija "Archivados" para consultar el historial. - Utilice las funciones de búsqueda y filtrado para localizar operaciones específicas. #### __Nota de Cumplimiento__ -De acuerdo con la calificación SecNumCloud, el almacenamiento de los eventos de la consola Cloud Temple tiene una duración mínima de __6 meses__, garantizando así el cumplimiento de los requisitos de seguridad y trazabilidad. +Conforme a la certificación SecNumCloud, el almacenamiento de los eventos de la consola Cloud Temple tiene una duración mínima de __6 meses__, garantizando así el cumplimiento de los requisitos de seguridad y trazabilidad. ## Consulta de las últimas actualizaciones -Haga clic en la esquina inferior izquierda de la barra verde sobre el icono __'Novedades'__. Obtendrá un detalle de los cambios realizados en cada versión de la consola Cloud Temple. +Haga clic en la esquina inferior izquierda de la barra verde en el icono __'Novedades'__. Verá el detalle de los cambios para cada versión de la consola Cloud Temple. ## Acceso a las funcionalidades de usuario a través de la API -El acceso a todas las funcionalidades de la Consola está disponible a través de la API de la Consola. Puede obtener detalles sobre los verbos y configuraciones mediante __'Perfil'__ y __'APIs'__: +El acceso a todas las funcionalidades de la Consola es posible a través de la API de Consola. Puede consultar el detalle de los métodos y las configuraciones a través de __'Perfil'__ y __'APIs'__ : -## Terraform Provider +## Proveedor Terraform -Cloud Temple vous met à disposition un [provider Terraform](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest) pour piloter votre plateforme Cloud *"as code"*. +Cloud Temple pone a su disposición un [provider Terraform](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest) para gestionar *"como código"* su plataforma Cloud. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/console/iam/concepts.md b/i18n/es/docusaurus-plugin-content-docs/current/console/iam/concepts.md index c69e9703..3765e40c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/console/iam/concepts.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/console/iam/concepts.md @@ -19,21 +19,20 @@ import shivaTenantRessources_01 from '@site/docs/console/iam/images/shiva_tenant ## Usuarios -Las cuentas de acceso a la Consola se crean mediante invitación por parte de la cuenta principal del patrocinador (independientemente del repositorio de autenticación). +Las cuentas de acceso a la Consola se crean por invitación de la cuenta maestra del patrocinador (quelque soit le référentiel d'authentification). +Las credenciales son globales para su [Organización](#organisations). -Las credenciales son globales para su [Organización](#organizaciones). - -*__Nota:__ [La federación de identidad se gestiona a nivel de organización](#authentication-mechanisms)* +*__Nota :__ [La federación de identidades se gestiona a nivel de organización](#mécanismes-dauthentification)* ### Creación de una cuenta de usuario en su organización -La creación de una cuenta de usuario en su organización se realiza mediante invitación. Para invitar a un usuario a una [Organización](#organizaciones), vaya al menú __'Administración'__ situado en la parte izquierda de su pantalla, en la barra verde, y luego al submenú __'Usuarios'__. +La creación de una cuenta de usuario en su organización se realiza mediante invitación. Para invitar a un usuario a una [Organización](#organisations), vaya al menú __'Administración'__ en la barra verde a la izquierda de su pantalla y luego al submenú __'Usuarios'__. Haga clic en el botón __'Nuevo Usuario'__ desde la página de usuarios. -A continuación, indique la dirección de correo electrónico del usuario. +A continuación, indique la dirección de correo electrónico del usuario @@ -41,7 +40,7 @@ El usuario recibirá entonces un correo de verificación. -Una vez finalizada la verificación, el usuario podrá iniciar sesión en la consola. +Una vez completada la verificación, el usuario podrá iniciar sesión en la consola. ### Asignación de permisos a un usuario @@ -49,296 +48,304 @@ La gestión de los derechos de usuario se realiza desde la página de usuario. -Por defecto, un usuario no tiene ningún derecho. Es necesario que el administrador que realizó la invitación le otorgue los derechos necesarios para su actividad. Basta con hacer clic en el menú __'Acciones'__ del usuario y seleccionar la opción __'Editar'__. +Por defecto, un usuario no tiene derechos. Por lo tanto, es necesario que el administrador que realizó la invitación le otorgue los derechos necesarios para su actividad. Basta con hacer clic en el menú __'Acciones'__ del usuario y elegir la opción __'Modificar'__. -A continuación aparece el menú para activar los derechos: +Aparece entonces el menú de activación de derechos: -La configuración de permisos debe realizarse para cada [Tenant](#management-of-owners-on-a-tenant) de la [Organización](#organizaciones). +La configuración de los permisos debe realizarse para cada [Tenant](#tenant) de la [Organisation](#organisations). -La lista de permisos y sus definiciones está disponible [aquí](#permissions). +La lista de permisos y su definición está disponible [aquí](#permissions). -### Reinscription of a user +### Reinscripción de un usuario -When a user has been provisioned but has not validated their registration within the expiration period of the email sent by the Console, they can no longer confirm their registration. In such cases, it is possible to resend a link so that the user can renew their initial registration. +Cuando un usuario ha sido provisionado pero no ha validado su inscripción dentro del plazo de expiración del correo electrónico enviado por la Consola, ya no puede confirmar su inscripción. En ese caso, es posible reenviarle un enlace para que renueve su primera inscripción. -To perform a user's re-registration, go to the __'User'__ tab in the Administration panel, located at the bottom-left of the screen. +La reinscripción de un usuario debe realizarse en la pestaña __'Usuario'__ del panel de Administración, en la parte inferior izquierda de la pantalla. -Select the user you wish to re-register, then click the action button at the end of the row and choose __'Re-registration'__. +Seleccione el usuario que desea reinscribir y haga clic en el botón de acción al final de la fila, luego __'Reinscripción'__. -__Warning__: Make sure you are the original requester of the re-registration for your user account. Please report any requests that do not originate from you via a support ticket. +__Advertencia__: Asegúrese de ser el originador de la solicitud de reinscripción de su cuenta de usuario. Por favor, notifique cualquier solicitud que no provenga de usted a través de un ticket de soporte. -### Update your profile +### Actualizar su perfil -This action is available only for local accounts (non-SSO). +Esta acción solo está disponible para una cuenta local (no SSO). -Go to your __'Profile'__, located in the top right corner of the screen, then select __'User Settings'__ and choose the __'Update your profile'__ action. +Seleccione en su __'Perfil'__, en la esquina superior derecha de la pantalla, luego __'Configuración de usuario'__ y seleccione la acción __'Actualizar su perfil'__. -Next, go to your email inbox and click on the link generated by the Console. Simply follow the steps to update your profile. +A continuación, acceda a su bandeja de correo electrónico y haga clic en el enlace generado por la Consola. Simplemente siga los pasos para actualizar su perfil. -__Warning__: Make sure you are the original requester of the profile update. Please report any requests that do not come from you via a support ticket. +__Advertencia__: Asegúrese de que la solicitud de actualización del perfil haya sido iniciada por usted. Notifique cualquier solicitud que no provenga de usted mediante un ticket de soporte. -### Reset password +### Restablecimiento de la contraseña -This action is only available for local accounts (non-SSO). +Esta acción solo está disponible para una cuenta local (no SSO). -Go to your __'Profile'__, located in the top right corner of the screen, then select __'User Settings'__ and choose the __'Reset password'__ action. +Seleccione en su __'Perfil'__, en la parte superior derecha de la pantalla, luego __'Configuración de usuario'__ y seleccione la acción __'Restablecer contraseña'__. -Next, go to your email inbox and click on the link generated by the Console. Simply follow the steps to update your password. +A continuación, diríjase a su buzón de correo y haga clic en el enlace generado por la Consola. Simplemente siga los pasos para actualizar su contraseña. -__Warning__: Make sure you are the one who initiated the password reset request. Please report any requests that do not come from you via a support ticket. +__Advertencia__: Asegúrese de que la solicitud de restablecimiento de su contraseña la haya iniciado usted mismo. Notifique cualquier solicitud que no provenga de usted mediante un ticket de soporte. -### Reset of Two-Factor Authentication +### Restablecimiento de la autenticación de doble factor -This action is only available for local accounts (non-SSO). +Esta acción solo está disponible para una cuenta local (no SSO). -Go to your __'Profile'__, located in the top right corner of the screen, then select __'User Settings'__ and choose the __'Reset MFA'__ action. +Seleccione en su __'Perfil'__, en la parte superior derecha de la pantalla, luego __'Configuración de usuario'__ y seleccione la acción __'Restablecer MFA'__. -Next, go to your email inbox and click on the link generated by the Console. Simply follow the steps to update your two-factor authentication. +A continuación, diríjase a su buzón de correo y haga clic en el enlace generado por la Consola. Simplemente siga los pasos para actualizar su autenticación de doble factor. -__Warning__: Make sure you are the one initiating the request to reset your two-factor authentication. Please report any requests that do not come from you via a support ticket. +__Advertencia__: Asegúrese de ser el originador de la solicitud de restablecimiento de su autenticación de doble factor. Informe de cualquier solicitud que no provenga de usted a través de un ticket de soporte. ### Eliminación de un usuario -La eliminación de un usuario se debe realizar en la pestaña __'Usuario'__ del panel de Administración, en la parte inferior izquierda de la pantalla. +La eliminación de un usuario debe realizarse en la pestaña __'Usuario'__ del panel de Administración, en la parte inferior izquierda de la pantalla. -Seleccione el usuario que desea eliminar, luego haga clic en el botón de acción al final de la fila y elija __'Eliminar'__. +Seleccione el usuario que desea eliminar y haga clic en el botón de acción al final de la fila, luego en __'Eliminar'__. -Nota: No puede eliminarse a sí mismo y no puede eliminar un usuario con el rol __'Propietario'__. +Nota: No puede eliminarse a sí mismo y no puede eliminar a un usuario __'Propietario'__. -### Desconectarse +### Cerrar sesión -La desconexión de un usuario se debe realizar en su __'Perfil'__, en la parte superior derecha de la pantalla, y luego seleccionar __'Desconectar'__. +La desconexión de un usuario debe realizarse en su __'Perfil'__, en la esquina superior derecha de la pantalla, y luego en __'Cerrar sesión'__. -Una desconexión automática se realiza cuando expira el token de sesión (JWT Token). +Se realiza una desconexión automática al expirar el token de sesión (JWT Token). ### Cambiar el idioma de un usuario -El cambio de idioma de un usuario se realiza en su __'Perfil'__, en la parte superior derecha de la pantalla, dentro de los __'Ajustes del usuario'__. +El cambio de idioma de un usuario debe realizarse en su __'Perfil'__, en la parte superior derecha de la pantalla, en los __'Ajustes de usuario'__. -La configuración se realiza por cada inquilino [Tenant](#management-of-owners-on-a-tenant). +La configuración se aplica a cada tenant [Tenant](#tenant). -### Suscripciones a notificaciones temáticas +### Suscripción a notificaciones temáticas -La gestión de suscripciones permite recibir correos electrónicos relacionados con las temáticas activadas, que se enviarán automáticamente cuando ocurran eventos correspondientes. +La gestión de suscripciones permite recibir correos electrónicos relacionados con las temáticas activadas, que se enviarán automáticamente cuando se produzcan los eventos correspondientes. -Está disponible en el perfil de usuario, en la pestaña "Mis suscripciones": +Se accede desde el perfil de usuario, en la pestaña "Mis suscripciones": -Por ejemplo, en caso de incidente, se generarán notificaciones por correo electrónico específicas para esta temática. + Por ejemplo, en caso de incidente, se generarán notificaciones por correo electrónico específicas para esta temática. La lista de temáticas disponibles puede evolucionar y enriquecerse progresivamente para adaptarse a las necesidades y cambios en nuestro entorno operativo. -## Permissions +## Permisos -The Console allows for fine-grained management of user rights within an organization, with segregation by tenant. -Initially, it is the primary account of the sponsor that enables the initial configuration of accounts and associated permissions. -Subsequently, the __'iam_write'__ permission allows an account to manage the permissions of other users. +La Consola permite una gestión granular de los derechos de los usuarios de una organización, con una segregación por tenant. +Inicialmente, es la cuenta principal del cliente la que permite la configuración inicial de las cuentas y los permisos asociados. +Posteriormente, el permiso __'iam_write'__ permite a una cuenta administrar los permisos de otros usuarios. ### Permisos disponibles para los usuarios de su organización -Cuando se crea un usuario, no tiene ningún permiso por defecto. Cada permiso se asigna de forma individual y funciona de manera unitaria, sin solapamiento con otros permisos. Se aplican en conjunto, lo que significa que un usuario debe poseer todos los permisos necesarios para realizar una acción específica. +Cuando se crea un usuario, no tiene ningún permiso por defecto. Cada permiso se asigna individualmente y funciona de manera unitaria, sin superposición con otros permisos. Se aplican de forma conjunta, lo que significa que un usuario debe disponer de todos los permisos necesarios para realizar una acción específica. -Los siguientes permisos son configurables para cada usuario y para cada inquilino de su organización: +Los siguientes permisos son configurables para cada usuario y para cada tenant de su organización : -- Permisos de tipo “read”: permiten únicamente la consulta de recursos sin posibilidad de modificación. -- Permisos de tipo “write”: autorizan la modificación de configuraciones. -- Permisos de tipo “management”: autorizan la gestión avanzada de recursos. -- Permisos de tipo “console_access”: permiten conexiones tipo PMAD sobre los recursos. -- Permisos de tipo “virtual_machine_power”: permiten la gestión del suministro eléctrico de una máquina virtual. +- Permisos de tipo “read” : permiten únicamente la consulta de recursos sin posibilidad de modificación. +- Permisos de tipo “write” : autorizan la modificación de configuraciones. +- Permisos de tipo “management“ : autorizan la gestión avanzada de recursos. +- Permisos de tipo “console_access“ : autorizan las conexiones tipo PMAD en los recursos. +- Permisos de tipo “virtual_machine_power“ : autorizan la gestión de la alimentación de una máquina virtual. -- __Estos son permisos, no roles.__ Por lo tanto, es necesario tener los permisos READ y WRITE para modificar una configuración. +- __Estos son permisos, no roles.__ A este respecto, es necesario tener el permiso READ y WRITE para modificar una configuración. -Última actualización: 20/04/2026 +Última actualización el: 20/04/2026 -| Nombre del permiso | Descripción del permiso | +| Nombre del permiso | Descripción del permiso | | --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | -| activity_read | Consulta de registros de logs y actividades | -| activity_write | Gestión de registros de logs y actividades | -| backup_iaas_opensource_read | Oferta OpenIaaS - Gestión de recursos de tipo backup - consulta | -| backup_iaas_opensource_write | Oferta OpenIaaS - Gestión de recursos de tipo backup - modificación | -| backup_iaas_spp_read | Oferta Vmware - Gestión de recursos de tipo backup - consulta | -| backup_iaas_spp_write | Oferta Vmware - Gestión de recursos de tipo backup - modificación | -| bastion_read | Consulta de recursos de tipo bastión | -| bastion_write | Gestión de recursos (appliance, sesiones, etc.) de tipo Bastion | +| activity_read | Consulta de registros y actividades | +| activity_write | Gestión de registros y actividades | +| backup_iaas_opensource_read | Oferta OpenIaaS - Gestión de recursos de tipo backup - consulta | +| backup_iaas_opensource_write | Oferta OpenIaaS - Gestión de recursos de tipo backup - modificación | +| backup_iaas_spp_read | Oferta VMware - Gestión de recursos de tipo backup - consulta | +| backup_iaas_spp_write | Oferta VMware - Gestión de recursos de tipo backup - modificación | +| bastion_read | Consulta de recursos de tipo bastión | +| bastion_write | Gestión de recursos (appliances, sesiones,...) de tipo Bastión | | bastion_console_access | Autorización de acceso a la consola (ssh/rdp) de un recurso protegido por una appliance Bastion | -| compute_iaas_opensource_console_access | Oferta OpenIaaS - Apertura de la consola de una máquina virtual | -| compute_iaas_opensource_infrastructure_read | Oferta OpenIaaS - Consulta de datos avanzados de los recursos Xen Orchestra | -| compute_iaas_opensource_infrastructure_write | Oferta OpenIaaS - Gestión avanzada de los recursos Xen Orchestra | -| compute_iaas_opensource_read | Oferta OpenIaaS - Consulta de recursos de tipo Máquinas Virtuales | -| compute_iaas_opensource_management | Oferta OpenIaaS - Gestión de recursos de tipo Máquinas Virtuales | -| compute_iaas_opensource_virtual_machine_power | Oferta OpenIaaS - Gestión del suministro eléctrico de una máquina virtual | -| compute_iaas_opensource_replication_recover | Oferta OpenIaaS - Gestión de la replicación | -| compute_iaas_vmware_console_access | Oferta Vmware - Apertura de la consola de una máquina virtual | -| compute_iaas_vmware_infrastructure_read | Oferta Vmware - Consulta de datos avanzados de los recursos VMware (reglas de afinidad/anti-afinidad, configuración DRS, etc.) | -| compute_iaas_vmware_infrastructure_write | Oferta Vmware - Gestión avanzada de recursos VMware | -| compute_iaas_vmware_read | Oferta Vmware - Consulta de recursos de tipo Máquinas Virtuales | -| compute_iaas_vmware_management | Oferta Vmware - Gestión de recursos de tipo Máquinas Virtuales (permite cifrar una máquina virtual) | -| compute_iaas_vmware_virtual_machine_power | Oferta Vmware - Gestión del suministro eléctrico de una máquina virtual | -| baremetal_management | Oferta Bare Metal - Gestión de recursos de tipo Bare Metal | -| baremetal_read | Oferta Bare Metal - Consulta de recursos de tipo Bare Metal | -| baremetal_console_access | Oferta Bare Metal - Apertura de la consola de un Bare Metal | -| console_public_access_read | Consulta de las IPs autorizadas para acceder a la consola | -| console_public_access_write | Adición de IPs autorizadas para acceder a la consola | -| documentation_read | Consulta de recursos de documentación en Confluence | -| housing_read | Consulta de recursos de tipo colocación | -| iam_offline_access | Creación y eliminación de Tokens de Acceso Personales (PAT) | -| iam_read | Consulta de permisos de usuarios | -| iam_write | Gestión de permisos de usuarios | -| intervention_read | Consulta de cambios y despliegues programados en la plataforma | -| inventory_read | Consulta de recursos de tipo Inventario | -| inventory_write | Gestión de recursos de tipo Inventario | -| monitoring_read | Consulta del monitoreo | -| monitoring_write | Gestión del monitoreo | -| metric_read | Consulta de datos de salud sobre máquinas virtuales y hosts | -| network_read | Consulta de recursos de red | -| network_write | Gestión de recursos de red | -| order_read | Consulta de órdenes de infraestructura | -| order_write | Creación de órdenes de infraestructura | -| object-storage_iam_management | Permite gestionar cuentas de almacenamiento en el producto S3 | +| compute_iaas_opensource_console_access | Oferta OpenIaaS - Apertura de la consola de una máquina virtual | +| compute_iaas_opensource_infrastructure_read | Oferta OpenIaaS - Consulta de datos avanzados de los recursos de Xen Orchestra | +| compute_iaas_opensource_infrastructure_write | Oferta OpenIaaS - Gestión avanzada de los recursos de Xen Orchestra | +| compute_iaas_opensource_read | Oferta OpenIaaS - Consulta de recursos de tipo Máquinas Virtuales | +| compute_iaas_opensource_management | Oferta OpenIaaS - Gestión de recursos de tipo Máquinas Virtuales | +| compute_iaas_opensource_virtual_machine_power | Oferta OpenIaaS - Gestión de la alimentación de una máquina virtual | +| compute_iaas_opensource_replication_recover | Oferta OpenIaaS - Gestión de la replicación | +| compute_iaas_vmware_console_access | Oferta VMware - Apertura de la consola de una máquina virtual | +| compute_iaas_vmware_infrastructure_read | Oferta VMware - Consulta de datos avanzados de los recursos de VMware (reglas de afinidad/anti-afinidad, configuración drs, etc) | +| compute_iaas_vmware_infrastructure_write | Oferta VMware - Gestión avanzada de los recursos de VMware | +| compute_iaas_vmware_read | Oferta VMware - Consulta de recursos de tipo Máquinas Virtuales | +| compute_iaas_vmware_management | Oferta VMware - Gestión de recursos de tipo Máquinas Virtuales (permite el cifrado de una máquina virtual) | +| compute_iaas_vmware_virtual_machine_power | Oferta VMware - Gestión de la alimentación de una máquina virtual | +| baremetal_management | Oferta Bare Metal - Gestión de recursos de tipo Bare Metal | +| baremetal_read | Oferta Bare Metal - Consulta de recursos de tipo Bare Metal | +| baremetal_console_access | Oferta Bare Metal - Apertura de la consola de un Bare Metal | +| console_public_access_read | Consulta de las IPs autorizadas para acceder a la consola | +| console_public_access_write | Adición de IPs autorizadas para acceder a la consola | +| documentation_read | Consulta de los recursos de documentación de Confluence | +| housing_read | Consulta de recursos de tipo colocation | +| iam_offline_access | Creación y eliminación de Access Token Personales (PAT) | +| iam_read | Consulta de los derechos de usuario | +| iam_write | Gestión de los derechos de usuario | +| intervention_read | Consulta de los cambios y despliegues en producción previstos en la plataforma | +| inventory_read | Consulta de recursos de tipo Inventario | +| inventory_write | Gestión de recursos de tipo Inventario | +| monitoring_read | Consulta del monitoring | +| monitoring_write | Gestión del monitoring | +| metric_read | Consulta de los datos de estado de las máquinas virtuales y hosts | +| network_read | Consulta de los recursos de red | +| network_write | Gestión de los recursos de red | +| order_read | Consulta de los pedidos de infraestructura | +| order_write | Creación de pedidos de infraestructura | +| object-storage_iam_management | Permite gestionar las cuentas de almacenamiento en el producto S3 | | object-storage_read | Permite ver los buckets y las configuraciones de los buckets | -| object-storage_write | Permite editar los buckets y las configuraciones de los buckets | -| openshift_management | Permite conectarse a las plataformas OpenShift (limitado al inquilino) | -| support_management | Consulta de todos los tickets de soporte del inquilino | -| support_read | Consulta de sus propios tickets de soporte del inquilino | -| support_write | Creación de un ticket de soporte en el inquilino | -| tag_read | Consulta de etiquetas, excepto las etiquetas RTMS | -| tag_write | Gestión de etiquetas, excepto las etiquetas RTMS | -| ticket_comment_read | Consulta de comentarios | -| ticket_comment_write | Gestión de comentarios | -| ticket_read | Consulta de tickets | -| ticket_write | Gestión de tickets | +| object-storage_write | Permite editar los buckets y las configuraciones de los buckets | +| openshift_management | Permite conectarse a las plataformas OpenShift (limitado al tenant) | +| support_management | Consulta de todos los tickets de soporte del tenant | +| support_read | Consulta de sus tickets de soporte del tenant | +| support_write | Creación de un ticket de soporte en el tenant | +| tag_read | Consulta de las etiquetas, excepto las etiquetas RTMS | +| tag_write | Gestión de las etiquetas, excepto las etiquetas RTMS | +| ticket_comment_read | Consulta de los comentarios | +| ticket_comment_write | Gestión de los comentarios | +| ticket_read | Consulta de los tickets | +| ticket_write | Gestión de los tickets | | incident_management | Gestión de incidentes | -| incident_read | Consulta de incidentes | +| incident_read | Consulta de incidentes | +| billing_read | Consulta de los dashboards de consumo | +| vpc_read | Oferta VPC - Consulta de recursos de red de tipo VPC | +| vpc_write | Oferta VPC - Gestión de recursos de red de tipo VPC | +| public_cloud_vm_instances_management | Oferta VM Instances - Gestión de máquinas virtuales | +| public_cloud_vm_instances_read | Oferta VM Instances - Consulta de máquinas virtuales | +| public_cloud_vm_instances_console_access | Oferta VM Instances - Apertura de la consola de las máquinas virtuales | ## Organizaciones -La organización está vinculada a su __cuenta patrocinadora__ y al __contrato Cloud Temple asociado__. Representa su entidad (empresa, departamento, equipo, ...) que ostenta la relación contractual entre Cloud Temple y usted. +La organización está vinculada a su __cuenta patrocinadora__ y al __contrato de Cloud Temple asociado__. Representa su entidad (empresa, departamento, equipo, ...) que mantiene la relación contractual entre Cloud Temple y usted. ### Principio de una organización -La organización tiene cuatro funciones principales: +La organización tiene cuatro grandes roles: -- Representa la __entidad contractual__ en lo referente al seguimiento y la facturación, -- Define la __configuración global del mecanismo de autenticación__: la autenticación puede ser local en el nivel de la Consola o remota a través de un servicio de federación de identidades, -- Gestiona todos los __cuentas de usuarios__, -- __Federación de tenants__ (Producción, Preproducción, Desarrollo, Aplicación 1, Aplicación 2, ...) que definas para los requisitos de tu arquitectura en la nube. +- Representa __la entidad contractual__ para los aspectos de seguimiento y facturación, +- Define __la configuración global del mecanismo de autenticación__: la autenticación puede ser local a nivel de la Consola o remota a través de un servicio de federación de identidades, +- Gestiona la totalidad de las __cuentas de usuario__, +- __Federar los tenants__ (Producción, Preproducción, Dev, Aplicación 1, Aplicación 2, ...) que defina para las necesidades de su arquitectura Cloud. -Los roles (derechos/permisos) de los usuarios son configurables para cada tenant definido en tu organización. Por ejemplo, una cuenta puede estar autorizada para solicitar recursos en un tenant, pero no en otro. +Los roles (derechos/permisos) de los usuarios son configurables para cada tenant definido en su organización. Por ejemplo, una cuenta puede estar autorizada a solicitar recursos en un tenant, pero no en otro. -### Authentication mechanisms +### Mecanismos de autenticación -The Console allows you to configure the __authentication mechanism at the organization level__. You can use the Console's built-in local authentication directory, or connect your organization to one of your external authentication directories. +La Consola permite, a nivel de organización, __la configuración del mecanismo de autenticación__. Puede +utilizar el repositorio local de autenticación de la Consola o bien conectar su organización con uno +de sus repositorios de autenticación. -The following external authentication directories are supported: +Se admiten los siguientes repositorios externos: -- OpenID Connect-compatible directories, -- SAML-compatible directories, -- Microsoft ADFS -- Microsoft EntraID (Microsoft Azure Active Directory) +- Repositorios compatibles con __OpenID Connect__, +- Repositorios compatibles con __SAML__, +- __Microsoft ADFS__ +- __Microsoft EntraID__ (Microsoft Azure Active Directory) - Amazon AWS Cognito - Okta - Auth0 -- Keycloak +- KeyCloak :::info[Important] -An email address is required for all accounts originating from an identity federation. Accounts created without an email address will not be able to log in and may be automatically deleted. +Se requiere una dirección de correo electrónico para todas las cuentas procedentes de una federación de identidades. Las cuentas creadas sin dirección de correo electrónico no podrán iniciar sesión y podrían eliminarse automáticamente. ::: -## Inquilino +## Tenant -El inquilino es un __agrupamiento de recursos dentro de una organización__. Una [Organización](#organizaciones) tiene al menos un inquilino (llamado __inquilino predeterminado__, que puede renombrarse). Normalmente, se utilizan varios inquilinos para segmentar responsabilidades o perímetros técnicos. +El tenant es un __agrupamiento de recursos dentro de una organización__. Una [Organización](#organisations) tiene al menos un tenant (llamado __tenant por defecto__, que puede ser renombrado). Por lo general, se utilizan varios tenants para segmentar responsabilidades o perímetros técnicos. Por ejemplo: -- Un inquilino __Producción__ -- Un inquilino __Preproducción__ -- Un inquilino __Pruebas__ -- Un inquilino __Validación__ +- Un tenant __Producción__ +- Un tenant __Preproducción__ +- Un tenant __Pruebas__ +- Un tenant __Validación__ -Pero también es posible organizar las cosas desde una __visión aplicativa__ o por __criticidad__: +Pero también es posible organizar las cosas con una __vista de aplicación__ o por __criticidad__: -- Un inquilino __Aplicación 1__ o __Criticidad 1__ -- Un inquilino __Aplicación 2__ o __Criticidad 2__ +- Un tenant __Aplicación 1__ o __Criticidad 1__ +- Un tenant __Aplicación 2__ o __Criticidad 2__ - ... -Los recursos técnicos solicitados se asignan a un inquilino específico y no se comparten con otros inquilinos. Por ejemplo, un clúster de hipervisor y las redes L2 asociadas solo están disponibles en un solo inquilino. -En cuanto a las redes, es posible solicitar redes __'cross tenant'__ para garantizar la continuidad de red entre inquilinos. +Los recursos técnicos solicitados se asignan a un tenant específico y no se comparten con otros tenants. Por ejemplo, un clúster de hipervisor y las redes L2 asociadas solo están disponibles en 1 tenant. +En cuanto a las redes, es posible solicitar redes __'cross tenant'__ para garantizar la continuidad de red entre los tenants. -Los permisos de los usuarios deben definirse en cada inquilino. Por lo tanto, cada organización debe reflexionar cuidadosamente sobre los inquilinos deseados. Este punto se aborda normalmente en un taller de inicialización, al momento de crear la organización. +Los permisos de los usuarios deben definirse en cada tenant. Por lo tanto, cada organización debe reflexionar cuidadosamente sobre los tenants deseados. Este punto suele tratarse en el taller de inicialización, durante la creación de la organización. -Es posible evolucionar la arquitectura añadiendo o eliminando inquilinos. +Es posible evolucionar la arquitectura añadiendo o eliminando tenants. -Un inquilino no puede estar vacío. Debe inicializarse necesariamente con un mínimo de recursos: +Un tenant no puede estar vacío. Debe inicializarse necesariamente con un mínimo de recursos: - Una zona de disponibilidad (AZ, es decir, un centro de datos físico), -- Un clúster de cálculo, +- Un clúster de cómputo, - Un espacio de almacenamiento, -- Un VLAN de red. +- Un vlan de red. -| Referencia de comando | Unidad | SKU | -|--------------------------------------------------------------|----------|-------------------------| -| TENANT - *(REGION)* - Activación de un inquilino | 1 inquilino | csp:tenant:v1 | -| TENANT - *(REGION)* - Activación de una zona de disponibilidad | 1 inquilino | csp:(region):iaas:az:v1 | +| Referencia de pedido | Unidad | SKU | +|------------------------------------------------------------|----------|-------------------------| +| TENANT - *(REGION)* - Activación de un tenant | 1 tenant | csp:tenant:v1 | +| TENANT - *(REGION)* - Activación de una zona de disponibilidad | 1 tenant | csp:(region):iaas:az:v1 | -### Management of owners on a tenant +### Gestión de propietarios en un tenant -Each tenant has at least one owner, ensuring clear accountability and efficient management of associated resources. Additionally, it is possible to designate multiple owners for a single tenant, enabling collaboration and shared decision-making. Below are important considerations to keep in mind when managing these owners. +Cada tenant cuenta con al menos un propietario, garantizando así una responsabilidad clara y una gestión eficiente de los recursos asociados. Además, es posible declarar varios propietarios en un mismo tenant, lo que permite una colaboración y una toma de decisiones compartida. A continuación, encontrará información importante a tener en cuenta durante la gestión de estos propietarios. -#### Important information about owner management +#### Información importante sobre la gestión de propietarios -#### 1. Number of owners +#### 1. Número de propietarios -- There is no technical limit on the number of owners that can be defined for the tenant. +- No existe ningún límite técnico respecto al número de propietarios que se pueden definir en el inquilino. -- The management interface (UI) issues a warning when more than 3 owners are present, encouraging the limitation of the number of owners for security reasons and optimal access management. +- La interfaz de gestión (IHM) muestra una advertencia cuando hay más de 3 propietarios, con el fin de recomendar limitar el número de propietarios por motivos de seguridad y una gestión óptima de los accesos. -#### 2. Adding a new owner +#### 2. Adición de un nuevo propietario -- When adding a new owner, updating their permissions may take up to 60 minutes. +- Al añadir un nuevo propietario, la actualización de sus permisos puede tardar hasta 60 minutos. -- This propagation time is normal and ensures that access rights are correctly applied across all associated services and resources. +- Este tiempo de propagación es normal y permite asegurar que los permisos de acceso se apliquen correctamente a todos los servicios y recursos asociados. -#### 2. Permissions de un propietario +#### 2. Permisos de un propietario -- Un propietario recibirá todas las permisos asociados a los productos habilitados en su inquilino. +- Al propietario se le asignarán todos los permisos relacionados con los productos activados en su tenant. - No es posible modificar los permisos de un propietario. -#### 3. Removal of a owner +#### 3. Retiro de un propietario -- To remove an owner from the tenant, the user must submit a request to support. +- Para retirar a un propietario del tenant, el usuario debe enviar una solicitud al soporte. -- This procedure ensures that changes to access rights are carried out securely and in accordance with best practices for access management. +- Este procedimiento garantiza que las modificaciones de los permisos de acceso se realicen de manera segura y conforme a las buenas prácticas de gestión de accesos. -### Access authorization to a tenant: Allowed IPs +### Autorización de acceso a un tenant: IP autorizadas -Access to the cloud management console is strictly limited to previously authorized IP addresses, in compliance with the SecNumCloud certification requirements. This restriction ensures a higher level of security by allowing access only from specified IP ranges, thereby minimizing the risk of unauthorized access and protecting the cloud infrastructure according to the highest security standards. +El acceso a la consola de gestión cloud está estrictamente limitado a las direcciones IP previamente autorizadas, en cumplimiento con los requisitos de la certificación SecNumCloud. Esta restricción garantiza un nivel de seguridad reforzado al permitir el acceso únicamente a usuarios procedentes de rangos de IP especificados, minimizando así los riesgos de acceso no autorizado y protegiendo la infraestructura cloud según los estándares de seguridad más elevados. -Note: *Removing an authorized IP requires a support request via the Cloud Temple console.* +Nota: *La eliminación de una IP autorizada se realiza mediante una solicitud de soporte en la consola Cloud Temple.* -### Uso de recursos dentro de un inquilino +### Consumo de recursos en un inquilino -Es posible visualizar los recursos de nube consumidos dentro de un inquilino, ofreciendo así una vista detallada del uso de los distintos servicios desplegados. Esta funcionalidad permite a los usuarios supervisar en tiempo real el consumo de sus recursos, identificar los servicios más utilizados y optimizar su uso según las necesidades. +Es posible visualizar los recursos cloud consumidos dentro de un inquilino, lo que ofrece una vista detallada del uso de los distintos servicios desplegados. Esta funcionalidad permite a los usuarios seguir en tiempo real el consumo de sus recursos, identificar los servicios más utilizados y optimizar su uso según las necesidades. -En el menú de la consola, haga clic en "Informe de consumo" y luego seleccione el período de tiempo deseado. Así podrá visualizar detalladamente el consumo de recursos de nube durante el período definido, lo que le permitirá analizar el uso de los servicios y optimizar su gestión en consecuencia: +En el menú de la consola, haga clic en "Informe de consumo" y seleccione el período de tiempo deseado. De este modo, podrá visualizar en detalle el consumo de recursos cloud durante el período definido, lo que le permitirá analizar el uso de los servicios y optimizar su gestión en consecuencia: - + \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/console/iam/iam.md b/i18n/es/docusaurus-plugin-content-docs/current/console/iam/iam.md index d53d0c65..1db02a43 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/console/iam/iam.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/console/iam/iam.md @@ -2,8 +2,10 @@ title: Visión general --- -El módulo IAM (Gestión de Identidad y Acceso) de la consola Cloud Temple ofrece una solución completa para la gestión de identidades y accesos. -Permite administrar cuentas locales mientras que admite una configuración híbrida con configuraciones externas compatibles con los protocolos estándar del mercado, como OIDC y SAML, para responder a las necesidades de flexibilidad y seguridad de los entornos modernos. +# Identity Access Management + +El módulo IAM (Identity Access Management) de la consola Cloud Temple ofrece una solución completa para la gestión de identidades y accesos. +Permite administrar cuentas locales al tiempo que admite la hibridación con configuraciones externas, compatibles con los protocolos estándar del mercado como OIDC y SAML, para satisfacer las necesidades de flexibilidad y seguridad de los entornos modernos.
@@ -12,13 +14,13 @@ Permite administrar cuentas locales mientras que admite una configuración híbr Explorar los conceptos →
-

Inicio rápido

+

Quickstart

Comience rápidamente con nuestros recursos siguiendo instrucciones claras y sencillas.

- Iniciar el Inicio rápido → + Iniciar el Quickstart →

Tutoriales

-

Aprenda paso a paso cómo configurar y utilizar nuestros servicios con guías detalladas.

+

Aprenda paso a paso a configurar y utilizar nuestros servicios con guías detalladas.

Descubrir los tutoriales →
-
+
\ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/console/iam/tutorials/sso_jumpcloud.md b/i18n/es/docusaurus-plugin-content-docs/current/console/iam/tutorials/sso_jumpcloud.md index 4e6fc583..ffdaed9d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/console/iam/tutorials/sso_jumpcloud.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/console/iam/tutorials/sso_jumpcloud.md @@ -1,73 +1,72 @@ --- -title: Ejemplo de federicación de identidad con JumpCloud +title: Ejemplo de federación de identidad con JumpCloud tags: - iam - tutoriales - - enrollado + - onboarding --- +import ssoJumpcloud001 from '@site/docs/console/iam/tutorials/images/sso_jumpcloud_001.png'; +import ssoJumpcloud002 from '@site/docs/console/iam/tutorials/images/sso_jumpcloud_002.png'; -import ssoJumpcloud001 from '@site/docs/console/iam/tutorials/images/sso_jumpcloud_001.png' -import ssoJumpcloud002 from '@site/docs/console/iam/tutorials/images/sso_jumpcloud_002.png' +Este tutorial le guía a través de la configuración de la autenticación única (SSO) entre JumpCloud y la consola Cloud Temple utilizando el protocolo OpenID Connect (OIDC). -Este tutoría te guía a través de la configuración de la autenticación única (SSO) entre JumpCloud y la consola Cloud Temple utilizando el protocolo OpenID Connect (OIDC). +Para obtener más información detallada directamente desde JumpCloud, consulte su documentación oficial sobre SSO con OIDC: [SSO with OIDC](https://jumpcloud.com/support/sso-with-oidc). -Para obtener información detallada directamente desde JumpCloud, consulta su documentación oficial sobre SSO OIDC: [SSO con OIDC](https://jumpcloud.com/support/sso-with-oidc). +## Requisitos -## Requisitos previos +Antes de comenzar, asegúrese de haber obtenido la información necesaria de Cloud Temple, en particular la URI de redirección específica para su instancia de Keycloak. -Antes de comenzar, asegúrate de tener las información necesaria de Cloud Temple, especialmente la URI de redirección específica de tu instancia Keycloak. +## Configuración en JumpCloud -## Configuración de una aplicación OIDC en JumpCloud - -Sigue estos pasos para configurar una nueva aplicación OIDC en tu consola de administración JumpCloud: +Siga estos pasos para configurar una nueva aplicación OIDC en su consola de administración de JumpCloud: 1. **Crear una nueva aplicación:** - * Ve a la sección de aplicaciones en JumpCloud. - * Haz clic en "Agregar" o "Crear una nueva aplicación". - * Elige la opción para una integración de aplicación personalizada ("Aplicación de integración personalizada"). + * Navegue a la sección de aplicaciones en JumpCloud. + * Haga clic en "Agregar" o "Crear una nueva aplicación". + * Elija la opción para una integración de aplicación personalizada ("Custom Application Integration"). -2. **Configurar SSO OIDC:** - * Selecciona "Gestionar Single Sign-On (SSO)". - * Elige "Configurar SSO con OIDC". +2. **Configurar el SSO OIDC:** + * Seleccione "Manage Single Sign-On (SSO)". + * Elija "Configure SSO with OIDC". Configuración SSO OIDC JumpCloud -3. **Ingresar las URIs de redirección:** - * En el campo apropiado (generalmente llamado "URI de redirección" o "URL de callback"), ingresa la URI proporcionada por Cloud Temple. Se seguirá generalmente este formato: +3. **Ingresar los URIs de redirección:** + * En el campo correspondiente (a menudo llamado "Redirect URIs" o "Callback URLs"), ingrese el URI proporcionado por Cloud Temple. Generalmente seguirá este formato: ``` - https://keycloak-shiva.cloud-temple.com/auth/realms//broker//endpoint + https://keycloak-shiva.cloud-temple.com/auth/realms//broker//endpoint ``` - * Reemplaza `` con los identificadores específicos de tu empresa proporcionados por Cloud Temple. + *Reemplace `` por los identificadores específicos de su empresa proporcionados por Cloud Temple.* -4. **Seleccionar el tipo de autenticación del cliente:** - * Elige `Cliente secreto POST` como "Tipo de autenticación del cliente". +4. **Elegir el tipo de autenticación de cliente:** + * Seleccione `Client Secret Post` como "Tipo de autenticación de cliente". 5. **Ingresar la URL de inicio de sesión:** - * En el campo "URL de inicio de sesión", ingresa la URL que utilizas para acceder a tu consola Cloud Temple. Por ejemplo: + * En el campo "Login URL", ingrese la URL que utiliza para acceder a su consola de Cloud Temple. Por ejemplo: ``` - https://.shiva.cloud-temple.com + https://.shiva.cloud-temple.com ``` - * Reemplaza `` por el identificador único de tu instancia Cloud Temple. + *Reemplace `` por el identificador único de su instancia de Cloud Temple.* 6. **Configurar el mapeo de atributos:** - * En la sección "Mapeo de atributos" (o equivalente), asegúrate de que los siguientes atributos estén seleccionados para ser enviados a Cloud Temple: - * `Email` + * En la sección "Attribute Mapping" (o equivalente), asegúrese de que los siguientes atributos estén seleccionados para ser enviados a Cloud Temple: + * `Correo electrónico` * `Perfil` (puede incluir nombre, apellido, etc.) - Mapeo de atributos JumpCloud + Mapeo de Atributos JumpCloud -7. **Asociar grupos:** - * Asocia los grupos de usuarios JumpCloud que deben tener acceso a la consola Cloud Temple a través de esta aplicación SSO. +7. **Asignar grupos:** + * Asigne los grupos de usuarios de JumpCloud que deben tener acceso a la consola de Cloud Temple a través de esta aplicación SSO. 8. **Activar la aplicación:** - * Haz clic en "Activar" o "Guardar" para finalizar la configuración de la aplicación. + * Haga clic en "Activate" o "Save" para finalizar la configuración de la aplicación. -9. **Proporcionar identificadores a Cloud Temple:** - * Después de activar, JumpCloud te proporcionará un **ID del cliente** y un **secreto del cliente**. - * Comunícate estos dos datos de manera segura a tu contacto en Cloud Temple para finalizar la configuración de la federation desde Keycloak. +9. **Proporcionar las credenciales a Cloud Temple:** + * Después de la activación, JumpCloud le proporcionará un **Client ID** y un **Client Secret**. + * Comuníquese de forma segura con su contacto de Cloud Temple para compartir esta información y finalizar la configuración de la federación en el lado de Keycloak. -Una vez que Cloud-Temple haya configurado la federation con los identificadores proporcionados, los usuarios asignados para esta aplicación SSO podrán conectarse a la consola Cloud Temple utilizando sus credenciales JumpCloud. +Una vez que Cloud-Temple haya configurado la federación con las credenciales proporcionadas, sus usuarios asignados podrán iniciar sesión en la consola de Cloud Temple utilizando sus credenciales de JumpCloud. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/console/metrics/concepts.md b/i18n/es/docusaurus-plugin-content-docs/current/console/metrics/concepts.md index ecf99315..fa2f806c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/console/metrics/concepts.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/console/metrics/concepts.md @@ -27,109 +27,110 @@ import grafanaDatasourceAlerting from '@site/docs/console/metrics/images/grafana import grafanaDatasourceWorking from '@site/docs/console/metrics/images/grafana_datasource_working.png' import grafanaDashboards_001 from '@site/docs/console/metrics/images/grafana_dashboards_001.png' -La mayoría de los clientes de __Cloud Temple__ cuentan con herramientas de visualización, monitoreo y metrología para el seguimiento de sus operaciones. +La mayoría de los clientes de __Cloud Temple__ disponen de herramientas de visualización, monitoreo y métricas para el seguimiento de sus operaciones. -La filosofía de la Consola es permitir el acceso a los datos para integrarse en estas herramientas mediante un proxy Prometheus integrado. +La filosofía de la Consola es permitir el acceso a los datos para integrarse en esta herramienta mediante un proxy Prometheus integrado. Este proxy le permite consultar y manipular los datos desde una herramienta de visualización como [Grafana](https://grafana.com). -Sin embargo, también es posible visualizar ciertos datos de rendimiento de sus recursos Cloud en la interfaz web de la Consola. +Sin embargo, es posible visualizar ciertos datos de rendimiento de sus recursos Cloud en la interfaz web de la Consola. -*__Nota:__ La filosofía __Cloud Temple__ no consiste únicamente en integrar gráficos en la interfaz web, sino también en ofrecer el máximo de información accesible a través de la API* +*__Nota:__ La filosofía de __Cloud Temple__ no se limita a integrar gráficos en la interfaz web, sino también a ofrecer la máxima cantidad de información accesible a través de la API* -## Dashboards integrated into the web interface +## Paneles de control integrados en la interfaz web -*__Nota:__ To access these dashboards, you must have the __'metric_read'__ permission* +*__Nota :__ Para acceder a estos paneles de control, es necesario tener el permiso __'metric_read'__* ### Vista general -La página de inicio de la Consola muestra el panel principal, que presenta todas las métricas que permiten tener una visión general de cada producto al que usted ha suscrito dentro de su ámbito. En caso de existir algún problema con sus productos VMware y/o OpenIaaS, se mostrarán alertas, cuyo color está relacionado con su gravedad. +La página de inicio de la Consola muestra el panel principal, que presenta el conjunto de métricas que permiten evaluar el estado actual de cada producto al que se ha suscrito dentro de su perímetro. En caso de problema(s) en sus productos VMware y/o OpenIaaS, se mostrarán alertas, cuyo color está relacionado con su importancia. -Estas alertas son clicables y redirigen a la página correspondiente al producto afectado. +Estas alertas son clicables y redirigen a la página del producto correspondiente. -### Métricas VMware - Vista general +### Métricas VMware - Vista global -En el menú __'VMware'__, está disponible un panel específico en el submenú __'Métricas'__. Agrupa 4 pestañas: +En el menú __'VMware'__, un panel de control específico está disponible en el submenú __'Métricas'__. Agrupa 4 pestañas : #### Vista general -En esta pestaña se encuentran algunas de las métricas ya presentes en el panel general tratado al inicio de este capítulo. +En esta pestaña se muestra una parte de las métricas ya presentes en el panel de control global abordado al inicio de este capítulo. #### Cálculo +En esta pestaña, se encuentra el número de __AZ__, de __Clusters__, de __ESXs__, la __emisión de carbono__, la __estimación del consumo__, así como 7 gráficos +que ofrecen una visión muy visual del estado de su entorno VMware. La estimación del consumo en kw/h se calcula sobre la media de las lecturas que cubren el período seleccionado, referida a una hora. -En esta pestaña, se muestra el número de __AZ__, __Clusters__, __ESX__, la __emisión de carbono__, la __estimación del consumo__, así como 7 gráficos que ofrecen una visión muy visual de su entorno VMware. La estimación del consumo en kWh se calcula a partir de la media de los registros correspondientes al período seleccionado, referida a una hora. - -Puede elegir el intervalo de fechas a cubrir, así como el tipo de agrupación de datos (por defecto, los datos se agrupan para todo su entorno). Al seleccionar, por ejemplo, __Host__: +Puede elegir el intervalo de fechas a cubrir, así como el tipo de agrupación de datos (par défaut, les données sont regroupées pour l'ensemble de votre périmètre). Al elegir __Host__ por ejemplo: -Al pasar el cursor sobre cada uno de los gráficos, se muestran los detalles con los nombres de los recursos y sus valores correspondientes. Al hacer clic en estos gráficos, aparece una pequeña sugerencia (tooltip) que le permite consultar más fácilmente los detalles asociados a la fecha seleccionada: +Al pasar el cursor sobre cada uno de los gráficos, se muestran los detalles de los nombres de los recursos y sus valores. Al hacer clic en estos mismos gráficos, se abre un pequeño tooltip que le permite consultar más fácilmente los detalles correspondientes a la fecha seleccionada: #### Almacenamiento -Al igual que en la pestaña "Cálculo", se muestran diferentes información: el número de __AZ__, __clusters de datastore__, __datastores__, así como dos gráficos. Se aplica el mismo principio de filtros, pero aquí podemos agrupar por __Cluster SDRS__ y __Datastore__. +De la misma manera que en la pestaña "Cálculo", se muestran diferentes datos: el número de __AZ__, de __datastore clusters__, de __datastores__ así como 2 gráficos. Se aplica el mismo principio de filtros, pero aquí podemos agrupar por __Cluster SDRS__ y __Datastore__. #### Máquinas virtuales -Aquí se presenta una visión general de la salud de las máquinas virtuales. +Aquí se presenta una visión global de la salud de las máquinas virtuales. -Esta síntesis muestra, en el intervalo de tiempo seleccionado: +Este resumen proporciona, para el intervalo de tiempo seleccionado: -- el número de CPUs y la __media de uso de CPU__, -- la cantidad de GB de memoria y la __media de uso de memoria__, -- las medias de __latencia de acceso al almacenamiento__ en lectura y escritura, -- la __media de "CPU Ready"__ de la máquina virtual (que corresponde al tiempo medio de espera de disponibilidad de un núcleo físico por parte de la máquina virtual). +- el número de CPU y la __media de uso de CPU__, +- el número de Go de memoria y la __media de uso de memoria__, +- Las medias de __latencia de acceso al almacenamiento__ en lectura y escritura, +- El __'CPU Ready'__ medio de la máquina virtual (lo que corresponde al tiempo medio de espera de disponibilidad de un núcleo físico por parte de la máquina virtual). -Para cada VM, puede acceder al historial de rendimiento haciendo clic en el icono verde __'Historial'__ de la máquina virtual en la columna de acciones: +Para cada VM, puede acceder al historial de su rendimiento haciendo clic en el icono verde __'Historial'__ de la máquina virtual en la columna de acción. : -A continuación, accederá a la página de visualización gráfica de los datos históricos, incluyendo una vista de __rendimiento del entorno__: +Accederá entonces a la página de visualización gráfica de los datos históricos, que incluye una vista de __rendimiento del entorno__: -### VMware Metrics - View by resource +### Métricas de VMware - Vista por recurso -It is also possible to view some metrics related to VMware, this time more specifically for a given __Host__ or __Datastore__. +También es posible consultar una parte de las métricas relacionadas con VMware, pero esta vez de manera más específica para un __Host__ o un __Datastore__ determinado. #### Host -En la vista de un Host, se puede consultar, para un período determinado, el __consumo energético__ así como la estimación de __emisiones de carbono__. +En la vista de un Host, se puede consultar, para un período determinado, el __consumo energético__ así como la estimación de las __emisiones de carbono__. #### Datastore -En la vista de un Datastore, se puede consultar durante un período determinado el número de __IOPS__. +En la vista de un Datastore, se pueden consultar los __IOPS__ para un período determinado. -### OpenIaaS Metrics +### Métricas OpenIaaS -In the __'OpenIaaS'__ menu, a specific dashboard is available in the __'Metrics'__ submenu. It includes 3 tabs: +En el menú __'OpenIaaS'__, hay un panel de control específico disponible en el submenú __'Métricas'__. Incluye 3 pestañas : -#### Vista general +#### Resumen -En esta pestaña se encuentran algunas de las métricas ya presentes en el panel general tratado al inicio de este capítulo. +En esta pestaña, se muestra una parte de las métricas ya incluidas en el dashboard global abordado al inicio de este capítulo. #### Cálculo -En esta pestaña, se muestra el número de __AZ__, de __Clusters__, de __Hosts__, así como 5 gráficos que ofrecen una visión muy visual de su entorno OpenIaaS. +En esta pestaña, se muestra el número de __AZ__, __Clusters__, __Hosts__, así como 5 gráficos +que presentan una visión muy visual del estado de su entorno OpenIaaS. -Puede elegir el intervalo de fechas a cubrir, así como el tipo de agrupación de datos (por defecto, los datos se agrupan para todo su entorno). Al seleccionar, por ejemplo, __Host__: +Puede elegir el intervalo de fechas a cubrir, así como el tipo de agrupación de datos (por defecto, los datos se agrupan para todo su ámbito). Por ejemplo, al seleccionar __Host__: @@ -137,7 +138,7 @@ Puede elegir el intervalo de fechas a cubrir, así como el tipo de agrupación d #### Almacenamiento -Al igual que en la pestaña "Cálculo", se muestran diferentes informaciónes: el número de __AZ__, __Clusters__, __Datastores__, así como un gráfico. Se aplica el mismo principio de filtros, pero aquí podemos agrupar por __Block Storage__. +De la misma manera que en la pestaña "Cálculo", se muestran diferentes datos: el número de __AZ__, de __Clusters__, de __Datastores__ así como un gráfico. Se aplica el mismo principio de filtros, pero aquí podemos agrupar por __Block Storage__. @@ -145,14 +146,14 @@ Al igual que en la pestaña "Cálculo", se muestran diferentes informaciónes: e Integración de la Consola con Grafana -La Consola de Cloud Temple puede utilizarse como origen de datos para su infraestructura [Grafana](https://grafana.com/). +La Consola de Cloud Temple puede utilizarse como fuente de datos para su infraestructura [Grafana](https://grafana.com/). -La consola es compatible con Prometheus, lo que permite agregarla en Grafana como origen de datos de tipo Prometheus. De esta forma podrá: +La consola es compatible con Prometheus, lo que permite agregarla en Grafana como una fuente de datos de tipo Prometheus. De este modo, podrá: - Visualizar todas sus métricas. -- Crear sus propios paneles personalizados adaptados a sus necesidades. +- Crear sus propios dashboards personalizados adaptados a sus necesidades. -Cloud Temple también pone a disposición una [colección de paneles](https://github.com/Cloud-Temple/console-grafana-iaas) listos para usar, que puede emplear como base o adaptar según sus casos de uso. +Cloud Temple también pone a disposición una [colección de dashboards](https://github.com/Cloud-Temple/console-grafana-iaas) listos para usar, que puede utilizar como base o adaptar según sus casos de uso. @@ -160,45 +161,45 @@ Cloud Temple también pone a disposición una [colección de paneles](https://gi -### Configure the Console as a data source in Grafana +### Configurar la Consola como fuente de datos en Grafana -The objective is to enhance the observability of your Cloud infrastructure through Cloud Temple metrics. +El objetivo es enriquecer la observabilidad de su infraestructura Cloud mediante la telemetría de Cloud Temple. -#### Requis +#### Requisitos - Una instancia de Grafana con acceso a las API de la Consola. -- Acceso de administración en la instancia de Grafana para poder configurar los *datasources*. +- Acceso de administrador en la instancia de Grafana para poder configurar las *fuentes de datos*. - Un token de acceso personal con al menos el permiso `metrics_read`. -#### Configuration +#### Configuración -En la __configuración__ de Grafana, ir al separador "__datasources__" y hacer clic en "__Add datasource__". +En la __configuración__ de Grafana, vaya a la pestaña "__datasources__" y haga clic en "__Add datasource__". -En la URL, proporcionar la __URL de la API Console Metrics__ sin la versión y que termine con "__/prometheus__" +En la URL, proporcione la __URL de la API Console Metrics__ sin la versión y que termine con "__/prometheus__" (ejemplo: [https://shiva.cloud-temple.com/api/metric/prometheus](https://shiva.cloud-temple.com/api/metric/prometheus)) -En la sección de "__autenticación__", activar la opción __Basic Auth__. +En la __autenticación__, active la opción __Basic Auth__. -En la parte "__Detalles de autenticación básica__", configurar el __nombre de usuario__ y __contraseña__ utilizando respectivamente el __id__ y el __secreto__ de un __Token de acceso personal__ con el permiso __metrics_read__. +En la sección "__Basic Auth Details__", configure el __username__ y __password__ utilizando respectivamente el __id__ y el __secret__ de un __Token de acceso personal__ con el permiso __metrics_read__. -En la sección "__Alerting__", configurar la propiedad __Método HTTP__ como __GET__. +En la sección "__Alerting__", configure la propiedad __HTTP Method__ en __GET__. #### Resultado -Para confirmar que la configuración es correcta y funcional, pulse el botón "__Guardar y probar__". +Para confirmar que la configuración es correcta y está operativa, haga clic en el botón "__Guardar y probar__". -Debería aparecer una barra informativa indicando que la configuración se ha realizado con éxito. +Debería aparecer un banner que le notifique que la configuración se ha completado correctamente. Encontrará un conjunto completo de ejemplos de configuración para Grafana aquí: [https://github.com/Cloud-Temple/console-grafana-iaas](https://github.com/Cloud-Temple/console-grafana-iaas) - + \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/console/orders.md b/i18n/es/docusaurus-plugin-content-docs/current/console/orders.md index 6cd62020..ade7f9b8 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/console/orders.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/console/orders.md @@ -30,107 +30,107 @@ import shivaOrdersIaasCpoolMemory from '@site/docs/console/images/shiva_orders_i ## Concepto -El seguimiento del despliegue de nuevas recursos se realiza en el menú __'Órdenes'__, accesible desde la barra verde a la izquierda de la pantalla. +El seguimiento del despliegue de nuevos recursos se realiza en el menú __'Pedidos'__ accesible en la barra verde a la izquierda de la pantalla. -Permite visualizar los recursos Cloud ordenados, en proceso de despliegue y posibles errores dentro de un [Tenant](iam/concepts.md#management-of-owners-on-a-tenant) de su [Organización](iam/concepts.md#organizaciones). +Permite visualizar los recursos Cloud pedidos, en proceso de despliegue y los posibles errores dentro de un [Tenant](iam/concepts.md#tenant) de su [Organización](iam/concepts.md#organisations). -*__Nota: En este momento, no es posible visualizar de forma global, a nivel de organización, todos los recursos desplegados en los distintos tenants.__ Este tema se abordará posteriormente mediante la implementación de un portal dedicado al comitente (en el sentido de firmante) y al control de su organización.* +*__Nota : En este momento, aún no es posible la vista global a nivel de una organización de todos los recursos desplegados en los distintos tenants.__ Este tema se tratará posteriormente con la implementación de un portal dedicado al solicitante (en el sentido de firmante) y a la gestión de su organización.* -El despliegue de recursos o su eliminación se realiza en cada uno de los productos, en los menús __'IaaS'__ y __'Red'__, situados a la izquierda de la pantalla en la barra verde. +El despliegue de los recursos o su eliminación se realizan en cada uno de los productos en los menús __'IaaS'__ y __'Red'__ a la izquierda de la pantalla en la barra verde. -También es posible ver directamente las entregas a través de las notificaciones de la consola Cloud Temple: +También es posible ver directamente las entregas a nivel de las notificaciones de la consola Cloud Temple : -Desde la página de órdenes, puede ver el estado de avance de una entrega y, si es necesario, comunicarse con el equipo aportando comentarios o aclaraciones: +Desde la página de pedidos, puede ver el estado de avance de una entrega y, eventualmente, dialogar con el equipo aportando comentarios o precisiones : -__Nota__: __No es posible iniciar varias órdenes del mismo tipo de recurso simultáneamente. Deberá esperar a que la orden actual se procese y finalice antes de poder realizar una nueva. Esto garantiza una gestión eficaz y ordenada de los recursos dentro de su entorno.__ +__Nota__ : __No es posible iniciar varios pedidos del mismo tipo de recurso simultáneamente. Por lo tanto, deberá esperar a que el pedido en curso sea procesado y finalizado antes de poder realizar uno nuevo. Esto garantiza una gestión eficiente y ordenada de los recursos dentro de su entorno.__ ## Solicitar una nueva zona de disponibilidad -Es posible agregar una nueva zona de disponibilidad accediendo al menú "__Solicitud__". Esta opción le permite ampliar sus recursos y mejorar la disponibilidad y resiliencia de sus aplicaciones en tan solo unos clics: +Es posible agregar una nueva zona de disponibilidad accediendo al menú "__Pedido__". Esta opción le permite ampliar sus recursos y mejorar la disponibilidad y la resiliencia de sus aplicaciones con solo unos pocos clics: -Comience seleccionando el ubicación deseada, eligiendo primero la región geográfica y luego la zona de disponibilidad (AZ) correspondiente entre las disponibles. Esta etapa permite adaptar el despliegue de sus recursos según la ubicación y los requisitos de su infraestructura: +Comience por seleccionar la ubicación deseada, eligiendo primero la región geográfica y luego la zona de disponibilidad (AZ) correspondiente entre las disponibles. Este paso permite adaptar el despliegue de sus recursos según la ubicación y los requisitos de su infraestructura: -A continuación, proceda a seleccionar el tipo de clúster de hipervisor deseado, eligiendo aquel que mejor se ajuste a las necesidades de rendimiento y gestión de su infraestructura en la nube: +A continuación, proceda a seleccionar el tipo de clúster de hipervisores deseado, eligiendo el que mejor se adapte a las necesidades de rendimiento y gestión de su infraestructura en la nube: -A continuación, seleccione el número de hipervisores, así como la cantidad de memoria deseada, para adaptar los recursos a la carga de trabajo y a los requisitos específicos de su entorno en la nube: +Seleccione a continuación el número de hipervisores, así como la cantidad de memoria deseada, para adaptar los recursos a la carga de trabajo y a los requisitos específicos de su entorno en la nube: -A continuación, seleccione el número de datastores que desea aprovisionar en el clúster, así como sus tipos. Es importante tener en cuenta que el número máximo de datastores permitido es de 10, con un mínimo de 2 datastores requeridos. Cada tipo de datastore diferente generará un datastoreCluster adicional. Por ejemplo, si elige 2 datastores del tipo "live" y 1 datastore del tipo "mass", se crearán 2 datastoreClusters distintos: +Seleccione a continuación el número de datastores a aprovisionar en el clúster, así como sus tipos. Es importante tener en cuenta que el número máximo de datastores permitido es de 10, con un mínimo de 2 datastores requeridos. Cada tipo de datastore diferente dará lugar a la creación de un datastoreCluster adicional. Por ejemplo, si elige 2 datastores de tipo "live" y 1 datastore de tipo "mass", esto dará lugar a la formación de 2 datastoreClusters distintos: -Defina el tamaño de almacenamiento necesario para la copia de seguridad, asegurándose de prever una capacidad equivalente a la de su almacenamiento de producción. Tenga en cuenta una tasa de compresión promedio de 2 para optimizar el espacio de copia de seguridad y garantizar una protección eficaz de sus datos: +Defina el tamaño de almacenamiento necesario para la copia de seguridad, asegurándose de prever una capacidad equivalente a la de su almacenamiento de producción. Tenga en cuenta una tasa de compresión media de 2 para optimizar el espacio de copia de seguridad y garantizar una protección eficaz de sus datos: -Seleccione los redes que desea propagar según sus necesidades. También tiene la posibilidad de activar la opción "Acceso a internet" si es necesario, definiendo el número de direcciones IP deseadas, con una opción comprendida entre 1 y un máximo de 8: +Seleccione las redes a propagar según sus necesidades. También tiene la posibilidad de activar la opción "Acceso a internet" si es necesario, definiendo el número de direcciones IP deseadas, con una opción comprendida entre 1 y un máximo de 8: -A continuación, obtendrá un resumen de las opciones seleccionadas antes de validar su solicitud. +A continuación, obtendrá un resumen de las opciones seleccionadas antes de validar su pedido. -## Solicitar recursos adicionales de almacenamiento +## Solicitar recurso de almacenamiento adicional -La lógica de asignación de almacenamiento en modo de bloque en los clústeres de cálculo se basa en la tecnología __IBM SVC (San Volume Controller)__ y __IBM FlashSystem__. El almacenamiento se organiza en __LUNs de al menos 500 GiB__, presentadas según la tecnología utilizada: +La lógica de asignación de almacenamiento en modo bloque en los clústeres de cálculo se basa en la tecnología __IBM SVC (San Volume Controller)__ y __IBM FlashSystem__. El almacenamiento se organiza en __LUN de 500 GiB como mínimo__, presentadas según la tecnología utilizada : -- Para __VMware__: en forma de __datastores__ agrupados en __clústeres SDRS (Storage Distributed Resource Scheduler)__ -- Para __Bare Metal__: en forma de __volúmenes__ -- Para __Open IaaS__: en forma de __Storage Repository (SR)__ +- Para __VMware__ : en forma de __datastores__ agrupados en __clústeres SDRS (Storage Distributed Resource Scheduler)__ +- Para __Bare Metal__ : en forma de __volúmenes__ +- Para __Open IaaS__ : en forma de __Storage Repository (SR)__ -Cada datastore hereda una __clase de rendimiento__ definida en IOPS/To (de 500 a 15000 IOPS/To para FLASH, o sin garantía para MASS STORAGE). La limitación de IOPS se aplica __a nivel de datastore__ (y no por VM), lo que significa que todas las máquinas virtuales que comparten el mismo datastore comparten el cuota de IOPS asignada. +Cada datastore hereda una __clase de rendimiento__ definida en IOPS/TiB (de 500 a 15000 IOPS/TiB pour le FLASH, ou sans garantie pour le MASS STORAGE). La limitación de IOPS se aplica __a nivel del datastore__ (y no por VM), lo que significa que todas las máquinas virtuales que comparten el mismo datastore comparten la cuota de IOPS asignada. -__Puntos clave que recordar__: +__Puntos clave a tener en cuenta__ : -- __Tamaño mínimo__: 500 GiB por LUN -- __Rendimiento__: Proporcional al volumen asignado (por ejemplo: 2 TiB en clase Standard = 3000 IOPS máximos) -- __Organización__: Los datastores del mismo tipo se agrupan automáticamente en clústeres de datastores -- __Disponibilidad__: 99,99% medido mensualmente, incluyendo periodos de mantenimiento -- __Espacio necesario__: Siempre reservar un 10% de espacio libre para instantáneas de copia de seguridad y un espacio equivalente a la suma de la RAM de las VMs para los archivos .VSWP +- __Tamaño mínimo__ : 500 GiB por LUN +- __Rendimiento__ : Proporcional al volumen asignado, __dentro del límite de un techo físico absoluto por LUN__ (ex: 2 To en classe Standard = 3000 IOPS, mais une LUN de 10 To plafonnera à 30 000 IOPS maximum). Este techo varía según la clase (10 000 IOPS / 512 Mo/s pour la classe Essentiel, et 30 000 IOPS / 1024 Mo/s pour les classes supérieures). +- __Organización__ : Los datastores del mismo tipo se agrupan automáticamente en clústeres de datastores +- __Disponibilidad__ : 99,99 % medido mensualmente, incluidos los períodos de mantenimiento +- __Espacio necesario__ : Prever siempre un 10 % de espacio libre para las instantáneas de copia de seguridad y el equivalente a la suma de la RAM de las VM para los archivos .VSWP -### Deploy a new compute cluster +### Desplegar un nuevo clúster de cálculo -Proceed with ordering a hypervisor cluster by selecting the options that best suit your virtualization requirements. Define key characteristics such as the number of hypervisors, cluster type, amount of memory, and required computing resources: +Proceda al pedido de un clúster de hipervisores seleccionando las opciones adecuadas a sus necesidades de virtualización. Defina las características clave como el número de hipervisores, el tipo de clúster, la cantidad de memoria, así como los recursos de cálculo necesarios: -Select the availability zone: +Seleccione la zona de disponibilidad: -Choose the compute blade type: +Elija el tipo de lámina de cálculo: -You can then choose to select existing networks and propagate them, or create new networks directly at this stage, depending on your infrastructure needs. Note that the total number of configurable networks is limited to a maximum of 20: +A continuación, tiene la opción de seleccionar redes ya existentes y propagarlas, o bien crear nuevas directamente en esta etapa, según las necesidades de su infraestructura. Tenga en cuenta que el número total de redes configurables está limitado a un máximo de 20: -You will then receive a summary of the selected options before validating your order, and can subsequently view your ongoing order: +A continuación, obtendrá un resumen de las opciones seleccionadas antes de validar su pedido, y podrá visualizar su pedido en curso: ### Desplegar un nuevo clúster de almacenamiento -En el menú "__comando__", realice el pedido de un __nuevo clúster de almacenamiento__ para su entorno seleccionando las opciones que se ajusten a sus necesidades en cuanto a capacidad, rendimiento y redundancia. Seleccione la ubicación: +En el menú "__pedido__", proceda a solicitar un __nuevo clúster de almacenamiento__ para su entorno seleccionando las opciones que se ajusten a sus necesidades de capacidad, rendimiento y redundancia. Seleccione la ubicación: -Defina el número de datastores que desea aprovisionar en el clúster, así como su tipo, respetando los siguientes límites: un mínimo de 2 datastores y un máximo de 10 pueden configurarse. Elija los tipos de datastores que mejor respondan a sus necesidades en términos de rendimiento, capacidad y uso, con el fin de optimizar el almacenamiento de su entorno: +Defina la cantidad de datastores que se aprovisionarán en el clúster, así como su tipo, respetando los siguientes límites: se pueden configurar un mínimo de 2 datastores y un máximo de 10. Elija los tipos de datastore que mejor se adapten a sus necesidades de rendimiento, capacidad y uso, con el fin de optimizar el almacenamiento de su entorno: @@ -138,134 +138,135 @@ Seleccione el tipo de almacenamiento deseado entre las diferentes opciones dispo -A continuación, acceda a un resumen completo de las opciones que ha seleccionado, lo que le permitirá revisar todos los parámetros antes de validar definitivamente su pedido: +A continuación, accederá a un resumen completo de las opciones seleccionadas, lo que le permitirá verificar todos los parámetros antes de validar definitivamente su pedido: -### Deploy a new datastore within a VMware SDRS cluster +### Desplegar un nuevo datastore en un clúster SDRS VMware -In this example, we will add block storage for a VMware infrastructure. -To add an additional datastore to your SDRS cluster, go to the __'Infrastructure'__ submenu, then __'VMware'__. -Select the appropriate VMware stack and availability zone, then navigate to the __'Storage'__ submenu. +En este ejemplo, añadiremos almacenamiento en modo bloque para una infraestructura VMware. +Para añadir un datastore adicional en su clúster de almacenamiento SDRS, vaya al submenú __'Infraestructura'__ y luego a __'VMWare'__. +Seleccione entonces la stack vmware y la zona de disponibilidad. A continuación, vaya al submenú __'Almacenamiento'__. -Choose the SDRS cluster that matches the performance characteristics you require, and click the __'Add a datastore'__ button located in the table displaying the list of datastores. +Seleccione el clúster SDRS que corresponda a las características de rendimiento deseadas y haga clic en el botón __'Añadir datastore'__ que se encuentra en la tabla +con la lista de datastores. -__Note__: +__nota__ : -- *The smallest activatable LUN size on a cluster is __500 GiB__.* -- *Datastore performance ranges from an average of 500 IOPS/TiB up to 15,000 IOPS/TiB on average. __This is a software-based limitation enforced at the storage controller level__.* -- *The disk volume consumption billing for your organization is the sum of all LUNs across all used availability zones.* -- *The __'order'__ and __'compute'__ permissions are required on the account to perform this action.* - -### Solicitar nuevos redes +- *El tamaño de la LUN más pequeña activable en un clúster es de __500 GiB__.* +- *El rendimiento de un datastore oscila entre 500 IOPS/TiB de media hasta 15000 IOPS/TiB de media. __Esto es un limitador de software implementado a nivel de los controladores de almacenamiento__, sujeto a un límite de hardware absoluto de 30 000 IOPS y 1024 MB/s máximo por LUN.* +- *La contabilidad del volumen de disco consumido por su organización es la suma de todas las LUNs en todas las AZs utilizadas*.* +- *Se requieren los permisos __'order'__ y __'compute'__ en la cuenta para realizar esta acción.* -La tecnología de red utilizada en la infraestructura Cloud Temple se basa en [VPLS](https://fr.wikipedia.org/wiki/Virtual_Private_LAN_Service). Esta le permite disfrutar de __redes de nivel 2 continuas entre sus zonas de disponibilidad dentro de una región__. +### Solicitar nuevas redes -También es posible compartir redes entre sus inquilinos y terminarlas en zonas de hosting. Básicamente, puede imaginar una red Cloud Temple como un VLAN 802.1q disponible en cualquier punto de su inquilino. +La tecnología de red utilizada en la infraestructura Cloud Temple se basa en [VPLS](https://fr.wikipedia.org/wiki/Virtual_Private_LAN_Service). Le permite disponer de __redes de nivel 2 con continuidad entre sus zonas de disponibilidad dentro de una región__. +También es posible compartir redes entre sus tenants y terminarlas en una zona de hosting. +Básicamente, puede imaginar una red Cloud Temple como un VLAN 802.1q disponible en cualquier punto de su tenant. -Las redes en la plataforma Cloud Temple son de __nivel 2 (VLANs)__ basadas en la tecnología __VPLS (Virtual Private LAN Service)__ . Esta tecnología le permite disfrutar de una __continuidad de red entre sus zonas de disponibilidad__ dentro de una región, con rendimiento garantizado: +Las redes en la plataforma Cloud Temple son de __nivel 2 (VLANs)__ basadas en la tecnología __VPLS (Virtual Private LAN Service)__. Esta tecnología le permite disponer de una __continuidad de red entre sus zonas de disponibilidad__ dentro de una región, con un rendimiento garantizado: -- __Latencia intra-AZ__: < 3 ms -- __Latencia inter-AZ__: < 5 ms +- __Latencia intra-AZ__ : < 3 ms +- __Latencia inter-AZ__ : < 5 ms -__Flexibilidad de redes__: +__Flexibilidad de las redes__ : -- Una red puede ser __compartida entre varios clústeres__ de la misma zona de disponibilidad -- Una red puede ser __propagada entre varias zonas de disponibilidad__ de la misma región -- Una red puede ser __compartida entre diferentes inquilinos__ de su organización -- Una red puede ser __terminada en zona de hosting__ para sus equipos físicos -- __Límite__: Máximo de 20 redes por solicitud. Puede realizar varias solicitudes sucesivas para ampliar este número según sus necesidades +- Una red puede ser __compartida entre varios clusters__ de una misma zona de disponibilidad +- Una red puede ser __propagada entre varias zonas de disponibilidad__ de una misma región +- Una red puede ser __compartida entre diferentes tenants__ de su organización +- Una red puede ser __terminada en una zona de hosting__ para sus equipos físicos +- __Límite__ : Máximo de 20 redes por solicitud. Puede realizar varias solicitudes consecutivas para ampliar este número según sus necesidades -La solicitud de una nueva red y las decisiones sobre el compartimiento entre sus inquilinos se realizan en el menú __'Red'__ de la barra verde situada a la izquierda de la pantalla. Las redes se crearán primero, y luego se generará una solicitud independiente para propagarlas. Puede seguir el progreso de las solicitudes en curso accediendo al panel "Solicitud" en el menú, o haciendo clic en las etiquetas de información que le redirigirán a las solicitudes activas o en proceso de tratamiento. +La solicitud de una nueva red y las decisiones de compartición entre sus tenants se realizan en el menú __'Red'__ de la barra verde a la izquierda de la pantalla. Las redes se crearán primero, y luego se generará una solicitud separada para propagarlas. Puede seguir el progreso de las solicitudes en curso accediendo a la pestaña "Solicitud" en el menú, o haciendo clic en las etiquetas de información que lo redirigen a las solicitudes activas o en proceso. -También es posible propagar redes ya existentes o separar ambas etapas, comenzando con la creación de la red y luego procediendo a la propagación posteriormente según sus necesidades. La opción de propagación se encuentra en las opciones de la red seleccionada: +También es posible propagar redes ya existentes o separar ambas etapas, comenzando con la creación de la red y procediendo a la propagación posteriormente según sus necesidades. La opción de propagación se encuentra en las opciones de la red seleccionada : -Haga clic en la opción "Propagar" para una red ya existente, y luego seleccione la ubicación de propagación deseada. Esta etapa le permite definir el lugar o los recursos sobre los que debe propagarse la red: +Haga clic en la opción "Propagar" para una red ya existente y, a continuación, seleccione el destino de propagación deseado. Esta etapa le permite definir la ubicación o los recursos en los que se debe propagar la red : ### Desactivación de una red -Una red también puede desactivarse si es necesario. Esta opción le permite pausar temporalmente el acceso o el uso de la red sin eliminarla definitivamente, ofreciendo así flexibilidad en la gestión de su infraestructura según sus necesidades. +Una red también puede desactivarse si es necesario. Esta opción le permite pausar temporalmente el acceso o el uso de la red sin eliminarlo definitivamente, ofreciendo así flexibilidad en la gestión de su infraestructura según sus necesidades. -La opción de desactivación se encuentra en las opciones de la red seleccionada. +La opción de desactivación se encuentra en las opciones de la red seleccionada. ' -## Add additional hypervisors to a compute cluster +## Agregar hipervisores adicionales a un clúster de cómputo -A __compute cluster__ is a grouping of hypervisors that must comply with the following rules: +Un __clúster de cómputo__ es un conjunto de hipervisores que deben cumplir con las siguientes reglas: -### Para los clusters VMware ESXi +### Para los clústeres de VMware ESXi -__Reglas de homogeneidad__: +__Reglas de homogeneidad__ : -- Todos los hosts de un cluster deben ser del __mismo tipo de host__ (ECO, STANDARD, ADVANCE, PERFORMANCE, etc.) -- Todos los hosts pertenecen al __mismo tenant y a la misma zona de disponibilidad__ -- __Límite__: Máximo de 32 hipervisores por cluster +- Todos los hosts de un clúster deben ser del __mismo tipo de blade__ (ECO, STANDARD, ADVANCE, PERFORMANCE, etc.) +- Todos los hosts pertenecen __al mismo tenant y a la misma zona de disponibilidad__ +- __Límite__ : Máximo de 32 hipervisores por clúster -__Asignación de memoria__: +__Asignación de memoria__ : -- Cada host viene con __toda la memoria física activada desde el inicio__ -- __Ejemplo__: Un cluster de 3 hosts STANDARD v3 (384 GB físicos cada uno) = 3 × 384 GB = 1152 GB disponibles -- __Recomendación__: No superar el 85 % de consumo de memoria por host para evitar el mecanismo de compresión de VMware y el ballooning +- Cada blade se entrega con __toda la memoria física activada__ desde el inicio +- __Ejemplo__ : Un clúster de 3 blades STANDARD v3 (384 Go físicos cada una) = 3 × 384 Go = 1152 Go disponibles +- __Recomendación__ : No superar el 85% de consumo de memoria por blade para evitar el mecanismo de compresión de VMware y el ballooning -__Alta disponibilidad__: +__Alta disponibilidad__ : -- __Mínimo recomendado__: 2 hipervisores por cluster para obtener el SLA del 99,99 % -- Activar la funcionalidad __VMware HA__ (Alta Disponibilidad) para el reinicio automático de las máquinas virtuales en caso de fallo de un host +- __Mínimo recomendado__ : 2 hipervisores por clúster para beneficiarse del SLA del 99,99% +- Activar la función __VMware HA__ (High Availability) para el reinicio automático de las VMs en caso de fallo de un host -La adición de hipervisores a un cluster de cálculo se realiza en el menú __'IaaS'__ en la barra verde situada a la izquierda de la pantalla. -En el siguiente ejemplo, añadiremos capacidad de cálculo a un cluster de hipervisor que utiliza la tecnología VMware. +La adición de hipervisores a un clúster de cálculo se realiza en el menú __'IaaS'__ en la barra verde a la izquierda de la pantalla. +En el siguiente ejemplo, añadiremos capacidad de cálculo a un clúster de hipervisores que utiliza la tecnología VMware. -Diríjase al submenú __'Infraestructura'__ y luego a __'VMWare'__. A continuación, seleccione la pila VMware, la zona de disponibilidad y el cluster de cálculo. -En este ejemplo, se trata del __'clu001-ucs12'__. Haga clic en el botón __'Añadir un host'__ situado en la parte superior derecha de la tabla con la lista de hosts. +Vaya al submenú __'Infrastructure'__ y luego a __'VMWare'__. Seleccione entonces la stack vmware, la zona de disponibilidad y el clúster de cálculo. +En este ejemplo, se trata del __'clu001-ucs12'__. Haga clic en el botón __'Ajouter un host'__ que se encuentra en la tabla con la lista de hosts, en la parte superior derecha. -__nota__: +__nota__ : -- *__La configuración de un cluster debe ser homogénea__. Por lo tanto, no está permitido mezclar tipos de hipervisor dentro de un cluster. Todos los hosts deben ser del mismo tipo.* -- *Los permisos __'order'__ y __'compute'__ son necesarios en la cuenta para realizar esta acción.* +- *__La configuración de un clúster debe ser homogénea__. Por lo tanto, no está permitido mezclar tipos de hipervisor dentro de un clúster. Todas las blades deben ser del mismo tipo.* +- *Los permisos __'order'__ y __'compute'__ son necesarios para la cuenta que realice esta acción.* -### Para los clusters Open IaaS +### Para los clústeres Open IaaS -Los clusters Open IaaS siguen reglas similares en cuanto a homogeneidad y alta disponibilidad. La gestión de los recursos de cómputo se realiza también a través del menú __'OpenIaaS'__ con los mismos requisitos previos en términos de permisos de acceso. +Los clústeres Open IaaS siguen reglas similares en términos de homogeneidad y alta disponibilidad. La gestión de los recursos de cálculo también se realiza a través del menú __'OpenIaaS'__ con los mismos requisitos en términos de derechos de acceso. -## Añadir memoria adicional a un clúster de cálculo +## Añadir recursos de memoria adicionales a un clúster de cómputo -La asignación de memoria en los clústeres de cálculo funciona de la siguiente manera: +La asignación de memoria en los clústeres de cómputo funciona de la siguiente manera : -__Principio de asignación de memoria__: +__Principio de la asignación de memoria__ : -- Todas las láminas de cálculo se entregan con la __memoria física máxima instalada__ -- Se aplica una __limitación lógica__ a nivel del clúster VMware para coincidir con la RAM facturada -- Cada lámina dispone de __toda la memoria física activada__ dentro del clúster +- Todos los nodos de cómputo se entregan con el __máximo físico de memoria__ instalado +- Se aplica una __limitación de software__ a nivel del clúster VMware para ajustarse a la RAM facturada +- Cada nodo cuenta con __toda la memoria física activada__ dentro del clúster -__Dimensionamiento por clúster__: +__Dimensionamiento por clúster__ : -- __Mínimo__: número de hosts × 128 GB de memoria -- __Máximo__: número de hosts × cantidad de memoria física por lámina +- __Mínimo__ : número de hosts × 128 Go de memoria +- __Máximo__ : número de hosts × cantidad de memoria física del nodo -__Ejemplo__: Para un clúster de tres hosts del tipo `STANDARD v3` (384 GB físicos por lámina) +__Ejemplo__ : Para un clúster de tres hosts de tipo `STANDARD v3` (384 Go físicos por nodo) -- Memoria total disponible: 3 × 384 GB = 1152 GB +- Memoria total disponible : 3 × 384 Go = 1152 Go -__Recomendaciones importantes__: +__Recomendaciones importantes__ : -- No superar el __85% de consumo medio de memoria por lámina__ para evitar el ballooning y la compresión de VMware -- Prever espacio en disco para los archivos de swap (.VSWP) creados al arranque de cada VM (tamaño = memoria de la VM) +- No superar el __85% de consumo de memoria promedio por nodo__ para evitar el ballooning y la compresión de VMware +- Prever espacio en disco para los archivos de swap (.VSWP) creados al iniciar cada VM (tamaño = memoria de la VM) -Para añadir memoria RAM a un clúster, basta con acceder a la configuración del clúster (como se hizo anteriormente para añadir un host de cálculo) y hacer clic en __'Modificar la memoria'__. +Para agregar memoria RAM a un clúster, simplemente acceda a la configuración del clúster (al igual que para la adición de un host de cómputo como se vio anteriormente) y haga clic en __'Modificar la memoria'__. -__nota__: +__nota__ : -- *__Las máquinas se entregan con toda la memoria física disponible__. El desbloqueo de la memoria es únicamente una activación lógica a nivel de clúster.* -- *No es posible modificar la cantidad de memoria física de un tipo de lámina. Tener en cuenta siempre la capacidad máxima de una lámina al crear un clúster.* -- *Se requieren los permisos __'order'__ y __'compute'__ en la cuenta para realizar esta acción.* +- *__Las máquinas se entregan con toda la memoria física__. El desbloqueo del recurso de memoria es solo una activación de software a nivel de un clúster.* +- *No es posible modificar la cantidad de memoria física de un tipo de nodo. Tenga en cuenta la capacidad máxima de un nodo al crear un clúster.* +- *Se requieren los permisos __'order'__ y __'compute'__ en la cuenta para realizar esta acción.* \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/console/security/security_alarms.md b/i18n/es/docusaurus-plugin-content-docs/current/console/security/security_alarms.md index 1a7b8a58..9c7c6b1c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/console/security/security_alarms.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/console/security/security_alarms.md @@ -2,47 +2,47 @@ title: Alertas de seguridad --- -Encuentre aquí las alertas de seguridad relacionadas con nuestros servicios en la nube. +Consulte aquí las alertas de seguridad relacionadas con nuestros servicios cloud. Esta página se actualiza diariamente para tener en cuenta las vulnerabilidades recién identificadas. ## Vulnerabilidades | Fecha | Referencia(s) | CVSS | Título | Descripción | Servicio(s) | Severidad | Tratamiento | |---------------------|-----------------|-------------|--------------|---------|-------------|----------------|-------------| -| 06/04/2026 | [DSA-2026-143](https://www.dell.com/support/kbdoc/en-us/000449325/dsa-2026-143-security-update-for-dell-objectscale-prior-to-4-1-0-3-and-4-2-0-0-insertion-of-sensitive-information-into-log-file-vulnerability) | 7.8 | **DSA-2026-143 : Vulnerabilidad en Dell ObjectScale (CVE-2026-28261)** | Una vulnerabilidad (CVE-2026-28261) en Dell ObjectScale relacionada con la inserción de información confidencial en los archivos de registro permite a un atacante local exponer secretos y elevar sus privilegios para comprometer el sistema. | Object Storage | 🟡 Moderada | ✅ La remediación de sus entornos ObjectScale está a cargo de Cloud Temple. No es necesaria ninguna acción por su parte. | -| 23/03/2026 | [XSA-480](https://docs.vates.tech/security/advisories/2026/vates-sa-2026-005/) | 7.8 | **Vulnerabilidad XCP-NG (CVE-2026-23554)** | Se ha identificado una vulnerabilidad (CVE-2026-23554) en XCP-ng 8.3, que afecta específicamente a los sistemas basados en procesadores Intel x86, lo que permite a una máquina virtual comprometer el host (escalada de privilegios o DoS). | IaaS OpenSource | 🟠 Importante | ✅ La actualización de sus instancias XCP-ng está programada tan pronto como Cloud Temple valide los parches. No es necesaria ninguna acción por su parte. | -| 29/01/2026 | [Boletín del editor](https://xcp-ng.org/blog/2026/01/29/january-2026-security-and-maintenance-updates-for-xcp-ng-8-3-lts/) | 2.9 - 8.5 | **Vulnerabilidades XCP-NG** | Se han descubierto varias vulnerabilidades en XCP-ng. La más importante permite una escalada de privilegios de una máquina virtual hacia el dom0. Otros fallos permiten la ejecución de código arbitrario a través de la emulación NVMe o fugas de datos confidenciales entre máquinas virtuales. | IaaS OpenSource | 🟠 Importante | ✅ La actualización de sus instancias XCP-ng está programada tan pronto como Cloud Temple valide los parches. No es necesaria ninguna acción por su parte. | -| 23/01/2026 | [DSA-2026-047](https://www.dell.com/support/kbdoc/en-us/000415880/dsa-2026-047-security-update-for-dell-ecs-and-objectscale-multiple-vulnerabilities) | 4.4 - 8.8 | **DSA-2026-047 : Vulnerabilidades en Dell ObjectScale** | Múltiples vulnerabilidades en Dell ObjectScale relacionadas con credenciales predeterminadas y transmisiones/almacenamiento en texto claro permiten compromisos locales o remotos. | Object Storage | 🟠 Importante | ✅ La remediación de sus entornos ObjectScale está a cargo de Cloud Temple. No es necesaria ninguna acción por su parte. | -| 23/12/2025 | [CVE-2025-14443](https://access.redhat.com/security/cve/CVE-2025-14443) | 8.5 | **Vulnerabilidad en Red Hat OpenShift (CVE-2025-14443)** | Una vulnerabilidad en el componente `openshift-apiserver` permite una elevación de privilegios. La explotación requiere una autenticación previa. | PaaS OpenShift | 🟠 Importante | ✅ La actualización de sus instancias de OpenShift está programada en cuanto Cloud Temple valide los parches. No es necesaria ninguna acción por su parte. | -| 30/09/2025 | [VMSA-2025-0016](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/36150) | 8.5 | **VMSA-2025-0016: Vulnerabilidad en VMware vCenter (CVE-2025-41250)** | Una vulnerabilidad (CVE-2025-41250) permite a un atacante autenticado modificar los correos electrónicos de notificación de las tareas programadas. | IaaS By VMware | 🟠 Importante | ✅ La actualización de sus instancias de vCenter está programada en cuanto Cloud Temple valide los parches. No es necesaria ninguna acción por su parte. La actualización se indica en las notificaciones de la Consola. | -| 30/09/2025 | [VMSA-2025-0015](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/36149) | 7.6 | **VMSA-2025-0015: Vulnerabilidad en VMware Tools (Windows)** | Una vulnerabilidad (CVE-2025-41246) que afecta a VMware Tools para Windows permite una elevación de privilegios (requiere acceso local autenticado). | IaaS By VMware | 🟡 Moderada | ⚠️ Le recomendamos actualizar VMware Tools en sus máquinas virtuales. Las versiones corregidas de VM Tools se incluyen en los paquetes ESXi proporcionados por Cloud Temple. | -| 07/08/2025 | [DSA-2025-154](https://www.dell.com/support/kbdoc/en-us/000262308/dsa-2025-154-security-update-for-dell-ecs-and-objectscale-use-of-hard-coded-ssh-cryptographic-key-vulnerability) | 8.4 | **DSA-2025-154 : Vulnerabilidad en Dell ObjectScale (CVE-2025-26476)** | Una vulnerabilidad (CVE-2025-26476) en Dell ObjectScale (< 4.0.0.0) relacionada con el uso de claves SSH codificadas permite acceso local no autenticado. | Object Storage | 🟠 Importante | ✅ La remediación de sus entornos ObjectScale está a cargo de Cloud Temple. No se requiere ninguna acción de su parte. | -| 15/07/2025 | [VMSA-2025-0013](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/VMSA-2025-0013--VMware-ESXi--Workstation--Fusion--and-Tools-updates-address-multiple-vulnerabilities--CVE-2025-41236--CVE-2025-41237--CVE-2025-41238--CVE-2025-41239-/35877) | 9.3 | **VMSA-2025-0013 : Vulnerabilidades importantes en VMware ESXi** | Varias vulnerabilidades importantes afectan VMware ESXi. Los parches son proporcionados por el proveedor. | IaaS By VMware | 🟠 Importante | ⚠️ Recomendamos actualizar sus hipervisores. Las versiones ESXi corregidas están disponibles tan pronto como son validadas por Cloud Temple. Console indica los ESXi que requieren actualización. | -| 15/07/2025 | [VMSA-2025-0013](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/VMSA-2025-0013--VMware-ESXi--Workstation--Fusion--and-Tools-updates-address-multiple-vulnerabilities--CVE-2025-41236--CVE-2025-41237--CVE-2025-41238--CVE-2025-41239-/35877) | 7.1 | **VMSA-2025-0013 : Vulnerabilidad en VMware Tools (CVE-2025-41239)** | Una vulnerabilidad (CVE-2025-41239) en VMware Tools permite la divulgación de información sensible a través de vSockets no inicializados. Los parches son proporcionados por el proveedor. | IaaS By VMware | 🟡 Moderada | ⚠️ Recomendamos actualizar VMware Tools en sus máquinas virtuales. Las versiones VM Tools corregidas están incluidas en los paquetes ESXi puestos a disposición por Cloud Temple. | -| 01/07/2025 | [XSA-470](https://xenbits.xen.org/xsa/advisory-470.html) | N/A | **Vulnerabilidad XCP-NG por un manejo inadecuado de excepciones**
[Boletín del editor](https://xcp-ng.org/blog/2025/07/03/july-2025-security-and-maintenance-update-for-xcp-ng-8-2-lts/) | Se ha descubierto una vulnerabilidad en XCP-NG que permite a código privilegiado ejecutado desde una máquina virtual provocar un fallo del hipervisor, causando una denegación de servicio (DoS) del host completo. | IaaS OpenSource | 🟡 Moderada | ✅ La actualización de sus instancias XCP-ng está planificada desde la validación de los parches por parte de Cloud Temple. No se requiere ninguna acción de su parte. | -| 23/05/2025 | [XSA-468](https://xenbits.xen.org/xsa/advisory-468.html) | 8.8-9.0 | **Vulnerabilidades XCP-NG en los controladores PV de Windows (XSA-468)**
[Boletín del editor](https://xcp-ng.org/blog/2025/05/27/xsa-468-windows-pv-driver-vulnerabilities/) | Múltiples vulnerabilidades (CVE-2025-27462, CVE-2025-27463, CVE-2025-27464) en los controladores PV de Windows permiten a usuarios no privilegiados obtener privilegios de sistema dentro de las VM de Windows. | IaaS OpenSource | 🟠 Importante | ⚠️ Recomendamos actualizar los controladores PV de Windows de sus máquinas virtuales a las versiones corregidas indicadas en el boletín de seguridad. ✅ La actualización de sus instancias XCP-ng está planificada tan pronto como Cloud Temple valide las correcciones. | -| 22/05/2025 | [XSA-469, INTEL-SA](https://xcp-ng.org/blog/2025/05/14/may-2025-security-update-for-xcp-ng-8-2-8-3/) | 4.9-6.5 | **Vulnerabilidades XCP-NG en el microcódigo de Intel y Xen (XSA-469, INTEL-SA)**
[Boletín del editor](https://xcp-ng.org/blog/2025/05/14/may-2025-security-update-for-xcp-ng-8-2-8-3/) | Se han publicado parches de seguridad para XCP-ng, corrigiendo múltiples vulnerabilidades en el microcódigo de Intel y Xen. | IaaS OpenSource | 🟡 Moderada | ✅ La actualización de sus instancias XCP-ng está planificada tan pronto como Cloud Temple valide las correcciones. No es necesaria ninguna acción por su parte. | -| 21/05/2025 | [VMSA-2025-0010](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25717) | 4.3-6.8 | **VMSA-2025-0010 : Múltiples vulnerabilidades en VMware ESXi (CVE-2025-41226, CVE-2025-41227, CVE-2025-41228)** | Se han reportado varias vulnerabilidades en VMware ESXi: Vulnerabilidad de denegación de servicio en operaciones de invitado (CVE-2025-41226), vulnerabilidad de denegación de servicio (CVE-2025-41227), vulnerabilidad de tipo Cross Site Scripting (XSS) (CVE-2025-41228). Se proporcionan parches por parte del proveedor. | IaaS By VMware | 🟡 Moderada | ⚠️ Le recomendamos actualizar sus hipervisores. Las versiones corregidas de ESXi están disponibles tan pronto como sean validadas por Cloud Temple. Console le indica los ESXi que requieren actualización. | -| 21/05/2025 | [VMSA-2025-0010](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25717) | 4.3-8.8 | **VMSA-2025-0010 : Múltiples vulnerabilidades en vCenter (CVE-2025-41225, CVE-2025-41228)** | Se han reportado varias vulnerabilidades en VMware vCenter: Vulnerabilidad de ejecución de comandos autenticados en VMware vCenter Server (CVE-2025-41225), vulnerabilidad de tipo Cross Site Scripting (XSS) (CVE-2025-41228). Se proporcionan parches por parte del proveedor. | IaaS By VMware | 🟠 Importante | ✅ La actualización de sus instancias vCenter está prevista tan pronto como los parches sean validados por Cloud Temple. No se requiere ninguna acción por su parte. | -| 14/05/2025 | [VMSA-2025-0007](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25683) | 6.1 | **VMSA-2025-0007 : Vulnerabilidad de gestión de archivos no segura en VMware Tools (CVE-2025-22247)** | Se ha reportado una vulnerabilidad de gestión de archivos no segura en VMware Tools. Se proporcionan parches por parte del proveedor. | IaaS By VMware | 🟡 Moderada | ⚠️ Le recomendamos actualizar VMware Tools en sus máquinas virtuales. | -| 25/03/2025 | [VMSA-2025-0005](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25518) | 7.8 | **VMSA-2025-0005 : Vulnerabilidad de omisión de autenticación en VMware Tools para Windows (CVE-2025-22230)** | Se ha reportado una vulnerabilidad de omisión de autenticación en VMware Tools para Windows. Se proporcionan parches por parte del proveedor. | IaaS By VMware | 🟠 Importante | ⚠️ Le recomendamos actualizar VMware Tools en sus máquinas virtuales. | -| 04/03/2025 | [VMSA-2025-0004](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25390) | 7.1-9.3 | **VMSA-2025-0004 : Múltiples vulnerabilidades en VMware ESXi (CVE-2025-22224, CVE-2025-22225, CVE-2025-22226)** | Se han reportado varias vulnerabilidades en VMware ESXi: Vulnerabilidad de desbordamiento de pila VMCI (CVE-2025-22224) evaluada como Crítica por VMware, vulnerabilidad de escritura arbitraria en VMware ESXi (CVE-2025-22225), vulnerabilidad de divulgación de información HGFS (CVE-2025-22226). Se proporcionan parches por parte del proveedor. | IaaS By VMware | 🟠 Importante | ⚠️ Le recomendamos actualizar sus hipervisores. Las versiones corregidas de ESXi están disponibles tan pronto como sean validadas por Cloud Temple. Console le indica los ESXi que requieren actualización. | +| 06/04/2026 | [DSA-2026-143](https://www.dell.com/support/kbdoc/en-us/000449325/dsa-2026-143-security-update-for-dell-objectscale-prior-to-4-1-0-3-and-4-2-0-0-insertion-of-sensitive-information-into-log-file-vulnerability) | 7.8 | **DSA-2026-143 : Vulnerabilidad en Dell ObjectScale (CVE-2026-28261)** | Una vulnerabilidad (CVE-2026-28261) en Dell ObjectScale relacionada con la inserción de información sensible en archivos de registro permite a un atacante local exponer secretos y elevar sus privilegios para comprometer el sistema. | Object Storage | 🟡 Moderada | ✅ La remediación de sus entornos ObjectScale está gestionada por Cloud Temple. No es necesaria ninguna acción por su parte. | +| 23/03/2026 | [XSA-480](https://docs.vates.tech/security/advisories/2026/vates-sa-2026-005/) | 7.8 | **Vulnerabilidad XCP-NG (CVE-2026-23554)** | Se ha identificado una vulnerabilidad (CVE-2026-23554) en XCP-ng 8.3, afectando específicamente a sistemas basados en procesadores Intel x86, lo que permite a una VM comprometer el host (escalamiento de privilegios o DoS). | IaaS OpenSource | 🟠 Importante | ✅ La actualización de sus instancias XCP-ng está programada una vez que los parches sean validados por Cloud Temple. No es necesaria ninguna acción por su parte. | +| 29/01/2026 | [Bulletin éditeur](https://xcp-ng.org/blog/2026/01/29/january-2026-security-and-maintenance-updates-for-xcp-ng-8-3-lts/) | 2.9 - 8.5 | **Vulnerabilidades XCP-NG** | Se han descubierto varias vulnerabilidades en XCP-ng. La más grave permite un escalamiento de privilegios desde una VM hacia el dom0. Otras fallas permiten la ejecución de código arbitrario a través de la emulación NVMe o fugas de datos confidenciales entre máquinas virtuales. | IaaS OpenSource | 🟠 Importante | ✅ La actualización de sus instancias XCP-ng está programada una vez que los parches sean validados por Cloud Temple. No es necesaria ninguna acción por su parte. | +| 23/01/2026 | [DSA-2026-047](https://www.dell.com/support/kbdoc/en-us/000415880/dsa-2026-047-security-update-for-dell-ecs-and-objectscale-multiple-vulnerabilities) | 4.4 - 8.8 | **DSA-2026-047 : Vulnerabilidades en Dell ObjectScale** | Múltiples vulnerabilidades en Dell ObjectScale relacionadas con credenciales por defecto y transmisiones/almacenamiento en texto claro permiten compromisos locales o remotos. | Object Storage | 🟠 Importante | ✅ La remediación de sus entornos ObjectScale está gestionada por Cloud Temple. No es necesaria ninguna acción por su parte. | +| 23/12/2025 | [CVE-2025-14443](https://access.redhat.com/security/cve/CVE-2025-14443) | 8.5 | **Vulnerabilidad en Red Hat OpenShift (CVE-2025-14443)** | Una vulnerabilidad en el componente `openshift-apiserver` permite una elevación de privilegios. La explotación requiere una autenticación previa. | PaaS OpenShift | 🟠 Importante | ✅ La actualización de sus instancias OpenShift está programada una vez que los parches sean validados por Cloud Temple. No es necesaria ninguna acción por su parte.| +| 30/09/2025 | [VMSA-2025-0016](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/36150) | 8.5 | **VMSA-2025-0016 : Vulnerabilidad en VMware vCenter (CVE-2025-41250)** | Una vulnerabilidad (CVE-2025-41250) permite a un atacante autenticado modificar los correos electrónicos de notificación de las tareas programadas. | IaaS By VMware | 🟠 Importante | ✅ La actualización de sus instancias vCenter está programada una vez que los parches sean validados por Cloud Temple. No es necesaria ninguna acción por su parte. La actualización se indica en las notificaciones de Console. | +| 30/09/2025 | [VMSA-2025-0015](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/36149) | 7.6 | **VMSA-2025-0015 : Vulnerabilidad en VMware Tools (Windows)** | Una vulnerabilidad (CVE-2025-41246) que afecta a VMware Tools para Windows permite una elevación de privilegios (requiere acceso local autenticado). | IaaS By VMware | 🟡 Moderada | ⚠️ Recomendamos actualizar VMware Tools en sus máquinas virtuales. Las versiones corregidas de VM Tools están incluidas en los paquetes ESXi disponibles a través de Cloud Temple. | +| 07/08/2025 | [DSA-2025-154](https://www.dell.com/support/kbdoc/en-us/000262308/dsa-2025-154-security-update-for-dell-ecs-and-objectscale-use-of-hard-coded-ssh-cryptographic-key-vulnerability) | 8.4 | **DSA-2025-154 : Vulnerabilidad en Dell ObjectScale (CVE-2025-26476)** | Una vulnerabilidad (CVE-2025-26476) en Dell ObjectScale (< 4.0.0.0) relacionada con el uso de claves SSH codificadas en duro permite un acceso local no autenticado. | Object Storage | 🟠 Importante | ✅ La remediación de sus entornos ObjectScale está gestionada por Cloud Temple. No es necesaria ninguna acción por su parte. | +| 15/07/2025 | [VMSA-2025-0013](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/VMSA-2025-0013--VMware-ESXi--Workstation--Fusion--and-Tools-updates-address-multiple-vulnerabilities--CVE-2025-41236--CVE-2025-41237--CVE-2025-41238--CVE-2025-41239-/35877) | 9.3 | **VMSA-2025-0013 : Vulnerabilidades críticas en VMware ESXi** | Varias vulnerabilidades críticas afectan a VMware ESXi. El editor proporciona parches. | IaaS By VMware | 🟠 Importante | ⚠️ Recomendamos actualizar sus hipervisores. Las versiones corregidas de ESXi están disponibles una vez validadas por Cloud Temple. Console le indica qué ESXi requieren una actualización. | +| 15/07/2025 | [VMSA-2025-0013](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/VMSA-2025-0013--VMware-ESXi--Workstation--Fusion--and-Tools-updates-address-multiple-vulnerabilities--CVE-2025-41236--CVE-2025-41237--CVE-2025-41238--CVE-2025-41239-/35877) | 7.1 | **VMSA-2025-0013 : Vulnerabilidad en VMware Tools (CVE-2025-41239)** | Una vulnerabilidad (CVE-2025-41239) en VMware Tools permite la divulgación de información sensible a través de vSockets no inicializados. El editor proporciona parches. | IaaS By VMware | 🟡 Moderada | ⚠️ Recomendamos actualizar VMware Tools en sus máquinas virtuales. Las versiones corregidas de VM Tools están incluidas en los paquetes ESXi disponibles a través de Cloud Temple. | +| 01/07/2025 | [XSA-470](https://xenbits.xen.org/xsa/advisory-470.html) | N/A | **Vulnerabilidad XCP-NG mediante una mala gestión de excepciones** [Bulletin éditeur](https://xcp-ng.org/blog/2025/07/03/july-2025-security-and-maintenance-update-for-xcp-ng-8-2-lts/) | Se ha descubierto una vulnerabilidad en XCP-NG que permite que código privilegiado ejecutado desde una máquina virtual provoque un fallo en el hipervisor, causando una denegación de servicio (DoS) en todo el host. | IaaS OpenSource | 🟡 Moderada | ✅ La actualización de sus instancias XCP-ng está programada una vez que los parches sean validados por Cloud Temple. No es necesaria ninguna acción por su parte.| +| 23/05/2025 | [XSA-468](https://xenbits.xen.org/xsa/advisory-468.html) | 8.8-9.0 | **Vulnerabilidades XCP-NG en los controladores PV de Windows (XSA-468)** [Bulletin éditeur](https://xcp-ng.org/blog/2025/05/27/xsa-468-windows-pv-driver-vulnerabilities/) | Varias vulnerabilidades (CVE-2025-27462, CVE-2025-27463, CVE-2025-27464) en los controladores PV de Windows permiten a usuarios no privilegiados obtener privilegios de sistema dentro de las VM de Windows. | IaaS OpenSource | 🟠 Importante | ⚠️ Recomendamos actualizar los controladores PV de Windows de sus máquinas virtuales a las versiones corregidas indicadas en el boletín de seguridad. ✅ La actualización de sus instancias XCP-ng está programada una vez que los parches sean validados por Cloud Temple. | +| 22/05/2025 | [XSA-469, INTEL-SA](https://xcp-ng.org/blog/2025/05/14/may-2025-security-update-for-xcp-ng-8-2-8-3/) | 4.9-6.5 | **Vulnerabilidades XCP-NG en el microcódigo Intel y Xen (XSA-469, INTEL-SA)** [Bulletin éditeur](https://xcp-ng.org/blog/2025/05/14/may-2025-security-update-for-xcp-ng-8-2-8-3/) | Se han publicado parches de seguridad para XCP-ng que corrigen varias vulnerabilidades en el microcódigo Intel y Xen. | IaaS OpenSource | 🟡 Moderada | ✅ La actualización de sus instancias XCP-ng está programada una vez que los parches sean validados por Cloud Temple. No es necesaria ninguna acción por su parte.| +| 21/05/2025 | [VMSA-2025-0010](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25717) | 4.3-6.8 | **VMSA-2025-0010 : Múltiples vulnerabilidades en VMware ESXi (CVE-2025-41226, CVE-2025-41227, CVE-2025-41228)** | Se han reportado varias vulnerabilidades en VMware ESXi: Vulnerabilidad de denegación de servicio en operaciones invitadas (CVE-2025-41226), Vulnerabilidad de denegación de servicio (CVE-2025-41227), Vulnerabilidad de tipo Cross Site Scripting (XSS) (CVE-2025-41228). El editor proporciona parches. | IaaS By VMware | 🟡 Moderada | ⚠️ Recomendamos actualizar sus hipervisores. Las versiones corregidas de ESXi están disponibles una vez validadas por Cloud Temple. Console le indica qué ESXi requieren una actualización. | +| 21/05/2025 | [VMSA-2025-0010](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25717) | 4.3-8.8 | **VMSA-2025-0010 : Múltiples vulnerabilidades en vCenter (CVE-2025-41225, CVE-2025-41228)** | Se han reportado varias vulnerabilidades en VMware vCenter: Vulnerabilidad de ejecución de comandos autenticada en VMware vCenter Server (CVE-2025-41225), Vulnerabilidad de tipo Cross Site Scripting (XSS) (CVE-2025-41228). El editor proporciona parches. | IaaS By VMware | 🟠 Importante | ✅ La actualización de sus instancias vCenter está programada una vez que los parches sean validados por Cloud Temple. No es necesaria ninguna acción por su parte. La actualización se indica en las notificaciones de Console. | +| 14/05/2025 | [VMSA-2025-0007](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25683) | 6.1 | **VMSA-2025-0007 : Vulnerabilidad de gestión de archivos insegura en VMware Tools (CVE-2025-22247)** | Se ha reportado una vulnerabilidad de gestión de archivos insegura en VMware Tools. El editor proporciona parches. | IaaS By VMware | 🟡 Moderada | ⚠️ Recomendamos actualizar VMware Tools en sus máquinas virtuales. Las versiones corregidas de VM Tools están incluidas en los paquetes ESXi disponibles a través de Cloud Temple. | +| 25/03/2025 | [VMSA-2025-0005](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25518) | 7.8 | **VMSA-2025-0005 : Vulnerabilidad de elusión de autenticación en VMware Tools para Windows (CVE-2025-22230)** | Se ha reportado una vulnerabilidad de elusión de autenticación en VMware Tools para Windows. El editor proporciona parches. | IaaS By VMware | 🟠 Importante | ⚠️ Recomendamos actualizar VMware Tools en sus máquinas virtuales. Las versiones corregidas de VM Tools están incluidas en los paquetes ESXi disponibles a través de Cloud Temple | +| 04/03/2025 | [VMSA-2025-0004](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25390) | 7.1-9.3 | **VMSA-2025-0004 : Múltiples vulnerabilidades en VMware ESXi (CVE-2025-22224, CVE-2025-22225, CVE-2025-22226)** | Se han reportado varias vulnerabilidades en VMware ESXi: Vulnerabilidad de desbordamiento de heap VMCI (CVE-2025-22224) evaluada como Crítica por VMware, Vulnerabilidad de escritura arbitraria en VMware ESXi (CVE-2025-22225), Vulnerabilidad de divulgación de información HGFS (CVE-2025-22226). El editor proporciona parches. | IaaS By VMware | 🟠 Importante | ⚠️ Recomendamos actualizar sus hipervisores. Las versiones corregidas de ESXi están disponibles una vez validadas por Cloud Temple. Console le indica qué ESXi requieren una actualización. | ## Información - **Fecha** : Fecha de publicación inicial de la alerta de seguridad de Cloud Temple. - **Referencia(s)** : ID CVE, según disponibilidad. -- **CVSS** : Puntuación CVSS v3 base tal como informada por el editor o el CVE, sin contextualización. La contextualización se expresa mediante la severidad CT. Si la alerta abarca múltiples vulnerabilidades, se indican las puntuaciones CVSS mínima y máxima. +- **CVSS** : Puntuación CVSS v3 base tal como la reporta el editor o el CVE, sin contextualizar. La contextualización se expresa mediante la severidad CT. Si la alerta afecta a varias vulnerabilidades, se indican las puntuaciones CVSS mín y máx. - **Título** : Título de la alerta, con referencia del editor si está disponible. - **Descripción** : Descripción sintética, con enlace(s) a información detallada. - **Servicio(s)** : Servicio(s) de Cloud Temple que podrían verse afectados. -- **Severidad** : Nivel de severidad en el contexto de los servicios Cloud Temple (para la vulnerabilidad más crítica en caso de múltiples vulnerabilidades). Se tienen en cuenta los criterios de explotación en el contexto técnico de nuestras infraestructuras y servicios Cloud. +- **Severidad** : Nivel de severidad en el contexto de los servicios de Cloud Temple (para la vulnerabilidad más crítica en caso de múltiples vulnerabilidades). Los criterios de explotación se tienen en cuenta en el contexto técnico de nuestras infraestructuras y servicios Cloud. | Nivel | Descripción | -|-------|-------------| -| 🔴 **Crítica** | Vulnerabilidad con CVSS 7+ que presenta un riesgo importante de explotación (alta exposición, facilidad de explotación). Se recomienda fuertemente aplicar una corrección o mitigación lo antes posible. | -| 🟠 **Importante** | Vulnerabilidad con CVSS 7+ que no presenta un riesgo importante de explotación (exposición limitada o restricciones para la explotación). | -| 🟡 **Moderada** | Vulnerabilidad con CVSS 4+ | -| 🔵 **Baja** | Vulnerabilidad con CVSS inferior a 4, o no explotable. | +|--------|-------------| +| 🔴 **Crítica** | Vulnerabilidad CVSS 7+ que presenta un riesgo de explotación importante (alta exposición, facilidad de explotación). Se recomienda encarecidamente una corrección o mitigación lo antes posible.| +| 🟠 **Importante** | Vulnerabilidad CVSS 7+ que no presenta un riesgo de explotación importante (exposición limitada o restricciones de explotación) | +| 🟡 **Moderada** | Vulnerabilidad CVSS 4+ | +| 🔵 **Baja** | Vulnerabilidad CVSS inferior a 4, o no explotable. | -- **Tratamiento** : Información y recomendaciones en el contexto de los servicios Cloud Temple. ⚠️ indica que se requiere una acción por parte de los usuarios para tratar la vulnerabilidad. ✅ indica que el tratamiento de la vulnerabilidad está gestionado por Cloud Temple. +- **Tratamiento** : Información y recomendaciones en el contexto de los servicios de Cloud Temple. ⚠️ indica que se requiere una acción por parte de los usuarios para tratar la vulnerabilidad. ✅ indica que el tratamiento de la vulnerabilidad está gestionado por Cloud Temple. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/containers_overview.md b/i18n/es/docusaurus-plugin-content-docs/current/containers_overview.md index 987c30c7..50c30904 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/containers_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/containers_overview.md @@ -1,55 +1,59 @@ --- -title: Visión general de las ofertas de contenerización +title: Visión general de las ofertas de contenedores sidebar_position: 10 # Posición justo antes de IaaS --- -# Containerization, accelerator of your digital transformation +# La contenedorización, acelerador de su transformación digital -In the context of accelerated digital transformation, the ability to rapidly develop, deploy, and evolve applications has become a decisive competitive advantage. Containerization, orchestrated by platforms such as Kubernetes and OpenShift, addresses this challenge by delivering unmatched agility, portability, and operational efficiency. +En un contexto de transformación digital acelerada, la capacidad de desarrollar, desplegar y evolucionar rápidamente las aplicaciones se ha convertido en una ventaja competitiva decisiva. La contenedorización, orquestada por plataformas como Kubernetes y OpenShift, responde a este desafío ofreciendo una agilidad, una portabilidad y una eficiencia operativa inigualables. -However, the inherent complexity of these technologies can represent a barrier. That's why Cloud Temple has developed a range of managed, "as a Service" solutions that allow you to leverage the full power of containers while relieving you of the complexity of their management. Our offerings are designed to enable you to focus on your core business: application innovation, on a sovereign and trustworthy foundation. +Sin embargo, la complejidad inherente a estas tecnologías puede representar un obstáculo. Por ello, Cloud Temple ha desarrollado una gama de soluciones gestionadas y "as a Service" que le permiten aprovechar toda la potencia de los contenedores, al tiempo que le liberan de la complejidad de su gestión. Nuestras ofertas están diseñadas para permitirle centrarse en el núcleo de su negocio: la innovación en aplicaciones, sobre una plataforma soberana y de confianza. -## Nuestro portafolio de soluciones: ¿qué trayectoria para tu proyecto? +## Nuestro portafolio de soluciones: ¿qué trayectoria seguir para su proyecto? -Esta tabla destaca los puntos fuertes y el posicionamiento de cada solución para una toma de decisiones rápida. +Este cuadro destaca los puntos fuertes y el posicionamiento de cada solución para una toma de decisiones rápida. | Criterio | PaaS OpenShift | Kubernetes gestionado | -| :---------------------------- | :---------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------- | -| **Posicionamiento clave** | **La confianza sin compromisos**
_Plataforma "como servicio", la vía más rápida para modernizar sobre una base certificada._ | **La flexibilidad de código abierto**
_Un Kubernetes puro, portable y sin capas adicionales sobre una infraestructura soberana._ | -| **Nivel de servicio** | Como servicio | Gestionado | -| **Conformidad y seguridad** | **100% SecNumCloud** | Alojado en infraestructura SNC | -| **Público objetivo ideal** | Equipos de desarrollo, DevOps | Equipos DevOps, Expertos en Kubernetes | -| **Diferenciador clave** | Simplicidad y rapidez de despliegue | Código abierto, portable y sin capas adicionales | - -### Comparación de componentes técnicos - -Más allá del posicionamiento, cada oferta se basa en elecciones tecnológicas distintas que responden a necesidades específicas. La siguiente tabla detalla las piezas de software fundamentales que componen cada solución. - -| Componente técnico | PaaS OpenShift | Kubernetes gestionado | -| :--------------------------- | :--------------------------------- | :---------------------------- | -| **Sistema operativo base** | Red Hat CoreOS (RHCOS) | Talos OS (inmutable) | -| **Orquestador** | Red Hat OpenShift | Kubernetes (CNCF) | -| **Almacenamiento persistente** | OpenShift Data Foundation | Rook-Ceph | -| **Red (CNI)** | OVN-Kubernetes | Cilium | -| **Ingress / Balanceo de carga** | HAProxy / MetalLB | NGINX Ingress / MetalLB | -| **Seguridad (Motor de políticas)** | Security Context Constraints (SCC) | PSA + Kyverno + Capsule | -| **Copia de seguridad** | Veeam Kasten K10 (opcional) | Veeam Kasten K10 (incluido) | -| **Automatización (GitOps)** | OpenShift Pipelines | ArgoCD | -| **Observabilidad** | Prometheus / Grafana | Prometheus / Grafana / Loki | +| :--------------------------- | :---------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------- | +| **Posicionamiento clave** | **Confianza sin compromisos**
_Plataforma "as a Service", la vía más rápida para modernizar sobre una base certificada._ | **La flexibilidad de código abierto**
_Un Kubernetes puro, portátil y sin capas adicionales sobre una infraestructura soberana._ | +| **Nivel de servicio** | as a Service | Gestionado | +| **Conformidad y seguridad** | **100% SecNumCloud** | Alojado en infraestructura SNC | +| **Público objetivo ideal** | Equipos de desarrollo, DevOps | Equipos DevOps, Expertos en Kubernetes | +| **Punto de diferenciación** | Simplicidad y rapidez de despliegue | Open-source, portátil y sin capas adicionales | + +### Comparación de los componentes técnicos + +Más allá del posicionamiento, cada producto se basa en elecciones tecnológicas distintas que responden a necesidades específicas. La siguiente tabla detalla los componentes de software fundamentales que componen cada solución. + +| Componente Técnico | PaaS OpenShift | Kubernetes Gestionado | +| :--------------------------- | :--------------------------------- | :-------------------------- | +| **Sistema Operativo Base** | Red Hat CoreOS (RHCOS) | Talos OS (inmutable) | +| **Orquestador** | Red Hat OpenShift | Kubernetes (CNCF) | +| **Almacenamiento persistente** | OpenShift Data Foundation | Rook-Ceph | +| **Red (CNI)** | OVN-Kubernetes | Cilium | +| **Ingress / Balanceo de Carga** | HAProxy / MetalLB | NGINX Ingress / MetalLB | +| **Seguridad (Motor de Políticas)** | Security Context Constraints (SCC) | PSA + Kyverno + Capsule | +| **Copia de Seguridad** | Veeam Kasten K10 (opcional) | Veeam Kasten K10 (incluido) | +| **Automatización (GitOps)** | OpenShift Pipelines | ArgoCD | +| **Observabilidad** | Prometheus / Grafana | Prometheus / Grafana / Loki | + +--- ## ¿Qué solución para su proyecto? -La elección de la plataforma de contenerización es una decisión fundamental. A continuación, se presentan algunas claves para orientarle hacia la oferta más adecuada para su contexto. +La elección de la plataforma de contenedorización es una decisión estructurante. A continuación, algunas claves para orientarse hacia el producto más pertinente para su contexto. -* **Si la conformidad normativa es su prioridad absoluta...** - ...y debe operar en un sector altamente regulado (público, salud, OIV) o certificar su propia solución, la **Oferta PaaS OpenShift** es la solución de referencia que le ofrece el mayor nivel de garantía del mercado. +* **Si el cumplimiento normativo es su prioridad absoluta...** + ...y debe operar en un sector altamente regulado (público, salud, OIV) o validar su propia solución, la **Oferta PaaS OpenShift** es la solución de referencia que le ofrece el más alto nivel de garantía del mercado. -* **Si prioriza el software libre, la modernidad y la seguridad "zero-trust"...** - y su cultura empresarial está fuertemente orientada hacia el software libre, la ausencia de dependencia de un proveedor y las metodologías de seguridad de nueva generación (sistemas inmutables, gestión mediante API), la **Oferta Managed Kubernetes** es la más alineada con su visión. +* **Si prioriza el open source, la modernidad y la seguridad "zero-trust"...** + y su cultura empresarial está fuertemente orientada hacia el open source, la ausencia de dependencia del proveedor y los enfoques de seguridad de nueva generación (sistemas inmutables, gestión por API), la **Oferta Managed Kubernetes** es la más alineada con su visión. -Nuestro papel como asesores es acompañarle en esta decisión. Nuestros arquitectos están a su disposición para analizar su contexto y definir conjuntamente la mejor trayectoria. +Nuestro rol de consultoría es acompañarle en esta decisión. Nuestros arquitectos están a su disposición para analizar su contexto y definir con usted la mejor trayectoria. + +--- -## Explorar nuestras soluciones +## Explore nuestras soluciones
@@ -59,27 +63,27 @@ Nuestro papel como asesores es acompañarle en esta decisión. Nuestros arquitec

- Descubra nuestra plataforma "como servicio" para modernizar sus aplicaciones sobre una base certificada SecNumCloud. + Descubra nuestra plataforma "as a Service" para modernizar sus aplicaciones sobre una base certificada SecNumCloud.

-

Kubernetes gestionado

+

Managed Kubernetes

- Explore nuestra oferta de Kubernetes pura, portable y sin capas adicionales, alojada en una infraestructura soberana. + Explore nuestro producto Kubernetes puro, portátil y sin sobrecarga, alojado en una infraestructura soberana.

- + \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/contractual/contracts.md b/i18n/es/docusaurus-plugin-content-docs/current/contractual/contracts.md index 6dbcb671..0b5afc08 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/contractual/contracts.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/contractual/contracts.md @@ -6,68 +6,66 @@ hide_table_of_contents: true import { ContractCard } from '@site/src/components/ContractCard'; -## Jerarquía de documentos contractuales +## Jerarquía de los documentos contractuales | | Referencias | | --------- | -------------------------- | | Referencia | CT.AM.JUR.HDC 20250502_3.0 | -| Fecha | 17 de abril de 2026 | +| Fecha | 17 de abril de 2026. | La jerarquía de los documentos contractuales se establece según un orden de prioridad definido: -1. [Condiciones Generales de Venta y Uso (CGVU)](/contractual/files/CT.AM.JUR.CGVU_Conditions%20Generales%20de%20Vente%20et%20d'Utilisation_v1.pdf) -2. [Convenio de Servicio SecNumCloud](/contractual/files/CT.AM.JUR.ANX%20-Annexe_Convention%20de%20Services_SNC_v2.pdf) -3. Convenio específico particular ¹ -4. Condiciones Particulares de Uso (CPU) ² -5. [Acuerdo de Tratamiento de Datos](/contractual/files/CT.AM.JANX%20-%20Annexe_DPA_v1.pdf) +1. [Conditions Générales de Vente et Utilisation (CGVU)](/contractual/files/CT.AM.JUR.CGVU_Conditions%20Generales%20de%20Vente%20et%20d'Utilisation_v1.pdf) +2. [Convention de Service SecNumCloud](/contractual/files/CT.AM.JUR.ANX%20-Annexe_Convention%20de%20Services_SNC_v2.pdf) +3. Convención específica particular ¹ +4. Plan de Aseguramiento de la Seguridad (PAS) ² +5. Condiciones Particulares de Uso (CPU) +6. [Data Protection Agreement](/contractual/files/CT.AM.JANX%20-%20Annexe_DPA_v1.pdf) -:::info[Notas contractuales] +:::info[Aclaraciones contractuales] -**¹** Convenio específico, diseñado para adaptarse a las particularidades del proyecto. +**¹** Convención específica, diseñada para alinearse con las particularidades del proyecto. **²** Documento no público. ::: -_Nota: Las versiones traducidas al inglés, italiano y alemán se proporcionan únicamente para facilitar la comprensión de la oferta._ +_Nota: Las versiones traducidas al inglés, italiano, alemán y español se proporcionan únicamente para facilitar la comprensión de la oferta._ --- # Documentos Contractuales -Encuentre aquí todos los documentos contractuales de Cloud Temple: condiciones generales, acuerdo de tratamiento de datos (DPA), proceso de pedido, condiciones particulares por servicio, acuerdos de servicio SecNumCloud y acuerdos de nivel de servicio. +Consulte aquí todos los documentos contractuales de Cloud Temple: condiciones generales, acuerdo de tratamiento de datos (DPA), convenios de servicio SecNumCloud y acuerdos de nivel de servicio. --- -## Condiciones Generales +## Condiciones generales
--- -## Acuerdos de Servicio SecNumCloud +## Convenciones de servicio SecNumCloud -Los acuerdos de servicio definen el marco contractual para la prestación de servicios cualificados SecNumCloud: alcance, compromisos operativos, responsabilidades y condiciones de servicio. +Las convenciones de servicio definen el marco contractual para la prestación de servicios cualificados SecNumCloud: alcance, compromisos operativos, responsabilidades y condiciones de servicio.
@@ -82,8 +80,8 @@ Los SLA definen los compromisos de disponibilidad, los métodos de medición, la
-
SLA VM Instances
-
Disponibilidad garantizada 99,95 % — créditos de servicio y exclusiones.
+
SLA de Instancias de VM
+
Disponibilidad garantizada del 99,95 % — créditos de servicio y exclusiones.
Consultar el documento →
@@ -91,9 +89,9 @@ Los SLA definen los compromisos de disponibilidad, los métodos de medición, la
-
SLA VPC
+
SLA de VPC
Plano de datos 99,99 % — plano de control 99,9 % — créditos de servicio y exclusiones.
Consultar el documento →
- + \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/contractual/iaas/raci.md b/i18n/es/docusaurus-plugin-content-docs/current/contractual/iaas/raci.md index 8ebe2bdd..fb47fc17 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/contractual/iaas/raci.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/contractual/iaas/raci.md @@ -1,226 +1,225 @@ --- -title: Matrice de responsabilité IaaS +title: Matriz de responsabilidad IaaS +displayed_sidebar: docSidebar --- -Voici le modèle **RACI** définissant la répartition des responsabilités entre le client et Cloud Temple pour l'utilisation des infrastructures IaaS de Cloud Temple. -## Définition des différents rôles +Aquí se presenta el modelo **RACI** que define la asignación de responsabilidades entre el cliente y Cloud Temple para el uso de las infraestructuras IaaS de Cloud Temple. -Nous rappelons ici les différents rôles du RACI : +## Definición de los diferentes roles -| Rôle | Description | +Aquí se recuerdan los diferentes roles del RACI: + +| Rol | Descripción | |--------------|---------------------------------------------------------------------------------------| -| (R) Réalise | __R__éalise le processus | -| (A) Approuve | __A__pprouve la réalisation du processus | -| (C) Consulte | __C__onsulté pendant le processus | -| (I) Informé | __I__nformé des résultats du processus (via l'outillage, le portail ou la messagerie) | - -## Définition votre besoin - -| Activité | Rôle Client | Rôle Cloud Temple | -|------------------------------------------------------------------------------------------------|-------------|-------------------| -| Définir l'architecture globale de votre plateforme Cloud Temple | **RA** | **CI** | -| Définir le nombre de tenants et le nombre de zone de disponibilité pour chaque tenant | **RA** | **CI** | -| Définir votre stratégie globale de reprise ou de continuité d'activité | **RA** | **CI** | -| Dimensionner correctement votre plateforme Cloud Temple (calcul, stockage, réseau, backup,...) | **RA** | **CI** | -| Souscrire aux services avec les informations nécessaires | **RA** | **I** | - -## Mise en œuvre initiale de vos tenants Cloud Temple - -| Activité | Rôle Client | Rôle Cloud Temple | -|--------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer la mise en oeuvre des **datacenters physiques** | | **RA** | -| Assurer la mise en oeuvre des infrastructures **calcul** | **I** | **RA** | -| Assurer la mise en oeuvre des infrastructures **stockage** | **I** | **RA** | -| Assurer la mise en oeuvre de la connectivité au **réseau backbone(1)** | **I** | **RA** | -| Acquérir et maintenir les licences logiciels essentiels pour le fonctionnement de la plateforme Cloud Temple | | **RA** | -| Implémenter la configuration de base de vos tenants Cloud Temple | **CI** | **RA** | -| Implémenter la configuration initiale pour le service de sauvegarde | **CI** | **RA** | -| *S'ils sont souscrit :* implémenter la configuration réseau initiale pour les services Internet et Firewall | **CI** | **RA** | -| Offrir l'assistance requise pour la prise en main de vos environnements Cloud Temple | **I** | **RA** | -| Effectuer les ajustements de configuration finaux du service après sa livraison | **RA** | **C** | -| Configurer un référentiel d'authentification externe pour la console Cloud Temple | **RA** | **C** | -| Créer les utilisateurs de chaque tenant dans la console Cloud Temple et affecter les droits | **RA** | | -| Valider la conformité de la plateforme livrée avec le référentiel SecNumCloud | **I** | **RA** | -| Valider la conformité de la plateforme livrée avec les spécifications requises | **RA** | **CI** | - -*(1) Le réseau backbone constitue l'infrastructure centrale de Cloud Temple, offrant une colonne vertébrale sur laquelle -reposent les réseaux clients spécifiques, lesquels sont intégrés et pris en charge par cette infrastructure principale.* - -## Intégrer votre système d'information dans vos environnements Cloud Temple - -| Activité | Rôle Client | Rôle Cloud Temple | -|-------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Créer, installer, mettre à jour vos machines virtuelles | **RA** | | -| Installer et configurer les logiciels et middlewares sur vos machines virtuelles | **RA** | | -| Acheter et détenir les licences et les droits d'utilisation pour les systèmes d'exploitation de vos machines virtuelles | **RA** | | -| Configurer le réseau pour chacune vos machines virtuelles | **RA** | | -| S'assurer que chaque machine virtuelle est associée à un plan de sauvegarde cohérent | **RA** | **C** | -| S'assurer que chaque machine virtuelle est associée à un plan de reprise d'activité ou de continuité d'activité cohérent | **RA** | **C** | -| Implémenter une stratégie de protection antivirale sur vos machines virtuelles | **RA** | | -| Mettre en place une solution de métrologie et de surveillance sur vos machines virtuelles | **RA** | | -| Définir la politique de TAG de vos machines virtuelles | **RA** | | - -## Opérations récurrentes - -### Gestion des accès et des identités - -| Activité | Rôle Client | Rôle Cloud Temple | +| (R) Realiza | __R__ealiza el proceso | +| (A) Aprueba | __A__prueba la realización del proceso | +| (C) Consulta | __C__onsultado durante el proceso | +| (I) Informado| __I__nformado de los resultados del proceso (vía las herramientas, el portal o la mensajería) | + +## Definición de su necesidad + +| Actividad | Rol del Cliente | Rol de Cloud Temple | +|------------------------------------------------------------------------------------------------|-----------------|---------------------| +| Definir la arquitectura global de su plataforma Cloud Temple | **RA** | **CI** | +| Definir el número de tenants y el número de zonas de disponibilidad para cada tenant | **RA** | **CI** | +| Definir su estrategia global de recuperación o continuidad del negocio | **RA** | **CI** | +| Dimensionar correctamente su plataforma Cloud Temple (cálculo, almacenamiento, red, copia de seguridad,...) | **RA** | **CI** | +| Suscribirse a los servicios con la información necesaria | **RA** | **I** | + +## Implementación inicial de sus tenants en Cloud Temple + +| Actividad | Rol del Cliente | Rol de Cloud Temple | +|--------------------------------------------------------------------------------------------------------------|-----------------|---------------------| +| Garantizar la implementación de los **datacenters físicos** | | **RA** | +| Garantizar la implementación de las infraestructuras de **cálculo** | **I** | **RA** | +| Garantizar la implementación de las infraestructuras de **almacenamiento** | **I** | **RA** | +| Garantizar la implementación de la conectividad a la **red backbone(1)** | **I** | **RA** | +| Adquirir y mantener las licencias de software esenciales para el funcionamiento de la plataforma Cloud Temple | | **RA** | +| Implementar la configuración base de sus tenants de Cloud Temple | **CI** | **RA** | +| Implementar la configuración inicial para el servicio de copia de seguridad | **CI** | **RA** | +| *Si están suscritos:* implementar la configuración de red inicial para los servicios de Internet y Firewall | **CI** | **RA** | +| Ofrecer la asistencia necesaria para la puesta en marcha de sus entornos Cloud Temple | **I** | **RA** | +| Realizar los ajustes de configuración finales del servicio después de su entrega | **RA** | **C** | +| Configurar un repositorio de autenticación externa para la consola Cloud Temple | **RA** | **C** | +| Crear los usuarios de cada tenant en la consola Cloud Temple y asignar los permisos | **RA** | | +| Validar la conformidad de la plataforma entregada con el marco de referencia SecNumCloud | **I** | **RA** | +| Validar la conformidad de la plataforma entregada con las especificaciones requeridas | **RA** | **CI** | + +*(1) La red backbone constituye la infraestructura central de Cloud Temple, ofreciendo una columna vertebral sobre la que se sustentan las redes específicas de los clientes, las cuales están integradas y gestionadas por esta infraestructura principal.* + +## Integrar su sistema de información en sus entornos Cloud Temple + +| Actividad | Rol del Cliente | Rol de Cloud Temple | +|-------------------------------------------------------------------------------------------------------------------------------|-----------------|---------------------| +| Crear, instalar y actualizar sus máquinas virtuales | **RA** | | +| Instalar y configurar software y middlewares en sus máquinas virtuales | **RA** | | +| Comprar y poseer las licencias y derechos de uso para los sistemas operativos de sus máquinas virtuales | **RA** | | +| Configurar la red para cada una de sus máquinas virtuales | **RA** | | +| Asegurarse de que cada máquina virtual esté asociada a un plan de copia de seguridad coherente | **RA** | **C** | +| Asegurarse de que cada máquina virtual esté asociada a un plan de recuperación ante desastres o de continuidad del negocio coherente | **RA** | **C** | +| Implementar una estrategia de protección antivirus en sus máquinas virtuales | **RA** | | +| Implementar una solución de telemetría y supervisión en sus máquinas virtuales | **RA** | | +| Definir la política de TAG de sus máquinas virtuales | **RA** | | + +## Operaciones recurrentes + +### Gestión de accesos e identidades + +| Actividad | Rol Cliente | Rol Cloud Temple | |--------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer l'accessibilité du service Console Cloud Temple et de l'API associée | | **RA** | -| Assurer l'accessibilité du système d'information déployé sur vos machines virtuelles | **RA** | | -| Gérer les habilitations physiques et logiques des équipes Cloud Temple aux infrastructures SecNumCloud. | | **RA** | -| Administrer les accès et la politique de sécurité associée liés à l'interface de la console Cloud Temple et à son API | **RA** | | -| Administrer les accès et la politique de sécurité associée au système d'information hébergé au sein de vos tenants Cloud Temple | **RA** | | - -### maintien en condition opérationnelle et en condition de sécurité - -Les activités visant à maintenir en condition opérationnelle et sécuritaire pour les infrastructures et services -proposés par Cloud Temple, dans le cadre de son offre IaaS, sont réalisées dans l'objectif de conformité à la qualification SecNumCloud. - -| Activité | Rôle Client | Rôle Cloud Temple | -|-------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer le maintien en condition opérationnelle des infrastructures **datacenters physiques** | **I** | **RA** | -| Assurer le maintien en condition de sécurité des infrastructures **datacenters physiques** | **I** | **RA** | -| Assurer le maintien en condition opérationnelle des infrastructures **calcul** | **I** | **RA** | -| Assurer le maintien en condition de sécurité des infrastructures **calcul (2)** | **RA** | **CI** | -| Assurer le maintien en condition opérationnelle des infrastructures **stockage** | **I** | **RA** | -| Assurer le maintien en condition de sécurité des infrastructures **stockage** | **I** | **RA** | -| Assurer le maintien en condition opérationnelle des infrastructures **réseaux backbone** | **I** | **RA** | -| Assurer le maintien en condition de sécurité des infrastructures **réseaux backbone** | **I** | **RA** | -| Assurer le maintien en condition opérationnelle des machines virtuelles déployées dans les tenants client **(3)** | **RA** | | -| Assurer le maintien en condition de sécurité des machines virtuelles déployées dans les tenants client **(3)** | **RA** | | -| Assurer le maintien en condition opérationnelle des middleswares déployées dans les tenants client | **RA** | | -| Assurer le maintien en condition de sécurité des middleswares déployées dans les tenants client | **RA** | | - -*(2) Cloud Temple fournit régulièrement les versions les plus récentes du système d'exploitation pour vos hyperviseurs. -Néanmoins, étant donné que Cloud Temple n'est pas informé des spécificités de vos environnements de production et des exigences -liées à vos charges de travail, **la décision de procéder à la mise à jour du système d'exploitation de vos hyperviseurs, -entraînant ainsi un redémarrage, vous revient**. Cette opération peut être réalisée à travers la console Cloud Temple ou via l'API. -Des services professionnels sont disponibles si vous souhaitez que Cloud Temple prenne en charge certaines opérations.* - -*(3) Cloud Temple propose des packs de licences pour pare-feu (Fortinet, Stormshield) et répartiteurs de charge (HAProxy), et -travaille en collaboration avec vos équipes pour la configuration initiale lors de la phase de mise en œuvre. Toutefois, -la responsabilité du maintien en condition opérationnelle et sécuritaire repose sur vous durant la phase d'exploitation -courante. Des services professionnels sont disponibles si vous souhaitez que Cloud Temple prenne en charge certaines opérations.* - -### Gestion des changements, des incidents, des problèmes et des capacités - -| Activité | Rôle Client | Rôle Cloud Temple | -|-----------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Gérer les incidents sur les infrastructures **datacenters physiques** | **I** | **RA** | -| Gérer les problèmes sur les infrastructures **datacenters physiques** | | **RA** | -| Gérer les capacités sur les infrastructures **datacenters physiques** | | **RA** | -| Gérer les incidents sur les infrastructures **calcul** | **I** | **RA** | -| Gérer les problèmes sur les infrastructures **calcul** | | **RA** | -| Gérer les capacités sur les infrastructures **calcul** | **RA** | **CI** | -| Gérer les incidents sur les infrastructures **stockage** | **I** | **RA** | -| Gérer les problèmes sur les infrastructures **stockage** | | **RA** | -| Gérer les capacités sur les infrastructures **stockage** | **RA** | **CI** | -| Gérer les incidents sur les infrastructures **réseau backbone** | **I** | **RA** | -| Gérer les problèmes sur les infrastructures **réseau backbone** | | **RA** | -| Gérer les capacités sur les infrastructures **réseau backbone** | | **RA** | -| Mettre en place une nouvelle machine virtuelle ou créer un nouvel environnement applicatif au sein d'un tenant client | **RA** | | -| Modifier la configuration des machines virtuelles déployées | **RA** | | -| Supprimer une machine virtuelle déployée | **RA** | | -| Prendre la décision d'ajouter, de modifier ou de retirer des ressources sur la plateforme Cloud Temple | **RA** | **CI** | -| Exécuter la décision de modification des ressources sur la plateforme Cloud Temple | **I** | **RA** | -| Appliquer les tags aux machines virtuelles conformément à la politique définie | **RA** | | - -### Gestion de la performance - -| Activité | Rôle Client | Rôle Cloud Temple | -|-------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer la surveillance du bon fonctionnement et de la fiabilité de tous les équipements impliqués dans la prestation du service qualifié SecNumCloud | **I** | **RA** | -| Assurer le suivi de la performance des ressources physiques de calcul, stockage et réseau mises à disposition de vos tenants **(4)** | **RI** | **A** | -| Superviser les performances des machines virtuelles soutenant vos environnements | **RA** | **I** | - -*(4) La plateforme Cloud Temple adopte une philosophie centrée sur **la fourniture d'infrastructures dédiées** pour les besoins de **calcul** (avec des lames physiques), de **stockage** (via des LUNs dédiées sur les SANs) -et de **réseau** (incluant des pare-feu et des répartiteurs de charge). Ces ressources dédiées sont mises à la disposition du client, dont l'utilisation -et la charge résultante dépendent directement de l'usage qu'il en fait. Il incombe donc au client de mettre en place et de gérer les systèmes de supervision -et de métrologie nécessaires pour assurer le suivi du fonctionnement optimal de son système d'information.* - -### Gestion de la sauvegarde et de la reprise d'activité sur la sauvegarde intégrée - -| Activité | Rôle Client | Rôle Cloud Temple | -|-------------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer le maintien en condition opérationnelle sur les infrastructures de **sauvegarde** intégrées à la plateforme Cloud Temple **(5)** | | **RA** | -| Assurer le maintien en condition de sécurité des infrastructures de **sauvegarde** intégrées à la plateforme Cloud Temple | **I** | **RA** | -| Gérer les incidents sur les infrastructures **sauvegarde** intégrées à la plateforme Cloud Temple | **I** | **RA** | -| Gérer les problèmes sur les infrastructures **sauvegarde** intégrées à la plateforme Cloud Temple | | **RA** | -| Gérer les capacités sur les infrastructures **sauvegarde** intégrées à la plateforme Cloud Temple | **AI** | **RC** | -| Assurer le maintien en condition opérationnelle sur la solution de sauvegarde choisie au sein de ses tenants par le client **(6)** | **RA** | | -| Assurer le maintien en condition de sécurité sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les incidents sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les problèmes sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les capacités sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | **CI** | -| Gérer le cycle des vies des politiques de sauvegarde | **RA** | | -| S'assurer que les politiques de sauvegarde sont cohérentes avec le cycle de vie de la donnée | **RA** | | -| S'assurer que les plans de continuité d'activité ou de reprise d'activité sont cohérents avec le cycle de vie de la donnée | **RA** | | -| Effectuer des tests périodiques pour évaluer l'efficacité de la stratégie de sauvegarde | **RA** | | -| Effectuer des tests périodiques pour évaluer l'efficacité de la stratégie de reprise d'activité ou de continuité d'activité | **RA** | **CI** | - -*(5) Au 1er janvier 2024, la solution de sauvegarde intégrée à la plateforme Cloud Temple est IBM Spectrum Protect Plus. -Cette solution est entièrement automatisée et peut être gérée via la console Cloud Temple ou l'API Cloud Temple.* - -### Gestion de la sauvegarde et de la reprise d'activité pour les plateformes tierces au sein d'un tenant client - -| Activité | Rôle Client | Rôle Cloud Temple | +| Garantizar la accesibilidad del servicio Console Cloud Temple y de la API asociada | | **RA** | +| Garantizar la accesibilidad del sistema de información desplegado en sus máquinas virtuales | **RA** | | +| Gestionar las habilitaciones físicas y lógicas de los equipos de Cloud Temple en las infraestructuras SecNumCloud. | | **RA** | +| Administrar los accesos y la política de seguridad asociada a la interfaz de la consola Cloud Temple y a su API | **RA** | | +| Administrar los accesos y la política de seguridad asociada al sistema de información alojado en sus tenants de Cloud Temple | **RA** | | + +### Mantenimiento en condiciones operativas y de seguridad + +Las actividades destinadas a mantener en condiciones operativas y de seguridad las infraestructuras y servicios +ofrecidos por Cloud Temple, en el marco de su oferta IaaS, se realizan con el objetivo de cumplir con la certificación SecNumCloud. + +| Actividad | Rol Cliente | Rol Cloud Temple | +|-------------------------------------------------------------------------------------------------------------------|-------------|------------------| +| Garantizar el mantenimiento en condiciones operativas de las infraestructuras **centros de datos físicos** | **I** | **RA** | +| Garantizar el mantenimiento en condiciones de seguridad de las infraestructuras **centros de datos físicos** | **I** | **RA** | +| Garantizar el mantenimiento en condiciones operativas de las infraestructuras **cómputo** | **I** | **RA** | +| Garantizar el mantenimiento en condiciones de seguridad de las infraestructuras **cómputo (2)** | **RA** | **CI** | +| Garantizar el mantenimiento en condiciones operativas de las infraestructuras **almacenamiento** | **I** | **RA** | +| Garantizar el mantenimiento en condiciones de seguridad de las infraestructuras **almacenamiento** | **I** | **RA** | +| Garantizar el mantenimiento en condiciones operativas de las infraestructuras **redes backbone** | **I** | **RA** | +| Garantizar el mantenimiento en condiciones de seguridad de las infraestructuras **redes backbone** | **I** | **RA** | +| Garantizar el mantenimiento en condiciones operativas de las máquinas virtuales desplegadas en los tenants del cliente **(3)** | **RA** | | +| Garantizar el mantenimiento en condiciones de seguridad de las máquinas virtuales desplegadas en los tenants del cliente **(3)** | **RA** | | +| Garantizar el mantenimiento en condiciones operativas de los middleware desplegados en los tenants del cliente | **RA** | | +| Garantizar el mantenimiento en condiciones de seguridad de los middleware desplegados en los tenants del cliente | **RA** | | + +*(2) Cloud Temple proporciona regularmente las versiones más recientes del sistema operativo para sus hipervisores. +No obstante, dado que Cloud Temple no está informado de las especificidades de sus entornos de producción y de los requisitos +relacionados con sus cargas de trabajo, **la decisión de proceder a la actualización del sistema operativo de sus hipervisores, +lo que implica un reinicio, le corresponde a usted**. Esta operación puede realizarse a través de la consola Cloud Temple o mediante la API. +Hay servicios profesionales disponibles si desea que Cloud Temple gestione ciertas operaciones.* + +*(3) Cloud Temple ofrece packs de licencias para firewalls (Fortinet, Stormshield) y equilibradores de carga (HAProxy), y +trabaja en colaboración con sus equipos para la configuración inicial durante la fase de implementación. No obstante, +la responsabilidad del mantenimiento en condiciones operativas y de seguridad recae en usted durante la fase de operación +continua. Hay servicios profesionales disponibles si desea que Cloud Temple gestione ciertas operaciones.* + +### Gestión de cambios, incidentes, problemas y capacidades + +| Actividad | Rol del Cliente | Rol Cloud Temple | +|-----------------------------------------------------------------------------------------------------------------------|-----------------|------------------| +| Gestionar incidentes en las infraestructuras de **centros de datos físicos** | **I** | **RA** | +| Gestionar problemas en las infraestructuras de **centros de datos físicos** | | **RA** | +| Gestionar capacidades en las infraestructuras de **centros de datos físicos** | | **RA** | +| Gestionar incidentes en las infraestructuras de **cálculo** | **I** | **RA** | +| Gestionar problemas en las infraestructuras de **cálculo** | | **RA** | +| Gestionar capacidades en las infraestructuras de **cálculo** | **RA** | **CI** | +| Gestionar incidentes en las infraestructuras de **almacenamiento** | **I** | **RA** | +| Gestionar problemas en las infraestructuras de **almacenamiento** | | **RA** | +| Gestionar capacidades en las infraestructuras de **almacenamiento** | **RA** | **CI** | +| Gestionar incidentes en las infraestructuras de **red troncal** | **I** | **RA** | +| Gestionar problemas en las infraestructuras de **red troncal** | | **RA** | +| Gestionar capacidades en las infraestructuras de **red troncal** | | **RA** | +| Implementar una nueva máquina virtual o crear un nuevo entorno de aplicación dentro de un tenant cliente | **RA** | | +| Modificar la configuración de las máquinas virtuales implementadas | **RA** | | +| Eliminar una máquina virtual implementada | **RA** | | +| Tomar la decisión de agregar, modificar o retirar recursos en la plataforma Cloud Temple | **RA** | **CI** | +| Ejecutar la decisión de modificación de recursos en la plataforma Cloud Temple | **I** | **RA** | +| Aplicar etiquetas a las máquinas virtuales conforme a la política definida | **RA** | | + +### Gestión del rendimiento + +| Actividad | Rol Cliente | Rol Cloud Temple | +|-------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|------------------| +| Garantizar la supervisión del correcto funcionamiento y la fiabilidad de todos los equipos implicados en la prestación del servicio cualificado SecNumCloud | **I** | **RA** | +| Garantizar el seguimiento del rendimiento de los recursos físicos de cálculo, almacenamiento y red puestos a disposición de sus tenants **(4)** | **RI** | **A** | +| Supervisar el rendimiento de las máquinas virtuales que soportan sus entornos | **RA** | **I** | + +*(4) La plataforma Cloud Temple adopta una filosofía centrada en **la provisión de infraestructuras dedicadas** para las necesidades de **cálculo** (con laminas físicas), de **almacenamiento** (vía LUNs dedicadas en las SANs) +y de **red** (incluyendo cortafuegos y balanceadores de carga). Estos recursos dedicados se ponen a disposición del cliente, cuyo uso +y la carga resultante dependen directamente del uso que haga de ellos. Corresponde por tanto al cliente implementar y gestionar los sistemas de supervisión +y de metrología necesarios para garantizar el seguimiento del funcionamiento óptimo de su sistema de información.* + +### Gestión de la copia de seguridad y la recuperación ante desastres en la copia de seguridad integrada + +| Actividad | Rol del Cliente | Rol Cloud Temple | +|-------------------------------------------------------------------------------------------------------------------------------------------|-----------------|------------------| +| Asegurar el mantenimiento operativo de las infraestructuras de **copia de seguridad** integradas en la plataforma Cloud Temple **(5)** | | **RA** | +| Asegurar el mantenimiento de seguridad de las infraestructuras de **copia de seguridad** integradas en la plataforma Cloud Temple | **I** | **RA** | +| Gestionar los incidentes en las infraestructuras de **copia de seguridad** integradas en la plataforma Cloud Temple | **I** | **RA** | +| Gestionar los problemas en las infraestructuras de **copia de seguridad** integradas en la plataforma Cloud Temple | | **RA** | +| Gestionar la capacidad en las infraestructuras de **copia de seguridad** integradas en la plataforma Cloud Temple | **AI** | **RC** | +| Asegurar el mantenimiento operativo de la solución de copia de seguridad elegida por el cliente dentro de sus tenants **(6)** | **RA** | | +| Asegurar el mantenimiento de seguridad de la solución de copia de seguridad elegida por el cliente dentro de sus tenants | **RA** | | +| Gestionar los incidentes en la solución de copia de seguridad elegida por el cliente dentro de sus tenants | **RA** | | +| Gestionar los problemas en la solución de copia de seguridad elegida por el cliente dentro de sus tenants | **RA** | | +| Gestionar la capacidad en la solución de copia de seguridad elegida por el cliente dentro de sus tenants | **RA** | **CI** | +| Gestionar el ciclo de vida de las políticas de copia de seguridad | **RA** | | +| Asegurar que las políticas de copia de seguridad sean coherentes con el ciclo de vida de los datos | **RA** | | +| Asegurar que los planes de continuidad o recuperación ante desastres sean coherentes con el ciclo de vida de los datos | **RA** | | +| Realizar pruebas periódicas para evaluar la eficacia de la estrategia de copia de seguridad | **RA** | | +| Realizar pruebas periódicas para evaluar la eficacia de la estrategia de recuperación ante desastres o continuidad de actividad | **RA** | **CI** | + +*(5) Al 1 de enero de 2024, la solución de copia de seguridad integrada en la plataforma Cloud Temple es IBM Spectrum Protect Plus. +Esta solución está completamente automatizada y puede gestionarse a través de la consola Cloud Temple o la API Cloud Temple.* + +### Gestión de la copia de seguridad y la recuperación ante desastres para plataformas de terceros dentro de un tenant de cliente + +| Actividad | Rol Cliente | Rol Cloud Temple | |-------------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer le maintien en condition opérationnelle sur la solution de sauvegarde choisie au sein de ses tenants par le client **(6)** | **RA** | | -| Assurer le maintien en condition de sécurité sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les incidents sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les problèmes sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les capacités sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | **CI** | -| Gérer le cycle des vies des politiques de sauvegarde | **RA** | | -| S'assurer que les politiques de sauvegarde sont cohérentes avec le cycle de vie de la donnée | **RA** | | -| S'assurer que les plans de continuité d'activité ou de reprise d'activité sont cohérents avec le cycle de vie de la donnée | **RA** | | -| Effectuer des tests périodiques pour évaluer l'efficacité de la stratégie de sauvegarde | **RA** | | -| Effectuer des tests périodiques pour évaluer l'efficacité de la stratégie de reprise d'activité ou de continuité d'activité | **RA** | **CI** | - -*(6) Ceci concerne toute solution de sauvegarde supplémentaire mise en place dans les environnements du client et gérée par celui-ci. -Cloud Temple propose des services professionnels pour ceux qui souhaitent déléguer certaines opérations à Cloud Temple.* - -### Gestion de la documentation et du contrat - -| Activité | Rôle Client | Rôle Cloud Temple | +| Garantizar el mantenimiento operativo de la solución de copia de seguridad elegida dentro de sus tenants por el cliente **(6)** | **RA** | | +| Garantizar el mantenimiento de seguridad de la solución de copia de seguridad elegida dentro de sus tenants por el cliente | **RA** | | +| Gestionar los incidentes en la solución de copia de seguridad elegida dentro de sus tenants por el cliente | **RA** | | +| Gestionar los problemas en la solución de copia de seguridad elegida dentro de sus tenants por el cliente | **RA** | | +| Gestionar la capacidad de la solución de copia de seguridad elegida dentro de sus tenants por el cliente | **RA** | **CI** | +| Gestionar el ciclo de vida de las políticas de copia de seguridad | **RA** | | +| Asegurarse de que las políticas de copia de seguridad sean coherentes con el ciclo de vida de los datos | **RA** | | +| Asegurarse de que los planes de continuidad de negocio o de recuperación ante desastres sean coherentes con el ciclo de vida de los datos | **RA** | | +| Realizar pruebas periódicas para evaluar la eficacia de la estrategia de copia de seguridad | **RA** | | +| Realizar pruebas periódicas para evaluar la eficacia de la estrategia de recuperación ante desastres o de continuidad de negocio | **RA** | **CI** | + +*(6) Esto se refiere a cualquier solución de copia de seguridad adicional implementada en los entornos del cliente y gestionada por este. +Cloud Temple ofrece servicios profesionales para aquellos que deseen delegar ciertas operaciones en Cloud Temple.* + +### Gestión de la documentación y del contrato + +| Actividad | Rol del Cliente | Rol de Cloud Temple | |-----------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer la gestion commerciale et contractuelle du client, incluant l'établissement de devis, le traitement des commandes et la gestion de la facturation | **I** | **RA** | -| Assurer le suivi contractuel de la prestation, incluant la validation des devis, le suivi des livraisons et la surveillance de la facturation | **RA** | **I** | -| Assurer la maintenance et la disponibilité de l'inventaire des ressources fournies par Cloud Temple relative à l'offre SecNumCloud | **I** | **RA** | -| Assurer la maintenance et la mise à disposition de la documentation technique relative à l'offre SecNumCloud | **I** | **RA** | -| Assurer le suivi du cycle de vie des machines virtuelles déployées dans vos environnements Cloud Temple via votre CMDB (Configuration Management Database) | **RA** | | -| Maintenir à jour la politique d'accès à l'interface de la console Cloud Temple ou à l'API Cloud Temple | **RA** | | +| Garantizar la gestión comercial y contractual del cliente, incluyendo la elaboración de presupuestos, el procesamiento de pedidos y la gestión de la facturación | **I** | **RA** | +| Garantizar el seguimiento contractual del servicio, incluyendo la validación de presupuestos, el seguimiento de las entregas y el control de la facturación | **RA** | **I** | +| Garantizar el mantenimiento y la disponibilidad del inventario de recursos proporcionados por Cloud Temple relacionados con la oferta SecNumCloud | **I** | **RA** | +| Garantizar el mantenimiento y la disponibilidad de la documentación técnica relacionada con la oferta SecNumCloud | **I** | **RA** | +| Garantizar el seguimiento del ciclo de vida de las máquinas virtuales desplegadas en sus entornos Cloud Temple a través de su CMDB (Base de Datos de Gestión de Configuración) | **RA** | | +| Mantener actualizada la política de acceso a la interfaz de la consola Cloud Temple o a la API de Cloud Temple | **RA** | | -### Gestion des journaux +### Gestión de registros -| Activité | Rôle Client | Rôle Cloud Temple | +| Actividad | Rol del Cliente | Rol de Cloud Temple | |--------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Conserver et mettre à disposition les journaux de la plateforme IaaS Cloud Temple **(7)** | | **RA** | -| Conserver et mettre à disposition les journaux du système d'information hébergé au sein de vos tenants Cloud Temple | **RA** | | - -*(7) Au premier janvier 2024, la durée de rétention des journaux de la plateforme est d'une année.* - -## Connectivité au réseau client (mpls, fibre dédiée, ipsec, ...) - -| Activité | Rôle Client | Rôle Cloud Temple | -|------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Souscrire à une connectivité réseau opérateur pour accéder à un datacenter physique Cloud Temple (8) | **RA** | **CI** | -| Gérer le plan d'adressage IP | **RA** | **I** | -| Gérer les incidents sur les liens réseaux opérateurs client | **RA** | | -| Gérer les problèmes sur les liens réseaux opérateurs client | **RA** | **CI** | -| Gérer les capacités sur les liens réseaux opérateurs client | **RA** | **CI** | - -*(8) Cloud Temple assume la responsabilité du réseau concernant son infrastructure backbone, ses points de collecte ainsi que -les points d'interconnexion datacenter, garantissant ainsi la connectivité entre ces points et son réseau backbone. -Dans l'offre d'hébergement en baie physique, Cloud Temple assume la responsabilité à partir de l'équipement situé en haut du rack, communément appelé "top of rack".* - -## Réversibilité - -| Activité | Rôle Client | Rôle Cloud Temple | -|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Planifier le projet de réversibilité et choisir les infrastructures cibles | **RA** | **I** | -| Mettre en oeuvre les opérations de transition, qu'elles impliquent une extraction manuelle, l'utilisation d'API ou toute autre méthode tierce compatible avec la plateforme Cloud Temple. | **RA** | **I** | -| Transférer les données tout en contrôlant les répercussions de la migration sur la qualité du service fourni par le système d'information du client. | **RA** | | -| Procéder au démantèlement des configurations du Cloud Privé et des options associées au client, à la suite de la résiliation du contrat. | **I** | **RA** | -| Réaliser l'effacement sécurisé des données sur les supports de stockage et fournir une attestation | **I** | **RA** | +| Conservar y poner a disposición los registros de la plataforma IaaS Cloud Temple **(7)** | | **RA** | +| Conservar y poner a disposición los registros del sistema de información alojado en sus tenants de Cloud Temple | **RA** | | + +*(7) Al 1 de enero de 2024, la duración de retención de los registros de la plataforma es de un año.* + +## Conectividad a la red del cliente (MPLS, fibra dedicada, IPsec, ...) + +| Actividad | Rol del Cliente | Rol de Cloud Temple | +|------------------------------------------------------------------------------------------------------|-----------------|---------------------| +| Contratar una conectividad de red de operador para acceder a un datacenter físico de Cloud Temple (8) | **RA** | **CI** | +| Gestionar el plan de direccionamiento IP | **RA** | **I** | +| Gestionar incidentes en los enlaces de red de operadores del cliente | **RA** | | +| Gestionar problemas en los enlaces de red de operadores del cliente | **RA** | **CI** | +| Gestionar la capacidad de los enlaces de red de operadores del cliente | **RA** | **CI** | + +*(8) Cloud Temple asume la responsabilidad de la red en lo que respecta a su infraestructura backbone, sus puntos de agregación, así como los puntos de interconexión del datacenter, garantizando así la conectividad entre estos puntos y su red backbone. En la oferta de alojamiento en rack físico, Cloud Temple asume la responsabilidad a partir del equipo ubicado en la parte superior del rack, comúnmente denominado "top of rack".* + +## Reversibilidad + +| Actividad | Rol del Cliente | Rol de Cloud Temple | +|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------|---------------------| +| Planificar el proyecto de reversibilidad y seleccionar las infraestructuras objetivo | **RA** | **I** | +| Implementar las operaciones de transición, ya sea que impliquen una extracción manual, el uso de API o cualquier otro método de terceros compatible con la plataforma Cloud Temple. | **RA** | **I** | +| Transferir los datos mientras se controlan los impactos de la migración en la calidad del servicio proporcionado por el sistema de información del cliente. | **RA** | | +| Proceder al desmantelamiento de las configuraciones de la Nube Privada y de las opciones asociadas al cliente, tras la finalización del contrato. | **I** | **RA** | +| Realizar la eliminación segura de los datos en los soportes de almacenamiento y proporcionar un certificado | **I** | **RA** | \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/contractual/iaas/raci_s3.md b/i18n/es/docusaurus-plugin-content-docs/current/contractual/iaas/raci_s3.md index 1db9a33f..f005d063 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/contractual/iaas/raci_s3.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/contractual/iaas/raci_s3.md @@ -1,74 +1,77 @@ --- -title: Matrice de responsabilité IaaS - Stockage Objet S3 +title: Matriz de responsabilidad IaaS - Almacenamiento de Objetos S3 +slug: /contractual/storage/raci +displayed_sidebar: docSidebar --- -Voici le RACI du partage de responsabilité entre le client et Cloud Temple pour l'usage de la plateforme de Stockage Objets S3 Cloud Temple. -## Définition des différents rôles +A continuación se presenta el RACI de la distribución de responsabilidades entre el cliente y Cloud Temple para el uso de la plataforma de Almacenamiento de Objetos S3 de Cloud Temple. -Nous rappelons ici les différents rôle du RACI : +## Definición de los diferentes roles -| Rôle | Description | +Aquí recordamos los distintos roles del RACI: + +| Rol | Descripción | |--------------|------------------------------------------| -| (R) Réalise | __R__éalise le processus | -| (A) Approuve | __A__pprouve la réalisation du processus | -| (C) Consulte | __C__onsulté pendant le processus | -| (I) Informé | __I__nformé des résultats du processus | +| (R) Ejecuta | __E__jecuta el proceso | +| (A) Aprueba | __A__prueba la ejecución del proceso | +| (C) Consulta | __C__onsultado durante el proceso | +| (I) Informado| __I__nformado de los resultados del proceso | -## Définir votre besoin +## Definir sus requisitos -| Activité | Rôle Client | Rôle Cloud Temple | +| Actividad | Rol del Cliente | Rol Cloud Temple | |----------------------------------------------------------------------------------|-------------|-------------------| -| Valider que le produit Stockage Objet S3 est conforme au besoin de l'application | __RA__ | __CI__ | -| Souscrire au service avec les informations nécessaires | __RA__ | __I__ | - -## Mettre en oeuvre le service - -| Activité | Rôle Client | Rôle Cloud Temple | -|------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer le maintien en condition opérationnelle de la plateforme Stockage Objet S3 | __I__ | __RA__ | -| Assurer le maintien en condition de sécurité de la plateforme Stockage Objet S3 | __I__ | __RA__ | -| Créer les objets | __RA__ | | -| Créer les clefs d'accès et affecter les droits associés | __RA__ | | - -## Opérations récurrentes - -| Activité | Rôle Client | Rôle Cloud Temple | -|------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer le maintien en condition opérationnelle de la plateforme Stockage Objet S3 | __I__ | __RA__ | -| Assurer le maintien en condition de sécurité de la plateforme Stockage Objet S3 | __I__ | __RA__ | -| Assurer l'accessibilité du service Stockage Objet S3 | __I__ | __RA__ | -| Conserver et mettre à disposition les journaux de la plateforme Stockage Objet S3 | | __RA__ | -| Superviser le bon fonctionnement de la plateforme Stockage Objet S3 | __I__ | __RA__ | -| Suivre le cycle de vie des objets | __RA__ | | -| Suivre le cycle de vie des droits sur les objets | __RA__ | | -| Gérer la sécurité logique des objets | __RA__ | | -| Gérer les incidents sur le service Stockage objets S3 | __I__ | __RA__ | -| Gérer les problèmes sur le service Stockage objets S3 | __I__ | __RA__ | -| Gérer la capacité sur le service Stockage objets S3 | __I__ | __RA__ | -| Gérer les évolutions sur le service Stockage objets S3 | __I__ | __RA__ | - -## Gestion du chiffrement - -| Activité | Rôle Client | Rôle Cloud Temple | -|------------------------------------------------------------------------------------------|-------------|-------------------| -| Gérer le chiffrement des données avant déploiement sur le service Stockage Objet S3 | __RA__ | | -| Gérer le chiffrement sur l'espace de stockage alloué par le service Stockage objet S3 | __A__ | __R__ | - -## Continuité d'activité - -| Activité | Rôle Client | Rôle Cloud Temple | -|-------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer la continuité d'activité du service de stockage objets S3 | __I__ | __RA__ | -| Assurer la sauvegarde des données | __RA__ | | -| Réaliser des tests périodiques de restauration des données | __RA__ | | -| maintenir le plan de continuité d'activité et de reprise d'activité pour les applications | __RA__ | | - -## Réversibilité - -| Activité | Rôle Client | Rôle Cloud Temple | -|-------------------------------------------------------------------------------------------|-------------|-------------------| -| Mettre en oeuvre le projet de réversibilité (planification, outils, méthodes, cibles,...) | __RA__ | | -| Exporter les données depuis le service de Stockage Objets S3 | __RA__ | | -| Supprimer les données sur le service de Stockage Objets S3 | __RA__ | | -| Détruite les supports de stockage en fin de vie ou en erreur | | __RA__ | +| Validar que el producto de Almacenamiento de Objetos S3 cumple con los requisitos de la aplicación | __RA__ | __CI__ | +| Suscribirse al servicio con la información necesaria | __RA__ | __I__ | + +## Implementar el servicio + +| Actividad | Rol Cliente | Rol Cloud Temple | +|---------------------------------------------------------------------------------------|-------------|------------------| +| Garantizar el mantenimiento operativo de la plataforma de Almacenamiento de Objetos S3 | __I__ | __RA__ | +| Garantizar el mantenimiento de seguridad de la plataforma de Almacenamiento de Objetos S3 | __I__ | __RA__ | +| Crear los objetos | __RA__ | | +| Crear las claves de acceso y asignar los permisos asociados | __RA__ | | + +## Operaciones recurrentes + +| Actividad | Rol del Cliente | Rol de Cloud Temple | +|-------------------------------------------------------------------------------------|-----------------|---------------------| +| Garantizar el mantenimiento en condiciones operativas de la plataforma de Almacenamiento de Objetos S3 | __I__ | __RA__ | +| Garantizar el mantenimiento en condiciones de seguridad de la plataforma de Almacenamiento de Objetos S3 | __I__ | __RA__ | +| Garantizar la accesibilidad del servicio de Almacenamiento de Objetos S3 | __I__ | __RA__ | +| Conservar y poner a disposición los registros de la plataforma de Almacenamiento de Objetos S3 | | __RA__ | +| Supervisar el correcto funcionamiento de la plataforma de Almacenamiento de Objetos S3 | __I__ | __RA__ | +| Gestionar el ciclo de vida de los objetos | __RA__ | | +| Gestionar el ciclo de vida de los permisos sobre los objetos | __RA__ | | +| Gestionar la seguridad lógica de los objetos | __RA__ | | +| Gestionar los incidentes en el servicio de Almacenamiento de Objetos S3 | __I__ | __RA__ | +| Gestionar los problemas en el servicio de Almacenamiento de Objetos S3 | __I__ | __RA__ | +| Gestionar la capacidad del servicio de Almacenamiento de Objetos S3 | __I__ | __RA__ | +| Gestionar las actualizaciones en el servicio de Almacenamiento de Objetos S3 | __I__ | __RA__ | + +## Gestión del cifrado + +| Actividad | Rol del Cliente | Rol de Cloud Temple | +|------------------------------------------------------------------------------------------|-----------------|---------------------| +| Gestionar el cifrado de los datos antes del despliegue en el servicio de Almacenamiento de Objetos S3 | __RA__ | | +| Gestionar el cifrado en el espacio de almacenamiento asignado por el servicio de Almacenamiento de Objetos S3 | __A__ | __R__ | + +## Continuidad del negocio + +| Actividad | Rol del Cliente | Rol de Cloud Temple | +|-------------------------------------------------------------------------------------------|-----------------|---------------------| +| Garantizar la continuidad del negocio del servicio de almacenamiento de objetos S3 | __I__ | __RA__ | +| Garantizar la copia de seguridad de los datos | __RA__ | | +| Realizar pruebas periódicas de restauración de datos | __RA__ | | +| mantener el plan de continuidad del negocio y de recuperación ante desastres para las aplicaciones | __RA__ | | + +## Reversibilidad + +| Actividad | Rol Cliente | Rol Cloud Temple | +|--------------------------------------------------------------------------------------------|-------------|------------------| +| Implementar el proyecto de reversibilidad (planificación, herramientas, métodos, objetivos,...) | __RA__ | | +| Exportar los datos desde el servicio de Almacenamiento de Objetos S3 | __RA__ | | +| Eliminar los datos en el servicio de Almacenamiento de Objetos S3 | __RA__ | | +| Destruir los soportes de almacenamiento al final de su vida útil o en caso de error | | __RA__ | \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/contractual/kubernetes/raci.md b/i18n/es/docusaurus-plugin-content-docs/current/contractual/kubernetes/raci.md index 1170fa32..25e06888 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/contractual/kubernetes/raci.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/contractual/kubernetes/raci.md @@ -1,156 +1,157 @@ --- -title: Matriz de Responsabilidades (RACI) - Kubernetes Administrado +title: Matriz de Responsabilidades (RACI) - Kubernetes Gestionado +displayed_sidebar: docSidebar --- ## RACI -### Architecture & Infrastructure +### Arquitectura e Infraestructura -| **Activity** | **Client** | **Cloud Temple** | +| **Actividad** | **Cliente** | **Cloud Temple** | | ------------------------------------------------------------------- | ---------- | ---------------- | -| Define the overall architecture of the Kubernetes service | C | RA | -| Size the Kubernetes service (number of nodes, resources) | C | RA | -| Install the Kubernetes service with default configuration | I | RA | -| Configure the Kubernetes service | C | RA | -| Set up the base network for the Kubernetes service | I | RA | -| Deploy initial configuration for identities and access | C | RA | -| Define scaling and high availability strategy | C | RA | +| Definir la arquitectura global del servicio Kubernetes | C | RA | +| Dimensionar el servicio Kubernetes (número de nodos, recursos) | C | RA | +| Instalar el servicio Kubernetes con una configuración predeterminada | I | RA | +| Configuración del servicio Kubernetes | C | RA | +| Configurar la red base del servicio Kubernetes | I | RA | +| Despliegue de la configuración inicial de identidades y accesos | C | RA | +| Definir la estrategia de escalado y alta disponibilidad | C | RA | ### Gestión de proyectos y aplicaciones empresariales | **Actividad** | **Cliente** | **Cloud Temple** | -| -------------------------------------------------- | ---------- | ---------------- | -| Crear y gestionar los proyectos Kubernetes | RA | I* | -| Desplegar y gestionar las aplicaciones en Kubernetes | RA | I* | -| Configurar las pipelines CI/CD | RA | I* | -| Gestionar las imágenes de contenedores y los registros | RA | I* | +| -------------------------------------------------- | ----------- | ---------------- | +| Crear y gestionar proyectos de Kubernetes | RA | I* | +| Implementar y gestionar aplicaciones en Kubernetes | RA | I* | +| Configurar pipelines CI/CD | RA | I* | +| Gestionar imágenes de contenedores y registros | RA | I* | -*Estas responsabilidades pueden ser delegadas a Cloud Temple mediante un contrato de gestión complementario. +*Estas responsabilidades pueden delegarse en Cloud Temple mediante un contrato de gestión complementario. -### Monitoreo y rendimiento +### Supervisión y rendimiento -| **Actividad** | **Cliente** | **Cloud Temple** | -| ------------------------------------------------ | ----------- | ---------------- | -| Monitorear el rendimiento del servicio Kubernetes | I | RA | -| Monitorear el rendimiento de las aplicaciones | RA | | -| Gestionar las alertas relacionadas con el servicio Kubernetes | I | RA | -| Gestionar las alertas relacionadas con las aplicaciones | RA | | +| **Actividad** | **Cliente** | **Cloud Temple** | +| ----------------------------------------------- | ----------- | ---------------- | +| Supervisar el rendimiento del servicio Kubernetes | I | RA | +| Supervisar el rendimiento de las aplicaciones | RA | | +| Gestionar las alertas relacionadas con el servicio Kubernetes | I | RA | +| Gestionar las alertas relacionadas con las aplicaciones | RA | | -### Maintenance and Infrastructure Updates +### Mantenimiento y actualizaciones de infraestructuras -| **Activity** | **Client** | **Cloud Temple** | +| **Actividad** | **Cliente** | **Cloud Temple** | | ------------------------------------------------------ | ---------- | ---------------- | -| Update Kubernetes/OS service | C | RA | -| Apply security patches to Kubernetes | C | RA | -| Update deployed applications (operators*) | C | RA | +| Actualizar el servicio Kubernetes/OS | C | RA | +| Aplicar parches de seguridad a Kubernetes | C | RA | +| Actualizar las aplicaciones desplegadas (operadores*) | C | RA | -*Operator package included in Managed Kube - see sections: Managed Helm Packages +*Paquete de operador incluido en Managed Kube - ver capítulos: Paquetes Helm gestionados -### Security +### Seguridad -| **Activity** | **Client** | **Cloud Temple** | -| -------------------------------------------------------------------------- | ---------- | ---------------- | -| Manage security for the Kubernetes service | RA | RA | -| Configure and manage pod security policies | RA | I* | -| Manage SSL/TLS certificates for the Kubernetes service | C | RA | -| Manage SSL/TLS certificates for applications | RA | I* | -| Implement and manage Role-Based Access Control (RBAC) for base roles | C | R | -| Implement and manage Role-Based Access Control (RBAC) for client roles | RA | I* | +| **Actividad** | **Cliente** | **Cloud Temple** | +| -------------------------------------------------------------------------- | ----------- | ---------------- | +| Gestionar la seguridad del servicio Kubernetes | RA | RA | +| Configurar y gestionar las políticas de seguridad de los pods | RA | I* | +| Gestionar los certificados SSL/TLS para el servicio Kubernetes | C | RA | +| Gestionar los certificados SSL/TLS para las aplicaciones | RA | I* | +| Implementar y gestionar el control de acceso basado en roles básicos (RBAC) | C | R | +| Implementar y gestionar el control de acceso basado en roles del cliente (RBAC) | RA | I* | -*These responsibilities may be delegated to Cloud Temple via a complementary managed services contract. +*Estas responsabilidades pueden delegarse en Cloud Temple mediante un contrato de gestión complementario. -### Backup and Disaster Recovery +### Copia de seguridad y recuperación ante desastres -| **Activity** | **Client** | **Cloud Temple** | +| **Actividad** | **Cliente** | **Cloud Temple** | | -------------------------------------------------------------------------- | ---------- | ---------------- | -| Define the backup strategy for the Kubernetes service | I | RA | -| Implement and manage backups for the Kubernetes service | I | RA | -| Define the backup strategy for applications | RA* | I* | -| Implement and manage backups for applications | RA* | I* | -| Test disaster recovery procedures for the Kubernetes service | CI | RA | -| Test disaster recovery procedures for applications | RA* | CI* | +| Definir la estrategia de copia de seguridad para el servicio de Kubernetes | I | RA | +| Implementar y gestionar las copias de seguridad del servicio de Kubernetes | I | RA | +| Definir la estrategia de copia de seguridad para las aplicaciones | RA* | I* | +| Implementar y gestionar las copias de seguridad de las aplicaciones | RA* | I* | +| Probar los procedimientos de recuperación ante desastres para el servicio de Kubernetes | CI | RA | +| Probar los procedimientos de recuperación ante desastres para las aplicaciones | RA* | CI* | -*These responsibilities may be delegated to Cloud Temple via a complementary managed services contract. +*Estas responsabilidades pueden delegarse a Cloud Temple mediante un contrato de gestión externalizada complementario. ### Soporte y resolución de problemas | **Actividad** | **Cliente** | **Cloud Temple** | -| --------------------------------------------------------- | ---------- | ---------------- | -| Proporcionar soporte de nivel 1 para la infraestructura | I | RA | +| --------------------------------------------------------- | ----------- | ---------------- | +| Proporcionar soporte de nivel 1 para la infraestructura | I | RA | | Proporcionar soporte de nivel 2 y 3 para la infraestructura | I | RA | -| Resolver problemas relacionados con el servicio Kubernetes | C | RA | -| Resolver problemas relacionados con las aplicaciones | RA | I | +| Resolver problemas relacionados con el servicio de Kubernetes | C | RA | +| Resolver problemas relacionados con las aplicaciones | RA | I | ### Gestión de capacidades y evolución -| **Actividad** | **Cliente** | **Cloud Temple** | -| ------------------------------------------------------ | ----------- | ---------------- | -| Supervisar el uso de los recursos de Kubernetes | C | RA | -| Planificar la evolución de las capacidades del servicio | RA | C | -| Implementar los cambios de capacidad | I | RA | -| Gestionar la evolución de las aplicaciones y sus recursos | RA | I | +| **Actividad** | **Cliente** | **Cloud Temple** | +| ------------------------------------------------------ | ---------- | ---------------- | +| Supervisar el uso de recursos de Kubernetes | C | RA | +| Planificar la evolución de la capacidad del servicio | RA | C | +| Implementar los cambios de capacidad | I | RA | +| Gestionar la evolución de las aplicaciones y sus recursos | RA | I | ### Documentación y cumplimiento | **Actividad** | **Cliente** | **Cloud Temple** | | ------------------------------------------------ | ----------- | ---------------- | -| Mantener la documentación del servicio Kubernetes | I | RA | -| Mantener la documentación de las aplicaciones | RA | I | -| Asegurar el cumplimiento del servicio Kubernetes | I | RA | -| Asegurar el cumplimiento de las aplicaciones | RA | I | -| Realizar auditorías del servicio Kubernetes | I | RA | -| Realizar auditorías de las aplicaciones | RA | I | +| Mantener la documentación del servicio de Kubernetes | I | RA | +| Mantener la documentación de las aplicaciones | RA | I | +| Garantizar el cumplimiento del servicio de Kubernetes | I | RA | +| Garantizar el cumplimiento de las aplicaciones | RA | I | +| Realizar auditorías del servicio de Kubernetes | I | RA | +| Realizar auditorías de las aplicaciones | RA | I | -### Basic Kubernetes Operators/CRD Management +### Gestión de operadores/CRD de Kubernetes básicos -| **Activity** | **Client** | **Cloud Temple** | -| ----------------------------------------------------------- | ---------- | ---------------- | -| Provisioning of default Operators catalog | CI | RA | -| Updating Operators | CI | RA | -| Monitoring Operators status | CI | RA | -| Troubleshooting Operator-related issues | CI | RA | -| Managing Operator permissions | CI | RA | -| Managing Operator resources (addition/removal) | CI | RA | -| Backup of Operator resources data | CI | RA | -| Monitoring Operator resources | CI | RA | -| Restoration of Operator resources data | CI | RA | -| Security auditing of Operators | CI | RA | -| Operator support | CI | RA | -| License management for operators | CI | RA | -| Management of specific support plans for operators | CI | RA | - -*Operator package included in Managed Kube – see sections: Managed Helm Packages* - -### Management of Kubernetes applications/operators/CRDs (business) - -| **Activity** | **Client** | **Cloud Temple** | +| **Actividad** | **Cliente** | **Cloud Temple** | | ----------------------------------------------------------- | ---------- | ---------------- | -| Deployment of CRDs | RA* | I* | -| Updating operators | RA | I | -| Monitoring operator status | RA | I | -| Troubleshooting operator-related issues | RA | I | -| Managing operator permissions | RA | I | -| Managing operator resources (addition/removal) | RA | I | -| Backing up operator resource data | RA | I | -| Monitoring operator resources | RA | I | -| Restoring operator resource data | RA | I | -| Security auditing of operators | RA | I | -| Operator support | RA | I | -| License management for operators | RA | I | -| Management of specific support plans for operators | RA | I | - -*These responsibilities may be delegated to Cloud Temple via a complementary managed services contract. - -### Aplicación de soporte +| Puesta a disposición del catálogo de Operadores predeterminado | CI | RA | +| Actualización de Operadores | CI | RA | +| Supervisión del estado de los Operadores | CI | RA | +| Resolución de problemas relacionados con Operadores | CI | RA | +| Gestión de permisos de Operadores | CI | RA | +| Gestión de recursos de Operadores (adición/eliminación) | CI | RA | +| Copia de seguridad de los datos de los recursos de Operadores | CI | RA | +| Supervisión de recursos de Operadores | CI | RA | +| Restauración de los datos de los recursos de Operadores | CI | RA | +| Auditoría de seguridad de Operadores | CI | RA | +| Soporte de Operadores | CI | RA | +| Gestión de licencias de operadores | CI | RA | +| Gestión de planes de soporte específicos para operadores | CI | RA | + +*Paquete de operador incluido en Managed Kube - ver capítulos: Paquetes Helm gestionados + +### Gestión de aplicaciones/operadores/CRD de Kubernetes (negocio) + +| **Actividad** | **Cliente** | **Cloud Temple** | +| ----------------------------------------------------------- | ----------- | ---------------- | +| Despliegue de CRDs | RA* | I* | +| Actualización de Operadores | RA | I | +| Supervisión del estado de los Operadores | RA | I | +| Resolución de problemas relacionados con Operadores | RA | I | +| Gestión de permisos de Operadores | RA | I | +| Gestión de recursos de Operadores (adición/eliminación) | RA | I | +| Copia de seguridad de datos de recursos de Operadores | RA | I | +| Supervisión de recursos de Operadores | RA | I | +| Restauración de datos de recursos de Operadores | RA | I | +| Auditoría de seguridad de Operadores | RA | I | +| Soporte de Operadores | RA | I | +| Gestión de licencias en operadores | RA | I | +| Gestión de planes de soporte específicos para operadores | RA | I | + +*Estas responsabilidades pueden delegarse a Cloud Temple mediante un contrato de gestión complementario. + +### Soporte de aplicaciones | **Actividad** | **Cliente** | **Cloud Temple** | -| ------------------------------------------- | ---------- | ---------------- | -| Soporte aplicativo (prestación externa) | RA | I | +| ------------------------------------------- | ----------- | ---------------- | +| Soporte de aplicaciones (servicio externo) | RA | I | -El soporte aplicativo también puede proporcionarse dentro de una prestación complementaria. +El soporte de aplicaciones también puede proporcionarse en el marco de un servicio complementario. ### RACI (sintético) -- Cloud Temple: responsable y actor (RA) del núcleo Kubernetes, seguridad del clúster, copias de seguridad de infraestructura y supervisión. -- Cliente: responsable y actor (RA) de los proyectos aplicativos, operadores comerciales, pipelines CI/CD y copias de seguridad aplicativas. -- Zona "gris": adaptaciones y extensiones (IAM, operadores específicos, fortalecimiento de conformidad/seguuridad del clúster) – facturadas en modalidad proyecto. +- Cloud Temple : responsable y actor (RA) de la plataforma Kubernetes, seguridad del clúster, copia de seguridad de la infraestructura, supervisión. +- Cliente : responsable y actor (RA) de los proyectos de aplicaciones, operadores de negocio, pipelines CI/CD, copias de seguridad de aplicaciones. +- Zona "gris" : adaptaciones y extensiones (IAM, operadores específicos, endurecimiento del cumplimiento/seguridad del clúster) - facturadas en modo proyecto. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/contractual/llmaas/raci.md b/i18n/es/docusaurus-plugin-content-docs/current/contractual/llmaas/raci.md index dd89870c..c52010cb 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/contractual/llmaas/raci.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/contractual/llmaas/raci.md @@ -1,70 +1,72 @@ --- -title: Matrice de responsabilité - LLMaaS +title: Matriz de responsabilidades - LLMaaS +displayed_sidebar: docSidebar --- -Voici le RACI du partage de responsabilité entre le client et Cloud Temple pour l'usage de la plateforme LLM as a Service (LLMaaS). -## Définition des différents rôles +A continuación se presenta el RACI de la distribución de responsabilidades entre el cliente y Cloud Temple para el uso de la plataforma LLM as a Service (LLMaaS). -Nous rappelons ici les différents rôle du RACI : +## Definición de los diferentes roles -| Rôle | Description | +Aquí recordamos los diferentes roles del RACI : + +| Rol | Descripción | | ------------ | ---------------------------------------- | -| (R) Réalise | __R__éalise le processus | -| (A) Approuve | __A__pprouve la réalisation du processus | -| (C) Consulte | __C__onsulté pendant le processus | -| (I) Informé | __I__nformé des résultats du processus | +| (R) Realiza | __R__aliza el proceso | +| (A) Aprueba | __A__prueba la realización del proceso | +| (C) Consulta | __C__onsultado durante el proceso | +| (I) Informado| __I__nformado de los resultados del proceso | -## Définir votre besoin +## Definir su necesidad -| Activité | Rôle Client | Rôle Cloud Temple | +| Actividad | Rol del Cliente | Rol Cloud Temple | | --------------------------------------------------------------------- | ----------- | ----------------- | -| Valider que le service LLMaaS est conforme au besoin de l'application | __RA__ | __CI__ | -| Souscrire au service et sélectionner un tier de facturation | __RA__ | __I__ | +| Validar que el servicio LLMaaS cumple con los requisitos de la aplicación | __RA__ | __CI__ | +| Suscribirse al servicio y seleccionar un nivel de facturación | __RA__ | __I__ | -## Mettre en oeuvre le service +## Implementar el servicio -| Activité | Rôle Client | Rôle Cloud Temple | -| ---------------------------------------------------------------------------------- | ----------- | ----------------- | -| Assurer le maintien en condition opérationnelle de la plateforme LLMaaS (API, GPU) | __I__ | __RA__ | -| Assurer le maintien en condition de sécurité de la plateforme LLMaaS | __I__ | __RA__ | -| Gérer les clés d'accès API (création, rotation, révocation) | __RA__ | | -| Développer et maintenir le code de l'application cliente | __RA__ | | +| Actividad | Rol Cliente | Rol Cloud Temple | +| ---------------------------------------------------------------------------------- | ----------- | ---------------- | +| Garantizar el mantenimiento operativo de la plataforma LLMaaS (API, GPU) | __I__ | __RA__ | +| Garantizar el mantenimiento de seguridad de la plataforma LLMaaS | __I__ | __RA__ | +| Gestionar las claves de acceso API (creación, rotación, revocación) | __RA__ | | +| Desarrollar y mantener el código de la aplicación cliente | __RA__ | | -## Opérations récurrentes +## Operaciones recurrentes -| Activité | Rôle Client | Rôle Cloud Temple | +| Actividad | Rol Cliente | Rol Cloud Temple | | ---------------------------------------------------------------- | ----------- | ----------------- | -| Assurer la disponibilité de l'API LLMaaS | __I__ | __RA__ | -| Superviser le bon fonctionnement de la plateforme et des modèles | __I__ | __RA__ | -| Gérer les incidents sur la plateforme LLMaaS | __I__ | __RA__ | -| Gérer les problèmes sur la plateforme LLMaaS | __I__ | __RA__ | -| Gérer la capacité de l'infrastructure GPU | __I__ | __RA__ | -| Gérer les évolutions des modèles (ajout, dépréciation) | __C, I__ | __RA__ | -| Suivre la consommation et la facturation | __RA__ | __I__ | - -## Gestion de la sécurité - -| Activité | Rôle Client | Rôle Cloud Temple | -| --------------------------------------------------------------------------- | ----------- | ----------------- | -| Sécuriser l'infrastructure physique et la plateforme LLMaaS | __I__ | __RA__ | -| Gérer les accès et les permissions des utilisateurs finaux de l'application | __RA__ | | -| Sécuriser les données et les prompts envoyés à l'API | __RA__ | __C__ | -| Assurer la confidentialité des données traitées par les modèles | __R__ | __A__ | -| Gérer la conformité de l'application finale (RGPD, etc.) | __RA__ | __I__ | - -## Continuité d'activité - -| Activité | Rôle Client | Rôle Cloud Temple | -| --------------------------------------------------------------------- | ----------- | ----------------- | -| Assurer la continuité d'activité de la plateforme LLMaaS | __I__ | __RA__ | -| Assurer la sauvegarde des données de l'application cliente | __RA__ | | -| Maintenir le plan de continuité d'activité pour l'application cliente | __RA__ | | - -## Réversibilité - -| Activité | Rôle Client | Rôle Cloud Temple | -| --------------------------------------------------------------------------- | ----------- | ----------------- | -| Mettre en oeuvre le projet de réversibilité (planification, outils, cibles) | __RA__ | __C__ | -| Exporter les données et le code de l'application cliente | __RA__ | | -| Supprimer les clés d'API et les accès au service | __RA__ | | +| Garantizar la disponibilidad de la API LLMaaS | __I__ | __RA__ | +| Supervisar el correcto funcionamiento de la plataforma y los modelos | __I__ | __RA__ | +| Gestionar los incidentes en la plataforma LLMaaS | __I__ | __RA__ | +| Gestionar los problemas en la plataforma LLMaaS | __I__ | __RA__ | +| Gestionar la capacidad de la infraestructura GPU | __I__ | __RA__ | +| Gestionar la evolución de los modelos (ajout, dépréciation) | __C, I__ | __RA__ | +| Seguir el consumo y la facturación | __RA__ | __I__ | + +## Gestión de la seguridad + +| Actividad | Rol del Cliente | Rol de Cloud Temple | +| --------------------------------------------------------------------------- | --------------- | ------------------- | +| Asegurar la infraestructura física y la plataforma LLMaaS | __I__ | __RA__ | +| Gestionar los accesos y permisos de los usuarios finales de la aplicación | __RA__ | | +| Asegurar los datos y los prompts enviados a la API | __RA__ | __C__ | +| Garantizar la confidencialidad de los datos procesados por los modelos | __R__ | __A__ | +| Gestionar el cumplimiento de la aplicación final (RGPD, etc.) | __RA__ | __I__ | + +## Continuidad del negocio + +| Actividad | Rol del Cliente | Rol de Cloud Temple | +| --------------------------------------------------------------------- | --------------- | ------------------- | +| Garantizar la continuidad del negocio de la plataforma LLMaaS | __I__ | __RA__ | +| Garantizar la copia de seguridad de los datos de la aplicación cliente | __RA__ | | +| Mantener el plan de continuidad del negocio para la aplicación cliente | __RA__ | | + +## Reversibilidad + +| Actividad | Rol Cliente | Rol Cloud Temple | +| ---------------------------------------------------------------------------- | ----------- | ---------------- | +| Implementar el proyecto de reversibilidad (planificación, herramientas, objetivos) | __RA__ | __C__ | +| Exportar los datos y el código de la aplicación cliente | __RA__ | | +| Eliminar las claves de API y los accesos al servicio | __RA__ | | \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/contractual/network/raci.md b/i18n/es/docusaurus-plugin-content-docs/current/contractual/network/raci.md index 26147c57..a3a3a82b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/contractual/network/raci.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/contractual/network/raci.md @@ -1,16 +1,17 @@ --- -title: Matrice de responsabilité Réseau +title: Matriz de responsabilidad de red +displayed_sidebar: docSidebar --- -### Connectivité réseau client +### Conectividad de red del cliente -| Activité | Rôle Client | Rôle Cloud Temple | +| Actividad | Rol Cliente | Rol Cloud Temple | |------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Souscrire à une connectivité réseau opérateur pour accéder à un datacenter physique Cloud Temple (6) | __RA__ | __CI__ | -| Gérer les incidents sur les liens réseaux opérateurs client | __RA__ | | -| Gérer les problèmes sur les liens réseaux opérateurs client | __RA__ | __I__ | -| Gérer les capacités sur les liens réseaux opérateurs client | __RA__ | __CI__ | +| Suscribirse a una conectividad de red de operador para acceder a un datacenter físico de Cloud Temple (6) | __RA__ | __CI__ | +| Gestionar incidentes en los enlaces de red de operadores del cliente | __RA__ | | +| Gestionar problemas en los enlaces de red de operadores del cliente | __RA__ | __I__ | +| Gestionar la capacidad de los enlaces de red de operadores del cliente | __RA__ | __CI__ | -*(6) Cloud Temple assume la responsabilité du réseau concernant son infrastructure backbone, ses points de collecte ainsi que -les points d'interconnexion datacenter, garantissant ainsi la connectivité entre ces points et son réseau backbone. -Dans l'offre d'hébergement en baie physique, Cloud Temple assume la responsabilité à partir de l'équipement situé en haut du rack, communément appelé "top of rack".* +*(6) Cloud Temple asume la responsabilidad de la red en lo que respecta a su infraestructura backbone, sus puntos de agregación así como +los puntos de interconexión del datacenter, garantizando así la conectividad entre estos puntos y su red backbone. +En la oferta de alojamiento en rack físico, Cloud Temple asume la responsabilidad a partir del equipo ubicado en la parte superior del rack, comúnmente denominado "top of rack".* \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/contractual/network/raci_vpc.md b/i18n/es/docusaurus-plugin-content-docs/current/contractual/network/raci_vpc.md index 49857e8e..d5ff7139 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/contractual/network/raci_vpc.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/contractual/network/raci_vpc.md @@ -1,188 +1,192 @@ --- -title: Modelo de Responsabilidad Compartida — VPC +title: Modelo de responsabilidad compartida — VPC slug: /contractual/network/raci-vpc --- -# Modelo de Responsabilidad Compartida — VPC (Virtual Private Cloud) +# Modelo de responsabilidad compartida — VPC (Virtual Private Cloud) -Este modelo **RACI** define la distribución de responsabilidades entre el cliente y Cloud Temple para el servicio **VPC (Virtual Private Cloud)**. +Este es el modelo **RACI** que define la distribución de responsabilidades entre el cliente y Cloud Temple para el uso del servicio **VPC (Virtual Private Cloud)**. -> **Particularidades del servicio VPC** -> El VPC es un servicio de red **completamente gestionado por Cloud Temple**, que ofrece una experiencia cloud-nativa: enrutamiento automático, alta disponibilidad integrada y gestión nativa de IPAM/DHCP. Cloud Temple garantiza el funcionamiento y la disponibilidad de la infraestructura de red subyacente (routers VPC, backbone inter-AZ, pasarela externa). El cliente es responsable del diseño, la configuración y la seguridad de su espacio de red: subredes, direccionamiento, políticas de filtrado e interconexiones. +> **Particularidad de la oferta VPC** +> El VPC es un servicio de red **totalmente gestionado por Cloud Temple**, que ofrece una experiencia cloud-native: enrutamiento automático, alta disponibilidad integrada y gestión nativa de IPAM/DHCP. Cloud Temple garantiza el funcionamiento y la disponibilidad de la infraestructura de red subyacente (enrutadores VPC, backbone inter-AZ, pasarela externa). El cliente es responsable del diseño, la configuración y la seguridad de su espacio de red: subredes, direccionamiento, políticas de filtrado e interconexiones. --- -## Definición de Roles +## Definición de roles -| Rol | Descripción | -|------------------|---------------------------------------------------------------------------------------------------| -| (R) Responsable | __R__ealiza el proceso | -| (A) Aprueba | __A__prueba la realización del proceso | -| (C) Consultado | __C__onsultado durante el proceso | -| (I) Informado | __I__nformado de los resultados del proceso | +| Rol | Descripción | +|--------------|---------------------------------------------------------------------------------------| +| (R) Ejecuta | __R__ealiza el proceso | +| (A) Aprueba | __A__prueba la realización del proceso | +| (C) Consulta | __C__onsultado durante el proceso | +| (I) Informado| __I__nformado de los resultados del proceso (vía herramientas, el portal o la mensajería) | --- -## Infraestructura de Red Física y Backbone +## Infraestructura de red física y backbone -| Actividad | Cliente | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|---------|--------------| -| Garantizar la implementación y el mantenimiento de la **infraestructura de red física** | | **RA** | -| Garantizar la conectividad **inter-datacenter / inter-AZ** del backbone de Cloud Temple | **I** | **RA** | -| Mantener la **red backbone** en condición operativa | **I** | **RA** | -| Mantener la **red backbone** en condición de seguridad | **I** | **RA** | -| Gestionar incidentes, problemas y capacidades de la red backbone | **I** | **RA** | -| Adquirir y mantener las **licencias** necesarias para el funcionamiento de la infraestructura de red | | **RA** | +Cloud Temple es totalmente responsable de la infraestructura física y del backbone de red sobre el que se basa el VPC. + +| Actividad | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|---------|--------------| +| Garantizar la implementación y el mantenimiento de las infraestructuras de **red física** (switches, routers de backbone) | | **RA** | +| Garantizar la conectividad **inter-datacenter / inter-AZ** del backbone de Cloud Temple | **I** | **RA** | +| Garantizar el mantenimiento en condiciones operativas del **backbone de red** de Cloud Temple | **I** | **RA** | +| Garantizar el mantenimiento en condiciones de seguridad del **backbone de red** de Cloud Temple | **I** | **RA** | +| Gestionar incidentes, problemas y capacidades del backbone de red | **I** | **RA** | +| Adquirir y mantener las licencias esenciales para el funcionamiento de la infraestructura de red | | **RA** | --- -## Infraestructura VPC (Router, Gateway e IPAM) +## Infraestructura VPC (router, gateway e IPAM) + +Cloud Temple garantiza el funcionamiento de los componentes centrales del VPC. El cliente configura su espacio de red dentro de esta infraestructura. -| Actividad | Cliente | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|---------|--------------| -| Mantener el **Router VPC** en condición operativa *(1)* | **I** | **RA** | -| Garantizar la **alta disponibilidad** del Router VPC | **I** | **RA** | -| Mantener la **Pasarela Externa (External Gateway)** en condición operativa *(1)* | **I** | **RA** | -| Garantizar la **alta disponibilidad** de la Pasarela Externa | **I** | **RA** | -| Garantizar el funcionamiento del servicio **IPAM y DHCP** subyacente | **I** | **RA** | -| Gestionar incidentes y problemas en los componentes principales del VPC | **I** | **RA** | -| Actualizar y mantener en seguridad los componentes principales del VPC | **I** | **RA** | +| Actividad | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|---------|--------------| +| Garantizar el mantenimiento en condiciones operativas del **router VPC** *(1)* | **I** | **RA** | +| Garantizar la **alta disponibilidad** del router VPC | **I** | **RA** | +| Garantizar el mantenimiento en condiciones operativas de la **Pasarela Externa (External Gateway)** *(1)* | **I** | **RA** | +| Garantizar la **alta disponibilidad** de la Pasarela Externa | **I** | **RA** | +| Garantizar el funcionamiento del servicio **IPAM & DHCP** subyacente | **I** | **RA** | +| Gestionar incidentes y problemas en los componentes centrales del VPC | **I** | **RA** | +| Actualizar y mantener en condiciones de seguridad los componentes centrales del VPC | **I** | **RA** | -*(1) El Router VPC y la Pasarela Externa son componentes completamente gestionados por Cloud Temple. Su disponibilidad está garantizada por Cloud Temple en el marco del SLA del servicio VPC.* +*(1) El router VPC y la Pasarela Externa son componentes totalmente gestionados por Cloud Temple. Su disponibilidad está garantizada por Cloud Temple en el marco del SLA del servicio VPC.* --- -## Aprovisionamiento y Configuración del VPC +## Provisionamiento y configuración del VPC + +El cliente es responsable de la creación y configuración de su VPC, así como de los recursos de red que lo componen. -| Actividad | Cliente | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|---------|--------------| -| Crear, modificar y eliminar un **VPC** | **RA** | **I** | -| Definir la arquitectura de red del VPC (número de subredes, topología) | **RA** | | -| Crear, modificar y eliminar **redes privadas (Private Networks / VLANs)** en el VPC | **RA** | **I** | -| Definir el **plan de direccionamiento IP** (rangos CIDR) de las redes privadas | **RA** | **I** | -| Configurar los **pools DHCP** (rangos dinámicos, DNS, pasarela) | **RA** | **C** | -| Activar y configurar la **Pasarela Externa** (acceso a Internet, NAT, DNAT) *(2)* | **RA** | **C** | -| Gestionar las **rutas estáticas** dentro del VPC | **RA** | | +| Actividad | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|---------|--------------| +| Crear, modificar y eliminar un **VPC** | **RA** | **I** | +| Definir la arquitectura de red del VPC (nombre de sous-réseaux, topologie) | **RA** | | +| Crear, modifier et supprimer des **réseaux privés (Private Networks / VLANs)** dans le VPC | **RA** | **I** | +| Definir el **plan de direccionamiento IP** (plages CIDR) des réseaux privés | **RA** | **I** | +| Configurar los **pools DHCP** (plages dynamiques, DNS, gateway) | **RA** | **C** | +| Activar y configurar la **Pasarela Externe** (accès Internet, NAT, DNAT) *(2)* | **RA** | **C** | +| Gestionar las **rutas estáticas** au sein du VPC | **RA** | | -*(2) La activación de la Pasarela Externa abre el acceso a Internet para el VPC. El cliente es responsable de las reglas de filtrado y el control del tráfico asociados.* +*(2) La activación de la Pasarela Externe habilita el acceso a Internet para el VPC. El cliente es responsable de las reglas de filtrado y del control de los flujos asociados.* --- -## IPs Públicas y Exposición a Internet +## IPs públicas y exposición a Internet -| Actividad | Cliente | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|---------|--------------| -| Asignar el **pool de IPs públicas** disponibles en la plataforma | **I** | **RA** | -| Solicitar y asociar **IPs públicas (IPs flotantes)** a su VPC | **RA** | **I** | -| Configurar reglas **NAT / DNAT** para la exposición de servicios | **RA** | | -| Gestionar el ciclo de vida de las IPs públicas (asociación, liberación, movimiento) | **RA** | **I** | -| Garantizar que los servicios expuestos en Internet cumplen las políticas de seguridad aplicables | **RA** | | +| Actividad | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|---------|--------------| +| Asignar el **pool de IPs públicas** disponibles en la plataforma | **I** | **RA** | +| Solicitar y asociar **IPs públicas (IPs flotantes)** a su VPC | **RA** | **I** | +| Configurar las reglas **NAT / DNAT** para la exposición de servicios | **RA** | | +| Gestionar el ciclo de vida de las IPs públicas (asociación, liberación, reasignación) | **RA** | **I** | +| Asegurarse de que los servicios expuestos en Internet cumplan con las políticas de seguridad aplicables | **RA** | | --- -## Seguridad de Red +## Seguridad de red -| Actividad | Cliente | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|---------|--------------| -| Garantizar el **aislamiento de red entre inquilinos** a nivel de plataforma *(3)* | | **RA** | -| Definir y configurar las **políticas de micro-segmentación** (grupos de seguridad) *(4)* | **RA** | | -| Implementar el **filtrado de tráfico** entrante/saliente (cortafuegos de aplicaciones, IDS/IPS) *(5)* | **RA** | | -| Gestionar los **certificados TLS** y la terminación SSL de los servicios expuestos | **RA** | | -| Realizar **pruebas de penetración** en los recursos alojados en el VPC *(6)* | **RA** | **C** | -| Supervisar **comportamientos anómalos** en los flujos de red del inquilino | **RA** | | +| Actividad | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|---------|--------------| +| Garantizar el **aislamiento de red entre inquilinos** a nivel de la plataforma *(3)* | | **RA** | +| Definir y configurar las **políticas de microsegmentación** (security groups) *(4)* | **RA** | | +| Implementar un **filtrado de flujos** entrantes/salientes (pare-feu applicatif, IDS/IPS) *(5)* | **RA** | | +| Gestionar los **certificados TLS** y la terminación SSL de los servicios expuestos | **RA** | | +| Realizar **pruebas de intrusión** en los recursos alojados en el VPC *(6)* | **RA** | **C** | +| Supervisar los **comportamientos anómalos** en los flujos de red del inquilino | **RA** | | -*(3) Cloud Temple garantiza el aislamiento estricto entre VPCs de diferentes inquilinos.* -*(4) La micro-segmentación (grupos de seguridad) estará disponible en H1 2026.* -*(5) El filtrado del tráfico de aplicaciones dentro del VPC es responsabilidad del cliente.* -*(6) Las pruebas de penetración deben declararse previamente a Cloud Temple.* - ---- +*(3) Cloud Temple garantiza el aislamiento estricto entre VPC pertenecientes a inquilinos diferentes. Ningún flujo puede atravesar esta barrera sin una acción explícita del cliente.* +*(4) La microsegmentación (security groups) estará disponible en el S1 2026. Las políticas de filtrado que se apliquen antes de esta disponibilidad deberán implementarse por parte del cliente mediante un equipo de seguridad dedicado.* +*(5) El filtrado de flujos a nivel de aplicación dentro del VPC es responsabilidad del cliente. Cloud Temple no realiza inspección de contenido de los flujos del inquilino.* +*(6) Las pruebas de intrusión deben declararse previamente a Cloud Temple, de conformidad con las condiciones generales de uso.* -## Interconexión con Redes Externas +## Interconexión con redes externas -| Actividad | Cliente | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|---------|--------------| -| Definir la **estrategia de interconexión** con entornos on-premise u otras nubes | **RA** | **C** | -| Suscribirse y configurar un acceso **VPN site-to-site** *(disponible H2 2026)* | **RA** | **C** | -| Suscribirse y configurar **Cloud Connect** (enlace dedicado) *(disponible H2 2026)* | **RA** | **C** | -| Gestionar los **BGP / rutas** asociados a las interconexiones de operador | **RA** | **CI** | -| Garantizar la **seguridad de los flujos** que transitan por las interconexiones | **RA** | | +| Actividad | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|---------|--------------| +| Definir la estrategia de **interconexión** con entornos on-premise u otras nubes | **RA** | **C** | +| Suscribir y configurar un acceso **VPN de sitio a sitio** *(disponible S2 2026)* | **RA** | **C** | +| Suscribir y configurar un acceso **Cloud Connect** (enlace dedicado) *(disponible S2 2026)* | **RA** | **C** | +| Gestionar las **BGP / rutas** asociadas a las interconexiones del operador | **RA** | **CI** | +| Garantizar la **seguridad del tráfico** que transita por las interconexiones | **RA** | | --- -## Conexión de Recursos al VPC +## Conexión de recursos al VPC -| Actividad | Cliente | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|---------|--------------| -| Conectar **instancias VM** a una red privada del VPC | **RA** | **I** | -| Conectar **recursos IaaS** (VMs VMware, OpenIaaS) a las redes privadas del VPC | **RA** | **C** | -| Configurar las **interfaces de red** de los recursos conectados al VPC | **RA** | | -| Garantizar que los recursos conectados aplican **configuraciones de red coherentes** (pasarela, DNS) | **RA** | | +| Actividad | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|---------|--------------| +| Adjuntar **instancias VM** a una red privada del VPC | **RA** | **I** | +| Adjuntar **recursos IaaS** (VMs VMware, OpenIaaS) a las redes privadas del VPC | **RA** | **C** | +| Configurar las **interfaces de red** de los recursos conectados al VPC | **RA** | | +| Asegurarse de que los recursos conectados apliquen **configuraciones de red coherentes** (gateway, DNS) | **RA** | | --- -## Monitoreo y Observabilidad de Red +## Supervisión y observabilidad de red -| Actividad | Cliente | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|---------|--------------| -| Supervisar el funcionamiento de los **componentes principales del VPC** (router, pasarela) | **I** | **RA** | -| Supervisar el **rendimiento del backbone** de red de Cloud Temple | **I** | **RA** | -| Recopilar y analizar los **logs de flujo de red** (flow logs) del VPC *(disponible H1 2026)* | **RA** | **I** | -| Implementar la **supervisión de flujos de aplicaciones** en el VPC | **RA** | | -| Supervisar la **latencia y el ancho de banda** de los flujos dentro del VPC | **RA** | **I** | +| Actividad | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|---------|--------------| +| Supervisar el funcionamiento de los **componentes centrales del VPC** (routeur, gateway) | **I** | **RA** | +| Garantizar el seguimiento del **rendimiento del backbone** de red Cloud Temple | **I** | **RA** | +| Recopilar y analizar los **registros de flujo de red** (flow logs) del VPC *(disponible S1 2026)* | **RA** | **I** | +| Implementar la **supervisión de flujos** de aplicaciones en el VPC | **RA** | | +| Monitorear la **latencia y el ancho de banda** de los flujos dentro del VPC | **RA** | **I** | --- -## Gestión de Cambios y Capacidades +## Gestión de cambios & capacidades -| Actividad | Cliente | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|---------|--------------| -| Decidir agregar, modificar o eliminar recursos de red en su VPC | **RA** | **CI** | -| Gestionar las capacidades y la escalabilidad de la infraestructura de red backbone | | **RA** | -| Planificar y gestionar el crecimiento del plan de direccionamiento IP en el VPC | **RA** | **C** | +| Actividad | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|---------|--------------| +| Tomar la decisión de agregar, modificar o retirar recursos de red en su VPC | **RA** | **CI** | +| Gestionar las capacidades y la escalabilidad de la infraestructura de red backbone | | **RA** | +| Planificar y gestionar el crecimiento del plan de direccionamiento IP en el VPC | **RA** | **C** | --- -## Gestión de Accesos e Identidades +## Gestión de accesos e identidades -| Actividad | Cliente | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|---------|--------------| -| Garantizar la accesibilidad de la **Consola Cloud Temple** y la API de red | | **RA** | -| Gestionar las habilitaciones de los equipos de Cloud Temple a la infraestructura de red | | **RA** | -| Administrar los derechos de acceso al VPC en la Consola Cloud Temple (IAM) | **RA** | | +| Actividad | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|---------|--------------| +| Garantizar la accesibilidad de la **Consola Cloud Temple** y de la API de red | | **RA** | +| Gestionar las habilitaciones de los equipos de Cloud Temple para la infraestructura de red | | **RA** | +| Administrar los derechos de acceso al VPC en la Consola Cloud Temple (IAM) | **RA** | | --- -## Registros (Logs) +## Registros (logs) -| Actividad | Cliente | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|---------|--------------| -| Conservar y poner a disposición los **registros de la plataforma VPC** *(7)* | | **RA** | -| Recopilar y conservar los **logs de flujo** y registros de aplicaciones del inquilino | **RA** | | +| Actividad | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|---------|--------------| +| Conservar y poner a disposición los **registros de la plataforma VPC** *(7)* | | **RA** | +| Recopilar y conservar los **logs de flujo** y registros de aplicaciones del inquilino | **RA** | | *(7) La duración de retención de los registros de la plataforma VPC se especifica en el acuerdo de servicio correspondiente.* --- -## Documentación y Contractual +## Documentación y contractual -| Actividad | Cliente | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|---------|--------------| -| Gestionar los aspectos comerciales y contractuales | **I** | **RA** | -| Supervisar la ejecución contractual del servicio | **RA** | **I** | -| Mantener y poner a disposición la documentación técnica del servicio VPC | **I** | **RA** | -| Documentar la arquitectura de red desplegada en el inquilino (esquemas, CMDB) | **RA** | | +| Actividad | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|---------|--------------| +| Gestionar la parte comercial y contractual (devis, commandes, facturation) | **I** | **RA** | +| Realizar el seguimiento contractual de la prestación | **RA** | **I** | +| Mantener y garantizar la disponibilidad de la documentación técnica del servicio VPC | **I** | **RA** | +| Documentar la arquitectura de red desplegada en su tenant (schémas, CMDB) | **RA** | | --- ## Reversibilidad -| Actividad | Cliente | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|---------|--------------| -| Planificar el proyecto de reversibilidad de red y elegir las arquitecturas objetivo | **RA** | **I** | -| Exportar la configuración del VPC y los recursos de red a través de la API o las herramientas proporcionadas | **RA** | **I** | -| Proceder al desmantelamiento de las configuraciones VPC tras la rescisión del contrato | **I** | **RA** | +| Actividad | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|---------|--------------| +| Planificar el proyecto de reversibilidad de red y seleccionar las arquitecturas objetivo | **RA** | **I** | +| Exportar la configuración del VPC y los recursos de red mediante la API o las herramientas disponibles | **RA** | **I** | +| Proceder al desmantelamiento de las configuraciones VPC tras la rescisión del contrato | **I** | **RA** | --- -> *Se encuentran disponibles servicios profesionales si desea delegar en Cloud Temple algunas o todas las responsabilidades. Póngase en contacto con su responsable comercial de Cloud Temple.* +> *Si desea delegar total o parcialmente las responsabilidades enumeradas como a cargo del cliente, disponemos de servicios profesionales. Contacte a su interlocutor comercial de Cloud Temple.* \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/contractual/network/sla_vpc.md b/i18n/es/docusaurus-plugin-content-docs/current/contractual/network/sla_vpc.md index 05ce3999..3f2523ff 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/contractual/network/sla_vpc.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/contractual/network/sla_vpc.md @@ -8,94 +8,94 @@ displayed_sidebar: docSidebar | | | | :--- | :--- | -| **Última actualización** | 17 de abril de 2026 | +| **Fecha de última actualización** | 17 de abril de 2026 | -Este documento define los Acuerdos de Nivel de Servicio (SLA) aplicables al producto **Virtual Private Cloud (VPC)** proporcionado por **Cloud Temple** (en adelante denominado «el Proveedor» o «Cloud Temple»). Complementa las Condiciones Generales de Venta y de Servicio de Cloud Temple y forma un todo inseparable con ellas. +El presente documento define los Compromisos de Nivel de Servicio (SLA) aplicables al producto **Virtual Private Cloud (VPC)** proporcionado por **Cloud Temple** (en adelante denominado « el Proveedor » o « Cloud Temple »). Complementa las Condiciones Generales de Venta y Servicio de Cloud Temple y constituye un todo indisoluble con las mismas. --- ## 1. Definiciones -En el marco de este SLA, los términos siguientes con mayúscula tienen el significado indicado a continuación: +En el marco del presente SLA, los siguientes términos con mayúscula tienen el siguiente significado: -- **Tasa de Disponibilidad Mensual**: El porcentaje de tiempo de funcionamiento garantizado para el plano de datos del servicio VPC durante un mes calendario. -- **Servicio VPC**: El conjunto de componentes gestionados por Cloud Temple que constituyen el Virtual Private Cloud: router VPC, redes privadas (Private Networks) y pasarela externa (External Gateway) con sus funciones NAT, DNAT e IPs flotantes. -- **Plano de Datos**: El plano de transporte de red que garantiza el enrutamiento de flujos entre las redes privadas de un mismo VPC y la conectividad a Internet a través de la pasarela externa. -- **Plano de Control**: Las APIs e interfaces (Consola Cloud Temple) que permiten la creación, modificación y eliminación de recursos VPC (redes, routers, IPs flotantes, reglas de seguridad). -- **Período de Indisponibilidad**: Interrupción completa del enrutamiento entre las redes privadas de un mismo VPC, o pérdida total de la conectividad a Internet a través de la pasarela externa activada, detectada por las herramientas de monitorización de Cloud Temple. -- **Duración de Indisponibilidad**: Tiempo ininterrumpido durante el cual se constata el Período de Indisponibilidad. Para ser contabilizado en el marco de este SLA, una Duración de Indisponibilidad debe ser de al menos **cinco (5) minutos consecutivos**. +- **Tasa de Disponibilidad Mensual** : El porcentaje de tiempo de funcionamiento garantizado para el plano de datos del servicio VPC durante un mes calendario. +- **Servicio VPC** : El conjunto de componentes gestionados por Cloud Temple que conforman el Virtual Private Cloud: router VPC, redes privadas (Private Networks) y pasarela externa (External Gateway) con sus funciones NAT, DNAT e IPs flotantes. +- **Plano de Datos** : El plano de transporte de red que garantiza el enrutamiento de flujos entre las redes privadas de un mismo VPC, así como la conectividad a Internet a través de la pasarela externa. +- **Plano de Control** : Las API e interfaces (Console Cloud Temple) que permiten la creación, modificación y eliminación de recursos VPC (réseaux, routeurs, IPs flottantes, règles de sécurité). +- **Período de Indisponibilidad** : Interrupción completa del enrutamiento entre las redes privadas de un mismo VPC, o pérdida total de la conectividad a Internet a través de la pasarela externa cuando está activada, detectada por las herramientas de monitoreo de Cloud Temple. +- **Duración de Indisponibilidad** : Tiempo ininterrumpido durante el cual se detecta el Período de Indisponibilidad. Para ser contabilizada en el marco de este SLA, una Duración de Indisponibilidad debe ser de al menos **cinco (5) minutes consécutives**. --- -## 2. Compromisos de Nivel de Servicio (SLA) +## 2. Acuerdos de Nivel de Servicio (SLA) -Cloud Temple se compromete a los siguientes niveles de disponibilidad mensual: +Cloud Temple se compromete con los siguientes niveles de disponibilidad mensual: -| Componente | Tasa de Disponibilidad Mensual garantizada | +| Componente | Tasa de Disponibilidad Mensual Garantizada | | :--- | :---: | -| **Plano de Datos VPC** (enrutamiento entre redes, NAT, DNAT) | **99,99 %** | -| **Plano de Control VPC** (API, Consola Cloud Temple) | **99,9 %** | +| **Plano de datos VPC** (enrutamiento entre redes, NAT, DNAT) | **99,99 %** | +| **Plano de control VPC** (API, Consola Cloud Temple) | **99,9 %** | -Una Tasa de Disponibilidad Mensual del **99,99 %** para el plano de datos corresponde a un máximo de **4,4 minutos** de indisponibilidad autorizada por mes calendario. +Una Tasa de Disponibilidad Mensual de **99,99 %** para el plano de datos corresponde a un máximo de **4,4 minutos** de indisponibilidad permitida por mes calendario. -En caso de incumplimiento de estos compromisos, el Cliente podrá reclamar Créditos de Servicio en las condiciones definidas en el Artículo 5. +En caso de incumplimiento de estos compromisos, el Cliente podrá solicitar Créditos de Servicio en las condiciones establecidas en el Artículo 5. --- -## 3. Medición y alcance de la Disponibilidad +## 3. Medición y ámbito de la Disponibilidad -La supervisión y el cálculo de la Tasa de Disponibilidad Mensual se realizan **exclusivamente por las herramientas de monitorización de la infraestructura de Cloud Temple**. +La supervisión y el cálculo de la Tasa de Disponibilidad Mensual se realizan **exclusivamente mediante las herramientas de monitoreo de la infraestructura de Cloud Temple**. -**Alcance de responsabilidad:** -Este SLA cubre únicamente los componentes de red **gestionados por Cloud Temple**: +**Ámbito de responsabilidad:** +El presente SLA cubre únicamente los componentes de red **gestionados por Cloud Temple** : - El router VPC y la tabla de enrutamiento interna. -- Las Redes Privadas (segmentos L2) y su disponibilidad a nivel del plano de datos. -- La Pasarela Externa (External Gateway), sus funciones NAT, DNAT y las IPs flotantes asociadas. +- Las Redes Privadas (segments L2) y su disponibilidad a nivel del plano de datos. +- La pasarela externa (External Gateway), sus funcionalidades NAT, DNAT y las IPs flotantes asociadas. :::info -Los recursos de cómputo (VM Instances, IaaS OpenSource, IaaS VMware) conectados al VPC están sujetos a SLAs separados y no están cubiertos por este documento. +Los recursos de cómputo (VM Instances, IaaS OpenSource, IaaS VMware) conectados al VPC están sujetos a SLA distintos y no están cubiertos por el presente documento. ::: --- ## 4. Exclusiones de Garantía -Este SLA no constituye un compromiso sobre los elementos fuera del control directo de Cloud Temple. **No** se consideran Períodos de Indisponibilidad las interrupciones resultantes de: +El presente SLA no constituye un compromiso respecto a los elementos fuera del control directo de Cloud Temple. No se consideran **Periodos de Indisponibilidad** las interrupciones resultantes de: -1. **Configuraciones del Cliente**: Reglas de filtrado de red (Security Groups, ACLs) configuradas por el Cliente que bloquean la conectividad, conflictos de direcciones IP, configuraciones incorrectas de subredes o rutas estáticas. +1. **Configuraciones del Cliente** : Reglas de filtrado de red (Security Groups, ACLs) configuradas por el Cliente que bloqueen la conectividad, conflictos de direccionamiento IP, configuración incorrecta de subredes o rutas estáticas. -2. **Fallos de los recursos conectados**: Fallos a nivel del sistema operativo o de las aplicaciones alojadas en las instancias de cómputo (VM Instances, IaaS, Bare Metal) conectadas al VPC. +2. **Fallos de los recursos conectados** : Averías a nivel del sistema operativo o de las aplicaciones alojadas en las instancias de cálculo (Instancias de VM, IaaS, Bare Metal) conectadas al VPC. -3. **Conectividad a Internet externa**: Interrupciones de conectividad más allá del punto de demarcación de Cloud Temple (incidentes en proveedores de tránsito de Internet, degradaciones de enlaces BGP upstream). +3. **Conectividad a Internet externa** : Interrupciones de conectividad que se produzcan más allá del punto de demarcación de Cloud Temple (incidentes en operadores de tránsito de Internet, degradaciones de los enlaces BGP upstream). -4. **Mantenimiento programado**: Intervenciones de mantenimiento en la infraestructura de red de Cloud Temple que hayan sido notificadas previamente en el marco de las ventanas de mantenimiento previstas en el contrato de soporte del Cliente. +4. **Mantenimiento programado** : Intervenciones de mantenimiento en la infraestructura de red de Cloud Temple que hayan sido notificadas con antelación en el marco de las ventanas de mantenimiento previstas en el contrato de soporte del Cliente. -5. **Comportamiento abusivo o infracción**: Suspensión del servicio VPC por Cloud Temple tras una violación de las Condiciones Generales o de los requisitos de seguridad. +5. **Comportamiento abusivo o violación** : Suspensión del servicio VPC por parte de Cloud Temple tras una violación de las Condiciones Generales o de los requisitos de seguridad (ej. : actividad de red maliciosa, incumplimiento de las Condiciones de Uso Aceptable). -6. **Fuerza mayor**: Eventos fuera del control razonable de Cloud Temple. +6. **Fuerza mayor** : Eventos fuera del control razonable de Cloud Temple (catástrofes naturales, actos de guerra, cortes de energía a nivel nacional, etc.). --- ## 5. Créditos de Servicio y Penalizaciones -### 5.1 Plano de Datos VPC +### 5.1 Plan de datos VPC -Si no se alcanza la Tasa de Disponibilidad Mensual del 99,99 % para el plano de datos, el Cliente tiene derecho a un Crédito de Servicio calculado como porcentaje del importe mensual facturado por el servicio VPC: +Si no se alcanza la Tasa de Disponibilidad Mensual del 99,99 % para el plan de datos, el Cliente es elegible para un Crédito de Servicio calculado como un porcentaje del monto mensual facturado por el servicio VPC : | Tasa de disponibilidad mensual constatada | Crédito de Servicio | -| :--- | :---: | +| :--- | ---: | | Entre 99,00 % y 99,98 % | 10 % | | Entre 95,00 % y 98,99 % | 25 % | | Inferior al 95,00 % | 100 % | -### 5.2 Plano de Control VPC +### 5.2 Plano de control VPC -Si no se alcanza la Tasa de Disponibilidad Mensual del 99,9 % para el plano de control, el Cliente tiene derecho a un Crédito de Servicio del **10 %** del importe mensual facturado por el servicio VPC. +Si no se alcanza la Tasa de Disponibilidad Mensual del 99,9 % para el plano de control, el Cliente es elegible para un Crédito de Servicio del **10 %** del monto mensual facturado por el servicio VPC afectado. -### 5.3 Procedimiento de reclamación +### 5.3 Modalidades de reclamación -Para obtener un Crédito de Servicio, el Cliente debe presentar una solicitud motivada mediante la apertura de un ticket en el soporte de Cloud Temple dentro de los **treinta (30) días naturales** siguientes al mes en que se produjo el incidente. +Para obtener un Crédito de Servicio, el Cliente debe presentar una solicitud fundamentada mediante la apertura de un ticket con el soporte de Cloud Temple dentro de un plazo de **treinta (30) días calendario** siguientes al mes en el que se produjo el incidente. La solicitud deberá incluir: -- El identificador (UUID) del VPC afectado -- Las marcas de tiempo precisas del Período de Indisponibilidad constatado +- El identificador (UUID) del VPC correspondiente +- Las marcas de tiempo precisas del Período de Indisponibilidad constatado \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/contractual/paas/mco_mcs.md b/i18n/es/docusaurus-plugin-content-docs/current/contractual/paas/mco_mcs.md index 96f79eee..d2ce0d6a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/contractual/paas/mco_mcs.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/contractual/paas/mco_mcs.md @@ -1,203 +1,218 @@ --- -title: MCO/MCS +title: MCO/MCS PaaS OpenShift +slug: /contractual/paas/mco-mcs +displayed_sidebar: docSidebar --- -**Operational Readiness Policy (MCO) and Security Readiness Policy (MCS) for the OpenShift SNC PaaS Cloud Temple** + +**Política de Mantenimiento en Condiciones Operacionales (MCO) y de Mantenimiento en Condiciones de Seguridad (MCS) en el PaaS OpenShift de SNC **Cloud Temple**** ## Preámbulo Esta política detalla las responsabilidades y recomendaciones para el Mantenimiento en Condiciones Operativas (MCO) y el Mantenimiento en Condiciones de Seguridad (MCS) de sus entornos en el PaaS OpenShift SNC **Cloud Temple**. +--- + ## Mantenimiento en Condiciones Operativas (MCO) -### Gestión y actualización de los clusters +### Gestión y actualización de los clústeres -**Responsabilidad de Cloud Temple:** +**Responsabilidad de **Cloud Temple** :** -- Gestión completa de la infraestructura subyacente, incluyendo los nodos maestros, las actualizaciones de versiones de OpenShift y la resiliencia de los servicios críticos desplegados por **Cloud Temple**. -- Actualizaciones menores/patches automáticas sin interrupciones para las cargas de trabajo alojadas, salvo notificación contraria. -- Limitación de permisos y funcionalidades según las restricciones de SecNumCloud. -- Comunicación de las actualizaciones próximas y de las actualizaciones de ruptura para los próximos tres meses a través de la [**Roadmap Cloud Temple**](https://github.com/orgs/Cloud-Temple/projects/2) +- Gestión completa de la infraestructura subyacente, incluidos los nodos maestros, las actualizaciones de versiones de OpenShift y la resiliencia de los servicios críticos implementados por **Cloud Temple**. +- Actualizaciones menores/patches automáticas sin interrupción para las cargas de trabajo alojadas, salvo notificación en contrario. +- Limitación de los derechos y las funcionalidades a las restricciones SecNumCloud. +- Comunicación de las actualizaciones próximas y de las actualizaciones de ruptura en los próximos tres meses a través de la [**Hoja de ruta Cloud Temple**](https://github.com/orgs/Cloud-Temple/projects/2) **Responsabilidad del usuario:** -- Gestión de las cargas de trabajo desplegadas (aplicaciones, herramientas CI/CD) y sus configuraciones. -- Pruebas de las actualizaciones de carga de trabajo en un entorno de staging antes del despliegue en producción. -- Garantía de la compatibilidad de las cargas de trabajo con los componentes del cluster. +- Gestión de las cargas de trabajo implementadas (aplicaciones, herramientas CI/CD) y sus configuraciones. +- Pruebas de las actualizaciones de carga de trabajo en un entorno de staging antes de su implementación en producción. +- Garantía de la compatibilidad de las cargas de trabajo con los componentes del clúster. **Recomendación:** -- Planificar los despliegues aplicativos fuera de las ventanas de mantenimiento para evitar conflictos con las actualizaciones automáticas del cluster. -- Seguir las comunicaciones de **Cloud Temple** sobre actualizaciones importantes para planificar los ajustes necesarios. -- Seguir las actualizaciones próximas a través de la [**Roadmap producto**](https://github.com/orgs/Cloud-Temple/projects/2) -- Suscribirse a las notificaciones [**de incidentes**](../../console/status.md#gestión-de-notificaciones) +- Planificar los despliegues de aplicaciones fuera de las ventanas de mantenimiento para evitar conflictos con las actualizaciones automáticas del clúster. +- Seguir las comunicaciones de **Cloud Temple** sobre las actualizaciones mayores para planificar los ajustes necesarios. +- Seguir las actualizaciones próximas a través de la [**Hoja de ruta del producto**](https://github.com/orgs/Cloud-Temple/projects/2) +- Suscribirse a las notificaciones [**de incidentes**](../../console/status.md#gestion-des-notifications) -### Supervisión y monitoreo +--- -**Responsabilidad de Cloud Temple:** +### Supervisión y monitorización -- Supervisión y monitoreo de la infraestructura y servicios subyacentes desplegados por **Cloud Temple**. +**Responsabilidad de **Cloud Temple** :** -**Responsabilidad del usuario:** +- Supervisión y monitorización de la infraestructura y los servicios subyacentes implementados por **Cloud Temple**. -- Supervisión y monitoreo de sus cargas de trabajo. +**Responsabilidad del usuario :** -**Recomendación:** +- Supervisión y monitorización de sus cargas de trabajo. -Utilizar las **herramientas nativas proporcionadas:** +**Recomendación :** -- Análisis de registros de rendimiento y eventos a través de la consola de OpenShift. -- Configuración de alertas personalizadas a partir de las métricas del clúster y los pods mediante la interfaz de usuario. +Utilizar las **herramientas nativas proporcionadas :** -Configurar umbrales críticos para las alertas: +- Análisis de los logs de rendimiento y de los eventos a través de la consola de OpenShift. +- Configuración de alertas personalizadas a partir de las métricas del clúster y de los pods mediante la interfaz de usuario. + +Configurar umbrales críticos de alerta : -- **CPU/Memoria** de los pods: ≥ 80 %. -- **Espacio en disco en volúmenes persistentes**: ≥ 85 %. -- **Fallos al iniciar los pods**: más de X ocurrencias en 10 minutos. +- **CPU/Memoria** de los pods : ≥ 80 %. +- **Espacio en disco en los volúmenes persistentes** : ≥ 85 %. +- **Fallos en el inicio de los pods** : más de X ocurrencias en 10 minutos. + +Automatizar la escalada de alertas hacia sus herramientas de gestión para una respuesta rápida. -Automatizar la escalada de alertas hacia sus herramientas de gestión para una respuesta rápida. +--- ### Copias de seguridad y restauración -Los componentes críticos del clúster se copian automáticamente mediante **Cloud Temple**. Las cargas de trabajo y los datos de los usuarios requieren una gestión específica. +Los componentes críticos del clúster se respaldan automáticamente por **Cloud Temple**. Las cargas de trabajo y los datos de los usuarios requieren una gestión dedicada. **Responsabilidad de **Cloud Temple** :** - Mecanismos de redundancia automática dentro de la infraestructura. - Copias de seguridad automáticas de las configuraciones del clúster. -**Responsabilidad del usuario:** +**Responsabilidad del usuario :** -- Realizar copias de seguridad de los datos críticos de las cargas de trabajo utilizando soluciones como la oferta **Kasten**, disponible en el catálogo **Cloud Temple**. +- Realizar copias de seguridad de los datos críticos de las cargas de trabajo utilizando soluciones como la oferta **Kasten** disponible en el catálogo **Cloud Temple**. -**Recomendación:** +**Recomendación :** -- Implementar políticas de copia de seguridad periódicas: - - Copias automáticas de los PV con Kasten. - - Copia diaria de las configuraciones de Kubernetes, secrets y despliegues YAML. +- Establecer políticas de copia de seguridad periódicas : + - Copias de seguridad automáticas de los PV con Kasten. + - Copia de seguridad diaria de las configuraciones de Kubernetes, secretos y despliegues YAML. - Probar regularmente las restauraciones para validar los RPO. -## Maintenance under Safety Conditions (MCS) +--- -### Gestión de secretos y configuraciones +## Mantenimiento en Condiciones de Seguridad (MCS) -Uso de secretos de OpenShift/Kubernetes y recomendación de integrar sistemas centralizados de gestión de secretos. +### Gestión de secretos y configuraciones -**Responsabilidad de Cloud Temple:** +Uso de secretos de OpenShift/Kubernetes y recomendación de integrar sistemas de gestión centralizada de secretos. -- La gestión de secretos y configuraciones de la infraestructura y servicios subyacentes a la oferta corresponde a **Cloud Temple**. +**Responsabilidad **Cloud Temple** :** -**Responsabilidad del usuario:** +- La gestión de secretos y de la configuración de la infraestructura y los servicios subyacentes a la oferta es responsabilidad de **Cloud Temple**. -- La gestión de secretos y configuraciones de las cargas de trabajo del **Cliente** corresponde al **Cliente**. +**Responsabilidad del usuario :** -**Recomendación:** +- La gestión de secretos y de la configuración de las cargas de trabajo del **Cliente** es responsabilidad del **Cliente**. + +**Recomendación :** -- No almacenar secretos en texto plano en archivos YAML. +- No almacenar secretos en texto plano en los archivos YAML. - Utilizar herramientas para cifrar la información sensible. ### Control de accesos (IAM) La revisión de accesos se realiza a través de la Consola y del módulo "User Management" de la consola OpenShift. -Para obtener más detalles sobre esta funcionalidad, consulte nuestra [**guía**](../../console/iam/iam.md) y la [**documentación**](https://docs.redhat.com/en/documentation/openshift_container_platform/) del editor. +Para más detalles sobre esta funcionalidad, consulte nuestra [**guía**](../../console/iam/iam.md) y la [**documentación**](https://docs.redhat.com/en/documentation/openshift_container_platform/) del editor. -**Responsabilidad de Cloud Temple:** +**Responsabilidad **Cloud Temple** :** - **Cloud Temple** es responsable de la gestión de las cuentas de servicio y de administración. - **Cloud Temple** es responsable de la integración con el sistema de identidad **Cloud Temple** para gestionar los accesos. -- **Cloud Temple** es responsable de la configuración predeterminada de **RBAC** y de las restricciones de permisos para los usuarios iniciales. -- **Cloud Temple** es responsable de la provisión y mantenimiento del sistema de **autenticación dual** para reforzar los accesos. +- **Cloud Temple** es responsable de la configuración por defecto de **RBAC** y de las restricciones iniciales de derechos de los usuarios. +- **Cloud Temple** es responsable de la implementación del sistema de **autenticación de doble factor** y de su mantenimiento para reforzar los accesos. + +**Responsabilidad del usuario :** -**Responsabilidad del usuario:** - -- El **Cliente** debe controlar periódicamente los accesos de sus usuarios. -- El **Cliente** es responsable de otorgar accesos a sus usuarios y de su incorporación (onboarding) en el tenant. -- El **Cliente** debe gestionar sus usuarios respetando las limitaciones impuestas por el sistema **Cloud Temple**. +- El **Cliente** debe controlar regularmente los accesos de sus usuarios. +- El **Cliente** es responsable de otorgar accesos a sus usuarios y de su incorporación en el tenant. +- El **Cliente** debe gestionar a sus usuarios respetando las limitaciones impuestas por el sistema **Cloud Temple**. ### Gestión de vulnerabilidades -Las vulnerabilidades en la infraestructura y los servicios subyacentes a la oferta se comunicarán mediante el módulo de incidentes. +Las vulnerabilidades en la infraestructura y los servicios subyacentes a la oferta se comunicarán en el módulo de incidentes. -**Responsabilidad de Cloud Temple:** +**Responsabilidad de **Cloud Temple** :** -- **Cloud Temple** es responsable de la comunicación de vulnerabilidades en la infraestructura y servicios subyacentes a la oferta desde su detección a través del módulo [**incidente**](../../console/status.md) de la Consola. +- **Cloud Temple** es responsable de comunicar las vulnerabilidades en la infraestructura y los servicios subyacentes a la oferta desde su detección a través del módulo [**incidentes**](../../console/status.md) de la Consola. - **Cloud Temple** es responsable de la aplicación de parches en este ámbito. -- **Cloud Temple** es responsable de poner a disposición herramientas para analizar vulnerabilidades en imágenes Docker. Por defecto, **Cloud Temple** implementa **[Quay]** para realizar escaneos automáticos de imágenes Docker. +- **Cloud Temple** es responsable de proporcionar herramientas para analizar las vulnerabilidades de las imágenes Docker. Por defecto, **Cloud Temple** implementa **[Quay]** para realizar el escaneo automático de las imágenes Docker. -**Responsabilidad del usuario:** +**Responsabilidad del usuario :** -- El **Cliente** es responsable de detectar y corregir vulnerabilidades en sus cargas de trabajo. +- El **Cliente** es responsable de la detección y corrección de vulnerabilidades en sus cargas de trabajo. - El **Cliente** es responsable de actualizar sus cargas de trabajo para permitir la aplicación de parches de seguridad lo antes posible. -**Recomendación:** +**Recomendación :** -- Utilizar la función de alertas del clúster proporcionada por **[Quay]** para analizar vulnerabilidades y detectar comportamientos anómalos en las imágenes utilizadas por el **Cliente**. -- Suscribirse a las notificaciones de [**incidentes**](../../console/status.md#gestión-de-notificaciones). +- Utilizar las alertas del clúster proporcionadas por **[Quay]** para analizar las vulnerabilidades y detectar comportamientos anómalos en las imágenes utilizadas por el **Cliente**. +- Suscribirse a las notificaciones de [**incidentes**](../../console/status.md#gestion-des-notifications). ### Cifrado -Garantía de cifrado nativo en la infraestructura **Cloud Temple**, con recomendaciones para cargas de trabajo. +Garantía de cifrado nativo en la infraestructura **Cloud Temple**, con recomendaciones para las cargas de trabajo. -**Responsabilidad de **Cloud Temple**: +**Responsabilidad de **Cloud Temple** :** - Mecanismos de redundancia dentro de la infraestructura. - Copias de seguridad automáticas de las configuraciones del clúster. -**Responsabilidad del usuario**: +**Responsabilidad del usuario :** -- Realizar copias de seguridad de los datos críticos de las cargas de trabajo utilizando soluciones como la oferta **Kasten**, disponible en el catálogo **Cloud Temple**. -- Asegurarse de que las cargas de trabajo utilicen mecanismos de resiliencia y adaptar los despliegues para implementarlos. +- Realizar copias de seguridad de los datos críticos de las cargas de trabajo utilizando soluciones como la oferta **Kasten** disponible en el catálogo **Cloud Temple**. +- Asegurarse de que las cargas de trabajo utilicen los mecanismos de resiliencia y adaptar los despliegues para implementarlos. -**Recomendación**: +**Recomendación :** -- Activar el **cifrado TLS** para todas las comunicaciones intra-pod. -- Activar el **cifrado TLS** para todas las comunicaciones entre las ofertas PaaS e IaaS de **Cloud Temple**. -- Asegurar el cifrado de los datos en reposo mediante las soluciones de almacenamiento de **Cloud Temple**. +- Habilitar el **cifrado TLS** para todas las comunicaciones intra-pod. +- Habilitar el **cifrado TLS** para todas las comunicaciones entre las Ofertas PaaS e IaaS **Cloud Temple**. +- Garantizar el cifrado de datos en reposo a través de las soluciones de almacenamiento de **Cloud Temple**. -### Logging and Auditing +### Registro y auditoría -Automatic recording of critical cluster events. +Registro automático de eventos críticos del clúster. -**Responsibility **Cloud Temple** :** +**Responsabilidad de Cloud Temple:** -- **Cloud Temple** is responsible for logging and auditing the infrastructure and underlying services supporting the offering. +- **Cloud Temple** es responsable del registro y la auditoría de la infraestructura y los servicios subyacentes de la oferta. -**User Responsibility:** +**Responsabilidad del usuario:** -- The **Customer** is responsible for logging and auditing their workloads. +- El **Cliente** es responsable del registro y la auditoría de sus cargas de trabajo. + +**Recomendación:** -**Recommendation:** +- Configurar pipelines para centralizar y analizar los registros de sus cargas de trabajo: + - Utilizar colectores para la agregación de registros, junto con una herramienta de visualización. + - Integrar los registros en su **SIEM** (recomendado). -- Set up pipelines to centralize and analyze your workload logs: - - Use log collectors for log aggregation, combined with a visualization tool. - - Integrate logs with your **SIEM** (recommended). +--- -## Gestión de incidentes y PCA (Plan de Continuidad de Actividad) +## Gestión de incidentes y PCD (Plan de Continuidad de la Actividad) -**Responsabilidad de Cloud Temple:** +**Responsabilidad de **Cloud Temple** :** - **Cloud Temple** es responsable de los mecanismos de redundancia dentro de la infraestructura. - **Cloud Temple** es responsable de las copias de seguridad automáticas de las configuraciones del clúster. - **Cloud Temple** es responsable de la recuperación de la actividad tras un incidente en la infraestructura o en los servicios subyacentes a la oferta. -**Responsabilidad del usuario:** +**Responsabilidad del usuario :** -- El **Cliente** es responsable de realizar copias de seguridad de los datos críticos de las cargas de trabajo utilizando soluciones como la oferta **Kasten**, disponible en el catálogo **Cloud Temple**. +- El **Cliente** es responsable de realizar copias de seguridad de los datos críticos de las cargas de trabajo utilizando soluciones como la oferta **Kasten** disponible en el catálogo **Cloud Temple**. - El **Cliente** debe asegurarse de que las cargas de trabajo utilicen los mecanismos de resiliencia y debe adaptar sus despliegues para implementarlos. -- El **Cliente** es responsable del PRA/PCA de sus cargas de trabajo. +- El **Cliente** es responsable del PRA/PCD de sus cargas de trabajo. -**Procedimiento "Recuperación tras siniestro"** +**Procedimiento "Recuperación ante desastres"** -- En caso de pérdida total de acceso a un clúster, el **Cliente** debe declarar un incidente ante el soporte **Cloud Temple** a través del módulo de soporte de la consola. -Ver la [**procedimiento de solicitud de soporte técnico**](../../console/console_quickstart.md#acceso-al-soporte-técnico) +- En caso de pérdida total de acceso a un clúster, el **Cliente** debe declarar un incidente al soporte **Cloud Temple** a través del módulo de soporte de la consola. +Consulte la [**procédure de demande de support technique**](../../console/console_quickstart.md#accès-au-support-technique) + +--- ## Recomendaciones generales -1. **Planificar los recursos**: Asegurar una capacidad de clúster suficiente para las cargas de trabajo de pico. -2. **Validar las configuraciones**: Probar las aplicaciones en entornos de staging antes del despliegue en producción. -3. **Supervisar regularmente**: Utilizar las herramientas integradas para seguir el uso de los recursos y detectar problemas lo antes posible. -4. **Mantenerse informado**: Seguir la roadmap y las guías para evitar funcionalidades obsoletas. -5. **Contactar al soporte**: Para problemas no resueltos, contactar al soporte a través de la [**procedimiento de solicitud de soporte técnico**](../../console/console_quickstart.md#acceso-al-soporte-técnico) o por correo electrónico a la dirección [**contact**](mailto:contact@cloud-temple.com). +1. **Planificar los recursos** : Garantizar una capacidad de clúster suficiente para las cargas de trabajo de pico. +2. **Validar las configuraciones** : Probar las aplicaciones en entornos de staging antes del despliegue en producción. +3. **Monitorear regularmente** : Utilizar las herramientas integradas para seguir el uso de los recursos y detectar los problemas lo antes posible. +4. **Mantenerse informado** : Seguir la hoja de ruta y las guías para evitar funciones obsoletas. +5. **Contactar al soporte** : Para problemas no resueltos, contactar al soporte a través del [**procedimiento de solicitud de soporte técnico**](../../console/console_quickstart.md#accès-au-support-technique) o por correo electrónico a la dirección [**contacto**](mailto:contact@cloud-temple.com). -Para conocer en detalle las responsabilidades, por favor consulte nuestra [**matriz de responsabilidad**](../../contractual/paas/raci.md). +Para consultar las responsabilidades en detalle, por favor, consulte nuestra [**matriz de responsabilidad**](../../contractual/paas/raci.md). \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/contractual/paas/raci.md b/i18n/es/docusaurus-plugin-content-docs/current/contractual/paas/raci.md index d40c87ff..3052c14a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/contractual/paas/raci.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/contractual/paas/raci.md @@ -1,146 +1,148 @@ --- -title: Matrice de responsabilité PaaS - OpenShift SecNumCloud +title: Matriz de responsabilidad PaaS - OpenShift SecNumCloud +displayed_sidebar: docSidebar --- -Voici le modèle RACI définissant la répartition des responsabilités entre le client et Cloud Temple pour l'utilisation du PaaS OpenShift SecNumCloud. -## Définition des différents rôles +Este es el modelo RACI que define la distribución de responsabilidades entre el cliente y Cloud Temple para el uso del PaaS OpenShift SecNumCloud. -Nous rappelons ici les différents rôles du RACI : +## Definición de los diferentes roles -| Rôle | Description | +Aquí se recuerdan los diferentes roles del RACI: + +| Rol | Descripción | | ------------ | ------------------------------------------------------------------------------------- | -| (R) Réalise | __R__éalise le processus | -| (A) Approuve | __A__pprouve la réalisation du processus | -| (C) Consulte | __C__onsulté pendant le processus | -| (I) Informé | __I__nformé des résultats du processus (via l'outillage, le portail ou la messagerie) | +| (R) Realiza | __R__ealiza el proceso | +| (A) Aprueba | __A__prueba la realización del proceso | +| (C) Consulta | __C__onsultado durante el proceso | +| (I) Informado| __I__nformado de los resultados del proceso (vía herramientas, el portal o la mensajería) | -## Mise en place initiale +## Configuración inicial -| Activité | Rôle Client | Rôle Cloud Temple | +| Actividad | Rol Cliente | Rol Cloud Temple | | -------------------------------------------------------------------- | ----------- | ----------------- | -| Définir l'architecture globale de la plateforme OpenShift | C | RA | -| Dimensionner la plateforme OpenShift (nombre de nœuds, ressources) | C | RA | -| Installer et configurer la plateforme OpenShift | I | RA | -| Configurer le réseau de base de la plateforme OpenShift | I | RA | -| Mettre en place la gestion des identités et des accès pour OpenShift | C | RA | -| Définir la stratégie de mise à l'échelle et de haute disponibilité | C | RA | - -## Gestion des projets et des applications - -| Activité | Rôle Client | Rôle Cloud Temple | -| ------------------------------------------------- | ----------- | ----------------- | -| Créer et gérer les projets OpenShift | RA | C | -| Déployer et gérer les applications dans OpenShift | RA | C | -| Configurer les pipelines CI/CD | RA | C | -| Gérer les images de conteneurs et les registres | RA | C | - -## Maintenance et mises à jour - -| Activité | Rôle Client | Rôle Cloud Temple | -| ------------------------------------------------ | ----------- | ----------------- | -| Mettre à jour la plateforme OpenShift | I | RA | -| Appliquer les correctifs de sécurité à OpenShift | I | RA | -| Mettre à jour les applications déployées | RA | I | -| Gérer les mises à jour des images de conteneurs | RA | I | - -## Surveillance et performance - -| Activité | Rôle Client | Rôle Cloud Temple | +| Definir la arquitectura global de la plataforma OpenShift | C | RA | +| Dimensionar la plataforma OpenShift (número de nodos, recursos) | C | RA | +| Instalar y configurar la plataforma OpenShift | I | RA | +| Configurar la red base de la plataforma OpenShift | I | RA | +| Implementar la gestión de identidades y accesos para OpenShift | C | RA | +| Definir la estrategia de escalado y alta disponibilidad | C | RA | + +## Gestión de proyectos y aplicaciones + +| Actividad | Rol del Cliente | Rol Cloud Temple | +| ------------------------------------------------- | --------------- | ---------------- | +| Crear y gestionar los proyectos de OpenShift | RA | C | +| Desplegar y gestionar las aplicaciones en OpenShift | RA | C | +| Configurar los pipelines CI/CD | RA | C | +| Gestionar las imágenes de contenedores y los registros | RA | C | + +## Mantenimiento y actualizaciones + +| Actividad | Rol del Cliente | Rol Cloud Temple | +| ------------------------------------------------ | --------------- | ---------------- | +| Actualizar la plataforma OpenShift | I | RA | +| Aplicar parches de seguridad a OpenShift | I | RA | +| Actualizar las aplicaciones desplegadas | RA | I | +| Gestionar las actualizaciones de las imágenes de contenedores | RA | I | + +## Monitoreo y rendimiento + +| Actividad | Rol del Cliente | Rol Cloud Temple | | ---------------------------------------------------- | ----------- | ----------------- | -| Surveiller la performance de la plateforme OpenShift | I | RA | -| Surveiller la performance des applications | RA | I | -| Gérer les alertes liées à la plateforme | I | RA | -| Gérer les alertes liées aux applications | RA | I | +| Monitorear el rendimiento de la plataforma OpenShift | I | RA | +| Monitorear el rendimiento de las aplicaciones | RA | I | +| Gestionar las alertas relacionadas con la plataforma | I | RA | +| Gestionar las alertas relacionadas con las aplicaciones | RA | I | -## Sécurité +## Seguridad -| Activité | Rôle Client | Rôle Cloud Temple | +| Actividad | Rol Cliente | Rol Cloud Temple | | ------------------------------------------------------------------ | ----------- | ----------------- | -| Gérer la sécurité de la plateforme OpenShift | I | RA | -| Configurer et gérer les politiques de sécurité des pods | RA | C | -| Gérer les certificats SSL/TLS pour la plateforme | I | RA | -| Gérer les certificats SSL/TLS pour les applications | RA | C | -| Implémenter et gérer le contrôle d'accès basé sur les rôles (RBAC) | C | RA | - -## Sauvegarde et reprise après sinistre - -| Activité | Rôle Client | Rôle Cloud Temple | -| --------------------------------------------------------------------- | ----------- | ----------------- | -| Définir la stratégie de sauvegarde pour la plateforme OpenShift | C | RA | -| Mettre en œuvre et gérer les sauvegardes de la plateforme | I | RA | -| Définir la stratégie de sauvegarde pour les applications | RA | C | -| Mettre en œuvre et gérer les sauvegardes des applications | RA | I | -| Tester les procédures de reprise après sinistre pour la plateforme | I | RA | -| Tester les procédures de reprise après sinistre pour les applications | RA | C | - -## Support et résolution des problèmes - -| Activité | Rôle Client | Rôle Cloud Temple | -| ---------------------------------------------------------------- | ----------- | ----------------- | -| Fournir un support de niveau 1 pour la plateforme OpenShift | I | RA | -| Fournir un support de niveau 2 et 3 pour la plateforme OpenShift | I | RA | -| Résoudre les problèmes liés à la plateforme | I | RA | -| Résoudre les problèmes liés aux applications | RA | C | - -## Gestion des capacités et évolution - -| Activité | Rôle Client | Rôle Cloud Temple | -| -------------------------------------------------------- | ----------- | ----------------- | -| Surveiller l'utilisation des ressources de la plateforme | I | RA | -| Planifier l'évolution des capacités de la plateforme | C | RA | -| Implémenter les changements de capacité | I | RA | -| Gérer l'évolution des applications et leurs ressources | RA | C | - -## Documentation et conformité - -| Activité | Rôle Client | Rôle Cloud Temple | -| ------------------------------------------------------------- | ----------- | ----------------- | -| Maintenir la documentation de la plateforme OpenShift | I | RA | -| Maintenir la documentation des applications | RA | I | -| Assurer la conformité de la plateforme aux normes de sécurité | I | RA | -| Assurer la conformité des applications aux normes de sécurité | RA | C | -| Réaliser des audits de la plateforme | I | RA | -| Réaliser des audits des applications | RA | C | - -### Gestion des opérateurs OpenShift - -Les **opérateurs OpenShift** sont des extensions de la plateforme qui automatisent la gestion d'applications ou de services complexes sur Kubernetes. - -Seuls les **Opérateurs** provenant des catalogues **Certifiés, Red Hat et MarketPlace** seront proposés sous réserve qu'ils soient **conformes aux exigences SecNumCloud** et qu'ils respectent les limitations de l'écosystème. - -L’installation, la surveillance et la gestion des mises à jour de ces opérateurs sont gérées par **Cloud Temple**, tandis que le **Client** est responsable de l'utilisation de ces opérateurs pour gérer ses charges de travail. - -| Activité | Rôle Client | Rôle Cloud Temple | -| --------------------------------------------------------------- | ----------- | ----------------- | -| Mise à disposition des opérateurs dans le catalogue | CI | RA | -| Configuration initiale des Opérateurs via la Marketplace | CI | RA | -| Mise à jour des Opérateurs | I | RA | -| Surveillance de l’état des Opérateurs | I | RA | -| Résolution des problèmes liés aux Opérateurs | CI | RA | -| Gestion des autorisations des Opérateurs | C | RA | -| Gestion des ressources des Opérateurs (ajout/suppression) | CI | RA | -| Sauvegarde des données des ressources des Opérateurs | CI | RA | -| Supervision et monitoring des ressources Opérateurs | CI | RA | -| Restauration des données des ressources des Opérateurs | CI | RA | -| Audit de sécurité des Opérateurs | I | RA | -| Support des Opérateurs Red Hat | I | RA | -| Support des Opérateurs Certifiés | I | RA | -| Support des Opérateurs MarketPlace | I | RA | -| Gestion des licences et contrats de licenses sur les opérateurs | RA | I | -| Gestion des plans de supports spécifiques sur les opérateurs | RA | I | - -> **Note importante** : -> Seuls les opérateurs **déclaré supportés** par Cloud Temple et conformes à **SecNumCloud** sont mis à disposition. Tout opérateur non certifié ou provenant d’une source externe ne sera pas pris en charge ni validé pour être utilisé dans les environnements. -> La gestion des **licences** et des **plans de supports spécifiques** sur les opérateurs issue du catalogue **MarketPlace Red Hat** ne sont pas de la responsabilité de **Cloud Temple**. La gestion du support de ces opérateurs est déléguée défacto au partenaire fournissant le service. +| Gestionar la seguridad de la plataforma OpenShift | I | RA | +| Configurar y gestionar las políticas de seguridad de los pods | RA | C | +| Gestionar los certificados SSL/TLS para la plataforma | I | RA | +| Gestionar los certificados SSL/TLS para las aplicaciones | RA | C | +| Implementar y gestionar el control de acceso basado en roles (RBAC) | C | RA | + +## Copia de seguridad y recuperación ante desastres + +| Actividad | Rol del Cliente | Rol Cloud Temple | +| --------------------------------------------------------------------- | --------------- | ---------------- | +| Definir la estrategia de copia de seguridad para la plataforma OpenShift | C | RA | +| Implementar y gestionar las copias de seguridad de la plataforma | I | RA | +| Definir la estrategia de copia de seguridad para las aplicaciones | RA | C | +| Implementar y gestionar las copias de seguridad de las aplicaciones | RA | I | +| Probar los procedimientos de recuperación ante desastres para la plataforma | I | RA | +| Probar los procedimientos de recuperación ante desastres para las aplicaciones | RA | C | + +## Soporte y resolución de problemas + +| Actividad | Rol del Cliente | Rol de Cloud Temple | +| ---------------------------------------------------------------- | --------------- | ------------------- | +| Proporcionar soporte de nivel 1 para la plataforma OpenShift | I | RA | +| Proporcionar soporte de niveau 2 y 3 para la plataforma OpenShift | I | RA | +| Resolver problemas relacionados con la plataforma | I | RA | +| Resolver problemas relacionados con las aplicaciones | RA | C | + +## Gestión de capacidades y evolución + +| Actividad | Rol Cliente | Rol Cloud Temple | +| -------------------------------------------------------- | ----------- | ---------------- | +| Supervisar el uso de los recursos de la plataforma | I | RA | +| Planificar la evolución de las capacidades de la plataforma | C | RA | +| Implementar los cambios de capacidad | I | RA | +| Gestionar la evolución de las aplicaciones y sus recursos | RA | C | + +## Documentación y cumplimiento + +| Actividad | Rol Cliente | Rol Cloud Temple | +| --------------------------------------------------------------- | ----------- | ---------------- | +| Mantener la documentación de la plataforma OpenShift | I | RA | +| Mantener la documentación de las aplicaciones | RA | I | +| Garantizar el cumplimiento de la plataforma con las normas de seguridad | I | RA | +| Garantizar el cumplimiento de las aplicaciones con las normas de seguridad | RA | C | +| Realizar auditorías de la plataforma | I | RA | +| Realizar auditorías de las aplicaciones | RA | C | + +### Gestión de operadores de OpenShift + +Los **operadores de OpenShift** son extensiones de la plataforma que automatizan la gestión de aplicaciones o servicios complejos en Kubernetes. + +Solo se ofrecerán **Operadores** procedentes de los catálogos **Certificados, Red Hat y MarketPlace**, siempre que sean **conformes con los requisitos SecNumCloud** y respeten las limitaciones del ecosistema. + +La instalación, la supervisión y la gestión de las actualizaciones de estos operadores son gestionadas por **Cloud Temple**, mientras que el **Cliente** es responsable del uso de estos operadores para gestionar sus cargas de trabajo. + +| Actividad | Rôle Cliente | Rôle Cloud Temple | +| --------------------------------------------------------------- | ------------ | ----------------- | +| Puesta a disposición de los operadores en el catálogo | CI | RA | +| Configuración inicial de los Operadores a través de la Marketplace | CI | RA | +| Actualización de los Operadores | I | RA | +| Supervisión del estado de los Operadores | I | RA | +| Resolución de problemas relacionados con los Operadores | CI | RA | +| Gestión de los permisos de los Operadores | C | RA | +| Gestión de los recursos de los Operadores (añadir/eliminar) | CI | RA | +| Copia de seguridad de los datos de los recursos de los Operadores | CI | RA | +| Supervisión y monitorización de los recursos de los Operadores | CI | RA | +| Restauración de los datos de los recursos de los Operadores | CI | RA | +| Auditoría de seguridad de los Operadores | I | RA | +| Soporte de los Operadores Red Hat | I | RA | +| Soporte de los Operadores Certificados | I | RA | +| Soporte de los Operadores MarketPlace | I | RA | +| Gestión de las licencias y contratos de licencia de los operadores | RA | I | +| Gestión de los planes de soporte específicos para los operadores | RA | I | + +> **Nota importante** : +> Solo se ponen a disposición los operadores **declarados compatibles** por Cloud Temple y conformes con **SecNumCloud**. Todo operador no certificado o procedente de una fuente externa no será admitido ni validado para su uso en los entornos. +> La gestión de las **licencias** y de los **planes de soporte específicos** para los operadores procedentes del catálogo **MarketPlace Red Hat** no es responsabilidad de **Cloud Temple**. La gestión del soporte de estos operadores se delega de facto al socio que proporciona el servicio. --- -### Clarification sur l'assistance applicative +### Aclaración sobre la asistencia de aplicaciones -**Assistance applicative (prestation complémentaire) :** +**Asistencia de aplicaciones (servicio complementario) :** -L'assistance applicative concernant le développement, la configuration, la gestion et la maintenance des applications **n'est pas sous la responsabilité de Cloud Temple**. Le périmètre se concentre uniquement sur la gestion de l'infrastructure OpenShift et des opérateurs. Le **support des charges de travail** (applications déployées) et des pipelines CI/CD sont de la responsabilité du client ou de tout prestataire tiers désigné pour cette tâche. +La asistencia de aplicaciones relacionada con el desarrollo, la configuración, la gestión y el mantenimiento de las aplicaciones **no es responsabilidad de Cloud Temple**. El alcance se centra únicamente en la gestión de la infraestructura OpenShift y de los operadores. El **soporte de las cargas de trabajo** (applications déployées) y de los pipelines CI/CD son responsabilidad del cliente o de cualquier proveedor externo designado para esta tarea. -| Activité | Rôle Client | Rôle Cloud Temple | +| Actividad | Rol del Cliente | Rol de Cloud Temple | | --- | --- | --- | -| Assistance applicative (prestation complémentaire) | RA | C | +| Asistencia de aplicaciones (servicio complementario) | RA | C | \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/contractual/paas/raci_ocp_std.md b/i18n/es/docusaurus-plugin-content-docs/current/contractual/paas/raci_ocp_std.md index 514809b5..b0b96c1c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/contractual/paas/raci_ocp_std.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/contractual/paas/raci_ocp_std.md @@ -1,145 +1,148 @@ --- -title: Matrice de responsabilité - OpenShift Standard +title: Matriz de responsabilidad - OpenShift Standard +slug: /contractual/paas/raci-ocp-standard +displayed_sidebar: docSidebar --- -Voici le modèle RACI définissant la répartition des responsabilités entre le client et Cloud Temple pour l'utilisation de l'offre **OpenShift Standard**. -### Définition des différents rôles +A continuación se presenta el modelo RACI que define la distribución de responsabilidades entre el cliente y Cloud Temple para el uso de la oferta **OpenShift Standard**. -Nous rappelons ici les différents rôles du RACI : +### Definición de los diferentes roles -| Rôle | Description | +Aquí recordamos los diferentes roles del RACI : + +| Rol | Descripción | | ------------ | ------------------------------------------------------------------------------------- | -| (R) Réalise | __R__éalise le processus | -| (A) Approuve | __A__pprouve la réalisation du processus | -| (C) Consulte | __C__onsulté pendant le processus | -| (I) Informé | __I__nformé des résultats du processus (via l'outillage, le portail ou la messagerie) | - -### Mise en place initiale - -| Activité | Rôle Client | Rôle Cloud Temple | -| ---------------------------------------------------------------------------------------- | ----------- | ----------------- | -| Définir l'architecture globale du service OpenShift | C | RA | -| Dimensionner le service OpenShift (nombre de nœuds, ressources) | C | RA | -| Installer le service OpenShift avec une configuration par défaut | I | RA | -| Configuration du service OpenShift | RA | C | -| Configurer le réseau de base du service OpenShift | I | RA | -| Déploiement de la configuration initiale des identités et des accès pour OpenShift | C | RA | -| Définir la stratégie de mise à l'échelle et de haute disponibilité sur l'infrastructure | C | RA | - -### Gestion des projets et des applications - -| Activité | Rôle Client | Rôle Cloud Temple | -| ------------------------------------------------- | ----------- | ----------------- | -| Créer et gérer les projets OpenShift | RA | C | -| Déployer et gérer les applications dans OpenShift | RA | C | -| Configurer les pipelines CI/CD | RA | C | -| Gérer les images de conteneurs et les registres | RA | C | - -### Maintenance et mises à jour - -| Activité | Rôle Client | Rôle Cloud Temple | +| (R) Realiza | __R__aliza el proceso | +| (A) Aprueba | __A__prueba la realización del proceso | +| (C) Consulta | __C__onsultado durante el proceso | +| (I) Informado| __I__nformado de los resultados del proceso (vía herramientas, el portal o la mensajería)| + +### Configuración inicial + +| Actividad | Rol del Cliente | Rol de Cloud Temple | +| ---------------------------------------------------------------------------------------- | --------------- | ------------------- | +| Definir la arquitectura general del servicio OpenShift | C | RA | +| Dimensionar el servicio OpenShift (número de nodos, recursos) | C | RA | +| Instalar el servicio OpenShift con una configuración predeterminada | I | RA | +| Configuración del servicio OpenShift | RA | C | +| Configurar la red base del servicio OpenShift | I | RA | +| Despliegue de la configuración inicial de identidades y accesos para OpenShift | C | RA | +| Definir la estrategia de escalado y alta disponibilidad en la infraestructura | C | RA | + +### Gestión de proyectos y aplicaciones + +| Actividad | Rol del Cliente | Rol de Cloud Temple | +| ------------------------------------------------- | --------------- | ------------------- | +| Crear y gestionar los proyectos de OpenShift | RA | C | +| Desplegar y gestionar las aplicaciones en OpenShift | RA | C | +| Configurar los pipelines CI/CD | RA | C | +| Gestionar las imágenes de contenedores y los registros | RA | C | + +### Mantenimiento y actualizaciones + +| Actividad | Rol del Cliente | Rol de Cloud Temple | | ------------------------------------------------ | ----------- | ----------------- | -| Mettre à jour le service OpenShift | RA | I | -| Appliquer les correctifs de sécurité à OpenShift | RA | I | -| Mettre à jour les applications déployées | RA | I | -| Gérer les mises à jour des images de conteneurs | RA | I | +| Actualizar el servicio OpenShift | RA | I | +| Aplicar parches de seguridad a OpenShift | RA | I | +| Actualizar las aplicaciones desplegadas | RA | I | +| Gestionar las actualizaciones de las imágenes de contenedores | RA | I | -### Surveillance et performance +### Supervisión y rendimiento -| Activité | Rôle Client | Rôle Cloud Temple | +| Actividad | Rol Cliente | Rol Cloud Temple | | ---------------------------------------------------- | ----------- | ----------------- | -| Surveiller la performance du service OpenShift | RA | I | -| Surveiller la performance des applications | RA | I | -| Gérer les alertes liées au service OpenShift | RA | I | -| Gérer les alertes liées aux applications | RA | I | +| Supervisar el rendimiento del servicio OpenShift | RA | I | +| Supervisar el rendimiento de las aplicaciones | RA | I | +| Gestionar las alertas relacionadas con el servicio OpenShift | RA | I | +| Gestionar las alertas relacionadas con las aplicaciones | RA | I | -### Sécurité +### Seguridad -| Activité | Rôle Client | Rôle Cloud Temple | +| Actividad | Rol Cliente | Rol Cloud Temple | | ------------------------------------------------------------------ | ----------- | ----------------- | -| Gérer la sécurité du service OpenShift | RA | I | -| Configurer et gérer les politiques de sécurité des pods | RA | C | -| Gérer les certificats SSL/TLS pour le service OpenShift | RA | I | -| Gérer les certificats SSL/TLS pour les applications | RA | C | -| Implémenter et gérer le contrôle d'accès basé sur les rôles (RBAC) | RA | I | - -### Sauvegarde et reprise après sinistre - -| Activité | Rôle Client | Rôle Cloud Temple | -| --------------------------------------------------------------------- | ----------- | ----------------- | -| Définir la stratégie de sauvegarde pour le service OpenShift | RA | CI | -| Mettre en œuvre et gérer les sauvegardes du service OpenShift | RA | CI | -| Définir la stratégie de sauvegarde pour les applications | RA | CI | -| Mettre en œuvre et gérer les sauvegardes des applications | RA | CI | -| Tester les procédures de reprise après sinistre pour le service | RA | CI | -| Tester les procédures de reprise après sinistre pour les applications | RA | CI | - -### Support et résolution des problèmes - -| Activité | Rôle Client | Rôle Cloud Temple | -| ---------------------------------------------------------------- | ----------- | ----------------- | -| Fournir un support de niveau 1 pour l'infrastructure | I | RA | -| Fournir un support de niveau 2 et 3 pour l'infrastructure | I | RA | -| Résoudre les problèmes liés au service OpenShift | RA | C | -| Résoudre les problèmes liés aux applications | RA | C | - -### Gestion des capacités et évolution - -| Activité | Rôle Client | Rôle Cloud Temple | +| Gestionar la seguridad del servicio OpenShift | RA | I | +| Configurar y gestionar las políticas de seguridad de los pods | RA | C | +| Gestionar los certificados SSL/TLS para el servicio OpenShift | RA | I | +| Gestionar los certificados SSL/TLS para las aplicaciones | RA | C | +| Implementar y gestionar el control de acceso basado en roles (RBAC) | RA | I | + +### Copia de seguridad y recuperación ante desastres + +| Actividad | Rol del Cliente | Rol de Cloud Temple | +| --------------------------------------------------------------------- | --------------- | ------------------- | +| Definir la estrategia de copia de seguridad para el servicio OpenShift | RA | CI | +| Implementar y gestionar las copias de seguridad del servicio OpenShift | RA | CI | +| Definir la estrategia de copia de seguridad para las aplicaciones | RA | CI | +| Implementar y gestionar las copias de seguridad de las aplicaciones | RA | CI | +| Probar los procedimientos de recuperación ante desastres para el servicio | RA | CI | +| Probar los procedimientos de recuperación ante desastres para las aplicaciones | RA | CI | + +### Soporte y resolución de problemas + +| Actividad | Rol del Cliente | Rol Cloud Temple | +| ---------------------------------------------------------------- | --------------- | ---------------- | +| Proporcionar soporte de nivel 1 para la infraestructura | I | RA | +| Proporcionar soporte de nivel 2 y 3 para la infraestructura | I | RA | +| Resolver problemas relacionados con el servicio OpenShift | RA | C | +| Resolver problemas relacionados con las aplicaciones | RA | C | + +### Gestión de capacidades y evolución + +| Actividad | Rol Cliente | Rol Cloud Temple | | ------------------------------------------------------------ | ----------- | ----------------- | -| Surveiller l'utilisation des ressources du service OpenShift | RA | C | -| Planifier l'évolution des capacités du service | RA | C | -| Implémenter les changements de capacité | I | RA | -| Gérer l'évolution des applications et leurs ressources | RA | C | +| Supervisar el uso de recursos del servicio OpenShift | RA | C | +| Planificar la evolución de las capacidades del servicio | RA | C | +| Implementar los cambios de capacidad | I | RA | +| Gestionar la evolución de las aplicaciones y sus recursos | RA | C | -### Documentation et conformité +### Documentación y cumplimiento -| Activité | Rôle Client | Rôle Cloud Temple | +| Actividad | Rol del Cliente | Rol de Cloud Temple | | ----------------------------------------------------------------- | ----------- | ----------------- | -| Maintenir la documentation du service OpenShift | I | RA | -| Maintenir la documentation des applications | RA | I | -| Assurer la conformité du service OpenShift aux normes de sécurité | RA | C | -| Assurer la conformité des applications aux normes de sécurité | RA | C | -| Réaliser des audits du service OpenShift | RA | C | -| Réaliser des audits des applications | RA | C | +| Mantener la documentación del servicio OpenShift | I | RA | +| Mantener la documentación de las aplicaciones | RA | I | +| Asegurar el cumplimiento del servicio OpenShift con las normas de seguridad | RA | C | +| Asegurar el cumplimiento de las aplicaciones con las normas de seguridad | RA | C | +| Realizar auditorías del servicio OpenShift | RA | C | +| Realizar auditorías de las aplicaciones | RA | C | -### Gestion des opérateurs OpenShift +### Gestión de operadores de OpenShift -Les **opérateurs OpenShift** sont des extensions du service qui automatisent la gestion d'applications ou de services complexes sur Kubernetes/OpenShift. +Los **operadores de OpenShift** son extensiones del servicio que automatizan la gestión de aplicaciones o servicios complejos en Kubernetes/OpenShift. -Dans le cadre du service **OpenShift Standard**, aucune limitation sur les opérateurs n'est appliquée. Seul la mise à disposition de la fonctionnalité **OperatorHub** est assurée par **Cloud Temple**. Les opérateurs sont mis à disposition via le catalogue de la marketplace Red Hat. L’installation, la surveillance et la gestion des mises à jour de ces opérateurs sont gérés par le **Client**. -Le **Client** est responsable de l'utilisation de ces opérateurs pour gérer ses charges de travail. +En el marco del servicio **OpenShift Standard**, no se aplica ninguna limitación sobre los operadores. Solo la disponibilidad de la funcionalidad **OperatorHub** está garantizada por **Cloud Temple**. Los operadores están disponibles a través del catálogo del marketplace de Red Hat. La instalación, la supervisión y la gestión de las actualizaciones de estos operadores son gestionadas por el **Cliente**. +El **Cliente** es responsable del uso de estos operadores para gestionar sus cargas de trabajo. -| Activité | Rôle Client | Rôle Cloud Temple | +| Actividad | Rôle Client | Rôle Cloud Temple | | ----------------------------------------------------------------- | ----------- | ----------------- | -| Mise à disposition du catalogue d'Opérateurs par défaut | CI | RA | -| Mise à jour des Opérateurs | RA | CI | -| Surveillance de l’état des Opérateurs | RA | CI | -| Résolution des problèmes liés aux Opérateurs | RA | CI | -| Gestion des autorisations des Opérateurs | RA | CI | -| Gestion des ressources des Opérateurs (ajout/suppression) | RA | CI | -| Sauvegarde des données des ressources des Opérateurs | RA | CI | -| Supervision et monitoring des ressources Opérateurs | RA | CI | -| Restauration des données des ressources des Opérateurs | RA | CI | -| Audit de sécurité des Opérateurs | RA | CI | -| Support des Opérateurs | RA | CI | -| Gestion des licences et contrats de licenses sur les opérateurs | RA | I | -| Gestion des plans de supports spécifiques sur les opérateurs | RA | I | - -> **Note importante** : +| Disponibilidad del catálogo de Operadores predeterminado | CI | RA | +| Actualización de los Operadores | RA | CI | +| Supervisión del estado de los Operadores | RA | CI | +| Resolución de problemas relacionados con los Operadores | RA | CI | +| Gestión de permisos de los Operadores | RA | CI | +| Gestión de recursos de los Operadores (agregar/eliminar) | RA | CI | +| Copia de seguridad de los datos de los recursos de los Operadores | RA | CI | +| Supervisión y monitoreo de los recursos de los Operadores | RA | CI | +| Restauración de los datos de los recursos de los Operadores | RA | CI | +| Auditoría de seguridad de los Operadores | RA | CI | +| Soporte de los Operadores | RA | CI | +| Gestión de licencias y contratos de licencia de los operadores | RA | I | +| Gestión de planes de soporte específicos para los operadores | RA | I | + +> **Nota importante** : > -> - Tout **dommage** entraîné par l'installation d'un **opérateur** ou issu d'une **opération du client** est de la responsabilité du **Client**. -> - La gestion des **licences** et des **plans de supports spécifiques** sur les opérateurs ne sont pas de la responsabilité de **Cloud Temple**. +> - Todo **daño** causado por la instalación de un **operador** o derivado de una **operación del cliente** es responsabilidad del **Cliente**. +> - La gestión de las **licencias** y de los **planes de soporte específicos** en los operadores no es responsabilidad de **Cloud Temple**. --- -### Clarification sur l'assistance applicative +### Aclaración sobre la asistencia de aplicaciones -**Assistance applicative (prestation complémentaire) :** +**Asistencia de aplicaciones (servicio complementario) :** -L'assistance applicative concernant le développement, la configuration, la gestion et la maintenance des applications **n'est pas sous la responsabilité de Cloud Temple**. Le périmètre se concentre uniquement sur la gestion de **l'infrastructure sous-jacente au service OpenShift**. Le **support des charges de travail**, **la gestion du cluster jusqu'au système d'exploitation**, **la gestion des opérateurs** et les **pipelines CI/CD** sont de la **responsabilité du client** ou de tout **prestataire tiers désigné** pour cette tâche. +La asistencia de aplicaciones relacionada con el desarrollo, la configuración, la gestión y el mantenimiento de las aplicaciones **no es responsabilidad de Cloud Temple**. El alcance se centra únicamente en la gestión de **la infraestructura subyacente al servicio OpenShift**. El **soporte de las cargas de trabajo**, **la gestión del clúster hasta el sistema operativo**, **la gestión de los operadores** y los **pipelines CI/CD** son de la **responsabilidad del cliente** o de cualquier **proveedor externo designado** para esta tarea. -| Activité | Rôle Client | Rôle Cloud Temple | +| Actividad | Rol del Cliente | Rol de Cloud Temple | | -------------------------------------------------- | ----------- | ----------------- | -| Assistance applicative (prestation complémentaire) | RA | C | +| Asistencia de aplicaciones (servicio complementario) | RA | C | \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/contractual/shared-responsibility.md b/i18n/es/docusaurus-plugin-content-docs/current/contractual/shared-responsibility.md index be8134c5..04ac36b4 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/contractual/shared-responsibility.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/contractual/shared-responsibility.md @@ -7,7 +7,7 @@ displayed_sidebar: docSidebar # Modelo de responsabilidad compartida -Cloud Temple opera según un modelo de **responsabilidad compartida** entre el proveedor y el cliente. Estas matrices RACI (*Responsible, Accountable, Consulted, Informed*) definen con precisión quién hace qué para cada servicio. +Cloud Temple opera bajo un modelo de **responsabilidad compartida** entre el proveedor y el cliente. Estas matrices RACI (*Responsible, Accountable, Consulted, Informed*) definen con precisión quién hace qué para cada servicio. --- @@ -16,19 +16,19 @@ Cloud Temple opera según un modelo de **responsabilidad compartida** entre el p
RACI IaaS (VMware & Open IaaS)
-
Distribución de responsabilidades para los servicios de infraestructura IaaS VMware y OpenStack.
+
Distribución de responsabilidades para los servicios de infraestructura IaaS de VMware y OpenStack.
Consultar el documento →
--- -## VM Instances +## Instancias de VM
-
Modelo de responsabilidad — VM Instances
-
Distribución de responsabilidades para el servicio de máquinas virtuales compartidas VM instances.
+
Modelo de responsabilidad — Instancias de VM
+
Distribución de responsabilidades para el servicio de instancias de máquina virtual compartidas VM instances.
Consultar el documento →
@@ -62,19 +62,19 @@ Cloud Temple opera según un modelo de **responsabilidad compartida** entre el p
MCO / MCS PaaS OpenShift
-
Política de mantenimiento de las condiciones operativas y de seguridad de la plataforma PaaS.
+
Política de mantenimiento en condiciones operativas y de seguridad de la plataforma PaaS.
Consultar el documento →
--- -## Managed Kubernetes +## Kubernetes gestionado
-
RACI Managed Kubernetes
-
Distribución de responsabilidades para el servicio Kubernetes gestionado.
+
RACI Kubernetes gestionado
+
Distribución de responsabilidades para el servicio de Kubernetes gestionado.
Consultar el documento →
@@ -97,7 +97,7 @@ Cloud Temple opera según un modelo de **responsabilidad compartida** entre el p
-
RACI Red
+
RACI de Red
Distribución de responsabilidades para los servicios de red de Cloud Temple.
Consultar el documento →
@@ -106,4 +106,4 @@ Cloud Temple opera según un modelo de **responsabilidad compartida** entre el p
Distribución de responsabilidades para el servicio Virtual Private Cloud (VPC) gestionado.
Consultar el documento →
- + \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/contractual/vm-instances/raci.md b/i18n/es/docusaurus-plugin-content-docs/current/contractual/vm-instances/raci.md index 23a551a0..25081a9c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/contractual/vm-instances/raci.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/contractual/vm-instances/raci.md @@ -1,233 +1,235 @@ --- -title: Modelo de Responsabilidad Compartida — Instancias VM +title: Modelo de responsabilidad compartida — Instancias de VM slug: /contractual/vm-instances/raci --- -# Modelo de Responsabilidad Compartida — Instancias VM +# Modelo de responsabilidad compartida — Instancias de VM -Este modelo **RACI** define la distribución de responsabilidades entre el cliente y Cloud Temple para el servicio de **Instancias VM** (máquinas virtuales compartidas). +Este es el modelo **RACI** que define la distribución de responsabilidades entre el cliente y Cloud Temple para el uso del servicio **instancias de VM** (máquinas virtuales compartidas). -> **Particularidades del servicio Instancias VM** -> A diferencia de la oferta IaaS dedicada, el servicio Instancias VM se basa en una infraestructura de cómputo **compartida y completamente gestionada por Cloud Temple**. Cloud Temple gestiona completamente el hipervisor, las imágenes del sistema y la capa de infraestructura. El cliente conserva la plena responsabilidad de todo lo que se ejecuta dentro de sus instancias: sistema operativo invitado, aplicaciones, datos y seguridad de la aplicación. +> **Particularidad de la oferta de instancias de VM** +> A diferencia de la oferta IaaS dedicada, el servicio de instancias de VM se basa en una infraestructura de cálculo **compartida y totalmente gestionada por Cloud Temple**. Cloud Temple se encarga de la gestión completa del hipervisor, las imágenes del sistema y la capa de infraestructura. El cliente conserva la plena responsabilidad de lo que se ejecuta dentro de sus instancias: sistema operativo invitado, aplicaciones, datos y seguridad de las aplicaciones. --- -## Definición de Roles +## Definición de roles -| Rol | Descripción | -|------------------|---------------------------------------------------------------------------------------------------| -| (R) Responsable | __R__ealiza el proceso | -| (A) Aprueba | __A__prueba la realización del proceso | -| (C) Consultado | __C__onsultado durante el proceso | -| (I) Informado | __I__nformado de los resultados del proceso (a través de herramientas, portal o mensajería) | +| Rol | Descripción | +|--------------|---------------------------------------------------------------------------------------| +| (R) Ejecuta | __R__ealiza el proceso | +| (A) Aprueba | __A__prueba la realización del proceso | +| (C) Consulta | __C__onsultado durante el proceso | +| (I) Informado| __I__nformado de los resultados del proceso (vía herramientas, el portal o la mensajería) | --- -## Infraestructura Física e Hipervisor +## Infraestructura física e hipervisor Cloud Temple es completamente responsable de la capa de infraestructura e hipervisor. El cliente no tiene acceso a esta capa. -| Actividad | Cliente | Cloud Temple | -|--------------------------------------------------------------------------------------------------------|---------|--------------| -| Garantizar la implementación y el mantenimiento de los **centros de datos físicos** | | **RA** | -| Garantizar la implementación y el mantenimiento de la infraestructura de **cómputo compartido** | **I** | **RA** | -| Garantizar la implementación y el mantenimiento de la infraestructura de **almacenamiento** | **I** | **RA** | -| Garantizar la implementación y el mantenimiento de la conectividad de la **red backbone** | **I** | **RA** | -| Gestionar, actualizar y mantener la seguridad de los **hipervisores** *(1)* | **I** | **RA** | -| Garantizar la **alta disponibilidad** de la plataforma de hipervisores | **I** | **RA** | -| Gestionar incidentes, problemas y capacidades de las capas de infraestructura e hipervisor | **I** | **RA** | +| Actividad | Cliente | Cloud Temple | +|---------------------------------------------------------------------------------------------------------|---------|--------------| +| Garantir la implementación y el mantenimiento de los **datacenters físicos** | | **RA** | +| Garantir la implementación y el mantenimiento de las infraestructuras de **cálculo compartido** | **I** | **RA** | +| Garantir la implementación y el mantenimiento de las infraestructuras de **almacenamiento** | **I** | **RA** | +| Garantir la implementación y el mantenimiento de la conectividad de **red backbone** | **I** | **RA** | +| Gestionar, actualizar y mantener en condiciones de seguridad los **hipervisores** *(1)* | **I** | **RA** | +| Garantir la **alta disponibilidad** de la plataforma de hipervisores | **I** | **RA** | +| Gestionar los incidentes, problemas y capacidades de las capas de infraestructura e hipervisor | **I** | **RA** | | Adquirir y mantener las **licencias** esenciales para el funcionamiento de la plataforma | | **RA** | -*(1) Los hipervisores y la capa de virtualización son enteramente responsabilidad de Cloud Temple. El cliente no tiene acceso al hipervisor ni a la capa de gestión subyacente.* +*(1) Los hipervisores y la capa de virtualización son completamente responsabilidad de Cloud Temple. El cliente no dispone de ningún acceso al hipervisor ni a la capa de gestión subyacente.* --- -## Imágenes, Plantillas y Catálogo +## Imágenes, plantillas y catálogo -| Actividad | Cliente | Cloud Temple | -|--------------------------------------------------------------------------------------------------------|---------|--------------| -| Construir, publicar y mantener las **imágenes oficiales del catálogo** *(2)* | **I** | **RA** | -| Aplicar parches de seguridad y actualizaciones a las **imágenes del catálogo** | | **RA** | -| Validar la conformidad y seguridad de las imágenes publicadas en el catálogo | | **RA** | -| **Derivar** una imagen oficial del catálogo para crear una imagen personalizada *(3)* | **RA** | **I** | -| Garantizar la conformidad, las licencias y la seguridad de cualquier imagen personalizada derivada | **RA** | | -| Mantener y actualizar imágenes personalizadas derivadas (parches OS, herramientas integradas) | **RA** | | +| Actividad | Cliente | Cloud Temple | +|----------------------------------------------------------------------------------------------------------------|---------|--------------| +| Construir, publicar y mantener las **imágenes oficiales** del catálogo *(2)* | **I** | **RA** | +| Aplicar parches de seguridad y actualizaciones en las **imágenes del catálogo** | | **RA** | +| Verificar el cumplimiento y la seguridad de las imágenes publicadas en el catálogo | | **RA** | +| **Derivar** una imagen oficial del catálogo para crear una imagen personalizada *(3)* | **RA** | **I** | +| Garantizar el cumplimiento, las licencias y la seguridad de cualquier imagen personalizada derivada | **RA** | | +| Mantener y actualizar las imágenes personalizadas derivadas (parches del SO, herramientas integradas) | **RA** | | -*(2) Las imágenes oficiales del catálogo (distribuciones Linux, Windows Server, etc.) son construidas, mantenidas y actualizadas por Cloud Temple. Su nivel de seguridad inicial es responsabilidad de Cloud Temple.* -*(3) El cliente puede derivar una imagen oficial del catálogo para crear una imagen personalizada. A partir de ese momento, la **responsabilidad total** de esa imagen recae sobre el cliente: conformidad, licencias, actualizaciones de seguridad, presencia y actualización de las tools y hardening. Cloud Temple no se encarga del mantenimiento de las imágenes derivadas.* +*(2) Las imágenes oficiales del catálogo (distribuciones de Linux, Windows Server, etc.) son construidas, mantenidas y actualizadas por Cloud Temple. Su nivel de seguridad inicial es responsabilidad de Cloud Temple.* +*(3) El cliente puede derivar una imagen oficial del catálogo para crear una imagen personalizada. A partir de ese momento, **la responsabilidad total** de esta imagen recae en él: cumplimiento, licencias, actualizaciones de seguridad, presencia y actualización de las herramientas, y endurecimiento. Cloud Temple no se encarga del mantenimiento de estas imágenes derivadas.* --- -## Aprovisionamiento y Ciclo de Vida de las Instancias +## Aprovisionamiento y ciclo de vida de las instancias -| Actividad | Cliente | Cloud Temple | +| Actividad | Cliente | Cloud Temple | |--------------------------------------------------------------------------------------------------------|---------|--------------| -| Crear, iniciar, detener y eliminar **instancias VM** | **RA** | **I** | -| Elegir el sabor (flavor) e imagen de inicio de la instancia | **RA** | | -| Redimensionar una instancia (cambio de flavor) *(4)* | **RA** | **I** | -| Gestionar **metadatos y etiquetas** asociados a las instancias | **RA** | | -| Gestionar el **ciclo de vida** de las instancias (creación, modificación, desmantelamiento) | **RA** | | -| Tomar la decisión de agregar o reducir recursos | **RA** | | +| Crear, iniciar, detener y eliminar **instancias VM** | **RA** | **I** | +| Elegir el tipo de máquina (flavor) y la imagen de inicio de la instancia | **RA** | | +| Redimensionar una instancia (cambio de tipo de máquina) *(4)* | **RA** | **I** | +| Gestionar los **metadatos y etiquetas** asociados a las instancias | **RA** | | +| Gestionar el **ciclo de vida** de las instancias (creación, modificación, desmantelamiento) | **RA** | | +| Tomar la decisión de agregar o reducir recursos. | **RA** | | *(4) El redimensionamiento puede requerir un reinicio de la instancia. La disponibilidad de la aplicación alojada durante esta operación es responsabilidad del cliente.* --- -## Sistema Operativo Invitado (Guest OS) y Tools +## Sistema operativo invitado (Guest OS) & herramientas El cliente tiene el control total y la plena responsabilidad del sistema operativo dentro de sus instancias. -:::warning[Condición de Validez del SLA — Tools Obligatorias] -Las **tools de Instancias VM** (agentes de gestión del hipervisor) son **preinstaladas por Cloud Temple** al desplegar la instancia desde el catálogo. Estos agentes son indispensables para el correcto funcionamiento de la plataforma y la medición de la disponibilidad. +:::warning[Condición de validez del SLA — Herramientas obligatorias] +Las **tools VM instances** (agents de gestion de l'hyperviseur) están **preinstaladas por Cloud Temple** durante el despliegue de la instancia desde el catálogo. Estos agentes son indispensables para el correcto funcionamiento de la plataforma y para la medición de la disponibilidad. -**Si el cliente desactiva o elimina estas tools, el SLA queda inmediatamente invalidado.** Cloud Temple ya no puede garantizar ni medir la disponibilidad de la instancia sin estos agentes. La presencia y el correcto funcionamiento de las tools son responsabilidad exclusiva del cliente durante toda la vida de la instancia. +**Si el cliente desactiva o elimina estas herramientas, el SLA caduca inmediatamente.** Cloud Temple ya no puede garantizar ni medir la disponibilidad de la instancia sin estos agentes. La presencia y el correcto funcionamiento de las herramientas son responsabilidad exclusiva del cliente durante la operación. ::: -| Actividad | Cliente | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------|---------|--------------| -| **Preinstalar las tools** (agentes del hipervisor, controladores PV) al desplegar desde el catálogo *(5)* | | **RA** | -| Garantizar que las **tools permanezcan instaladas, activas y actualizadas** *(6)* | **RA** | | -| Aplicar **parches y actualizaciones de seguridad** al sistema operativo invitado | **RA** | | -| **Reforzar** la configuración del sistema operativo (CIS, directrices ANSSI, etc.) | **RA** | | -| Gestionar **cuentas de usuario, contraseñas y claves SSH** dentro de la instancia *(7)* | **RA** | | -| Instalar y configurar **agentes de monitoreo** (métricas OS, registros del sistema) | **RA** | | -| Mantener la **conformidad normativa** aplicable al OS y los datos alojados | **RA** | | +| Activité | Client | Cloud Temple | +|-----------------------------------------------------------------------------------------------------------------|--------|--------------| +| **Preinstalar las herramientas** (agents hyperviseur, PV drivers) durante el despliegue desde el catálogo *(5)* | | **RA** | +| Asegurarse de que las **herramientas permanezcan instaladas, activadas y actualizadas** durante toda la vida útil de la instancia *(6)* | **RA** | | +| Aplicar **parches y actualizaciones de seguridad** del sistema operativo invitado | **RA** | | +| **Endurecer** la configuración del sistema operativo (CIS, recommandations ANSSI, etc.) | **RA** | | +| Gestionar las **cuentas de usuario, contraseñas y claves SSH** dentro de la instancia *(7)* | **RA** | | +| Instalar y configurar los **agentes de supervisión** (métriques OS, logs système) | **RA** | | +| Mantener el **cumplimiento normativo** aplicable a los SO y a los datos alojados | **RA** | | -*(5) Cloud Temple proporciona una imagen inicial del catálogo con las tools preinstaladas. La responsabilidad de la configuración, el refuerzo y las actualizaciones posteriores del sistema operativo recae íntegramente en el cliente desde la primera conexión a la instancia.* -*(6) La eliminación o desactivación de las tools por parte del cliente supone la suspensión inmediata de los compromisos de nivel de servicio (SLA) para la instancia afectada. Cloud Temple no puede ser considerado responsable de los fallos relacionados con la ausencia de estos agentes.* -*(7) La seguridad de acceso a la instancia (solidez de las contraseñas, gestión de claves SSH, principio de mínimo privilegio) es responsabilidad exclusiva del cliente. Cloud Temple no puede ser considerado responsable de una vulneración resultante de una configuración de acceso insuficientemente segura.* +*(5) Cloud Temple proporciona una imagen inicial en el estado de salida del catálogo con las herramientas preinstaladas. La responsabilidad de la configuración, el endurecimiento y las actualizaciones posteriores del sistema operativo recae íntegramente en el cliente desde la primera conexión a la instancia.* +*(6) La eliminación o desactivación de las herramientas por parte del cliente provoca la suspensión inmediata de los compromisos de nivel de servicio (SLA) para la instancia en cuestión. Cloud Temple no puede ser responsable de los fallos relacionados con la ausencia de estos agentes.* +*(7) La seguridad de los accesos a la instancia (solidité des mots de passe, gestion des clés SSH, principe de moindre privilège) es responsabilidad exclusiva del cliente. Cloud Temple no puede ser responsable de una vulneración derivada de una configuración de acceso insuficientemente segura.* --- -## Seguridad de las Instancias y Exposición a Internet +## Seguridad de las instancias y exposición a Internet -:::danger[Responsabilidad de Seguridad del Cliente] -Cloud Temple garantiza únicamente el **aislamiento de red entre inquilinos** a nivel de plataforma. La protección de cada instancia frente a amenazas de red (Internet, flujos internos) es **responsabilidad exclusiva del cliente**. Una instancia conectada a Internet sin filtrado adecuado o con credenciales débiles expone al cliente a riesgos de compromiso de los cuales Cloud Temple no puede ser considerado responsable. +:::danger[Responsabilidad de seguridad del cliente] +Cloud Temple garantiza únicamente el **aislamiento interinquilino** a nivel de plataforma. La protección de cada instancia contra las amenazas de red (Internet, flux internes) es **totalmente responsabilidad del cliente**. Una instancia conectada a Internet sin un filtrado adecuado o con credenciales débiles expone al cliente a riesgos de compromiso por los cuales Cloud Temple no podría ser considerado responsable. ::: -| Actividad | Cliente | Cloud Temple | -|----------------------------------------------------------------------------------------------------------------------|---------|--------------| -| Garantizar el **aislamiento de red entre inquilinos** a nivel de plataforma | | **RA** | -| **Proteger las instancias expuestas a Internet** (reglas de filtrado, grupos de seguridad, cortafuegos) *(A)* | **RA** | | -| Garantizar que ningún servicio esté expuesto en Internet sin una **regla de filtrado explícita** | **RA** | | -| Implementar y mantener un **cortafuegos de aplicaciones** (WAF, IDS/IPS) si lo requiere el nivel de criticidad | **RA** | | -| Configurar **contraseñas robustas y claves SSH seguras** en todas las instancias *(B)* | **RA** | | -| Aplicar el **principio de mínimo privilegio** en las cuentas OS y los accesos remotos (SSH, RDP) | **RA** | | -| Implementar una solución de **detección y respuesta a incidentes** (EDR, SIEM) si es necesario | **RA** | | -| Realizar el **endurecimiento de la configuración** de red y OS de las instancias | **RA** | | -| Notificar a Cloud Temple ante **sospecha de compromiso** que afecte a la plataforma compartida | **RA** | **C** | +| Activité | Client | Cloud Temple | +|-----------------------------------------------------------------------------------------------------------------------|--------|--------------| +| Garantizar el **aislamiento de red interinquilino** a nivel de plataforma | | **RA** | +| **Proteger las instancias expuestas en Internet** (règles de filtrage, security groups, pare-feu) *(A)* | **RA** | | +| Asegurarse de que ningún servicio esté expuesto en Internet sin **regla de filtrado explícite** | **RA** | | +| Implementar y mantener un **firewall de aplicación** (WAF, IDS/IPS) si lo requiere el nivel de criticité | **RA** | | +| Configurar **contraseñas robustas y claves SSH seguras** en todas las instancias *(B)* | **RA** | | +| Aplicar el **principio de menor privilegio** en las cuentas del SO y los accesos remotos (SSH, RDP) | **RA** | | +| Implementar una solución de **detección y respuesta a incidentes** (EDR, SIEM) si es necesario | **RA** | | +| Realizar el **endurecimiento de la configuration** de red y SO de las instancias (deshabilitación de servicios inutiles) | **RA** | | +| Notificar a Cloud Temple en caso de **sospecha de compromiso** que afecte a la plataforma compartida | **RA** | **C** | -*(A) Cualquier instancia conectada a Internet a través de una IP pública o regla NAT sin filtrado adecuado lo es bajo la exclusiva responsabilidad del cliente. Cloud Temple no inspecciona ni filtra el tráfico entrante o saliente del inquilino.* -*(B) El uso de contraseñas débiles, claves SSH comprometidas o acceso root sin restricciones constituye una vulneración de las buenas prácticas de seguridad. Cloud Temple no puede ser considerado responsable de una vulneración resultante de una configuración de acceso insuficientemente segura por parte del cliente.* +*(A) Toda instancia conectada a Internet mediante una IP pública o una regla NAT sin un filtrado adecuado lo está bajo la exclusiva responsabilidad del cliente. Cloud Temple no realiza inspección ni filtrado de los flujos salientes o entrantes del tenant.* +*(B) El uso de contraseñas débiles, claves SSH comprometidas o acceso root no restringido constituye un incumplimiento de las buenas prácticas de seguridad. Cloud Temple no puede ser considerado responsable de un compromiso resultante de una configuración de acceso insuficientemente segura por parte del cliente.* --- -## Aplicaciones y Middleware +## Aplicaciones y middleware -| Actividad | Cliente | Cloud Temple | +| Actividad | Cliente | Cloud Temple | |--------------------------------------------------------------------------------------------------------|---------|--------------| -| Instalar, configurar y mantener **aplicaciones** y **middleware** en las instancias | **RA** | | -| Aplicar **parches de seguridad** a aplicaciones y middleware | **RA** | | -| Adquirir y poseer las **licencias de software** para las aplicaciones alojadas | **RA** | | -| Implementar una **estrategia antivirus** en las instancias | **RA** | | -| Gestionar la **continuidad de la aplicación** (balanceo de carga, replicación, clustering) | **RA** | | +| Instalar, configurar y mantener las **aplicaciones** y **middleware** en las instancias | **RA** | | +| Aplicar los **parches de seguridad** de las aplicaciones y middleware | **RA** | | +| Adquirir y titular las **licencias de software** de las aplicaciones alojadas | **RA** | | +| Implementar una **estrategia antivirus** en las instancias | **RA** | | +| Gestionar la **continuidad de la aplicación** (load balancing, réplication, clustering) | **RA** | | --- -## Red y Conectividad +## Red y conectividad -| Actividad | Cliente | Cloud Temple | +| Actividad | Cliente | Cloud Temple | |--------------------------------------------------------------------------------------------------------|---------|--------------| -| Mantener la **red backbone** y la infraestructura de red compartida | **I** | **RA** | -| Configurar las **interfaces de red** de las instancias | **RA** | | -| Gestionar el **plan de direccionamiento IP** dentro del inquilino | **RA** | **I** | -| Configurar y gestionar los **grupos de seguridad** (reglas de filtrado) | **RA** | | -| Suscribirse y configurar el **acceso a Internet** (IPs públicas, NAT) | **RA** | | -| Gestionar incidentes en los enlaces de red del **backbone** (capa Cloud Temple) | **I** | **RA** | +| Garantizar el mantenimiento de la **red backbone** y de la infraestructura de red compartida | **I** | **RA** | +| Configurar las **interfaces de red** de las instancias | **RA** | | +| Gestionar el **plan de direccionamiento IP** en el tenant | **RA** | **I** | +| Configurar y gestionar los **grupos de seguridad** (security groups / règles de filtrage) *(6)* | **RA** | | +| Suscribir y configurar el **acceso a Internet** (IPs publiques, NAT) | **RA** | | +| Gestionar los incidentes en los enlaces de red **backbone** (couche Cloud Temple) | **I** | **RA** | + +*(6) La configuración de las reglas de filtrado de red aplicables a las instancias es responsabilidad del cliente. Cloud Temple solo garantiza el aislamiento entre tenants a nivel de la plataforma.* --- -## Almacenamiento de las Instancias +## Almacenamiento de instancias | Actividad | Cliente | Cloud Temple | |--------------------------------------------------------------------------------------------------------|---------|--------------| -| Mantener la **infraestructura de almacenamiento** compartida en condición operativa | **I** | **RA** | -| Mantener la infraestructura de almacenamiento en condición de seguridad | **I** | **RA** | -| Crear, adjuntar y gestionar **volúmenes de almacenamiento adicionales** | **RA** | **I** | -| Garantizar la **coherencia de los datos** almacenados en las instancias | **RA** | | -| Definir y aplicar una **política de cifrado de datos** dentro de las instancias | **RA** | | +| Garantizar el mantenimiento en condiciones operativas de la **infraestructura de almacenamiento** compartida | **I** | **RA** | +| Garantizar el mantenimiento en condiciones de seguridad de la infraestructura de almacenamiento | **I** | **RA** | +| Crear, adjuntar y gestionar los **volúmenes de almacenamiento adicionales** | **RA** | **I** | +| Asegurar la **consistencia de los datos** almacenados en las instancias | **RA** | | +| Definir y aplicar una **política de cifrado de datos** dentro de las instancias *(7)* | **RA** | | + +*(7) El cifrado en reposo de la infraestructura de almacenamiento subyacente es responsabilidad de Cloud Temple. El cifrado a nivel de aplicación de los datos (a nivel del sistema de archivos o de la base de datos) es responsabilidad del cliente.* --- -## Copias de Seguridad y Snapshots +## Copias de seguridad y snapshots -| Actividad | Cliente | Cloud Temple | +| Actividad | Cliente | Cloud Temple | |--------------------------------------------------------------------------------------------------------|---------|--------------| -| Mantener la **infraestructura de copias de seguridad** en condición operativa | **I** | **RA** | -| **Activar y configurar** la política de copia de seguridad asociada a una instancia | **RA** | | -| **Activar snapshots** puntuales de una instancia | **RA** | | -| Verificar la **coherencia y restaurabilidad** de las copias de seguridad realizadas | **RA** | | -| Realizar **pruebas de restauración** periódicas | **RA** | | -| Gestionar la **capacidad de almacenamiento** dedicada a las copias de seguridad | | **RC** | -| Definir la **estrategia de continuidad o recuperación** para las aplicaciones alojadas | **RA** | | +| Garantizar el mantenimiento operativo de la **infraestructura de copias de seguridad** | **I** | **RA** | +| **Activar y configurar** la política de copias de seguridad asociada a una instancia | **RA** | | +| **Crear snapshots** puntuales de una instancia | **RA** | | +| Verificar la **coherencia y la capacidad de restauración** de las copias de seguridad realizadas | **RA** | | +| Realizar **pruebas de restauración** periódicas | **RA** | | +| Gestionar las **capacidades de almacenamiento** dedicadas a las copias de seguridad | | **RC** | +| Definir la **estrategia de continuidad o recuperación ante desastres** para las aplicaciones alojadas | **RA** | | --- -## Monitoreo y Rendimiento +## Supervisión y rendimiento -| Actividad | Cliente | Cloud Temple | +| Actividad | Cliente | Cloud Temple | |--------------------------------------------------------------------------------------------------------|---------|--------------| -| Supervisar el correcto funcionamiento de la **infraestructura física y los hipervisores** | **I** | **RA** | -| Supervisar el rendimiento de los **recursos compartidos** (cómputo, almacenamiento, red) | **I** | **RA** | -| Supervisar el **rendimiento de las instancias** (CPU, RAM, E/S de disco, red a nivel invitado) | **RA** | | -| Implementar una solución de **métricas y alertas** para las aplicaciones alojadas | **RA** | | +| Supervisar el correcto funcionamiento de la **infraestructura física y los hipervisores** | **I** | **RA** | +| Garantizar el seguimiento del **rendimiento de los recursos compartidos** (cálculo, almacenamiento, red) | **I** | **RA** | +| Supervisar el **rendimiento de las instancias** (CPU, RAM, E/S de disco, red a nivel de invitado) | **RA** | | +| Implementar una solución de **métricas y alertas** para las aplicaciones alojadas | **RA** | | --- -## Gestión de Accesos e Identidades +## Gestión de accesos & identidades -| Actividad | Cliente | Cloud Temple | +| Actividad | Cliente | Cloud Temple | |--------------------------------------------------------------------------------------------------------|---------|--------------| -| Garantizar la accesibilidad de la **Consola Cloud Temple** y la API | | **RA** | -| Gestionar las **habilitaciones** de los equipos de Cloud Temple para la infraestructura SecNumCloud | | **RA** | -| Administrar el acceso a la **Consola Cloud Temple** (usuarios, roles, IAM) | **RA** | | -| Gestionar el acceso **dentro de las instancias** (cuentas OS, claves SSH, bastion) | **RA** | | -| Configurar un **directorio de autenticación externo** (SSO, LDAP) para la Consola | **RA** | **C** | +| Garantizar la accesibilidad de la **Consola Cloud Temple** y de la API | | **RA** | +| Gestionar las **habilitaciones** de los equipos de Cloud Temple en la infraestructura cualificada SecNumCloud | | **RA** | +| Administrar los accesos a la **Consola Cloud Temple** (usuarios, roles, IAM) | **RA** | | +| Gestionar los accesos **dentro de las instancias** (cuentas OS, claves SSH, bastión) | **RA** | | +| Configurar un **repositorio de autenticación externa** (SSO, LDAP) para la Consola | **RA** | **C** | --- -## Registros (Logs) +## Registros (logs) -| Actividad | Cliente | Cloud Temple | +| Actividad | Cliente | Cloud Temple | |--------------------------------------------------------------------------------------------------------|---------|--------------| -| Conservar y poner a disposición los **registros de la plataforma** de Instancias VM *(8)* | | **RA** | -| Recopilar, conservar y analizar los **registros de sistema y de aplicación** de las instancias | **RA** | | +| Conservar y poner a disposición los **registros de la plataforma** de instancias VM *(8)* | | **RA** | +| Recopilar, conservar y analizar los **registros del sistema y de las aplicaciones** de las instancias | **RA** | | -*(8) La duración de retención de los registros de la plataforma se especifica en el acuerdo de servicio de Instancias VM.* +*(8) La duración de retención de los registros de la plataforma se especifica en el acuerdo de servicio de las instancias VM.* ---- - -## Documentación y Contractual +## Documentación & contractual -| Actividad | Cliente | Cloud Temple | +| Actividad | Cliente | Cloud Temple | |--------------------------------------------------------------------------------------------------------|---------|--------------| -| Gestionar los aspectos comerciales y contractuales (presupuestos, pedidos, facturación) | **I** | **RA** | -| Supervisar la ejecución contractual del servicio (entregas, facturación) | **RA** | **I** | -| Mantener y poner a disposición la documentación técnica del servicio | **I** | **RA** | -| Mantener actualizada la **CMDB** relativa a las instancias desplegadas en el inquilino | **RA** | | -| Mantener actualizada la política de acceso a la Consola y la API | **RA** | | +| Garantizar la gestión comercial y contractual (presupuestos, pedidos, facturación) | **I** | **RA** | +| Garantizar el seguimiento contractual del servicio (entregas, facturación) | **RA** | **I** | +| Garantizar el mantenimiento y la disponibilidad de la documentación técnica del servicio | **I** | **RA** | +| Mantener actualizada la **CMDB** relativa a las instancias desplegadas en su tenant | **RA** | | +| Mantener actualizada la política de acceso a la Consola y a la API | **RA** | | --- ## Reversibilidad -| Actividad | Cliente | Cloud Temple | +| Actividad | Cliente | Cloud Temple | |--------------------------------------------------------------------------------------------------------|---------|--------------| -| Planificar el proyecto de reversibilidad y elegir las infraestructuras objetivo | **RA** | **I** | -| Exportar datos e imágenes de instancias a través de la API o las herramientas proporcionadas | **RA** | **I** | -| Proceder al desmantelamiento de las configuraciones tras la rescisión del contrato | **I** | **RA** | -| Realizar el borrado seguro de datos en los soportes de almacenamiento y emitir un certificado | **I** | **RA** | +| Planificar el proyecto de reversibilidad y seleccionar las infraestructuras destino | **RA** | **I** | +| Exportar los datos y las imágenes de las instancias mediante la API o las herramientas disponibles | **RA** | **I** | +| Proceder al desmantelamiento de las configuraciones tras la rescisión | **I** | **RA** | +| Realizar la eliminación segura de los datos en los soportes de almacenamiento y emitir una constatación | **I** | **RA** | --- -> *Se encuentran disponibles servicios profesionales si desea delegar en Cloud Temple algunas o todas las responsabilidades listadas como obligaciones del cliente. Póngase en contacto con su responsable comercial de Cloud Temple.* +> *Hay servicios profesionales disponibles si desea delegar total o parcialmente las responsabilidades enumeradas como a cargo del cliente. Contacte a su interlocutor comercial de Cloud Temple.* \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/contractual/vm-instances/sla_vm-instances.md b/i18n/es/docusaurus-plugin-content-docs/current/contractual/vm-instances/sla_vm-instances.md index c13c5599..82aa0586 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/contractual/vm-instances/sla_vm-instances.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/contractual/vm-instances/sla_vm-instances.md @@ -1,81 +1,90 @@ --- -title: SLA Instancias VM +title: SLA de Instancias de VM slug: /contractual/vm-instances/sla +displayed_sidebar: docSidebar --- # Acuerdo de Nivel de Servicio (SLA) – Instancias VM | | | | :--- | :--- | -| **Última actualización** | 15 de abril de 2026 | +| **Fecha de última actualización** | 15 de abril de 2026 | -Este documento define los Compromisos de Nivel de Servicio (SLA) aplicables al producto **Instancias VM** proporcionado por **Cloud Temple**. Complementa las Condiciones Generales de Venta y Servicio de Cloud Temple y forma un todo inseparable con ellas. +El presente documento define los Compromisos de Nivel de Servicio (SLA) aplicables al producto **VM Instances** proporcionado por **Cloud Temple** (en adelante denominado « el Proveedor » o « Cloud Temple »). Complementa las Condiciones Generales de Venta y Servicio de Cloud Temple y constituye un todo indisoluble con las mismas. --- ## 1. Definiciones -- **Tasa de Disponibilidad Mensual**: El porcentaje de tiempo de funcionamiento garantizado para una Instancia VM durante un mes calendario. -- **Instancia VM**: El servidor privado virtual aprovisionado bajo demanda por el Cliente en la infraestructura cloud de Cloud Temple, basado en recursos de cómputo y almacenamiento compartidos de alto rendimiento. -- **Período de Indisponibilidad**: Pérdida total del acceso y conectividad externa a la Instancia VM, medida exclusivamente a nivel de la infraestructura subyacente de Cloud Temple. -- **Duración de Indisponibilidad**: Tiempo ininterrumpido durante el cual se constata el Período de Indisponibilidad. Para ser contabilizada en este SLA, una Duración de Indisponibilidad debe ser de al menos **cuatro (4) minutos consecutivos**. +En el marco del presente SLA, los siguientes términos con mayúscula tienen el siguiente significado: + +- **Tasa de Disponibilidad Mensual** : El porcentaje de tiempo de funcionamiento garantizado para una instancia de VM durante un mes calendario. +- **Instancia de VM** : El servidor privado virtual aprovisionado bajo demanda por el Cliente en la infraestructura cloud de Cloud Temple, basado en recursos de cómputo y almacenamiento compartidos de alto rendimiento. +- **Período de Indisponibilidad** : Pérdida total de acceso y conectividad externa a la Instancia de VM, medida exclusivamente a nivel de la infraestructura subyacente de Cloud Temple (estado de la instancia reportado como inactivo, detenido o con error por el hipervisor de Cloud Temple). +- **Duración de Indisponibilidad** : Tiempo ininterrumpido durante el cual se constata el Período de Indisponibilidad. Para ser contabilizada en virtud de este SLA, una Duración de Indisponibilidad debe ser de al menos **cuatro (4) minutos consecutivos**. --- -## 2. Compromisos de Nivel de Servicio (SLA) +## 2. Acuerdos de Nivel de Servicio (SLA) -Cloud Temple se compromete a garantizar una Tasa de Disponibilidad Mensual del **99,95 %** para cada Instancia VM activa facturada al Cliente. +Cloud Temple se compromete a garantizar una Tasa de Disponibilidad Mensual de **99,95 %** para cada Instancia de VM activa facturada al Cliente. -Esta tasa equivale a un máximo de **21,9 minutos** de Duración de Indisponibilidad autorizada por mes calendario. En caso de incumplimiento, el Cliente podrá reclamar Créditos de Servicio en las condiciones definidas en el Artículo 5. +Esta tasa equivale a un máximo de **21,9 minutos** de Duración de Indisponibilidad autorizada por mes calendario. En caso de incumplimiento de este compromiso, el Cliente podrá solicitar Créditos de Servicio en las condiciones establecidas en el Artículo 5. --- -## 3. Medición y Ámbito de la Disponibilidad +## 3. Medición y ámbito de la Disponibilidad -La supervisión y el cálculo de la Tasa de Disponibilidad Mensual se realizan **exclusivamente por las herramientas de monitoreo de infraestructura de Cloud Temple**. +La monitorización y el cálculo de la Tasa de Disponibilidad Mensual se realizan **exclusivamente mediante las herramientas de monitorización de la infraestructura de Cloud Temple**, sondeando el estado de la instancia a nivel de la capa de virtualización. **Ámbito de responsabilidad:** -Este SLA cubre únicamente el funcionamiento de los recursos de cómputo (CPU, RAM) asignados en la infraestructura hardware de Cloud Temple. +El presente SLA cubre únicamente el funcionamiento de los recursos de cómputo (Compute: CPU, RAM) asignados en la infraestructura física de Cloud Temple. :::info -La conectividad de red (VPC, enrutamiento) o el almacenamiento persistente son objeto de documentos SLA separados. +La conectividad de red (VPC, enrutamiento) o el almacenamiento persistente son objeto de documentos SLA distintos y no están cubiertos por el presente compromiso. ::: -**Principio de exclusión por estado UP:** -En cuanto la Instancia VM sea vista como "UP" o "RUNNING" por la plataforma Cloud Temple, el compromiso de SLA se considera cumplido. +**Principio de exclusión por el estado UP:** +Una vez que la VM Instance es vista como «UP» o «RUNNING» por la plataforma Cloud Temple, el compromiso del SLA se considera cumplido, independientemente de la accesibilidad de la capa de aplicaciones del Cliente. --- ## 4. Exclusiones de Garantía -1. **Fallos del Sistema Operativo o de software**: Caída del OS invitado, sobrecarga de CPU o RAM causada por procesos del Cliente, corrupción del sistema de archivos interno. +El presente SLA no constituye un compromiso respecto a la disponibilidad de los elementos que están bajo el control exclusivo del Cliente. Por consiguiente, **no** se consideran Períodos de Indisponibilidad las interrupciones, pérdidas de acceso o averías resultantes de: + +1. **Fallos del Sistema Operativo (SO) o de software** : Bloqueo del SO invitado (por ej., *Kernel Panic*, *Pantalla Azul de la Muerte*), sobrecarga de la CPU o de la RAM causada por los procesos del Cliente, o corrupción del sistema de archivos interno. -2. **Configuraciones del Cliente**: Reglas de cortafuegos que bloquean accesos, errores de configuración de red dentro del OS. +2. **Configuraciones del Cliente** : Reglas de firewall de red o local (iptables, firewalld) que bloquean los accesos, errores de configuración de red dentro del SO mediante Cloud-init o en la fase posterior al despliegue. -3. **Fallos de aplicación**: Detención o caída de un servicio alojado en la Instancia VM. +3. **Averías de aplicaciones** : Detención o fallo de un servicio alojado en la Instancia VM (servidor web, base de datos, contenedores, etc.). -4. **Mantenimiento programado**: Intervenciones con notificación previa en las ventanas de mantenimiento previstas. +4. **Mantenimiento programado** : Intervenciones de hardware o software en la infraestructura física de Cloud Temple que hayan sido notificadas con antelación en el marco de las ventanas de mantenimiento previstas en su contrato de soporte. -5. **Ausencia o desactivación de las tools de VM**: Los agentes de gestión del hipervisor (*tools*) preinstalados por Cloud Temple en cada instancia son indispensables para la medición y garantía de la disponibilidad. Si estos tools han sido desactivados, eliminados o inutilizados por el cliente, Cloud Temple ya no puede supervisar la instancia ni constatar objetivamente un período de indisponibilidad. El SLA queda **inmediatamente suspendido** durante el tiempo en que los tools estén ausentes o no operativos. La presencia y el correcto funcionamiento de los tools son responsabilidad exclusiva del cliente durante toda la vida de la instancia. +5. **Ausencia o desactivación de las herramientas VM** : Los agentes de gestión del hipervisor (*tools*) preinstalados por Cloud Temple en cada instancia son indispensables para medir y garantizar la disponibilidad. Si estas *tools* han sido desactivadas, eliminadas o vuelven a no funcionar por parte del cliente, Cloud Temple ya no puede garantizar la supervisión de la instancia ni constatar objetivamente un período de indisponibilidad. El SLA se **suspenderá inmediatamente** por la duración durante la cual las *tools* estén ausentes o no operativas. La presencia y el correcto funcionamiento de las *tools* son responsabilidad exclusiva del cliente durante toda la vida útil de la instancia. -6. **Comportamiento abusivo o violación**: Suspensión de la Instancia VM por Cloud Temple tras una violación de las Condiciones Generales. +6. **Comportamiento abusivo o incumplimiento** : Suspensión de la Instancia VM por parte de Cloud Temple como consecuencia de una violación de las Condiciones Generales o de los requisitos de seguridad (por ej., compromiso de seguridad, incumplimiento de las normas del Marketplace de Cloud Temple). -7. **Fuerza mayor**: Eventos fuera del control razonable de Cloud Temple. +7. **Fuerza mayor** : Eventos fuera del control razonable de Cloud Temple. --- ## 5. Créditos de Servicio y Penalizaciones -| Tasa de disponibilidad mensual constatada | Crédito de Servicio | +Si no se alcanza la Tasa de Disponibilidad Mensual del 99,95 % para una Instancia de VM determinada, el Cliente es elegible para una compensación en forma de Crédito de Servicio. + +El Crédito de Servicio se calcula como un porcentaje del monto mensual facturado por la Instancia de VM afectada: + +| Tasa de disponibilidad mensual registrada | Crédito de Servicio | | :--- | :---: | | Entre 99,00 % y 99,94 % | 10 % | | Entre 95,00 % y 98,99 % | 25 % | | Inferior al 95,00 % | 100 % | -### 5.1 Modalidades de Reclamación +### 5.1 Modalidades de reclamación -El Cliente debe presentar una solicitud motivada mediante la apertura de un ticket de soporte en Cloud Temple en un plazo de **treinta (30) días calendario** tras el mes en que ocurrió el incidente. +Para obtener un Crédito de Servicio, el Cliente debe presentar una solicitud motivada mediante la apertura de un ticket con el soporte de Cloud Temple dentro de un plazo de **treinta (30) días calendario** siguientes al mes en el que tuvo lugar el incidente. La solicitud deberá incluir: -- El UUID de la Instancia VM afectada -- Los timestamps precisos del Período de Indisponibilidad observado +- El identificador (UUID) de la Instancia de VM correspondiente +- Las marcas de tiempo precisas del Período de Indisponibilidad constatado \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/databases_overview.md b/i18n/es/docusaurus-plugin-content-docs/current/databases_overview.md index 41fc7f3d..666ab1c9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/databases_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/databases_overview.md @@ -1,21 +1,21 @@ --- -title: Databases +title: Bases de datos displayed_sidebar: docSidebar --- -# Databases +# Bases de datos -Las bases de datos gestionadas de Cloud Temple le liberan de la gestión operacional (copias de seguridad, actualizaciones, alta disponibilidad) mientras permanecen alojadas en una infraestructura soberana calificada SecNumCloud. +Las bases de datos gestionadas de Cloud Temple le liberan de la gestión operativa (copias de seguridad, actualizaciones, alta disponibilidad) mientras permanecen alojadas en una infraestructura soberana cualificada SecNumCloud.
-

MariaDB Gestionado Preview

+

MariaDB Gestionado Vista previa

Motor MariaDB en Kubernetes con copias de seguridad automáticas, alta disponibilidad multi-AZ y cifrado en reposo.

Descubrir MariaDB Gestionado →
-

PostgreSQL Gestionado Preview

+

PostgreSQL Gestionado Vista previa

Motor PostgreSQL en Kubernetes con Point-in-Time Recovery, copia de seguridad lógica y despliegue StandAlone o Distributed.

Descubrir PostgreSQL Gestionado →
-
+ \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/faq.md b/i18n/es/docusaurus-plugin-content-docs/current/faq.md index 70e0f388..53fbf551 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/faq.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/faq.md @@ -1,12 +1,12 @@ --- -title: FAQs +title: Preguntas frecuentes sidebar_position: 1 hide_table_of_contents: true --- # Preguntas Frecuentes -Encuentre a continuación las preguntas frecuentes sobre los productos y servicios de Cloud Temple. +A continuación encontrará las preguntas más frecuentes sobre los productos y servicios de Cloud Temple. --- @@ -17,9 +17,9 @@ Encuentre a continuación las preguntas frecuentes sobre los productos y servici
-
LLMaaS — Large Language Models
+
LLMaaS — Modelos de Lenguaje Grande
Preguntas sobre el uso de modelos de lenguaje, formatos de API, licencias y casos de uso.
-
Ver FAQ →
+
Consultar la FAQ →
@@ -33,15 +33,15 @@ Encuentre a continuación las preguntas frecuentes sobre los productos y servici
-
Object Storage
-
Preguntas sobre la gestión de buckets, derechos de acceso, protocolos compatibles y límites del servicio.
-
Ver FAQ →
+
Almacenamiento de objetos
+
Preguntas sobre la gestión de buckets, permisos de acceso, protocolos compatibles y límites del servicio.
+
Consultar la FAQ →
-::::tip[¿No encuentra su respuesta?] +::::tip[¿No encuentras tu respuesta?] -Consulte la [documentación del producto](/home) o contacte al soporte de Cloud Temple a través de la [consola](https://console.cloud-temple.com). +Consulta la [documentación del producto](/home) o contacta al soporte de Cloud Temple a través de la [consola](https://console.cloud-temple.com). -:::: +:::: \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/home.md b/i18n/es/docusaurus-plugin-content-docs/current/home.md index 62633017..0483808d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/home.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/home.md @@ -1,6 +1,7 @@ --- tags: - - home + - inicio + - inicio - onboarding displayed_sidebar: docSidebar hide_table_of_contents: true @@ -8,8 +9,8 @@ hide_table_of_contents: true
-

Documentación Cloud Temple

-

Todo lo que necesita para aprovechar los servicios cloud soberanos de Cloud Temple.

+

Documentación de Cloud Temple

+

Todo lo que necesita para gestionar los servicios cloud soberanos de Cloud Temple.

SecNumCloud 3.2 ISO 27001 @@ -22,28 +23,28 @@ hide_table_of_contents: true
-## Primeros Pasos +## Primeros pasos -## Páginas Populares +## Páginas populares +
\ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/housing/housing.md b/i18n/es/docusaurus-plugin-content-docs/current/housing/housing.md index 34341e41..2e227562 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/housing/housing.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/housing/housing.md @@ -4,9 +4,9 @@ title: Visión general # Housing Cloud Temple -El **Housing Cloud Temple** ofrece una solución de alojamiento físico para sus infraestructuras IT en zonas de disponibilidad fiables y seguras. Diseñada para satisfacer las necesidades de las empresas, esta oferta le permite alojar sus equipos en racks compartidos o dedicados, asegurando una conectividad de red eficiente y servicios profesionales de asistencia en datacenter. +El **Housing Cloud Temple** ofrece una solución de alojamiento físico para sus infraestructuras IT en zonas de disponibilidad fiables y seguras. Diseñada para satisfacer las necesidades empresariales, este producto permite alojar sus equipos en racks compartidos o dedicados, garantizando al mismo tiempo una conectividad de red de alto rendimiento y servicios profesionales de asistencia en datacenter. -Con opciones flexibles y un alto nivel de seguridad, el Housing Cloud Temple garantiza la continuidad y fiabilidad de sus operaciones, ya sea para alojar appliances, servidores o beneficiarse de servicios complementarios para optimizar su infraestructura. +Con opciones flexibles y un alto nivel de seguridad, el Housing Cloud Temple garantiza la continuidad y fiabilidad de sus operaciones, ya sea para alojar appliances, servidores o disfrutar de servicios complementarios para optimizar su infraestructura.
@@ -21,7 +21,7 @@ Con opciones flexibles y un alto nivel de seguridad, el Housing Cloud Temple gar

Tutoriales

-

Aprenda paso a paso cómo configurar y utilizar nuestros servicios con guías detalladas.

+

Aprenda paso a paso a configurar y utilizar nuestros servicios con guías detalladas.

Descubrir los tutoriales →
-
+ \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/housing/quickstart.md b/i18n/es/docusaurus-plugin-content-docs/current/housing/quickstart.md index 3797c13d..21bca366 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/housing/quickstart.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/housing/quickstart.md @@ -3,39 +3,39 @@ title: Guía de inicio --- -Este guía **Quickstart Housing** lo acompaña para comenzar rápidamente con la oferta de alojamiento físico Cloud Temple. Cubre los pasos esenciales para realizar una solicitud de alojamiento, configurar sus equipos y beneficiarse de los servicios complementarios. +Esta guía **Quickstart Housing** le acompaña para iniciar rápidamente con el producto de hosting físico Cloud Temple. Cubre los pasos esenciales para realizar una solicitud de hosting, configurar sus equipos y acceder a los servicios complementarios. -## Paso 1: Presentar una solicitud de alojamiento +## Paso 1: Realizar una solicitud de alojamiento 1. Acceda a la consola Cloud Temple. -2. Abra un caso de servicio proporcionando : +2. Abra un expediente de servicio proporcionando: - Nombre de su organización. - - Coordinadas de un contacto (correo electrónico y teléfono). - - Tipo de alojamiento deseado (compartido en 'U' o dedicado por rack). - - Cantidad y características de los equipos (tamaño, peso, consumo, etc.). + - Datos de contacto de un contacto (correo electrónico y teléfono). + - Tipo de alojamiento deseado (compartido por 'U' o dedicado por rack). + - Cantidad y características del equipo (dimensiones, peso, consumo, etc.). -## Paso 2: Preparar sus equipos +## Paso 2 : Preparar sus equipos -- Verifique que sus equipos cumplan con las restricciones técnicas : +- Verifique que sus equipos cumplan con las restricciones técnicas: - Tamaño en unidades de rack (U). - - Peso máximo por 'U' (25 kg para compartido, hasta 1000 kg para un rack dedicado). - - Consumo eléctrico (150 W a 3 Kw según la opción contratada). + - Peso máximo por 'U' (25kg para compartido, hasta 1000kg para un rack dedicado). + - Consumo eléctrico (150W a 3kW según la opción contratada). ## Paso 3: Configurar la conectividad de red -1. Seleccione el tipo de puerto requerido : +1. Seleccione el tipo de puerto requerido: - Cobre 1Gbps. - Fibra 1Gbps o 10Gbps. -2. Agregue opciones de conectividad en Meet Me Room si es necesario para la integración del operador. +2. Agregue opciones de conectividad en la sala de interconexión (Meet Me Room) si es necesario para la integración del operador. ## Paso 4: Activar los servicios Hands & Eyes -Si es necesario, solicite asistencia técnica para : +Si es necesario, solicite asistencia técnica para: - Instalar sus equipos. - Configurar el cableado. -- Realizar acciones puntuales (reiniciar, tomar fotos, etc.). +- Realizar tareas puntuales (reinicios, capturas de pantalla, etc.). ## Paso 5: Validar la instalación -Una vez instalados sus equipos, verifique su conectividad y buen funcionamiento directamente desde la consola Cloud Temple o en coordinación con el soporte. +Una vez instalados sus equipos, verifique su conectividad y su correcto funcionamiento directamente a través de la consola Cloud Temple o en coordinación con el soporte. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/housing/tutorials.md b/i18n/es/docusaurus-plugin-content-docs/current/housing/tutorials.md index d5210561..815ade89 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/housing/tutorials.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/housing/tutorials.md @@ -1,11 +1,13 @@ + + --- title: Tutoriales --- -Estos tutoriales le ayudan a implementar y gestionar un Bastión Cloud Temple desde el portal Console. +Estos tutoriales le ayudan a implementar y gestionar un Bastion Cloud Temple desde el portal de la consola.

Tutoriales

-

Actualmente no hay ningún tutorial disponible, pero estamos trabajando activamente en ellos. ¡Vuelva pronto para obtener más información!

- Ir a la página principal → -
+

No hay tutoriales disponibles por el momento, pero estamos trabajando activamente en ello. ¡Vuelva pronto para saber más!

+ Ir a la página de inicio → + \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/iaas_bare-metal/concepts.md b/i18n/es/docusaurus-plugin-content-docs/current/iaas_bare-metal/concepts.md index 272ddb10..bc5991ce 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/iaas_bare-metal/concepts.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/iaas_bare-metal/concepts.md @@ -2,120 +2,133 @@ title: Conceptos --- -La oferta **Bare Metal** de Cloud Temple proporciona servidores físicos dedicados asociados a un almacenamiento en bloque distribuido. -Esta solución ofrece una personalización total para clientes que desean gestionar sus propios entornos software, ya sea para instalar un sistema Linux, Windows o un hipervisor. + +La oferta **Bare Metal** de Cloud Temple ofrece servidores físicos dedicados asociados a un almacenamiento de bloques distribuido. +Esta solución ofrece una personalización total para los clientes que deseen gestionar sus propios entornos de software, ya sea para instalar un sistema Linux, Windows o un hipervisor. + +--- ## Una infraestructura física y flexible -La oferta Bare Metal se basa en una arquitectura diseñada para satisfacer las necesidades de cargas de trabajo críticas. +La oferta Bare Metal se basa en una arquitectura diseñada para satisfacer las necesidades de las cargas de trabajo críticas. ### Componentes principales -- **Servidores Cisco UCS**: Potentes y fiables, estas láminas de cálculo constituyen la base de la oferta. -- **Almacenamiento IBM Spectrum Virtualize**: Un almacenamiento de bloques distribuido, que ofrece resiliencia y altas prestaciones. +- **Servidores Cisco UCS** : De alto rendimiento y fiabilidad, estas cuchillas de cálculo constituyen la base de la oferta. +- **Almacenamiento IBM Spectrum Virtualize** : Un almacenamiento distribuido de tipo bloque, que ofrece resiliencia y alto rendimiento. ### Arquitectura -El modelo de almacenamiento distribuido ofrece una separación entre el cálculo (servidores Bare Metal) y el almacenamiento (bloque distribuido), permitiendo: +El modelo de almacenamiento distribuido ofrece una separación entre el cálculo (servidores Bare Metal) y el almacenamiento (bloque distribuido), lo que permite: -- Flexibilidad para asignar volúmenes de almacenamiento a múltiples servidores Bare Metal según las necesidades. -- Personalización óptima de las configuraciones de cálculo y almacenamiento. -- Mayor resiliencia gracias al uso de **RAID 6 distribuido**. +- Una flexibilidad para asignar los volúmenes de almacenamiento a varios servidores Bare Metal según las necesidades. +- Una personalización óptima de las configuraciones de cálculo y almacenamiento. +- Una mayor resiliencia gracias al uso de **Distributed RAID 6**. -## Regions and Availability Zones +--- -The Bare Metal product is deployed within an availability zone. -An [availability zone](../additional_content/concepts_az.md) is part of a [region](../additional_content/concepts_regional.md). +## Regiones y zonas de disponibilidad -This deployment model allows you to select the location of your Bare Metal servers and distribute them across different availability zones (AZ). -This provides better load distribution, maximizes redundancy, and simplifies the implementation of a disaster recovery plan (DRP) in the event of an incident. +El producto Bare Metal se despliega en una zona de disponibilidad. +Una [zona de disponibilidad](../additional_content/concepts_az.md) forma parte de una [región](../additional_content/concepts_regional.md). + +Este tipo de despliegue permite elegir la ubicación de los servidores Bare Metal y poder distribuirlos en diferentes zonas de disponibilidad (AZ). +Esto ofrece una mejor distribución de la carga, maximiza la redundancia y facilita la implementación de un plan de recuperación ante desastres (DRP) en caso de incidente. + +--- -## Clases de placas de cálculo +## Clases de blades de cálculo -Las placas de cálculo disponibles para la oferta Bare Metal ofrecen una gama de rendimientos para satisfacer diversas necesidades: +Las unidades de cálculo disponibles para la oferta Bare Metal ofrecen una gama de rendimiento para satisfacer diversas necesidades: -| Referencia | RAM **(1)** | Frecuencia **(2)** | Número de núcleos / hilos | Conectividad **(3)** | GPU **(4)** | +| Referencia | RAM **(1)** | Frecuencia **(2)** | Número de núcleos / hilos | Conectividad **(3)** | GPU **(4)** | |-----------------------|--------------|-------------------------------------------|---------------------------|----------------------|----------------------| -| **ECO** | 384 GB | 2,20/3,0 GHz (Silver 4114 o equivalente) | 20 / 40 hilos | 2 x 10 Gbit/s | - | -| **STANDARD** | 384 GB | 2,40/3,4 GHz (Silver 4314 o equivalente) | 32 / 64 hilos | 2 x 25 Gbit/s | - | -| **ADVANCE** | 768 GB | 2,80/3,5 GHz (Gold 6342 o equivalente) | 48 / 96 hilos | 2 x 25 Gbit/s | - | -| **PERFORMANCE 1** | 384 GB | 3,20/3,6 GHz (Xeon E-53I5Y o equivalente) | 16 / 32 hilos | 2 x 25 Gbit/s | - | -| **PERFORMANCE 2** | 768 GB | 3,00/3,6 GHz (Gold 6354 o equivalente) | 36 / 72 hilos | 2 x 25 Gbit/s | - | -| **PERFORMANCE 3** | 1536 GB | 2,60/3,5 GHz (Gold 6348 o equivalente) | 56 / 112 hilos | 2 x 25 Gbit/s | - | -| **PERFORMANCE 4** | 512 GB | 2,50/4,1 GHz (Intel 6426Y o equivalente) | 32 / 64 hilos | 2 x 25 Gbit/s | 2 x NVIDIA L40S 48 GB | +| **ECO** | 384 Go | 2.20/3.0 GHz (Silver 4114 o equivalente) | 20 / 40 hilos | 2 X 10 Gbit/s | - | +| **STANDARD** | 384 Go | 2.40/3.4 GHz (Silver 4314 o equivalente) | 32 / 64 hilos | 2 X 25 Gbit/s | - | +| **ADVANCE** | 768 Go | 2.80/3.5 GHz (Gold 6342 o equivalente) | 48 / 96 hilos | 2 X 25 Gbit/s | - | +| **PERFORMANCE 1** | 384 Go | 3.20/3.6 GHz (Xeon E-53I5Y o equivalente) | 16 / 32 hilos | 2 X 25 Gbit/s | - | +| **PERFORMANCE 2** | 768 Go | 3.00/3.6 GHz (Gold 6354 o equivalente) | 36 / 72 hilos | 2 X 25 Gbit/s | - | +| **PERFORMANCE 3** | 1536 Go | 2.60/3.5 GHz (Gold 6348 o equivalente) | 56 / 112 hilos | 2 X 25 Gbit/s | - | +| **PERFORMANCE 4** | 512 Go | 2.50/4.1 GHz (Intel 6426Y o equivalente) | 32 / 64 hilos | 2 X 25 Gbit/s | 2 x NVIDIA L40S 48Go | -### Notes +### Notas -- **(1)** The amount of memory is the physically available memory on the blades and cannot be modified. -- **(2)** The indicated frequencies correspond to the minimum base frequency and the turbo frequency. -- **(3)** Physical connectivity is shared for network access and block storage access, thanks to a converged Cisco UCS architecture. -- **(4)** Available GPUs evolve according to the latest technologies. As of May 1, 2024, the offering includes NVIDIA LOVELACE L40S GPUs. +- **(1)** La cantidad de memoria es la físicamente disponible en las laminas y no puede modificarse. +- **(2)** Las frecuencias indicadas corresponden a la frecuencia base mínima y a la frecuencia turbo. +- **(3)** La conectividad física es compartida para el acceso a la red y el acceso a almacenamiento en bloque, gracias a una arquitectura convergente Cisco UCS. +- **(4)** Los GPU disponibles evolucionan según las últimas tecnologías. A 1 de mayo de 2024, el producto incluye GPU NVIDIA LOVELACE L40S. -Infrastructure availability is guaranteed at 99.9%, measured monthly, including maintenance windows. Any SLA-related request must be reported via an incident ticket. +La disponibilidad de la infraestructura está garantizada al 99.9%, medida mensualmente, incluidas las ventanas de mantenimiento. Cualquier solicitud relacionada con el SLA debe declararse mediante un ticket de incidencia. + +--- ## Clases de almacenamiento en modo bloque -El almacenamiento en bloque distribuido, basado en **IBM Spectrum Virtualize**, ofrece una gama de rendimientos adaptados a diversos casos de uso: +El almacenamiento en bloque distribuido, basado en **IBM Spectrum Virtualize**, ofrece una gama de rendimiento adaptada a diversos casos de uso: -| Referencia | IOPS/To | Techo máximo IOPS / LUN | Ancho de banda máx / LUN | Uso principal | -|-----------------------------------|-------------------------|-----------------------------------------| -| **FLASH - Esencial** | 500 | Cargas de trabajo ligeras | -| **FLASH - Estándar** | 1500 | Cargas de trabajo estándar | -| FLASH - Premium - 3000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:premium:v1 | -| FLASH - Enterprise - 7500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:enterprise:v1 | -| FLASH - Ultra - 15000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:ultra:v1 | -| **MASS STORAGE - Archivo** | No aplicable | Almacenamiento económico para el archivo| +| Referencia | IOPS/To | Límite máximo de IOPS / Volumen | Ancho de banda máximo / Volumen | Uso principal | +|-----------------------------------|----------------|---------------------------------|---------------------------------|--------------------------------------| +| **FLASH - Esencial** | 500 | 10 000 IOPS | 512 Mo/s | Cargas de trabajo ligeras | +| **FLASH - Estándar** | 1500 | 30 000 IOPS | 1024 Mo/s | Cargas de trabajo estándar | +| **FLASH - Premium** | 3000 | 30 000 IOPS | 1024 Mo/s | Cargas intensivas | +| **FLASH - Enterprise** | 7500 | 30 000 IOPS | 1024 Mo/s | Cargas críticas | +| **FLASH - Ultra** | 15000 | 30 000 IOPS | 1024 Mo/s | Cargas ultra intensivas | +| **ALMACENAMIENTO MASIVO - Archivado** | No aplicable | No garantizado | No garantizado | Almacenamiento económico para archivado | ### Características +- **Rendimiento** : El rendimiento efectivo crece de forma lineal en función de la capacidad asignada (selon le ratio IOPS/To), **dentro del límite de hardware absoluto definido anteriormente**. (Par exemple, un volume de 10 To en classe Ultra sera physiquement limité à 30 000 IOPS et 1024 Mo/s). +- **Tecnología** : Flash NVMe con **RAID 6 distribuido** para una mayor resiliencia. +- **Disponibilidad** : 99.99%, medida mensualmente. +- **Restricciones** : Sin limitación en las lecturas o escrituras. Sin compresión ni deduplicación automatique, garantizando el uso integral de los volúmenes reservados. -- **Tecnología**: Flash NVMe con **RAID distribuido 6** para una mayor resiliencia. -- **Disponibilidad**: 99,99 %, medida mensualmente. -- **Restricciones**: Sin limitaciones en lecturas ni escrituras. Sin compresión ni deduplicación automáticas, garantizando el uso total de los volúmenes reservados. - -### Seguridad y cifrado del almacenamiento en bloques +### Seguridad y Cifrado del Almacenamiento por Bloques -Para garantizar la confidencialidad de sus datos en reposo, toda nuestra infraestructura de almacenamiento en bloques integra un cifrado hardware robusto. +Para garantizar la confidencialidad de sus datos en reposo, toda nuestra infraestructura de almacenamiento por bloques integra un cifrado hardware robusto. -- **Tipo de cifrado**: Los datos se cifran directamente en los discos (`Data At Rest`) utilizando el algoritmo **XTS-AES 256**. -- **Cumplimiento**: Este método de cifrado cumple con la norma **FIPS 140-2**, asegurando un alto nivel de seguridad validado. -- **Funcionamiento**: El cifrado se aplica en el momento de escritura de los datos en el soporte de almacenamiento físico. +- **Tipo de Cifrado** : Los datos se cifran directamente en los discos (`Data At Rest`) utilizando el algoritmo **XTS-AES 256**. +- **Conformidad** : Este método de cifrado cumple con la norma **FIPS 140-2**, garantizando un alto nivel de seguridad validado. +- **Funcionamiento** : El cifrado se aplica en el momento de la escritura de los datos en el soporte de almacenamiento físico. :::warning[Punto de atención sobre la replicación] -Es importante destacar que este cifrado protege los datos almacenados en los discos. No está activo "en tiempo real" (on-the-fly), lo que significa que los datos no se cifran durante las operaciones de replicación de almacenamiento entre las zonas de disponibilidad. La seguridad de los transferencias se garantiza mediante canales de comunicación dedicados y seguros. +Es importante destacar que este cifrado protege los datos almacenados en los discos. No está activo "on-the-fly", lo que significa que los datos no se cifran durante las operaciones de replicación de almacenamiento entre las zonas de disponibilidad. La seguridad de las transferencias está garantizada por canales de comunicación dedicados y seguros. ::: --- -## Acceso a la consola Bare Metal +## Acceso a la Consola Bare Metal -El acceso a los servidores Bare Metal se realiza directamente desde la **consola Cloud Temple**. Esta funcionalidad ofrece un control total sobre el ciclo de vida de los servidores, incluyendo: +El acceso a los servidores Bare Metal se realiza directamente desde la **consola Cloud Temple**. Esta funcionalidad ofrece un control total sobre el ciclo de vida de los servidores, que incluye: - **Acceso KVM**: Una interfaz directa para gestionar los servidores, como si estuviera físicamente en el sitio. -- **Gestión de operaciones comunes**: Posibilidad de realizar acciones como la gestión de alimentaciones, reinicios o incluso el **mapeo de ISO** para la instalación de un sistema operativo. +- **Gestión de operaciones comunes**: Posibilidad de realizar acciones como la gestión de fuentes de alimentación, reinicios o el **montaje de ISO** para la instalación de un sistema operativo. -Este nivel de acceso garantiza una flexibilidad máxima respetando las restricciones de seguridad. +Este nivel de acceso garantiza una flexibilidad máxima, respetando al mismo tiempo las restricciones de seguridad. -## Red network de los servidores Bare Metal +--- + +## Conectividad de red de los servidores Bare Metal -Los servidores Bare Metal cuentan con funciones de red avanzadas. +Los servidores Bare Metal cuentan con funcionalidades de red avanzadas. ### VLAN de nivel 2 -Es posible configurar **VLAN de tipo nivel 2** en las interfaces de red de los servidores Bare Metal. +Es posible configurar **VLAN de tipo nivel 2** en las interfaces de red de los servidores Bare Metal. Los usuarios pueden: -- **Activar el tagging VLAN** para asociar uno o varios VLAN a una misma interfaz. +- **Activar el etiquetado VLAN** para asociar uno o varios VLAN a una misma interfaz. - **Propagar los VLAN** directamente en las interfaces de red de los servidores. -### Aggregation of network interfaces +### Agregación de interfaces de red -Each server is equipped with **two network interfaces**. These interfaces can be used independently or combined to achieve better performance and redundancy: +Cada servidor está equipado con **dos interfaces de red**. Estas interfaces pueden utilizarse de forma independiente o combinadas para obtener un mejor rendimiento y redundancia : ### Rendimiento de red -El rendimiento de las interfaces de red está directamente relacionado con la clase de servidor seleccionada. Por ejemplo: +El rendimiento de las interfaces de red está directamente relacionado con la clase de la tarjeta blade seleccionada. Ejemplo: + +- Las tarjetas **ECO** ofrecen una conectividad de 2 x 10 Gbit/s. +- Las tarjetas **STANDARD** y superiores cuentan con una conectividad de 2 x 25 Gbit/s. -- Los servidores **ECO** ofrecen una conectividad de 2 x 10 Gbit/s. -- Los servidores **STANDARD** y superiores disponen de una conectividad de 2 x 25 Gbit/s. +Estas opciones de red garantizan una conectividad fiable, flexible y adaptada a una variedad de cargas de trabajo profesionales. -Estas opciones de red garantizan una conectividad fiable, flexible y adecuada para una variedad de cargas de trabajo profesionales. +--- \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/iaas_bare-metal/iaas_bare-metal.md b/i18n/es/docusaurus-plugin-content-docs/current/iaas_bare-metal/iaas_bare-metal.md index 63a759a0..263f0290 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/iaas_bare-metal/iaas_bare-metal.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/iaas_bare-metal/iaas_bare-metal.md @@ -2,22 +2,24 @@ title: Visión general --- -La oferta __Bare Metal__ de Cloud Temple propone servidores dedicados, completamente personalizables, para responder a las necesidades de los clientes que buscan total autonomía en su infraestructura. +# Metal desnudo -Concebida alrededor de las tecnologías de vanguardia Cisco UCS para el cálculo e IBM Spectrum Virtualize/FlashSystem para el almacenamiento, esta solución garantiza un rendimiento óptimo y una fiabilidad ejemplar. +El producto __Metal desnudo__ de Cloud Temple ofrece servidores dedicados, totalmente personalizables, para satisfacer las necesidades de los clientes que buscan una autonomía total sobre su infraestructura. -Con __Bare Metal__, usted disfruta de un material exclusivo, sin compartición, permitiéndole instalar y gestionar el entorno software de su elección: hipervisor, Linux, Windows u otros. +Diseñada en torno a las tecnologías de vanguardia Cisco UCS para el cálculo y IBM Spectrum Virtualize/FlashSystem para el almacenamiento, esta solución garantiza un rendimiento óptimo y una fiabilidad ejemplar. -El acceso directo a sus servidores se realiza a través de la consola Cloud Temple, ofreciendo una gestión simplificada y una puesta en marcha inmediata. Ya sea que busque una infraestructura para sus aplicaciones críticas o recursos materiales para sus proyectos específicos, la oferta Bare Metal le asegura flexibilidad, control total y rendimiento sin igual. +Con __Metal desnudo__, dispone de un hardware exclusivo, sin compartición, que le permite instalar y gestionar el entorno de software de su elección: hipervisor, Linux, Windows u otros. + +El acceso directo a sus servidores se realiza a través de la consola Cloud Temple, lo que ofrece una gestión simplificada y una puesta en marcha inmediata. Ya sea que busque una infraestructura para sus aplicaciones críticas o recursos de hardware para sus proyectos específicos, el producto Metal desnudo le garantiza flexibilidad, control total y un rendimiento inigualable.

Conceptos

-

Descubra las bases y principios esenciales para comprender y dominar nuestra infraestructura.

+

Descubra los fundamentos y principios esenciales para comprender y dominar nuestra infraestructura.

Explorar los conceptos →
-

Quickstart

+

Inicio rápido

Comience rápidamente con nuestros recursos siguiendo instrucciones claras y sencillas.

Iniciar el Quickstart →
@@ -31,10 +33,10 @@ El acceso directo a sus servidores se realiza a través de la consola Cloud Temp ## Plataformas de compra
-

¿Es un actor del sector público? La oferta Bare Metal está disponible a través de:

+

¿Es usted un actor del sector público? El producto Bare Metal está disponible a través de:

@@ -54,4 +56,4 @@ El acceso directo a sus servidores se realiza a través de la consola Cloud Temp Más información → -
+
\ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/iaas_bare-metal/quickstart.md b/i18n/es/docusaurus-plugin-content-docs/current/iaas_bare-metal/quickstart.md index 619495e6..485b711f 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/iaas_bare-metal/quickstart.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/iaas_bare-metal/quickstart.md @@ -6,67 +6,75 @@ import shivaBareMetalList from '@site/docs/iaas_bare-metal/images/shiva_bare-met import shivaBareMetalDetails from '@site/docs/iaas_bare-metal/images/shiva_bare-metal_details.png' import shivaBareMetalStoragelist from '@site/docs/iaas_bare-metal/images/shiva_bare-metal_storagelist.png' -# Guía Rápida para la oferta Bare Metal +# QuickStart para la oferta Bare Metal -Esta página le guiará a través de los pasos iniciales para utilizar la oferta **Bare Metal** desde la consola Cloud Temple. Siga estas instrucciones para conocer los menús y funcionalidades disponibles. +Esta página le guía a través de los pasos iniciales para utilizar la oferta **Bare Metal** desde la consola Cloud Temple. Siga estas instrucciones para explorar los menús y las funcionalidades disponibles. --- -## Requis previos +## Requisitos previos -Antes de comenzar, asegúrese de cumplir los siguientes puntos: +Antes de comenzar, asegúrese de lo siguiente: -1. **Suscripción activa**: Su organización debe tener suscrito el servicio Bare Metal. -2. **Permisos de usuario**: Su cuenta de usuario debe contar con los permisos necesarios para acceder y gestionar los recursos Bare Metal. +1. **Suscripción activada** : Su organización debe haberse suscrito a la oferta Bare Metal. +2. **Permisos de usuario** : Su cuenta de usuario debe tener los permisos necesarios para acceder y gestionar los recursos Bare Metal. + +--- ## Acceso a la interfaz Bare Metal -Una vez activada la suscripción y configuradas las permisos, aparece un nuevo menú denominado **Bare Metal** en la consola Cloud Temple. Este menú contiene dos submenús principales: **Bare Metal** y **Volumes**. +Una vez activada la suscripción y configurados los permisos, aparece un nuevo menú titulado **Bare Metal** en la consola Cloud Temple. Este menú contiene dos submenús principales: **Bare Metal** y **Volúmenes**. +--- + ### 1. Submenú **Bare Metal** -El submenú **Bare Metal** le presenta una tabla que muestra todas las instancias Bare Metal disponibles. Esta tabla incluye la información principal para cada instancia: +El submenú **Bare Metal** muestra una tabla que lista todas las instancias Bare Metal disponibles. Esta tabla incluye la información principal para cada instancia: - **Nombre del Bare Metal** - **Estado** -- **Configuración hardware** +- **Configuración de hardware** - **Dirección IP** #### Funcionalidades principales -- **Botón Acción**: Permite acceder directamente a la consola de administración del Bare Metal. -- **Nombre clicable**: Al hacer clic en el nombre de una instancia Bare Metal, se abre una nueva página con los **detalles completos** de la instancia: +- **Botón Acción** : Permite acceder directamente a la consola de administración del Bare Metal. +- **Nombre clicable** : Al hacer clic en el nombre de una instancia de Bare Metal, se muestra una nueva página con los **detalles completos** de la instancia : - Información sobre el hardware (RAM, CPU, GPU, etc.). - Configuración de red (direcciones IP asociadas). - Información de conectividad para la gestión. -### 2. Submenú **Volumes** +--- + +### 2. Submenú **Volúmenes** -El submenú **Volumes** muestra una tabla que lista todos los volúmenes de almacenamiento asociados a su suscripción Bare Metal. Para cada volumen, las siguientes informaciones están disponibles: +El submenú **Volúmenes** muestra una tabla que lista todos los volúmenes de almacenamiento asociados a su suscripción Bare Metal. Para cada volumen, se dispone de la siguiente información: - **Nombre del volumen** - **Capacidad** -- **Clase de rendimiento** (IOPS por To) -- **Estado** (Disponible, En despliegue, etc.) +- **Clase de rendimiento** (IOPS par To) +- **Estado** (Disponible, En cours de déploiement, etc.) -:::info[Volumen BFS (Inicio desde SAN)] -El **Volumen 1** es el volumen **BFS (Inicio desde SAN)** y debe utilizarse para instalar el sistema operativo. +:::info[Volume BFS (Boot from SAN)] +El **Volume 1** es el volumen **BFS (Boot from SAN)** y debe utilizarse para instalar el sistema operativo. -**Importante:** Este volumen no es compartible con otros servidores Bare Metal de la misma zona de disponibilidad (AZ). +**Importante:** Este volumen no es compartible con los demás Bare Metal de la misma zona de disponibilidad (AZ). ::: :::tip[Mejor práctica] -Prefiera instalar el SO en el volumen **BFS**, y almacene sus datos en un volumen **LUN** adicional. Esta separación facilita la mantenimiento, las copias de seguridad y la reinstalación del sistema si fuera necesario. +Priorice la instalación del SO en el volumen **BFS**, y almacene sus datos en un volumen **LUN** adicional. Esta separación facilita el mantenimiento, las copias de seguridad y la reinstalación del sistema si es necesario. ::: #### Funcionalidades principales -- **Gestión de volúmenes**: Desde esta tabla, puede asignar volúmenes a sus instancias Bare Metal. +- **Gestión de volúmenes** : Desde este panel, puede asignar los volúmenes a sus instancias Bare Metal. + +--- \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/iaas_bare-metal/tutorials.md b/i18n/es/docusaurus-plugin-content-docs/current/iaas_bare-metal/tutorials.md index 90d52e41..0572a50e 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/iaas_bare-metal/tutorials.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/iaas_bare-metal/tutorials.md @@ -1,9 +1,11 @@ + + --- title: Tutoriales ---

Tutoriales

-

No hay ningún tutorial disponible por el momento, pero estamos trabajando activamente en ello. ¡Vuelve pronto para más información!

- Acceder a la página de inicio → -
+

No hay ningún tutorial disponible por el momento, pero estamos trabajando activamente en ello. ¡Vuelva pronto para saber más!

+ Ir a la página de inicio → + \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md b/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md index f5e16095..412b0225 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md @@ -1,28 +1,28 @@ --- -title: Concepts +title: Conceptos --- -The __IaaS (Infrastructure as a Service)__ offering from Cloud Temple is designed to meet the critical needs of business continuity and disaster recovery, with a particular focus on demanding sectors such as industry, banking, and insurance. Built on cutting-edge technologies, this infrastructure ensures maximum availability and optimal performance for your critical workloads. +La oferta __IaaS (Infrastructure As A Service)__ de Cloud Temple está diseñada para satisfacer las necesidades críticas de continuidad y recuperación de la actividad, con un enfoque particular en los sectores exigentes como la industria, la banca y los seguros. Basada en tecnologías de vanguardia, esta infraestructura garantiza una disponibilidad máxima y un rendimiento óptimo para sus cargas de trabajo críticas. ## Una plataforma tecnológica de confianza -La plataforma IaaS de Cloud Temple se apoya en socios tecnológicos de renombre internacional: +La plataforma IaaS de Cloud Temple se apoya en socios tecnológicos de renombre internacional : -- Cálculo: __CISCO UCS__. -- Almacenamiento: __IBM Spectrum Virtualize__, __IBM FlashSystem__ para almacenamiento en bloques, y __DELL ECS__ para almacenamiento objeto. -- Red: __JUNIPER__. -- Virtualización: __Pila de código abierto__, ofreciendo una base fiable y probada para gestionar sus entornos en la nube. +- Cálculo : __CISCO UCS__. +- Almacenamiento : __IBM Spectrum Virtualize__, __IBM FlashSystem__ para almacenamiento de bloques, y __DELL ECS__ para almacenamiento de objetos. +- Red : __JUNIPER__. +- Virtualización : __Stack Opensource__, que ofrece una base fiable y probada para gestionar sus entornos cloud. -Esta arquitectura se basa en el modelo __VersaStack__, una alianza entre Cisco e IBM, garantizando una compatibilidad amplia con los principales editores de software. +Esta arquitectura se basa en el modelo __VersaStack__, una alianza entre Cisco e IBM, que garantiza una amplia compatibilidad con los principales editores de software. -## A dedicated and automated infrastructure +## Una infraestructura dedicada y automatizada -Although fully automated through APIs and a Terraform provider, Cloud Temple's IaaS offering provides a unique infrastructure: +Aunque totalmente automatizada gracias a APIs y un proveedor de Terraform, el producto IaaS de Cloud Temple ofrece una infraestructura única: -- __Dedicated resources__: Compute blades, storage volumes, and software stacks (virtualization, backup, firewalling, etc.) are never shared among clients. -- __Maximum predictability__: You control virtualization rates, IOPS pressure on storage, and benefit from clear, consumption-based monthly billing. +- __Recursos dedicados__ : Los nodos de cálculo, volúmenes de almacenamiento y stacks de software (virtualización, copias de seguridad, firewall, etc.) nunca se comparten entre los clientes. +- __Predictibilidad máxima__ : Usted controla los ratios de virtualización, la presión de IOPS en el almacenamiento y cuenta con una facturación clara, basada en el consumo mensual. -The platform is certified __SecNumCloud__ by the [ANSSI](https://www.ssi.gouv.fr/), ensuring a high level of automation and security. +La plataforma está certificada __SecNumCloud__ por la [ANSSI](https://www.ssi.gouv.fr/), garantizando un alto nivel de automatización y seguridad. ## Principales funcionalidades @@ -31,121 +31,126 @@ The platform is certified __SecNumCloud__ by the [ANSSI](https://www.ssi.gouv.fr - Recursos de red (Internet, redes privadas). - Copias de seguridad cruzadas con retención configurable. - Replicación asíncrona para almacenamiento o máquinas virtuales. -- Gestión mediante la [Consola](../console/console.md) o en modo Infraestructura como Código gracias a las APIs y al provider de Terraform. +- Gestión mediante la [Consola](../console/console.md) o en modo Infraestructura como Código gracias a las APIs y al proveedor de Terraform. ## Ventajas -| Ventaja | Descripción | +| Ventaja | Descripción | |---------------------|------------------------------------------------------------------------------------------------------------------------------------------------| -| Confianza digital | Almacenamiento de datos en Francia y cumplimiento del RGPD. | -| Seguridad | Plataforma altamente segura, certificada __SecNumCloud__, __HDS__ (Almacenamiento de Datos de Salud), __ISO 27001__ e __ISAE 3402 tipo II__. | -| Alta disponibilidad | Tasa de disponibilidad de la plataforma del 99,99 %, medida mensualmente, incluyendo las ventanas de mantenimiento. | -| Resiliencia | Implementación de planes de continuidad o recuperación de actividad según las necesidades. | -| Automatización | Plataforma completamente automatizada diseñada para integrarse en un programa de transformación digital. | -| Por demanda | Recursos disponibles bajo demanda. | +| Confianza digital | Alojamiento de datos en Francia y cumplimiento del RGPD. | +| Seguridad | Plataforma altamente segura, certificada __SecNumCloud__, __HDS__ (Hébergement des Données de Santé), __ISO 27001__ e __ISAE 3402 tipo II__. | +| Alta disponibilidad | Tasa de disponibilidad de la plataforma del 99,99%, medida mensualmente, incluidos los períodos de mantenimiento. | +| Resiliencia | Implementación de planes de continuidad o de recuperación ante desastres según las necesidades. | +| Automatización | Plataforma totalmente automatizada diseñada para integrarse en un programa de transformación digital. | +| Bajo demanda | Recursos disponibles bajo demanda. | -## Regions and Availability Zones +## Regiones y zonas de disponibilidad -The OpenIaaS product is deployed within an availability zone. -An availability zone is part of a region. +El producto OpenIaaS se despliega en una zona de disponibilidad. +Una zona de disponibilidad forma parte de una región. -This deployment model allows you to choose the location of clusters and distribute them across different availability zones (AZ). -This provides better load distribution, maximizes redundancy, and facilitates the implementation of a disaster recovery plan (DRP) in the event of an incident. +Este tipo de despliegue permite elegir la ubicación de los clústeres y distribuirlos entre diferentes zonas de disponibilidad (AZ). +Esto ofrece una mejor distribución de la carga, maximiza la redundancia y facilita la implementación de un plan de recuperación ante desastres (DRP) en caso de incidente. -## Clases de servidores de cálculo +--- + +## Clases de blades de cálculo -Las máquinas de cálculo disponibles para la oferta Bare Metal ofrecen una gama de rendimientos para satisfacer diversas necesidades: +Las blades de cálculo disponibles para la oferta Bare Metal ofrecen una gama de rendimiento para satisfacer diversas necesidades: -| Referencia | RAM __(1)__ | Frecuencia __(2)__ | Número de núcleos / hilos | Conectividad __(3)__ | GPU __(4)__ | -|------------------------|--------------|--------------------------------------------|----------------------------|-----------------------|----------------------| -| __ECO__ | 384 GB | 2.20/3.0 GHz (Silver 4114 o equivalente) | 20 / 40 hilos | 2 x 10 Gbit/s | - | -| __STANDARD__ | 384 GB | 2.40/3.4 GHz (Silver 4314 o equivalente) | 32 / 64 hilos | 2 x 25 Gbit/s | - | -| __ADVANCE__ | 768 GB | 2.80/3.5 GHz (Gold 6342 o equivalente) | 48 / 96 hilos | 2 x 25 Gbit/s | - | -| __PERFORMANCE 1__ | 384 GB | 3.20/3.6 GHz (Xeon E-53I5Y o equivalente) | 16 / 32 hilos | 2 x 25 Gbit/s | - | -| __PERFORMANCE 2__ | 768 GB | 3.00/3.6 GHz (Gold 6354 o equivalente) | 36 / 72 hilos | 2 x 25 Gbit/s | - | -| __PERFORMANCE 3__ | 1536 GB | 2.60/3.5 GHz (Gold 6348 o equivalente) | 56 / 112 hilos | 2 x 25 Gbit/s | - | -| __PERFORMANCE 4__ | 512 GB | 2.50/4.1 GHz (Intel 6426Y o equivalente) | 32 / 64 hilos | 2 x 25 Gbit/s | 2 x NVIDIA L40S 48GB | +| Référence | RAM __(1)__ | Fréquence __(2)__ | Nombre de cœurs / threads | Connectivité __(3)__ | GPU __(4)__ | +|-----------------------|--------------|-------------------------------------------|---------------------------|----------------------|----------------------| +| __ECO__ | 384 GB | 2.20/3.0 GHz (Silver 4114 ou équivalent) | 20 / 40 hilos | 2 X 10 Gbit/s | - | +| __STANDARD__ | 384 GB | 2.40/3.4 GHz (Silver 4314 ou équivalent) | 32 / 64 hilos | 2 X 25 Gbit/s | - | +| __ADVANCE__ | 768 GB | 2.80/3.5 GHz (Gold 6342 ou équivalent) | 48 / 96 hilos | 2 X 25 Gbit/s | - | +| __PERFORMANCE 1__ | 384 GB | 3.20/3.6 GHz (Xeon E-53I5Y ou équivalent) | 16 / 32 hilos | 2 X 25 Gbit/s | - | +| __PERFORMANCE 2__ | 768 GB | 3.00/3.6 GHz (Gold 6354 ou équivalent) | 36 / 72 hilos | 2 X 25 Gbit/s | - | +| __PERFORMANCE 3__ | 1536 GB | 2.60/3.5 GHz (Gold 6348 ou équivalent) | 56 / 112 hilos | 2 X 25 Gbit/s | - | +| __PERFORMANCE 4__ | 512 GB | 2.50/4.1 GHz (Intel 6426Y ou équivalent) | 32 / 64 hilos | 2 X 25 Gbit/s | 2 x NVIDIA L40S 48 GB | -### Notes +### Notas -- __(1)__ The amount of memory is the physically available memory on the blades and cannot be modified. -- __(2)__ The frequencies indicated correspond to the minimum base frequency and the turbo frequency. -- __(3)__ Physical connectivity is shared for network access and block storage access, thanks to a converged Cisco UCS architecture. -- __(4)__ Available GPUs evolve according to the latest technologies. As of May 1, 2024, the offering includes NVIDIA LOVELACE L40S GPUs. -- __(5)__ High availability on a cluster is available only with 2 or more nodes. +- __(1)__ La cantidad de memoria es la físicamente disponible en las láminas y no puede modificarse. +- __(2)__ Las frecuencias indicadas corresponden a la frecuencia base mínima y a la frecuencia turbo. +- __(3)__ La conectividad física se comparte para el acceso a la red y al almacenamiento en bloque, gracias a una arquitectura convergente Cisco UCS. +- __(4)__ Los GPU disponibles evolucionan en función de las últimas tecnologías. Al 1 de mayo de 2024, el producto incluye GPU NVIDIA LOVELACE L40S. +- __(5)__ La alta disponibilidad en un clúster está disponible únicamente a partir de 2 nodos. -Infrastructure availability is guaranteed at 99.9%, measured monthly, including maintenance windows. Any SLA-related request must be reported via an incident ticket. +La disponibilidad de la infraestructura está garantizada al 99.9%, medida mensualmente, incluidas las ventanas de mantenimiento. Cualquier solicitud relacionada con el SLA debe declararse mediante un ticket de incidencia. + +--- ## Clases de almacenamiento en modo bloque -El almacenamiento en bloque distribuido, basado en __IBM Spectrum Virtualize__, ofrece una gama de rendimientos adecuada para diversos casos de uso: +El almacenamiento en bloque distribuido, basado en __IBM Spectrum Virtualize__, ofrece una gama de rendimiento adaptada a diversos casos de uso: -| Referencia | IOPS/To | Techo máximo IOPS / LUN | Ancho de banda máx / LUN | Uso principal | -|-----------------------------------|-------------------------|-----------------------------------------| -| __FLASH - Esencial__ | 500 | Cargas de trabajo ligeras | -| __FLASH - Estándar__ | 1500 | Cargas de trabajo estándar | -| FLASH - Premium - 3000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:premium:v1 | -| FLASH - Enterprise - 7500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:enterprise:v1 | -| FLASH - Ultra - 15000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:ultra:v1 | -| __MASS STORAGE - Archivo__ | No aplicable | Almacenamiento económico para el archivo| +| Referencia | IOPS/To | Límite máximo de IOPS / Volumen | Ancho de banda máximo / Volumen | Uso principal | +|-----------------------------------|----------------|---------------------------------|---------------------------------|--------------------------------------| +| **FLASH - Esencial** | 500 | 10 000 IOPS | 512 Mo/s | Cargas de trabajo ligeras | +| **FLASH - Estándar** | 1500 | 30 000 IOPS | 1024 Mo/s | Cargas de trabajo estándar | +| **FLASH - Premium** | 3000 | 30 000 IOPS | 1024 Mo/s | Cargas intensivas | +| **FLASH - Enterprise** | 7500 | 30 000 IOPS | 1024 Mo/s | Cargas críticas | +| **FLASH - Ultra** | 15000 | 30 000 IOPS | 1024 Mo/s | Cargas ultra intensivas | +| **ALMACENAMIENTO MASIVO - Archivado** | No aplicable | No garantizado | No garantizado | Almacenamiento económico para archivado | ### Características -- __Tecnología__: Flash NVMe con __RAID distribuido 6__ para una mayor resiliencia. -- __Disponibilidad__: 99,99 %, medida mensualmente. -- __Restricciones__: Sin limitaciones en lecturas ni escrituras. Sin compresión ni deduplicación automáticas, garantizando el uso total de los volúmenes reservados. +- **Rendimiento** : El rendimiento efectivo crece de manera lineal en función del volumen asignado (según la relación IOPS/TB), **dentro del límite absoluto de hardware definido anteriormente**. (Por ejemplo, un volumen de 10 TB en la clase Ultra estará físicamente limitado a 30 000 IOPS y 1024 MB/s). +- __Tecnología__ : Flash NVMe con __RAID 6 Distribuido__ para una mayor resiliencia. +- __Disponibilidad__ : 99.99%, medida mensualmente. +- __Restricciones__ : Sin limitación en las lecturas o escrituras. Sin compresión ni deduplicación automática, garantizando el uso integral de los volúmenes reservados. -### Seguridad y cifrado del almacenamiento en bloques +### Seguridad y Cifrado del Almacenamiento de Bloques -Para garantizar la confidencialidad de sus datos en reposo, toda nuestra infraestructura de almacenamiento en bloques integra un cifrado hardware robusto. +Para garantizar la confidencialidad de sus datos en reposo, toda nuestra infraestructura de almacenamiento de bloques integra un cifrado hardware robusto. -- __Tipo de cifrado__: Los datos se cifran directamente en los discos (`Data At Rest`) utilizando el algoritmo __XTS-AES 256__. -- __Cumplimiento__: Este método de cifrado cumple con la norma __FIPS 140-2__, asegurando un alto nivel de seguridad validado. -- __Funcionamiento__: El cifrado se aplica en el momento de escritura de los datos en el soporte de almacenamiento físico. +- __Tipo de Cifrado__ : Los datos se cifran directamente en los discos (`Data At Rest`) utilizando el algoritmo __XTS-AES 256__. +- __Conformidad__ : Este método de cifrado cumple con la norma __FIPS 1-40-2__, garantizando un alto nivel de seguridad validado. +- __Funcionamiento__ : El cifrado se aplica en el momento de la escritura de los datos en el soporte de almacenamiento físico. :::warning[Punto de atención sobre la replicación] -Es importante destacar que este cifrado protege los datos almacenados en los discos. No está activo "en tiempo real" (on-the-fly), lo que significa que los datos no se cifran durante las operaciones de replicación de almacenamiento entre las zonas de disponibilidad. La seguridad de los transferencias se garantiza mediante canales de comunicación dedicados y seguros. +Es importante destacar que este cifrado protege los datos almacenados en los discos. No está activo "on-the-fly", lo que significa que los datos no se cifran durante las operaciones de replicación de almacenamiento entre las zonas de disponibilidad. La seguridad de las transferencias está garantizada por canales de comunicación dedicados y seguros. ::: --- -## Redes +## Las redes -El producto OpenIaaS es compatible con [redes privadas](../network/private_network) y [acceso a Internet](../network/internet). +El producto OpenIaaS es compatible con [las redes privadas](../network/private_network) y [el acceso a internet](../network/internet). -Desde la configuración de una máquina virtual, están disponibles dos tipos de redes. +Dos tipos de redes están disponibles desde la configuración de una máquina virtual. -### VLAN-type networks +### Las redes de tipo VLAN -VLAN-type networks must be deployed at a rate of one VLAN per network interface card. If you want to use multiple networks, simply create multiple network interface cards. +Las redes de tipo VLAN deben asignarse a razón de un VLAN por tarjeta de red. Si desea utilizar varias redes, basta con crear varias tarjetas de red. -A limitation exists regarding the maximum number of network cards that can be created on a VM, which is 7. +Existe una limitación en el número máximo de tarjetas que se pueden crear en una VM, y es de 7. -### VLAN Trunk +### La Troncal VLAN -En caso de que debas propagar más de 7 VLANs, debes utilizar el VLAN Trunk. -El VLAN Trunk permite pasar todos tus VLANs a través de una sola tarjeta. La configuración de los ID de VLAN se realiza mediante interfaces virtuales del tipo VLAN desde el sistema operativo de la VM. Los ID de VLAN son los mismos que los que aparecen y se pueden ver desde la consola. +En el caso de que deba propagar más de 7 VLANs, debe utilizar la Troncal VLAN. +La Troncal VLAN permite el paso de todas sus VLANs a través de una sola tarjeta. La configuración de los ID de VLAN debe realizarse mediante interfaces virtuales de tipo VLAN desde el sistema operativo de la VM. Los ID de VLAN son los mismos que los presentes y visibles desde la consola. ## Copia de seguridad de máquinas virtuales -La oferta OpenIaaS incluye una __arquitectura nativa y no desactivable de copia de seguridad distribuida__, requisito obligatorio en el marco de la cualificación francesa SecNumCloud. +La oferta OpenIaaS integra __una arquitectura de copia de seguridad distribuida nativa y no desactivable__, elemento obligatorio en el marco de la certificación SecNumCloud francesa. -Las copias de seguridad se almacenan en el [Almacenamiento Objeto cualificado SecNumCloud](../storage/oss), garantizando una protección óptima en caso de fallo grave en el centro de datos de producción. Este enfoque permite restaurar los datos en un centro de datos secundario, incluso en incidentes críticos como incendios. +Las copias de seguridad se almacenan en el [Almacenamiento de Objetos certificado SecNumCloud](../storage/oss), garantizando una protección óptima en caso de fallo grave del centro de datos de producción. Este enfoque permite restaurar sus datos en un centro de datos secundario, incluso en caso de un incidente crítico como un incendio. ### Servicios de protección de datos disponibles | Servicio | Descripción | |---|---| -| **Copia de seguridad incremental (Agentless)** | Copia de seguridad sin agente mediante los mecanismos nativos del hipervisor, hacia un repositorio S3 remoto. | -| **Copia de seguridad de metadatos** | Protección de las configuraciones del pool de virtualización y del orquestador de copias de seguridad — indispensable para la recuperación ante desastres. | -| **Restauración granular** | Restauración a nivel de VM completa, disco virtual individual o archivo unitario. | -| **Descarga S3 Multi-AZ** | Externalización hacia el almacenamiento de objetos S3 de Cloud Temple replicado entre zonas de disponibilidad. | +| **Copia de seguridad incremental (Agentless)** | Copia de seguridad sin agente a través de los mecanismos nativos del hipervisor, hacia un repositorio S3 remoto. | +| **Copia de seguridad de metadatos** | Protección de las configuraciones del grupo de virtualización y del orquestador de copias de seguridad — indispensable para la Recuperación ante Desastres. | +| **Restauración granular** | Restauración posible a nivel de VM completa, disco virtual individual o archivo unitario. | +| **Offloading S3 Multi-AZ** | Externalización al almacenamiento de objetos S3 Cloud Temple replicado entre zonas de disponibilidad. | -Las velocidades de copia de seguridad y restauración dependen de la tasa de cambio en los entornos. La política de copia de seguridad es completamente configurable desde [la Consola Cloud Temple](../console/console.md) para cada máquina virtual. +Las velocidades de copia de seguridad y restauración dependen de la tasa de cambio en los entornos. La política de copia de seguridad es totalmente configurable desde [la Consola Cloud Temple](../console/console.md) para cada máquina virtual. -| Referencia | Unidad | Techo máximo IOPS / LUN | Ancho de banda máx / LUN | SKU | -|---|---|---| -| BACKUP - Acceso al servicio | 1 VM | csp:(region):openiaas:backup:vm:v1 | +| Referencia | Unidad | SKU | +| ---------------------------------------------| ----- | ------------------------------ | +| COPIA DE SEGURIDAD - Acceso al servicio | 1 VM | csp:(region):openiaas:backup:vm:v1 | --- @@ -153,72 +158,76 @@ Las velocidades de copia de seguridad y restauración dependen de la tasa de cam #### Visión general -La arquitectura se basa en una separación estricta entre el **plano de control** (orquestador de copias de seguridad) y el **plano de datos** (almacenamiento S3 remoto): el orquestador está alojado en el clúster de gestión de Cloud Temple (separado e inaccesible para el cliente), mientras que los datos de copia de seguridad se almacenan en un repositorio S3 remoto, físicamente separado de la infraestructura de producción. Los datos se transmiten cifrados entre ambos componentes mediante HTTPS/TLS 1.3. +La arquitectura se basa en una separación estricta entre el **plano de control** y el **plano de datos**: el orquestador de copias de seguridad se aloja en el cluster de gestión de Cloud Temple (distinto e inaccesible para el cliente), mientras que los datos de copia de seguridad se almacenan en un repositorio S3 remoto, físicamente separado de la infraestructura de producción. Los datos se transmiten cifrados entre ambos componentes. #### Orquestador de copias de seguridad -El orquestador se despliega en el clúster de gestión de Cloud Temple, **inaccesible directamente para el cliente**. Coordina todos los trabajos de copia de seguridad y gestiona el cifrado. +El orquestador se despliega en el clúster de gestión de Cloud Temple, **inaccesible directamente para el cliente**. Orquesta todos los trabajos de copia de seguridad y gestiona el cifrado. -- **Políticas estándar**: se aplican políticas de copia de seguridad por defecto a cada tenant. -- **Políticas personalizadas**: el cliente puede solicitar frecuencias o retenciones específicas mediante un ticket de soporte en la consola de Cloud Temple. +- **Políticas estándar** : se aplican políticas de copia de seguridad por defecto a cada tenant. +- **Políticas personalizadas** : el cliente puede solicitar frecuencias o retenciones específicas mediante un ticket de soporte en la consola de Cloud Temple. -#### Almacenamiento S3 remoto +#### Almacenamiento remoto S3 -Las copias de seguridad se envían al [Almacenamiento Objeto cualificado SecNumCloud](../storage/oss) de Cloud Temple, con replicación Multi-AZ para garantizar la resiliencia ante la pérdida de un sitio físico completo. +Las copias de seguridad se envían al [Almacenamiento de Objetos certificado SecNumCloud](../storage/oss) de Cloud Temple, con replicación Multi-AZ para garantizar la resiliencia frente a la pérdida de un sitio físico completo. --- -### Mecanismo de copia de seguridad: Backup Incremental +### Mecanismo de copia de seguridad: Incremental Backup El servicio utiliza un modo de copia de seguridad **incremental**. Este modo apunta a un **Backup Repository** (el almacenamiento S3 remoto) y nunca exporta una copia de seguridad completa después de la primera: solo se transfieren los **bloques de datos modificados** en cada ciclo. :::info[Copia de seguridad incremental vs Replicación] -La **copia de seguridad incremental** apunta a un repositorio S3 remoto y está optimizada para la **protección a largo plazo**. No debe confundirse con la **replicación** (Disaster Recovery en caliente) que apunta a un Storage Repository local — este modo está cubierto por la funcionalidad de [replicación de máquinas virtuales](#replicación-de-máquinas-virtuales). +La **copia de seguridad incremental** apunta a un repositorio S3 remoto y está optimizada para la **protección a largo plazo**. No debe confundirse con la **replicación** (Recuperación ante Desastres en caliente) que apunta a un Storage Repository local — este modo está cubierto por la funcionalidad de [réplication de machines virtuelles](#réplication-de-machines-virtuelles). ::: #### Ciclo de vida técnico de una copia de seguridad incremental -**1. Creación del snapshot local (Fuente)** +A continuación se muestran las etapas sucesivas que se activan en cada ejecución de un trabajo de copia de seguridad: + +**1. Creación de la instantánea local (Source)** -Al inicio del trabajo, el orquestador solicita al hipervisor que cree un snapshot de la VM. Este snapshot sirve como punto de comparación para calcular el delta respecto al snapshot de referencia anterior. +Al iniciar el trabajo, el orquestador solicita al hipervisor que cree una instantánea de la VM. Esta instantánea sirve como punto de comparación para calcular el delta con respecto a la instantánea de referencia anterior. **2. Exportación diferencial mediante Changed Block Tracking (CBT)** -El orquestador compara el nuevo snapshot con el snapshot de referencia anterior usando metadatos CBT. Solo se extraen los bloques de datos que han cambiado desde la última copia de seguridad. +El orquestador compara la nueva instantánea con la instantánea de referencia anterior mediante los metadatos CBT. Solo se extraen los bloques de datos que han cambiado desde la última copia de seguridad, no el disco completo. **3. Cifrado y transferencia a S3** -Los bloques modificados se **cifran al vuelo por el orquestador** y luego se envían mediante HTTPS/TLS 1.3 al bucket S3 remoto. +Los bloques modificados son **cifrados en tiempo real por el orquestador** y luego enviados a través de HTTPS/TLS 1.3 hacia el bucket S3 remoto. -**4. Rotación de snapshots (Coalesce)** +**4. Rotación de instantáneas (Coalesce)** -Una vez validada la transferencia, el antiguo snapshot de referencia se elimina y el nuevo snapshot se convierte en la referencia para el próximo ciclo. El hipervisor desencadena entonces un proceso de **coalesce** (fusión). +Una vez validada la transferencia, se elimina la antigua instantánea de referencia y la nueva instantánea se convierte en la referencia para el siguiente ciclo. El hipervisor activa entonces un proceso de **coalesce** (fusion) para reintegrar los datos del antiguo delta en la cadena de discos virtuales. -:::warning[Impacto en I/O del Coalesce] -La operación de coalesce es **intensiva en I/O** sobre el almacenamiento de producción. Se desencadena automáticamente tras cada copia de seguridad exitosa. Se recomienda planificar las ventanas de copia de seguridad durante períodos de baja carga aplicativa. +:::warning[Impact I/O du Coalesce] +La operación de coalesce es **intensiva en E/S** en el almacenamiento de producción. Se activa automáticamente después de cada copia de seguridad exitosa. Se recomienda programar las ventanas de copia de seguridad durante los períodos de baja carga de aplicaciones. ::: **5. Gestión de la retención en S3 (Merge) y Key Backup Interval** -En el almacenamiento S3, el orquestador gestiona la rotación de copias de seguridad fusionando los deltas antiguos. Una copia de seguridad completa se **fuerza periódicamente** (típicamente cada 20 incrementos — *Key Backup Interval*). +En el almacenamiento S3, el orquestador gestiona la rotación de las copias de seguridad mediante la **fusión** (*merge*) de los antiguos deltas en la copia de seguridad completa más antigua conservada según la política de retención. + +Para garantizar la integridad de la cadena de copias de seguridad, una copia de seguridad completa se **fuerza periódicamente** (típicamente cada 20 incrementos — *Key Backup Interval*). Esto crea un nuevo punto de partida limpio y limita el impacto de una posible corrupción de un eslabón de la cadena. --- ### Impacto en el dimensionamiento del almacenamiento de producción :::warning[Punto de atención crítico — Almacenamiento en bloque (Thick provisioning)] -La oferta OpenIaaS se basa en almacenamiento en bloque de alto rendimiento (Fibre Channel / LVM). Los snapshots se aprovisionan en modo **Thick**: cada snapshot consume en el Storage Repository (SR) el **tamaño nominal completo del disco de la VM**, no solo el delta real. +La oferta OpenIaaS se basa en almacenamiento en bloque de alto rendimiento (Fibre Channel / LVM). Las instantáneas (snapshots) utilizadas en la copia de seguridad incremental se provisionan en modo **Thick**: cada instantánea consume en el Repositorio de almacenamiento (SR) el **tamaño nominal completo del disco de la VM**, y no únicamente el delta real. -**Ejemplo de consumo para una VM con un disco de 50 GB:** +**Ejemplo de consumo para una VM con un disco de 50 Go:** -| Elemento | Consumo en SR | +| Elemento | Consumo en el SR | |---|---| -| Disco VM activo | 50 GB | -| Snapshot de referencia permanente | 50 GB | -| Snapshot temporal durante la exportación | 50 GB | -| **Total requerido durante la ventana de copia de seguridad** | **hasta 150 GB** | +| Disco VM activo | 50 Go | +| Instantánea de referencia permanente (para el cálculo del delta) | 50 Go | +| Instantánea temporal creada durante la exportación | 50 Go | +| **Total requerido durante la ventana de copia de seguridad** | **hasta 150 Go** | -**Regla de dimensionamiento recomendada**: prever **al menos el 50% de espacio libre** en el almacenamiento de producción. +**Regla de dimensionamiento recomendada** : reservar **al menos un 50% de espacio libre** en el almacenamiento de producción con respecto al volumen total de las VMs respaldadas, para soportar esta sobrecarga inherente al almacenamiento en bloque de alto rendimiento. ::: --- @@ -227,62 +236,68 @@ La oferta OpenIaaS se basa en almacenamiento en bloque de alto rendimiento (Fibr #### Cifrado en tránsito -Todas las comunicaciones entre el orquestador de copias de seguridad y el almacenamiento S3 se cifran mediante **HTTPS / TLS 1.3**. +Todas las comunicaciones entre el orquestador de copias de seguridad y el almacenamiento S3 están cifradas mediante **HTTPS / TLS 1.3**. + +#### Cifrado en reposo (At Rest) y gestión de claves -#### Cifrado en reposo y gestión de claves +El cifrado es aplicado por el orquestador de respaldo, **antes** del envío de los datos hacia S3. | Parámetro | Valor | |---|---| | **Algoritmo** | AES-256 o ChaCha20-Poly1305 | -| **Generación de clave** | Automática al desplegar el orquestador de copias de seguridad | -| **Almacenamiento de clave** | Vault centralizado de Cloud Temple (nunca expuesto en la interfaz del cliente) | -| **Resiliencia** | En caso de pérdida del orquestador, la clave se reinyecta desde el Vault | +| **Generación de la clave** | Automática al desplegar el orquestador de respaldo | +| **Almacenamiento de la clave** | Vault centralizado Cloud Temple (nunca expuesto en la interfaz del cliente) | +| **Resiliencia** | En caso de pérdida del orquestador, la clave se reintroduce desde el Vault para restaurar el servicio | #### Aislamiento de red (arquitectura SecNumCloud) -- **Separación física**: las redes *Cliente*, *Administración* y *Backup* se basan en backbones físicos distintos y contextos de enrutamiento (VRF) separados. -- **Imposibilidad de infección lateral**: una VM comprometida no puede alcanzar el almacenamiento S3 ni el orquestador de copias de seguridad. +La infraestructura de copias de seguridad está diseñada para ser **estrictamente estanca** con respecto a los entornos cliente : + +- **Separación física** : las redes *Cliente*, *Administración* y *Copia de seguridad* se apoyan en backbones físicos distintos y contextos de enrutamiento (VRF) separados. +- **Imposibilidad de infección lateral** : una VM comprometida no puede acceder al almacenamiento S3 ni al orquestor de copias de seguridad — no existe ninguna ruta de red entre ellos. El S3 nunca se «monta» en la VM. #### Administración segura +La administración de la plataforma de copia de seguridad está **reservada a los equipos Backup de Cloud Temple** y sujeta a los requisitos SecNumCloud: + | Control | Medida | |---|---| -| **Bastión de acceso** | Paso obligatorio por un bastión de administración interno reforzado (Ubuntu Hardened) | -| **Puesto de trabajo** | Acceso solo desde laptops de administración dedicados y asegurados | -| **Autenticación** | MFA obligatorio mediante un directorio LDAP de administración dedicado | +| **Bastión de acceso** | Paso obligatorio por un bastión de administración interno endurecido (Ubuntu Hardened) | +| **Equipo de trabajo** | Acceso únicamente desde portátiles de administración dedicados y seguros | +| **Autenticación** | MFA obligatorio mediante un directorio LDAP de administración dedicado (distinto del LDAP de oficina) | --- ### Monitorización y auditoría -- **Registros de copia de seguridad**: visibles por el cliente directamente en la Consola Cloud Temple — estado (éxito/fallo), volumetría, marca de tiempo. -- **Registros de acceso de administrador**: los accesos a la infraestructura de backup se registran y **se auditan mensualmente**. -- **Pruebas de intrusión (PASSI)**: pruebas de penetración regulares por proveedores cualificados PASSI. -- **Seguridad física**: todos los equipos alojados en zonas SecNumCloud (jaulas físicas dedicadas con control de acceso biométrico). +- **Registros de copia de seguridad** : visibles por el cliente directamente en la Consola Cloud Temple — estado (éxito/fallo), volumen, marca de tiempo. +- **Registros de acceso de administrador** : los accesos a las infraestructuras de copia de seguridad (orquestador, S3) se registran y **auditan mensualmente** para detectar cualquier anomalía. +- **Pruebas de intrusión (Pentests PASSI)** : la infraestructura es objeto de pentests regulares por parte de proveedores cualificados PASSI en el marco del mantenimiento de la certificación SecNumCloud. +- **Seguridad física** : todos los equipos están alojados en las zonas SecNumCloud (jaulas físicas dedicadas con control de acceso biométrico) de los centros de datos Cloud Temple. --- -### Compatibilidad y casos especiales +### Compatibilidad y casos particulares :::warning[VMs con escrituras en disco continuas] -Algunas máquinas virtuales no son compatibles con esta tecnología de copia de seguridad cuando sus **cargas de escritura en disco son constantes** (bases de datos activas, registros de transacciones, etc.). El hipervisor no puede entonces finalizar el snapshot sin congelar la VM, lo que puede durar varias horas. +Algunas máquinas virtuales no son compatibles con esta tecnología de copia de seguridad cuando sus **cargas de escritura en disco son constantes** (bases de datos activas, registros transaccionales, etc.). El hipervisor no puede entonces finalizar la instantánea sin congelar la VM, lo que puede tardar varias horas. -Para estas cargas de trabajo, se recomienda **complementar o sustituir la copia de seguridad del hipervisor por una copia de seguridad aplicativa**: volcado de base de datos (pg_dump, mysqldump…), copia de seguridad por agente o exportación nativa de la aplicación. +Para estas cargas de trabajo, recomendamos **complementar o reemplazar la copia de seguridad del hipervisor por una copia de seguridad a nivel de aplicación** : volcado de base de datos (pg_dump, mysqldump…), copia de seguridad mediante agente o exportación nativa de la aplicación. ::: --- ### Creación de una política de copia de seguridad -La creación de una política de copia de seguridad es una operación de administración realizada **exclusivamente mediante una solicitud de soporte**, accesible a través del icono de salvavidas en la parte superior derecha de la interfaz. +La creación de una política de copia de seguridad es una operación de administración realizada **exclusivamente a través de una solicitud de soporte**, accesible mediante el icono de salvavidas en la esquina superior derecha de la interfaz. La solicitud debe especificar: - El nombre de su Organización -- Datos de contacto (correo electrónico y teléfono) para finalizar la configuración +- Los datos de contacto de un contacto (correo electrónico y teléfono) para finalizar la configuración - El nombre del tenant - El nombre de la política de copia de seguridad -- Características deseadas: frecuencia, retención (x días, y semanas, z meses…) +- Las características deseadas: frecuencia, retención (x días, y semanas, z meses…) #### Restricciones de planificación @@ -293,101 +308,103 @@ La solicitud debe especificar: | **Ejecuciones simultáneas por política** | 1 a la vez | :::warning[Una política solo puede ejecutarse una vez a la vez] -Cada política de copia de seguridad es de **instancia única**: solo puede haber una ejecución activa simultáneamente. +Cada política de copia de seguridad es **mono-instancia** : solo puede haber una ejecución activa simultáneamente. -**Consecuencia práctica**: si agrega muchas máquinas virtuales a una política existente y la copia de seguridad del día anterior no ha terminado cuando se dispara la siguiente ejecución programada, **el nuevo ciclo no se iniciará** — se omitirá hasta la próxima ocurrencia. +**Consecuencia práctica** : si agrega muchas máquinas virtuales a una política existente y la copia de seguridad del día anterior aún no ha terminado en el momento de la ejecución programada, **el nuevo ciclo no se iniciará** — se omitirá hasta la próxima ocurrencia. -Para evitarlo: compruebe los tiempos de ejecución en los registros de la Consola, ajuste la frecuencia o el tamaño de la política, o distribuya las VMs en varias políticas con horarios escalonados. +Para evitar este escenario : +- verifique las **duraciones de ejecución** de sus trabajos desde los registros de la Console Cloud Temple, +- ajuste la **frecuencia** o el **tamaño de la política** si las copias de seguridad se desbordan regularmente en la ventana siguiente, +- considere **distribuir las VMs en varias políticas** con horarios escalonados para ámbitos grandes. ::: :::info[Retención a largo plazo — disponibilidad futura] **La retención máxima es actualmente de 24 meses.** Una retención a largo plazo (hasta 10 años) se integrará con el lanzamiento de nuestro producto **Glacier**, previsto para el **primer trimestre de 2027**, como suscripción complementaria. -Para períodos de retención tan largos, recomendamos guardar **exclusivamente archivos planos** y **volcados de bases de datos**. La restauración de un servidor completo tras 10 años conlleva riesgos importantes de obsolescencia. +Para duraciones de retención tan largas, recomendamos respaldar **exclusivamente archivos planos** (archivos sin formato, documentos estáticos) así como **volcados de bases de datos**. La restauración de un servidor completo después de 10 años implica de hecho riesgos importantes : muchos servicios o dependencias pueden haberse vuelto obsoletos o incompatibles con el entorno actual. -**Alternativa disponible ahora**: el servicio de **copia de seguridad por agente**, disponible como suscripción complementaria. Contacte con el soporte para más información. +**Alternativa disponible desde ahora** : el servicio de **copia de seguridad mediante agente**, disponible como suscripción complementaria. Contacte al soporte para más información. ::: -## Máquinas virtuales +## Las máquinas virtuales ### Gestión de recursos vCPU -Los cambios en los recursos vCPU se realizan en frío (máquina apagada). La plataforma admite hasta 254 vCPUs por máquina virtual (límite teórico), con pruebas concluyentes realizadas en máquinas virtuales Linux con 128 vCPUs. +Las modificaciones de recursos vCPU se realizan en frío (máquina apagada). La plataforma soporta hasta 254 vCPUs por máquina virtual (límite teórico), con pruebas satisfactorias realizadas en VMs Linux equipadas con 128 vCPUs. -Es importante destacar que el soporte del sistema operativo invitado constituye un factor determinante al asignar recursos. Una asignación que exceda los límites soportados por el sistema operativo puede provocar problemas significativos de rendimiento. +Es importante tener en cuenta que el soporte del sistema operativo invitado constituye un factor determinante durante la asignación de recursos. Una asignación que supere los límites admitidos por el sistema operativo puede provocar problemas de rendimiento significativos. -### Memory resource management +### Gestión de recursos de memoria -Memory modifications are also performed cold. The limits are as follows: +Las modificaciones de memoria también se realizan en frío. Los límites son los siguientes: -- 1.5 TiB with memory snapshot support -- 8 TiB without memory snapshot support -- 16 TiB (theoretical maximum, without security support, minus RAM allocated to Xen and the control domain) +- 1,5 TiB con soporte para instantáneas de memoria +- 8 TiB sin soporte para instantáneas de memoria +- 16 TiB (límite teórico sin soporte de seguridad, menos la RAM asignada a Xen y al dominio de control) -The actual usable memory may be limited by the guest operating system. Exceeding the limits supported by the guest OS may result in performance degradation. +La memoria realmente utilizable puede estar limitada por el sistema operativo invitado. Superar los límites admitidos por el SO invitado puede provocar una degradación del rendimiento. ### Gestión de discos - El tamaño máximo de un disco es de 2 TB - Los discos utilizan el formato VHD estándar -- El número máximo de discos virtuales por máquina virtual, incluidos los lectores CD-ROM, es de 24 +- El número máximo de discos virtuales por máquina virtual, incluidos los lectores de CD-ROM, es de 24 No es posible redimensionar los discos una vez creados. Para ampliar la capacidad de almacenamiento, es necesario crear un nuevo disco. -### Tools for virtual machines - -These tools are used to achieve optimal performance of virtual machines. When you want to perform an action that requires one of these tools, a message will appear on the Cloud Temple console. +### Herramientas para máquinas virtuales -To install these tools, you can consult the official Xen Server websites to obtain a precise procedure according to your OS. +Estas herramientas se utilizan para garantizar el funcionamiento óptimo de las máquinas virtuales. Cuando desee realizar una acción y sea necesario una de estas herramientas, aparecerá un mensaje en la consola de Cloud Temple. +Para instalar estas herramientas, puede consultar los sitios oficiales de Xen Server para obtener instrucciones precisas según su sistema operativo. -#### Management Agent +#### Agente de gestión -The Management Agent is a component installed in each virtual machine. It enables the hypervisor to better manage the machine by providing access to more information and allows certain actions to be performed more cleanly. +El Agente de gestión es un componente instalado en cada máquina virtual. Permite al hipervisor gestionar mejor la máquina al tener acceso a más información y permite realizar ciertas acciones de manera más eficiente. -#### PV Drivers (Drivers de paravirtualisation) +#### Controladores PV (Controladores de Paravirtualización) -Los drivers PV son controladores instalados en la máquina virtual para mejorar su rendimiento. -Sin estos controladores, la máquina funciona, pero más lentamente. Además, permiten realizar ciertas acciones avanzadas. -Los drivers PV se instalan de forma nativa en la mayoría de los kernels Linux actuales. +Los controladores PV son controladores instalados en la máquina virtual para mejorar su rendimiento. +Sin estos controladores, la máquina funciona, pero más lentamente. Además, permiten realizar ciertas operaciones avanzadas. +Los controladores PV están instalados de forma nativa en la mayoría de los kernels Linux actuales. #### Tools -Las herramientas son un conjunto de componentes de software que mejoran la integración de la máquina virtual con la infraestructura de virtualización. +Las Tools son un conjunto de componentes de software que mejoran la integración de la máquina virtual con la infraestructura de virtualización. -## Catalogs +## Catálogos -The catalog allows you to manage three essential types of elements: +El catálogo permite gestionar tres tipos de elementos esenciales: -- Disk images (ISO) -- Configuration templates -- Pre-installed virtual machine templates +- Las imágenes de disco (ISO) +- Las plantillas de configuración +- Las plantillas preinstaladas de máquinas virtuales -In the detailed view of a virtual machine template, you can review crucial information such as location, number of disks, and number of network adapters. +En la vista detallada de una plantilla de máquina virtual, puede consultar información crucial como la ubicación, el número de discos o incluso el número de adaptadores de red. -When the number of virtual disks is shown as 0, it indicates that this is a configuration template without a preinstalled operating system, allowing you to deploy your own customized environment. +Cuando el número de discos virtuales se indica como 0, significa que se trata de una plantilla de configuración sin sistema operativo preinstalado, lo que le permite desplegar su propio entorno personalizado. ## Replicación de máquinas virtuales -La __replicación de máquinas virtuales__ de Cloud Temple garantiza la protección y continuidad de sus datos críticos mediante una copia automática de sus entornos hacia una zona de disponibilidad distinta. Esta funcionalidad, integrada nativamente en la oferta IaaS de código abierto, cumple con los requisitos más estrictos de continuidad operativa y recuperación ante desastres. +La __replicación de máquinas virtuales__ de Cloud Temple garantiza la protección y la continuidad de sus datos críticos mediante una copia automatizada de sus entornos a una zona de disponibilidad distinta. Esta funcionalidad, integrada nativamente en el producto IaaS Open Source, satisface los requisitos más estrictos de continuidad del negocio y recuperación ante desastres. ### Protección automatizada y segura -La replicación Cloud Temple se basa en una infraestructura __certificada SecNumCloud__, garantizando: +La replicación de Cloud Temple se basa en una infraestructura __cualificada SecNumCloud__, que garantiza: -- __Replicación asíncrona__: Copia continua de sus máquinas virtuales sin impacto en el rendimiento de producción -- __Separación geográfica__: Almacenamiento de los réplicas en una zona de disponibilidad diferente de la fuente -- __Automatización completa__: Proceso completamente automatizado a través de la [Consola Cloud Temple](../console/console.md) -- __Cumplimiento normativo__: Respeto de los requisitos de copia de seguridad y continuidad de actividad +- __Replicación asíncrona__ : Copia continua de sus máquinas virtuales sin impacto en el rendimiento de producción +- __Separación geográfica__ : Almacenamiento de las réplicas en una zona de disponibilidad diferente a la de origen +- __Automatización completa__ : Proceso totalmente automatizado a través de la [Consola Cloud Temple](../console/console.md) +- __Conformidad normativa__ : Cumplimiento de los requisitos de copia de seguridad y continuidad del negocio -### Benefits of replication +### Ventajas de la replicación -| Benefit | Description | +| Ventaja | Descripción | |-------------------------|------------------------------------------------------------------------------------------------------------------------------------------------| -| Business continuity | Protection of your critical services in case of a major incident at the primary site. | -| Geographic protection | Replication to a distinct availability zone, protecting against localized disasters. | -| Temporal flexibility | Choice of replication interval according to your needs: from 1 minute to 24 hours. | -| Ease of management | Configuration and monitoring fully integrated into the Cloud Temple Console. | -| SecNumCloud compliance | Qualified infrastructure ensuring the highest level of security for your sensitive data. | +| Continuidad operativa | Protección de sus servicios críticos en caso de un incidente grave en el sitio principal. | +| Protección geográfica | Replicación hacia una zona de disponibilidad distinta, protegiendo contra siniestros localizados. | +| Flexibilidad temporal | Elección del intervalo de replicación según sus necesidades: de 1 minuto a 24 horas. | +| Facilidad de gestión | Configuración y supervisión completamente integradas en la Consola Cloud Temple. | +| Cumplimiento SecNumCloud | Infraestructura cualificada que garantiza el más alto nivel de seguridad para sus datos sensibles. | ### Configuración de la replicación @@ -395,30 +412,30 @@ La replicación Cloud Temple se basa en una infraestructura __certificada SecNum La creación de una política de replicación define los parámetros de protección de sus máquinas virtuales: -- __Destino__: Selección del almacenamiento objetivo en la zona de disponibilidad de replicación -- __Frecuencia__: Intervalo de replicación adaptado a sus necesidades de recuperación (RPO) -- __Retención__: Número de puntos de recuperación conservados +- __Destino__ : Selección del almacenamiento objetivo en la zona de disponibilidad de replicación +- __Frecuencia__ : Intervalo de replicación adaptado a sus necesidades de recuperación (RPO) +- __Retención__ : Número de puntos de recuperación conservados #### Intervalos disponibles -| Intervalo | Uso recomendado | RPO (pérdida máxima de datos) | -|-------------------------|--------------------------------------------|-------------------------------| -| __1 a 59 minutos__ | Aplicaciones críticas en tiempo real | < 1 hora | -| __1 a 24 horas__ | Aplicaciones empresariales y entornos estándar | < 24 horas | +| Intervalo | Uso recomendado | RPO (Pérdida máxima de datos) | +|-------------------------|--------------------------------------------|-----------------------------| +| __1 a 59 minutos__ | Aplicaciones críticas en tiempo real | < 1 hora | +| __1 a 24 horas__ | Aplicaciones empresariales y entornos estándar | < 24 horas | -#### Association of virtual machines +#### Asociación de máquinas virtuales -Once the policy is created, you can associate your virtual machines to protect: +Una vez creada la política, puede asociar sus máquinas virtuales a proteger : -- __Single selection__: Select VMs from the Console interface -- __Automatic validation__: Compatibility and prerequisites verification -- __Immediate activation__: Automatic start of replication after configuration +- __Selección simple__ : Selección de VMs desde la interfaz de la Consola +- __Validación automática__ : Verificación de la compatibilidad y los requisitos previos +- __Activación inmediata__ : Inicio automático de la replicación después de la configuración ### Gestión de réplicas #### Vista de las políticas -La Consola Cloud Temple ofrece una vista centralizada de sus políticas de replicación con: +La consola Cloud Temple ofrece una vista centralizada de sus políticas de replicación con: - Nombre y frecuencia de cada política - Zona de disponibilidad de destino @@ -438,40 +455,40 @@ La tabla de réplicas le permite visualizar: #### Recomendaciones por tipo de carga -- __Aplicaciones críticas__: Replicación cada 1-30 minutos para minimizar la pérdida de datos -- __Aplicaciones empresariales__: Replicación horaria o bienhoraria según las necesidades -- __Entornos de desarrollo__: Replicación diaria generalmente suficiente +- __Aplicaciones críticas__ : Replicación cada 1-30 minutos para minimizar la pérdida de datos +- __Aplicaciones empresariales__ : Replicación horaria o cada dos horas según las necesidades +- __Entornos de desarrollo__ : Replicación diaria generalmente suficiente #### Planificación de políticas -- Cree políticas distintas según la criticidad de sus aplicaciones -- Nombre claramente sus políticas para facilitar su gestión +- Cree políticas diferenciadas según el grado de criticidad de sus aplicaciones +- Asigne nombres claros a sus políticas para facilitar la gestión - Verifique periódicamente el estado de sus réplicas desde la consola - Documente su estrategia de replicación para sus equipos __Nota importante:__ -*La replicación no reemplaza una estrategia de copia de seguridad completa. Constituye un complemento esencial para garantizar la continuidad operativa en caso de incidente grave en su sitio principal.* +*La replicación no sustituye a una estrategia de copia de seguridad integral. Constituye un complemento esencial para garantizar la continuidad del negocio en caso de un incidente grave en su sitio principal.* ## Alta disponibilidad -La alta disponibilidad permite garantizar la continuidad del servicio de las máquinas virtuales (VM) en caso de fallo de un host físico dentro de un pool OpenIaaS. -Con la alta disponibilidad (HA), cada host del pool envía periódicamente señales de vida a sus pares a través del almacenamiento compartido (Block Storage Heartbeat). En caso de ausencia prolongada de respuesta, el host se considera fallido. +La alta disponibilidad permite garantizar la continuidad del servicio de las máquinas virtuales (VM) en caso de fallo de un host físico dentro de un pool OpenIaaS. +Con la alta disponibilidad (HA), cada host en el pool envía regularmente señales de vida a sus pares a través del almacenamiento compartido (Block Storage Heartbeat). En caso de ausencia prolongada de respuesta, el host se considera defectuoso. -Un almacenamiento en bloque designado como heartbeat significa que servirá como base para autenticar a los hosts que ya no respondan. +Un Block Storage designado como heartbeat significa que servirá como base para verificar los hosts que ya no respondan. -Para que la alta disponibilidad se configure correctamente en un pool OpenIaaS, es imprescindible contar con __al menos dos hosts__ conectados. +Para que la alta disponibilidad esté correctamente configurada en un pool OpenIaaS, es indispensable contar con __al menos dos hosts__ conectados. Cada VM debe configurarse con un nivel de prioridad de reinicio en alta disponibilidad: -#### Disabled +#### Deshabilitado - High availability is not configured. In the event of host failure, the virtual machine will not be restarted. + La alta disponibilidad no está configurada. En caso de fallo del host, la máquina virtual no se reiniciará. -#### Restart +#### Reinicio -In case of host failure, the virtual machine will be automatically restarted as soon as resources become available in the pool. Virtual machines configured in "restart" mode are prioritized over those configured in "best-effort" mode. + En caso de fallo del host, la máquina virtual se reiniciará automáticamente tan pronto como haya recursos disponibles en el pool. Las máquinas virtuales configuradas en modo "restart" se tratan con prioridad, antes que las configuradas en modo "best-effort". -#### Best-effort +#### Best-Effort -In the event of host failure, the virtual machine will be automatically restarted only if resources remain available after processing all virtual machines configured in "restart" mode. The "Best-effort" mode performs only one attempt; therefore, if resources are insufficient, the virtual machine will not be restarted. + En caso de fallo del host, la máquina virtual solo se reiniciará automáticamente si quedan recursos disponibles después de procesar todas las máquinas virtuales configuradas en modo "restart". El modo "Best-effort" realiza un único intento, por lo que si los recursos son insuficientes, la máquina virtual no se reiniciará. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/iaas_opensource.md b/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/iaas_opensource.md index d63e5696..a0da722d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/iaas_opensource.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/iaas_opensource.md @@ -2,24 +2,25 @@ title: Visión general --- -El producto IaaS de código abierto de Cloud Temple: una alianza única entre rendimiento, seguridad y transparencia. +La **oferta IaaS OpenSource de Cloud Temple**: una alianza única entre rendimiento, seguridad y transparencia. -Esta oferta garantiza un control total de sus entornos críticos, asegurando seguridad, continuidad y cumplimiento normativo. Con recursos escalables y una gestión automatizada, obtiene una infraestructura potente y adaptada a sus necesidades. Adopte la potencia del código abierto con la fiabilidad y el soporte de Cloud Temple. +Este producto garantiza un control total de sus entornos críticos, asegurando al mismo tiempo seguridad, continuidad y cumplimiento normativo. +Con recursos escalables y gestión automatizada, disfruta de una infraestructura potente y adaptada a tus necesidades. Adopta el poder del Open Source con la fiabilidad y el soporte de Cloud Temple.

Conceptos

-

Descubra las bases y principios esenciales para comprender y dominar nuestra infraestructura.

+

Descubre las bases y principios esenciales para comprender y dominar nuestra infraestructura.

Explorar los conceptos →
-

Quickstart

-

Comience rápidamente con nuestros recursos siguiendo instrucciones claras y sencillas.

+

Inicio rápido

+

Comienza rápidamente con nuestros recursos siguiendo instrucciones claras y sencillas.

Iniciar el Quickstart →
-
+

Tutoriales

-

Aprenda paso a paso a configurar y utilizar nuestros servicios con guías detalladas.

+

Aprende paso a paso a configurar y utilizar nuestros servicios con guías detalladas.

Descubrir los tutoriales →
@@ -27,10 +28,10 @@ Esta oferta garantiza un control total de sus entornos críticos, asegurando seg ## Plataformas de compra
-

¿Es un actor del sector público? La oferta IaaS Cloud Temple está disponible a través de:

+

¿Es usted un actor del sector público? El producto IaaS Cloud Temple es accesible a través de:

@@ -50,4 +51,4 @@ Esta oferta garantiza un control total de sus entornos críticos, asegurando seg Más información → -
+
\ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/quickstart.md b/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/quickstart.md index 13066836..beace45d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/quickstart.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/quickstart.md @@ -20,13 +20,13 @@ import openIaasVmConsoleClipboard from '@site/docs/iaas_opensource/images/open_i ## Cálculo -### Gestión de máquinas virtuales +### Gestión de las máquinas virtuales -La interfaz de gestión de sus máquinas virtuales está disponible en la Consola, en el menú __'OpenIaaS'__ situado en la barra verde a la izquierda de la pantalla. +La interfaz de gestión de sus máquinas virtuales está disponible en la Consola, en el menú __'OpenIaaS'__ ubicado en la barra verde a la izquierda de la pantalla. ### Lista de máquinas virtuales -En la sección __'Máquinas virtuales'__, tiene acceso a la lista de sus máquinas virtuales alojadas en su Cloud de confianza. +En la sección __'Máquinas virtuales'__, tiene acceso a la lista de sus máquinas virtuales alojadas en su nube de confianza. @@ -41,7 +41,7 @@ Tiene acceso a la siguiente información para cada máquina virtual: ### Acciones sobre las máquinas virtuales -Las siguientes acciones son posibles desde esta interfaz: +Las siguientes acciones son posibles desde esta interfaz : - Actualizar la lista de máquinas virtuales. - Filtrar la lista. @@ -50,11 +50,11 @@ Las siguientes acciones son posibles desde esta interfaz: -Cuando hace clic en la flecha desplegable verde a la derecha de la lista para una máquina virtual, accede a todas las informaciones relativas a esta. +Cuando hace clic en la flecha desplegable verde a la derecha de la lista para una máquina virtual, accede a toda la información concerniente a la misma. -Una barra rápida permite realizar las siguientes acciones: +Una barra rápida permite realizar las siguientes acciones : @@ -62,85 +62,85 @@ Una barra rápida permite realizar las siguientes acciones: - Apagarla. - Reiniciarla. - Abrir la consola. -- Montar un ISO. -- Desmontar un ISO. +- Montar una ISO. +- Desmontar una ISO. - Convertir la máquina virtual en plantilla. - Moverla. - Renombrarla. - Eliminarla. -En la pestaña de información '__Generales__', encontrará información detallada sobre su máquina virtual, como su ubicación física (AZ, Pool, Host), la RAM, el CPU, las direcciones IP y otras. +En la pestaña de información '__Generales__', encontrará información detallada relativa a su máquina virtual, como su ubicación física (AZ, Pool, Host), la RAM, la CPU, las direcciones IP, entre otras. -Una pestaña '__Avanzado__' permite consultar información más específica: +Una pestaña '__Avanzado__' permite consultar información más específica : - UUID de la máquina virtual -- Herramientas invitadas -- Sistema operativo invitado -- Unidad DVD +- Guest tools +- SO invitado +- Unidad de DVD -Así como modificar ciertas opciones, tales como: +Así como modificar ciertas opciones, como : -- Orden de arranque +- El orden de arranque - Secure Boot -- Arranque automático (imposible si no hay ninguna política de copia de seguridad asociada a la VM) +- El arranque automático (imposible si no hay ninguna política de copia de seguridad asociada a la VM) ### Consola de una máquina virtual -La consola de una máquina virtual está disponible desde la lista de máquinas virtuales haciendo clic en el icono __'Consola'__: +La consola de una máquina virtual es accesible desde la lista de máquinas virtuales haciendo clic en el icono __'Consola'__ : -Se abre un nuevo separador en su navegador y se muestra entonces la consola de su máquina, basada en un cliente VNC: +Se abrirá una nueva pestaña en su navegador y se mostrará la consola de su máquina, basada en un cliente VNC : -Es posible realizar las siguientes acciones en el menú VNC: +En el menú VNC es posible : -- solicitar el envío de teclas especiales, -- forzar un mapeo de teclado (en caso de que su máquina virtual no tenga la misma disposición de teclado que su navegador web), -- abrir un campo de texto que se puede transmitir a la máquina. Este método reemplaza el antiguo portapapeles no funcional, -- pasar al modo de pantalla completa, -- cambiar el tamaño de la ventana (escalamiento). +- solicitar el envío de teclas específicas, +- forzar un mapeo de teclado (en caso de que su máquina virtual no tenga la misma distribución de teclado que su navegador web), +- abrir un campo de texto transmitible a la máquina. Este método reemplaza al antiguo portapapeles que no funcionaba, +- cambiar a modo de pantalla completa, +- cambiar el tamaño de la ventana (scaling). -#### Keyboard layout support +#### Soporte de distribuciones de teclado -The input entered in the console depends on the keyboard language of your web browser, the keyboard language of the virtual machine, and whether the 'enforce keyboard' option on the left side of the screen is enabled or not. +La entrada realizada en la consola depende de la distribución del teclado de su navegador web, de la distribución del teclado de la máquina virtual y de la activación o no de la opción 'enforce keyboard' en el lado izquierdo de la pantalla. +A continuación se presenta un resumen de las situaciones posibles: -Below is a summary of the possible scenarios: +| Distribución del teclado de la máquina física (entrée) | Distribución del teclado de la máquina virtual | Opción 'enforce keyboard' seleccionada | Resultado (sortie) | +| ------------------------------------------------------ | ---------------------------------------------- | -------------------------------------- | ------------------------- | +| Francés | Francés | No | ✅ | +| Francés | Francés | Sí | No recomendado | +| Francés | Inglés | No | Inglés | +| Francés | Inglés | Sí | ✅ | +| Inglés | Francés | No | Francés | +| Inglés | Francés | Sí | ✅ | +| Inglés | Inglés | No | ✅ | +| Inglés | Inglés | Sí | No recomendado | -| Physical machine keyboard language (input) | Virtual machine keyboard language | 'Enforce keyboard' option selected | Result (output) | -| ------------------------------------------ | --------------------------------- | ---------------------------------- | ---------------------- | -| French | French | No | ✅ | -| French | French | Yes | Not recommended | -| French | English | No | English | -| French | English | Yes | ✅ | -| English | French | No | French | -| English | French | Yes | ✅ | -| English | English | No | ✅ | -| English | English | Yes | Not recommended | +__Nota__ : -__Note__: - -- If certain characters do not appear when typed manually, you can try pasting them from the clipboard. +- Si algunos caracteres no se ingresan correctamente en la entrada manual, puede intentar usar el portapapeles. #### Funcionamiento del portapapeles -Esta función le permite enviar una cadena completa de caracteres a su máquina virtual. Es importante tener en cuenta que la tecla "enforce keyboard" influye en la forma en que esta cadena de caracteres será transmitida a su máquina virtual. Si observa durante la escritura en la consola que la opción "enforce keyboard" es necesaria, recuerde activarla antes de utilizar el portapapeles. -Esta función puede utilizarse para enviar una contraseña, un comando o el contenido de un archivo de configuración, por ejemplo: +Esta funcionalidad le permite enviar una cadena de caracteres completa a su máquina virtual. Es importante tener en cuenta que la tecla "enforce keyboard" influye en la forma en que esta cadena de caracteres +se transmitirá a su máquina virtual. Si al escribir en la consola observa que la opción "enforce keyboard" es necesaria, recuerde activarla antes de utilizar el portapapeles. +Esta funcionalidad puede utilizarse, por ejemplo, para enviar una contraseña, un comando o el contenido de un archivo de configuración: -Al hacer clic en el botón "Pegar", el contenido de su campo de texto se envía a su máquina virtual. +Al hacer clic en el botón "Paste", el contenido de su campo de texto se envía a su máquina virtual. ## Replicación -### Access to replication management +### Acceso a la gestión de la replicación -The replication management interface is available in the Console under the menu __'OpenIaaS'__ > __'Replication'__, located on the green bar on the left side of the screen. +La interfaz de gestión de la replicación está disponible en la Consola en el menú __'OpenIaaS'__ > __'Replicación'__ ubicado en la barra verde a la izquierda de la pantalla. @@ -150,24 +150,24 @@ En la sección __'Replicación'__, puede crear políticas que definan los parám -Para crear una nueva política, haga clic en el botón __'Agregar una política'__. Se abrirá un formulario con los siguientes pasos: +Para crear una nueva política, haga clic en el botón __'Agregar política'__. Se abrirá un formulario con los siguientes pasos: #### Paso 1: Información general -- __Nombre__: Asigne un nombre descriptivo a su política -- __Frecuencia__: Seleccione el intervalo de replicación (de 1 a 59 minutos o de 1 a 24 horas) +- __Nombre__ : Asigne un nombre explícito a su política +- __Frecuencia__ : Seleccione el intervalo de replicación (1-59 minutes ou 1-24 heures) -#### Step 2: Storage Selection +#### Paso 2 : Selección del almacenamiento -- __Availability Zone__: Select the destination zone -- __Pool__: Choose the resource pool -- __Block Storage__: Select the destination storage +- __Zona de disponibilité__ : Seleccione la zona de destino +- __Pool__ : Seleccione el pool de recursos +- __Block Storage__ : Seleccione el almacenamiento de destino -#### Paso 3: Validación +#### Paso 3 : Validación Verifique los parámetros y haga clic en __'Agregar'__ para crear la política. @@ -175,21 +175,21 @@ Verifique los parámetros y haga clic en __'Agregar'__ para crear la política. Para proteger una máquina virtual, acceda a los detalles de su VM desde la lista de máquinas virtuales. -En la vista detallada de la VM, encontrará una sección __'Replicación'__: +En la vista detallada de la VM, encontrará una sección __'Replicación'__ : -Pasos para asociar una VM a la replicación: +Los pasos para asociar una VM a la replicación: 1. Haga clic en __'Configurar una política'__ -2. Seleccione la política de replicación deseada en el menú desplegable -3. Valide su elección +2. Seleccione la política de replicación deseada en la lista desplegable +3. Confirme su elección -La replicación se iniciará automáticamente tras la validación. +La replicación se inicia automáticamente tras la validación. ### Gestión de políticas y réplicas -#### Vista de políticas +#### Vista de las políticas La pestaña __'Políticas'__ le permite visualizar todas sus políticas de replicación: @@ -201,7 +201,7 @@ Tiene acceso a la siguiente información para cada política: - Su frecuencia de replicación - La zona de disponibilidad de destino - El pool asociado -- El almacenamiento en bloque utilizado +- El almacenamiento de bloques utilizado Las acciones disponibles incluyen: @@ -211,7 +211,7 @@ Las acciones disponibles incluyen: #### Vista de réplicas -La pestaña __'Réplicas'__ muestra todas las máquinas virtuales en proceso de replicación: +La pestaña __'Réplicas'__ muestra todas las máquinas virtuales que se están replicando: @@ -219,10 +219,10 @@ Puede visualizar: - El nombre de las máquinas virtuales replicadas - La ubicación de origen y destino -- La política de replicación asociada +- La política de réplica asociada Las acciones disponibles incluyen: - Exportación de datos en formato CSV -- Consulta de los detalles de replicación -- Gestión de réplicas por política +- Consulta de los detalles de réplica +- Gestión de réplicas por política \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/create_vm.md b/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/create_vm.md index 9d25c412..86ece53f 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/create_vm.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/create_vm.md @@ -1,217 +1,216 @@ --- -title: Créer une machine virtuelle +title: Crear una máquina virtual --- -Ce tutoriel vous guide à travers les différentes méthodes de création d'une machine virtuelle dans votre environnement OpenIaaS. +Este tutorial le guía a través de los diferentes métodos de creación de una máquina virtual en su entorno OpenIaaS. -## Introduction +## Introducción -La Console Cloud Temple vous propose **trois méthodes** pour créer une machine virtuelle OpenIaaS : +La consola Cloud Temple le ofrece **tres métodos** para crear una máquina virtual OpenIaaS: -1. **Depuis un Modèle** : Déploiement rapide à partir d'un modèle préconfiguré -2. **Import XVA** : Import d'une machine virtuelle depuis un fichier XVA -3. **Depuis le Marketplace** : Déploiement d'une image certifiée du catalogue Cloud Temple +1. **Desde un Modelo** : Despliegue rápido a partir de un modelo preconfigurado +2. **Import XVA** : Importación de una máquina virtual desde un archivo XVA +3. **Desde el Marketplace** : Despliegue de una imagen certificada del catálogo Cloud Temple -## Prérequis +## Prerrequisitos +- Disponer de un entorno OpenIaaS configurado +- Tener los permisos necesarios para crear máquinas virtuales +- Para el modo XVA: disponer de un archivo XVA válido +- Para el modo Marketplace: tener acceso al catálogo Marketplace -- Disposer d'un environnement OpenIaaS configuré -- Avoir les permissions nécessaires pour créer des machines virtuelles -- Pour le mode XVA : disposer d'un fichier XVA valide -- Pour le mode Marketplace : avoir accès au catalogue Marketplace +## Acceso a la creación -## Accès à la création +Desde el menú **OpenIaaS** > **Máquinas Virtuales**, haga clic en el botón **Nueva máquina virtual**. -Depuis le menu **OpenIaaS** > **Machines Virtuelles**, cliquez sur le bouton **Nouvelle machine virtuelle**. - -Une fenêtre s'ouvre vous présentant les trois méthodes de déploiement disponibles. Sélectionnez la méthode souhaitée pour continuer. +Se abre una ventana que le muestra los tres métodos de despliegue disponibles. Seleccione el método deseado para continuar. --- -## Méthode 1 : Déploiement depuis un Modèle +## Método 1: Despliegue desde un modelo -Cette méthode permet de créer rapidement une machine virtuelle à partir d'un modèle préconfiguré. +Este método permite crear rápidamente una máquina virtual a partir de un modelo preconfigurado. -### Étape 1 : Sélection du Pool et du Modèle +### Paso 1: Selección del Pool y del Modelo -Sélectionnez d'abord le **Pool** (zone de disponibilité) où vous souhaitez déployer votre machine virtuelle, puis choisissez le **Modèle** à utiliser comme base. +Seleccione en primer lugar el **Pool** (zona de disponibilidad) donde desea implementar su máquina virtual, y a continuación elija el **Modelo** que utilizará como base. -### Étape 2 : Informations générales +### Paso 2: Información general -Configurez les paramètres de base de votre machine virtuelle : +Configure los parámetros básicos de su máquina virtual: -- **Nom** : Nom unique de la machine virtuelle (caractères alphanumériques, tirets, underscores, points et espaces autorisés) -- **CPU** : Nombre de cœurs virtuels (minimum 1) -- **RAM** : Quantité de mémoire avec sélection de l'unité (Mo, Go, To) +- **Nombre** : Nombre único de la máquina virtual (se permiten caracteres alfanuméricos, guiones, guiones bajos, puntos y espacios) +- **CPU** : Número de núcleos virtuales (mínimo 1) +- **RAM** : Cantidad de memoria con selección de la unidad (MB, GB, TB) -### Étape 3 : Cloud Init (optionnel) +### Paso 3 : Cloud Init (opcional) -Cloud Init permet d'automatiser la configuration initiale de votre machine virtuelle au premier démarrage. +Cloud Init permite automatizar la configuración inicial de su máquina virtual en el primer arranque. -Vous pouvez configurer : +Puede configurar: -- **Cloud Config** : Configuration générale (hostname, utilisateurs, packages, etc.) -- **Network Config** : Configuration réseau au format Netplan v2 -- **Destroy After Boot** : Option pour supprimer la configuration Cloud Init après le premier démarrage +- **Cloud Config** : Configuración general (hostname, usuarios, paquetes, etc.) +- **Network Config** : Configuración de red en formato Netplan v2 +- **Destroy After Boot** : Opción para eliminar la configuración de Cloud Init después del primer arranque :::info -Cette étape est entièrement optionnelle. Si vous n'avez pas besoin de Cloud Init, laissez les champs par défaut et passez à l'étape suivante. +Esta etapa es completamente opcional. Si no necesita Cloud Init, deje los campos por defecto y pase a la siguiente etapa. ::: -### Étape 4 : Configuration des disques +### Paso 4 : Configuración de los discos -Gérez les disques virtuels de votre machine virtuelle. Les disques du modèle sont automatiquement ajoutés et ne peuvent pas être supprimés. +Gestione los discos virtuales de su máquina virtual. Los discos del modelo se agregan automáticamente y no se pueden eliminar. -Pour chaque disque, configurez : +Para cada disco, configure lo siguiente: -- **Nom** : Nom unique du disque -- **Capacité** : Taille du disque avec sélection de l'unité (Mo, Go, To) -- **Block Storage** : Stockage de destination +- **Nombre** : Nombre único del disco +- **Capacidad** : Tamaño del disco con selección de la unidad (MB, GB, TB) +- **Block Storage** : Almacenamiento de destino -Vous pouvez ajouter jusqu'à 24 disques virtuels au total. Cliquez sur **Ajouter un disque** pour créer un nouveau disque. +Puede agregar hasta 24 discos virtuales en total. Haga clic en **Agregar un disco** para crear un nuevo disco. :::warning -Si vous configurez Cloud Init, au moins un disque est obligatoire pour stocker la configuration. +Si configura Cloud Init, es obligatorio al menos un disco para almacenar la configuración. ::: -### Étape 5 : Configuration des adaptateurs réseau +### Paso 5: Configuración de los adaptadores de red -Configurez les interfaces réseau de votre machine virtuelle (maximum 7 adaptateurs). +Configure las interfaces de red de su máquina virtual (máximo 7 adaptadores). -Pour chaque adaptateur réseau : +Para cada adaptador de red: -- **Réseau** : Sélectionnez le réseau virtuel (avec indication VPC ou Private Backbone) -- **Adresse MAC** : Optionnelle, générée automatiquement si non spécifiée +- **Red** : Seleccione la red virtual (con indicación VPC o Private Backbone) +- **Dirección MAC** : Opcional, se genera automáticamente si no se especifica :::info[VPC] -La configuration des réseaux VPC n'est disponible que depuis l'onglet Réseau de la machine virtuelle une fois l'opération terminée. La configuration depuis ce formulaire sera disponible prochainement. +La configuración de las redes VPC solo está disponible desde la pestaña Red de la máquina virtual una vez finalizada la operación. La configuración desde este formulario estará disponible próximamente. ::: -Cliquez sur **Ajouter un adaptateur réseau** pour créer une nouvelle interface. +Haga clic en **Agregar adaptador de red** para crear una nueva interfaz. -### Étape 6 : Haute disponibilité +### Paso 6 : Alta disponibilidad -Configurez le niveau de haute disponibilité de votre machine virtuelle. +Configure el nivel de alta disponibilidad de su máquina virtual. :::tip -Pour plus d'informations sur la configuration de la haute disponibilité et les différents modes disponibles, consultez le guide dédié : [Gestion de la haute disponibilité d'une machine virtuelle](./high_availability/manage_vm) +Para obtener más información sobre la configuración de la alta disponibilidad y los distintos modos disponibles, consulte la guía dedicada: [Gestión de la alta disponibilidad de una máquina virtual](./high_availability/manage_vm) ::: -### Étape 7 : Résumé et validation +### Paso 7: Resumen y validación -Vérifiez l'ensemble de votre configuration avant de créer la machine virtuelle. +Verifique toda su configuración antes de crear la máquina virtual. -Le résumé affiche tous les paramètres configurés : +El resumen muestra todos los parámetros configurados: -- Informations générales (nom, CPU, RAM) -- Modèle sélectionné -- Cloud Init (si configuré) -- Disques -- Adaptateurs réseau -- Haute disponibilité +- Información general (nombre, CPU, RAM) +- Modelo seleccionado +- Cloud Init (si está configurado) +- Discos +- Adaptadores de red +- Alta disponibilidad -Cliquez sur **Créer** pour lancer le déploiement de votre machine virtuelle. +Haga clic en **Crear** para iniciar el despliegue de su máquina virtual. --- -## Méthode 2 : Import depuis un fichier XVA +## Método 2: Importación desde un archivo XVA -Cette méthode permet d'importer une machine virtuelle depuis un fichier au format XVA (XenServer Virtual Appliance). +Este método permite importar una máquina virtual desde un archivo en formato XVA (XenServer Virtual Appliance). -### Présentation du format XVA +### Presentación del formato XVA -Le format XVA est le format d'export/import natif de XCP-ng et XenServer. Il contient une machine virtuelle complète avec ses disques et sa configuration. +El formato XVA es el formato de exportación/importación nativo de XCP-ng y XenServer. Contiene una máquina virtual completa con sus discos y su configuración. -### Étape 1 : Nom de la machine virtuelle +### Paso 1: Nombre de la máquina virtual -Définissez le nom de votre machine virtuelle. +Defina el nombre de su máquina virtual. -Le nom doit respecter les mêmes règles que pour le déploiement depuis un modèle (caractères alphanumériques, tirets, underscores, points et espaces). +El nombre debe cumplir con las mismas reglas que para el despliegue desde una plantilla (caracteres alfanuméricos, guiones, guiones bajos, puntos y espacios). -### Étape 2 : Upload du fichier XVA +### Paso 2: Carga del archivo XVA -Importez votre fichier XVA depuis votre ordinateur. +Importe su archivo XVA desde su ordenador. :::info -Le fichier doit avoir l'extension `.xva`. Les noms de fichiers ne doivent contenir que des caractères alphanumériques, tirets, underscores et points (pas d'espaces). +El archivo debe tener la extensión `.xva`. Los nombres de archivo solo deben contener caracteres alfanuméricos, guiones, guiones bajos y puntos (sin espacios). ::: -Glissez-déposez votre fichier dans la zone prévue ou cliquez pour sélectionner le fichier depuis votre explorateur. +Arrastre y suelte su archivo en la zona designada o haga clic para seleccionar el archivo desde su explorador. -### Étape 3 : Sélection du stockage +### Paso 3: Selección del almacenamiento -Choisissez le stockage de destination pour votre machine virtuelle importée. +Seleccione el almacenamiento de destino para su máquina virtual importada. -Sélectionnez un Block Storage dans l'arborescence. Le système vérifie automatiquement que l'espace disponible est suffisant pour accueillir votre fichier XVA. +Seleccione un Block Storage en el árbol de directorios. El sistema verifica automáticamente que el espacio disponible sea suficiente para alojar su archivo XVA. -### Étape 4 : Résumé et validation +### Paso 4: Resumen y validación -Vérifiez les informations avant de lancer l'import. +Verifique la información antes de iniciar la importación. -Le résumé affiche : +El resumen muestra: -- Le nom de la VM -- Le type de déploiement (XVA) -- Le fichier XVA et sa taille -- Le stockage de destination +- El nombre de la VM +- El tipo de implementación (XVA) +- El archivo XVA y su tamaño +- El almacenamiento de destino -Cliquez sur **Créer** pour lancer l'import de votre machine virtuelle. +Haga clic en **Crear** para iniciar la importación de su máquina virtual. -### À propos de l'option skip_set_template +### Acerca de la opción skip_set_template -Lors de l'import d'un fichier XVA, l'option `skip_set_template` détermine si le résultat de l'import sera une machine virtuelle directement utilisable ou un modèle. Cette option est notamment utilisée avec des outils d'automatisation comme Packer. Plus d'informations : [documentation XCP-ng](https://xcp-ng.org/blog/2024/02/22/using-packer-with-xcp-ng/). +Al importar un archivo XVA, la opción `skip_set_template` determina si el resultado de la importación será una máquina virtual directamente utilizable o una plantilla. Esta opción se utiliza especialmente con herramientas de automatización como Packer. Más información: [documentación de XCP-ng](https://xcp-ng.org/blog/2024/02/22/using-packer-with-xcp-ng/). --- -## Méthode 3 : Déploiement depuis le Marketplace +## Método 3: Despliegue desde el Marketplace -Le Marketplace Cloud Temple propose des images de machines virtuelles certifiées et prêtes à l'emploi. +El Marketplace Cloud Temple ofrece imágenes de máquinas virtuales certificadas y listas para usar. -### Sélection d'une image Marketplace +### Selección de una imagen del Marketplace -Parcourez le catalogue des images disponibles pour OpenIaaS. +Explore el catálogo de imágenes disponibles para OpenIaaS. -Seules les images compatibles avec la plateforme OpenIaaS sont affichées. +Solo se muestran las imágenes compatibles con la plataforma OpenIaaS. -### Configuration de la machine virtuelle +### Configuración de la máquina virtual -La configuration depuis le Marketplace suit un processus similaire au déploiement depuis un modèle, avec quelques spécificités : +La configuración desde el Marketplace sigue un proceso similar al despliegue desde una plantilla, con algunas particularidades: -- Les caractéristiques système (OS, CPU, RAM) sont prédéfinies par l'image Marketplace -- Vous pouvez personnaliser le nom de la VM -- Cloud Init est disponible pour la configuration initiale -- Le mapping réseau permet d'associer les interfaces réseau de l'image à vos réseaux +- Las características del sistema (SO, CPU, RAM) están predefinidas por la imagen del Marketplace +- Puede personalizar el nombre de la VM +- Cloud Init está disponible para la configuración inicial +- El mapeo de red permite asociar las interfaces de red de la imagen con sus redes :::tip -Pour un guide détaillé du déploiement Marketplace, consultez le tutoriel dédié : [Déployer une image sur OpenIaaS](../../marketplace/tutorials/deploy_openiaas) +Para una guía detallada del despliegue en el Marketplace, consulte el tutorial dedicado: [Desplegar una imagen en OpenIaaS](../../marketplace/tutorials/deploy_openiaas) ::: --- -## Bonnes pratiques +## Buenas prácticas -### Choix de la méthode de déploiement +### Elección del método de despliegue -- **Modèle** : Idéal pour des déploiements standards et répétitifs au sein de votre organisation -- **XVA** : Recommandé pour migrer des VMs existantes ou utiliser des images personnalisées -- **Marketplace** : Parfait pour démarrer rapidement avec des images certifiées et maintenues +- **Modelo** : Ideal para despliegues estándar y repetitivos dentro de su organización +- **XVA** : Recomendado para migrar VMs existentes o utilizar imágenes personalizadas +- **Marketplace** : Perfecto para comenzar rápidamente con imágenes certificadas y mantenidas -### Configuration des ressources +### Configuración de recursos -- **CPU et RAM** : Dimensionnez selon les besoins réels de votre charge de travail -- **Disques** : Prévoyez une marge de croissance pour éviter les redimensionnements futurs +- **CPU y RAM** : Dimensione según las necesidades reales de su carga de trabajo +- **Discos** : Prevea un margen de crecimiento para evitar redimensionamientos futuros -### Haute disponibilité +### Alta disponibilidad -- Activez le mode **Restart** pour les applications critiques -- Utilisez **Best-Effort** pour les environnements moins critiques +- Active el modo **Restart** para las aplicaciones críticas +- Utilice **Best-Effort** para los entornos menos críticos ### Cloud Init -- Utilisez Cloud Init pour standardiser la configuration de vos VMs -- Documentez vos configurations Cloud Init pour faciliter leur réutilisation -- Testez vos configurations sur des VMs de test avant déploiement en production +- Utilice Cloud Init para estandarizar la configuración de sus VMs +- Documente sus configuraciones de Cloud Init para facilitar su reutilización +- Pruebe sus configuraciones en VMs de prueba antes del despliegue en producción -### Sécurité +### Seguridad -- Utilisez des noms explicites pour faciliter l'identification et la gestion -- Planifiez une stratégie de sauvegarde dès la création de la VM +- Utilice nombres explícitos para facilitar la identificación y la gestión +- Planifique una estrategia de copia de seguridad desde la creación de la VM \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/high_availability/manage_vm.md b/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/high_availability/manage_vm.md index 2f4a96fe..805e6575 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/high_availability/manage_vm.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/high_availability/manage_vm.md @@ -1,3 +1,5 @@ + + --- title: Gestión de una máquina virtual --- @@ -8,17 +10,17 @@ import open_iaas_vm_ha_filter from '@site/docs/iaas_opensource/tutorials/images/ import open_iaas_vm_ha_errors from '@site/docs/iaas_opensource/tutorials/images/open_iaas_vm_ha_errors.png' import open_iaas_vm_ha_warning from '@site/docs/iaas_opensource/tutorials/images/open_iaas_vm_ha_warning.png' -Además de la gestión del grupo, las máquinas virtuales también deben configurarse. -Para ver la configuración de la máquina virtual, simplemente vaya a las opciones avanzadas: +Además de la gestión del pool, las máquinas virtuales también deben configurarse. +Para ver la configuración de la máquina virtual, simplemente vaya a las opciones avanzadas : -Para modificar esta configuración: +Para modificar esta configuración : -Para ver todas las máquinas virtuales sin configuración de alta disponibilidad: +Para ver el conjunto de máquinas virtuales sin configuración de alta disponibilidad: -Para ver todas las máquinas virtuales que pueden impedir la activación de la alta disponibilidad en el grupo: +Para ver el conjunto de máquinas virtuales que podrían impedir la activación de la alta disponibilidad en el pool: - + \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/concepts.md b/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/concepts.md index c299c383..5eef47b4 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/concepts.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/concepts.md @@ -1,29 +1,29 @@ --- -title: Concepts +title: Conceptos --- -The __IaaS (Infrastructure as a Service)__ offering from Cloud Temple is designed to meet the critical needs of business continuity and disaster recovery, with a particular focus on demanding sectors such as industry, banking, and insurance. Built on cutting-edge technologies, this infrastructure ensures maximum availability and optimal performance for your critical workloads. +La oferta __IaaS (Infrastructure As A Service)__ de Cloud Temple está diseñada para satisfacer las necesidades críticas de continuidad y recuperación de la actividad, con un enfoque particular en los sectores exigentes como la industria, la banca y los seguros. Basada en tecnologías de vanguardia, esta infraestructura garantiza una disponibilidad máxima y un rendimiento óptimo para sus cargas de trabajo críticas. ## Una plataforma tecnológica de confianza -La plataforma IaaS de Cloud Temple se apoya en socios tecnológicos de renombre internacional: +La plataforma IaaS de Cloud Temple se basa en socios tecnológicos de renombre internacional : -- Cálculo: __CISCO UCS__. -- Almacenamiento: __IBM Spectrum Virtualize__, __IBM FlashSystem__ para almacenamiento en bloques. -- Red: __JUNIPER__. -- Virtualización: __VMware__, ofreciendo una base fiable y probada para gestionar sus entornos en la nube. -- Copias de seguridad: __IBM Spectrum Protect Plus__, para la orquestación y el almacenamiento de copias de seguridad. +- Cálculo : __CISCO UCS__. +- Almacenamiento : __IBM Spectrum Virtualize__, __IBM FlashSystem__ para almacenamiento en bloque. +- Red : __JUNIPER__. +- Virtualización : __VMware__, ofreciendo una base fiable y probada para gestionar sus entornos cloud. +- Copia de seguridad: __IBM Spectrum Protect Plus__, para la orquestación y el almacenamiento de copias de seguridad. -Esta arquitectura se basa en el modelo __VersaStack__, una alianza entre Cisco e IBM, garantizando una compatibilidad amplia con los principales editores de software. +Esta arquitectura se basa en el modelo __VersaStack__, una alianza entre Cisco e IBM, garantizando una compatibilidad ampliada con los principales editores de software. -## A dedicated and automated infrastructure +## Una infraestructura dedicada y automatizada -Although fully automated through APIs and a Terraform provider, Cloud Temple's IaaS offering provides a unique infrastructure: +Aunque esté completamente automatizada gracias a las APIs y un proveedor de Terraform, el producto IaaS de Cloud Temple ofrece una infraestructura única: -- __Dedicated resources__: Compute blades, storage volumes, and software stacks (virtualization, backup, firewalling, etc.) are never shared between clients. -- __Maximum predictability__: You have full control over virtualization rates, I/O pressure on storage, and benefit from clear, consumption-based monthly billing. +- __Recursos dedicados__ : Las láminas de cálculo, volúmenes de almacenamiento y stacks de software (virtualización, copias de seguridad, cortafuegos, etc.) nunca se comparten entre los clientes. +- __Predictibilidad máxima__ : Usted controla las tasas de virtualización, la carga de IOPS en el almacenamiento y disfruta de una facturación clara, basada en el consumo mensual. -The platform is certified __SecNumCloud__ by the [ANSSI](https://www.ssi.gouv.fr/), ensuring a high level of automation and security. +La plataforma está certificada __SecNumCloud__ por la [ANSSI](https://www.ssi.gouv.fr/), lo que garantiza un alto nivel de automatización y seguridad. ## Principales funcionalidades @@ -32,376 +32,413 @@ The platform is certified __SecNumCloud__ by the [ANSSI](https://www.ssi.gouv.fr - Recursos de red (Internet, redes privadas). - Copias de seguridad cruzadas con retención configurable. - Replicación asíncrona para almacenamiento o máquinas virtuales. -- Gestión mediante la [Consola](../console/console.md) o en modo Infraestructura como Código gracias a las APIs y al provider de Terraform. +- Gestión mediante la [Consola](../console/console.md) o en modo Infraestructura como Código gracias a las APIs y al proveedor de Terraform. ## Ventajas -| Ventaja | Descripción | -|---------------------|------------------------------------------------------------------------------------------------------------------------------------------------| -| Confianza digital | Almacenamiento de datos en Francia y cumplimiento del RGPD. | -| Seguridad | Plataforma altamente segura, certificada __SecNumCloud__, __HDS__ (Almacenamiento de Datos de Salud), __ISO 27001__ y __ISAE 3402 tipo II__. | -| Alta disponibilidad | Tasa de disponibilidad de la plataforma del 99,99 %, medida mensualmente, incluyendo las ventanas de mantenimiento. | -| Resiliencia | Implementación de planes de continuidad o recuperación de actividad según las necesidades. | -| Automatización | Plataforma completamente automatizada, diseñada para integrarse en un programa de transformación digital. | -| Por demanda | Recursos disponibles bajo demanda. | +| Ventaja | Descripción | +|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------| +| Confianza digital | Alojamiento de datos en Francia y cumplimiento del RGPD. | +| Seguridad | Plataforma altamente segura, certificada __SecNumCloud__, __HDS__ (Alojamiento de Datos de Salud), __ISO 27001__ y __ISAE 3402 tipo II__. | +| Alta disponibilidad | Tasa de disponibilidad de la plataforma del 99,99%, medida mensualmente, incluidos los periodos de mantenimiento. | +| Resiliencia | Implementación de planes de continuidad o de recuperación ante desastres según las necesidades. | +| Automatización | Plataforma completamente automatizada diseñada para integrarse en un programa de transformación digital. | +| Bajo demanda | Recursos disponibles bajo demanda. | -## Regions and Availability Zones +## Regiones y zonas de disponibilidad -The VMware IaaS product is deployed within an availability zone. -An [availability zone](../additional_content/concepts_az.md) is part of a [region](../additional_content/concepts_regional.md). +El producto IaaS de VMware se implementa en una zona de disponibilidad. +Una [zona de disponibilidad](../additional_content/concepts_az.md) forma parte de una [región](../additional_content/concepts_regional.md). -This deployment model allows you to select the location of clusters and distribute them across different availability zones (AZ). -This provides better load distribution, maximizes redundancy, and simplifies the implementation of a disaster recovery plan (DRP) in the event of an incident. +Este tipo de implementación permite elegir la ubicación de los clústeres y poder distribuirlos en diferentes zonas de disponibilidad (AZ). +Esto ofrece una mejor distribución de la carga, maximiza la redundancia y facilita la implementación de un plan de recuperación ante desastres (DRP) en caso de incidente. -## Computing +--- + +## Cálculo -The blades provided by Cloud Temple are of type __CISCO UCS B200__ or __CISCO UCS X210c__. They are fully managed by Cloud Temple (firmware, OS version, etc.) through the Cloud Temple console. +Las lamas proporcionadas por Cloud Temple son de tipo __CISCO UCS B200__ o __CISCO UCS X210c__. Están completamente gestionadas por Cloud Temple (firmware, versión del SO, ...) a través de la consola Cloud Temple. -Several categories of computing blades are available in the catalog to support your workloads (virtualization, containerization, etc.). These blades have different characteristics and performance levels to best meet your needs. The computing blade catalog is regularly updated. +Varias categorías de lamas de cálculo están disponibles en el catálogo para soportar sus cargas de trabajo (Virtualización, Contenerización, ...). +Estas presentan características y rendimientos diferentes para adaptarse mejor a sus necesidades. El catálogo de lamas de cálculo se actualiza regularmente. -When using an offer with virtualization, a hypervisor cluster must consist exclusively of blades of the same type (it is not possible to mix different blade types within the same cluster). +En el contexto de uso con una oferta de virtualización, un clúster de hipervisores está compuesto únicamente por lamas de cálculo del mismo tipo (no es posible mezclar lamas de diferentes tipos en un mismo clúster). -| Reference | RAM __(1)__ | Frequency __(2)__ | Number of Cores / Threads | Connectivity __(3)__ | GPU __(4)__ | SKU for VMware Offer | +| Referencia | RAM __(1)__ | Frecuencia __(2)__ | Número de núcleos / hilos | Conectividad __(3)__ | GPU __(4)__ | SKU para la oferta VMware | | --------------------- | ------------ | ----------------------------------------- | -------------------------- | -------------------- | -------------------- | ------------------------------- | -| ECO v3 Blade | 384 GB | 2.20/3.0 GHz (Silver 4114 or equivalent) | 20 / 40 threads | 2 × 10 Gbit/s | | csp:fr1:iaas:vmware:eco:v3 | -| STANDARD v3 Blade | 384 GB | 2.40/3.4 GHz (Silver 4314 or equivalent) | 32 / 64 threads | 2 × 25 Gbit/s | | csp:fr1:iaas:vmware:standard:v3 | -| ADVANCE v3 Blade | 768 GB | 2.80/3.5 GHz (Gold 6342 or equivalent) | 48 / 96 threads | 2 × 25 Gbit/s | | csp:fr1:iaas:vmware:advance:v3 | -| PERFORMANCE 1 v3 Blade| 384 GB | 3.20/3.6 GHz (Xeon E-53I5Y or equivalent) | 16 / 32 threads | 2 × 25 Gbit/s | | csp:fr1:iaas:vmware:perf1:v3 | -| PERFORMANCE 2 v3 Blade| 768 GB | 3.00/3.6 GHz (Gold 6354 or equivalent) | 36 / 72 threads | 2 × 25 Gbit/s | | csp:fr1:iaas:vmware:perf2:v3 | -| PERFORMANCE 3 v3 Blade| 1536 GB | 2.60/3.5 GHz (Gold 6348 or equivalent) | 56 / 112 threads | 2 × 25 Gbit/s | | csp:fr1:iaas:vmware:perf3:v3 | -| PERFORMANCE 4 v3 Blade| 512 GB | 2.50/4.1 GHz (Intel 6426Y or equivalent) | 32 / 64 threads | 2 × 25 Gbit/s | 2 × NVIDIA L40S 48GB | csp:fr1:iaas:vmware:perf4:v3 | +| Lama ECO v3 | 384 Go | 2.20/3.0 GHz (Silver 4114 o equivalente) | 20 / 40 hilos | 2 X 10 Gbit/s | | csp:fr1:iaas:vmware:eco:v3 | +| Lama STANDARD v3 | 384 Go | 2.40/3.4 GHz (Silver 4314 o equivalente) | 32 / 64 hilos | 2 X 25 Gbit/s | | csp:fr1:iaas:vmware:standard:v3 | +| Lama ADVANCE v3 | 768 Go | 2.80/3.5 GHz (Gold 6342 o equivalente) | 48 / 96 hilos | 2 X 25 Gbit/s | | csp:fr1:iaas:vmware:advance:v3 | +| Lama PERFORMANCE 1 v3 | 384 Go | 3.20/3.6 GHz (Xeon E-53I5Y o equivalente) | 16 / 32 hilos | 2 X 25 Gbit/s | | csp:fr1:iaas:vmware:perf1:v3 | +| Lama PERFORMANCE 2 v3 | 768 Go | 3.00/3.6 GHz (Gold 6354 o equivalente) | 36 / 72 hilos | 2 X 25 Gbit/s | | csp:fr1:iaas:vmware:perf2:v3 | +| Lama PERFORMANCE 3 v3 | 1536 Go | 2.60/3.5 GHz (Gold 6348 o equivalente) | 56 / 112 hilos | 2 X 25 Gbit/s | | csp:fr1:iaas:vmware:perf3:v3 | +| Lama PERFORMANCE 4 v3 | 512 Go | 2.50/4.1 GHz (Intel 6426Y o equivalente) | 32 / 64 hilos | 2 X 25 Gbit/s | 2 x NVIDIA L40S 48 Go | csp:fr1:iaas:vmware:perf4:v3 | -__Notes__: +__Notas__ : -- __(1)__ The amount of memory delivered corresponds to the physical memory available on the blades. It is not possible to change the physical memory capacity of a blade. +- __(1)__ La cantidad de memoria entregada es la físicamente disponible en las lamas. No es posible cambiar la cantidad física de memoria de una lama. -- __(2)__ Minimum base frequency / turbo frequency, expressed in GHz. By default, processors are configured in the BIOS for maximum performance. +- __(2)__ Frecuencia base mínima / frecuencia turbo, expresada en GHz. Por defecto, los procesadores están configurados para un rendimiento máximo a nivel de BIOS. -- __(3)__ Physical connectivity is shared between network and block storage access, as the CISCO platform is converged. +- __(3)__ La conectividad física se comparte para el acceso a la red y al almacenamiento en bloque, ya que la plataforma CISCO es convergente. -- __(4)__ The available GPU offering is continuously evolving. As of May 1, 2024, the offering is based on NVIDIA LOVELACE L40S GPUs. By default, the PERF4 blade is delivered with two 48 GB L40S cards. Contact support for further details if needed. +- __(4)__ La oferta de GPU disponible realmente evoluciona constantemente. Al 1 de mayo de 2024, la oferta se basa en los GPU NVIDIA LOVELACE L40S. Por defecto, la lama PERF4 se entrega con 2 tarjetas L40S de 48 Go de RAM. Contacte con el soporte para más detalles si es necesario. -The availability of the computing offering is 99.99%, calculated monthly, including maintenance windows. Eligibility for SLA non-compliance requires the creation of an incident ticket. You must also have at least two hosts per cluster and enable the __High Availability__ (HA) feature. -This feature allows your architecture to automatically restart your virtual machines on the second hypervisor in case of failure. If a zone of availability contains only one hypervisor, automatic restart is not possible. +La disponibilidad de la oferta de cálculo es del 99.99%, calculada mensualmente, incluyendo el periodo de mantenimiento. La elegibilidad en caso de incumplimiento del SLA está sujeta a la creación de un ticket de incidencia. También debe contar con al menos dos hosts por clúster y activar la función __High Availability__ (HA). +Esta función permite que su arquitectura reinicie automáticamente sus máquinas virtuales en el segundo hipervisor. +En el caso de que una zona de disponibilidad contenga solo un hipervisor, el reinicio automático no es posible. ## Red -El servicio de red en la plataforma IaaS de Cloud Temple se basa en una infraestructura de red basada en la tecnología VPLS, ofreciendo una segmentación flexible y eficiente para satisfacer las necesidades de los clientes en cuanto a conectividad e aislamiento de red. +El servicio de red en la plataforma IaaS de Cloud Temple se basa en una infraestructura de red basada en la tecnología VPLS, ofreciendo una segmentación flexible y de alto rendimiento para satisfacer las necesidades de los clientes en materia de conectividad y aislamiento de red. ### VLANs de nivel 2 -Los VLANs disponibles en la oferta IaaS son de tipo __nivel 2__, ofreciendo una aislamiento de red completo y una configuración adaptable según las necesidades. +Los VLANs disponibles en el producto IaaS son de tipo __nivel 2__, ofreciendo un aislamiento de red completo y una configuración adaptable según las necesidades. -#### Conceptos principales +#### Principales conceptos +- __Compartición entre clusters y zonas de disponibilidad (AZ)__ : + - Los VLAN pueden compartirse entre las distintas AZ y los distintos clusters que pertenecen al mismo tenant. +- __Propagación inter-tenant__ : + - Los VLAN pueden propagarse entre varios tenants que pertenecen a una misma organización, facilitando las comunicaciones internas. -- __Compartición entre clústeres y zonas de disponibilidad (AZ)__: - - Los VLANs pueden compartirse entre diferentes AZ y distintos clústeres que pertenecen al mismo inquilino. -- __Propagación entre inquilinos__: - - Los VLANs pueden propagarse entre varios inquilinos que pertenecen a la misma organización, facilitando las comunicaciones internas. +--- -### Rendimiento de red +### Rendimiento de la red La infraestructura de red garantiza una baja latencia para un rendimiento óptimo: -- __Latencia intra-AZ__: Inferior a __3 ms__. -- __Latencia inter-AZ__: Inferior a __5 ms__. +- __Latencia intra-AZ__: inferior a __3 ms__. +- __Latencia inter-AZ__: inferior a __5 ms__. + +--- ### Puntos clave -1. __Flexibilidad__: Los VLANs pueden configurarse para adaptarse a entornos multi-clúster y multi-inquilinos. -2. __Alto rendimiento__: Una latencia mínima garantiza una comunicación rápida y eficaz entre las zonas de disponibilidad. -3. __Aislamiento y seguridad__: Los VLANs de nivel 2 ofrecen una segmentación de red estricta para proteger los datos y los flujos. +1. __Flexibilidad__ : Los VLAN pueden configurarse para adaptarse a entornos multi-cluster y multiinquilino. +2. __Alto rendimiento__ : Una latencia mínima garantiza una comunicación rápida y eficiente entre las zonas de disponibilidad. +3. __Aislamiento y seguridad__ : Los VLAN de nivel 2 ofrecen una segmentación de red estricta para proteger los datos y el tráfico. + +--- -## Block Storage +## Almacenamiento en bloque -Cloud Temple offers several classes of storage based on [IBM FlashSystem](https://www.ibm.com/flashsystem/) and [IBM SVC](https://www.ibm.com/products/san-volume-controller) technology. +Cloud Temple ofrece varias clases de almacenamiento basadas en la tecnología [IBM FlashSystem](https://www.ibm.com/flashsystem/) +y [IBM SVC](https://www.ibm.com/products/san-volume-controller). -The __IBM SVC__ technology enables delivering the required performance levels for our clients' environments, thanks to the large amount of embedded memory cache in the controllers and the ability to distribute a server's total IOPS across multiple SANs. +La tecnología __IBM SVC__ permite ofrecer el nivel de rendimiento requerido para los entornos de nuestros clientes gracias a la gran +cantidad de memoria caché integrada en los controladores y a la posibilidad de distribuir todos los IOPS +de un servidor en varios SAN. -It is also used to enable replication of your block storage LUNs across availability zones or to facilitate maintenance operations on storage arrays. +También se utiliza para permitir la replicación de sus LUNs de almacenamiento en modo bloque entre +las zonas de disponibilidad o facilitar las intervenciones en las matrices de almacenamiento. -The storage is primarily NVMe flash storage dedicated to professional workloads. The drives are used by the storage arrays in [__'Distributed RAID 6'__](https://www.ibm.com/docs/en/flashsystem-5x00/8.6.x?topic=configurations-distributed-raid-array-properties). +El almacenamiento es principalmente almacenamiento de tipo FLASH NVME dedicado a cargas de trabajo profesionales. +Los discos son utilizados por las matrices de almacenamiento en [__'Distributed Raid 6'__](https://www.ibm.com/docs/en/flashsystem-5x00/8.6.x?topic=configurations-distributed-raid-array-properties). -### Seguridad y cifrado del almacenamiento en bloques +### Seguridad y Cifrado del Almacenamiento en Bloques Para garantizar la confidencialidad de sus datos en reposo, toda nuestra infraestructura de almacenamiento en bloques integra un cifrado hardware robusto. -- __Tipo de cifrado__: Los datos se cifran directamente en los discos (`Datos en reposo`) utilizando el algoritmo __XTS-AES 256__. -- __Cumplimiento__: Este método de cifrado cumple con la norma __FIPS 140-2__, asegurando un alto nivel de seguridad validado. -- __Funcionamiento__: El cifrado se aplica en el momento de escritura de los datos en el soporte físico de almacenamiento. +- __Tipo de Cifrado__ : Los datos se cifran directamente en los discos (`Data At Rest`) utilizando el algoritmo __XTS-AES 256__. +- __Conformidad__ : Este método de cifrado cumple con la norma __FIPS 140-2__, garantizando un alto nivel de seguridad validado. +- __Funcionamiento__ : El cifrado se aplica en el momento de la escritura de los datos en el soporte de almacenamiento físico. :::warning[Punto de atención sobre la replicación] -Es importante destacar que este cifrado protege los datos almacenados en los discos. No está activo "en tiempo real" (on-the-fly), lo que significa que los datos no se cifran durante las operaciones de replicación de almacenamiento entre las zonas de disponibilidad. La seguridad de los transferencias se garantiza mediante canales de comunicación dedicados y seguros. +Es importante tener en cuenta que este cifrado protege los datos almacenados en los discos. No está activo "on-the-fly", lo que significa que los datos no se cifran durante las operaciones de replicación de almacenamiento entre las zonas de disponibilidad. La seguridad de las transferencias está garantizada por canales de comunicación dedicados y seguros. ::: -La clase de almacenamiento __'Mass Storage'__ ofrece discos mecánicos para necesidades de archivado en un contexto de eficiencia económica. Varios niveles de rendimiento están disponibles: +La clase de almacenamiento __'Mass Storage'__ ofrece discos mecánicos para necesidades de archivado en un contexto de eficiencia económica. Se disponen de varios niveles de rendimiento: -| Referencia | Unidad | Techo máximo IOPS / LUN | Ancho de banda máx / LUN | SKU | -|-----------------------------------|--------|----------------------------------------------| -| FLASH - Esencial - 500 IOPS/To | 1 Gio | csp:(region):iaas:storage:bloc:live:v1 | -| FLASH - Estándar - 1500 IOPS/To | 1 Gio | csp:(region):iaas:storage:bloc:medium:v1 | -| FLASH - Premium - 3000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:premium:v1 | -| FLASH - Enterprise - 7500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:enterprise:v1 | -| FLASH - Ultra - 15000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:ultra:v1 | -| MASS STORAGE - Archivo | 1 Tio | csp:(region):iaas:storage:bloc:mass:v1 | +| Referencia | Unidad | Límite máximo de IOPS / LUN | Ancho de banda máximo / LUN | SKU | +|-----------------------------------|--------|-----------------------------|-----------------------------|----------------------------------------------| +| FLASH - Esencial - 500 IOPS/To | 1 Gio | 10 000 IOPS | 512 Mo/s | csp:(region):iaas:storage:bloc:live:v1 | +| FLASH - Estándar - 1500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:medium:v1 | +| FLASH - Premium - 3000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:premium:v1 | +| FLASH - Enterprise - 7500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:enterprise:v1 | +| FLASH - Ultra - 15000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:ultra:v1 | +| MASS STORAGE - Archivado | 1 Tio | No garantizado | No garantizado | csp:(region):iaas:storage:bloc:mass:v1 | *__Nota__ :* -- *El rendimiento efectivo para una clase de almacenamiento está relacionado con el volumen realmente solicitado, según la métrica "IOPS/To", entendida como "límite de IOPS por tera asignado",* +- *El rendimiento efectivo de una LUN (Datastore) crece de manera lineal en función del volumen asignado (selon son ratio d'IOPS/To), __dentro del límite de hardware absoluto definido anteriormente__.* -> *Así, un volumen de 0,5 To en la clase de rendimiento 'Estándar' tendrá un límite de IOPS fijado en 750 IOPS,* -> *De igual forma, un volumen de 10 To en la clase de rendimiento 'Ultra' tendrá un límite de IOPS de 150000 IOPS,* +> *Por ejemplo, un volumen de 0,5 To en clase 'Standard' contará con 750 IOPS.* +> *Por el contrario, un volumen de 10 To en clase 'Ultra' (théoriquement 150 000 IOPS) estará limitado por el límite físico absoluto y se estabilizará en 30 000 IOPS y 1024 Mo/s.* -- *El límite de IOPS se aplica al volumen, por lo tanto, a la noción de Datastore en un entorno VMware,* -- *La disponibilidad del almacenamiento es del 99,99% medida mensualmente, incluida la ventana de mantenimiento,* -- *No hay restricciones ni cuotas en lectura o escritura,* +- *Estas limitaciones (IOPS y ancho de banda) se aplican a nivel del volumen de almacenamiento, es decir, a nivel del Datastore para un entorno VMware,* +- *La disponibilidad del almacenamiento es del 99.99% medido mensualmente, incluyendo el rango de mantenimiento,* +- *No hay restricción ni cuota sobre la lectura o escritura,* - *No hay facturación por IOPS,* -- *No hay compromiso de rendimiento para la clase __'Mass Storage'__,* +- *No hay compromiso de rendimiento en la clase __'Mass Storage'__,* - *El tamaño mínimo de una LUN de almacenamiento es de 500 Gio,* - *Al utilizar un mecanismo de replicación de almacenamiento, el rendimiento debe ser idéntico en ambas zonas de disponibilidad,* -- *No se implementa ningún mecanismo de optimización "inteligente" como compresión o deduplicación: cuando reserva 10 Tio de almacenamiento, tiene físicamente 10 Tio útiles de almacenamiento implementados en las máquinas IBM.* -- *Las LUNs de almacenamiento están dedicadas al entorno del cliente.* +- *No se implementa ningún mecanismo de optimización "inteligente" de tipo compresión o deduplicación: cuando reserva 10 Tio de almacenamiento, tiene físicamente 10 Tio de almacenamiento útil implementado en las máquinas IBM.* +- *Las LUN de almacenamiento están dedicadas al entorno del cliente.* -### Uso dentro del marco de la oferta de cálculo VMware +### Uso en el marco de la oferta de computación VMware -En el marco del uso del almacenamiento en modo bloque como datastore en la oferta de cálculo VMware de Cloud Temple, __debe tener en cuenta varias consideraciones importantes__: +En el marco del uso del almacenamiento en modo bloque como datastore en la oferta de computación VMware de Cloud Temple, __debe tener en cuenta varias consideraciones importantes__ : -1. __Archivo de intercambio (.VSWP) al arrancar máquinas virtuales__: Cuando una máquina virtual se inicia, crea un archivo .VSWP del tamaño de su memoria en el disco. Por lo tanto, para poder arrancar sus máquinas virtuales, siempre debe disponer en su datastore de un espacio libre equivalente a la suma de las capacidades de memoria de sus máquinas virtuales. Por ejemplo, si su datastore dispone de 1 TiB de almacenamiento en bloque y desea arrancar 10 máquinas virtuales con 64 GiB de memoria cada una, se necesitarán 640 GiB de espacio en disco. Sin este espacio, el arranque de las máquinas quedará limitado por la capacidad disponible para crear los archivos de intercambio. +1. __Archivo de intercambio (.VSWP) durante el arranque de las máquinas virtuales__ : Cuando una máquina virtual arranca, crea un archivo .VSWP del tamaño de su memoria en el disco. Por lo tanto, para poder arrancar sus máquinas virtuales, siempre debe disponer en su datastore de un espacio libre equivalente a la suma de los tamaños de memoria de sus máquinas virtuales. Por ejemplo, si su datastore dispone de 1 TiB de almacenamiento por bloques y desea arrancar 10 máquinas virtuales de 64 GiB de memoria cada una, se necesitarán 640 GiB de espacio en disco. Sin este espacio, el arranque de las máquinas se verá limitado por la capacidad disponible para crear los archivos de intercambio. -2. __Espacio libre para instantáneas de copia de seguridad__: El servicio de copia de seguridad utiliza instantáneas instantáneas (snapshots). Por lo tanto, siempre debe disponer de suficiente espacio libre para permitir la creación de una instantánea durante la copia de seguridad de una máquina virtual. El tamaño de la instantánea depende del volumen de escritura de la máquina virtual y del tiempo necesario para realizar la copia de seguridad. En general, se recomienda mantener al menos un 10 % de espacio libre para esta operación. +2. __Espacio libre para las instantáneas de copia de seguridad__ : El servicio de copia de seguridad utiliza instantáneas (snapshots). Por lo tanto, siempre debe disponer de suficiente espacio libre para permitir la creación de una instantánea durante la copia de seguridad de una máquina virtual. El tamaño de la instantánea depende del volumen de escritura de la máquina virtual y del tiempo necesario para realizar la copia de seguridad. Por regla general, se recomienda mantener al menos un 10 % de espacio libre para esta operación. -3. __Gestión de discos dinámicos__: Tenga cuidado con el uso de discos dinámicos. Si no controla su crecimiento, la falta de espacio físico puede provocar una congelación (freeze) de la máquina virtual en el mejor de los casos, o un fallo con corrupción en el peor de los casos. Es fundamental supervisar cuidadosamente el espacio disponible en sus datastores cuando utiliza este tipo de disco. +3. __Gestión de discos dinámicos__ : Tenga cuidado con el uso de discos dinámicos. Si no controla su crecimiento, una falta de espacio físico puede provocar una congelación (freeze) de la máquina virtual en el mejor de los casos, o un fallo con corrupción en el peor de los casos. Es crucial supervisar atentamente el espacio disponible en sus datastores cuando utilice este tipo de discos. -Una gestión proactiva del espacio en disco es esencial para garantizar el buen funcionamiento de sus máquinas virtuales y la fiabilidad de las copias de seguridad. Asegúrese siempre de disponer del espacio necesario para los archivos de intercambio, las instantáneas y el crecimiento de los discos dinámicos. +Una gestión proactiva del espacio en disco es esencial para garantizar el correcto funcionamiento de sus máquinas virtuales y la fiabilidad de las copias de seguridad. Asegúrese de disponer siempre del espacio necesario para los archivos de intercambio, las instantáneas y el crecimiento de los discos dinámicos. -## Backup storage +## Almacenamiento en modo de copia de seguridad -The storage dedicated to backing up your virtual machines is automatically provisioned by the platform, up to the quota ordered. +El almacenamiento dedicado a la copia de seguridad de sus máquinas virtuales se aprovisiona automáticamente por la plataforma dentro del límite de la cuota solicitada. -| Reference | Unit | SKU | -|--------------------------|------|------------------------------------------| -| MASS STORAGE - Archiving | 1 TiB | csp:(region):iaas:storage:bloc:backup:v1 | +| Referencia | Unidad | SKU | +|--------------------------|--------|------------------------------------------| +| ALMACENAMIENTO MASIVO - Archivo | 1 TiB | csp:(region):iaas:storage:bloc:backup:v1 | -### Replicación del almacenamiento en modo de bloque +### Replicación del almacenamiento en bloque #### Principios -Para permitir la implementación de sus planes de recuperación de actividad, cuando no es posible mantener una situación de continuidad de actividad mediante mecanismos aplicativos y la replicación de máquinas virtuales no es adecuada, Cloud Temple ofrece __mecanismos de replicación de almacenamiento en modo bloque entre las zonas de disponibilidad de una región__. +Para permitir la implementación de sus planes de recuperación ante desastres, cuando no es posible garantizar la +continuidad operativa mediante mecanismos a nivel de aplicación y la réplica de máquinas virtuales +no resulta adecuada, Cloud Temple ofrece __mecanismos de réplica de almacenamiento en modo bloque entre las zonas de disponibilidad de una región__. -Estos mecanismos de replicación se aplican sobre los LUNs de almacenamiento de sus entornos, complementariamente a las copias de seguridad. La decisión de utilizar un mecanismo de replicación en un entorno __depende de múltiples factores, como su criticidad, la pérdida de datos tolerada o el rendimiento esperado para la aplicación__. +Estos mecanismos de réplica se aplican a los LUN de almacenamiento de sus entornos, como complemento de las copias de seguridad. +La elección de utilizar un mecanismo de réplica en un entorno __depende de numerosos factores, como su criticidad, la pérdida de datos tolerable o el rendimiento objetivo__ para la aplicación. -Cloud Temple ofrece dos tipos de mecanismos desplegados en una configuración activo/pasivo: +Cloud Temple ofrece dos tipos de mecanismos implementados en una configuración activo/pasivo: -- La replicación __asincrónica__ (o __'Global Mirror'__): *La función __'Global Mirror'__ proporciona un proceso de copia asincrónica. Cuando un host escribe en el volumen primario, la confirmación de finalización de la operación de E/S se recibe antes de que la operación de escritura se complete en el volumen secundario. Si se inicia una operación de conmutación, la aplicación debe recuperar y aplicar todas las actualizaciones que no se han confirmado en el volumen secundario. Si las operaciones de E/S en el volumen primario se pausan durante un breve periodo, el volumen secundario puede convertirse en una copia exacta del volumen primario. Esta función es comparable a un proceso de copia de seguridad continua en el que siempre faltan las últimas actualizaciones. Cuando utilice Global Mirror con fines de recuperación tras un siniestro, debe reflexionar sobre cómo desea gestionar estas actualizaciones pendientes.* +- La réplica __asíncrona__ (o __'Global Mirror'__): *La función __'Global Mirror'__ proporciona un proceso de copia asíncrona. +Cuando un host escribe en el volumen primario, la confirmación de finalización de la E/S se recibe antes de que la operación +de escritura se complete para la copia en el volumen secundario. Si se inicia una operación de conmutación por error, la aplicación +debe recuperar y aplicar todas las actualizaciones que no hayan sido confirmadas en el volumen secundario. +Si las operaciones de E/S en el volumen primario se pausan durante un breve período, +el volumen secundario puede convertirse en una réplica exacta del volumen primario. Esta función es comparable a un proceso +de copia de seguridad continua en el que las últimas actualizaciones siempre están pendientes. +Cuando utilice Global Mirror con fines de recuperación ante desastres, debe considerar cómo desea gestionar estas actualizaciones pendientes.* -- La replicación __sincrónica__ (o __'Metro Mirror'__): *La función __'Metro Mirror'__ es un tipo de copia remota que crea una copia sincrónica de los datos de un volumen primario hacia un volumen secundario. Con copias sincrónicas, los hosts de aplicaciones escriben en el volumen primario, pero no reciben confirmación de que la operación de escritura ha finalizado hasta que los datos se han escrito en el volumen secundario. Esto garantiza que ambos volúmenes contengan datos idénticos cuando finaliza la operación de copia. Tras finalizar la operación de copia inicial, la función Metro Mirror mantiene permanentemente una copia completamente sincronizada de los datos de origen en el sitio objetivo. __Desde el 1 de enero de 2024, la función 'Metro Mirror' ya no se comercializa.__* +- La réplica __síncrona__ (o __'Metro Mirror'__): *La función __'Metro Mirror'__ es un tipo de copia remota que crea una copia síncrona +de los datos de un volumen primario a un volumen secundario. Con las copias síncronas, las aplicaciones host escriben en el volumen primario, pero no reciben confirmación +de que la operación de escritura ha finalizado hasta que los datos se han escrito en el volumen secundario. Esto garantiza que ambos volúmenes contengan datos idénticos cuando +la operación de copia inicial haya finalizado, la función Metro Mirror +mantiene de forma permanente una copia completamente sincronizada de los datos de origen en el sitio de destino. __Desde el 1 de enero de 2024, la función 'Metro Mirror' ya no se comercializa.__* -Se define entonces un sitio denominado "activo" o "principal" y un sitio "pasivo" o "en espera". El plan de recuperación de actividad se activa en caso de siniestro o dentro del marco de una prueba del PRA. A continuación, el sitio pasivo asume el control del sitio activo. +Se define entonces un sitio denominado "activo" o "principal" y un sitio "pasivo" o "standby". +El plan de recuperación ante desastres se activa en caso de incidente o como parte de una solicitud de prueba del PRA. +El sitio pasivo toma entonces el relevo del sitio activo. #### Replicación asíncrona -Cuando sus cargas de trabajo requieren tiempos de recuperación cortos y no es aceptable o adecuado utilizar mecanismos de replicación aplicativa o replicación de máquinas virtuales, es posible replicar una LUN de almacenamiento SAN entre dos zonas de disponibilidad de la misma región. +Cuando sus cargas de trabajo requieren tiempos de recuperación cortos y no es aceptable o adecuado utilizar mecanismos de tipo replicación a nivel de aplicación / replicación de máquinas virtuales, +es posible replicar una LUN de almacenamiento SAN entre dos zonas de disponibilidad de una misma región. -Esta oferta permite obtener un __RPO de 15 minutos__ y un __RTO inferior a 4 horas__. Permite reiniciar mucho más rápidamente que la implementación de una restauración de copia de seguridad. +Este producto permite obtener un __RPO de 15 min__ y un __RTO inferior a 4 h__. Permite reanudar la actividad mucho más rápidamente que +la implementación de una restauración de copia de seguridad. -En un volumen de almacenamiento con replicación asíncrona (__Global Mirror__), los controladores de virtualización SAN de ambas zonas de disponibilidad trabajan conjuntamente para realizar las operaciones de escritura en ambos sitios. El sitio principal no espera el acuse de recibo de escritura del sitio secundario. +En un volumen de almacenamiento en replicación asíncrona (__Global Mirror__), los controladores de virtualización SAN de las +dos zonas de disponibilidad trabajan conjuntamente para realizar las operaciones de escritura en ambos sitios. +El sitio principal no espera el acuse de recibo de escritura del sitio secundario. -Los pasos de una operación de escritura son los siguientes: +Las etapas de una operación de escritura son las siguientes : -1. Un hipervisor desea realizar __una operación de escritura en un volumen Global-Mirror__: envía su solicitud al controlador SAN de su zona de disponibilidad, +1. Un hipervisor desea realizar __una operación de escritura en un volumen Global-Mirror__ : envía su solicitud al controlador SAN de su zona de disponibilidad, 2. El controlador SAN local solicita al controlador SAN de la zona remota que realice la operación de escritura, -3. El controlador SAN local no espera el acuse de recibo del SAN remoto y realiza entonces la escritura localmente, +3. el controlador SAN local no espera la confirmación del SAN remoto y realiza entonces la escritura localmente, 4. Envía el __acuse de recibo__ al hipervisor que emitió la solicitud, -5. __Los hipervisores del sitio remoto no acceden directamente a la LUN Global Mirror__: se requiere una solicitud de servicio. +5. __Los hipervisores del sitio remoto no acceden directamente a la LUN Global Mirror__ : Es necesario realizar una solicitud de servicio. | SLA | Descripción | |-----------|---------------------------------------------------------------------------------------------------------------------------------------------------| -| RPO 15 min | En caso de siniestro en el centro de datos principal, la cantidad máxima de datos perdidos corresponde a lo más a los 15 últimos minutos de escritura | -| RTO < 4 h | En caso de siniestro en el centro de datos principal, la recuperación de actividad está garantizada en menos de 4 horas según la complejidad de los entornos. | +| RPO 15 min| En caso de desastre en el centro de datos principal, la cantidad máxima de datos perdidos corresponde como máximo a los últimos 15 minutos de escritura | +| RTO < 4 h | En caso de desastre en el centro de datos principal, la reanudación de la actividad está garantizada en 4 horas según la complejidad de los entornos. | -En caso de activación del PRA, el equipo de Cloud Temple realiza una operación de presentación de la LUN __'Global Mirror'__ a los hipervisores remotos para que puedan acceder a los datos. La implementación de esta solución requiere, por tanto, haber reservado en el sitio 'standby' los recursos de cálculo y RAM necesarios para recuperar la actividad en caso de siniestro. +En caso de activación del PRA, el equipo de Cloud Temple realiza una operación de presentación de la LUN __'Global Mirror'__ a los hipervisores remotos para que puedan acceder a los datos. La implementación de esta solución requiere, por tanto, haber reservado en el sitio 'standby' recursos de cálculo y RAM para reanudar la actividad en caso de desastre. -El uso de esta tecnología también requiere duplicar el espacio de disco: es necesario tener exactamente el mismo espacio en el sitio remoto que en el sitio local. +El uso de esta tecnología también requiere el duplicado del espacio en disco : es necesario disponer exactamente del mismo espacio en el sitio remoto que en el sitio local. -El uso de este mecanismo puede afectar el rendimiento de la aplicación hasta en un 10 %. __Solo las clases de almacenamiento 500 IOPS/To, 1500 IOPS/To y 3000 IOPS/To son compatibles.__ +El uso de este mecanismo puede afectar al rendimiento de la aplicación en un 10 %. __Solo son compatibles las clases de almacenamiento 500 Iops/To, 1500 Iops/To y 3000 Iops/TO.__ -| Referencia | Unidad | Techo máximo IOPS / LUN | Ancho de banda máx / LUN | SKU | -|------------------------------------|--------|---------------------------------------------------| -| ALMACENAMIENTO - Replicación Global SAN | 1 TiB | csp:(region):iaas:storage:licence:globalmirror:v1 | +| Referencia | Unidad | SKU | +|------------------------------------|--------|---------------------------------------------------| +| ALMACENAMIENTO - Replicación Global SAN | 1 Tio | csp:(region):iaas:storage:licence:globalmirror:v1 | *__Nota__* : -- *Dado que la oferta es asíncrona, es posible que durante un siniestro algunas operaciones de disco no se hayan escrito en el sitio remoto. Por tanto, puede existir un riesgo de coherencia de datos, mitigado en el análisis de riesgos del plan de recuperación de actividad.* +- *Al ser la oferta asíncrona, es posible que en caso de desastre ciertas operaciones de disco no se hayan escrito en el sitio remoto. Por lo tanto, puede existir un riesgo para la coherencia de los datos, mitigado en el análisis de riesgos del plan de recuperación de actividad.* - *La replicación del almacenamiento en modo bloque se realiza de forma transparente para las máquinas virtuales y las aplicaciones,* -- *Por este motivo, es importante priorizar los escenarios de replicación aplicativa o, en su defecto, la replicación de máquinas virtuales,* -- *El cálculo y la memoria en el sitio de recuperación pueden reducirse para optimizar los costos si una situación degradada es aceptable para el negocio durante la ejecución del plan de recuperación de actividad.* +- *A este respecto, es importante priorizar los escenarios de replicación a nivel de aplicación o, en su defecto, de replicación de máquinas virtuales,* +- *El cálculo y la memoria en el sitio de recuperación pueden reducirse para optimizar los costos si una situación degradada es aceptable para el área de negocio durante la ejecución del plan de recuperación de actividad.* ## Virtualización VMware -La oferta de virtualización VMware Cloud Temple calificada SecNumCloud se basa en la tecnología __VMware Vsphere__. +La oferta de virtualización VMware Cloud Temple cualificada SecNumCloud se basa en la tecnología __VMware vSphere__. -La plataforma es gestionada automáticamente por Cloud Temple (mantenimiento de condiciones de seguridad, mantenimiento en condiciones operativas, ...). -Puede ser controlada a través de la interfaz gráfica de la Consola o mediante las APIs asociadas. +La plataforma es gestionada por Cloud Temple de forma automática (maintien de condition de sécurité, maintien en condition opérationnelle, ...). +Es gestionable a través de la interfaz gráfica de la Consola o mediante las APIs asociadas. -*__Nota__*: *Por razones de seguridad vinculadas a la calificación SecNumCloud, -__no es posible para el cliente acceder directamente a la plataforma de virtualización VMware__ (ningún acceso directo al vCenter, por ejemplo). -De hecho, la calificación SecNumCloud exige __una total segregación__ entre las interfaces de control de los activos técnicos y la interfaz del cliente (la Consola).* +*__Nota__*: *Por razones de seguridad relacionadas con la cualificación SecNumCloud, +__no es posible para el cliente acceder directamente a la plataforma de virtualización VMware__ (aucun accès direct au vCenter notamment). +De hecho, la cualificación SecNumCloud impone __una segregación total__ entre las interfaces de gestión de los activos técnicos y la interfaz del cliente (la Console).* -- Los productos implementados son VMware ESXi, VMware vCenter y VMware Replication. -- *La red de la oferta de virtualización no utiliza la tecnología VMware NSX, sino que es controlada físicamente mediante la tecnología Juniper y el protocolo VPLS.* -- *El almacenamiento no utiliza la tecnología VMware vSAN, sino únicamente SANs IBM en fibra canal de 32 G.* -- *No se implementa ninguna forma de optimización oculta (compresión, deduplicación, ...).* +- Los productos implementados son VMware ESXi, VMware vCenter y VMware Replication. +- *La red de la oferta de virtualización no utiliza la tecnología VMware NSX, sino que es gestionada a nivel de hardware por la tecnología Juniper y el protocolo VPLS.* +- *El almacenamiento no utiliza la tecnología VMware vSAN, sino únicamente SAN de IBM en fibra channel de 32 G.* +- *No se implementa ningún tipo de optimización oculta (compression, deduplication, ...).* -### Definición de un cluster de nodos de cálculo ('Cpool') +### Definición de un clúster de lâmina de cálculo ('Cpool') -El __'Cpool'__ es un agrupamiento de hipervisores VMware ESXi, también conocido como *'cluster ESX'*. +El __'Cpool'__ es un agrupamiento de hipervisores VMware ESXi, también conocido como *'clúster ESX'*. -Los hosts incluidos en un __'Cpool'* pertenecen todos al mismo inquilino y a la misma zona de disponibilidad (AZ). Necesariamente deben tener la misma clase: -__no es posible mezclar modelos diferentes de nodos de cálculo dentro de un mismo cluster__. +Los hosts presentes en un __'Cpool'__ pertenecen todos __al mismo tenant y a la misma zona de disponibilidad__ (AZ). Deben tener necesariamente la misma clase: +__no es posible mezclar diferentes modelos de lâmina de cálculo dentro de un mismo clúster__. -Dado que todos los nodos de cálculo se entregan con la memoria física máxima, se aplica una limitación de uso de RAM a nivel software dentro del cluster para asegurarse de que coincida con la RAM facturada. +Dado que todas las lâminas de cálculo se entregan con la memoria física máxima, se aplica una limitación de uso de RAM a nivel de software en el clúster para garantizar que corresponda a la RAM facturada. -Por defecto, cada nodo dispone de 128 GB de memoria activada dentro del __'Cpool'*. +Por defecto, cada lâmina dispone de 128 GB de memoria activada dentro del __'Cpool'__. -Un __'Cpool'* puede contener como máximo 32 hipervisores. Si se supera este límite, será necesario crear un segundo cluster. +Un __'Cpool'__ puede contener un máximo de 32 hipervisores. Más allá de este límite, será necesario crear un segundo clúster. El almacenamiento puede ser compartido entre los __'Cpool'__. -### Memory Allocation for a 'Cpool' +### Asignación de memoria para un 'Cpool' -Memory reservation is configurable per cluster. You can reduce or increase the amount of RAM to match your cluster-wide requirements. +La reserva de RAM es configurable por clúster. Puede reducir o aumentar la cantidad de RAM para que se ajuste a sus necesidades a escala de clúster. -__Be careful not to exceed an average memory usage of 85% per compute node__. -Indeed, VMware's technology will use a compression-based optimization method that can significantly impact the performance of your workloads and complicate diagnostics. -Similarly, excessive memory pressure on your compute nodes will force the hypervisor to offload part of its memory to disk to meet the needs of virtual machines. +__Tenga cuidado de no superar una media del 85 % de consumo de memoria por nodo de cálculo__. +De hecho, la tecnología VMware utilizará un método de optimización por compresión que puede afectar significativamente el rendimiento de sus cargas de trabajo y complicar el diagnóstico. +Del mismo modo, una presión de memoria excesiva en sus nodos de cálculo obligará al hipervisor a descargar parte de su memoria en disco para satisfacer las necesidades de las máquinas virtuales. -This situation, known as __'Ballooning'__, severely impacts the performance of all virtual machines located on the affected datastore. -__Diagnosis becomes complicated in this context__, as your monitoring will detect impacts at the CPU level rather than at the memory or storage level. -Also keep in mind that the first action the hypervisor performs when starting a virtual machine is to create a __memory swap file (.vswap)__ on disk, with a size equal to the memory allocated to the virtual machine. You must __take this into account when sizing your storage__. +Este caso, denominado __'Ballooning'__, afecta muy significativamente al conjunto del rendimiento de las máquinas virtuales situadas en el almacenamiento (datastore) correspondiente. +__El diagnóstico se complica en este contexto__, ya que sus métricas de monitorización registrarán impactos a nivel de CPU y no de memoria o almacenamiento. +Tenga también en cuenta que lo primero que hace el hipervisor al iniciar una máquina virtual es crear __un archivo de intercambio de memoria__ (.vswap) en +el disco, del tamaño de la memoria de la máquina virtual correspondiente. Debe __tenerlo en cuenta al dimensionar su almacenamiento__. -Each compute node is delivered with 128 GB of memory enabled at the __'Cpool'__ level, but physically has access to all available memory. +Cada nodo de cálculo se entrega con 128Go de memoria activada por software a nivel del __'Cpool'__, pero dispone físicamente de toda la memoria asignable. -For example, in a cluster of three hosts of type ```vmware:standard:v2```, the RAM reservation at activation of the __'Cpool'__ will be 3 x 128 GB = 384 GB of RAM. -You can extend it up to a maximum of 3 x 384 GB = 1,152 GB of memory. +Por ejemplo, para un clúster de tres hosts de tipo ```vmware:standard:v2```, la reserva de RAM al activar el _*'Cpool'* será de 3 x 128Go = 384 Go de RAM. +Podrá ampliarla como máximo a 3 x 384Go = 1152Go de memoria. - Minimum memory for a 'Cpool' = number of hosts × 128 GB of memory - Maximum memory for a 'Cpool' = number of hosts × total physical memory available per compute node + Memoria mínima de un 'Cpool' = número de hosts X 128Go de memoria + Memoria máxima de un 'Cpool' = número de hosts X la cantidad de memoria física del nodo de cálculo -### Cloud Temple Virtual Machine Catalogs +### Catálogos de máquinas virtuales Cloud Temple -Cloud Temple provides you with a catalog of `Templates` regularly enriched and updated by our teams. -To date, it includes dozens of `Templates` and images ready to be deployed on your virtual machines. +Cloud Temple pone a su disposición un catálogo de `Templates` enriquecido y actualizado regularmente por nuestro equipo. +Actualmente, incluye decenas de `Templates` e imágenes para montar en sus máquinas virtuales. ### Actualización de los hipervisores -Cloud Temple proporciona regularmente builds para los hipervisores con el fin de aplicar parches de seguridad. +Cloud Temple proporciona regularmente builds para los hipervisores con el fin de garantizar la aplicación de parches de seguridad. Sin embargo, la actualización de los hipervisores sigue siendo responsabilidad suya, ya que no tenemos visibilidad sobre sus restricciones empresariales. El proceso de actualización es completamente automatizado. Para garantizar la continuidad del servicio, se requiere un mínimo de dos hipervisores por clúster durante la actualización. Asegúrese de disponer de los permisos necesarios para realizar estas acciones. ### Gestión de la afinidad de sus máquinas virtuales -Las __reglas de afinidad y anti-afinidad__ permiten controlar la ubicación de las máquinas virtuales en sus hipervisores. -Pueden utilizarse para gestionar el uso de los recursos de su __'Cpool'__. -Por ejemplo, pueden ayudar a equilibrar la carga de trabajo entre los servidores o a aislar cargas de trabajo intensivas en recursos. -En un __'Cpool'__ VMware, estas reglas suelen utilizarse para gestionar el comportamiento de las máquinas virtuales con vMotion. +Las __reglas de afinidad y anti-afinidad__ permiten controlar la ubicación de las máquinas virtuales en sus hipervisores. +Pueden utilizarse para gestionar el uso de recursos de su __'Cpool'__. +Por ejemplo, pueden ayudar a equilibrar la carga de trabajo entre los servidores o aislar las cargas de trabajo intensivas en recursos. +En un __'Cpool'__ VMware, estas reglas suelen utilizarse para gestionar el comportamiento de las máquinas virtuales con vMotion. vMotion permite mover máquinas virtuales de un host a otro sin interrupción del servicio. Puede configurar mediante la gestión de reglas: -- __Reglas de Afinidad__: Estas reglas aseguran que ciertas máquinas virtuales se ejecuten en el mismo host físico. - Se utilizan para mejorar el rendimiento al mantener juntas las máquinas virtuales que se comunican frecuentemente, - reduciendo así la latencia de red. Las reglas de afinidad son útiles en escenarios donde el rendimiento es crítico, - como en el caso de bases de datos o aplicaciones que requieren una comunicación rápida entre servidores. +- __Reglas de Afinidad__: Estas reglas aseguran que ciertas máquinas virtuales se ejecuten en el mismo host físico. +Se utilizan para mejorar el rendimiento manteniendo las máquinas virtuales que se comunican frecuentemente +entre sí en el mismo servidor para reducir la latencia de red. Las reglas de afinidad son útiles en escenarios +donde el rendimiento es crítico, como en el caso de bases de datos o aplicaciones que requieren una comunicación rápida entre servidores. -- __Reglas de Anti-afinidad__: Por el contrario, estas reglas garantizan que ciertas máquinas virtuales no se ejecuten - en el mismo host físico. Son importantes para la disponibilidad y resiliencia, por ejemplo, - para evitar que todas las máquinas críticas se vean afectadas en caso de fallo de un único servidor. - Las reglas de anti-afinidad son cruciales para aplicaciones que requieren alta disponibilidad, - como en entornos de producción donde la tolerancia a fallos es una prioridad. - Por ejemplo, no desea que sus dos servidores de Active Directory estén en el mismo hipervisor. +- __Reglas de Anti-afinidad__: Por el contrario, estas reglas garantizan que ciertas máquinas virtuales no se ejecuten +en el mismo host físico. Son importantes para la disponibilidad y la resiliencia, por ejemplo, +para evitar que todas las máquinas críticas se vean afectadas en caso de fallo de un único servidor. +Las reglas de anti-afinidad son cruciales para aplicaciones que requieren alta disponibilidad, +como en entornos de producción donde la tolerancia a fallos es una prioridad. +Por ejemplo, no desea que sus dos Active Directory estén en el mismo hipervisor. -Al crear una regla, define el tipo de regla (afinidad / anti-afinidad), el nombre de la regla, -su estado de activación (__'Estado'__) y las máquinas virtuales afectadas en su clúster de hipervisores. +Al crear una regla, define el tipo de regla (afinidad / anti-afinidad), el nombre de la regla, +su estado de activación (__'Estado'__) y las máquinas afectadas de su cluster de hipervisores. -*Nota: las reglas de afinidad/anti-afinidad ofrecidas en la consola son reglas que afectan a las máquinas virtuales entre sí (no hay reglas entre hipervisores y máquinas virtuales).* +*Nota: las reglas de afinidad/anti-afinidad ofrecidas en la consola son reglas relativas a las máquinas virtuales entre sí (no hay reglas entre hipervisores y máquinas virtuales).* -### Replicación asíncrona de sus máquinas virtuales en entorno VMware +### Réplicación asíncrona de sus máquinas virtuales en entorno VMware -La replicación asíncrona de sus máquinas virtuales es un mecanismo que consiste en enviar, desde el hipervisor de origen, las operaciones de escritura al sitio de respaldo a intervalos de tiempo regulares. +La replicación asíncrona de sus máquinas virtuales es un mecanismo que consiste en enviar desde el hipervisor de origen las operaciones de escritura al sitio standby a intervalos de tiempo regulares. -Tras una copia inicial en caliente de todo el almacenamiento activo al sitio de respaldo, únicamente se envían las escrituras a intervalos regulares al sitio en estado de espera. -Este intervalo depende del volumen de escritura (desde cada hora hasta cada 24 horas). +Tras una copia inicial en caliente de todo el almacenamiento activo en el sitio standby, solo se envían las escrituras a intervalos regulares al sitio en espera. +Este intervalo depende del volumen de escritura (de cada hora a cada 24 horas). -La replicación de máquinas virtuales se basa en el mecanismo de instantáneas del hipervisor. En este sentido, -esta solución presenta los mismos inconvenientes, especialmente la sensibilidad al volumen de escritura de la máquina virtual, -dado que el proceso de instantánea es un mecanismo recursivo para cerrar la instantánea. +La replicación de las máquinas virtuales se basa en el mecanismo de instantáneas del hipervisor. En este sentido, +esta solución tiene las mismas desventajas, en particular la sensibilidad al volumen de escrituras de la máquina virtual, +siendo el proceso de instantánea un mecanismo recursivo para el cierre de la instantánea. -El ejemplo típico de máquina que no soporta el mecanismo de replicación de máquinas virtuales es un -servidor FTP que recibe flujos en tiempo real de cámaras de seguridad. __La máquina pasa todo su tiempo escribiendo y no podrá -cerrar una instantánea sin pausar el sistema operativo durante un periodo significativo -(varios decenas de minutos)__. Si el hipervisor no logra cerrar la instantánea, exactamente eso hará, -sin posibilidad de intervención salvo corromper la máquina virtual. +El ejemplo típico de máquina que no soporta el mecanismo de replicación de máquinas virtuales es un +servidor FTP que recibe los flujos en tiempo real de cámaras de vigilancia. __La máquina pasa su tiempo escribiendo y no será +capaz de cerrar una instantánea sin pausar el sistema operativo durante un período de tiempo significativo +(varias decenas de minutos)__. Si el hipervisor no puede cerrar la instantánea, hará exactamente eso, +sin posibilidad de intervenir salvo que se corrompa la máquina virtual. | SLA | Descripción | |-----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------| -| RPO de 1H a 24H | En caso de siniestro en el centro de datos principal, la cantidad máxima de datos perdidos será la correspondiente a la última sincronización de escritura al sitio de respaldo. | -| RTO < 15 min | Operación de arranque de la máquina virtual detenida en el sitio remoto | +| RPO de 1H a 24H | En caso de desastre en el datacenter principal, la cantidad máxima de datos perdidos es la de la última sincronización de escrituras en el sitio standby. | +| RTO < 15 min | Operación de inicio de la máquina virtual detenida en el sitio remoto | -En caso de necesidad, o en caso de fallo en una máquina del sitio principal, la máquina espejo en el sitio de respaldo se activa. -La recuperación de actividad requiere disponer de capacidad de cálculo y RAM reservada en el sitio de respaldo. Es -necesario contar con el mismo espacio de almacenamiento en el sitio pasivo que en el sitio activo. +En caso de necesidad, o en caso de fallo en una máquina del sitio principal, se activa la máquina espejo en el sitio standby. +La recuperación de la actividad requiere haber reservado en el sitio standby capacidad de cómputo y RAM en espera. Es +necesario disponer del mismo espacio de almacenamiento en el sitio pasivo que en el sitio activo. -| Referencia | Unidad | Techo máximo IOPS / LUN | Ancho de banda máx / LUN | SKU | +| Referencia | Unidad | SKU | |-----------------------------------|--------|-------------------------------------------------| -| PRA - Replicación VMware inter-AZ | 1 vm | csp:(region):iaas:vmware:licence:replication:v1 | +| PRD - Replicación VMware inter-AZ | 1 vm | csp:(region):iaas:vmware:licence:replication:v1 | *__Nota__ : El cálculo del RPO mínimo debe definirse en función de la tasa de cambio en la máquina virtual.* -## Backup de máquinas virtuales +## Copia de seguridad de máquinas virtuales -Cloud Temple ofrece una __arquitectura nativa de copia de seguridad cruzada e inmutable__ (es obligatoria para la calificación secnumcloud francesa). +Cloud Temple ofrece __una arquitectura de copia de seguridad cruzada nativa y no desactivable__ (es obligatoria en la certificación secnumcloud francesa). -Las copias de seguridad se almacenan en una zona de disponibilidad y en un centro de datos físico distinto del que aloja la máquina virtual. Están cifradas mediante un algoritmo de claves simétricas AES de 256 bits (modo de cifrado `xts-plain64`) para garantizar la confidencialidad de los datos. +Las copias de seguridad se almacenan en una zona de disponibilidad y en un centro de datos físico diferente al que aloja la máquina virtual. Están cifradas mediante un algoritmo de claves simétricas AES de 256 bits (modo de cifrado `xts-plain64`) para garantizar la confidencialidad de los datos. -Esto permite protegerse ante fallos graves en el centro de datos de producción y restaurar en un centro de datos secundario (por ejemplo, en caso de incendio). +Esto permite protegerse ante un fallo grave en el centro de datos de producción y restaurar en un centro de datos secundario (por ejemplo, en caso de incendio). Esta solución incluye: -- Copia de seguridad en caliente fuera de sitio de todos los discos, -- Presentación y arranque instantáneo de una máquina virtual desde la infraestructura de almacenamiento masivo, seguido de recarga en caliente en los SAN de producción, -- Restauración parcial de archivos desde la copia de seguridad, -- Retención limitada únicamente por la asignación de espacio de almacenamiento masivo. +- La copia de seguridad en caliente fuera del sitio de todos los discos, +- La presentación y el arranque instantáneo de una máquina virtual desde la infraestructura de almacenamiento masivo y la recarga en caliente en los SAN de producción, +- La restauración parcial de archivos desde la copia de seguridad, +- Una retención limitada únicamente por la asignación de espacio de almacenamiento masivo. -Esta infraestructura de copia de seguridad se basa en la solución *IBM Spectrum Protect Plus*, una solución sin agente, fácil de usar y que permite la automatización de los procesos de copia de seguridad, además de una optimización del espacio de almacenamiento masivo. +Esta infraestructura de copia de seguridad se basa en la solución *IBM Spectrum Protect Plus*, una solución de arquitectura sin agente, fácil de usar y que permite la automatización de los procesos de copia de seguridad, además de una optimización del espacio de almacenamiento masivo. Las velocidades de copia de seguridad y restauración dependen de la tasa de cambio en los entornos. La política de copia de seguridad es configurable desde [la Consola Cloud Temple](../console/console.md) para cada máquina virtual. *__Nota:__* -*__Algunas máquinas virtuales no son compatibles con esta tecnología de copia de seguridad__, que utiliza los mecanismos de instantáneas del hipervisor. Son típicamente máquinas cuyas cargas de escritura en disco son constantes. No es posible para el hipervisor cerrar la instantánea, lo que obliga a congelar la máquina virtual para poder completar la operación de cierre. Este congelamiento puede durar varias horas y no es interrumpible.* +*__Ciertas máquinas virtuales no son compatibles con esta tecnología de copia de seguridad__ que utiliza los mecanismos de instantáneas del hipervisor. +Se trata típicamente de máquinas cuyas cargas de escritura en disco son constantes. No es posible para el hipervisor cerrar la instantánea, lo que +obliga a congelar la máquina virtual para poder completar la operación de cierre. Esta congelación puede durar varias horas y no se puede detener.* -*La solución consiste entonces en excluir el disco que es objetivo de escrituras permanentes y realizar la copia de seguridad de los datos mediante otro método.* +*La solución es entonces excluir el disco que es objetivo de escrituras permanentes y respaldar los datos mediante otro método.* -| Referencia | Unidad | Techo máximo IOPS / LUN | Ancho de banda máx / LUN | SKU | +| Referencia | Unidad | SKU | | ------------------------------------------------------- | ------ | ------------------------------ | -| SAUVEGARDE - Accès au service IBM Spectrum Protect Plus | 1 VM | csp:(region):iaas:backup:vm:v1 | +| COPIA DE SEGURIDAD - Acceso al servicio IBM Spectrum Protect Plus | 1 VM | csp:(region):iaas:backup:vm:v1 | -#### Create a backup policy +#### Crear una política de copia de seguridad -To create a new backup policy, you must submit a request to support. Support is accessible via the buoy icon in the top-right corner of the window. +Para agregar una nueva política de copia de seguridad, debe realizar una solicitud al soporte. El soporte es accesible desde el icono de salvavidas en la esquina superior derecha de la ventana. -Creating a new backup policy is done through a __service request__ specifying: +La creación de una nueva política de copia de seguridad se realiza mediante __una solicitud de servicio__ que indique: - Your Organization's name - A contact name, email address, and phone number to finalize the configuration - The tenant name - The backup policy name - The retention characteristics (x days, y weeks, z months, ...) + El nombre de su Organización + El nombre de un contacto con su correo electrónico y n.º de teléfono para finalizar la configuración + El nombre del tenant + El nombre de la política de copia de seguridad + Las características (x días, y semanas, z meses, ...) -## Advanced Data Protection (HSM/KMS) +## Protección avanzada de datos (HSM/KMS) -Cloud Temple offers an __advanced virtual machine encryption__ solution based on Hardware Security Modules (HSM) and a Key Management Service (KMS). This feature enhances the protection of sensitive data through centralized and secure key management, seamlessly integrated into the SecNumCloud environment. +Cloud Temple ofrece una solución de __cifrado avanzado de máquinas virtuales__ basada en módulos de seguridad de hardware (HSM) y un servicio de gestión de claves (KMS). Esta funcionalidad permite reforzar la protección de datos sensibles gracias a una gestión centralizada y segura de las claves de cifrado, directamente integrada en el entorno SecNumCloud. ### Arquitectura técnica @@ -411,12 +448,12 @@ La solución se basa en una infraestructura de seguridad robusta compuesta por: - __KMS (Key Management System)__ : __Thales CipherTrust Manager__ para la gestión centralizada de claves - __Integración VMware__ : Comunicación mediante el protocolo __KMIP__ (Key Management Interoperability Protocol) -#### Alta disponibilidad +#### Despliegue de alta disponibilidad La infraestructura HSM se despliega en __tres zonas de disponibilidad__ de la región FR1: - PAR7S -- TH3S +- TH3S - AZ07 Esta distribución garantiza una __alta disponibilidad__ y una __resiliencia__ máxima del servicio de cifrado. @@ -426,77 +463,77 @@ Esta distribución garantiza una __alta disponibilidad__ y una __resiliencia__ m El sistema utiliza una __jerarquía de claves criptográficas__ para garantizar la seguridad de los datos: | Nivel | Tipo de clave | Descripción | Ubicación | -|-------|---------------|-------------|-----------| -| 1 | __Raíz de confianza (RoT)__ | Clave maestra gestionada por KMS | HSM Luna | -| 2 | __Clave de dominio (DK)__ | Clave de dominio por cliente (aislamiento multiinquilino) | HSM Luna | -| 3 | __Clave de cifrado de claves (KEK)__ | Clave de cifrado por VM | CipherTrust Manager | -| 4 | __Clave de cifrado de datos (DEK)__ | Clave de datos por VM | VMware ESXi | +|--------|-------------|-------------|--------------| +| 1 | __Root of Trust (RoT)__ | Clave maestra por KMS | HSM Luna | +| 2 | __Domain Key (DK)__ | Clave de dominio por cliente (aislamiento multiinquilino) | HSM Luna | +| 3 | __Key Encryption Key (KEK)__ | Clave de cifrado por VM | CipherTrust Manager | +| 4 | __Data Encryption Key (DEK)__ | Clave de datos por VM | VMware ESXi | #### Proceso de cifrado -1. __Generación__: VMware ESXi genera una DEK única para cada máquina virtual -2. __Protección__: La DEK se cifra mediante la KEK almacenada en CipherTrust Manager -3. __Seguridad__: La KEK está protegida a su vez por la jerarquía de claves del HSM -4. __Almacenamiento__: La DEK cifrada se almacena junto con los archivos de configuración de la VM +1. __Generación__ : VMware ESXi genera una DEK única para cada máquina virtual +2. __Protección__ : La DEK se cifra con la KEK almacenada en CipherTrust Manager +3. __Protección__ : La KEK está protegida a su vez por la jerarquía de claves HSM +4. __Almacenamiento__ : La DEK cifrada se almacena junto con los archivos de configuración de la VM ### Seguridad y cumplimiento -#### Certifications +#### Certificaciones -- __FIPS 140-3 nivel 3__ : Certificación del nivel más alto para los HSM -- __Common Criteria EAL4+__ : Evaluación avanzada de seguridad -- __SecNumCloud__ : Calificación ANSSI integrada en el entorno Cloud Temple +- __FIPS 140-3 niveau 3__ : Certificación de nivel más alto para HSM +- __Common Criteria EAL4+__ : Evaluación de seguridad avanzada +- __SecNumCloud__ : Cualificación ANSSI integrada en el entorno Cloud Temple #### Aislamiento multiinquilino -- __Separación criptográfica__: Cada cliente dispone de un dominio KMS aislado -- __Claves dedicadas__: Una clave de dominio específica por cliente -- __Auditoría y trazabilidad__: Registro completo de las acciones por dominio +- __Separación criptográfica__ : Cada cliente dispone de un dominio KMS aislado +- __Claves dedicadas__ : Una Domain Key específica por cliente +- __Auditoría y trazabilidad__ : Registro completo de las acciones por dominio ### Activación y uso -El cifrado de máquinas virtuales se activa __con un solo clic__ desde la [Consola](../console/console.md). +El cifrado de las máquinas virtuales se activa __con un solo clic__ desde la [Consola](../console/console.md). Para un procedimiento detallado con capturas de pantalla, consulte el [tutorial de cifrado de máquinas virtuales](tutorials/vm_encryption.md). -#### Requis +#### Requisitos previos -- __Proveedor de claves configurado__: Debe estar activado un proveedor HSM/KMS en la vStack -- __Máquina virtual apagada__: La VM debe estar detenida antes del cifrado -- __Sin replicación activa__: La VM no debe estar replicada (incompatible con Global Mirror) -- __Sin instantáneas__: No debe haber ninguna instantánea presente -- __Suscripción al servicio__: Debe estar suscrito al servicio de protección avanzada +- __Proveedor de claves configurado__ : Debe estar habilitado un proveedor HSM/KMS en la vStack +- __Máquina virtual apagada__ : La VM debe estar detenida antes del cifrado +- __Sin replicación activa__ : La VM no debe estar replicada (incompatible con Global Mirror) +- __Sin instantáneas__ : No debe haber instantáneas presentes +- __Suscripción al servicio__ : Debe suscribirse al servicio de protección avanzada -*__Nota__: Para obtener más detalles sobre los requisitos y el procedimiento completo, consulte la [guía de cifrado de máquinas virtuales](tutorials/vm_encryption.md).* +*__Nota__ : Para más detalles sobre los requisitos previos y el procedimiento completo, consulte la [guía de cifrado de VMs](tutorials/vm_encryption.md).* ### Limitaciones y consideraciones -#### Compatibility +#### Compatibilidad -- __Global Mirror__: Encrypted virtual machines are __not compatible__ with Global Mirror replication -- __Restore__: Backups of encrypted VMs retain their cryptographic protection -- __Export__: Exporting encrypted VMs requires specific procedures +- __Global Mirror__ : Las máquinas virtuales cifradas no son __compatibles__ con la replicación Global Mirror +- __Restauración__ : Las copias de seguridad de VMs cifradas conservan su protección criptográfica +- __Exportación__ : La exportación de VMs cifradas requiere procedimientos específicos #### Rendimiento -- __Impacto mínimo__: El cifrado en hardware garantiza un rendimiento óptimo -- __Transparencia__: Sin impacto en el funcionamiento de las aplicaciones +- __Impacto mínimo__ : El cifrado por hardware garantiza un rendimiento óptimo +- __Transparencia__ : Sin impacto en el funcionamiento de las aplicaciones ### Casos de uso recomendados -Esta solución de protección avanzada es especialmente adecuada para: +Esta solución de protección avanzada es particularmente adecuada para: -- __Datos sensibles__: Información personal, datos financieros, secretos industriales -- __Cumplimiento normativo__: Requisitos RGPD, HIPAA, PCI-DSS, ISO 27001, PDIS -- __Sectores críticos__: Banca, seguros, salud, defensa -- __Soberanía digital__: Protección contra accesos no autorizados, incluso en caso de compromiso +- __Datos sensibles__ : Información personal, datos financieros, secretos industriales +- __Cumplimiento normativo__ : Requisitos RGPD, HIPAA, PCI-DSS, ISO 27001, PDIS +- __Sectores críticos__ : Banca, seguros, salud, defensa +- __Soberanía digital__ : Protección contra accesos no autorizados, incluso en caso de compromiso -| Referencia | Unidad | Techo máximo IOPS / LUN | Ancho de banda máx / LUN | SKU | -|-----------|--------|-----| +| Referencia | Unidad | SKU | +|-----------|-------|-----| | PROTECCIÓN AVANZADA - Cifrado de VM mediante HSM/KMS | 1 VM | csp:(region):iaas:vmware:encryption:hsm:v1 | -*__Nota__*: +*__Nota__ :* -- *El servicio requiere una suscripción específica y no está incluido en la oferta estándar de IaaS* -- *La gestión de claves permanece completamente bajo control de Cloud Temple en el entorno SecNumCloud* -- *Las claves de cifrado nunca abandonan la infraestructura francesa y soberana* +- *El servicio requiere una suscripción específica y no está incluido en el producto IaaS estándar* +- *La gestión de claves permanece completamente bajo el control de Cloud Temple en el entorno SecNumCloud* +- *Las claves de cifrado nunca salen de la infraestructura francesa y soberana* \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/iaas_vmware.md b/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/iaas_vmware.md index dc4bf767..5fa34ebc 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/iaas_vmware.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/iaas_vmware.md @@ -2,7 +2,9 @@ title: Visión general --- -La oferta **IaaS Cloud Temple**, impulsada por VMware, está diseñada para satisfacer las necesidades críticas de las empresas en cuanto a rendimiento, seguridad y continuidad del negocio. Con recursos dedicados, una infraestructura calificada **SecNumCloud**, y opciones completamente automatizadas, esta solución garantiza una fiabilidad óptima para sus cargas de trabajo sensibles. +# IaaS VMware + +La **oferta IaaS VMware** está diseñada para satisfacer las necesidades críticas de las empresas en materia de rendimiento, seguridad y continuidad operativa. Con recursos dedicados, una infraestructura certificada **SecNumCloud** y opciones totalmente automatizadas, este servicio garantiza una fiabilidad óptima para sus cargas de trabajo sensibles.
@@ -11,7 +13,7 @@ La oferta **IaaS Cloud Temple**, impulsada por VMware, está diseñada para sati Explorar los conceptos →
-

Quickstart

+

Inicio rápido

Comience rápidamente con nuestros recursos siguiendo instrucciones claras y sencillas.

Iniciar el Quickstart →
@@ -25,7 +27,7 @@ La oferta **IaaS Cloud Temple**, impulsada por VMware, está diseñada para sati ## Plataformas de compra
-

¿Eres un actor del sector público? La oferta IaaS Cloud Temple está disponible a través de:

+

¿Es usted un actor del sector público? El producto IaaS Cloud Temple es accesible a través de:

@@ -40,7 +42,7 @@ La oferta **IaaS Cloud Temple**, impulsada por VMware, está diseñada para sati

- El mercado CAIH para el sector sanitario + El contrato CAIH para el sector médico

@@ -48,4 +50,4 @@ La oferta **IaaS Cloud Temple**, impulsada por VMware, está diseñada para sati Más información → -
+
\ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/quickstart.md b/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/quickstart.md index 44bac33c..8bca94ce 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/quickstart.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/quickstart.md @@ -34,7 +34,7 @@ import shivaCpool_007 from '@site/docs/iaas_vmware/images/shiva_cpool_007.png' import shivaCpool_008Build from '@site/docs/iaas_vmware/images/shiva_cpool_008_build.png' import shivaCpool_008Firm from '@site/docs/iaas_vmware/images/shiva_cpool_008_firm.png' import shivaCpool_006 from '@site/docs/iaas_vmware/images/shiva_cpool_006.png' -import shivaSupport from '@site/docs/./console/images/shiva_support.png' +import shivaSupport from '@site/docs/console/images/shiva_support.png' import shivaVmPolitiquesBackupAssignMandatory from '@site/docs/iaas_vmware/images/shiva_vm_politiques_backup_assign_mandatory.png' import shivaVmPolitiquesBackup from '@site/docs/iaas_vmware/images/shiva_vm_politiques_backup.png' import shivaVmDisquesVirtuelsPolitiques from '@site/docs/iaas_vmware/images/shiva_vm_disques_virtuels_politiques.png' @@ -54,13 +54,13 @@ import iaasVmwareEsxMemory from '@site/docs/iaas_vmware/images/iaas_vmware_esx_m ## Cálculo -### Gestión de máquinas virtuales +### Gestión de las máquinas virtuales La interfaz de gestión de sus máquinas virtuales está disponible en la Consola, en el menú __'IaaS'__ situado en la barra verde a la izquierda de la pantalla. ### Lista de máquinas virtuales -En la sección __'Máquinas virtuales'__, tiene acceso a la lista de sus máquinas virtuales alojadas en su Cloud de confianza. +En la sección __'Máquinas virtuales'__, tiene acceso a la lista de sus máquinas virtuales alojadas en su nube de confianza. @@ -71,226 +71,228 @@ Tiene acceso a la siguiente información para cada máquina virtual: - su estado (apagada, encendida, en proceso, host desconectado o inválido), - su gestor (en entorno VMware, el Vcenter asociado), - su sistema operativo, -- la cantidad de CPU virtuales (vCPU), +- la cantidad de CPUs virtuales (vCPU), - la cantidad de memoria virtual (vRAM). ### Acciones sobre las máquinas virtuales -Las siguientes acciones son posibles desde esta interfaz: +Las siguientes acciones son posibles desde esta interfaz : -- Actualizar la lista de máquinas virtuales; -- Exportar la lista en formato CSV; -- Filtrar la lista; -- Buscar una máquina virtual por su nombre; +- Actualizar la lista de máquinas virtuales ; +- Exportar la lista en formato CSV ; +- Filtrar la lista ; +- Buscar una máquina virtual por su nombre ; - Crear una nueva máquina virtual. -__Un banner de alertas puede estar presente en la parte superior de la lista__: indica que se han activado alarmas críticas en una o varias de sus máquinas virtuales. +__Puede haber una barra de alertas en la parte superior de la lista__ : indica que se han activado alarmas críticas en una o varias de sus máquinas virtuales. El botón __'Ver'__ permite consultar las máquinas virtuales afectadas por esta notificación. -Cuando hace clic en la flecha desplegable verde a la derecha de la lista para una máquina virtual: +Cuando hace clic en la flecha desplegable verde a la derecha de la lista para una máquina virtual : -Accede a todas las informaciones relacionadas con ella: +Accede a toda la información relacionada con ella : -Un banner rápido permite realizar las siguientes acciones: +Una barra rápida permite realizar las siguientes acciones : -- Encender la máquina virtual; -- Apagarla; -- Reiniciarla; -- Modificar las opciones de alimentación del sistema operativo invitado; -- Abrir la consola; -- Montar un ISO; -- Desmontar un ISO; -- Clonar la máquina virtual; -- Moverla (vMotion); -- Renombrarla; +- Encender la máquina virtual ; +- Apagarla ; +- Reiniciarla ; +- Modificar las opciones de alimentación del SO invitado ; +- Abrir la consola ; +- Montar una ISO ; +- Desmontar una ISO ; +- Clonar la máquina virtual ; +- Moverla (vMotion) ; +- Renombrarla ; - Eliminarla. -Una vista rápida ofrece una visualización del __almacenamiento__, del __CPU__ y de la __RAM__ de la máquina virtual. +Una vista rápida ofrece una visualización del __almacenamiento__, de la __CPU__ y de la __RAM__ de la máquina virtual. -En la pestaña __'Información general'__, encuentra información detallada sobre su máquina virtual, como su sistema operativo, su ubicación física (datacenter, datastore, etc.), la RAM, el CPU, las direcciones IP, los registros (logs) y otros datos. +En la pestaña __'Información general'__, encuentra información detallada relativa a su máquina virtual, como su OS, su ubicación física (datacenter, datastore, etc.), la RAM, el CPU, las direcciones IP, los logs y otros. -Desde esta vista, puede realizar las siguientes acciones: +Desde esta vista, puede realizar las siguientes acciones : -- Modificar el sistema operativo (la máquina virtual debe estar apagada), -- Actualizar la versión del hardware (la máquina virtual debe estar apagada), +- Modificar el sistema operativo (la machine virtuelle devant être éteinte), +- Actualizar la versión del hardware (la machine virtuelle devant être éteinte), - Modificar la RAM o el CPU. -Una pestaña __'Avanzado'__ permite consultar información más específica, como los datos de "VMware Tools", la versión de hardware, el gestor, etc... +Una pestaña __'Avanzado'__ permite consultar información más específica como los datos de "VMware tools", la versión de hardware, el gestor, etc... ### Edición de la RAM o la CPU de una máquina virtual -Vaya al panel __'Máquinas Virtuales'__, muestre los detalles de una máquina virtual, seleccione el panel __'Información general'__ y haga clic en el botón de edición de la variable que desea modificar: +Vaya a la pestaña __'Máquinas Virtuelles'__, muestre los detalles de una máquina virtual, +seleccione la pestaña __'Información general'__ y haga clic en el botón de edición de la variable a modificar : -### Modes de discos +### Los modos de disco Puede agregar diferentes modos de disco: -- __Persistente__: Los cambios se escriben inmediata y definitivamente en el disco virtual. __Este es el modo recomendado.__ -- __No persistente independiente__: Los cambios realizados en el disco virtual se registran en un nuevo archivo de registro y se eliminan al apagar. No se ve afectado por las instantáneas. __No es compatible con la copia de seguridad.__ -- __Persistente independiente__: Los cambios se escriben inmediata y definitivamente en el disco virtual. No se ve afectado por las instantáneas. __No es compatible con la copia de seguridad.__ +- __Persistente__ : Los cambios se escriben de inmediato y de forma definitiva en el disco virtual. __Es el modo recomendado.__ +- __Independiente no persistente__ : Los cambios realizados en el disco virtual se registran en un nuevo registro y se eliminan al apagar. No se ve afectado por las instantáneas. __No es compatible con la copia de seguridad.__ +- __Independiente persistente__ : Los cambios se escriben de inmediato y de forma definitiva en el disco virtual. No se ve afectado por las instantáneas. __No es compatible con la copia de seguridad.__ -### Virtual Machine Controller Management +### Gestión de controladores de máquina virtual -You can modify the disk controller type for your virtual machine. +Puede modificar el tipo de controlador de disco para su máquina virtual. -Virtual machines can be equipped with SCSI and NVMe controllers, with a limit of 4 controllers of each type. Each controller can manage up to 15 disks. +Las máquinas virtuales pueden estar equipadas con controladores SCSI y NVME, con un límite de 4 controladores de cada tipo. Cada controlador puede gestionar hasta 15 discos. -A SCSI controller can be configured with different subtypes: Para Virtual, Bus Logic, LSI Logic, or LSI Logic SAS. +Un controlador SCSI puede configurarse con diferentes subtipos: Para Virtual, Bus Logic, LSI Logic o LSI Logic SAS. -The Para Virtual controller stands out due to its extended capabilities. It can support up to 64 disks when the virtual machine's hardware version is compatible with ESXi 6.7 or later. +El controlador Para Virtual se destaca por su capacidad ampliada. Puede admitir hasta 64 discos cuando la versión de hardware de la máquina virtual es compatible con ESXi versión 6.7 o superior. -> __Important__: If you want to change the type of a Para Virtual controller that has more than 15 disks, you must first detach the disks from the affected slots. +> __Importante__ : Si desea modificar el tipo de un controlador Para Virtual que tenga más de 15 discos, primero deberá desconectar los discos en las ranuras correspondientes. ### Consola de una máquina virtual -La consola de una máquina virtual está disponible desde la lista de máquinas virtuales haciendo clic en el icono __'Consola'__: +La consola de una máquina virtual es accesible desde la lista de máquinas virtuales haciendo clic en el icono __'Consola'__ : -Se abre un nuevo separador en su navegador y se muestra entonces la consola de su máquina, basada en un cliente __VNC__: +Se abre una nueva pestaña en su navegador y se muestra la consola de su máquina, basada en un cliente __VNC__ : -Es posible, desde el menú __VNC__: +Es posible en el menú __VNC__ : -- solicitar el envío de teclas especiales, +- solicitar el envío de teclas específicas, - forzar un mapeo de teclado (en caso de que no hayamos podido identificar correctamente su teclado), -- abrir un campo de texto que se puede transmitir a la máquina. Este método reemplaza el antiguo portapapeles no funcional, -- pasar al modo de pantalla completa. +- abrir un campo de texto transmitible a la máquina. Este método reemplaza al antiguo portapapeles no funcional, +- cambiar al modo de pantalla completa. -__Nota__: +__Nota__ : El escalado de la ventana es automático. -#### Keyboard layout support +#### Soporte de distribuciones de teclado -The input entered in the console depends on the keyboard language of your web browser, the keyboard language of the virtual machine, and whether the 'enforce keyboard' option on the left side of the screen is enabled. Below is a summary of the possible scenarios: +La entrada realizada en la consola depende de la distribución del teclado de su navegador web, de la distribución del teclado de la máquina virtual y de la activación o no de la opción 'enforce keyboard' a la izquierda de la pantalla. A continuación se presenta un resumen de las situaciones posibles : -| Physical machine keyboard language (input) | Virtual machine keyboard language | 'Enforce keyboard' option selected | Result (output) | -| -------------------------------------------- | --------------------------------- | ---------------------------------- | ------------------------ | -| French | French | No | ✅ | -| French | French | Yes | Not recommended | -| French | English | No | English | -| French | English | Yes | ✅ | -| English | French | No | French | -| English | French | Yes | ✅ | -| English | English | No | ✅ | -| English | English | Yes | Not recommended | +| Distribución del teclado de la máquina física (entrada) | Distribución del teclado de la máquina virtual | Opción 'enforce keyboard' seleccionada | Resultado (salida) | +| ------------------------------------------------------- | ---------------------------------------------- | -------------------------------------- | ------------------------ | +| Francés | Francés | No | ✅ | +| Francés | Francés | Sí | No recomendado | +| Francés | Inglés | No | Inglés | +| Francés | Inglés | Sí | ✅ | +| Inglés | Francés | No | Francés | +| Inglés | Francés | Sí | ✅ | +| Inglés | Inglés | No | ✅ | +| Inglés | Inglés | Sí | No recomendado | -__Note__: +__Nota__ : -- If certain characters do not appear when typed manually, you can try pasting them from the clipboard. +- Si algunos caracteres no se muestran al escribir manualmente, puede intentar usar el portapapeles. #### Funcionamiento del portapapeles -Esta función le permite enviar una cadena completa de caracteres a su máquina virtual. Es importante tener en cuenta que la tecla "enforce keyboard" influye en la forma en que esta cadena de caracteres será transmitida a su máquina virtual. Si observa durante la entrada en la consola que la opción "enforce keyboard" es necesaria, recuerde activarla antes de utilizar el portapapeles. -Esta función puede utilizarse para enviar una contraseña, un comando o el contenido de un archivo de configuración, por ejemplo: +Esta funcionalidad le permite enviar una cadena de caracteres completa a su máquina virtual. Es importante tener en cuenta que la tecla "enforce keyboard" influye en la forma en que esta cadena de caracteres +se transmitirá a su máquina virtual. Si al escribir en la consola observa que la opción "enforce keyboard" es necesaria, recuerde activarla antes de usar el portapapeles. +Esta funcionalidad puede utilizarse para el envío de una contraseña, un comando o el contenido de un archivo de configuración, por ejemplo: -Al hacer clic en el botón "Pegar", el contenido de su campo de texto se envía a su máquina virtual. +Al hacer clic en el botón "Paste", el contenido de su campo de texto se envía a su máquina virtual. ### Catálogos de máquinas virtuales Cloud Temple -Cloud Temple pone a su disposición un catálogo de `Templates` constantemente enriquecido y actualizado por nuestros equipos. -Actualmente incluye decenas de `Templates` e imágenes que puede desplegar en sus máquinas virtuales. +Cloud Temple pone a su disposición un catálogo de `Templates` enriquecido y actualizado regularmente por nuestros equipos. +Incluye actualmente varias decenas de `Templates` e imágenes para montar en sus máquinas virtuales. -Para publicar un ISO/OVF, debe acceder a la vista __'Catálogo'__ y hacer clic en el botón __'Publicar archivos'__ situado en la parte superior de la página: +Para publicar un ISO/OVF, debe ir a la vista __'Catálogo'__ y hacer clic en el botón __'publicar archivos'__ en la parte superior de la página : -Es posible convertir una máquina virtual en modelo y exportarla al catálogo. Para ello, seleccione una máquina virtual y utilice el botón de acción __'Clonar'__: +Es posible convertir una VM en plantilla y exportarla al catálogo. Para ello, seleccione una máquina virtual y utilice el botón de acción __'clonar'__ : -Seleccione __'Exportar como vm-template'__: +Seleccione __'Exportar como vm-template'__ : -A continuación, rellene la información necesaria. A partir de entonces, será posible desplegar una nueva máquina virtual a partir del modelo mediante el botón __'Nueva máquina virtual'__ o desde la página __'Catálogos'__. También es posible exportar la VM en formato OVF. +A continuación, complete la información necesaria. Luego será posible implementar una nueva VM a partir de la plantilla desde el botón __'Nueva máquina virtual'__ o desde la página __'Catálogos'__. También es posible exportar la VM en formato OVF. -__Consejo útil__: es posible convertir un archivo OVA a OVF y viceversa. -El método más comúnmente utilizado es VMware Converter, pero también existe una forma sencilla utilizando ```tar```. +__A tener en cuenta__: es posible convertir un archivo OVA a OVF y viceversa. +El método más común utilizado es VMware Converter, pero también existe un método simple utilizando ```tar``` -Extracción del archivo OVA: +Extracción del archivo ova: ``` tar -xvf vmName.ova ``` -Creación de un archivo OVA a partir de un archivo OVF: +Crear un archivo OVA desde un archivo OVF: ``` tar -cvf vmName-NEW.ova vmName.ovf vmName-disk1.vmdk vmName.mf ``` -### Advanced Virtual Machine Configuration: Extra Config +### Configuración avanzada de máquinas virtuales: Extra Config -Extra Config provides a flexible way to include key=value pairs in a virtual machine's configuration. The keys and values are interpreted by the system when the virtual machine is deployed. +Las Extra Config proporcionan una forma flexible de incluir pares clave=valor en la configuración de una máquina virtual. El sistema interpreta las claves y los valores cuando se implementa la máquina virtual. -You can now directly modify __Extra Config__ properties in the advanced options of a virtual machine: +Ahora, usted mismo puede modificar las propiedades de tipo __Extra Config__ en las opciones avanzadas de una máquina virtual: -You can add a property from a predefined list of keys. Additionally, you can modify the value of a key you have added yourself. Pre-existing key=value pairs cannot be modified. +Puede agregar una propiedad entre una lista de claves. Además, puede modificar el valor de una clave que haya agregado usted mismo. Los pares clave=valor ya existentes no son modificables. -Please contact support for any request to add new keys. +Contacte al soporte para cualquier solicitud de adición de nuevas claves. -__Note__: *To enable GPU usage by the virtual machine, it is mandatory to enable the key 'pciPassthru.use64bitMMIO' and allocate the required MMIO (Memory-mapped I/O) space via 'pciPassthru.64bitMMIOSizeGB'. It is strongly recommended to refer to the [official NVIDIA documentation](https://docs.nvidia.com/vgpu/17.0/grid-vgpu-release-notes-vmware-vsphere/index.html#tesla-p40-large-memory-vms).* +__Nota__ : *Para el uso de GPU por parte de la máquina virtual, es obligatorio activar la clave 'pciPassthru.use64bitMMIO' y asignar la cantidad de espacio MMIO (Memory-mapped I/O) necesario a través de 'pciPassthru.64bitMMIOSizeGB'. Se recomienda encarecidamente consultar la [documentación oficial de Nvidia](https://docs.nvidia.com/vgpu/17.0/grid-vgpu-release-notes-vmware-vsphere/index.html#tesla-p40-large-memory-vms).* -### Advanced virtual machine configuration: vAPP +### Configuración avanzada de máquinas virtuales : vAPP -You can also modify __vAPP__ type properties in the advanced options of a virtual machine: +También puede modificar las propiedades de tipo __vAPP__ en las opciones avanzadas de una máquina virtual: -You can add a property, modify an existing one, or remove it. Four types of properties are available: String, Number, Boolean, Password: +Puede agregar una propiedad, modificarla o eliminarla. Se ofrecen cuatro tipos de propiedades, String, Número, Booleano, Contraseña: -__Note__: *The virtual machine must be stopped to modify its vAPP properties.* +__Nota__ : *La máquina virtual debe estar detenida para modificar sus propiedades vAPP.* -### Management of __'hypervisors'__ and __'Cpool'__ (hypervisor clusters) +### Gestión de los __'hipervisores'__ y __'Cpool'__ (clústeres de hipervisores) -Managing your hypervisors is done in the __'Compute'__ submenu under the __'IaaS'__ menu, located in the green bar on the left side of your screen. +La gestión de sus hipervisores se realiza en el submenú __'Cálculo'__ del menú __'IaaS'__, ubicado en la barra verde a la izquierda de su pantalla. -In this submenu, you have visibility on: +En este submenú, dispone de una vista sobre: -- The hypervisor software stack, their AZs, and their resources, -- The backup software stack. +- La stack de software de hipervisores, su AZ y sus recursos, +- La stack de software de copia de seguridad. -As of January 2024, the available hypervisor offering on the Cloud Temple qualified infrastructure is based on VMware. The backup software used is IBM Spectrum Protect Plus. +En enero de 2024, la oferta de hipervisor disponible en la infraestructura cualificada Cloud Temple se basa en VMware. El software de copia de seguridad utilizado es IBM Spectrum Protect Plus. -### Gestión de los clusters VMware +### Gestión de clusters VMware -Para acceder a la gestión de los clusters VMware, haga clic en el submenú __'Cálculo'__ del menú __'IaaS'__: +Para acceder a la gestión de clusters VMware, haga clic en el submenú __'Cómputo'__ del menú __'IaaS'__ : -De forma predeterminada, la primera pestaña muestra todos los hipervisores (todos los clusters combinados): +Por defecto, la primera pestaña lista todos los hipervisores (todos los clústeres en conjunto): @@ -298,214 +300,210 @@ Es posible visualizar los detalles de un hipervisor haciendo clic en su nombre: -Existe una pestaña por cada cluster de hipervisor para consultar los detalles de cada uno: +Existe una pestaña por clúster de hipervisores para consultar los detalles de cada uno: -Si hace clic en un cluster, verá un resumen de su composición: +Si hace clic en un clúster, verá un resumen de su composición : -- El total de potencia de cálculo expresado en GHz, -- La memoria disponible total y la proporción utilizada, -- El espacio total de almacenamiento (de todos los tipos combinados) así como el porcentaje de uso, -- Los mecanismos de automatización ante la inactividad de un nodo de cálculo (__'vSphere DRS'__), +- El total de la potencia de cómputo expresada en GHz, +- El total de la memoria disponible y la proporción utilizada, +- El total del espacio de almacenamiento (todos los tipos combinados) así como la cuota utilizada, +- Los mecanismos de automatización ante la indisponibilidad de una lámina de cómputo (__'Vsphere DRS'__), - El número de máquinas virtuales, - El número de hipervisores. -#### Interpretar los datos de consumo que se muestran +#### Interpretar los datos de consumo mostrados -__Memoria aprovisionada (Clúster):__ Representa la cantidad total de memoria aprovisionada para el clúster. +__Memoria asignada (Cluster) :__ Este gráfico representa la cantidad total de memoria asignada al cluster. -__Memoria consumida (Clúster):__ Muestra la memoria consumida activamente solo por las máquinas virtuales del clúster. Esto corresponde a la memoria física realmente utilizada por las máquinas virtuales para sus operaciones, lo cual es un indicador clave de la carga de trabajo actual. +__Memoria consumida (Cluster) :__ Esta vista muestra la memoria activamente consumida únicamente por las máquinas virtuales del cluster. Corresponde a la memoria física realmente utilizada por las VMs para sus operaciones, lo cual es un indicador clave de la carga de trabajo actual. -__Asignación en el peor de los casos (Clúster):__ Ilustra la memoria que se requeriría si todas las máquinas virtuales del clúster consumieran simultáneamente toda la memoria que se les ha asignado (el escenario de consumo máximo). El resultado también integra la memoria necesaria para el funcionamiento del clúster, así como diferentes parámetros propios de VMware (el cálculo no es simplemente igual a la suma de la RAM de todas las máquinas virtuales). Esto ayuda a anticipar las necesidades de recursos críticos y a prevenir el agotamiento de la memoria. +__Asignación en el peor de los casos (Cluster) :__ Este gráfico ilustra la memoria que se requeriría si todas las máquinas virtuales del cluster consumieran simultáneamente toda la memoria que les ha sido asignada (el escenario de consumo máximo). El resultado también integra la memoria necesaria para el funcionamiento del cluster, así como diferentes parámetros propios de VMware (el cálculo no es simplemente igual a la suma de la RAM de todas las máquinas virtuales). Esto permite anticipar las necesidades de recursos críticos y prevenir el agotamiento de la memoria. -__Memoria consumida (ESX):__ A diferencia de los gráficos del clúster, este muestra el consumo total de memoria en un host ESX específico. Esto incluye no solo la memoria utilizada por las máquinas virtuales alojadas en este host, sino también la memoria consumida por el propio sistema hipervisor (sobrecarga de ESXi). - -{/*TODO: Add missing page. */} -{/* Al consultar la página de un cluster, están disponibles varias pestañas. La pestaña __'Reglas'__ le permite definir las [reglas de afinidad / anti-afinidad](compute.md#gestion-de-laffinité-de-vos-machines-virtuelles)*/} +__Memoria consumida (ESX) :__ A diferencia de los gráficos del cluster, este muestra el total de la memoria consumida en un host ESX específico. Esto incluye no solo la memoria utilizada por las máquinas virtuales alojadas en este host, sino también la memoria consumida por el sistema del propio hipervisor (overhead de ESXi). -En la pestaña __'Hosts'__ aparece para cada hipervisor: +Verá lo siguiente para cada hipervisor en la pestaña __'Hosts'__ : -- El uso de __CPU__ y __Memoria__, -- El número de máquinas virtuales asignadas, -- La disponibilidad de una nueva versión del sistema operativo del hipervisor, si procede, -- El estado del hipervisor (conectado en producción, en mantenimiento, apagado, etc.), +- El uso de __CPU__ y __Memoria__ , +- El número de máquinas virtuales afectadas , +- La disponibilidad de una nueva build para el sistema operativo del hipervisor, si corresponde , +- El estado del hipervisor (conectado en producción, en mantenimiento, apagado, ...), - Un menú de acciones. -Desde la pestaña __'Hosts'__ se pueden realizar varias acciones: +Varias acciones son posibles desde la pestaña __'Hosts'__ : -- solicitar nuevos hipervisores mediante el botón __'Agregar un host'__: +- solicitar nuevos hipervisores a través del botón __'Agregar un host'__ : -- posibilidad de consultar el __detalle de un hipervisor__: +- posibilidad de consultar __el detalle de un hipervisor__ : -- entrar o salir del __estado de mantenimiento__ de un hipervisor, -- __actualizar__ el hipervisor si es necesario; para ello, __debe estar obligatoriamente en mantenimiento__. Existen dos tipos de actualizaciones: +- entrar o salir del __estado de mantenimiento__ de un hipervisor , +- __actualizar__ en su caso este hipervisor; para ello, __debe estar obligatoriamente en mantenimiento__. Existen dos tipos de actualizaciones : -1. Las versiones de VMware (nuevas versiones del hipervisor): +1. Las builds de VMware (las nuevas versiones del hipervisor): -1. La actualización del firmware de su nodo de cálculo (BIOS y firmware de tarjetas secundarias): +1. La actualización del firmware de su blade de cálculo (bios y firmware de las tarjetas secundarias): -*__Nota__*: +*__Nota__* : -- Cloud Temple pone a disposición las versiones para los hipervisores en intervalos regulares. -Es importante actualizar periódicamente sus hipervisores, especialmente para aplicar parches de seguridad. -Sin embargo, __no actualizamos nosotros mismos sus hipervisores__. Cloud Temple no tiene visibilidad sobre los compromisos de disponibilidad de sus cargas de trabajo. -Por ello, le dejamos gestionar su cambio y aplicar las nuevas versiones en el momento más adecuado. - -- El proceso de actualización es completamente automatizado. Debe disponer de al menos dos hipervisores en su cluster para permitir una actualización sin interrupción del servicio. +- *Cloud Temple pone a disposición las builds para los hipervisores a intervalos regulares. +Es importante actualizar regularmente sus hipervisores, especialmente para permitir la aplicación de parches de seguridad. +Sin embargo, __no actualizamos nosotros mismos sus hipervisores__. Cloud Temple no tiene visibilidad sobre los compromisos de disponibilidad de sus workloads. +Por lo tanto, le dejamos implementar su gestión del cambio y aplicar las nuevas builds en el mejor momento.* +- *El proceso de actualización es completamente automatizado. Debe disponer de al menos dos hipervisores en su cluster para permitir una actualización sin interrupción del servicio.* {/*TODO: Add missing page. */} -{/* - *Es necesario contar con los permisos adecuados* [permisos adecuados](../console/permissions.md) para realizar las distintas acciones.*/} +{/* -*Es necesario contar con los permisos adecuados para realizar las diferentes acciones.**/} -También puede ver todas las reglas de afinidad/anti-afinidad para su cluster de hipervisores en la sección __'Reglas'__. +También verá el conjunto de reglas de afinidad/anti-afinidad para su cluster de hipervisores en la sección __'Reglas'__. ### Gestión de la afinidad de sus máquinas virtuales -Las __reglas de afinidad y anti-afinidad__ permiten controlar la ubicación de las máquinas virtuales en sus hipervisores. -Pueden utilizarse para gestionar el uso de los recursos de su __'Cpool'__. -Por ejemplo, pueden ayudar a equilibrar la carga de trabajo entre los servidores o a aislar cargas de trabajo intensivas en recursos. -En un __'Cpool'__ VMware, estas reglas suelen utilizarse para gestionar el comportamiento de las máquinas virtuales con vMotion. +Las __reglas de afinidad y anti-afinidad__ permiten controlar la ubicación de las máquinas virtuales en sus hipervisores. +Pueden utilizarse para gestionar el uso de recursos de su __'Cpool'__. +Por ejemplo, pueden ayudar a equilibrar la carga de trabajo entre los servidores o aislar las cargas de trabajo intensivas en recursos. +En un __'Cpool'__ VMware, estas reglas suelen utilizarse para gestionar el comportamiento de las máquinas virtuales con vMotion. vMotion permite mover máquinas virtuales de un host a otro sin interrupción del servicio. Puede configurar mediante la gestión de reglas: -- __Reglas de afinidad__: Estas reglas garantizan que ciertas máquinas virtuales se ejecuten en el mismo host físico. - Se utilizan para mejorar el rendimiento al mantener juntas las máquinas virtuales que se comunican frecuentemente, - reduciendo así la latencia de red. Las reglas de afinidad son útiles en escenarios donde el rendimiento es crítico, - como en el caso de bases de datos o aplicaciones que requieren una comunicación rápida entre servidores. +- __Reglas de Afinidad__: Estas reglas aseguran que ciertas máquinas virtuales se ejecuten en el mismo host físico. +Se utilizan para mejorar el rendimiento manteniendo las máquinas virtuales que se comunican frecuentemente +entre sí en el mismo servidor para reducir la latencia de red. Las reglas de afinidad son útiles en escenarios +donde el rendimiento es crítico, como en el caso de bases de datos o aplicaciones que requieren una comunicación rápida entre servidores. -- __Reglas de anti-afinidad__: Por el contrario, estas reglas garantizan que ciertas máquinas virtuales no se ejecuten - en el mismo host físico. Son importantes para la disponibilidad y resiliencia, por ejemplo, - para evitar que todas las máquinas críticas se vean afectadas en caso de fallo de un único servidor. - Las reglas de anti-afinidad son cruciales para aplicaciones que requieren alta disponibilidad, - como en entornos de producción donde la tolerancia a fallos es una prioridad. - Por ejemplo, no desea que sus dos servidores de Active Directory estén en el mismo hipervisor. +- __Reglas de Anti-afinidad__: Por el contrario, estas reglas garantizan que ciertas máquinas virtuales no se ejecuten +en el mismo host físico. Son importantes para la disponibilidad y la resiliencia, por ejemplo, +para evitar que todas las máquinas críticas se vean afectadas en caso de fallo de un único servidor. +Las reglas de anti-afinidad son cruciales para aplicaciones que requieren alta disponibilidad, +como en entornos de producción donde la tolerancia a fallos es una prioridad. +Por ejemplo, no desea que sus dos Active Directory estén en el mismo hipervisor. -Al crear una regla, define el tipo de regla (afinidad / anti-afinidad), el nombre de la regla, -su estado de activación (__'Estado'__) y las máquinas virtuales afectadas en su clúster de hipervisores. +Al crear una regla, define el tipo de regla (affinité / anti-affinité), el nombre de la regla, +su estado de activación (__'Statut'__) y las máquinas afectadas de su cluster de hipervisores. -*Nota: las reglas de afinidad/anti-afinidad ofrecidas en la consola son reglas que afectan a las máquinas virtuales entre sí (no reglas entre hipervisores y máquinas virtuales).* +*Nota: las reglas afinidad/anti-afinidad ofrecidas en la consola son reglas relativas a las máquinas virtuales entre sí (pas de règles entre hyperviseurs et machines virtuelles).* -## Backup +## Copia de seguridad -### Create a backup policy +### Crear una política de copia de seguridad -To create a new backup policy, you must submit a request to support. Support is accessible via the buoy icon in the top-right corner of the window. +Para agregar una nueva política de copia de seguridad, es necesario realizar una solicitud al soporte. El soporte es accesible desde el icono de flotador en la esquina superior derecha de la ventana. -Creating a new backup policy is done through a __service request__ specifying: +La creación de una nueva política de copia de seguridad se realiza mediante __una solicitud de servicio__ que indique: - Your Organization's name - A contact name, email, and phone number to finalize the configuration - The tenant name - The backup policy name - The retention characteristics (x days, y weeks, z months, ...) + El nombre de su Organización + El nombre de un contacto con su correo electrónico y número de teléfono para finalizar la configuración + El nombre del tenant + El nombre de la política de copia de seguridad + Las características (x días, y semanas, z meses, ...) ### Asignar una política de copia de seguridad a una máquina virtual -Cuando se asigna una SLA a una máquina virtual (VM), todos los discos asociados a dicha VM heredan automáticamente la misma SLA. Posteriormente, es posible ejecutar manualmente la copia de seguridad a través del panel "Políticas de copia de seguridad". En ausencia de una ejecución manual, la copia de seguridad se realizará automáticamente según el plan configurado por la SLA. +Cuando se asigna una SLA a una máquina virtual (VM), todos los discos asociados a esta VM heredan automáticamente la misma SLA. Posteriormente, es posible iniciar manualmente la ejecución de la copia de seguridad a través de la pestaña "Políticas de copia de seguridad". En caso de no iniciarse manualmente, la copia de seguridad se ejecutará automáticamente según la programación configurada por la SLA. -SecNumCloud exige obligatoriamente la asignación de una política de copia de seguridad a una máquina virtual antes de su arranque. En caso contrario, recibirás la siguiente notificación: +SecNumCloud hace obligatoria la asignación de una política de copia de seguridad a una máquina virtual antes de su inicio. En caso contrario, recibirá la siguiente notificación: -Haz clic en la pestaña __'Políticas de copia de seguridad'__ del menú de tu máquina virtual. Allí podrás visualizar la política o políticas de copia de seguridad asignadas a dicha máquina. +Haga clic en la pestaña __'Políticas de copia de seguridad'__ del menú de su máquina virtual. Podrá visualizar la o las políticas de copia de seguridad asignada(s) a la misma. -Para asignar una nueva política de copia de seguridad a la máquina virtual, haz clic en el botón __'Agregar política'__ y selecciona la política de copia de seguridad deseada. +Para asignar una nueva política de copia de seguridad a la máquina virtual, haga clic en el botón __'Agregar política'__ y seleccione la política de copia de seguridad deseada. -### Assign a backup policy to a virtual disk +### Asignar una política de copia de seguridad a un disco virtual -It is also possible to assign an SLA directly to a specific virtual disk of a machine. In this case, the virtual machine does not inherit this SLA applied individually to the disk. However, it is not possible to manually trigger backup execution at the disk level, as this functionality is not supported in Spectrum Protect Plus. +También es posible asignar una SLA directamente a un disco virtual específico de una máquina. En este caso, la máquina virtual no hereda esta SLA aplicada individualmente al disco. Sin embargo, no es posible iniciar manualmente la ejecución de la copia de seguridad a nivel de discos, ya que esta funcionalidad no está soportada en Spectrum Protect Plus. -On the other hand, it is possible to exclude certain disks from one or more backup policies (SLAs) of the VM, which allows unassigning one or more SLAs on a per-disk basis. This approach provides the flexibility to manually initiate backup execution for a specific SLA without affecting all disks of the virtual machine, enabling more granular backup management. +Por el contrario, es posible excluir ciertos discos de una o varias políticas de copia de seguridad (SLA) de la VM, lo que permite desasignar una o varias SLA(s) en una base disco por disco. Este enfoque ofrece la flexibilidad de iniciar manualmente la ejecución de la copia de seguridad de una SLA sin afectar todos los discos de la máquina virtual, permitiendo así una gestión más detallada de las copias de seguridad. -Click on the action bar of the disk to which you want to assign a backup policy. Then, click on __'Policies'__ and select the desired backup policy. +Haga clic en la barra de acciones del disco al que desea asignar una política de copia de seguridad. Luego, haga clic en __'Políticas'__ y seleccione la política de copia de seguridad deseada. -*Note*: The policy to be added must reside in a different availability zone than the virtual machine. +*Nota* : La política que se va a agregar debe encontrarse en una zona de disponibilidad diferente de la máquina virtual. ### Ejecutar una política de copia de seguridad -En el menú __'Políticas de copia de seguridad'__ de su máquina virtual, haga clic en el botón __'Ejecutar'__ de la columna __'Acciones'__ de la política de copia de seguridad que desee ejecutar. +En el menú __'Políticas de copia de seguridad'__ de su máquina virtual, haga clic en el botón __'Ejecutar'__ de la columna __'Acciones'__ de la política de copia de seguridad que desea ejecutar. -Para ejecutar una política de copia de seguridad, también puede partir desde la sección __'Copias de seguridad'__ en el menú de su máquina virtual. Haga clic en el botón __'Ejecutar la copia de seguridad'__, y luego seleccione la copia de seguridad que desee ejecutar en el menú desplegable. +Para ejecutar una política de copia de seguridad, también puede acceder a la sección __'Copias de seguridad'__ en el menú de +su máquina virtual. Haga clic en el botón __'Ejecutar copia de seguridad'__, y luego seleccione la copia de seguridad que desea ejecutar en la lista desplegable. -### Remove a backup policy +### Retirar una política de copia de seguridad -In the __'Backup Policies'__ menu of your virtual machine, click the __'Remove'__ button in the __'Actions'__ column for the backup policy you wish to remove. +En el menú __'Políticas de copia de seguridad'__ de su máquina virtual, haga clic en el botón __'Retirar'__ de la columna __'Acciones'__ de la política de copia de seguridad que desea retirar. -__Warning: It is not possible to remove the last SLA on an active virtual machine:__ +__Atención, no es posible retirar la última SLA en una máquina virtual encendida :__ -### Deleting a backup policy: case of a suspended backup policy ("held") +### Eliminación de una política de copia de seguridad: caso de una política de copia de seguridad suspendida ("held") -When the last resource is disassociated from an SLA policy, the system automatically detects this situation. As a result, all jobs associated with this SLA policy are automatically moved to the "Held" ("Suspended") state. It is important to note that direct deletion of the SLA policy is not possible at this stage due to the existence of dependent jobs. To proceed with the deletion of the policy, a series of steps must be followed. +Cuando el último recurso se desvincula de una política SLA, el sistema detecta automáticamente esta situación. En consecuencia, todos los trabajos relacionados con esta política SLA cambian automáticamente al estado "Suspendido" ("Held"). Es importante tener en cuenta que, en esta etapa, la eliminación directa de la política SLA no es posible debido a la existencia de trabajos dependientes. Para proceder a la eliminación de la política, se debe seguir una serie de pasos. -First, verify that the affected jobs are indeed in the "Held" state. Once this verification is complete, these jobs can be deleted. Only after removing these dependent jobs can the SLA policy be permanently erased from the system. +Debe verificarse que los trabajos afectados se encuentren efectivamente en estado "Suspendido". Una vez realizada esta verificación, estos trabajos pueden eliminarse. Solo después de eliminar estos trabajos dependientes la política SLA podrá borrarse definitivamente del sistema. -A special case requires particular attention: adding a new resource to an SLA policy whose dependent jobs have not been deleted. In this scenario, job identifiers will be preserved. However, it is crucial to note that jobs in the "Held" state will not resume automatically. Manual intervention will be required to reactivate them and allow their execution. +Un caso particular merece una atención específica: la adición de un nuevo recurso a una política SLA cuyos trabajos dependientes no se hayan eliminado. En esta situación, los identificadores de los trabajos se conservarán. Sin embargo, es crucial tener en cuenta que los trabajos en estado "Suspendido" no se reanudarán automáticamente. Será necesaria una intervención manual para reactivarlos y permitir su ejecución. -> __Note:__ For any clarification regarding this situation, please contact Cloud Temple support. +nota: Para cualquier aclaración sobre esta situación, contacte con el soporte de Cloud Temple. -The Cloud Temple console prevents assigning a virtual machine to a suspended policy: +La consola de Cloud Temple impide asignar una máquina virtual a una política suspendida: -Similarly, it is not possible to start a virtual machine associated with a suspended backup policy: +Del mismo modo, no es posible iniciar una máquina virtual que esté asociada a una política de copia de seguridad suspendida: ### Restaurar una copia de seguridad -La pestaña __'Copias de seguridad'__ del menú de sus máquinas virtuales le permite acceder a la lista de copias de seguridad de dicha máquina. - +La pestaña __'Copias de seguridad'__ del menú de sus máquinas virtuales le permite acceder a la lista de copias de seguridad de estas. Para restaurar una copia de seguridad, haga clic en el botón __'Restaurar'__ en la fila correspondiente a la copia de seguridad que desea restaurar. -1. __Modo producción__: El modo producción permite la recuperación tras un incidente en el sitio local desde el almacenamiento primario o un sitio de recuperación tras un incidente remoto, reemplazando las imágenes de máquina original por las imágenes de recuperación. Todas las configuraciones se transfieren durante la recuperación, incluidos nombres e identificadores, y todos los trabajos de copia de datos asociados a la máquina virtual continúan ejecutándose. Durante una restauración en modo producción, puede elegir reemplazar el almacenamiento de la máquina virtual por un disco virtual procedente de una copia de seguridad anterior de la máquina virtual. +1. __Modo producción__: El modo producción permite la recuperación ante incidentes en el sitio local desde el almacenamiento primario o un sitio de recuperación ante desastres remoto, reemplazando las imágenes de máquina originales por las imágenes de recuperación. Todas las configuraciones se transfieren como parte de la recuperación, incluidos los nombres y los identificadores, y todos los trabajos de copia de datos asociados a la máquina virtual continúan ejecutándose. En el marco de una restauración en modo producción, puede optar por reemplazar el almacenamiento en la máquina virtual por un disco virtual procedente de una copia de seguridad de máquina virtual anterior. -2. __Modo prueba__: El modo prueba crea máquinas virtuales temporales para desarrollo, pruebas, verificación de instantáneas y verificación de recuperación tras un incidente según un plan repetible, sin impacto en los entornos de producción. Las máquinas de prueba se ejecutan durante el tiempo necesario para realizar las pruebas y verificaciones, y luego se limpian. Mediante una red aislada, puede establecer un entorno seguro para probar sus trabajos sin interferir con las máquinas virtuales utilizadas en producción. Las máquinas virtuales creadas en modo prueba poseen nombres e identificadores únicos para evitar cualquier conflicto en su entorno de producción. +2. __Modo prueba__: El modo prueba crea máquinas virtuales temporales para el desarrollo, la prueba, la verificación de instantáneas y la verificación de recuperación ante incidentes según un plan repetible, sin impacto en los entornos de producción. Las máquinas de prueba se ejecutan tanto tiempo como sea necesario para realizar la prueba y la verificación, y luego se limpian. Mediante la red aislada, puede establecer un entorno seguro para probar sus trabajos sin interferir con las máquinas virtuales utilizadas para la producción. Las máquinas virtuales creadas en modo prueba tienen nombres e identificadores únicos para evitar conflictos en su entorno de producción. -3. __Modo clonación__: El modo clonación crea copias de las máquinas virtuales para casos de uso que requieren copias permanentes o de ejecución prolongada, como exploración de datos o duplicación de un entorno de prueba en una red aislada. Las máquinas virtuales creadas en modo clonación poseen nombres e identificadores únicos para evitar cualquier conflicto en su entorno de producción. En modo clonación, debe tener cuidado con el consumo de recursos, ya que este modo crea máquinas permanentes o de largo plazo. +3. __Modo clon__: El modo clon crea copias de las máquinas virtuales para casos de uso que requieren copias permanentes o de ejecución prolongada para la exploración de datos o la duplicación de un entorno de prueba en una red aislada. Las máquinas virtuales creadas en modo clon tienen nombres e identificadores únicos para evitar conflictos en su entorno de producción. En modo clon, debe prestar atención al consumo de recursos, ya que el modo clon crea máquinas permanentes o a largo plazo. -__La restauración está configurada por defecto en modo "PRUEBA" para preservar la producción__, y puede elegir el nombre de la máquina virtual restaurada: +__La restauración es de forma predeterminada en modo "PRUEBA" para preservar la producción__ y es posible elegir el nombre de la máquina virtual restaurada: -Tenga en cuenta que si las pruebas son satisfactorias, es posible pasar una máquina virtual del modo prueba al modo producción: +Tenga en cuenta que si las pruebas son satisfactorias, es posible cambiar una máquina virtual del modo prueba al modo producción: - + \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/backup/iaas_backup.md b/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/backup/iaas_backup.md index f7914988..57498773 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/backup/iaas_backup.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/backup/iaas_backup.md @@ -24,31 +24,32 @@ import backupInvIaas_001 from '@site/docs/iaas_vmware/tutorials/backup/images/ba #### ¿Cómo clonar una máquina virtual? -Existen 2 maneras de clonar una máquina virtual: +Existen 2 formas de clonar una máquina virtual: - La primera opción permite clonar una máquina virtual directamente desde el icono __'Clonar'__ de su máquina virtual: -- La segunda solución consiste en clonar la máquina virtual utilizando __una copia de seguridad__ de la máquina virtual y luego utilizando __la restauración en modo clon__ de una copia de seguridad. -Vaya a la sección __'Copia de seguridad'__ de su máquina virtual y elija la acción __'Restaurar'__ : +- La segunda opción consiste en clonar la máquina virtual utilizando __una copia de seguridad__ de la máquina virtual y, a continuación, utilizando __la restauración en modo clonar__ de una copia de seguridad. +Ve a la sección __'Copia de seguridad'__ de su máquina virtual y selecciona la acción __'Restaurar'__: -A continuación, elija la opción __'Clonar'__ de restauración: +Selecciona a continuación la opción __'Clonar'__ de restauración: -#### ¿Por qué cuando voy a la página "políticas de copia de seguridad" y selecciono una política, no veo las mismas máquinas virtuales que cuando voy a "informes de copias de seguridad" y selecciono la misma política? +#### ¿Por qué, cuando voy a la página "políticas de copia de seguridad" y selecciono una política, no veo las mismas máquinas virtuales que cuando voy a "informe de copias de seguridad" y selecciono la misma política? -Esto significa que las máquinas virtuales faltantes tuvieron la política en cuestión asignada durante un tiempo (explicando su presencia en los informes de copias de seguridad), pero que __actualmente no es el caso__. +Esto significa que las máquinas virtuales que faltan tenían asignada la política en cuestión durante +un tiempo (lo que explica su presencia en los informes de copias de seguridad), pero que __actualmente ya no es así__. #### ¿Cómo agregar una política de copia de seguridad a una máquina virtual? -Vaya a la página __'Máquinas Virtuales'__ en la sección __'IaaS'__ del menú vertical en el lado izquierdo de la pantalla. +Vaya a la página __'Máquinas Virtuales'__ en la sección __'IaaS'__ de la barra de menú verde en el lado izquierdo de la pantalla. -Seleccione una máquina virtual y luego la pestaña __'Políticas de copias de seguridad'__ de esta máquina: +Seleccione una máquina virtual y luego la pestaña __'Políticas de copia de seguridad'__ de esta máquina: @@ -58,20 +59,20 @@ Agregue la política de copia de seguridad deseada: ### ¿Cómo eliminar una política de copia de seguridad de una máquina virtual? -Vaya a la página __'Máquinas Virtuales'__, seleccione una máquina virtual y luego la pestaña __'Políticas de copias de seguridad'__ de esta máquina. +Vaya a la página __'Máquinas Virtuales'__, seleccione una máquina virtual y luego la pestaña __'Políticas de copia de seguridad'__ de esta máquina. Elimine la política de copia de seguridad deseada y confirme la eliminación: -__*Nota:*__ *¡Cuidado! __Secnumcloud exige que haya al menos una política de copia de seguridad__ para cada máquina virtual.* +__*Nota:*__ *¡Atención! __Secnumcloud exige que haya al menos una política de copia de seguridad__ para cada máquina virtual.* -### ¿Cómo saber si una copia de seguridad se ejecutó correctamente? +### ¿Cómo saber si una copia de seguridad se ha ejecutado correctamente? -Hay 2 soluciones posibles: +Existen 2 soluciones posibles: -1. Vaya a la página __'Trabajos'__ del menú __'Copia de seguridad'__ en el menú vertical a la izquierda de su pantalla. Elija el trabajo correspondiente a la copia de seguridad y selecciónelo. -Luego, encuentre el *jobsession* correspondiente a su copia de seguridad, selecciónelo mediante el menú __'Acciones'__. +1. Vaya a la página __'Jobs'__ del menú __'Copia de seguridad'__ en la barra verde a la izquierda de su pantalla. Seleccione la tarea correspondiente a la copia de seguridad y selecciónela. +A continuación, busque la *sesión de trabajo* correspondiente a su copia de seguridad y selecciónela mediante el menú __'Acciones'__. @@ -79,104 +80,107 @@ Estas acciones permiten obtener los registros detallados de la ejecución de la -1. Vaya a la página __'Informes de copias de seguridad'__ y seleccione la política que le interesa: +1. Vaya a la página __'Informes de copia de seguridad'__ y seleccione la política que le interese: -Luego puede filtrar por fecha, descargar el informe en formato __PDF__ o __CSV__ para utilizarlo en herramientas externas. +A continuación, puede filtrar por fecha, descargar el informe en formato __PDF__ o __CSV__ para procesarlo en herramientas de terceros. ### ¿Cómo iniciar una restauración? -Vaya a la página __'Máquinas Virtuales'__, seleccione una máquina virtual y luego la pestaña __'Copias de seguridad'__ de esta máquina. Para iniciar la restauración, seleccione la copia de seguridad que desea restaurar. +Acceda a la página __'Máquinas Virtuales'__, seleccione una máquina virtual y luego la pestaña __'Copias de seguridad'__ de esta máquina. Para iniciar la restauración, seleccione la copia de seguridad a restaurar. ### ¿Qué es la opción de quiescing? -El __quiescing__ es un proceso que consiste en notificar al sistema para que se ponga en un estado adecuado antes del inicio del snapshot. -Por defecto, el __quiescing está activado__. Puede desactivarlo manualmente en caso de que el sistema gestione mal el snapshot o si el agente del hipervisor no esté instalado en la máquina virtual. +El __quiescing__ es un proceso que consiste en notificar al sistema para que se ponga en un estado adecuado antes de iniciar la instantánea. +Por defecto, el __quiescing está activado__. Puede desactivarse manualmente en el caso de que el sistema gestione mal la instantánea o si el agente del hipervisor no está instalado en la máquina virtual. -Para hacerlo, en la sección __'Copias de seguridad'__ de su máquina virtual, haga clic en __'Modificar las opciones'__ y desactive el __quiescing__ : +Para ello, en la sección __'Copias de seguridad'__ de tu máquina virtual, haz clic en __'Modificar opciones'__ y desactiva el __quiescing__: ### ¿Cuáles son las opciones de restauración de una máquina virtual? -3 opciones principales para restaurar una VM, en su destino original o en un destino diferente: +3 opciones principales para restaurar una vm, en su destino inicial o en un destino diferente: -- __'CLONAR'__ : Restaura la máquina virtual y la renombra, sin reemplazar la máquina virtual original. +- __'CLONE'__ : Restaura la máquina virtual renombrándola, sin reemplazar la máquina virtual original. -- __'PRODUCCIÓN'__ : Restaura y __reemplaza__ la máquina virtual de producción (la máquina virtual actualmente en producción se __destruye__). +- __'PRODUCTION'__ : Restaura y __reemplaza__ la máquina virtual de producción (la máquina virtual actualmente en producción es __destruida__) -- __'PRUEBA'__ : Restaura la máquina virtual de producción __sin sobrescribirla__. +- __'TEST'__ : Restaura la máquina virtual de producción __sin sobrescribirla__. ### ¿Cómo restaurar y reemplazar la máquina virtual de producción, sin conservar la máquina virtual actualmente en producción? -Elija el modo de restauración __'PRODUCCIÓN'__. La opción 'sobrescribir la máquina virtual' está activada por defecto. +Seleccione el modo de restauración __'Producción'__. La opción 'sobrescribir la máquina virtual' es la opción predeterminada. -### ¿Por qué el número de máquinas virtuales es diferente entre los módulos copia de seguridad y cálculo? +### ¿Por qué difiere el número de máquinas virtuales entre los módulos de copia de seguridad y de cómputo? La diferencia en el número de máquinas virtuales puede deberse a que el módulo de copias de seguridad no ha recuperado las últimas máquinas creadas. -Para actualizar el módulo de copias de seguridad, debe solicitar a la capa de software de copia de seguridad que reinventorie las máquinas virtuales. -Para ello, en el menú __'Infraestructura'__ del menú vertical a la izquierda de la pantalla, navegue hasta el submenú __'Spectrum Protect Plus'__ y utilice el botón __'Acción'__ del inventario : +Para actualizar el módulo de copias de seguridad, es necesario solicitar a la capa de software de copia de seguridad que actualice el inventario de las máquinas virtuales. +Para ello, en el menú __'Infrastructure'__ de la barra verde a la izquierda de la pantalla, navegue al submenú __'Spectrum Protect Plus'__ y utilice el botón __'Action'__ del inventario: -Tenga en cuenta que tiene la fecha del último inventario que se indica. +Tenga en cuenta que se indica la fecha del último inventario. -Si persiste la diferencia en la máquina virtual, puede deberse a las máquinas virtuales que albergan el sistema que permite las copias de seguridad. En efecto, estas no se cuentan a sí mismas en el cálculo del número de máquinas en el módulo de copias de seguridad. +Si persiste una diferencia en el número de máquinas virtuales, puede deberse a las máquinas virtuales que alojan el sistema que permite +las copias de seguridad. De hecho, estas no se incluyen en el cálculo del número de máquinas en el módulo de copias de seguridad. ### ¿Cómo realizar el inventario de las máquinas virtuales en el módulo de copia de seguridad? -Para iniciar un inventario de las máquinas virtuales en el módulo de copia de seguridad, en el menú __'Infraestructura'__ del menú vertical a la izquierda de la pantalla, navegue hasta el submenú __'Spectrum Protect Plus'__ y utilice el botón __'Acción'__ del inventario : +Para ejecutar un inventario de las máquinas virtuales en el módulo de copia de seguridad, en el menú __'Infrastructure'__ de la barra verde a la izquierda de la pantalla, navegue hasta el submenú __'Spectrum Protect Plus'__ y utilice el botón __'Action'__ del inventario: -Tenga en cuenta que tiene la fecha del último inventario que se indica. +Tenga en cuenta que se muestra la fecha del último inventario. -### ¿Por qué la copia de seguridad de mi máquina virtual falla indicando un problema de snapshot? +### ¿Por qué falla la copia de seguridad de mi máquina virtual indicando un problema de instantánea? -Este error significa que es la primera vez que su máquina intenta ser copiada. +Este error indica que es la primera vez que su máquina intenta ser respaldada. -__Durante la primera copia de seguridad de una máquina virtual, no debe haber ningún snapshot en la máquina.__ +__Durante la primera copia de seguridad de una máquina virtual, no debe haber ninguna instantánea presente en la máquina.__ ### ¿Cómo restaurar y reemplazar la máquina virtual de producción, conservando y renombrando la máquina virtual de producción? -Así es como proceder: +A continuación se indica cómo proceder: -- Elija el modo __'CLONAR'__ (el modo clon implica un cambio de dirección MAC y UUID de la máquina virtual), -- Renombre la máquina virtual restaurada con el nombre definitivo (de la VM de producción), +- Seleccione el modo __'CLONE'__ (el modo clon provoca un cambio en la dirección MAC y el UUID de la máquina virtual), +- Renombre la máquina virtual restaurada con el nombre definitivo (de la vm de producción), - Renombre la antigua máquina virtual de producción (en _OLD). ### ¿Cómo restaurar una máquina virtual sin reemplazar la máquina virtual original? -Así es como proceder: +A continuación se indica cómo proceder: -- Elija el modo __'CLONAR'__ (el modo clon implica un cambio de dirección MAC y UUID de la máquina virtual) +- Seleccione el modo __'CLONE'__ (el modo clon provoca un cambio en la dirección MAC y el UUID de la máquina virtual) - Defina el nombre del clon (_REST u otros) -### ¿Por qué no puedo eliminar un disco en modo acceso instantáneo en mi máquina virtual? +### ¿Por qué no puedo eliminar un disco en modo instant access en mi máquina virtual? -Ejecute el inventario de la copia de seguridad: en el menú __'Infraestructura'__ del menú vertical a la izquierda de la pantalla, navegue hasta el submenú __'Spectrum Protect Plus'__ y utilice el botón __'Acción'__ del inventario : +Ejecute el inventario de la copia de seguridad: en el menú __'Infraestructura'__ de la barra verde a la izquierda de la pantalla, navegue +hasta el submenú __'Spectrum Protect Plus'__ y utilice el botón __'Acción'__ del inventario: -Realice la eliminación del disco una vez finalizado el inventario. Actualice la máquina virtual para verificar que el disco haya sido eliminado correctamente. +Elimine el disco una vez finalizado el inventario. Actualice la máquina virtual para verificar que el disco se haya eliminado correctamente. ### ¿Por qué no puedo iniciar una máquina virtual con una política en estado Held (política suspendida)? -Una política en estado "Held" es una función que permite suspender temporalmente las acciones de retención y eliminación de datos, garantizando así que los datos permanezcan intactos y disponibles más allá de su período de retención estándar para razones específicas como la conformidad o las necesidades legales. +Una política en estado "Held" es una característica que permite suspender temporalmente las acciones de retención y eliminación de datos, garantizando así que los datos permanezcan intactos y disponibles más allá de su período de retención estándar por motivos específicos como el cumplimiento normativo o las necesidades legales. -Supongamos que una empresa tiene una política de retención de copia de seguridad de 30 días para ciertos datos de producción. Debido a una investigación legal, reciben una solicitud para preservar todas las copias de seguridad pertinentes durante un período indeterminado. Tiene la posibilidad de suspender la política de copia de seguridad asociada mediante el estado "Held" para evitar la eliminación automática de estas copias de seguridad después de 30 días, asegurando así que los datos estén disponibles durante toda la duración de la investigación. -Una política de copia de seguridad suspendida (en estado Held) no ejecutará las copias de seguridad del planificador asignado, por lo que la máquina virtual no podrá considerarse protegida, lo que no cumple con las normas SecNumCloud. +Supongamos que una empresa tiene una política de retención de copias de seguridad de 30 días para ciertos datos de producción. Debido a una investigación legal, recibe una solicitud para preservar todas las copias de seguridad relevantes durante un período indeterminado. Puede suspender la política de copia de seguridad asociada mediante el estado "Held" para evitar la eliminación automática de estas copias de seguridad después de 30 días, asegurando así que los datos permanezcan disponibles durante toda la duración de la investigación. -No dude en solicitar consejo a nuestro equipo de soporte sobre este tema. +Una política de copia de seguridad suspendida (en estado Held) no ejecutará las copias de seguridad de la programación asignada, por lo que la máquina virtual no podrá considerarse protegida, lo cual no cumple con las normas SecNumCloud. + +No dude en solicitar asesoramiento a nuestro equipo de soporte sobre este tema. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_template.md b/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_template.md index fd1aa9eb..82c87929 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_template.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_template.md @@ -1,5 +1,5 @@ --- -title: Deployment from a template +title: Despliegue desde una plantilla tags: - iaas_vmware - tutorials @@ -8,20 +8,20 @@ import shivaCatalogsCharger from '@site/docs/iaas_vmware/tutorials/images/shiva_ import shivaCatalogsAjout from '@site/docs/iaas_vmware/tutorials/images/shiva_catalogs_ajout.png'; import shivaCatalogsDeployer from '@site/docs/iaas_vmware/tutorials/images/shiva_catalogs_deployer.png'; -This guide will allow you to deploy your first instances on the Cloud of Trust in less than 5 minutes. +Esta guía le permitirá desplegar en menos de 5 minutos sus primeras instancias en la Nube de Confianza. -## __Requis__ +## __Requisitos previos__ -1. Have subscribed to the Cloud Temple offer (subscription to the IaaS offer). -2. Have the permissions enabled for the __'IaaS'__ object driver +1. Haber suscrito el producto Cloud Temple (suscripción al producto IaaS). +2. Tener los permisos habilitados para el controlador de objetos __'IaaS'__ -## Deploy a virtual machine from a Template +## Desplegar una máquina virtual desde una plantilla -This guide shows you step by step how to deploy a virtual machine from a Template in the Console. +Esta guía le muestra paso a paso cómo desplegar una máquina virtual desde una plantilla en la Consola. -In the Console portal, go to the "Trusted Cloud" tab, then "Catalogs". Before you can deploy a Template, it must be uploaded to your private catalog, in the "My Catalog" tab. +En el portal de la Consola, vaya a la pestaña "Nube de confianza" y luego a "Catálogos". Antes de poder desplegar una plantilla, esta debe cargarse en su catálogo privado, en la pestaña "Mi catálogo". -To do this, you have two options: import your own Template directly into your private catalog, or import a template from Cloud Temple's public catalog. +Para ello, tiene dos opciones: importar su propia plantilla directamente en su catálogo privado o bien importar un modelo desde el catálogo público de Cloud Temple. ### Importar una plantilla personal en el catálogo privado @@ -29,19 +29,19 @@ En la pestaña "Mi catálogo", haga clic en "Publicar archivos". -A continuación, siga los pasos para publicar la plantilla, introduciendo su nombre y una descripción, y eligiendo su ubicación dentro de una biblioteca. +A continuación, siga los pasos para publicar la plantilla, indicando su nombre y una descripción, y eligiendo su ubicación en una biblioteca. -La plantilla deberá aparecer a continuación en su catálogo privado. +La plantilla debe aparecer posteriormente en su catálogo privado. ### Importar una plantilla desde el catálogo público -En la pestaña "Catálogo público", haga clic en el botón "Agregar a mi catálogo" de la plantilla que desee para importarla a su catálogo privado. Esta deberá aparecer a continuación en su catálogo privado. +En la pestaña "Catálogo público", haga clic en el botón "Agregar a mi catálogo" de la plantilla de su elección para importarla a su catálogo privado. Posteriormente, aparecerá en su catálogo privado. -### Desplegar la plantilla +### Desplegar la Plantilla -Una vez que la plantilla se ha importado en su catálogo privado, puede desplegarla haciendo clic en "Desplegar". +Una vez importada la plantilla en su catálogo privado, puede desplegarla haciendo clic en "Desplegar". -A continuación, siga los distintos pasos del despliegue del recurso, seleccionando su ubicación física (datacenter, clúster de cálculo, datastore) y otros parámetros de configuración opcionales. +A continuación, siga las diferentes etapas de despliegue del recurso, seleccionando su ubicación física (datacenter, cluster de cómputo, datastore) y otros parámetros de configuración opcionales. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_terraform.md b/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_terraform.md index 45ec7474..fd555f75 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_terraform.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_terraform.md @@ -7,19 +7,19 @@ tags: import statusCloudInit from '@site/docs/iaas_vmware/tutorials/images/status_cloud_init.png'; import cloudInitOutput from '@site/docs/iaas_vmware/tutorials/images/cloud-init-output.png'; -Este guía le permitirá desplegar sus primeras instancias en menos de 5 minutos en el Cloud de Confianza. +Esta guía le permitirá desplegar sus primeras instancias en la Nube de Confianza en menos de 5 minutos. -## __Requisitos__ +## __Requisitos previos__ -1. Tener suscrito a la oferta Cloud Temple (suscrito a la oferta IaaS). -2. Tener activadas las permisos para el piloto de objetos __'IaaS'__ +1. Haber suscrito el producto Cloud Temple (suscripción al producto IaaS). +2. Tener los permisos habilitados para el controlador de objetos __'IaaS'__ ## Desplegar una máquina virtual mediante Terraform -En esta sección, veremos cómo desplegar una máquina virtual en el Cloud de Confianza mediante el proveedor Terraform Cloud Temple. -Si aún no ha utilizado el proveedor Cloud Temple, siga las instrucciones que figuran en [esta dirección](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest/docs) para instalarlo y autenticarse en su inquilino. +En esta sección, veremos cómo desplegar en unos minutos una máquina virtual en el Cloud de Confianza a través del proveedor de Terraform Cloud Temple. +Si aún no ha utilizado el proveedor Cloud Temple, siga las instrucciones que se encuentran en [la dirección siguiente](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest/docs) para instalarlo y autenticarse en su tenant. -Comenzaremos creando un archivo .tf que describa la instancia que desea desplegar. +Comenzaremos creando un archivo .tf que describe la instancia que deseamos desplegar. El siguiente script permite desplegar una máquina virtual desde cero. ```hcl @@ -56,60 +56,60 @@ resource "cloudtemple_compute_virtual_machine" "scratch" { } ``` -Los parámetros utilizados en este script son los siguientes: +Los parámetros utilizados en este script son los siguientes : -- datacenter_id (obligatorio): datacenter en el que se desplegará la máquina virtual -- host_cluster_id (obligatorio): cluster en el que se desplegará la máquina virtual -- name (obligatorio): nombre de la máquina -- memory: RAM asignada a la máquina al inicio -- cpu: número de vCPU asignadas a la máquina al inicio -- num_cores_per_socket: número de núcleos por socket -- datastore_cluster_id: datastore al que se conecta la máquina -- guest_operating_system_moref: sistema operativo de la máquina +- datacenter_id (obligatorio) : datacenter en el que se despliega la máquina virtual +- host_cluster_id (obligatorio) : cluster en el que se despliega la máquina virtual +- name (obligatorio) : nombre de la máquina +- memory : RAM asignada a la máquina inicialmente +- cpu : número de vCPU asignados a la máquina inicialmente +- num_cores_per_socket : número de núcleos por socket +- datastore_cluster_id : datastore al que está asociada la máquina +- guest_operating_system_moref : sistema operativo de la máquina -Otros parámetros pueden aplicarse a una máquina virtual durante su despliegue. Puede encontrar todos estos parámetros en la siguiente página de la [documentación Terraform](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest/docs/resources/compute_virtual_machine). +Otros parámetros pueden aplicarse a una máquina virtual durante su despliegue. Puede encontrar todos estos parámetros en la página siguiente de la [documentación de Terraform](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest/docs/resources/compute_virtual_machine) -Una vez creado y guardado el archivo .tf, ejecute el siguiente comando para verificar su código: +Una vez creado y guardado el archivo .tf, ejecute el siguiente comando para verificar su código : ``` terraform validate ``` -Luego, planifique el despliegue y verifique que el plan coincida con lo que desea realizar: +A continuación, planifique el despliegue y verifique que el plan coincide con lo que desea realizar : ``` terraform plan ``` -Finalmente, despliegue la máquina virtual ejecutando el siguiente comando: +Finalmente, despliegue la máquina virtual ejecutando el siguiente comando : ``` terraform apply ``` -## Usar cloud-init para configurar una máquina virtual desplegada desde el proveedor Terraform +## Utilizar cloud-init para configurar una máquina virtual implementada desde el proveedor de Terraform -La herramienta __'cloud-init'__ permite personalizar una máquina virtual, o una instancia en la nube, durante su primer arranque. Se trata de un estándar muy ampliamente utilizado. +La herramienta __'cloud-init'__ permite personalizar una máquina virtual, o una instancia en la nube, durante su primer arranque. Se trata de un estándar muy extendido. Para más información, consulte la [documentación](https://cloudinit.readthedocs.io/en/latest/) ### Compatibilidad -Para poder configurar una máquina virtual desplegada desde el proveedor Terraform Cloud Temple mediante cloud-init, el __OVF__ utilizado para desplegarla debe ser __compatible__ con __cloud-init__. +Para poder configurar mediante cloud-init una máquina virtual desplegada desde el proveedor Terraform Cloud Temple, el __OVF__ utilizado para desplegarla debe ser __compatible__ con __cloud-init__. Para verificar la compatibilidad de su máquina virtual con cloud-init, ejecute el siguiente comando: `systemctl status cloud-init.service` -Si cloud-init está correctamente instalado en la máquina, debería obtener una respuesta como esta. (Vea la captura de pantalla a continuación) +Si cloud-init está instalado correctamente en la máquina, debería obtener una respuesta similar a esta. (Ver captura de pantalla a continuación) -Si es necesario, puede encontrar imágenes compatibles con cloud-init en Internet (por ejemplo [Ubuntu Cloud Image](https://cloud-images.ubuntu.com/)) o instalarlo usted mismo en su máquina antes de convertirla en OVF. +Si es necesario, puede encontrar imágenes compatibles con cloud-init en internet (por ejemplo [Ubuntu Cloud Image](https://cloud-images.ubuntu.com/)) o instalarla usted mismo en su máquina antes de convertirla en OVF. ### Despliegue -Ahora que está seguro de que el OVF desplegado es compatible con cloud-init, aquí hay un ejemplo de archivo terraform (.tf) que puede usar para configurar su máquina virtual. -Nota: Todos los ejemplos mostrados aquí se pueden encontrar en el directorio ejemplos del repositorio del proveedor Terraform Cloud Temple aquí: [Ejemplos](https://github.com/Cloud-Temple/terraform-provider-cloudtemple/tree/main/examples) +Ahora que está seguro de que el OVF desplegado es compatible con cloud-init, aquí tiene un ejemplo de un archivo Terraform (.tf) que puede utilizar para configurar su máquina virtual. +NB: Todos los ejemplos mostrados aquí se pueden encontrar en la carpeta de ejemplos del repositorio del proveedor de Terraform Cloud Temple aquí: [Ejemplos](https://github.com/Cloud-Temple/terraform-provider-cloudtemple/tree/main/examples) #### `main.tf` @@ -177,27 +177,27 @@ users: plain_text_passwd: password ``` -El elemento interesante aquí es la presencia de la propiedad cloud-init, puede observar que está compuesta por dos subpropiedades: __network-config__ y __user-data__. +Lo interesante aquí es la presencia de la propiedad cloud-init; puede observar que está compuesta por dos subpropiedades: __network-config__ y __user-data__. -Estas últimas forman parte de un conjunto de 7 propiedades que puede usar para configurar su máquina virtual con cloud-init. +Estas forman parte de un conjunto de 7 propiedades que puede utilizar para configurar su máquina virtual con cloud-init. -- __user-data__: Este valor debe codificarse en base64 y contiene información de configuración para los usuarios de la máquina virtual. También puede agregar scripts para instalar o actualizar paquetes. -- __network-config__: Este valor debe codificarse en base64 y contiene información de configuración de red de la máquina virtual. -- __public-keys__: Indica que la instancia debe rellenar los 'authorized_keys' del usuario predeterminado con este valor. -- __instance-id__: Permite definir un identificador único de instancia ante cloud-init. -- __password__: Si se define, la contraseña del usuario predeterminado se establecerá en este valor para permitir una conexión basada en contraseña. La contraseña solo será válida para una conexión. Si el valor es 'RANDOM', se generará y mostrará una contraseña aleatoria en la consola. -- __hostname__: Especifica un nombre de host para la instancia desplegada. -- __seedfrom__: Permite definir una URL desde la que cloud-init buscará los archivos de configuración que debe usar. -Para más información sobre el funcionamiento de cloud-init, consulte la [documentación oficial](https://cloudinit.readthedocs.io/en/latest/) +- __user-data__ : Este valor debe estar codificado en base64 y contiene información de configuración para las cuentas de usuario de la máquina virtual. También puede agregar scripts para instalar o actualizar paquetes. +- __network-config__ : Este valor debe estar codificado en base64 y contiene información de configuración de red de la máquina virtual. +- __public-keys__ : Indica que la instancia debe completar las 'authorized_keys' del usuario predeterminado con este valor. +- __instance-id__ : Permite definir un identificador único de instancia para cloud-init. +- __password__ : Si se define, la contraseña del usuario predeterminado se establecerá en este valor para permitir una conexión basada en contraseña. La contraseña solo será válida para una única conexión. Si el valor es 'RANDOM', se generará una contraseña aleatoria y se mostrará en la consola. +- __hostname__ : Especifica un nombre de host para la instancia implementada. +- __seedfrom__ : Permite definir una URL desde la cual cloud-init buscará los archivos de configuración que debe utilizar. +Para obtener más información sobre el funcionamiento de cloud-init, consulte la [documentación oficial](https://cloudinit.readthedocs.io/en/latest/) ### Ejecución -Para verificar la correcta ejecución de cloud-init, debería poder conectarse con el usuario que configuró en el archivo user-data.yml o el nombre de host cambiará para estar definido con el que colocó en 'hostname'. +Para verificar la correcta ejecución de cloud-init, debería poder conectarse con el usuario que configuró en el archivo user-data.yml o el nombre de host debería haber cambiado para establecerse en el que indicó en ‘hostname’. En caso de problemas, puede verificar los registros de cloud-init utilizando el siguiente comando: `sudo cat /var/log/cloud-init-output.log` -Debería ver diversas informaciones sobre la ejecución de cloud-init. En la captura de pantalla que sigue, se puede constatar que la configuración de red se realizó correctamente. +Debería ver diversos detalles sobre la ejecución de cloud-init. En la captura de pantalla que sigue, se puede observar que la configuración de red se realizó correctamente. - + \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/vm_encryption.md b/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/vm_encryption.md index 0e7a4781..2d637a76 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/vm_encryption.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/vm_encryption.md @@ -1,5 +1,5 @@ --- -title: Encrypt a Virtual Machine +title: Cifrar una máquina virtual tags: - iaas_vmware - tutorials @@ -10,41 +10,41 @@ import shivaHsmKms_002 from '@site/docs/iaas_vmware/tutorials/images/shiva_hsm_k import shivaHsmKms_003 from '@site/docs/iaas_vmware/tutorials/images/shiva_hsm_kms_003.png' import shivaHsmKms_004 from '@site/docs/iaas_vmware/tutorials/images/shiva_hsm_kms_004.png' -This tutorial guides you through encrypting an IaaS VMware virtual machine from the Console portal. +Este tutorial le ayuda a cifrar una máquina virtual IaaS de VMware desde el portal de la consola. -### Requis +### Requisitos -1. **Proveedor de claves (HSM/KMS)**: - - Debe estar configurado un proveedor de claves en la vStack. (Si ningún proveedor de claves está configurado, póngase en contacto con el servicio de soporte mediante un ticket.) - - Asegúrese de que el proveedor de claves est correctamente activado. +1. **Proveedor de claves (HSM/KMS)** : + - Debe configurarse un proveedor de claves en vStack. (Si no hay ningún proveedor de claves configurado, póngase en contacto con el servicio de soporte a través de un ticket.) + - Asegúrese de que el proveedor de claves esté correctamente activado. -2. **Estado de la máquina virtual**: +2. **Estado de la máquina virtual** : - La máquina virtual debe estar apagada. - La máquina virtual no debe estar en modo 'test' de spp. - La máquina virtual no debe estar ya cifrada. - - La máquina virtual no debe tener instantáneas (snapshots). + - La máquina virtual no debe tener ningún snapshot. - La máquina virtual no debe estar replicada. ### Interfaz -Una vez conectado al portal web Console, desde el menú **'IaaS'**, submenú **'Configuración'** y luego la pestaña **'vCenters'**, encontrarás la información que indica si el cifrado está activado en la vStack correspondiente. +Una vez conectado al portal web Console, desde el menú **'IaaS'**, submenú **'Configuración'** y la pestaña **'vCenters'**, encontrará la información que le indica si el cifrado está activado en la vstack en cuestión. -A continuación, ve al submenú **'Máquinas virtuales'** y selecciona la máquina que deseas cifrar. +A continuación, diríjase al submenú **'Máquinas virtuales'** y seleccione la máquina que desea cifrar. -En la sección de información general de la máquina virtual, encontrarás el indicador que te muestra si la máquina ya está cifrada o no. +En la información general de la máquina virtual, encontrará el dato que indica si la máquina ya está cifrada o no. -Si la máquina virtual cumple con los requisitos previos, puedes continuar el procedimiento haciendo clic en el botón con el ícono de candado en la barra de herramientas que indica **'Cifrar la máquina virtual'**. +Si la máquina virtual cumple con los requisitos previos, puede continuar el procedimiento haciendo clic en el botón con un icono de candado en la barra de herramientas que indica **'Cifrar la máquina virtual'**. -Aparecerá una ventana de confirmación. Selecciona Cifrar. +Aparecerá una ventana de confirmación; seleccione Cifrar. -Una vez finalizada la acción, deberías ver que la información ha cambiado y te indica que tu máquina está cifrada. +Una vez finalizada la acción, debería ver que la información ha cambiado y le indica que su máquina está cifrada. - + \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/llmaas/api.md b/i18n/es/docusaurus-plugin-content-docs/current/llmaas/api.md index c7b62387..b47fbec4 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/llmaas/api.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/llmaas/api.md @@ -1,11 +1,11 @@ --- -title: Documentación de la API +title: Documentación API sidebar_position: 2 --- -# Documentación de la API LLMaaS +# Documentación API LLMaaS -## URL base +## URL Base ``` https://api.ai.cloud-temple.com/v1 @@ -16,44 +16,46 @@ https://api.ai.cloud-temple.com/v1 Todas las solicitudes requieren un encabezado `Authorization` con su token de API: ``` -Authorization: Bearer SU_TOKEN_API +Authorization: Bearer VOTRE_TOKEN_API ``` -## Límite de tasas y facturación +## Limitación de tasa y facturación -### El Principio de los Tiers: Nivel de Acceso, Presupuesto y Capacidad +### El Principio de los Niveles: Nivel de Acceso, Presupuesto y Capacidad -Nuestro sistema de tiers está diseñado como **envolturas completas de servicio** que definen tres aspectos clave de su uso: +Nuestro sistema de niveles está diseñado como **paquetes de servicio completos** que definen tres aspectos clave de su uso: -1. **Un Nivel de Acceso (Crédito de Compra)**: Para los Tiers 1 a 4, se trata de una cantidad que debe pagarse de forma anticipada (upfront) para activar el servicio y desbloquear las capacidades técnicas y presupuestarias del nivel elegido. -2. **Un Límite de Presupuesto Mensual**: Es el tope de su consumo mensual, asegurándole un control total sobre sus costos. -3. **Una Capacidad Técnica**: Son los límites de rendimiento (tokens por día y por hora) que garantizan un rendimiento estable y predecible para su volumen de llamadas. +1. **Un Nivel de Acceso (Crédit d'Achat)** : Para los Niveles 1 a 4, se trata de un monto a pagar por anticipado (upfront) para activar el servicio y desbloquear las capacidades técnicas y presupuestarias del nivel seleccionado. +2. **Un Límite de Presupuesto Mensual** : Es el techo de su consumo mensual, asegurándole un control total de sus costos. +3. **Una Capacidad Técnica** : Son los límites de velocidad (tokens par jour et par heure) que garantizan un rendimiento estable y predecible para su volumen de llamadas. -La elección de un tier, por tanto, representa un equilibrio entre la inversión inicial, el presupuesto mensual previsto y la capacidad técnica requerida. Su consumo dentro de esta envoltura se facturará posteriormente según las tarifas vigentes. +La elección de un nivel es, por lo tanto, un equilibrio entre la inversión inicial, el presupuesto mensual previsto y la capacidad técnica requerida. Su consumo dentro de este paquete se factura posteriormente según las tarifas vigentes. -### Table of Tiers +### Tabla de Niveles -| Tier | Purchase Credit | Monthly Limit | Tokens Output/Hour | Tokens Output/Day | Description | -|------|-----------------|----------------|--------------------|-------------------|-----------| -| **Tier 1** | 200 € | 1,000 € | 150,000 | 3,600,000 | Standard usage | -| **Tier 2** | 500 € | 3,000 € | 300,000 | 7,200,000 | Professional usage | -| **Tier 3** | 1,000 € | 5,000 € | 450,000 | 10,800,000 | High volume | -| **Tier 4** | 4,000 € | 10,000 € | 600,000 | 14,400,000 | Enterprise | -| **Monthly Billing** | N/A | Unlimited | High priority | High priority | Contact sales | +| Nivel | Crédito de compra | Límite mensual | Tokens de salida/hora | Tokens de salida/día | Descripción | +| ------------------------- | ----------------- | -------------- | --------------------- | -------------------- | ------------------ | +| **Nivel 1** | 200 € | 1 000 € | 150 000 | 3 600 000 | Uso estándar | +| **Nivel 2** | 500 € | 3 000 € | 300 000 | 7 200 000 | Uso profesional | +| **Nivel 3** | 1 000 € | 5 000 € | 450 000 | 10 800 000 | Alto volumen | +| **Nivel 4** | 4 000 € | 10 000 € | 600 000 | 14 400 000 | Empresa | +| **Facturación mensual** | N/A | Ilimitado | Alta prioridad | Alta prioridad | Contacto comercial | -**Note**: Rate limits are calculated based on output tokens. Token pricing varies by usage: +**Nota**: Los límites de tasa se calculan en función de los tokens de salida. La tarificación varía según el uso: -- **Input tokens**: 1.90 € / million -- **Output tokens (standard)**: 8.00 € / million -- **Output tokens (reasoner)**: 8.00 € / million (applies to most advanced models for complex agent-like or reasoning tasks) +| Tipo de uso | Tarifa | +| ---------------------------------------- | ------------------------------------------------ | +| **Tokens de entrada** | 1.8 € / millón | +| **Tokens de salida (chat/completado)** | 8.00 € / millón | +| **Tokens de razonamiento** | 8.00 € / millón | +| **Reranking** | 4.00 € / millón de tokens rerankados | +| **Lote asíncrono (entrada)** | 0.9 € / millón (−50% vs estándar) | +| **Lote asíncrono (salida)** | 4.00 € / millón (−50% vs estándar) | +| **Transcripción de audio** | 0.01 € / minuto (se debe cada minuto iniciado) | -#### **Facturación de audio** +### Cabeceras de Límite -- **Transcripción de audio**: 0,01 € / minuto (cada minuto comenzado está sujeto a cargo) - -### Límites de encabezados - -Las respuestas incluyen encabezados informativos: +Las respuestas incluyen cabeceras informativas: ``` X-RateLimit-Limit-Requests: 1000 @@ -61,12 +63,12 @@ X-RateLimit-Remaining-Requests: 999 X-RateLimit-Reset-Requests: 1640995200 ``` -### Error 429 - Límite alcanzado +### Error 429 - Límite Alcanzado ```json { "error": { - "message": "Se ha excedido el límite de tasa. Por favor, actualice su nivel o inténtelo de nuevo más tarde.", + "message": "Rate limit exceeded. Please upgrade your tier or try again later.", "type": "rate_limit_error", "code": "rate_limit_exceeded" } @@ -79,18 +81,18 @@ X-RateLimit-Reset-Requests: 1640995200 Genera respuestas conversacionales. -#### Petición +#### Solicitud ```bash curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ -H "Content-Type: application/json" \ - -H "Authorization: Bearer SU_TOKEN_API" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ -d '{ - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "messages": [ { "role": "user", - "content": "Explique la fotosíntesis" + "content": "Expliquez la photosynthèse" } ], "max_tokens": 200, @@ -100,34 +102,34 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ #### Parámetros -| Parámetro | Tipo | Obligatorio | Descripción | -|-----------|------|-------------|-------------| -| `model` | string | ✅ | ID del modelo (ver [catálogo](./models)) | -| `messages` | array | ✅ | Conversación (role: system/user/assistant) | -| `stream` | boolean | ❌ | Activa el streaming (por defecto: false) | -| `temperature` | float | ❌ | Creatividad 0.0-2.0 (por defecto: 0.7) | -| `max_tokens` | integer | ❌ | Límite de tokens (por defecto: 1024) | -| `top_p` | float | ❌ | Muestreo nucleus 0.0-1.0 (por defecto: 1.0) | -| `presence_penalty` | float | ❌ | Penalización de presencia -2.0 a 2.0 (por defecto: 0) | -| `frequency_penalty` | float | ❌ | Penalización de frecuencia -2.0 a 2.0 (por defecto: 0) | -| `user` | string | ❌ | ID de usuario único | -| `tools` | array | ❌ | Lista de herramientas que el modelo puede invocar. | -| `tool_choice` | string/object | ❌ | Controla si el modelo debe invocar una herramienta. "none", "auto", o `{"type": "function", "function": {"name": "my_function"}}`. | - -#### Respuesta estándar +| Parámetro | Tipo | Obligatorio | Descripción | +| ------------------- | ------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------- | +| `model` | string | ✅ | ID del modelo (ver [catálogo](./models)) | +| `messages` | array | ✅ | Conversación (role: system/user/assistant) | +| `stream` | boolean | ❌ | Activa el streaming (predeterminado: false) | +| `temperature` | float | ❌ | Creatividad 0.0-2.0 (predeterminado: 0.7) | +| `max_tokens` | integer | ❌ | Límite de tokens (predeterminado: 1024) | +| `top_p` | float | ❌ | Muestreo por núcleo 0.0-1.0 (predeterminado: 1.0) | +| `presence_penalty` | float | ❌ | Penalización de presencia -2.0 a 2.0 (predeterminado: 0) | +| `frequency_penalty` | float | ❌ | Penalización de frecuencia -2.0 a 2.0 (predeterminado: 0) | +| `user` | string | ❌ | ID de usuario único | +| `tools` | array | ❌ | Lista de herramientas que el modelo puede llamar. | +| `tool_choice` | string/object | ❌ | Controla si el modelo debe llamar a una herramienta. "none", "auto", o `{"type": "function", "function": {"name": "my_function"}}`. | + +#### Respuesta Estándar ```json { "id": "chatcmpl-bc52de347f2e4068b7bde380c0f8db37", "object": "chat.completion", "created": 1749114814, - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "choices": [ { "index": 0, "message": { "role": "assistant", - "content": "La fotosíntesis es un proceso biológico..." + "content": "La photosynthèse est un processus biologique..." }, "finish_reason": "stop" } @@ -140,16 +142,16 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ } ``` -#### Respuesta con Llamada a Herramienta +#### Respuesta con Llamada de Herramientas -Si el modelo decide llamar a una herramienta, la respuesta tendrá un `finish_reason` de `tool_calls` y el mensaje contendrá un array `tool_calls`. +Si el modelo decide llamar a una herramienta, la respuesta tendrá un `finish_reason` de `tool_calls` y el mensaje contendrá un `array` `tool_calls`. ```json { "id": "chatcmpl-9f27a53f52b44a9693753f2a5e1f7a73", "object": "chat.completion", "created": 1749115200, - "model": "qwen3:14b", + "model": "gpt-oss:120b", "choices": [ { "index": 0, @@ -162,7 +164,7 @@ Si el modelo decide llamar a una herramienta, la respuesta tendrá un `finish_re "type": "function", "function": { "name": "get_current_weather", - "arguments": "{\n \"location\": \"París, Francia\",\n \"unit\": \"celsius\"\n}" + "arguments": "{\n \"location\": \"Paris, France\",\n \"unit\": \"celsius\"\n}" } } ] @@ -178,15 +180,15 @@ Si el modelo decide llamar a una herramienta, la respuesta tendrá un `finish_re } ``` -Después de recibir una respuesta `tool_calls`, usted debe ejecutar la herramienta desde su lado y luego enviar el resultado al modelo utilizando un mensaje con el `role: "tool"`. +Después de recibir una respuesta `tool_calls`, debe ejecutar la herramienta por su parte y luego devolver el resultado al modelo utilizando un mensaje con el `role: "tool"`. ```json { - "model": "qwen3:14b", + "model": "gpt-oss:120b", "messages": [ { "role": "user", - "content": "¿Qué tiempo hace en París?" + "content": "Quel temps fait-il à Paris ?" }, { "role": "assistant", @@ -196,7 +198,7 @@ Después de recibir una respuesta `tool_calls`, usted debe ejecutar la herramien "type": "function", "function": { "name": "get_current_weather", - "arguments": "{\"location\": \"París, Francia\", \"unit\": \"celsius\"}" + "arguments": "{\"location\": \"Paris, France\", \"unit\": \"celsius\"}" } } ] @@ -204,7 +206,7 @@ Después de recibir una respuesta `tool_calls`, usted debe ejecutar la herramien { "role": "tool", "tool_call_id": "call_abc123", - "content": "{\"temperature\": \"22\", \"unit\": \"celsius\", \"description\": \"Despejado\"}" + "content": "{\"temperature\": \"22\", \"unit\": \"celsius\", \"description\": \"Ensoleillé\"}" } ] } @@ -212,53 +214,50 @@ Después de recibir una respuesta `tool_calls`, usted debe ejecutar la herramien #### Streaming (SSE) -Con `"stream": true`, la respuesta llega token por token: - -**Encabezados de respuesta:** +Con `"stream": true`, la respuesta llega token a token : +**Encabezados de respuesta :** ``` Content-Type: text/event-stream Cache-Control: no-cache ``` -**Formato de los eventos:** - +**Formato de los eventos :** ``` -data: {"choices":[{"delta":{"content":"La"},"finish_reason":null,"index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"granite3.3:8b","object":"chat.completion.chunk"} +data: {"choices":[{"delta":{"content":"La"},"finish_reason":null,"index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"gpt-oss:120b","object":"chat.completion.chunk"} -data: {"choices":[{"delta":{"content":" foto"},"finish_reason":null,"index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"granite3.3:8b","object":"chat.completion.chunk"} +data: {"choices":[{"delta":{"content":" photo"},"finish_reason":null,"index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"gpt-oss:120b","object":"chat.completion.chunk"} -data: {"choices":[{"delta":{"content":""},"finish_reason":"stop","index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"granite3.3:8b","object":"chat.completion.chunk"} +data: {"choices":[{"delta":{"content":""},"finish_reason":"stop","index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"gpt-oss:120b","object":"chat.completion.chunk"} data: [DONE] ``` -**Estructura de los chunks:** +**Estructura de los chunks :** +- `choices[].delta.content` : Contenido incremental +- `finish_reason` : `null` durante el streaming, y luego `"stop"` +- Señal de fin : `data: [DONE]` -- `choices[].delta.content`: Contenido incremental -- `finish_reason`: `null` durante el streaming, luego `"stop"` -- Señal de finalización: `data: [DONE]` +### Solicitudes Multimodales (Vision) -### Consultas Multimodales (Visión) - -Para analizar imágenes, puedes enviar una solicitud donde el campo `content` de un mensaje del usuario sea un arreglo (array) que contenga tanto texto como imágenes. +Para analizar imágenes, puede enviar una solicitud donde el campo `content` de un mensaje de usuario sea una matriz (array) que contenga tanto texto como imágenes. El formato para una imagen es un objeto con `type: "image_url"` y un campo `image_url` que contiene la URL de la imagen en formato `data URI` (base64). -:::info[Nota de Compatibilidad] -Aunque el formato estándar y recomendado es `{"type": "image_url", "image_url": {"url": "data:..."}}`, la API también admite, por motivos de flexibilidad, un formato simplificado `{"type": "image", "image": "data:..."}`. Sin embargo, se recomienda utilizar el formato estándar `image_url` para una mejor compatibilidad con el ecosistema OpenAI. +:::info Nota de Compatibilidad +Aunque el formato estándar y recomendado es `{"type": "image_url", "image_url": {"url": "data:..."}}`, la API también admite, por motivos de flexibilidad, un formato simplificado `{"type": "image", "image": "data:..."}`. Sin embargo, se recomienda utilizar el formato estándar `image_url` para una mejor compatibilidad con el ecosistema de OpenAI. ::: -:::tip[OCR y Análisis de Documentos] -Para tareas específicas de análisis de documentos (PDF, escaneos, tablas), recomendamos el uso del modelo especializado **DeepSeek-OCR**. Consulta la [documentación dedicada](./ocr). +:::tip OCR y Análisis de Documentos +Para tareas específicas de análisis de documentos (PDF, scans, tableaux), recomendamos el uso del modelo especializado **DeepSeek-OCR**. Consulte la [documentación dedicada](./ocr). ::: -#### Ejemplo de solicitud de Visión +#### Ejemplo de Solicitud de Visión ```bash curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ -H "Content-Type: application/json" \ - -H "Authorization: Bearer SU_TOKEN_API" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ -d '{ "model": "gemma3:27b", "messages": [ @@ -267,7 +266,7 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ "content": [ { "type": "text", - "text": "¿Qué ves en esta imagen?" + "text": "Que vois-tu sur cette image ?" }, { "type": "image_url", @@ -285,24 +284,24 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ ### POST /v1/completions :::warning -**Nota** : El endpoint `/v1/completions` utiliza el mismo formato que `/v1/chat/completions` con mensajes. -Para completar texto simple, utiliza un mensaje de tipo user con tu prompt. +**Nota** : El endpoint `/v1/completions` utiliza el mismo formato que `/v1/chat/completions` con mensajes. +Para el completado de texto simple, utilice un mensaje de usuario con su prompt. ::: -Completado de texto mediante formato de chat. +Completados de texto mediante formato de chat. -#### Petición +#### Solicitud ```bash curl -X POST "https://api.ai.cloud-temple.com/v1/completions" \ -H "Content-Type: application/json" \ - -H "Authorization: Bearer SU_TOKEN_API" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ -d '{ - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "messages": [ { "role": "user", - "content": "Complete esta frase: La inteligencia artificial es" + "content": "Complétez cette phrase: L'intelligence artificielle est" } ], "max_tokens": 100, @@ -312,7 +311,7 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/completions" \ #### Parámetros -Idénticos a `/v1/chat/completions` – ver sección anterior. +Idénticos a `/v1/chat/completions` - ver la sección anterior. #### Respuesta @@ -322,38 +321,38 @@ Formato idéntico a `/v1/chat/completions`. Transcripción de audio a texto (Whisper). -#### Petición +#### Solicitud ```bash curl -X POST "https://api.ai.cloud-temple.com/v1/audio/transcriptions" \ - -H "Authorization: Bearer SU_TOKEN_API" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ -F "file=@audio.wav" \ -F "language=fr" \ -F "response_format=json" ``` -#### Parámetros +#### Paramètres -| Parámetro | Tipo | Obligatorio | Descripción | -|-----------|------|-------------|-------------| -| `file` | binary | ✅ | Archivo de audio (wav, mp3, m4a). | -| `language` | string | ❌ | Código de idioma ISO 639-1 (por ejemplo: "fr"). Detección automática si no se proporciona. | -| `initial_prompt` | string | ❌ | Contexto o palabras específicas para mejorar la precisión de la transcripción. | -| `task` | string | ❌ | Tarea a realizar: `transcribe` (por defecto) o `translate` (traducir al inglés). | -| `response_format` | string | ❌ | `json` (por defecto, equivalente a `verbose_json`). Los formatos `text`, `srt`, `vtt` no están actualmente soportados. | +| Parámetro | Tipo | Obligatorio | Descripción | +| ----------------- | ------ | ----------- | ------------------------------------------------------------------------------------------------------------------ | +| `file` | binary | ✅ | Archivo de audio (wav, mp3, m4a). | +| `language` | string | ❌ | Código de idioma ISO 639-1 (ej: "fr"). Detección automática si no se proporciona. | +| `initial_prompt` | string | ❌ | Contexto o palabras específicas para mejorar la precisión de la transcripción. | +| `task` | string | ❌ | Tarea a realizar: `transcribe` (predeterminado) o `translate` (traducir al inglés). | +| `response_format` | string | ❌ | `json` (predeterminado, equivalente a `verbose_json`). Los formatos `text`, `srt`, `vtt` no están soportados actualmente. | #### Respuesta (`json`) ```json { - "text": "Hola, esto es una prueba de transcripción de audio.", + "text": "Bonjour, ceci est un test de transcription audio.", "segments": [ { "id": 0, "seek": 0, "start": 0.0, "end": 4.0, - "text": " Hola, esto es una prueba de transcripción de audio.", + "text": " Bonjour, ceci est un test de transcription audio.", "tokens": [ 50364, 40365, 33, 2373, 359, 456, 2373, 323, 1330, 2373, 2264, 50564 ], "temperature": 0.0, "avg_logprob": -0.25, @@ -361,32 +360,32 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/audio/transcriptions" \ "no_speech_prob": 0.05 } ], - "language": "es" + "language": "fr" } ``` ### POST /v1/embeddings -Creates an embedding vector representing the input text. +Genera un vector de embedding que representa el texto de entrada. -#### Petición +#### Solicitud ```bash curl -X POST "https://api.ai.cloud-temple.com/v1/embeddings" \ -H "Content-Type: application/json" \ - -H "Authorization: Bearer SU_TOKEN_API" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ -d '{ "model": "granite-embedding:278m", - "input": "El texto a vectorizar" + "input": "Le texte à vectoriser" }' ``` #### Parámetros -| Parámetro | Tipo | Obligatorio | Descripción | -|-----------|------|-------------|-------------| -| `model` | string | ✅ | ID del modelo de embedding (ver [catálogo](./models)) | -| `input` | string o array de strings | ✅ | El texto o la lista de textos a vectorizar. | +| Parámetro | Tipo | Obligatorio | Descripción | +| --------- | -------------------------- | ----------- | ----------------------------------------------------- | +| `model` | string | ✅ | ID del modelo de embedding (ver [catálogo](./models)) | +| `input` | string o matriz de strings | ✅ | El texto o la lista de textos a vectorizar. | #### Respuesta @@ -413,15 +412,105 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/embeddings" \ } ``` +### POST /v1/rerank + +Reordena una lista de documentos según su relevancia respecto a una consulta. Compatible con la API de Cohere (v1 y v2). + +**Facturación** : 4 € / millón de tokens reordenados. Ideal para mejorar la precisión de los pipelines RAG. + +#### Solicitud + +```bash +curl -X POST "https://api.ai.cloud-temple.com/v1/rerank" \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ + -d '{ + "model": "nvidia/llama-nemotron-rerank-vl-1b-v2", + "query": "Quelle est la capitale de la France ?", + "documents": [ + "Paris est la capitale et la plus grande ville de France.", + "Lyon est une grande ville du sud-est de la France.", + "La France est un pays d'\''Europe occidentale." + ], + "top_n": 2 + }' +``` + +#### Parámetros + +| Parámetro | Tipo | Obligatorio | Descripción | +| ----------- | ------- | ----------- | --------------------------------------------------------------------------- | +| `model` | string | ✅ | ID del modelo de reranking (ver [catálogo](./models#modèles-de-reranking)) | +| `query` | string | ✅ | La consulta de búsqueda | +| `documents` | array | ✅ | Lista de documentos para reordenar | +| `top_n` | integer | ❌ | Número de resultados a devolver (por defecto: todos) | + +#### Respuesta + +```json +{ + "id": "rerank-7f3a2b1c", + "results": [ + { + "index": 0, + "relevance_score": 0.9874, + "document": { + "text": "Paris est la capitale et la plus grande ville de France." + } + }, + { + "index": 2, + "relevance_score": 0.5231, + "document": { + "text": "La France est un pays d'Europe occidentale." + } + } + ], + "usage": { + "billed_units": { + "search_units": 3 + } + } +} +``` + +El endpoint `/v2/rerank` (Cohere SDK v2) también está disponible con el mismo formato de solicitud. + +#### Ejemplo de Python (SDK Cohere) + +```python +import cohere + +# Compatible con el SDK Cohere apuntando a la API LLMaaS +co = cohere.Client( + api_key="VOTRE_TOKEN_API", + base_url="https://api.ai.cloud-temple.com" +) + +results = co.rerank( + model="nvidia/llama-nemotron-rerank-vl-1b-v2", + query="Quelle est la capitale de la France ?", + documents=[ + "Paris est la capitale et la plus grande ville de France.", + "Lyon est une grande ville du sud-est de la France.", + "La France est un pays d'Europe occidentale." + ], + top_n=2 +) + +for result in results.results: + print(f"Index: {result.index}, Score: {result.relevance_score:.4f}") +``` + ### GET /v1/models -List of available models. +Lista de modelos disponibles. -#### Petición +#### Solicitud ```bash curl -X GET "https://api.ai.cloud-temple.com/v1/models" \ - -H "Authorization: Bearer SU_TOKEN_API" + -H "Authorization: Bearer VOTRE_TOKEN_API" ``` #### Respuesta @@ -431,16 +520,16 @@ curl -X GET "https://api.ai.cloud-temple.com/v1/models" \ "object": "list", "data": [ { - "id": "granite3.3:8b", + "id": "gpt-oss:120b", "object": "model", "created": 1749110897, "owned_by": "CloudTemple", - "root": "granite3.3:8b", - "aliases": ["granite3.3:8b"], + "root": "gpt-oss:120b", + "aliases": ["gpt-oss:120b"], "max_model_len": 60000, "permission": [ { - "id": "modelperm-granite3.3:8b-1749110897", + "id": "modelperm-gpt-oss:120b-1749110897", "object": "model_permission", "allow_sampling": true, "allow_view": true, @@ -452,14 +541,14 @@ curl -X GET "https://api.ai.cloud-temple.com/v1/models" \ } ``` -## Códigos de error +## Códigos de Error -### 400 - Petición Inválida +### 400 - Solicitud No Válida ```json { "error": { - "message": "Parámetro 'temperature' no válido: debe estar entre 0 y 2", + "message": "Invalid parameter 'temperature': must be between 0 and 2", "type": "invalid_request_error", "param": "temperature" } @@ -471,7 +560,7 @@ curl -X GET "https://api.ai.cloud-temple.com/v1/models" \ ```json { "error": { - "message": "Clave de API inválida proporcionada", + "message": "Invalid API key provided", "type": "authentication_error" } } @@ -482,7 +571,7 @@ curl -X GET "https://api.ai.cloud-temple.com/v1/models" \ ```json { "error": { - "message": "El modelo 'unknown-model' no existe", + "message": "Model 'unknown-model' does not exist", "type": "invalid_request_error", "param": "model", "code": "model_not_found" @@ -495,30 +584,30 @@ curl -X GET "https://api.ai.cloud-temple.com/v1/models" \ ```json { "error": { - "message": "Se ha excedido el límite de tasa. Por favor, actualice su nivel o inténtelo de nuevo más tarde.", + "message": "Rate limit exceeded. Please upgrade your tier or try again later.", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` -### 500 - Error del servidor +### 500 - Error del Servidor ```json { "error": { - "message": "Error interno del servidor", - "type": "error_del_servidor" + "message": "Internal server error", + "type": "server_error" } } ``` -### 503 - Servicio No Disponible +### 503 - Servicio no disponible ```json { "error": { - "message": "Servicio temporalmente no disponible", + "message": "Service temporarily unavailable", "type": "service_unavailable_error" } } @@ -533,9 +622,9 @@ import requests import json # Configuración -# It is recommended to protect your API key by using environment variables. +# Se recomienda proteger su clave API utilizando variables de entorno. # Ejemplo: API_KEY = os.getenv("LLMAAS_API_KEY") -API_KEY = "SU_TOKEN_API" +API_KEY = "VOTRE_TOKEN_API" BASE_URL = "https://api.ai.cloud-temple.com/v1" headers = { @@ -543,11 +632,11 @@ headers = { "Authorization": f"Bearer {API_KEY}" } -# Completado de chat +# Finalización de chat payload = { - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "messages": [ - {"role": "user", "content": "¡Hola!"} + {"role": "user", "content": "Bonjour !"} ], "max_tokens": 100 } @@ -557,33 +646,33 @@ try: f"{BASE_URL}/chat/completions", headers=headers, json=payload, - timeout=30 # Adición de un timeout para la solicitud + timeout=30 # Agregar un tiempo de espera para la solicitud ) - response.raise_for_status() # Lanza una excepción para códigos de error HTTP (4xx, 5xx) + response.raise_for_status() # Lanza una excepción para los códigos de error HTTP (4xx, 5xx) result = response.json() print(result["choices"][0]["message"]["content"]) except requests.exceptions.HTTPError as e: - print(f"Error HTTP: {e.response.status_code} - {e.response.text}") + print(f"Erreur HTTP: {e.response.status_code} - {e.response.text}") except requests.exceptions.RequestException as e: - print(f"Error de red: {e}") + print(f"Erreur réseau: {e}") except json.JSONDecodeError: - print(f"Error de decodificación JSON: {response.text}") + print(f"Erreur de décodage JSON: {response.text}") except Exception as e: - print(f"Se ha producido un error inesperado: {e}") + print(f"Une erreur inattendue est survenue: {e}") ``` -### Python con Streaming +### Python con streaming ```python import requests import json -def stream_chat(message, model="granite3.3:8b"): +def stream_chat(message, model="gpt-oss:120b"): # Se recomienda proteger su clave API utilizando variables de entorno. # Ejemplo: API_KEY = os.getenv("LLMAAS_API_KEY") - API_KEY = "SU_TOKEN_API" + API_KEY = "VOTRE_TOKEN_API" BASE_URL = "https://api.ai.cloud-temple.com/v1" headers = { @@ -604,10 +693,10 @@ def stream_chat(message, model="granite3.3:8b"): headers=headers, json=payload, stream=True, - timeout=30 # Adición de un timeout para la solicitud + timeout=30 # Agregar un tiempo de espera para la solicitud ) - response.raise_for_status() # Lanza una excepción para códigos de error HTTP (4xx, 5xx) + response.raise_for_status() # Lanza una excepción para los códigos de error HTTP (4xx, 5xx) for line in response.iter_lines(): if line: @@ -622,20 +711,19 @@ def stream_chat(message, model="granite3.3:8b"): if content: print(content, end='', flush=True) except json.JSONDecodeError: - print(f"Error al decodificar JSON en el stream: {data}") + print(f"Erreur de décodage JSON dans le stream: {data}") continue - print() # Nueva línea después del stream + print() # Nueva línea después del stream except requests.exceptions.HTTPError as e: - print(f"Error HTTP: {e.response.status_code} - {e.response.text}") + print(f"Erreur HTTP: {e.response.status_code} - {e.response.text}") except requests.exceptions.RequestException as e: - print(f"Error de red: {e}") + print(f"Erreur réseau: {e}") except Exception as e: - print(f"Se ha producido un error inesperado: {e}") -``` + print(f"Une erreur inattendue est survenue: {e}") # Uso - -stream_chat("Explique la física cuántica") +stream_chat("Expliquez la physique quantique") +``` ### JavaScript/Node.js @@ -645,7 +733,7 @@ const axios = require('axios'); // Configuración // Se recomienda proteger su clave API utilizando variables de entorno. // Ejemplo: const API_KEY = process.env.LLMAAS_API_KEY; -const API_KEY = 'SU_TOKEN_API'; +const API_KEY = 'VOTRE_TOKEN_API'; const BASE_URL = 'https://api.ai.cloud-temple.com/v1'; async function chatCompletion(message) { @@ -653,7 +741,7 @@ async function chatCompletion(message) { const response = await axios.post( `${BASE_URL}/chat/completions`, { - model: 'granite3.3:8b', + model: 'gpt-oss:120b', messages: [ { role: 'user', content: message } ], @@ -664,27 +752,27 @@ async function chatCompletion(message) { 'Content-Type': 'application/json', 'Authorization': `Bearer ${API_KEY}` }, - timeout: 30000 // Adición de un timeout para la solicitud (30 segundos) + timeout: 30000 // Añadir un tiempo de espera para la solicitud (30 segundos) } ); return response.data.choices[0].message.content; } catch (error) { - console.error('Error:', error.response?.data || error.message); - // La gestión más detallada de errores puede añadirse aquí si es necesario - // Por ejemplo: if (error.response?.status === 429) { console.error("Límite de tasa excedido"); } + console.error('Erreur:', error.response?.data || error.message); + // Se puede agregar una gestión de errores más detallada aquí si es necesario + // Por ejemplo: if (error.response?.status === 429) { console.error("Rate limit exceeded"); } } } // Uso -chatCompletion('¡Hola!').then(response => { +chatCompletion('Bonjour !').then(response => { if (response) { console.log(response); } }); ``` -### JavaScript con Fetch (Navegador) +### JavaScript con Fetch (Browser) ```javascript async function fetchCompletion(message) { @@ -695,7 +783,7 @@ async function fetchCompletion(message) { 'Authorization': `Bearer ${API_KEY}` }, body: JSON.stringify({ - model: 'granite3.3:8b', + model: 'gpt-oss:120b', messages: [ { role: 'user', content: message } ], @@ -712,9 +800,9 @@ async function fetchCompletion(message) { } ``` -## Buenas prácticas +## Buenas Prácticas -### Gestión de errores +### Gestión de Errores ```python def safe_api_call(payload): @@ -724,58 +812,58 @@ def safe_api_call(payload): return response.json() except requests.exceptions.HTTPError as e: if response.status_code == 429: - print("Límite de tasa alcanzado, esperar...") + print("Rate limit atteint, attendre...") time.sleep(60) # Esperar 1 minuto return safe_api_call(payload) # Reintentar else: - print(f"Error HTTP: {e}") + print(f"Erreur HTTP: {e}") except requests.exceptions.RequestException as e: - print(f"Error de red: {e}") + print(f"Erreur réseau: {e}") ``` ### Optimización de Costos -1. **Utilice modelos adecuados**: Modelos más pequeños para pruebas -2. **Limitar max_tokens**: Evite respuestas demasiado largas -3. **Reutilice conversaciones**: Ventana de contexto eficiente -4. **Monitoreo**: Supervise su uso en la Consola +1. **Utilice modelos adecuados** : Modelos más pequeños para pruebas +2. **Limite max_tokens** : Evite respuestas demasiado largas +3. **Reutilice las conversaciones** : Ventana de contexto eficiente +4. **Monitoreo** : Supervise su uso en la Consola ### Seguridad -1. **Proteja su token**: Variables de entorno -2. **Rotación regular**: Cambie sus claves periódicamente -3. **Validación de entrada**: Limpie los datos del usuario -4. **Límite de tasa para el cliente**: Implemente sus propios límites +1. **Proteja su token** : Variables de entorno +2. **Rotación periódica** : Cambie sus claves periódicamente +3. **Validación de entrada** : Limpie los datos del usuario +4. **Limitación de tasa del cliente** : Implemente sus propios límites -## SDK and Integrations +## SDK y Integraciones -The LLMaaS API is compatible with existing OpenAI SDKs by simply changing the base URL: +La API LLMaaS es compatible con los SDK de OpenAI existentes modificando la URL base: ### SDK de Python de OpenAI ```python from openai import OpenAI -# It is recommended to protect your API key by using environment variables. +# Se recomienda proteger su clave API utilizando variables de entorno. # Ejemplo: api_key=os.getenv("LLMAAS_API_KEY") client = OpenAI( - api_key="SU_TOKEN_API", + api_key="VOTRE_TOKEN_API", base_url="https://api.ai.cloud-temple.com/v1" ) try: response = client.chat.completions.create( - model="granite3.3:8b", + model="gpt-oss:120b", messages=[ - {"role": "user", "content": "¡Hola!"} + {"role": "user", "content": "Bonjour !"} ], - max_tokens=50 # Adición de max_tokens para mantener coherencia con las pruebas + max_tokens=50 # Añadir max_tokens para coherencia con las pruebas ) print(response.choices[0].message.content) except Exception as e: - print(f"Error del SDK OpenAI: {e}") + print(f"Erreur OpenAI SDK: {e}") ``` ### LangChain @@ -785,40 +873,40 @@ from langchain_openai import ChatOpenAI from langchain.schema import HumanMessage # Configuración del modelo de chat (compatible con LLMaaS) -# It is recommended to protect your API key by using environment variables. -# Example: api_key=os.getenv("LLMAAS_API_KEY") +# Se recomienda proteger su clave API utilizando variables de entorno. +# Ejemplo: api_key=os.getenv("LLMAAS_API_KEY") chat = ChatOpenAI( - api_key="SU_TOKEN_API", + api_key="VOTRE_TOKEN_API", base_url="https://api.ai.cloud-temple.com/v1", - model="granite3.3:8b", - # Note: Parameters such as max_tokens are passed via model_kwargs - # to ensure compatibility across different versions of LangChain. + model="gpt-oss:120b", + # Nota: Los parámetros como max_tokens se pasan a través de model_kwargs + # para garantizar la compatibilidad entre las versiones de LangChain. model_kwargs={"max_tokens": 200} ) try: - # Usage with messages - messages = [HumanMessage(content="Explain AI in 3 sentences")] + # Uso con mensajes + messages = [HumanMessage(content="Expliquez l'IA en 3 phrases")] response = chat.invoke(messages) print(response.content) - # Or with a simple string - response = chat.invoke("Hello, how are you?") + # O con una cadena simple + response = chat.invoke("Bonjour, comment ça va ?") print(response.content) except Exception as e: - print(f"LangChain error: {e}") + print(f"Erreur LangChain: {e}") ``` #### Uso de Embeddings -:::warning[Incompatibilidad con clientes estándar de LangChain] -Actualmente, el uso del endpoint de embeddings con las clases estándar de LangChain (`langchain_openai.OpenAIEmbeddings` o `langchain_community.OllamaEmbeddings`) presenta incompatibilidades con nuestra API. +:::warning Incompatibilidad con los clientes estándar de LangChain +Actualmente, el uso del endpoint de embedding a través de las clases estándar de LangChain (`langchain_openai.OpenAIEmbeddings` o `langchain_community.OllamaEmbeddings`) presenta incompatibilidades con nuestra API. -- `OpenAIEmbeddings` envía tokens precalculados en lugar de texto sin procesar, lo cual es rechazado. -- `OllamaEmbeddings` no gestiona la autenticación mediante Bearer Token requerida. +- `OpenAIEmbeddings` envía tokens precalculados en lugar de texto sin formato, lo cual es rechazado. +- `OllamaEmbeddings` no gestiona la autenticación con Bearer Token requerida. -Mientras se encuentra una solución permanente, se recomienda crear una clase de embeddings personalizada o llamar a la API directamente, como se muestra en el ejemplo `exemplos/simple-rag-demo`. +Mientras se espera una solución definitiva, se recomienda crear una clase de embedding personalizada o llamar a la API directamente, como se demuestra en el ejemplo `exemples/simple-rag-demo`. ::: ```python @@ -828,9 +916,9 @@ import httpx class LLMaaSEmbeddings(Embeddings): """ - Clase de embeddings personalizada para interactuar con la API LLMaaS de Cloud Temple. - Esta clase está diseñada para ser compatible con la interfaz `Embeddings` de LangChain, - permitiendo su uso en pipelines de LangChain mientras se llama a nuestra API específica. + Classe d'embedding personnalisée pour interagir avec l'API LLMaaS de Cloud Temple. + Cette classe est conçue pour être compatible avec l'interface `Embeddings` de LangChain, + permettant son utilisation dans des pipelines LangChain tout en appelant notre API spécifique. """ def __init__(self, api_key: str, base_url: str = "https://api.ai.cloud-temple.com/v1", model_name: str = "granite-embedding:278m"): self.api_key = api_key @@ -852,8 +940,8 @@ class LLMaaSEmbeddings(Embeddings): data.sort(key=lambda e: e['index']) return [item['embedding'] for item in data] except httpx.HTTPStatusError as e: - print(f"Error HTTP al obtener el embedding: {e.response.status_code}") - print(f"Respuesta: {e.response.text}") + print(f"Erreur HTTP lors de la récupération de l'embedding : {e.response.status_code}") + print(f"Réponse : {e.response.text}") return [] def embed_documents(self, texts: List[str]) -> List[List[float]]: @@ -864,16 +952,16 @@ class LLMaaSEmbeddings(Embeddings): # Uso # embeddings = LLMaaSEmbeddings( -# api_key="SU_TOKEN_API", +# api_key="VOTRE_TOKEN_API", # base_url="https://api.ai.cloud-temple.com/v1", # model_name="granite-embedding:278m" # ) -# vector = embeddings.embed_query("Mi texto a vectorizar") +# vector = embeddings.embed_query("Mon texte à vectoriser") ``` ## Soporte - **Documentación** : [Guía de inicio rápido](./quickstart) - **Catálogo de modelos** : [Lista completa](./models) -- **Consola** : Gestión y supervisión a través de la Consola Cloud Temple -- **Soporte** : A través de la Consola Cloud Temple +- **Consola** : Gestión y monitoreo a través de la Consola Cloud Temple +- **Soporte** : A través de la Consola Cloud Temple \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/llmaas/batch.md b/i18n/es/docusaurus-plugin-content-docs/current/llmaas/batch.md new file mode 100644 index 00000000..9d1fcb42 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/llmaas/batch.md @@ -0,0 +1,536 @@ +--- +title: API por lotes +sidebar_position: 6 +--- + +# Batch API — Procesamiento Asíncrono + +:::info Disponibilidad +La Batch API está en **despliegue progresivo**. Verifique la disponibilidad en su cuenta en la [Console Cloud Temple](https://console.cloud-temple.com) o contacte al soporte comercial. +::: + +## ¿Qué es la Batch API? + +La **Batch API** permite enviar grandes volúmenes de solicitudes de forma **asíncrona**, procesadas en horas valle. A cambio de una tolerancia en el tiempo de procesamiento (unas horas), obtienes una **reducción del 50%** sobre las tarifas estándar. + +### ¿Cuándo usar la API Batch? + +| Caso de uso | ¿Adecuado para Batch? | +|-------------|-------------------| +| Clasificación/etiquetado de millones de documentos | ✅ Ideal | +| Generación masiva de resúmenes | ✅ Ideal | +| Extracción de entidades en un corpus extenso | ✅ Ideal | +| Vectorización (embedding) en volumen | ✅ Ideal | +| Evaluación de modelos (benchmarks) | ✅ Ideal | +| Chatbot en tiempo real | ❌ Utilice `/v1/chat/completions` | +| Respuesta interactiva < 2 segundos | ❌ Utilice la API estándar | +| Streaming SSE | ❌ Utilice la API estándar | + +## Tarificación + +| Uso | Por lotes | Estándar | Ahorro | +|-------|-------|----------|---------| +| **Tokens de entrada** | **0.9 € / millón** | 1.8 € / millón | −50% | +| **Tokens de salida** | **4.0 € / millón** | 8.0 € / millón | −50% | + +### Ejemplo de ahorro + +Para procesar 1 millón de documentos de 500 tokens con respuestas de 200 tokens : +- **Estándar** : (500 × 1.8 + 200 × 8) / 1 = 2 500 € +- **Por lotes** : (500 × 0.9 + 200 × 4) / 1 = 1 250 € +- **Ahorro : 1 250 € (−50%)** + +## Arquitectura del Pipeline Batch + +``` +1. Preparación 2. Envío 3. Procesamiento +──────────────────────── ───────────────────── ───────────────────── +Crear un archivo JSONL → POST /v1/batches → Procesamiento asíncrono +con N solicitudes (devuelve batch_id) en horas valle + +4. Polling 5. Recuperación +───────────────────────── ───────────────────────── +GET /v1/batches/{id} → GET /v1/files/{file_id} → Resultados JSONL +(estado: validando, (descargar los +en_progreso, completado) resultados) +``` + +## Formato del Archivo de Entrada (JSONL) + +Cada línea del archivo es una solicitud JSON independiente: + +```json +{"custom_id": "req-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gpt-oss:120b", "messages": [{"role": "user", "content": "Résume ce texte : L'IA générative est..."}], "max_tokens": 200}} +{"custom_id": "req-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gpt-oss:120b", "messages": [{"role": "user", "content": "Classifie ce ticket : Mon accès VPN ne fonctionne plus."}], "max_tokens": 50}} +{"custom_id": "req-3", "method": "POST", "url": "/v1/embeddings", "body": {"model": "granite-embedding:278m", "input": "Texte à vectoriser pour la recherche sémantique."}} +``` + +### Campos obligatorios por fila + +| Campo | Tipo | Descripción | +|-------|------|-------------| +| `custom_id` | string | Identificador único de su solicitud (para la recuperación) | +| `method` | string | Siempre `"POST"` | +| `url` | string | Endpoint de destino (ej: `/v1/chat/completions`, `/v1/embeddings`) | +| `body` | object | Cuerpo de la solicitud (mismo formato que una llamada directa) | + +## Endpoints de la API + +### POST /v1/batches — Enviar un lote + +```bash +# 1. Upload du fichier JSONL +curl -X POST "https://api.ai.cloud-temple.com/v1/files" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ + -F "purpose=batch" \ + -F "file=@requests.jsonl" +``` + +```json +{ + "id": "file-abc123xyz", + "object": "file", + "purpose": "batch", + "filename": "requests.jsonl", + "bytes": 4096, + "created_at": 1749110753 +} +``` + +```bash +# 2. Soumission du batch +curl -X POST "https://api.ai.cloud-temple.com/v1/batches" \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ + -d '{ + "input_file_id": "file-abc123xyz", + "endpoint": "/v1/chat/completions", + "completion_window": "24h" + }' +``` + +```json +{ + "id": "batch-def456uvw", + "object": "batch", + "endpoint": "/v1/chat/completions", + "input_file_id": "file-abc123xyz", + "status": "validating", + "created_at": 1749110800, + "request_counts": { + "total": 100, + "completed": 0, + "failed": 0 + } +} +``` + +### GET /v1/batches/\{batch_id\} — Comprobar el estado + +```bash +curl -X GET "https://api.ai.cloud-temple.com/v1/batches/batch-def456uvw" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" +``` + +**Estados posibles:** + +| Estado | Descripción | +|--------|-------------| +| `validating` | Validación del archivo de entrada en curso | +| `in_progress` | Procesamiento de solicitudes en curso | +| `finalizing` | Compilación de resultados | +| `completed` | Todos los resultados están disponibles | +| `failed` | Error global (ver `errors`) | +| `cancelled` | Cancelado por el usuario | + +```json +{ + "id": "batch-def456uvw", + "status": "completed", + "output_file_id": "file-ghi789rst", + "request_counts": { + "total": 100, + "completed": 99, + "failed": 1 + }, + "completed_at": 1749118000 +} +``` + +### GET /v1/files/\{file_id\}/content — Recuperar los resultados + +```bash +curl -X GET "https://api.ai.cloud-temple.com/v1/files/file-ghi789rst/content" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ + -o results.jsonl +``` + +**Formato de los resultados (JSONL):** + +```json +{"id": "batch-def456uvw", "custom_id": "req-1", "response": {"status_code": 200, "body": {"id": "chatcmpl-...", "choices": [{"message": {"role": "assistant", "content": "Résumé : L'IA générative..."}}], "usage": {"prompt_tokens": 45, "completion_tokens": 87}}}} +{"id": "batch-def456uvw", "custom_id": "req-2", "response": {"status_code": 200, "body": {"id": "chatcmpl-...", "choices": [{"message": {"role": "assistant", "content": "Catégorie: Réseau/VPN"}}], "usage": {"prompt_tokens": 22, "completion_tokens": 8}}}} +{"id": "batch-def456uvw", "custom_id": "req-3", "error": {"code": "server_error", "message": "Processing failed"}} +``` + +## Exemple Python Complet + +```python +""" +Exemple complet d'utilisation de la Batch API LLMaaS. +Cas d'usage : classification de tickets de support en masse. +""" +import httpx +import json +import time +import os +from pathlib import Path + +API_KEY = os.getenv("LLMAAS_API_KEY") +BASE_URL = "https://api.ai.cloud-temple.com/v1" +HEADERS = { + "Authorization": f"Bearer {API_KEY}", + "Content-Type": "application/json" +} + + +# ══════════════════════════════════════════════════════ +# PASO 1: Preparar las solicitudes en formato JSONL +# ══════════════════════════════════════════════════════ + +def create_batch_file(tickets: list[str], output_path: str = "batch_input.jsonl") -> str: + """ + Crée un fichier JSONL avec une requête de classification par ticket. + + Args: + tickets: Liste des tickets à classifier + output_path: Chemin du fichier JSONL de sortie + + Returns: + Chemin du fichier créé + """ + with open(output_path, "w", encoding="utf-8") as f: + for i, ticket in enumerate(tickets): + request = { + "custom_id": f"ticket-{i:04d}", + "method": "POST", + "url": "/v1/chat/completions", + "body": { + "model": "gpt-oss:120b", + "messages": [ + { + "role": "system", + "content": ( + "Tu es un expert en support IT. " + "Classifie le ticket dans une seule catégorie parmi : " + "Réseau, Sécurité, Logiciel, Matériel, Accès, Autre. " + "Réponds uniquement avec le nom de la catégorie." + ) + }, + { + "role": "user", + "content": ticket + } + ], + "max_tokens": 10, + "temperature": 0.0 + } + } + f.write(json.dumps(request, ensure_ascii=False) + "\n") + + print(f"✅ Fichier JSONL créé : {output_path} ({len(tickets)} requêtes)") + return output_path + + +# ══════════════════════════════════════════════════════ +# PASO 2: Cargar el archivo +# ══════════════════════════════════════════════════════ + +def upload_batch_file(file_path: str) -> str: + """ + Upload le fichier JSONL vers l'API. + + Returns: + file_id retourné par l'API + """ + print(f"📤 Upload de {file_path}...") + + with open(file_path, "rb") as f: + with httpx.Client(timeout=60.0) as client: + response = client.post( + f"{BASE_URL}/files", + headers={"Authorization": f"Bearer {API_KEY}"}, + files={"file": (Path(file_path).name, f, "application/jsonl")}, + data={"purpose": "batch"} + ) + response.raise_for_status() + + file_id = response.json()["id"] + print(f"✅ Fichier uploadé : {file_id}") + return file_id + + +# ══════════════════════════════════════════════════════ +# PASO 3: Enviar el lote +# ══════════════════════════════════════════════════════ + +def submit_batch(file_id: str) -> str: + """ + Soumet un batch pour traitement asynchrone. + + Returns: + batch_id retourné par l'API + """ + print(f"🚀 Soumission du batch (fichier: {file_id})...") + + with httpx.Client(timeout=30.0) as client: + response = client.post( + f"{BASE_URL}/batches", + headers=HEADERS, + json={ + "input_file_id": file_id, + "endpoint": "/v1/chat/completions", + "completion_window": "24h" + } + ) + response.raise_for_status() + + data = response.json() + batch_id = data["id"] + print(f"✅ Batch soumis : {batch_id} (statut: {data['status']})") + return batch_id + + +# ══════════════════════════════════════════════════════ +# PASO 4: Solicitud de estado hasta la finalización +# ══════════════════════════════════════════════════════ + +def wait_for_completion(batch_id: str, poll_interval: int = 30) -> dict: + """ + Interroge l'API jusqu'à la complétion du batch. + + Args: + batch_id: L'identifiant du batch + poll_interval: Intervalle de polling en secondes + + Returns: + Le statut final du batch + """ + print(f"⏳ En attente de la complétion du batch {batch_id}...") + + terminal_statuses = {"completed", "failed", "cancelled", "expired"} + + while True: + with httpx.Client(timeout=30.0) as client: + response = client.get( + f"{BASE_URL}/batches/{batch_id}", + headers=HEADERS + ) + response.raise_for_status() + + batch = response.json() + status = batch["status"] + counts = batch.get("request_counts", {}) + + print( + f" Statut: {status} | " + f"Complétées: {counts.get('completed', 0)}/{counts.get('total', 0)} | " + f"Échouées: {counts.get('failed', 0)}" + ) + + if status in terminal_statuses: + return batch + + time.sleep(poll_interval) + + +# ══════════════════════════════════════════════════════ +# PASO 5: Recuperar y analizar los resultados +# ══════════════════════════════════════════════════════ + +def download_results(output_file_id: str, save_path: str = "batch_output.jsonl") -> list[dict]: + """ + Télécharge et parse les résultats du batch. + + Returns: + Liste des résultats par custom_id + """ + print(f"📥 Téléchargement des résultats ({output_file_id})...") + + with httpx.Client(timeout=60.0) as client: + response = client.get( + f"{BASE_URL}/files/{output_file_id}/content", + headers={"Authorization": f"Bearer {API_KEY}"} + ) + response.raise_for_status() + + # Sauvegarder le fichier brut + with open(save_path, "wb") as f: + f.write(response.content) + + # Parser les résultats + results = [] + for line in response.text.strip().split("\n"): + if line: + results.append(json.loads(line)) + + print(f"✅ {len(results)} résultats récupérés → {save_path}") + return results + + +# ══════════════════════════════════════════════════════ +# PROGRAMA PRINCIPAL +# ══════════════════════════════════════════════════════ + +def main(): + # Exemples de tickets de support IT + tickets = [ + "Mon accès VPN ne fonctionne plus depuis ce matin.", + "L'imprimante du 3ème étage n'imprime plus en couleur.", + "Je ne peux pas me connecter à mon compte Office 365.", + "Mon ordinateur est très lent depuis la mise à jour d'hier.", + "Le site web de facturation interne affiche une erreur 500.", + "Besoin d'accès au dossier partagé RH sur le serveur.", + "Mon badge ne fonctionne plus à l'entrée du datacenter.", + "Outlook ne reçoit plus d'emails depuis 2 heures.", + ] + + print(f"🎯 Traitement de {len(tickets)} tickets en mode Batch\n") + + # Pipeline complet + jsonl_file = create_batch_file(tickets) + file_id = upload_batch_file(jsonl_file) + batch_id = submit_batch(file_id) + + final_status = wait_for_completion(batch_id, poll_interval=30) + + if final_status["status"] != "completed": + print(f"❌ Batch terminé avec statut : {final_status['status']}") + return + + output_file_id = final_status.get("output_file_id") + if not output_file_id: + print("❌ Aucun fichier de sortie disponible.") + return + + results = download_results(output_file_id) + + # Afficher les résultats + print("\n" + "═" * 60) + print("📊 RÉSULTATS DE CLASSIFICATION") + print("═" * 60) + + for result in results: + custom_id = result["custom_id"] + idx = int(custom_id.split("-")[1]) + + if "error" in result: + category = f"ERREUR: {result['error']['message']}" + else: + category = result["response"]["body"]["choices"][0]["message"]["content"].strip() + + ticket_text = tickets[idx] if idx < len(tickets) else "?" + print(f"[{custom_id}] {category:12s} | {ticket_text[:60]}...") + + +if __name__ == "__main__": + main() +``` + +## Gestión de Errores Parciales + +El lote puede ser **parcialmente exitoso** : algunas solicitudes se ejecutan correctamente y otras fallan. + +```python +def process_results(results: list[dict]) -> tuple[list, list]: + """Sépare les succès des échecs dans les résultats.""" + successes = [] + failures = [] + + for result in results: + if "error" in result: + failures.append({ + "custom_id": result["custom_id"], + "error": result["error"] + }) + else: + response_body = result["response"]["body"] + successes.append({ + "custom_id": result["custom_id"], + "content": response_body["choices"][0]["message"]["content"], + "usage": response_body.get("usage", {}) + }) + + print(f"✅ Succès : {len(successes)} | ❌ Échecs : {len(failures)}") + return successes, failures +``` + +## Limitaciones y Restricciones + +| Restricción | Valor | +|-----------|--------| +| **Tamaño máximo del archivo JSONL** | 100 MB | +| **Número máximo de solicitudes por lote** | 50 000 | +| **Tiempo de procesamiento garantizado** | < 24h (típicamente 2-4h) | +| **Retención de los archivos de resultados** | 7 días | +| **Lotes simultáneos por cuenta** | 10 | + +:::warning Procesamiento asíncrono +El lote no garantiza un orden de procesamiento. Los resultados pueden aparecer en un orden diferente al de entrada. Utilice el campo `custom_id` para asociar cada resultado con su solicitud original. +::: + +## Casos de Uso Avanzados + +### Embedding masivo + +```python +# Vectorización de 10 000 documentos en lote +def create_embedding_batch(documents: list[str]) -> str: + with open("embed_batch.jsonl", "w") as f: + for i, doc in enumerate(documents): + request = { + "custom_id": f"doc-{i:05d}", + "method": "POST", + "url": "/v1/embeddings", + "body": { + "model": "granite-embedding:278m", + "input": doc[:500] # Límite de contexto del modelo + } + } + f.write(json.dumps(request) + "\n") +return "embed_batch.jsonl" +``` + +### Cancelación de un lote + +```python +def cancel_batch(batch_id: str) -> dict: + with httpx.Client(timeout=30.0) as client: + response = client.post( + f"{BASE_URL}/batches/{batch_id}/cancel", + headers=HEADERS + ) + response.raise_for_status() + return response.json() +``` + +### Lista de lotes + +```python +def list_batches(limit: int = 20) -> list[dict]: + with httpx.Client(timeout=30.0) as client: + response = client.get( + f"{BASE_URL}/batches", + headers=HEADERS, + params={"limit": limit} + ) + response.raise_for_status() + return response.json()["data"] +``` + +## Recursos + +- **Código de ejemplo completo** : [`exemples/simple_batch/`](https://github.com/Cloud-Temple/product-llmaas-how-to/tree/main/simple_batch) +- **Catálogo de modelos** : [Modèles compatibles Batch](./models) +- **Referencia de la API** : [Documentation API complète](./api) +- **Precios detallados** : [Tarificación LLMaaS](./api#rate-limiting-et-facturation) \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/llmaas/concepts.md b/i18n/es/docusaurus-plugin-content-docs/current/llmaas/concepts.md index e0827f1a..ae762dcb 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/llmaas/concepts.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/llmaas/concepts.md @@ -3,11 +3,11 @@ title: Conceptos sidebar_position: 3 --- -# Conceptos y Arquitectura de LLMaaS +# Conceptos y Arquitectura LLMaaS ## Visión general -El servicio **LLMaaS** (Large Language Models as a Service) de Cloud Temple ofrece acceso seguro y soberano a los modelos de inteligencia artificial más avanzados, con la **certificación SecNumCloud** de la ANSSI. +El servicio **LLMaaS** (Large Language Models as a Service) de Cloud Temple proporciona un acceso seguro y soberano a los modelos de inteligencia artificial más avanzados, con la **certificación SecNumCloud** de la ANSSI. ## 🏗️ Arquitectura Técnica @@ -20,137 +20,128 @@ import ArchitectureLLMaaS from '@site/docs/llmaas/images/llmaas_architecture_001 ### Componentes Principales #### 1. **API Gateway LLMaaS** - - **Compatible con OpenAI** : Integración transparente con el ecosistema existente -- **Límite de tasas** : Gestión de cuotas por nivel de facturación -- **Equilibrio de carga** : Distribución inteligente sobre 12 máquinas GPU -- **Monitoreo** : Métricas en tiempo real y alertas - -#### 2. **Authentication Service** +- **Límite de tasa** : Gestión de cuotas por nivel de facturación +- **Balanceo de carga** : Distribución inteligente en 12 máquinas GPU +- **Monitorización** : Métricas en tiempo real y alertas -- **Secure API Tokens**: Automatic rotation -- **Access Control**: Granular permissions per model -- **Audit Trails**: Full access traceability +#### 2. **Servicio de Autenticación** +- **Tokens API seguros** : Rotación automática +- **Control de acceso** : Permisos granulares por modelo +- **Registros de auditoría** : Trazabilidad completa de los accesos -## 🤖 Modelos y tokens +## 🤖 Modelos y Tokens ### Catálogo de Modelos -*Catálogo completo: [Lista de modelos](./models)* +*Catálogo completo: [Liste des modèles](./models)* ### Gestión de Tokens -#### **Tipos de tokens** - -- **Tokens de entrada**: Su prompt y contexto -- **Tokens de salida**: Respuesta generada por el modelo -- **Tokens del sistema**: Metadatos e instrucciones +#### **Tipos de Tokens** +- **Tokens de entrada** : Su prompt y contexto +- **Tokens de salida** : Respuesta generada por el modelo +- **Tokens del sistema** : Metadatos e instrucciones #### **Cálculo de Costos** - ``` -Coste total = (Tokens entrada × 1,9€/M) + (Tokens salida × 8€/M) + (Tokens salida Razonamiento × 8€/M) +Chat/Completion = (Tokens entrée × 1.8€/M) + (Tokens sortie × 8€/M) + (Tokens sortie Raisonnement × 8€/M) +Reranking = Documents rerankés × 4€/M +Batch (async) = (Tokens entrée × 0.9€/M) + (Tokens sortie × 4€/M) +Audio (ASR) = 0.01€ / minute de transcription ``` #### **Optimización** - -- **Ventana de contexto**: Reutilice las conversaciones para ahorrar -- **Modelos adecuados**: Elija el tamaño según la complejidad -- **Tokens máximos**: Limite la longitud de las respuestas +- **Ventana de contexto** : Reutilice las conversaciones para ahorrar +- **Modelos adecuados** : Elija el tamaño según la complejidad +- **Tokens máximos** : Limite la longitud de las respuestas ### Tokenización ```python # Ejemplo de estimación de tokens def estimate_tokens(text: str) -> int: - """Estimación aproximada: 1 token ≈ 4 caracteres""" + """Estimation approximative : 1 token ≈ 4 caractères""" return len(text) // 4 prompt = "Expliquez la photosynthèse" response_max = 200 # tokens máximos deseados estimated_input = estimate_tokens(prompt) # ~6 tokens -total_cost = (estimated_input * 1.9 + response_max * 8) / 1_000_000 -print(f"Coste estimado: {total_cost:.6f}€") +total_cost = (estimated_input * 1.8 + response_max * 8) / 1_000_000 +print(f"Coût estimé: {total_cost:.6f}€") ``` -## 🔒 Security and Compliance +## 🔒 Seguridad y Cumplimiento -### SecNumCloud Certification +### Cualificación SecNumCloud -The LLMaaS service is hosted on a technical infrastructure that holds the **SecNumCloud 3.2 certification** from ANSSI, ensuring: +El servicio LLMaaS se ejecuta en una infraestructura técnica que cuenta con la **cualificación SecNumCloud 3.2** de la ANSSI, garantizando: #### **Protección de Datos** - -- **Cifrado extremo a extremo**: TLS 1.3 para todos los intercambios -- **Almacenamiento seguro**: Datos cifrados en reposo (AES-256) -- **Aislamiento**: Entornos dedicados por inquilino +- **Cifrado de extremo a extremo** : TLS 1.3 para todas las comunicaciones +- **Almacenamiento seguro** : Datos cifrados en reposo (AES-256) +- **Aislamiento** : Entornos dedicados por inquilino #### **Soberanía Digital** +- **Alojamiento en Francia** : Centros de datos Cloud Temple certificados +- **Derecho francés** : Cumplimiento nativo del RGPD +- **Sin exposición** : Sin transferencias a nubes extranjeras -- **Almacenamiento en Francia**: Centros de datos Cloud Temple certificados -- **Derecho francés**: Cumplimiento nativo del RGPD -- **Sin exposición**: Sin transferencias a nubes extranjeras - -#### **Auditoría y trazabilidad** - -- **Registros completos** : Todas las interacciones registradas +#### **Auditoría y Trazabilidad** +- **Logs completos** : Todas las interacciones registradas - **Retención** : Conservación según políticas legales - **Cumplimiento** : Informes de auditoría disponibles -### Security Controls +### Controles de Seguridad import SecurityControls from '@site/docs/llmaas/images/llmaas_security_002.png'; -Security Controls LLMaaS +Controles de Seguridad LLMaaS ### Seguridad de los Prompts -El análisis de prompts es una función de seguridad **integrada y nativa** en la plataforma LLMaaS. Habilitada por defecto, su objetivo es detectar y prevenir intentos de "jailbreak" o inyección de prompts maliciosos antes de que lleguen al modelo. Esta protección se basa en un enfoque multicapa. +El análisis de prompts es una función de seguridad **nativa e integrada** en la plataforma LLMaaS. Activada por defecto, tiene como objetivo detectar y prevenir intentos de "jailbreak" o inyección de prompts maliciosos antes de que lleguen al modelo. Esta protección se basa en un enfoque multicapa. -:::tip[Contactar al soporte para desactivar] -Es posible desactivar este análisis de seguridad para casos de uso muy específicos, aunque no se recomienda. Para cualquier consulta sobre este tema o para solicitar una desactivación, póngase en contacto con el soporte de Cloud Temple. +:::tip Contactar al soporte para la desactivación +Es posible desactivar este análisis de seguridad para casos de uso muy específicos, aunque no se recomienda. Para cualquier consulta al respecto o para solicitar una desactivación, contacte al soporte de Cloud Temple. ::: -#### 1. Análisis estructural (`check_structure`) - -- **JSON malformado** : El sistema detecte si el prompt comienza con un `{` y trata de analizarlo como JSON. Si el análisis tiene éxito y el JSON contiene palabras clave sospechosas (por ejemplo, "system", "bypass"), o si el análisis falla de manera inesperada, esto puede indicar una tentativa de inyección. -- **Normalización Unicode** : El prompt se normaliza utilizando `unicodedata.normalize('NFKC', prompt)`. Si el prompt original difiere de su versión normalizada, esto puede indicar el uso de caracteres Unicode engañosos (homógrafos) para evadir los filtros. Por ejemplo, "аdmin" (cirílico) en lugar de "admin" (latino). - -#### 2. Detection of Suspicious Patterns (`check_patterns`) - -- The system uses regular expressions (`regex`) to identify known attack patterns in prompts, across multiple languages (French, English, Chinese, Japanese). -- **Examples of detected patterns**: - - **System Commands**: Keywords such as "ignore the instructions", "ignore instructions", "忽略指令", "指示を無視". - - **HTML Injection**: Hidden or malicious HTML tags, for example ` -Managed **Core** Kubernetes by Cloud Temple es una solución de orquestación de contenedores basada en una selección de productos Open Source, diseñada para ofrecer una capa base segura, resiliente y automatizada en las plataformas SecNumCloud de Cloud Temple. Cada clúster se despliega en un entorno IaaS de Cloud Temple completamente dedicado al cliente. +Managed **Core** Kubernetes by Cloud Temple es una solución de orquestación de contenedores basada en una selección de productos de código abierto, diseñada para ofrecer una base segura, resiliente y automatizada en las plataformas SecNumCloud de Cloud Temple. Cada clúster se despliega en un entorno IaaS de Cloud-Temple completamente dedicado al cliente. -Esta oferta está diseñada para equipos con un excelente dominio de Kubernetes y las herramientas Cloud Native, que desean construir su propia plataforma sobre fundamentos minimalistas y robustos. Se dirige a los entusiastas del código abierto que buscan una solución depurada, portable, sin capa adicional del fabricante, en un OS minimalista e inmutable diseñado para la automatización y la seguridad. +Este producto está diseñado para equipos con un excelente dominio de Kubernetes y herramientas Cloud Native, que desean construir su propia plataforma sobre cimientos minimalistas y robustos. Está dirigida a los entusiastas del código abierto que buscan una solución depurada, portátil, sin capas adicionales del fabricante, sobre un sistema operativo minimalista e inmutable diseñado para la automatización y la seguridad. ### Beneficios Clave -- **Soberanía y Reversibilidad**: La solución se apoya exclusivamente en estándares open source (Kubernetes CNCF) para evitar cualquier dependencia tecnológica y garantizar la portabilidad de sus aplicaciones. -- **Seguridad "Zero-Trust" by design**: La arquitectura se basa en Talos OS, un sistema operativo inmutable sin acceso directo (sin shell, sin SSH), lo que reduce drásticamente la superficie de ataque y constituye una base sólida para una estrategia de seguridad "Zero-Trust". -- **Fundamentos de red modernos**: La integración de Cilium para el CNI y MetalLB para la exposición de servicios proporciona una base de red eficiente y estándar, lista para acoger sus propios componentes de seguridad y filtrado. +- **Soberanía y Reversibilidad** : La solución se basa exclusivamente en estándares de código abierto (Kubernetes CNCF) para evitar cualquier dependencia tecnológica y garantizar la portabilidad de sus aplicaciones. +- **Seguridad "Zero-Trust" by design** : La arquitectura se basa en Talos OS, un sistema operativo inmutable sin acceso directo (ni shell, ni SSH), lo que reduce drásticamente la superficie de ataque y constituye una base sólida para una estrategia de seguridad "Zero-Trust". +- **Fundamentos de red modernos** : La integración de Cilium para CNI y MetalLB para la exposición de servicios proporciona una base de red de alto rendimiento y estándar, lista para alojar sus propios componentes de seguridad y filtrado. -### Una plataforma base lista para ser extendida +### Una plataforma base lista para ser ampliada -La oferta "Managed Core" incluye nativamente una stack mínima y coherente de herramientas open source de vanguardia para proporcionarle los fundamentos de un clúster Kubernetes: +La oferta "Managed Core" incluye de forma nativa una stack mínima y coherente de herramientas open source de última generación para proporcionarle las bases de un clúster de Kubernetes : -- **OS y Red**: Talos, Cilium, MetalLB +- **SO y Red** : Talos, Cilium, MetalLB -A partir de esta base, es libre de integrar sus propias herramientas para el despliegue continuo, la observabilidad, el respaldo y la gestión de costes. +A partir de esta base, tiene la libertad de integrar sus propias herramientas para el despliegue continuo, la observabilidad, la copia de seguridad y la gestión de costos. --- ## Arquitecturas de Despliegue -Ofrecemos dos arquitecturas distintas para satisfacer sus necesidades, ya sea para entornos de desarrollo o de producción crítica. +Proponemos dos arquitecturas distintas para satisfacer sus necesidades, ya sea para entornos de desarrollo o de producción críticos. ### Arquitectura "Dev/Test" Ideal para entornos de POC, esta arquitectura compacta despliega todos los recursos dentro de una única zona de disponibilidad (AZ). -- **Casos de uso**: Desarrollo, pruebas, proof-of-concept (POC). -- **Puntos clave**: +- **Caso de uso** : Desarrollo, pruebas, pruebas de concepto (POC). +- **Puntos clave** : - 1 nodo Control Plane. - 3 nodos Workers (o más). - - Sin SLA de alta disponibilidad. - - Sin restricciones de seguridad. + - No cuenta con SLA de alta disponibilidad. + - sin restricciones de seguridad -Arquitectura Mono-AZ +Architecture Mono-AZ ### Arquitectura de Producción (Multi-AZ) -Diseñada para producción y aplicaciones críticas, esta arquitectura distribuye los recursos en tres zonas de disponibilidad (AZ) para garantizar alta disponibilidad y máxima resiliencia, conforme a los requisitos de SecNumCloud. +Diseñada para producción y aplicaciones críticas, esta arquitectura distribuye los recursos en tres zonas de disponibilidad (AZ) para garantizar una alta disponibilidad y una resiliencia máxima, conforme a los requisitos de SecNumCloud. -- **Casos de uso**: Aplicaciones de producción, servicios críticos, plataformas que requieren un SLA. -- **Puntos clave**: - - **Alta Disponibilidad**: 3 nodos Control Plane distribuidos en 3 AZs. - - **Workers Distribuidos**: Al menos 3 nodos workers, uno por AZ. - - **Nodos Bare Metal (Opcional)**: Posible integración de nodos workers de tipo **"Bare Metal"** para necesidades de rendimiento específicas, en particular el **soporte de GPU**. - - **SLA del 99,90%**. +- **Caso de uso** : Aplicaciones de producción, servicios críticos, plataformas que requieren un SLA. +- **Puntos clave** : + - **Alta Disponibilidad** : 3 nodos del Control Plane distribuidos en 3 AZ. + - **Workers Distribuidos** : Mínimo 3 nodos workers, uno por AZ. + - **Nodos Bare Metal (Opcional)** : Posibilidad de integrar nodos workers de tipo **"Bare Metal"** para necesidades de rendimiento específicas, especialmente el **soporte de GPU**. + - **SLA del 99.90%**, medido mensualmente. -Arquitectura Multi-AZ +Arquitectura Multi-AZ --- @@ -78,7 +80,7 @@ Diseñada para producción y aplicaciones críticas, esta arquitectura distribuy La oferta "Managed Core" incluye los siguientes componentes: -- **Sistema operativo**: Talos OS -- **Almacenamiento**: Rook-Ceph -- **CNI (Container Network Interface)**: Cilium -- **Load Balancer**: MetalLB +- **Sistema operativo** : Talos OS +- **Almacenamiento** : Rook-Ceph +- **CNI (Container Network Interface)** : Cilium +- **Balanceador de carga** : MetalLB \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md index 262a4da3..3b384ca0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md @@ -1,17 +1,17 @@ --- -title: Descripción general de Managed Kubernetes +title: Visión general --- -# Managed Kubernetes +# Kubernetes administrado

Conceptos

-

Descubra las bases y los principios esenciales para dominar nuestra infraestructura.

+

Descubra las bases y principios esenciales para dominar nuestra infraestructura.

Explorar los conceptos →
-

Guía de inicio rápido

+

Guía de inicio

Comience rápidamente siguiendo instrucciones claras y sencillas.

Iniciar el Quickstart →
@@ -22,60 +22,60 @@ title: Descripción general de Managed Kubernetes
-Managed Kubernetes by Cloud Temple es una solución de orquestación de contenedores basada en productos Open Source, diseñada para ofrecer un alto nivel de seguridad, resiliencia y automatización en las plataformas SecNumCloud de Cloud Temple. Cada clúster se despliega en un entorno IaaS de Cloud Temple completamente dedicado al cliente. +Kubernetes administrado de Cloud Temple es una solución de orquestación de contenedores basada en productos de código abierto y diseñada para ofrecer un alto nivel de seguridad, resiliencia y automatización en las plataformas SecNumcloud de Cloud Temple. Cada clúster se implementa en un entorno IaaS de Cloud-Temple completamente dedicado al cliente. -Esta oferta está diseñada para equipos con un buen conocimiento de Kubernetes y los entusiastas del código abierto que buscan una solución nativa, portable, sin capa adicional del fabricante, en un OS minimalista e inmutable diseñado para la automatización y la seguridad. +Este producto está diseñado para equipos con un buen conocimiento de Kubernetes y para los entusiastas del código abierto que buscan una solución nativa, portátil, sin capa adicional del fabricante, sobre un sistema operativo minimalista e inmutable diseñado para la automatización y la seguridad. ### Beneficios Clave -- **Soberanía y Reversibilidad**: La solución se apoya en estándares open source (Kubernetes CNCF) para evitar cualquier dependencia tecnológica y garantizar la portabilidad de sus aplicaciones. La herramienta de respaldo Veeam Kasten, incluida en la oferta, está específicamente diseñada para facilitar las migraciones de una nube a otra. -- **Seguridad "Zero-Trust" y Gobernanza**: La arquitectura se basa en Talos OS, un sistema operativo inmutable sin acceso directo (sin shell, sin SSH), lo que reduce drásticamente la superficie de ataque. Este enfoque se combina con herramientas de gobernanza como Kyverno para la gestión de políticas y Capsule para la gestión detallada de derechos, constituyendo una base sólida para una estrategia de seguridad "Zero-Trust". -- **Control de Costes e Integración**: La solución integra nativamente herramientas FinOps como OpenCost para un seguimiento preciso del consumo. El modelo económico es transparente, basado en los recursos IaaS consumidos, y el uso de componentes open source reconocidos (Cilium, Ceph, ArgoCD) facilita la integración en sus ecosistemas existentes. +- **Soberanía y Reversibilidad** : La solución se basa en estándares de código abierto (Kubernetes CNCF) para evitar cualquier dependencia tecnológica y garantizar la portabilidad de sus aplicaciones. La herramienta de copia de seguridad Veeam Kasten, incluida en el producto, está especialmente diseñada para facilitar las migraciones de una nube a otra. +- **Seguridad "Zero-Trust" y Gobernanza** : La arquitectura se basa en Talos OS, un sistema operativo inmutable sin acceso directo (ni shell, ni SSH), lo que reduce drásticamente la superficie de ataque. Este enfoque se complementa con herramientas de gobernanza como Kyverno para la gestión de políticas y Capsule para la gestión granular de permisos, constituyendo una base sólida para una estrategia de seguridad "Zero-Trust". +- **Control de Costes e Integración** : La solución integra nativamente herramientas de FinOps como OpenCost para un seguimiento preciso del consumo. El modelo económico es transparente, basado en los recursos IaaS consumidos, y el uso de componentes de código abierto reconocidos (Cilium, Ceph, ArgoCD) facilita la integración en sus ecosistemas existentes. ### Una plataforma completa y lista para usar -La solución incluye nativamente una stack completa y coherente de herramientas open source de vanguardia para cubrir todas las necesidades del ciclo de vida de las aplicaciones: +La solución incluye nativamente una stack completa y coherente de herramientas open source de última generación para cubrir todas las necesidades del ciclo de vida de la aplicación: -- **Red y Seguridad**: Cilium, Hubble, MetalLB, Ingress Nginx, Kyverno, Capsule -- **Almacenamiento**: Rook-Ceph -- **Despliegue Continuo (GitOps)**: ArgoCD -- **Observabilidad**: Prometheus, Grafana, Loki -- **Respaldo y Migración**: Veeam Kasten -- **Gestión de Costes (FinOps)**: OpenCost +- **Red y Seguridad** : Cilium, Hubble, MetalLB, Ingress Nginx, Kyverno, Capsule +- **Almacenamiento** : Rook-Ceph +- **Despliegue Continuo (GitOps)** : ArgoCD +- **Observabilidad** : Prometheus, Grafana, Loki +- **Copia de seguridad y Migración** : Veeam Kasten +- **Gestión de Costos (FinOps)** : OpenCost --- ## Arquitecturas de Despliegue -Ofrecemos dos arquitecturas distintas para satisfacer sus necesidades, ya sea para entornos de desarrollo o de producción crítica. +Proponemos dos arquitecturas distintas para satisfacer sus necesidades, ya sea para entornos de desarrollo o de producción críticos. ### Arquitectura "Dev/Test" Ideal para entornos de POC, esta arquitectura compacta despliega todos los recursos dentro de una única zona de disponibilidad (AZ). -- **Casos de uso**: Desarrollo, pruebas, proof-of-concept (POC). -- **Puntos clave**: +- **Caso de uso** : Desarrollo, pruebas, proof-of-concept (POC). +- **Puntos clave** : - 1 nodo Control Plane. - - 3 nodos Workers (o más). - - El almacenamiento distribuido (Ceph) está co-localizado en los nodos workers. - - Sin SLA de alta disponibilidad. - - Sin restricciones de seguridad. + - 3 nodos Worker (o más). + - El almacenamiento distribuido (Ceph) está co-localizado en los nodos Worker. + - No cuenta con un SLA de alta disponibilidad. + - Sin restricciones de seguridad Arquitectura Mono-AZ ### Arquitectura de Producción (Multi-AZ) -Diseñada para producción y aplicaciones críticas, esta arquitectura distribuye los recursos en tres zonas de disponibilidad (AZ) para garantizar alta disponibilidad y máxima resiliencia, conforme a los requisitos de SecNumCloud. +Diseñada para producción y aplicaciones críticas, esta arquitectura distribuye los recursos en tres zonas de disponibilidad (AZ) para garantizar una alta disponibilidad y una resiliencia máxima, conforme a los requisitos SecNumCloud. -- **Casos de uso**: Aplicaciones de producción, servicios críticos, plataformas que requieren un SLA. -- **Puntos clave**: - - **Alta Disponibilidad**: 3 nodos Control Plane distribuidos en 3 AZs. - - **Almacenamiento Dedicado**: 3 nodos de almacenamiento dedicados y distribuidos para el rendimiento y la resiliencia. - - **Workers Distribuidos**: Al menos 3 nodos workers, uno por AZ. - - **Nodos Bare Metal (Opcional)**: Posible integración de nodos workers de tipo **"Bare Metal"** para necesidades de rendimiento específicas, en particular el **soporte de GPU**. - - **SLA del 99,90%**. +- **Caso de uso** : Aplicaciones de producción, servicios críticos, plataformas que requieren un SLA. +- **Puntos clave** : + - **Alta disponibilidad** : 3 nodos Control Plane distribuidos en 3 AZ. + - **Almacenamiento dedicado** : 3 nodos de almacenamiento dedicados y distribuidos para el rendimiento y la resiliencia. + - **Workers distribuidos** : Al menos 3 nodos workers, uno por AZ. + - **Nodos Bare Metal (Opcional)** : Posibilidad de integrar nodos workers de tipo **"Bare Metal"** para necesidades de rendimiento específicas, especialmente el **soporte de GPU**. + - **SLA del 99.90%**. -Arquitectura Multi-AZ +Architecture Multi-AZ --- @@ -83,14 +83,14 @@ Diseñada para producción y aplicaciones críticas, esta arquitectura distribuy La oferta incluye en detalle los siguientes componentes: -- CNI Cilium, con interfaz de observabilidad (Hubble) -- Ingresses internos y externos MetalLB y nginx +- CNI Cillium, con interfaz de observabilidad (Hubble) +- Ingress internos y externos MetalLB y nginx - Almacenamiento distribuido Rook-Ceph - Cert-Manager - ArgoCD -- Stack de Prometheus (Prometheus, Grafana, Loki) +- Stack Prometheus (Prometheus, Grafana, Loki) - Registro de contenedores Harbor -- Gestión de costes con OpenCost +- Gestión de costos con OpenCost - Políticas de seguridad avanzadas con Kyverno y Capsule -- Veeam Kasten (respaldo, automatizaciones entre entornos y reversibilidad) -- Autenticación SSO con un proveedor de identidad externo OIDC (Microsoft Entra, FranceConnect, Okta, AWS IAM, Google, Salesforce, ...) +- Veeam Kasten (copias de seguridad, automatizaciones entre entornos y reversibilidad) +- Autenticación SSO con un Proveedor de Identidad Externo OIDC (Microsoft Entra, FranceConnect, Okta, AWS IAM, Google, Salesforce, ...) \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/quickstart.md b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/quickstart.md index 40afa0c0..f6892987 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/quickstart.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/quickstart.md @@ -1,82 +1,86 @@ --- -title: Guía de Inicio Rápido +title: Guía de inicio --- -Bienvenido a la guía de inicio rápido de **Managed Kubernetes** de Cloud Temple. +Bienvenido a la guía de inicio de **Managed Kubernetes** Cloud Temple. -El objetivo de esta sección es orientarle hacia los recursos necesarios para familiarizarse con su clúster. +El objetivo de esta sección es orientarlo hacia los recursos necesarios para comenzar a utilizar su clúster. --- -## Antes de Comenzar +## Antes de comenzar -Para interactuar con su clúster, varios elementos son indispensables: +Para interactuar con su clúster, se requieren varios elementos: -1. **El archivo `kubeconfig`**: Este archivo, que le proporcionan los equipos de Cloud Temple en la entrega del servicio, contiene toda la información para conectarse de forma segura. -2. **La herramienta `kubectl`**: Es la interfaz de línea de comandos estándar para gestionar un clúster Kubernetes. -3. **La herramienta `kubelogin`** (si se utiliza OIDC): Si su clúster está configurado para autenticarse a través de un proveedor de identidad OIDC (como Entra ID/Azure AD), debe instalar la herramienta `kubelogin` para gestionar el flujo de autenticación. Siga la [guía de instalación de kubelogin](https://github.com/int128/kubelogin). +1. **El archivo `kubeconfig`** : Este archivo, que le proporcionan los equipos de Cloud Temple al provisionar el servicio, contiene toda la información necesaria para conectarse de forma segura. +2. **La herramienta `kubectl`** : Es la interfaz de línea de comandos estándar para administrar un clúster de Kubernetes. +3. **La herramienta `kubelogin`** (si se utiliza OIDC) : Si su clúster está configurado para autenticarse mediante un proveedor de identidad OIDC (como Entra ID/Azure AD), debe instalar la herramienta `kubelogin` para gestionar el flujo de autenticación. Siga la [guía de instalación de kubelogin](https://github.com/int128/kubelogin). -:::info[Herramientas gráficas recomendadas:] -Para una experiencia más visual y una gestión simplificada de sus recursos, le recomendamos el uso de **Lens**. Es una herramienta potente para Kubernetes que le permite explorar su clúster, gestionar sus aplicaciones y visualizar su estado de forma gráfica. -Algunos de nuestros tutoriales utilizarán Lens para ilustrar las operaciones. Puede descargarlo aquí: [https://k8slens.dev/](https://k8slens.dev/). +:::info[Herramientas gráficas recomendadas: +] +Para una experiencia más visual y una gestión simplificada de sus recursos, recomendamos el uso de **Lens**. Es una herramienta potente para Kubernetes que le permite explorar su clúster, administrar sus aplicaciones y visualizar su estado de forma gráfica. +Algunos de nuestros tutoriales utilizarán Lens para ilustrar las operaciones. Puede descargarlo aquí : [https://k8slens.dev/](https://k8slens.dev/). ::: --- -## Acceder a su Clúster Kubernetes Gestionado +## Acceder a su clúster de Kubernetes administrado -Su clúster de producción se identifica mediante un código de 5 letras (6 letras en Dev/Test). Este código se utiliza para construir las URLs de las distintas interfaces. En los tutoriales, utilizaremos **"ctodev"**. +Su clúster de producción está identificado por un código de 5 letras (6 letras en Dev/Test). Este código se utiliza para construir las URL de las diferentes interfaces. En los tutoriales, utilizaremos **"ctodev"**. -Las URLs son: +Las URL son: - API de Kubernetes (utilizada en kubeconfig): - - **identificador**.mk.ms-cloud-temple.com:6443 (por lo tanto, en nuestro ejemplo: [https://ctodev.mk.ms-cloud-temple.com:6443](https://ctodev.mk.ms-cloud-temple.com:6443) ) - -- URLs públicas: - - k10.external-secured.**identificador**.mk.ms-cloud-temple.com - - grafana.external-secured.**identificador**.mk.ms-cloud-temple.com - - harbor.external-secured.**identificador**.mk.ms-cloud-temple.com - - opencost.external-secured.**identificador**.mk.ms-cloud-temple.com - - opencost-mcp.external-secured.**identificador**.mk.ms-cloud-temple.com - -:::info[URLs seguras] -Las URLs anteriores solo son accesibles desde IPs públicas conocidas, configuradas en el firewall de la solución. Si desea añadir una IP pública, debe realizar una solicitud de soporte. + - **identifiant**.mk.ms-cloud-temple.com:6443 (por lo tanto, en nuestro ejemplo: [https://ctodev.mk.ms-cloud-temple.com:6443](https://ctodev.mk.ms-cloud-temple.com:6443) ) + +- URL públicas : + - k10.external-secured.**identifiant**.mk.ms-cloud-temple.com + - grafana.external-secured.**identifiant**.mk.ms-cloud-temple.com + - harbor.external-secured.**identifiant**.mk.ms-cloud-temple.com + - opencost.external-secured.**identifiant**.mk.ms-cloud-temple.com + - opencost-mcp.external-secured.**identifiant**.mk.ms-cloud-temple.com + +:::info[URL seguras +] +Las URL anteriores solo son accesibles desde direcciones IP públicas conocidas, configuradas en el firewall de la solución. Si desea agregar una IP pública, debe realizar una solicitud de soporte. ::: -- URLs internas: - - ceph.internal.**identificador**.mk.ms-cloud-temple.com - - argocd.internal.**identificador**.mk.ms-cloud-temple.com - - hubble.internal.**identificador**.mk.ms-cloud-temple.com +- URL internas : + - ceph.internal.**identifiant**.mk.ms-cloud-temple.com + - argocd.internal.**identifiant**.mk.ms-cloud-temple.com + - hubble.internal.**identifiant**.mk.ms-cloud-temple.com -:::info[URLs internas] -Las URLs anteriores no están expuestas en Internet. Solo son accesibles en la red interna de Managed Kubernetes. +:::info[URL internas +] +Las URL anteriores no están expuestas en Internet. Solo son accesibles en la red interna de Kubernetes administrado. ::: --- -## Sus Permisos +## Sus permisos -:::warning[Dev/Test] -Para los clústeres Managed Kubernetes **"Dev/Test"**, la cuenta de servicio que se le ha proporcionado tiene todos los permisos sobre el clúster completo (ClusterAdmin) +:::warning[Dev/Test +] +Para los clústeres Kubernetes gestionados **"Dev/Test"**, la cuenta de servicio proporcionada dispone de todos los permisos en todo el clúster (ClusterAdmin) ::: -En los clústeres de **"Producción"**, sus permisos son limitados. Dispone de un derecho de **"Visor Extendido"** sobre los recursos del clúster. Este derecho otorga acceso de solo lectura a recursos clave, tanto a nivel del clúster como para el diagnóstico: +En los clústeres **"Production"**, sus permisos están limitados. Dispone de un derecho **"Visualizador Extendido"** sobre los recursos del clúster. Este derecho otorga acceso de solo lectura a recursos clave, tanto a nivel del clúster como para diagnóstico: -- Namespaces: permiten a los tenants listar los espacios de nombres para herramientas y dashboards. -- Pods, deployments, replicaset...: permiten a los tenants listar los recursos desplegados en el clúster. -- Nodes: ofrecen visibilidad sobre la capacidad, los taints y las labels de los nodos para comprender el comportamiento del planificador. -- StorageClasses, PVs, PVCs, VolumeAttachments y CSIDrivers: permiten a los tenants identificar las clases de almacenamiento disponibles y resolver problemas de enlace entre PVC y PV o errores relacionados con los controladores CSI. -- IngressClasses: informan a los usuarios sobre los controladores de ingress disponibles para el enrutamiento de aplicaciones. -- NetworkPolicies, ResourceQuotas, LimitRanges y Events: esenciales para diagnosticar restricciones de red, fallos de planificación o violaciones de cuotas de recursos. +- Namespaces : permiten a los inquilinos listar los espacios de nombres para herramientas y paneles. +- Pods, deployments, replicaset... : permiten a los inquilinos listar los recursos desplegados en el clúster. +- Nodes : ofrecen visibilidad sobre la capacidad, los taints y las etiquetas de los nodos para comprender el comportamiento del planificador. +- StorageClasses, PVs, PVCs, VolumeAttachments y CSIDrivers : permiten a los inquilinos identificar las clases de almacenamiento disponibles y resolver problemas de vinculación entre PVC y PV o errores relacionados con controladores CSI. +- IngressClasses : informan a los usuarios sobre los controladores de ingress disponibles para el enrutamiento de aplicaciones. +- NetworkPolicies, ResourceQuotas, LimitRanges y Events : esenciales para diagnosticar restricciones de red, fallos de planificación o violaciones de cuotas de recursos. -La cuenta de servicio que se le ha confiado también ha sido designada **propietaria de un primer *tenant* de Capsule**. -Puede crear Namespaces, que quedarán asociados a su tenant de Capsule. -Las cuentas externas (OIDC) son miembros de este mismo tenant de Capsule, lo que les permite interactuar libremente dentro de los **namespaces** asociados al tenant. (Ver el tutorial "Gestionar los permisos con Capsule") +La cuenta de servicio que se le ha asignado también se ha convertido en **propietaria de un primer *tenant* Capsule**. +Puede crear Namespaces, que se vincularán a su tenant Capsule. +Las cuentas externas (OIDC) son miembros de este mismo tenant Capsule, lo que les permite interactuar libremente dentro de los **namespaces** asociados al tenant. (Ver el tutorial "Gestionar los permisos con Capsule") Algunas acciones no están permitidas: -- listar / crear tenants de Capsule -- crear CRDs: Si necesita desplegar una aplicación con CRDs (por ejemplo, un chart de Helm de un operador), deberá interactuar con el soporte para que estas CRDs sean importadas (mediante la extracción de los yamls del chart de Helm). Luego podrá desplegar su chart de Helm con la opción --skip-crds. Ver: [Documentación de Helm 3](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/) +- listar / crear tenants Capsule +- crear CRD: Si necesita desplegar una aplicación con CRD (por ejemplo, un helm chart de un operador), deberá interactuar con el soporte para que estas CRD se importen (mediante la extracción de los yaml desde el helm chart). Posteriormente, podrá desplegar su helm chart con la opción --skip-crds. Ver: [Documentation Helm 3](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/) --- @@ -84,7 +88,7 @@ Algunas acciones no están permitidas:
-

Tutorial: Desplegar su Primera Aplicación

+

Tutorial: Desplegar su primera aplicación

@@ -99,7 +103,7 @@ Algunas acciones no están permitidas:

-

Tutorial: Comprender la Red

+

Tutorial: Comprender la red

@@ -114,7 +118,7 @@ Algunas acciones no están permitidas:

-

Tutorial: Gestionar los Permisos con Capsule

+

Tutorial: Gestionar los permisos con Capsule

@@ -126,4 +130,4 @@ Algunas acciones no están permitidas:

-
+
\ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/firstdeploy.md b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/firstdeploy.md index e27024e2..8b9ee0a5 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/firstdeploy.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/firstdeploy.md @@ -1,19 +1,19 @@ --- -title: Tutorial - Desplegar su primera aplicación +title: Tutorial - Desplegar tu primera aplicación --- ## Objetivos -Este tutorial le guía paso a paso en su primer despliegue en un clúster de **Managed Kubernetes**. Al final de esta guía, habrá: +Este tutorial le guía paso a paso para realizar su primer despliegue en un clúster de **Managed Kubernetes**. Al finalizar esta guía, habrá: - Desplegado una aplicación web sencilla. -- Expuesto esa aplicación dentro del clúster mediante un Service. -- Hecho la aplicación accesible desde Internet a través de un Ingress. +- Expuesto esta aplicación dentro del clúster mediante un Service. +- Hecho accesible la aplicación desde Internet mediante un Ingress. ## Requisitos previos - Ha configurado su acceso al clúster como se describe en la [guía de inicio rápido](../quickstart.md). -- Dispone de un namespace sobre el que tiene derechos de despliegue. En este tutorial, utilizaremos un namespace llamado `hello-world`. +- Dispone de un namespace en el que tiene permisos de despliegue. En este tutorial, utilizaremos un namespace llamado `hello-world`. ## Paso 1: Crear un namespace @@ -25,7 +25,7 @@ kubectl create namespace hello-world ## Paso 2: Desplegar una aplicación "Hello World" -Desplegaremos una aplicación de demostración que muestra una página web sencilla. +Desplegaremos una aplicación de demostración que muestra una página web simple. 1. Cree un archivo llamado `deployment.yaml` con el siguiente contenido: @@ -64,22 +64,22 @@ Desplegaremos una aplicación de demostración que muestra una página web senci ```bash kubectl get deployment -n hello-world - # Debería ver su despliegue con 2/2 réplicas listas. + # Vous devriez voir votre déploiement avec 2/2 replicas prêts. NAME READY UP-TO-DATE AVAILABLE AGE hello-world-deployment 2/2 2 2 102s kubectl get pods -n hello-world - # Debería ver dos pods con el estado "Running". + # Vous devriez voir deux pods avec le statut "Running". NAME READY STATUS RESTARTS AGE hello-world-deployment-669dfbd799-294zz 1/1 Running 0 2m21s hello-world-deployment-669dfbd799-plcbg 1/1 Running 0 2m21s ``` -## Paso 3: Exponer la aplicación dentro del clúster (Service) +## Paso 3: Exponer la aplicación en el clúster (Servicio) -Para permitir que los diferentes componentes del clúster se comuniquen con nuestra aplicación, debemos crear un **Service**. +Para permitir que los distintos componentes del clúster se comuniquen con nuestra aplicación, debemos crear un **Servicio**. -1. Cree un archivo llamado `service.yaml`: +1. Cree un archivo llamado `service.yaml` : ```yaml apiVersion: v1 @@ -97,19 +97,19 @@ Para permitir que los diferentes componentes del clúster se comuniquen con nues type: ClusterIP ``` -2. Aplique el manifiesto: +2. Aplique el manifiesto : ```bash kubectl apply -f service.yaml ``` - Su aplicación ahora es accesible mediante el nombre `hello-world-service.hello-world` desde cualquier otro pod del clúster. + Su aplicación es ahora accesible mediante el nombre `hello-world-service.hello-world` desde cualquier otro pod del clúster. -## Paso 4: Hacer la aplicación accesible desde Internet (Ingress) +## Paso 4: Hacer que la aplicación sea accesible desde Internet (Ingress) -Para exponer nuestro servicio en Internet, utilizaremos un recurso **Ingress**. La oferta de Managed Kubernetes proporciona varios `ingressClassName` preconfigurados. Utilizaremos `nginx-external` para la exposición pública. +Para exponer nuestro servicio en Internet, utilizaremos un recurso **Ingress**. La oferta Managed Kubernetes proporciona varios `ingressClassName` preconfigurados. Utilizaremos `nginx-external` para una exposición pública. -1. Cree un archivo `ingress.yaml`. **Recuerde reemplazar `su-cluster-id`** por el identificador de su clúster (p. ej. `ctodev`). +1. Crea un archivo `ingress.yaml`. **Recuerda reemplazar `votre-cluster-id`** por el identificador de tu clúster (ej: `ctodev`). ```yaml apiVersion: networking.k8s.io/v1 @@ -120,7 +120,7 @@ Para exponer nuestro servicio en Internet, utilizaremos un recurso **Ingress**. spec: ingressClassName: nginx-external rules: - - host: "hello-world.external.su-cluster-id.mk.ms-cloud-temple.com" # cámbiame + - host: "hello-world.external.votre-cluster-id.mk.ms-cloud-temple.com" # changez moi http: paths: - path: / @@ -132,7 +132,7 @@ Para exponer nuestro servicio en Internet, utilizaremos un recurso **Ingress**. number: 80 ``` -2. Aplique el manifiesto: +2. Aplica el manifiesto : ```bash kubectl apply -f ingress.yaml @@ -140,11 +140,11 @@ Para exponer nuestro servicio en Internet, utilizaremos un recurso **Ingress**. ## Paso 5: Verificar el acceso -Una entrada DNS comodín ya apunta todas las URLs que terminan en ".external.su-cluster-id.mk.ms-cloud-temple.com" a la IP del ingress "external". -Las aplicaciones publicadas en este sufijo DNS son por lo tanto directamente accesibles. +Una entrada DNS "*" ya apunta todas las URL que terminan en ".external.votre-cluster-id.mk.ms-cloud-temple.com" a la IP del ingress "external". +las aplicaciones publicadas en este sufijo DNS son por lo tanto directamente accesibles. ```bash -curl http://hello-world.external.su-cluster-id.mk.ms-cloud-temple.com +curl http://hello-world.external.votre-cluster-id.mk.ms-cloud-temple.com ``` Debería recibir una respuesta del servidor NGINX de demostración. @@ -168,20 +168,21 @@ RawContent : HTTP/1.1 200 OK Server: ng... ``` -:::warning[Para ir más lejos: seguridad en producción] -Este tutorial le ha mostrado los conceptos básicos del despliegue. Para un entorno de producción, es fundamental aplicar medidas de seguridad adicionales: +:::warning[Para ir más allá: la seguridad en producción +] +Este tutorial le ha mostrado las bases del despliegue. Para un entorno de producción, es crucial aplicar medidas de seguridad adicionales: -- **Utilice imágenes seguras**: Prefiera imágenes de su registro corporativo seguro como **Harbor** en lugar de imágenes públicas. -- **Controle los flujos de red**: Implemente `NetworkPolicies` para restringir las comunicaciones a los únicos flujos necesarios entre sus aplicaciones. -- **Aplique políticas de gobernanza**: Utilice herramientas como **Kyverno** para imponer reglas de seguridad (p. ej. prohibir contenedores "root", exigir `requests` y `limits` de recursos, etc.). +- **Utilice imágenes seguras** : Priorice imágenes provenientes de su registro de empresa seguro como **Harbor** en lugar de imágenes públicas. +- **Controle los flujos de red** : Implemente `NetworkPolicies` para restringir las comunicaciones únicamente a los flujos necesarios entre sus aplicaciones. +- **Aplique políticas de gobernanza** : Utilice herramientas como **Kyverno** para imponer reglas de seguridad (ej: prohibir contenedores "root", exigir `requests` y `limits` de recursos, etc.). ::: ## Limpieza -Para eliminar todos los recursos que creó durante este tutorial, puede simplemente eliminar el namespace: +Para eliminar todos los recursos que ha creado durante este tutorial, simplemente puede eliminar el espacio de nombres: ```bash kubectl delete namespace hello-world ``` -¡Enhorabuena, ha desplegado y expuesto su primera aplicación en Managed Kubernetes! +¡Enhorabuena, ha desplegado y expuesto su primera aplicación en Managed Kubernetes! \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/argocdguestbook.png b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/argocdguestbook.png deleted file mode 100644 index 1ebb7ab01b50dfc30c9cd5a7341ad5b822640771..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150815 zcmafabzGgxk|6HxP6)x>-95qG-QC?GxCVC%?(PtRh2ZY)9PHrEp1gT8d+&X-zx{*5 z*H&Fs-CbSQk&5zC$Or@oU|?X#GScG8U|_I=U|HqTwKI~9t3K|e@rK;(wDJRQo;$X*UWa?mS z#^`D12Nm+FI+sQ{G*ha9tW=h7ECNWJUmRytW2z|44@tiE?)MoMxG4zF693PAa3Sj z;%w#UYUN=6;SWF~V+S`^fsbx(R;Ik>M&=yGrluSW#zt(W3@j|BMhr%#Y%C0>Y;2}n z94y?d<}Ah^|2@5{mHGdj-`?flYydHY=}!w23nTL%l>dD5DmYu2fw1^9r63FczuNy+ z$ItW!k-s1&_+K?3T0vj`!0pcBfaylXy*c*n7xQME!{^`1hr>ff1 z58y@4w+xw!SXEJJQTT3YSSy6!rA|O$jorMPTlDJMW`&O1x}M%*Frb5TKt8eXW`hs@ z6WWJvswCFex3_c|R(uTU4{cEwhhFE9E)(q@=h-^u&YLR9VPP=y_N|T2KgiS_R)!YV zpSfMx^UR~6$p#iHIW0;ZzM+Z2k%j){rx3ED!nk#{e%W^E%pFTYq;$4m-dYK(xH(%{ zRky0=dITf)b-1#uV#S_ZG@>>QYVhk{2LFM@Eo9z^UpXI@mq*H*gAywV8OXX5Wiwwi zjOaUxNcIN%iJI}R^MQs8Ji74a%q=b!%^pu3yHZC5OG51Y11nIG5n8(%r&>LF-F|rA z8GP%U>7QUgP<0`KLqe3Wpi5^XD=ILsaQ_2}lhrif_J41fId*N+Wz3c@{ZEoWfVFSD z1u80n$7ud@)*a=dd25|_CK0Ew9IQ?a9LE32oWua0WXGgujaJr+k0XgIK;`cRzCCjhL_kWv7kqbn0x$C z$Sd2Tl^spcmD6LLC5NW_bkAO|Z__|`1l|UW&Ho*yml!u+7uL1&7qgswtiM-*Z2?l6s6oV}Ed?EfK{tq<5evI$BiKF0l5JDglV!(uI z@4>0fr=>czN(Zh3J$gpRwsTfB9jkJAJ3l*W(t5}e2)`Q&-SotV=xmUG%Gr#&5Nnb_ zP1owQCeKS{pWeEnxkyal2$O>0dvrb)TtFXwWrImrzIuz(M!DEH_6k6@vU+WI)1-xe z+ZpiIDt^PUZ!;Xp?N47TQ?|9a~s(vY{583Pv zCiGNH!R92)3n>=!V5Kdn%R=hk72bTCx?nOz8LU$pR__3yaVE4~@@oWVX7M`_Hy?yW z%MbcZPWUjo@wu?E6!_W`6nfGfg>$xtn}sk<6~D9H$I=$(u*2j-$Ku}bzQrTh*>XKJ z&1-!|+h;_x#%u&8CWd^zd%k~pm(t}lcKX;we8iDZI!v(KwgUz@p=bB`MsBi;mpGR- z;#UZFJzEGS#lKo{Y^W0=C4YFggt4KMGujh(LP7miss!}|-LJq2t_yw{McoL8{9J^n z3$4arBMLHKuU*TMruPG0Aqk(O-i}D2O~F*UcsnXz8%(B&i~$C+9_Y^BzZ1!!H4EAB zFu*-q9^-kE+HSjAmm7&tsGj3;KJf|Qcb~7NXf{7MnZG{5`CYsb)~-*N-bP~whK;`* zv{-1_=lr@R6`0Tr*ffBAN95S6Sq^W%#|xu+7TJbf^BUFpB-EL{83*Xge<YH#)f>h2=OkC z!|#aAb&Fv53|s3oTBH5h_waGnsFI7{L_fU z$D5;;M@8!eR27yn#dUZ+M@Q$mtxE33D^%FzUco>sF9tQ~f8k9ci~4a1Fzr1UhKm0< zNP|EGe7TQY)+NM_h;+v3x?vIGvoD$Pxlv=XGC8R8PEEmm>j+xRq4B-zABjP{m)i7A zr!vs)|1u~y2Y7)~KV#=s)fFl4a=XCR#U%}taY-i?Y7ASX&4k0}3_-qbkcM{+X!yy2 zh~Ha*cDA+b%Rv{r7kEdujImAeH0$na+bA<3%TQUyCJ>t z#++6?zaU?tg}hUGzc!}8CJHw@e>DLhz0{N^cEeBNaWvsP?(?^kKxH5|F=Ctm*SOrT z5g1VZ$SO>urgS*x? zTZct#v(w=Cs(umcdCV4;z542PRy^LNz9HW2;IE4FC4l*BdE%R`R#V`ryL(slvdiK1 z=RDnWFBd8Ub*+i2v^siq0rreYba27Ltw$U9D32*yVK`v*0llFJ{C7(_EywRkC2F`I z{XWgN8b}Kh<;R(Y#{ttY6s=YdxF|lvE$Z&*!AFSUkK!H*kJ*y+QdIj16Mb+*>h&~* z`n;=+STW@)y2eO6l5u%c9M*4HvS$Jy$7e}^*} zY_P7di>Qz<_zo9tPL+_41N?!@lg!cdmFRG+GrU1aFzD$grlvoC)H2!S@=S9TGgs@~ z(-|+JjgY}`<)GXR0Y`M#CcpIZ1!?Kixj)j(B5*XthuXHzTL6*ipx1}CtdXbBJ+t+m zQ^`Up$nrqQlN5Wh{oZEWtYF}|Pwo1=WUjH+i_0`&kMOcMRpP?lP^3I1Qe#7WuTwtP5V+^Kqr-`rI#^*K5IEks;m?*;E`W!2PYKc@7&)Y(9!hEAD2{`= zG#tkOqgCJ11P%Ju3GZCa!s#M(+JXxzooQ~@S~Y6*`}P5M*AGKU9XjPAe3vL~5cE)-wZVrbaZtP5Y zYz)NJpR;P55M^7(O4g2kaTW4RH>^uzdwIk>}n&P$HeDy@QV&VcfIJJ6ddVaX&|=1 zx6!xtihq7s?(`{lcm+=V3YyH_&n2`s*|=?Wx_7amKFNp1n_yKJbP-xyyTckCoxc|3 z{EHZda~f&ft9uEJ9ond9gS^2yx)k_o7HnAD_wkLzKLQI^>^+|rK zpyw@AX()9Tg*T=-FLs~VfzkJH7D z4*4wCiwax~lWVRA3F~^>X}_vH^d~~5-}Y?RMh;32P{L$|0v^NVUDk}Z`kY1vvaB_o z%QC!2y%y2F9+;mpew~(Kc>t`(A_PAp?e+B?zkHC4mqT0^I3=Eua9mH|7M0~~!AY4i z6{=l%)s_ZbqF0lizt0QO#yF*S$pC}m=G7Ut3fQ#VO4v$e5biGS4=#t{ct$#i!u zZz%)<5KA8N;^i?)nM-H=jPy=lwR-@s!p+jmWnvQtobsomRo~ES&4ccH{dHe;e=)wQ zHTCq^S<|o((>onFa>T(tqIJw-86+R(as2I|ng4l8r^+2^C-vFE*m<5;kXK(!EeTnb zFQu3RYq8lkW2sK9xm)mZ$B+L`odeP#W73Zea`|>~*vmZ@JH=PuYfo#VoOCED;GIDM z$$DqqKwzYowxNCh?bwtS0a$bh>@Pp2&eeQ7=-!v@xVE<^HnKP~$lG&xR#UaL^#|?s zHzf{8`;5u{))J-56{a>95t0go!RXw*+`~Hz?pJqz&wJNkF8*PT_txMicfBdX<*V@U z$6H!~MgCVpbMaBdlfQ1<>5Qnec6yrzC$D#mW?LVtXOZg!D247 zDr!NOkk&dQw~97ZNHWQ<3p5R#6@_79D7Xvh(oaWCO#(9U2SMTIMJMfiULSZPz!XkW zi64pVI2~_)jJDYuqJa-S(pS_e1@uhLMbnLVaLdHRQz;&z{OTNJW7m&YG8oMj#Z6s! zuw@q_z?Kv@K~b=$FY3}`y0D-6&cZv5nxs9L>s+c~0s(vA&1Tl@mh7EM8D0qx3D6L{ zIIS#RNdBRQ+3?_BM(T5azWu%Uu?ups=$Qh;X6kZd_~LR)1D0FUVYpz(X}wG9Ww(R{ z36=Fu)8X`ql8`Yix+y~OrOD1ByLm)bLQf}WPE)t7i*C@YsG+BaqqnIgNYaAqq&f>^ zh7J^eXHCPk5lt6jhI&zHBX++}A7%=Mm4XqC zUM|@ZIW&wA9x`SKO;k>>wcurzzf|)2=|Mlei9mE#>dLq($AFl|vKxIPo8=n~x_1ov zu`W6k53*a}AOKNX%<>71bDUtp?vUk^k3_7`(M=7YKTss!c75#NAkJY?4Y1gNnUefn ze3Kr`Hfy1N2>@?HfiSZ3Q6{&`o0aWAs1G%aw(8ZI zfwLLhg#n84dm_QNp>(OYp$dh(-Ikb7VG0u;N#H({_U(-^U%uF;JLMg|2D~sYLURIv zQN&YCse{oVXvZ@CPPe9%2Cq=@2H4Ug&v|tj{DKC_sJn;P;g7Q!th*@wP8yWI!-{?N zPw+`dfB9X@kmwY!o*i4Xb4dK%#Gh{0PCZngmgeWWS)BFp#OOyx$Ri!=x4n&x;;J{h z5ENW*35jp5-rY`HXe^r$)$MilCcJ4v;`i?`6#C+RzO`$|_psRcZuS=B{TmW91HF6?$x*!)F@Tg=D}6UAb9cDO_W zYP(deys?5?hjbBe#N~w)KlJG0x=w(j&S`w^dF#SzDcmRPUyP^&I8VFY4d@bEQK`ka zpQ{`YxFvb_n3J{BAYXa(@?A14x(}qEk$X)~Iae^0Bcr1|W6w6gHu{x0ab@$&!m-qM zSeeRpxyXceUn_PF-a+A3pR-KyYK+7L9~hj~&=6q$9uYvecR%&N7#`M9Id} zgAZ08gj5_!UfhFkCqKs#q^@9T^BGP<9&emMCUD{R0WknRz#+p2?*@`X&w5=&dp5Lq zos(=Kf7p3~j0<#@D0Ap+P%tjfS$71NCsx%APY=?(^u#a`&@hfJvfOZt#=5L9&|_`9 z4j#w#`=dISP{TP~;wGd47QZ(7KSjz@*H z5TrsFrDpuv^V)cMZ7L}~1o60c&}w_iPN#8DWNkbmZD~dLH~&MS*w<$*MayCyjvN*k zA=!f0wt_V9UX$>Ls*MGIO-E}lKcKn2p98~UPisykMBJ6TH8_Ag(^am@5GRlO7O>o=E$$3un`D^q+XOe&z;MMLp=Z{O zb}tOlb^geBdy@Wf;1DAxXI;JLAq{ONWV!%z@Q0$*X-G_XHqNVyv#)cmKDN)Ci6JG8 zJ87tn4?*xR2IkBYQAzxlGZ6M0ilUMG{5sHJh9-bSm9FM{ZbTG~gwp84;^zZr8&NcH z{bBRVt;8;Oy)QYkI|fC&kwBCcs3BlwiT`^?Q9 zJHzFG1OS2Yl2?C9@)~!@w;&_Er>GcYX0WEL=zh`Bv{N2&i_61Gi>;1*=R4Em$NL4j zmn%~phy9weDh|x$YW*F1|Dub-*2N*^?j5a?^-B}~?k$srs>k$z*BwE|-fKT+B4HJd zLF68r4txm6Kwo(*cZUEV>Ib-AZSQ6+H3q+1kaPEAvyS!~#D2$iJsc}@(m(PAWS3t~ ztDs)D`srm%u7Yj7RchACn`j$DBn(Q>$zeW&{ zjhm+>9kjc4@i#Byrds%Y-iJx+Qs9)e_xlNSvef%vEG(eBE(N$;KuJ)wF{xSf2q15D zdMWpz@p@7s3h+ln$oO?Um(km^Ugud`Hyt54OwBFxeB+c||Ffoym7{E`!6Xzk4W##{S&I-J$$^20&% zf(~zaNy{{{_sV1T$)Q})d;ucdPrNi~MRU%e*RaBioH#bh%!33l0$JXZScF@cuaW@* zEp>{?5Bhks&zMUActPFI+qfjr3r9?SPGr8s3|n4OpK2!wMgeTvslYC*v%U5rJF)nS za@yOm_4OaYDsG{nQVAy`bj*v20I0ggeM=rGQBk~^Cm7-*;t`JVlrD{<_SyLZ$Mqe( zE)~>fPCo9O-1cEYO}!Zr_O_yJId3VK=;}}l6wdbhW#1SJgtN7^$}|TVQs|ekloK4NI1`Eok@zds*|);79>`W`b|M_@>&aMedGEWI-W)IW;%IEQ1&5Nn2~-YMqhE+MXQP%@HwVX_JRg`W>r* zjk&v?!LOy|6*e}}tuFhY5h|>yHD5SMQ!8W%*oZz3v6@hyYS#sF6wj*?8;sDA=1S(U zht;q2jb)eh3x1vk`bu%*ixP9U9iTvJsWB2|wfacV>aNuftkO4yE<`O1%Jfhk%~QRYBgL;GM)4uOx3i zYoa+c$pF~zo`O;i2Nq$N#U7VK6DD)o6GgS2*8FTpyf^LPn))`y1^cgnyT-B~pzgVm z)7~$WM>dDU16oDxG;8s*YU)+%M3P-^Q}X)sb|t(tAv}rxP`AQm4bB#V1{|w!fRtb3 z%M8OET#NUt7)!q2P+jai1%6%>8gF=B6F&*vG6vAGs$4v#hqb{y0h;j$v&vlCCwzLY zI16;S$YKYC=>oLc!+l-Yh{gSSSiH9!bFvDj^Esf6Bji4P@B@2FcC8`{nmZvI#G)D}po%4+GLMZVs7|4c#cm|!E+S_su|Q8qjWqB?A`pUfb#_7ouJ0J% zj#$qfX;MC~?J<3cr|fBpVAAd(12`YOZy@a8)a={au#?70Tfbf*)~7f=!j4AxI6#~H zM(W~hB6ZSVb(er{<6+Ehznf zGL9SkBR*!$b~of`Mn`j(U#;1@t3DC7T;E%BD3fm3aia-QJn4^UNTkDuZ}Qt7V&uyW z7SP*>8fbSL{;86;yB>a>yb+_1V-)A3@ed=Y*Lh}NmM;fa>7P#_Ijden6>{4X>ys`H zn-6PF_?b!Ekb6Ci(SB zNaY``8Wt>(Rttg(gQee(^J;b4&1)&@eK8`*GZZF^sm%2c)9G)y+(QPPnVbL5Ga1F}8|9kZjlIwt1#EVvF7|pL_LAaBd)~qe(($~vmrPaw*?SF|(n-4> z(LH=pOIuQucUPg)JR3e$Rx&r z6_Xs>`>LZOINaRjzv=3~FiNUo&uEin=Xtw(La;0B&&l{rT8{$t)dgKht3C3*NBehG zfUT)gbI!7g6dU^w@o=`t%qL)0IZ)iq&erAbRI|_I!gpYusaJF-OKQm^`XI$7EP=rE zCQ3l{YG^o@r$r~NxvJbjP>Sh7TYXP;+7Nl?&8B8+f5F6$fpm>M@bm*R;yqDGOZ#;- z7RmaM!p8F)z%LCbV#KXs8jfyTu?^%BJX}u6(rR;~Q|RqUm<46Sef6B!#;kQHT zJqIYrj*#g8s#n~`{;}EVLJ{8!(4!&+?ijJTG3d<^B0kPaeQ96p+z?zD1aEAHg}Ad& z1_j0R=GsCF=e@#Y6auH1t9UKdv$<2wd#fRi)Q~0BqVwj18VixWc%e@mz|6%Rz@qKw zl>7%C#MJ=jXkgzQC!Mm<;GAeHt zE_=u4Qi^T|e}Ux7UR^b||6zPdHCJ17$HPe9EQdA+?8xEky*&lRGU9Vg6*o;?SL~~n z|~fAt0H##1zk{Kv9bTc;6QW{cOzhH)pq%HLoCI z|CEqw^hUP84@nL%OD6gm>MH^#;_-J&u7BUSetQ{x1Z)cJ9zzf-@VkiVk2?4XkGMzC83_P;!2aCE7o|Gw@`A01Z;f&x<G%lnSuz|mKI`7a!#BSo;C*3dda;A=t}=J?UX5{B$R7F&9i)RTAB$v0h7I=Zqec{E=h=i?Z-I7 zfJ|&E_d&P5Zb)pbmc&z1bw< zo%B5J?}-!xt;-U~QFPi2VV9OjGFF-|ua-01K&}ULLX6PC^Zc$J@T|sH%S&Ep*|LX% z9mT%j;ATWS?3;=(FtzBGj<5rj;d-t)5mczP!D8_*J8d>?Jq91#o>LnPb=n<*9Acsg zv2b(BtEx+D3No5P@iyuI#v)NTAj3Qc)`jKAO~fM0DOjjo+`P3Fu{G06au)t%;Slt! z{vZ`Qz&LS5TYA33j=va(&@I!UMG32a1=Bvd9ghpU+l}(6#kx%APN9<14gz97T2|oD z7GF{QgZ=C`?hRrzSh&c@BiA@6;JTWUih`b!$bE;Q9?+KEZNBNeNi?JK0?=5T z5_gh7)++DzZTv@G!a(bi1SoA|+LBp($XI%Gpvq%=O4L@GnWawzYjHuz$lek;LgCtG zOa5I_@+&_4l$9gLTyQhK<3-%;iFk9TV;RC@6e%fhzvn8pNXUwlp)NRtuD2}mI6IL* zMA7tGM|CdqhayzW;kfSs-n?Xe;15}{a|;WV*3kXM&FeDW@6Eu`f>8_p#J#SpMY zL|mfLkE=T?WN!^}ZS-3=f}`OQ51RGEvUx9k_$VqC5f_!;RE6Q9g2{JBVz_$#N+jg9 z;xT*naC{qs#~Elx+~WuC^ojaSDAA)M zc`6_5V{s`c)#R`FDgzYzg;0YWFyukUkWQh{Dz){PwyfVU@MVeyMMd0@QA#lb>pLj@ zO)HE|Rhfsj9I;|?(u&bFyujPm#40NpvC{^R-*CBONo#q@y@v7QeCRA@3eiq(`kk)0 zQ+HI_vfVd7uH)csO{&dOvUv<)&G=9~n-@WpB7RwFazVZD>qsvA#=7|tY%H5S4p5sZ z|JnFs0hwK2D=6QI^*G7<;0=OENb6S#ai{0StXZ;}>Z7>d- zCN>eM@MxZkDpAzO^ogifUnad71uG{tealeR-&=lu&al1{a!!eW>K?x`N`8mQO;lmv7YVm=YGE{aQ7o!QJZkk@!He?}Z-`yVZlRV;XVu}a(1Rfm zke)AZ7cPLVWpSynXY-KKaBpcxG)T7D$mpm&MSGHiupxJ|nr>$TRR0T{8Rc)x1juJs zSMoW=w?k)0=V>FeLVlrb>C{Lty?5YFYYwLDcoC5?hI3OQa|??}NgjoIiA~Ak{`X1Y z8J^3IKl?>j_q`Aik)h`339>T%qJ5+Nd?0tggnW+lH$VMDR*(&NS=!oy z`L?TDadYIg0Dz2%jK;%_-@GS?{ ztAW=|i-{N-Fly?uvTR10;(~H`WCDnn*iQq4E%uOxeLkeXNv=(sv^zT-p>uEhlSB9j zNNzjL&RNc%>SHI93yymMbMnI8pe(DuOOk0e@21kWLTV@&Xv_twXx>=J@Is6ehmRjW z1pdriS^REle;ZDu%4rI=?wHloS(*-TPT_-vtF)#QUPrI#8>@+ zO5EoyRL5@Is^u5$IdDt-Yfqu35+ZDje5fcfJ)D2y9TRTJC}jUl;Mz zgexHH1GB_J-cOmwN=?SV$N3#{?O>+Z8?$gmGB&b1E|GT?9?jJT+9Va6xS7wIF z5GD==5^XjkqdDLl^5wXA(d#t__0jV9v-7n)8V-TDvuN$Y{S4p+)T8)&RUyaODqVC2 zn-Atr&iCoUSvM1wP>gCO^U3nN?$=(%85P~XN+1wRBXXxfmAhF^f-#hsy-)ip{NAe! z1CkQ?izjfL1ogb9=?tk0&PoKZ^#pwWo)GI5h(w&Ko!Gj>x3Bg>VQmoNG$`LVTHKF& zg2f;}hwS-b_u@TxWOI|N^UF{y!EdvEnAV<+_6xM$mwv=-ZndRMbtSFAQHSoyp|kUi z6|j&eGv>uvolXODQViolo$Hp1!CsOEN2r<*;jF?Ea^t`$A{VeH6K1<5xtV*?~zlFBlP}}e){F`|G!yJcd5|EI> zLawiOg35@2B9J?B(~j{bMpma|oUA(rBO|~CZ*%1NVFjIrJQruYEvSlHCJ#MdZ1_{g zvNWW$^AZ0R>ggF1cM&mmhmXf&5oyd8u&$@7J|VPeONg<)7=Y_1ZzWOu{1t*_IuQyQ zW~$eL6oX%2yqc5m8Rfun&VuCfyS|gSL}+u*1do64JYj1y-E3i7RknwqcJScrvjFSI z?BwtIp9Y38(6&(C=yHEN!A7S&SFIoHQqXa0sjfVAP}KR;P;Wf2M8|nT59z7dKJ5|f zdsjw}KEHPs%>K>G^JilS)Jg^KfHBltKu=j=-|#ZX=_m0JI)TXJX&C9d4+u^|^$jBPF7JgL`8MEr)5y<`kX8k<-B1ls{NMaA0kE>#gVrn;o(r4D zCh0M!UOAnRnJjFn_<^#>CqONK!?vWOWWi#b^Er;FxT2!t)-9hZ-`~p7**iqTP?vN# z8DP%J{i`+m?-y+-+D>QwaPZCsyX6!$!Ku8*mUeB0u7ZG2{n~r&emS5OvZBKs{@ZH!?6J68 z^LRIjA?uDZcyl#&;5=LS^YT*8-NJ{SS(j`^Vhp^$`WgOpT-)@L^VzqhvKRyV98H=^+yGg%{aDVI(4GxJwLUcgh z@n|yG^e2WMvS6vGR_XbVb>Q1797tBf)~$#F#W{pw)M0Mrr1Av8)RZ0$h2BR7WRg6A zgSh3@)e>n5!DK#A6)K1Nn>G2N!^T8x*q!SWVaSAdT>kv={8w=E^Ycf_&);|*nP0I9 z`>b_pk8@SE&W?#|gq=nC7bh~eb-vHvz?(!y!rjZAe=Gc^{F}B?+h8)CKX<9@m%EvE zx-8{+hZV`2q)F$^PJ=U6ZTqZAAvwN~wPq*lMoqgj!3aFCx>g~_%<{p3Yx9REyUDP{ zBM!ztMTG88MrB3a!Qzf7D-KIgL?SdStNtenfM)xy5@y2-wVO?1)k9AiD6DcGs4f&#JX1g6c`*v>}-W;4jlSgRVwfauI z_Ak*?%>GNnc(rskHh~}he%+FVw%u6$OIf3IPXpzpH`ZoGi+!zrlq$Do#k6MKc5N?n zXkkt_A1eK1D0>kTx4&06ZI-`5)j~>w_N%Q&3yL7t_iE&$EvHWBOAU2p zmGRA#Eyj*9I5R$S3_eRbd>XRFLq2#6zF;U{O;-O+q=}5e7yH(l_JTwv^;(OoC8YuJ zj&N27OWU2b23U}Y69$v(i`sUdcyt9^XvzA5 z&QsJhd)=r=8TBIjw=H|OzeIh0E$_EoZcY=Bi0#SPr2hYEf56nZW!f!A?t0#AC_JP# ztgoUk+-kbPMOA2lJ;%pm?{D`bzkUf<&KGJkEVy zs%3Ne@xe6oIFJWRdCc6DV>^c%xpFF+2<2aV+1WY&C|pHtW8J7=;BRk8W2d9oDno1+ zzsr$E&ZU$^*P!n|Z+5w$A`0n9R%^rqd#q?;NI9~z4#$l_th|{#nzbkXBg|iR$M2T{ zKDBaGdniMQ!QPpGw7jug&dAd$B#0NeEgpHEN2&+I5oh|;yCCm>C~u(MqP9h){QF0?TyS+s!&hUZM)7=n?PDmECgn&@0 z9_OYTtvl0<9a4`Ss`~Wv^-KXvQEd&-7_}L3{G$o%cct;z{ z7%L#`D~u7_VuR6Z=7QJgqz1^mQ5lXmKM7^A#DY%hix}AyR%yhpmh5k+T~N_h8hOd8 zl_;Heey}8&d^y85pG^N{x2P*8uE`AGyx1x~)W2H4!H2mW-O8jZ{g;XB2p0)tNlw*J zcCg=C0w&q6w1c27*(`3Hq!DS|rcPTcFN)Z4 zIePu(u-H|16+N9rdjVjtMx9Ide?FVp;nyS>dw9vI^R-$bpc2P<( z$d-3E-QcX67Olj7jp+y7|H?r<1g2`krb#$$sb_h!wR)`M7C2iII00Akp-ziu-gete zhnlpK%mQivfI|EXr?W zL`Ec-89#rLJKSa9O;A6rWV_UY=|gqxP8TI=p0`oPh}%AlsHm2bUItf4{t;v*vU6}L zscVUusd02CVR}8@_kLvkNE9gXMg5QNf6^%fCM!way;BH}fFvwZFkxF#_MIqt{zOOB zS8VR!^hWMKu9NKWf4$oq$Z<53e!Vjr~hMmc8#>7Djl&LNHUPDqkD)D`&Z??qw z;Ap&zQ4#AN?A#*jO-BtJw|c*|Q}$&DV_YzNx|Ny$OEkxyTLIUQhW5vPTOG-cK^hMm zlf|3dqG2na=lMR@QbXr8*<5K{Z%k>fCmLvv^dIkiUEJ8|R!Duq!Q52-&j&Mw7EMrt zKBn?O9L6kU8!Ivx+#_9tW;wa!`7EanT`)~m22Lz2WJ}k4%SjS6SdX4U=-3T`#Wpde zx-#O6mfkPnCFS@&ZqSSt!`%(NRuCaC8GesYAW1GQcQR;#x+c-vW7RVV77-tNu-)k} zZ0g7bS5{SZFfbyzY5dP?7mkddH;yrnYJPt}UE^zG1x7#`$$YV~2d~a`mKwATtV21a zdGK_vU!i0)LDGsKa$P0DI5ASzd8svX2bQhbSME##e!a2YM*_mkY3r4f?;gew3W6_? zlBmR?dHS1~xj89)q`AH^`t{S*R%*>|r$XOWpS1sBI)Qu`J_5YHyn&z)AR-ERz6VY! z7^Jz}Guc?cp~1vGQu9%AORE5OhRDU};m`W@wm8zj1jnY3QpXclGN(= z1{JqwnoF#v(e~zw%Bf3_RY@iehTH+Zvu4Gmz@P80*}pEQ7MePqVCZq^%+yjsp`eSV zMU8cJZTy|Icmf`VZERQSOF86xpGPi_|H-DCm}piIf+x<~WwnFat`JG%GJzVG1V5r+ zHZyv@INx0Z@5GpoC1pL{2zK3s3V&dY?kETWY2e)_nNJzmsi8Vtk4^w}so6iRtn4-3 zR=0lD`})7fYw+mlu4Lk15J}6rLM?0If1(;_MvTx<)wo_+CH*Y?PZJZ4Y@%S;C#rSo z=mxKFm*rE*^d4+1!9CGtd`3mvq^4ZLPOb$}{`C3Y9kv%cv_w*JvbdTXhgqq@RVUfD ztUSv73azg-@=mxMkXv=C5bbDY*TVk$u_?)2$7j_=iAQdO=z8)n$A9^$aOI>8^Bp+V zIGXo}_$GFk78|VB%{OhG;1hEH<5Ad6Ols~9F2f&Tc5~AN3qN zFK)SVKmfbs*bsHWu%Xbs4qfs4MWp*-eNXl#v*ocrht}5;@nCw0`=&xPVH8!aJELTF zxNcFczm@yL21p2Gj}FI~9wY;yV4w`yAC$E8LfQ)=?K5TgAwFw@}vydC?y znl;VVlbX*RSg3S~82wX-hFC)wY%%NiV^9DzOK$EigDN({`1mPp4F%6!-kXxhgVk#M zxxE_pMq}ues~EpX1&WjzPi*P6BRf|I*N1`DwMA^KS~f1nqa&xdJlevts^H8O@62j- z)%G~WKevLgrX_Q?ap6(UT=bit4oI8as4oni2!k7?!E{+;=}zlAgEf(7Q)o%c_(NGg^u(4_7k6j%)EIU!elN$cKdzf- zZ2W#4$HA@ya;WQxB{?j#s!Qh!DH-*Jg6w#6y@ZRCM?O$r zr+(O3rf!SLZgMZGr8XBPSmz#{TQ8d9%~lV9UpZ9>CeI^u^OiaBdr!B{MS*}{ zPScv$KJT$^Z%;SAkT2TnjL*I0>)`=zozbBn%E8|Dx2N}&+b;@cYY}}nfLTI0uJ@Av zu>*VT4SW=d6l#H__wai)pM+!yuqBG}kJv3;5j>yJ$||0F?E*i-|8$|t3^c||NF2&8$Bc-Lx*R{jiJq4<^17wKM!Ltw zI8qRG<(3S|b5L&udHd=gDsML*x6T4%*lRj``JJW{d$iVfY9^71evMp@V{9tFKHr&7 z%)tw|+eP9`?pRIeNb|-AvYMHqK1XOF1Y5<4j?++wp?-aRDX@(E)`n@-*_fD~q z9r?So|Gn*XW#5zXJrm@&%f~*{$gmVDsb;&U`H(n53yWAq$A+w6T&pXoO<7`NRj1yX zx%+$N=c=UMxqL%(qG`hu0giXxH9C&adO5C!U`cEbEzjby(XVn9}85Y-5y9en~8())lg$ zH3>J%(=aq1J%{wIGo5cWUV$N-NCP!_?C-}Aa~^ehx7x3}1fr(;M)uPLglD5lD7BqO zjpFn16ULUjvTNzpyG@D+YCch*gvVgr$rVx~Eb6m-t?!2|5QzT^<+cnWPSq@|Z#0`@ zxh2$wb3f_~h0KQtB2niGr)e}f5VUh(Vi&Fze^Z&4T4GPpEHx7#!7xxGpb%nlaMM`2 z@9?^$)JiELU{b{xT1pa>_l>J2a~j?mS{1PkPCE#* zFU(}NoY4e*Lg|hfg}tYsqaes>54|eMeVhaC)*R+$$gp4hE^4As0+N4h7s3xROU_(P zyO>(OyRf~*N}Wh{>c`7Yl#QwUmc(IEo_>*#C*WG^FaxdC;fEe`X>2YkIJBG{ij9cf=quRqU*zw6OlZw zpEAa@YtdU;>s&9p^n)a??0h|@EI#m(Wd}wP zcikNKu|eztO==HI{I!20R@Q|LBwErM?fX=6TUr?~7H*2y;3dntCg6-odA@g7V?i1k zU!DRoFf59?>JWZnM%>k!trjXQsjm7H9+La7-LB0|j-6IwGQ+kgA!K`je7M#2Zr zXeo8FjxN+O*6(V@4Zit-q0fZ#?kU>gh=*TujB=tT@q{;p2`Svp;oQY9z;6&ertpXq znC#F2LaRSgP1=(mO4&XPN{4tj*nnZ+aq&cN1vk@cHmCJ_(OQYIMK+U|2UtCmpwK{u zVJJ6dC0S$CKYd0ap&vj(XHoOnypenOEQ(rirYXCP;~&l)kgermcn zi!FuqP&b&_6=hyIDQotm{Y)ya{?7i5yr~W1+pmZQCu0qg;)3HCc^BtBLt=FJ0`|Ns z@A!!pkJMMb<2*@Gs@w1Qf^muH`&FJk6ohdkC4$aqLJ?BaY9`TIyBMkK%~WXCN0!SU9}J*TFysvski60sS#iCs}! zt1q#rw47@YgVebmaNAi_T>7x6oP&ZbubpjM*6j4-G=Ca%q^7xYNl($vW19~x7qP6N zT}MqbhmqivRvnkf&b6UnXlR-ec7ZYH^>7$XC?XOQHW5MCVMv~&?-B~~ww>^CFIq2K z5nNV0JS)FFh)qmS1d5=bqHF3E6EaN;)VfmD#xTkB5>s6np0?)6gPXA`zX;31{IiVDR@|z4UZ{ri3)sdgkR~GH zqMEGG-*OuF3}Inbn=$Hfsq`Cml}l}^F2U)egE5$&=EkIdGnE!>1>_pa{w)jpZ(qyZ z`PVjBx^jzDIDVQXDc7E}O|jR9Cf6SKVY=62DQLJYtDz-p8f>O*&KDN%OaFQ?Y`dES z@v!9L_`3a=m6ZEgcQ>0uLsf6--i`kMJb@k$*+JYnVl68%y8SnVF!SLbtnrZ-AT>(B z4YA4(Cs($N6*m6JsIt-m^^y+o;(z;yLV>QY)+&7#g|wBeNB-PfJdlm+$wmT z>_QXd9CjVPP}sm}D5t!lTdmp)`|ebv?BKGgtX^ct!mjxkzs;g-Zif-t431b%V^N4K z--|jT@cOM4F_|NU6cX~$nq1I5Cx_4P?6}$Ucr7Ine|co>J-N`T{R#h?=prStvpLhG zJn1~S#OMe99f`RaU9Yo9T`xy9inslN0Q;Rzz%DmG{#Fnk!)$r7!f9K#oI`6bG2;h5 zFpbKh_7&GmmCdAX%hjB&cjEN%BRl1xE%?LQZ||FON$G3XrXr$W_@r--VE$CZYpq^? zdKZ1*J0LIgYd%%=f4zooYt@YvElUCifD_wmgqwylMP5$6vbXj}vD^z`k+OJ~?%6?J z9yyKS#t(r-MW6Ir&r9Y*B;HgJMwk%EQ@kFcQ|MFIDpMLsz3%DNb9J^Dt!NY)Ku zNfe8qP<{3GHlZFR>K!c?nnIs!nPbYJPVeN@i@M_gLpGDn{v$yxQ$D-u>31wYHCrP1R9R3a|eZ=Q`^_fK)Vcxgs#&_4Sj{7)dw*9Lfl>30( zWL37y=wkimW%s()pYd-fj}5~j4-4)48E)p#xQ)j2Mcl{vu<>4#k)IVAI6)$}(>9FC zG>Zdap>pOU+do!BEE(pNsJ>dHI=r4t3TV8i7zAvl$Rj8`Za4~UgO)obqN9}r{Vnlt zic;7Xn%oC{p>7(C#NKdUX*YM6zNe2=w2(LU{CLvfXmuZFp2LiG&=2Buk)TMby>DwF zJY)*n+r*BX0x#iLWnr|YcjkI~LIQmjU+J>9LmgOe-JGAok2-zQQj^xyjR$|oL&O47 zc1O(C8eFHk-#01>JKj;;GLw#OEgzg!5+Hgu`6Gbfe_?3PODMHUk`GC0+F-@8{2%jM z+P-ZJd$c}oJA}`WCbrg!eIyz9<;a(+0Eb4X8c#xJKJ4SnhPKkH*JhFAga4-cc|1Uv zGH~G<%N!4LnGehv=K4-t-Y0vui2q-ncz}NI6nA)2sh$0qPRb*YT|IND=ojN#`?_L5 zHLIo!*xag0SG4MAV9&MXx0aBm>3(KZPGo%iV=By+vI{|0ynhnPv`Ld~M*zoyw-iJ$ zFG}%mG#T#o`avO`)w`VhC8@L2?3U&EF1H71#dq6b>fX);m<1;5#Q)tyP?X%3%(=$A zPxtLx{_hGSsx%t3XL*h7Yu9-U+cyIDP8`6~Y9TYu8tpGcOC@=Sktr0pD|9T-O zAy}2h{RZnfWd{KN``h*L^u2NOwFNl#=$P5|!r(~y3)73oi=M^pwf+}ZGiYS1_nVZ3CAaIqx7}4oRzJ`a z?yk}an}3=^bOhjb3ryx3=gv>6YT>vVY{e@}s9M&Twhn*NfI);pRUj_V!y|`HC16{C zu9Q@Ew2Oo{mfceAOZdiWp8n&Q4e#%Y4+tJWH{QkNa{1O!v^MtenAu2<_R3>Nz>_un zeR$Z+fZLYoblEdvd5Pc4@ zxbv$okWj#++ZO#tQT#!_`EvPL*mupg3=SzX%`EfZ*%a(dB;7Anh0bI3r<$u zo_pXjvf}^oAz~XQC>0|1J0u%wC8#gMgM<9hJoa5-F6S+w?8|WC--6A%NXl)2KyJ^K z&u>^mmq+QSmOao5|NPIL`xzn@YsteSN$>EibHk6QNPptAPSw)=6CHKfZ7$>ZpQ8pj znMnk3ar5E&U2@$J>zpZ(5AIJm->3y~(Uuaw9*f;pBOM%}`uyFqFqHXn;LL4J;h&ginD*4L-A*zQiiNT%z))qG@$w|bN^WA3(# zO2iI>>uqgzTU_oR!#|?Bi!A?H1BSfW1M6Uj40AFGsH9`e%qpz*J3?9 zr^*0|8H#jsMBOY3#<|C%)`!Q`9B3q^%>o^~RiqWyiKAzX`0 z<+Y%p-xs@qgP{UO#l=?bt(R&B>fMQ%NL*ytuNEj375}-5_FKE^xL zL#FlT1e9j)GEcUjn}@8c3EmThYe3hO(;EGM%QgAI#W^J`4TgO*En?qMD|-G7`I+(7 zWD7LuclP!Hjo*aC3q>IENWyH=0C)DTY@IfAgv$~_z_w?Xv$tYB8AFv-*z%AV9aY%TBEg?bm^tZEmRn;Z9u#n-7I$t zawxK=u0=~H6=f#wZa77!4|!;Ee6P-@$L~tRV7lCR{zYIfDV^7cD7%V>gx`~95yO9< zGJ=qJyV7*e{w7}M^PbYTZ|E34RU|~_bd2@kd5Zkh>5wm=5@4Nd_53|l2%d?VJF5`L zm>-=)@g<}651CTt*|x7d2_P<7TgIS&thzO@fakDn=P|ox$p!Z}z2~7oMBppwM;ne$ z{;vl4liW6}=m8>v?NlRZq#fG$kRrGq(Mlv}DM9en5I9gD$0Mu;+&JwT=~0 z(R~;HJXr@k^=Ygpoz)Rz@7h-FXWQ{EBQCe=%eS0hoTCN@9i`EgW1XJB!$Up>SuaP1 zMcrL(%98^AW)?;ZrpOgoJEng_Y>H;|L3PDE9y-|PACeX8=hYFD5>6%j$}jt!$oybd zuAv)%DTV7^cvlIg5H~p;(?*H&r{f#;R=Xi4#BFIw-7(VxvZ3ciSn1=Qb)XXNzcavSvvttnM~$|?& zgXO`>(!8clpRt}>(y=%$B+_Imxu4VWGNtcp-P$E4)j`xzG*jHFG9fqp2IhUvuloy| zS&D2(`5J(5DZ0>_Jc9oV%huKVgmFtpGjj&lI$NgC<&y>C;n8`K>D||fIv38Yg>{XN znVmn={tQ{m4zn;b7iZ>VMG7}#5$jytFtD%`GcgzEyix~=2mvM|CAfj>ByM_mr3 z;yl^w@^LwBekB3H?)domv!)M}|BqS%jCkLXq5chXf}2xK+C336$mMHWTA{jfygf%q z@FKJ}B6{#T@SfS*K@R7Ij5HMMZg>;bH}(C%mN*t88O6%va(ddVd!6Qzpt22Pd8bUa z#EFJOJ}ksyXtbK-SY*IYY+;j%NDssOY$Qou=4vG1#Fob48D9)IhfO-|X=_5^RlK%! zN$`39RarXEudmtQf{UWm*_QUqw>H~WyN0p9-EL{u))sGStP#OTBEDn?)z8$5CiV{p$EJp@(vxu1hBf7g@o`EYKlRdiI0w#RZERe&c{HBSCHe2sNfWgNDH2=4P(?+>mIzRv8P9Rf8S<<$iW_Fs%9?LwrKG^8<^QtMSnnP~p<-VmjTlzE zk*cTPEc@`gbmFdo^OFXFWJ=V2;}kMt$yoenGk|8NLW~vH7e4F=T$tFbxJM*n>4$MeVI|C&kLBdSL>%)5XxJ`y;C=#*MpQzld{J&l~dKiV|?U;jrg zpu}*%-X8=K0Qf{Msj^V@_zH`-{CMtf&pdp?SW2>SkEbf(WbXvUMsVx93c`{cg&D}o z)BTqn$C)|EfEU)o{4POM4V~u{6voxa*ub71iu3_^%{G z$KCggpL#c)RLykd`pMozL<&sGn*R8+Jhf~N=v&@;8x$To_ua*a%TLFfB3}-LeXlYd zkEZSh9q4y0*SF#+P_6pB?6bQ&_3RBF)Nxn8R}`M98+A|bP#Nzm7u#(I*fV^<2Fpi9j4_j0??9rJrzbsy{dTlkiX4O!x<1G~q?~VGg z?^Illm<|RP-(T05{c6E$%Z({zO}IGlCrf3~b2*g=51mSzgtlyTgozmPr!eM!oc7+Q zhd1?1`r0=|*5Md2Z--^W<*DEPnG?YKN#+jE4D9Kz4xYRBZA08_+KIUeHs2U!5zHHU z37H1riDyq%ARrtfcJ1GnBD*C(AoFzkz_BbVVhohCfQ3 zx)=(}L0b9KIf&RzRdZvDPkn<`CMhYG6Yh>;4D_yBSxMg8oDF#>yLgKF!H;RO%hJaY zf*WA?6+88kE)^k;1)L5#IFV5CHNHw!!N%Zr-kpA-Qi~s+I_VcO zuA82+tdV$lRTUIrA@BUEuS_a-T<$fi*!bpxhH`m}#_o#?j>&}eFm2JSYGjG(VwEm$&faP(X88azR^$WWeYF+YHC$Rsm6VOx%+ z0l%b(yXmez-rL;Q3=AQUOH`~=a`K3deXB6&uA;?~=(^tLt7skS^w$9}lBLCI>+uR^ zEN*rkZjA)Vh~`BTpxsvOC|7Da5M$+fp)FP&y=umTSwJJZx9ePQ%Y?_`^&bc9lB$=# zk8S#Z7oE>I0d=Q{VtCN4L~x$?&GFJO+(h?Cp_aT6R{3>_oG(($xlmaN;N9rK>TyiVyg==0GG-l%meYJ)NNbs6~4!j zE!c9oy?Tb=vm}+S`-%B-Cp6A=F6|hwFAfSVU#?5Zs)C^yNgIg9a;b>DJAV)%dNN0P z=uGPIT(_(J^7VI$wns(w?KjioKr3F9Bd?3zh*W!xkYJ@erFGtzL-*=@?C(|569R~> zN~ygI>!`kJsJdj)uxm4ot=#U4DoMTp$}0yyb1=|t|ECU!YF^K}MJ^*Fjl|$Q;7eVI zmUbInX1p?W)MeT(x3ZcKEXV796-=#q5w2AF3+EU zaee-{bAb^vXBz{eRtW&eXw65sG=75SHW2ry{xq|qW~F{$@fy;(idZzO;w!dJJhU2` zgR68{M{8$O3reI-(dpP30zZrXj6H+`7S;Eg5h^LCEDu2og0*lYh|eRdyGGCi2c3US zqOxL%mZIqp=adOuun8JK@yp%Jj}cj{9A-a)mnAL5sgBJnoas!w2>Q9YuvN)dPT1tJ z@`2ySE7_z4N%Wir$Z~?XqEvpbDjtO9c7k3BKsJ~BetsU;&%90_G7-j8;(KoJy7`=S_3zl*fnGXUm6S&;`Ex|{ zz`l{x<56?BIj=mp@P-9FD_VM zgH$kJS-Rh-WOU~lL9Ebay>QC8$~AQ6$kG~N#j3Aze%8<^#rp`>BlMq@zB|A=t#VF# zq{@Ah6KOd&;P?hnJz^lyIp$q7i|=l?xZCLGR%PG(Z2#kFB83Z@%{7;9asoH9Z?Ry) zK;;3q9@-dz-n2@n&mD8LZDcgGPY!gHxDrYlch`v$x?eVDt)HoUL~cMbUg}W(Roc9u zKa+5}$`>Uwcx@~A{kM)=45fNB_6f0!-dB?A<*4s7osqZXVxh1?}83ZBW+nx_sQx$%O9~91$rsXebH4#+Jm_NWb@ zC%>FWe7UX^W%3NGs2^`3d4u`(k2vI#zv>b>;7<(YLA|J>+RRyM%T#Q4**Oq7ZGGY8 zTS9;MC>4!wZgjmiU5dk*rv&*13f4?ZwYNFrdTO#sgd9t+PU5t{4=ugpj%b)gf5+vJ zbjjjQ%-Ap;7~{(FQ*Jm880{Jgq?-8w`saOmmLHRa5!?EX12;EkH69tl$TzKo@$nu| zhj61^J<+6*4R+iJdu+xfU=U?Ln(Jp_J7C}}~7F^G|KtI(0?5^Ork zlGH8Lbo9jWvUy#rD>C1q!N1ew*xNYop>}L^q>_$GzP9XZ%ELP6mG7Ut5XGd`5<|60MJ zhS-MEN=`JKF>Ry=;S`CT`^VT*$2+M7)lJe#FuvgBJUq*-iBD3urwY~$)Wq%9|M$x3 zDYNgz1eI7BhS^$$TFm&IYD;Dyo@V*p&M2Cep$Q{5ODcLmoj&yJA)H{bR(dC=;ij8y|ttdD#w$ zc81ELMf++{EWO=o9Wn?;6z`=SdyT88Te%jb+PXTobbiV0{k@8E&VaK+#5hj*LtIj_ zxMLE87UBM{l@GTD^D8-@2zX)yP6m*HRQ@WqV^`!C5?b5O80#d(<7yLAEJ=&_crpyC z)Co-ui|yOReLxTgwZ@CrgcsMe-LfG)Ccr!pD)LGx*MJmJ{>3BFeSR7RGl>zsHZSs95^8M>FP^d`f^I<@W zc0F6rYX2~Y;920FV2wzR9jr69y==qrQK+w(^LxqMTk-Nt0#d5ivq88nQbA`gT&E8Q z@O!MQFa|yUETrN4qMp4ErwcM8R0#U}QGF^>f0F5a9fTmX7_t@cK12MvldWXgy~jr} z<6^c?ZzxST25l?@@42zbkI**~^QJ^(dzNL`f7Li+d|xQMr=FNHFhU_Sfodp<&2q3) zSnY7J_3rJxo4aeK6J^=7ey@R>mYT-oNzj@EcNT`QDdU@co)h;nMZ5KGvY#DRsAe9# zY%v&VxK>59FGivT$~8`CM>pG!8)`_0=kIOVD>D9E8~1qzC-NuOeE$8X#m8F*s-KH{ zrQ(ys$JP)aG!n%5k?U2jPFH-?O=CbgJ>ZVB{!OuH;=XJ8Gp6GUlYnNrg%VDIS_NpB zz3z0FuDs0V^{;nyrXd~j_P(OlR&NNZ{^5!}-k;shX!6|$=^WYsj&3QO<~23lVHBam ztgFC*pIH|}_GrntRKg>$XCVlElqnxek!8D^FWhd{(Uut;c3kjU1$!Vb0P0Tl#&tg~ z-ZZ}{YISbac0Iknl0BS*T8tsdvsGLHCQJll?a$SyFdfu!w$|G>Q6(v5vV0;b6Kf2r zcPXkY5)RMAwBg_RzB>~m=!ohQ_gZh212bUS2TvLB@PUj!I$RJ)L64GJ^+V}>5+~kO=M5+|%0Es$`y)S|9oAMJcPe@&x!#?j&_|MC_mn?lTC=Ip7q=9_ER>b~V znNYR4%C@cESirt8WYZj4+4SohRotYD1o=E+6*SDbNI%26MQ6@yKBTr(apm-I5op7# zE4C(`i4gx=9h816WAwO=YGdnFT`L>dQR~IlA99cO)b| z*$oRSTS(55qaP)ax9c9f6I=HV)kz5DqPa*F80Cz8jZ(l2kgY7rnxonoK51U8eG!yg z#dSyH0!_KvC-cOn0CX%OvJCM?8ew8(tIIt9Lo?f2DR^h+Rdscx70|*O7kA*z{Y&!t zt4a5;+;=whe(N4VkrQWcW3s!xMPSnLu>^9q?$x(5$Gk%Tpumc9@Bx9MrZlz(_sc=VI?!O!jBt_=`jC7NnSC>r+tUc!^u zy1c#%vmY4BCe_yVYq9u(+5YBaVsE!~6|*^@6)@LS4=xz1Ud3P2s!F1^W6K+v(l`&Q zci3C2^&*_rs1RuXTf3u?{K=wjm$<4h$A7mP7i+?Y_`w4vRQOZkH$%SckLs{hKHN5z z>Z;5YskTKK_ryqP9weut3Yu~ZM$FSxtE`@_t;jX_NU*^7rIM=Lsj-Ay{yOy~!PWhY z$xM^>0s*uSZTi;M&2K5K7^BZVuh&Q^!hm1C$awX;*rNUUyPGnXl-(Pr{qrvqLmdNI z@VW1Xd$00Cjcy^21Zm9MSG7AO%La;kudjv;E`=Shl|?E z5efvo=C^C3bPyMlqr>+w7jcwGzrhD6PJwZue3HOVu`igj()ATNePHnQHbp@nRpL;b zSD_`c9NHh`R~m<`Exfk^3$Dy8EjZ5$ZKJPqFJHA}0$vQWq6mX~lo4YI~6K zn$}lcu|CtUZvLv;O5(`xG*PdQwYv0iveYK?4aZ-uB})_(4Lz6(5en6QyiM<&C7s+q zp+CNxN}JDWJY(`w&;j8<21hv8rI6kslln{X9L?5!23=Qq-0!3tZujnpNklq`esRi{ zHCj@GG@X*!CvpG0DoXRN@e~@qbu;(8_<#+2kM8!qWF0Z@@E*(SBmX??SKtA*%FmxM z=SAHCz(hd2N+Dm#y@{lakA4A`sDQJ8FG7fxW3P2Q;c{)S_>QIiQdn0-J1Xo|7rwVk zi`A1%^ALc9z~9fZ{aZbe@(Q~D57qloyfQmccWMrUv5QvAo3krEnvbtgSow1ETMw)L zs@7_#(I*Weoyo#jUf|B`s9{5R*Gb3JADr>p^2? z;%Bw!!r*2xDzk{NltO;Rucn$UZuGV5H$sO7o-+#RjBv5wepz!h;Zu}VJpQb{dP>C4 z;BO$zn9E2MtGQVgi%~l7CfJFJl6<(hQR~NN*fL%Yf1-WSf?XlExdpC@q`gz|)l#zC zS(l4~3eRIq;MBV9&ZWpG==f2`MhMFko}+bWozx))$Ogk$*ScVC+78Es!MR)3ne{Ie|*= z*nNCZ+P+gpQj%MZy0xmJYniu`Qc*Xz()w__Pf7Jt9H-ZCF0(FD2Hi1mT=UduxsA@Q z9gE+7d)lY0jIRitQrYuzA<{7GKGzO(S9x z8c&{cHyDv&kYAsCJ!G+fe%t2OfIVnoR`&<%WaGp~?|+QAhPZzv;3R7JM$n4msp*RI zdQ@X=z>bnlaY6MPG$2%3NyJO44eS-@RSz72Qd4C#9dxC$r8EB=InPey^AT~$kFtba z!Oa5qSEqN$BuM`L8$(p4+{Tbe{T)M84+ZgvJT1_0!)Ijc(3Oe_JuA}IjbBa89oNA6AygW}^NC%7~&E8oge#UPE-s^6?j|8J>g z{)lp=*6QBzZyZbRk~x&Ba|*3&FYR8S>WR4i%%m!<-KX+j!1bu$C$u~01LhNVUe!q^ zxt9Z+(iT4Y{)vqvQ{%<`a+P;zmQ=+R{K#|OrrFQ1EduEz&ky!h*$~!z!vYti zP2N8<^L0M?)mnr6J)cye2iwzm*p-<}hP+QG za;}&gdt$47f@LI?%a%|$xNdx3m8cXD>e#Y9Ir|uRwx47$C@c@x2*qR19PrRNqI&n) z+kzUk?$eKu6NIZca_1TouB_h>)dGEFD)7(9d94T2EyKEqZ|jv~b!M{Wo+uutu~>6t z9T($G7>0VwL8wom6Qzyc0LG!;K8V&5Z|YOh?RfJ-EOz!-?=s96RW`2gs*>%(S})p! z(o;>;F}FoP_Y~!YV#35BOXEI~$Q%nW+yDT$bF`586{tr<}Ma ztgjs%(L`dU!b;ISr+5UJX(Wy4A1sI_xPKYc=F6+RRl6mA~W5!b{3jj%^Qk ze?mt3O6`0zUOf5ANzZ*pxr?Jf{Pyh7FTNV4_1;>GR-#XSXYCONjb^P5-k0Tc)Ds?L z_?=8UE?PkLhTxGWH%K_F-0xI$ZP`7Q+mhr5l61q-(WAk&n}2etT?E-DQCIuVD6{Y8UDO>2=Bm0&v`V*}J0sPlnQI;=0j#({FzMqQWWOOn5JO%LTiUezqh-KQ zXp5|^>_<{4fr|G{y~#c9MRM&&-1MQqiZT@G@u9?y8fsw2G|(#;xV{j@G_nm_>VTAI zzbh0=T_gR0p!-Vb=!ycU^iVM;?D3Kp3Uh}3K`>EJ&1#;gCH9CB7bNAvoEK>2xM}}(`XD`!3O$Tb<4{4 zaRCW2Z_9Ka$UFZ&=^!Zxc&d8A#XetbtP?KLz@}g-MS=hBbXZOqb?9B)0#ci*CSUn&n9Sn*OMUO}#Jh ze>{ToQnk7mVxVBxpfETnVy}60aU>dVeJlG3L6%?E#gHV47z{2ii>tX@t`C#rJPJS1oG-olkNXv3A7b&Xu9obv zGu;@q^{jK@sVe8?{U|`cBldhuL@@hUbYja?UzxSgNBmm@cTULa=1B#n{9*mr$h`8O zd9TLYzr_W0yZnm5kk)Rrzv98L;w*Uh+6HRYqgf2;P72KUM@~vLVL-QksaR>)+kHgQ$pIB_6r_33vufcZLK&Xb#sv0^h5}L}g zAiMB*9)e4qJa4PtyGsk`i;LDH&I0nBEm86{e$u})^u0U=w6r~-n`;0;IB7lC*((vS zF$<~mZ%>4*xcWf*mLi}pJNcbtw9w}9p89<4%>25iai*rvDB03z#^!wC-zWp!zB)33 z=lrqFCTtIm0gMl?ttw2)uCR$`-pPF!hCBm+UJob`&;Pq(1Jrc5h*( zn%38JzWX1`$i2#pd&YC0YcO{&ym5C4l`S+?DBmC7nXw76z1~U2v1M} zHZON;jGnJ};}QyF6&Zw z^=%CI@u+2gkr`zWlJ}1n4w;z95!WiWeYl$&6j~^DS=2F;CZ9{tuKwOGBoRVwleK6w zgXyT;awH+vnK zl=ribh@%+YGcw@gS3CYE?P)pdgkZxIh0?uj39MZ=%ubShwHIrQW_&sG7#D@1z^{_B z-L%BOb{~SAFPS)-m1m_CZFRaHSQtxF>WD6O3=MZROZ#tFkJO`0TPgq#XKchJnk@Ft_ql!Ej%=lyKOkyAquc zd409*4yu^0c1IyYQ2v)%50Ga38%4gllI2UxVe5+JXPL06jlEfn@xLSz)U9b3I{*5l zSc_N_OGw!I*xhGXKNVlwYKCP7oM_B6=Fh?z8aDb-_PTR_>AT%h)HkXfBcuiQ{L>CG zBJ1Ow3I&%%ZSloDc}QD!VaGA6+v<1T#Z8FBlgWES%HN|YE(JG@DvPX&)nz{4^Sc=H zVr`MZ3K-2kJk4~r+(}Ntjz2JtP7eMNW}&!#yiJpDaJa8d9?4b`>8ZYC%zibC5_GqH z!ZBEg_U2c}Et@Y@OH{zkuf9~pjF@Xos(O{*J<=v1aRbf3@g7I?xf6{;78S@5`>Dob$$@@*<+2I zDSZ1@o}=9H>_*CCW55`=YL9h7p+BT4O+F#{v5x%0*GF5l0JRHB(28l;7oa54l}?>D zTtO9F0-86jKO)fbt0HSwqEx5W8xBf|>>SgF+^4oK6b-IVeQCu_?;eME2B)ucl1QpB z2{#4Y8j606*6$@GoYW}Gi?m1q+wY8x+wic8Eh|N@Mu{=6Azh{B<-ME9;I#0(o`dn6 zvcs>!q`h20kH*#<&2VdjK?<~V8c|zQ`0-2b zc;6?YQ^i8g*r@<%TeUBA0T|ZW4m}jU4?Pl3Pko(Mguk;)VGk@dg^6!k50Bm?V#Bd+m3({p(yB8lCB}5g^=p>G z0FbSU!qRSd?DVbh@YL31Squ(83PqUI5 zK3ln_crv0-_iYM$6ZU7|H9=!#`JXx5D&qZLu*}*ZA#G?9IqoY;mFIG3Py!-_7DTzUB<^1J5GdJy=(MGzwJqcjL}^V;a(e%>VQ_z@R^G=Q{DtrW*XH$>jqBQ3m}dB5)~K zCiDg)Q(Njj^j#Je)`Nd-x$~g8Tr4g$8DQkrAx@J-+C0bJPnhI)1-mnJSJ7ec)I8bk zNxMps1uX5P+X>w^`9QJv!M3T+Xl}D^sU-!QUnNB&#^R#~Tc(?YDk#c$4adWAIPvSRrPU9IgNs$GfKBYCjIXzx(E_WT*{0A5 zK+$4#Czvu_sCN&+qA*|k(#7*TN-ie>bqKFzcCPzL$)U0pGgxN(f^(fuha|Xh=&_Z7 zr_zH;5=Z#T32~f{DN;LwJ!aFmEW0 zTom=^bwY#=g?zS1`V}dRPO3(?d2M8N zpjmKz(#vc#0#Mr@eG31p6s>(E##lzySrP9-`}M!(gmHY_?EAA;xA`7QuFY}16j(NW zEFDj;I$e*efw}y%h6fOp$in(*}Ja~Pj=9v@2c3#dyMk|wH}XF zZSQ2GII@ceprm>-g}(+yz8xd!LB!(h?PYkAAQZ4_n!|xh@nXjm((J-gs|x#3l)CAB zztf^9PouXogDJ!KW>eb-rW<@*-$gO2h8;6XcOT9l+2zJ-!JqzEL~Y-Ua6S>Djn=L$ zi>lr&d^lVcao7Q zQkm3(ETT>i)gKW@#=T4A53~V$)ORiQyUiuAo?%vpZYS(#X~)h zQ`d9~&bNp%0D-ZjQ3<>;T7Y=KPLD4UmF75C!h^9GP|shTyz`9pPnK0=lOgLn?B*S^ zGODEB1=9JmjtQ%pF&11q!Bu|3mid(p*y$KoxHZO{8`o(hp#Lvb$(O?NU77&WZFR=d z*5r2Kkj7j^Ug^cZn!nYlyZ6Bsj`tg%`s9G=|o2^2dc4 zo0v_={u6u!z#75;sDYVw>}JDT(+xWCrmHkn?=kr@k`;b5*GI2zOKu1G??0X}@L(n^hlaOefo|{@`|vGB4yL zkRES$?$O=|UhC2bb!J;)2i|dB-jBVp)`#arwWW#~bl%*!gn|z%0d7u4lwi41tE{R- zfhpDv7$CpF5_UtUer{$<`y%|aN6%SqwYJ0Qv}WHYT;7l3l9uYz_V9M zY~>kqZ;nCfr@%8FxPuc_ZG3!w>nO$jz7VYGQM09`9JLzyve&&ZDK7pai;6?%? z6-C=W@z$|p`}hPdOvSbN3Hg{d0%%Wa?^B0oRqVJoK%vh~$*f)3%IkS*9vs|1^vsrqY0CLP40{%@pYZj+K|NAXaP7-H zK@D367M4?P-zXa=0e8E$-GLU`O(>*&9LKxpl7q)O&p5>~^12J}7C8GdH@Rr;OqNf^ zM_-qH{=f{DQ^-rGV#|K(nERL*FMf@cUYsB;TW=tjp86c!JO)`-kvrS zsm-U^(~DPcz|JLCn`emNrowrYN--g2yfOGtB$6`H_+=BhN{tGe0?cFj49KHPj5KTV zTY7?*oO7N$`{I}R?3e}{X%y4?@cCipCGLz|}n_=PL5u5qr zz4#SK^Oy9aVGAa^7tcCOmcekd>u05a%k5~u!AS|-fMAK+(r9WxG!CJh#snV7%$|cG%jB)oU|@f7JDRfXj0LXDThe!bHX6}spuY9 zq4;=bJ4Fjb;)ByALTN!#o3byH-8up=k&Xcv@`AXVB6qXGdO(osK*<}M^tXMi$p~Ez zFLH9l1l~)pDmt1PMx^d00xMMsjSg5%+%{nW5xoa)7KTdvl^u5ah6~ZhD zWPonp7B=oz`Actb;dPK}l%_r)GMoMZ>C*J}%3@l_1N)e+5JycI-%{7tI@<-A&I+R^ zJ3_U+oC>s9^0$#Wf3c z>`(C5F=}SIVD2hacR6X+0^Kk9g!~>sP4!+rlHj@uzRKgNQyG1fkVpRNMrH719d4T_ z>D#3+WuOhO(0R$d1z&Rw!(-P}@3H3#OsgV8$8la9J5PJEgE zfkTt67P|iO0*b6b`Y@BM#B-;p+aW z^;Jv-0}5UD{fXK`b_qID&r%Nz<1MEAKW9sw_0l|#m2LvWByp8oECKjw?^kK=`ZQHC5 z|IXs34Bpm-H{VkT?I;8Ri`eAN?)!^_nb`#z|EyE-BMThJiu|PkV0|L|nM>(wKZfkp zKtfeEr#1glYIX3r-Jmm^_XzUz%ZB1anSi*v?CQJhQ8Ft9XKuEL0A$^CsBnfvr_OEB zj%!DaB;kaFNU%}(-TtQd-yk~oqK9@Ih5Y(m-uhhCrw{2dhqCxlCB|QDnYGy> zI_Ayajt6R0dQI!Z(-W(Fx70iJ?FKO}E}H}ak(#u=N5AdvOLZRN{c|lwtt(r14+?V@ zRLjaN$osv9zx-u$h9@gPlR2 za+^LTG{goi`qHGmxs=qM5jqXQx1cW=pI8oS8MK< zyw4RX&G?64YwDQz&2MHz1)7O~Q>jipTC4a8bC|-ew@tDkk#y7TP2jNxl|VWTs$iT8 z?T7MiKQ;XrB~4VsDe2pdqWh%QN?x{@dnpc%+7=3F1Hr+ZgqSF3k-cZoCN^Sh-Dwtf zB+q@w=9PP`?QXvpcenb>}I(Pa&w)H&QT!n`d3WamoPH?VB86oKLI}>;oCITBhO1@}&{X*4CvmK+X zo^GIy3UYk##sF1huhCgm>RQFbT@)gRfD`D+{_z^#s9^vl$Pdi{`K!He z5bmBXA@0(93Jn80rBf>96DhKiV#M@14h8bysS#-_`~se22sY29qHLhLcSQ_uTba*C zrtcbmPySFe3KL;{hRii>oZf z2?|G6fhVenwkYKwJc43WH*h%J6Gu^+5Z(G@{3AZ|f-Xmhzl-SjR8g{vz82=%bK@_Q zT(|+I@&=cEQ!iF68)*KY zw0%|MyVVN9guuF!)x;B5V+*H5-QT(vjfi#3=rWq4AR}X);lN@T80cKbO zx_ZNOe%?Wu+RbGhx>o~hE88MgSc8}r#(jL<{Nkd4!34mmIlnjpH62$al{taoF&WFr zbHPCdF59(rwzL5lff|Ubf+sYbbaiBXjQ(CDz@0HgD7&FWye_Z_s1K=Z?6!}&RAsPjB_M}61OCOlYTYrc2ZoQApDVPM3Dd9c+q z&x_9=$GY@GzW~5q5*7*XeBesX&f0K!$hr?hky?_Q5Hwgwtv&ZZQ{m^OhitQDo;miti%aNL-H7& zL|ILU&Ej*(H03u{;yry_?fxmqb0~jv@mTbQIyK11h+voyaNmx$p`ysUhQa4_u9qWI+{T>szz1x>}z+8kQ%%*@>)p%u_W z+PkNqnky2Va0%p{jGf|2RsCjc#>VE($C{k+{fUeyf2cU}ai&`9u}(x>!g9u(mH}J3 zEKEzF!a$^sBzv{obzW80%br38e~_FM!0O`c&^2-Sg~=)W$jVSJuXj{DusRQ~5QBQ! zd?>s;w~U&ay0Wrzf1Lg`5ZSv@?$`4OMJSD_q2ViB+ixj^H(|lb%Cr`oRX#si$xEaxGNlebeOUZl~Wax1S%b;n_23%Y7gceXzpU4`7zQ zspni+N|9;HuB(;Ve)e!vcRw3=LHG1<%yqfVg0qg=$5@Vsv}Q=6?~d$0=Q?oi-0M8& zYO-zKSM{X7;G5ah+S)9hr63JiUGb-HT=@2vfP5sX^Bu{dtG>xcc4uh+EC0M|Ne4yD zgjQLV8U4c5(HNsQ+brff3W}Hv&ylge(URV;fTh|33ww$$pyqY!6&$5%?3*sq7f_soAnh8i&S3aG^*z9#*GuTdaE>S^uzGrW``S#ig9gM^*I+6Z=)t8VEp@V z!h-c=D%w|YdfIcJLYkW{vfj0UzYfSy(vG?3}-jiM%AQJK{cBkN{#zAU9G_oY6XBN8Cq1q3oN1Cdti6Ihoe)Khu~3PJck z1`C>{q0MFdgrS+JhlxaKlz6CnB8$OdlJviSw>`A1l%5|S23Ppc^n~qdl#!n@(&#%- z6`8F#Nk;#a8~)_dt6kPuYE%%+vz2w~gHSO_LB*B2U5ZM5xY%Md!`aj_NjFcVBg%$J zQ0dl{LQcceICLH9+29`O8k`)Z^C~cgtous z+fw6yzfFEa#5WLq)G!!HP-Z(f9V*pZWi#q)0P$qgkH_#vN{i5N^q5Bh4v6^S8+}e1 z;{zVT%UQ5nb zq(oLUaPtjb{h0yy^!;wE2y~0v6=Qw`ksg1OTCy9&aAGCPwCUY7wyYm*=tI71Kbh~_ z)qe+JDQ_$}MF9669&{!Kv63l4y6cYZi`kEc`D!aP^ z{d+DF(J|KUwSk;-#c=u6-k@vdEFZ-mp-<^r)bX6+-w8BXEB-GxV6!Ek-@EaHE7E-N zhL!X@I$us7|8#^mkV-YXHRT>wFx_v3Aip2&JTJx62V}e<{`#_i{WFRD5$sNJhCobT z2I(O9Lj|-)N_7HU7My&$h#K8Fq>2Av&Lms>nk{R4TPr4sjbg@s6oY?kSy^41^&2<|n02BV?|aX{K>;2}MArwr zX7DG{Vs%DBTyz(RvmWrvUxUDX77pgJZ($;13Z`11LKHU8PfdY>S?}AnQ5y$-NbGG; z<0ut6Eaa(&!jODy;6|>%nw&W&z;&S)3BqrbgfvfXSnZY~`JzD(GIz8(bH^8-^abNl z1qY&Me;$8Vf9L<$1@%nu=A>scvdXWhWBwIIh#j!-UX!u}hxza_DcNk>O*_rMK}lvjKwZuX|Axxb6cH*0L|T%v$+- zpU;-wK6y$+4Qcmw%~zXoj`?o5>bcj{0_avX&}l4ugRdA&JGROrCK&;YBQ*ypzWv&8MJmn)cq`CIMfCc~TW z>5UsU?2QT6Clh5G9z`Ue5SCCXgiJP==kB_4$g&|TBY5U2dPR&M6NA{9{ocZ_8<5_! z*^dJJOo4oI6W!vRFTwk0sNMbjFINYv2zk|8|3*`VK26||qGN4RPcJ}xxtMBu>2#?t zR42T94wsbF^m*dBzrve)=|5Xdn`@>K9Bl4tF)27e7O(;a0 zU2$%_iMC$OhWl%$8(-0+M)l%nW;m8#&S)e1X0kUL#4>+cbMh>@>`Nj3wabuH;3hGD ztiyObY|sC$1<<$(kuY&E&cB=fTXjDXcV7z$+5LTg`|mFUkmu+icJqIiP7%^3}DXmh6dgrd!B-x z8OoeV`oG&W!Z$TFscL9Q-2O)v@=wI&I;j7V>l#u7!dmQ4S-81h+ob@o*q@0S1LBU~ zUAf~ZiT~G@Hr>e}_T_)?JLD(<^6K?pjsE?qT;u;fkCsyQohAbuKUf~wm|yrmx&<`C z!xm(qxPwDg)RS7FG7+k~xZ8tbRhbvH`VuG+q7zaZ&^I5H0px>#7-XxMw0N1H(Jl9e zkOSXDN(Ar+2h>WA?qSL+tA$F>J!KM$=e_g5!vpYXeu6pAOU>kf4eSD{1&a^Re;yyI zo5~c0%x_u}H>^3DXB6{GLr~2KL%nPi2!lPA={!4o=iWHU*Ac8MU=uf3QjGcipT&j< ze6zNupPilcwxukWKUed{BQLU0^Quh{!3Av#)`gLwn0K+UJw1LSkf_^*gSGR72t{q; zKPObq?k3W6%;gM8w@ugDa=*2A5LA=PH;DPpG+kRpObu!e49k_C6eM4yyY0j8+SEMW z_2q>8&xwbWNO{S@c;s%4o0=csYzMa&@Qg+|7pi}1c5>%~q<~BtqxnovMc}ic*Lr?q zYju%E^N&b$N3KUB^kBehADNAiyx4L!r`$KW%a1I*Vd0~@_h`iUtpYxCr7J0aN`SQ! zfjs}kzmlpFyA9^Doc9Qjd;f?s%XeNav^U?)>ij+3@UqhP!{ejoEH}N#KQgTn3pqOW zQ=Y+};~4?Ljv{&H{GZyBrUnjE{Tq3{LGOSo%(0U3pLwGl4c z@M~)r4&8^%HzoEK2d^GvN0s^mQtYJ{ipZv`KmN*v-OKnw#|)p-F>NYPz0&>*pd0&R z6PCU1v$nJf7n9}ThlhFW6k~k#p@drQr;m|cN5_OY;xhqjjx_$7@OnQkeRbwD^oFv; zVn4aazi~n*6|Ewnjz#TY(nXH_^4`|`bWx^eN$=}H5#5txbK0)7skLV>OKt@VENsYP zZR$QVQtt{^j5REM(=sRG1^58A8L>6p?gbV-4!PBcM~;kqNhhPXQ@D>ysa*;r%F+*- z1UUI5bUgtsCD;^a4=XDb4Yu|LeOmZN>M(^uELILrp!ZMDgiU$g*(p?onspZ#+CDaB z6KJ2z;>2&}6*N>oIO4qcn=p>*1XedG6`bvrfVeoX@rSP3=nEwm<1z$#R}G2`RgS9c z4o2rEvRyUeQCpm#<$Ad3@#SWte9eiLlBT4Mj% zk%5?kliua@CxD_jx*~Fe6%BMa?ZML0F9o~%eW0+Ltt%sS-aB!bD(fS)OTb4+Y*i3c zn?f6P68@z*3o|{BBpdV{vd7|ux#BWfvYN`YNooW(Rb2xs|B@0oLTBm}Gl;3;D6MNj zL|NYwGqqheg5J!RrYJzmOzVu3`=zR;o-~H}j~&`b0Smj+nc-qY!&m8L#7FtP<0}}!bFN$%qu(uB>P0(kOkc6v zb>JENf|!0!Wb^9wW=Dda(Mj$E{v<7(KL;;xS0{JIw#Mc|B!uu4>y8WkE5p>DpKZmE&YX(44RU&I$+P&_C}T>g{vyY@_+|NBG~tt$yI8 zw)Mz56EQmK+}c8)?mLC!$P!|Jtje)eMNC5@!Skoll|C8Kn*LF`FBBCAxzlwN27dT* zX=_7$5P&ZwRVsZ9xoa6CuKToc-+lu_^!~sUbFdtQvz;gSl~~k!3G|}4bu)Le*LurQ zv*ehHNI*7IM}(rS9Eo*bXGBV2^h-%uI8r%SyF#?2EVsGZ4;Z6Pn|@qr^?FSYQB8Bw z%rRmTip(ni2PajZlY_(VgKpMoa~e(j6CTzMdisj4h1GoFIW^Rla7fi{p$^$E!1$35 zJ-CQgs-SunC{hecY*t2Op1gNZvaY63Hl<-ZlGar57-YZGC3NS0!7q0K`xmRCpNj%V z(pp#>gAqP=w_P-C&Uz2Vlu?mlDak9TOA2Yy@<=O9ddPm5-K(!UFr?nm{uR(fBWHZN znOk>3x)8uPL=&#`DBmwR{0(g~lMqon&ZywdOaWgER)+lM`n!^6j1f_(k%SQc{f^Og zo{9bDKFny#O>VmyqxP@Np5#*bK~|^f14ubvIgQ-x+TRiKt+*T-L(+H*+K|hZj4HXw za2uVm+M9@$PI0$}Av`!7%_N2e;(_mK25Qu+n+Ax`MN>*|$^@oyxKQ*&ylBkYSlE z*;1$37c@nc2PhTn5BWfvr>jz|p$y{u^|S7+Q7I;oI) z?>r|KmhO(WZJK7P$&aApKJ$%DEAir25JM|(8N!K^nB}V(^b*VA{^|;x)AOLzoPnjr zD`5AiM5n-JwLIKL=Gh^okdBU=j3RnCO^7*skg9Alx3a3Y_o+v_hnoa_Y@s30X<+8V z3UhQ|&37iI(x7=^9MS|;+bJvJI0CM|N4SNXJ4ck(zf4x7DYf8UWE|5Lo2}#^r8#yufh^9$6lpTN$yBvhFVe|?5 zjr|Q?gMt0C^EA6<-)|n9t@)SC0U&joK9k>W>@RSi}?k4|W)Ch9NeC+8+%Yqv{L ze}{+fP|tp2KJa6NyuH`8O`cK~R~U&eYi>qXIU6+5gGn<*zyR^XDhsDz9IvmthDMr% z8QP9~YD;;Woi0wtubsbBYX7oNYc*49ytX7puizhOjvUxNxR%upZN7cuK2IY@Sv_BM zgKR>x-1wZ_#LH>T>94dmpPD4qHll01#+0Gahp?B>h8smNmR)&-O$K^u zFVuKsu*Pud1It;(EsMpKtzTHQ-50iC>a`!ew=*a%wCOBdxL-bgh-q^`dvqwpX7}WN zJ{qmQmSo~?4T_tleh~ezA)7v!k-MPS=x8J_K$J80)PI%?`!MF72F3E7nQPK-nuIEi zUq{&05E-%8fgrCbZKUY;tShb}H3lU*tO3WJyLm}*VWn-yj5<|kBl2dD3+*Ysmo}km z3s)|1z1!~oO3>Yz(3d}>kbB>l?O(wbjO%RIf>+ehqFDp0l8z>lOfeYkdRW}@QpcE% zz+VA4AjYE?G*_Aqpa{kN4I3t)HYhI~>oV>h===#DF~{TwvM)j?CGT~^YqjGJ7VX`h z_*DL;dn`&%MQ}_AKSmGX76Qr}bR$$x>Y@uf%CNEamzcmcqJm;Ju#}=v0g5MeXpIOt z+ELYDUAw94G*%l6K$|hq0tTeL-K8R`Nw{Pih2-qi z)snF2%RQ_97?!-IT=@4AQHaB?W=1>^YDS8sGynAfH`Zt2G?`wG|y<^cT--vd&Q zgpuiz!8Yk>22+Aw2Afo~f|Db&wdgc^PIYmoo8*?W=B2wFzDKl5)-9ruJ~AchsBKpB z^Byv^2~S6()I$CeD{R37&7;Wu_MAZCU_yr=2XC6zr{mqA^o!-f68bIRfeFNmF1Jf= z5^=m>Jc|PQHIC?j7yD=y;){d}f{Wt_0KjcD{`pv6<$~Zrho|}{1?}etm(4*ZEO?uV z9#H%+@XHm}aMMj3VKiB`^nj0EtF3&3{hexx9Z*GOISqrd-{5Rkb+Y8TG2(&c)nkWC z8-FKEq~x{SzGp_xH-|US3Oc60WMb;5p5lIuX6#&-0Zx$~)RdQrQ4Dl-?mgA_ltftc zv9*SgWp~`NHnVyQHBlNxExfe7C(CO`<$mS7f-?b{MDAV+W;uzfT4rg+I}G|#i;PtM40zXf9GWc~U!KsAvYN`+D?LAgs*Ca^F*HUPQ7-i@PV%7ORrq;cfscdJu zLR}Ah<*a#RQw!-Jz6H;k=-5KOLo9QRZrJ^X`eTdz%JGBj78`&`A~XGM$3C%^o$}+P z!_R@RcjPtaBhd?1%d>f43cOhZR`*djT2BWixU>C%WtGSi<)_3zg_P6GN*+R!dsxuT z>C57{_7hW#K@267>@14YaTg)d^7oaY7;k#r0h(LpRgB_Iq-y@$Yw%Kzo>p(40Qq#g z4Qm=_dZ;#xY=>`dvJ@8U7MotV9lL_sE@{!-VR^cM=jvHli4=*G?#dJKY?!^0bU70(EAzbSCd+glIKg9OMz_2 zO-bD**~Ipyq?$9~Y?xI!2uD$A&X7*&7L(p9%G2DO{^J~Wgm3VNr?G!RCt(x zuwx`)yEcmC{uIUBN})NqIjFIB^PpEg>2>O|xoJy8X1&aLT9sAz;znE@BFZj*fP)D)|{Pvj=+*x`vd zuz6x(g@Qxmmbdds?Ha)>0d!(y0&j*aYr6$#$*u!BE6PLe}8n3 z(4CDK7zV84ta<}@{e}JZ7Z_p|;M%vxOMaEvIQTN=k0cEbQ;|e)pxj+Qsf@_TeOaN&_>sw0i|L<%0Hc#sf1@NRl3(`YheNzk}G}ouMmp_Vx#c zfdiGhl@kq&4!wr?5G)BqWHJ;TuEt0b!?;yH3IH$#&(i73KhNSMx?K|KT+Y%Ow1iyH zx<2!*5?PzFJj^Irx;^XVi+n(t&x6wwCa+n)4sSJ{aNC@B0KNkXC!>EL?Y7HW1V;Xv zO#Iq<;sXntQlj2E4ah354w#hR+VWdRDl9im(Nw3)Nk4d6SEu{h2$+aB7EM zLCff%ry*E=GK{Sk?xT1b(DU5Eu4Ac>NI+vN@KbBh6L2y=d`0$npT(2VrX9fGO^D%x zMfR;iV^o7@6py}$(!*iTRR-O?gDFmfWLkek3Z74LP^vA zjMWqj94O`15_bH9Gf@b5H)~*b$BtsTis|aX?PTh* zs}c`1MKn5+yMNqLJCH>3W(x~*IOee^%<8Mhs>yIoXxNo9wzt8G>lrA0y26_^u~@>4 z@Icrr+S>(3LyNL>jeV3dXO$3m3EbLI2iXu6Y%DX4cQVpSH+-_buqZ|4INzQiVl7sKu8&S!qnFuW8Pc zmS6GX;b&w1OGe~@O%D>gcbo0)NPFiS0qsr!s2vvF@R(lL*uJeFt9W6uB352;0>EVz z$pUceLz{bNCY5k;-Cjeb+Wxj}U=n96U#EWfRrdn3EUWbP#Jw~80Pyd?QXZs2e{4P) z)TH6qE&s}VpOx2?sN0T>0B=GY*O9F=6XV#r5NRwTQAdQkYr^gT{caWpUK4YpR;2ePR?8Mm@i{@^R9YzE}g&FBEjwR64K9CTQG*YUtQZ_ zg4SEFXywd|;dDNNPny={twq?_5LEP>;tWk0nWV+8xS#+H@`0}? zo454vjvBKS%%6!*#lfW=bfS6%8H(nDSig%_n|&n;F4{8pkP?y1Cj-?PP!l0SB=V~q zx*Co1=TdWVZS!G%CXQ{_QjK3L#BcHH<<5jN3(!KW-7>HjK6oy<{&I^GNm#(`r<)n?{e2~=~JDe{?Z=% zOVc_EX8Sp5biiT?RIRMMvTu4F!bpaBIWbiqD&_c5AzwqPcY8~O(L}uIwG%!MN@O{0 zSl;U`aX9~)RJjL{b&~~Rh4f9QpS*O&D4TQDDlCpjzs3%^fv(} z+W@}QB*%wIt!IRl<(7v#-KAxzPcN~_80Gow1wY?;K1W(*INB*?QI3*kH+!jbAMrni zsPNB!)70{0YsN^Rt^p}2h<&Y7o4cdNu*XCf`czp{m0b!%^^84pXZz)yG9-}U7RQkZ z4Ah=Yn7>XLTzh@^6t3gy7yO`}TYmz2mKoidF(ERz;CpXdC(m|&N=H}GJ*zI|DM0x5 zwpb3~=0oR5ES_LC@HQ%GRXyyEi?vFsl6E`iR@$cMq7h}Ds2 z_1hteu{R!)VfA4TThN;o_K=C&hAJsIW9j2SELnSf1P2bocNf4`cb;Ih7%{pJoL$E- z{jyN_`}qU(dAa-*kI*D&WEU%R&c@nodT# zKV@U7;==v5+LR3p{M*HIN_y#HtXO<2L#*+bZj#f{Ug~8y_7ERSMD!;P@B(KLym^{H z6-U$?L;KIoZ)gE9mz14!9dLN8_`Ild#T}RW^mTmG2d44@<*UolIrLGn{8%ep(l=^Te{ zc4UtLs>$MGU_FGIQ=MBZ=A$OVH0w(jx-#JEb9cgdl$h+&W)AG|?0G8qcoKWYMt9E8 zT4gE4IUQ+Fa*7&NqTk^A)-0*iyr`mku)mCEyyJ7%(ebOyl~Dm(aZ3ehBS}XgEd91` z0F63=(W&t@Eh{aVM{p@_X}rWCK&JH8(LvWeP^c#S!6zOqD$1F4mEO=dG8c^d4OC_V80zT+QC7$HCAU(!`vz9(PWzyrZ>=dY?k%6Z;98;y^@ax5<};K+d;6kK!yZTs zql2}k42ooV*7L2^J59}wI_jJh1Ceta?izVwwPXPs^K0U4h=@`1s_b4W>WiG4x)x%f zXGzR@PR@C~nPCL!T<)*(75l4)4`@43^<`@@hI#&xIf(0)ILiS>Q_@_j@buYTl z$8SN@pMSHJdlYy=+v>qOdUg_yAov{~8qT+wRhdq0uuDly@oim!KBu{|)RJ&Z#d$wt%M0s@!XOynVYKLIU#;~Tyqye3 zO1!8jX-;nL4UCCYLUE|P0%_aXC%;&#b}?QSK5QFLa*erD!*aiWuodofqZGBtlh$-3g{CLny_%6C2XEOs4J;J^PX!oK^rvyN`SH=7oNKE~7MMOt znm08v*246r@nf1mTPo4q>GmTVWMLy;qeO}JbdwRaZnYz9?YkBxU_|@0;SY?WV`vfk z3UNGdS;;?Y#9-8ALb@2at>q>t@VJ0MDU|v{bO-!; z)ZUjWTC#!Oa`hX_9G!4*v4NVw&!K(a-Es%HMh=}?RK1(w3$(Xfo!v9ZPw-pQ?AT%K zYB2)SD#qDYV~zE~qZ>}xoFpNlUE>G_Z)mEMtAmM?7OD8T`~`_*6bENBzWt3(Hoj1% zxqo*&jxRPIzN+0m%TADm8O2nu$Dcblb=!LSCvY|kpC1Ln#n?DhPav{V$FVleCD*KY zuK_i|G&9TrGsH9Lhw-R}t@kO1K@qe;21>p{IbZMl-G&~jFo_#`+D}nqf2L2~lvwpB zu$3fDvk0gQ5jHU%uetgJ2QAPG&H5~$bEbQN3@y*W_x+AVRI)yA)iB{qbC~rESH6LM z>t3c^SEAI8fV2iUCz@T?cLY3AcOwT`Bzmos-v?M=zY1F7v7?*SINwY9+Bw?hR2Zn zAyLZX28#;3W_3XYkU={w)f%$CUfGTsKF6HR%VT$BzA}Y>?S(7mT1vQl$Ut>}J>c36 z#HHvh-9E^ivL$e0sE|Bo(@vZD6(1vRtn{ps{m#O~<+$W>V2)L~#sTSfV&9DSTVgJn z%+EwF-~odC`s#O{vn>cEE1y!xV?^K;>A*D zd-7_V+q+*~8Zeu+A>mDn`F{tjZaWZh@OasoBJbkht%*3$ji7a=W&VlQjz`|j79UQ}*IrRb^UNrlSJtw%kBkS@`(0hVyDUCTaU9n-JMn36=Nav-+J(ga zIu^BpKb>EYLP{3L7eDW{Kq8dg6ef&DiloX3C%l>e3N|7Pj*RpyE;fT{da$mlcIdqM zh)zp?zxs;j6V0Kr&zBD*Z3fZL&?I>`M@@gLDW6n=<%es~n`4BtmsXy<7G%?MQI6fR z0hRNoSKhy6U~Fy2knJ6iN>#1Pzo?=whp*H>?>0%H&vn*yd~Oep{$0Q$$X~RyG@lQ3 zG>SJk`2Kw#o3gjS9pOdaP3-d&90bAvz8$T3EMk~Ph5Jxw=Fx3GDce~NtAGB~`^NF+ z+?w<4j2RQH)npqK%2=iS9~>u1PTMZ1V4L`scMs6S#gBVLTx(UIM;R;?+B(TTgIlR zazGf0B((j(gm3w;KEaaa1h;?K6bd<-EqrNR@H|GRO6EE#$CeoyH84?x2Z21YWi_{l z?wSoIUIg)l8(PvaLf&H`b-z_~zH>p))kX3KaWQuExk_Jkh`fVPG)(nfRT&U7c!lMS z*_)k}BMSDmYaUH$e|ZX5R{kt6`WLQNHbv8;1J__=92q2HQd`RGmfz%S{<10|a+6F= zC^h3S>6k51Cr9a8mdI99X1>4JsZ|I~ule=rnUC0;$YG?fJ>!D#!X~Oi0&i?m<80=aU z6ICWxS5n_7DX#vVb%zZ%uvVsU?a77xz`({19eZof&ck$+&}`eNAkaT6H=bOyDhI_R^r zBXqx=wIt;xlD#&Zoca|xRkI~_joUel)BBnG^;3AJSA*HyX_?tnOl@>hizyjJc1X|b2=GMb8OHORrfi*uhB(!;=4w)yDU96n^*S$d^%MZyw2fN zp$ldYT%VN+-jN)(fjHGhCf7^De1wahBIZ~+iCq?pI=7>QQoY$6NHJAH;1>vFvk;t& zv+;2+`n(el6~b7Ii$q)TZ$X`C4X^Smg41hlp1j3{?f!GdB~r3j45ulqG2OM2%GL`* z1CV%=#NfErZ+p#xIR!;^X-j=vnug;YNqcUWRaQS;ZylI2NWW#|<_C9XaQ?<`qrJhLJG@~I;#`jT};d0c_#w&{iH}hP?i*Y~2+LbCOQ247n7+8;Xvuadt83E)|ftrD=1Eq^7HvBc$ z50SdYmG8+yQ{h*d!^305?IyJ4sUQ%~rg{ATlaAw35WMm4#xco5O|_ED_HdLXr9vfE z{Mahg81rfxTSpt>w{M92o`GcWe>d6nTmC5wLbvPsv$vlZvkSN{1Z%Yt*9+FvUnZ(b zJ4#EgGG>QwW~<1G&17GKS>S-FGb!vs*#Av%$vOF-^sPpIt*X?U1qwfHa8gYjPmU-NxbzSrvs5@Y#S*&;)vh!5Jr&VKP)UOihq>sU*pXc z2$Viv?Xo%+W$1v!XmL)wFr4G*yD>gzH<~j1LqrRykNqDUv(1OAV5iL0G|06C&f=D7 z7XMFD+5}U1m@II0GL4&X#0+2IKly0^rqLxikB-CvzK)p?22iuipD`B8Sz2VGW%y(y zg{T+qMW)T_{)Dc@i@JwKlE;4vx;tGT#hv`6Sp3obMnX*`1IT{hA?JGXmm@aeoQ@H8 z#$%Uqb^Pwj!-uJvIW!44I52r)o^%Nr9ZfVz70jJ$Bcr{bPTXMBit~RF=0c7-mDuwC zaGoqu^K;^s?LoP5fhw!*0dqcuE*qy(vsr*K|q_ll+Gh^1`_`8Hx4}YLxNW6lAW4N4)A`ab+1q! zb0*z?iJzTt?CBK5WYns4EhxeBPdy0Ye{T2^bReo+{Y7VNXDv`kLc|V61fy=3#rjR( z-CZcu^6Q<$^6lA(q1bKXCUX*^-A@f|acdX79Vjn8(nJu_LznNs3M zpf<6EzzTU)yx3r<=jh{2!92utH#`HCLvAgNF$8t-$TcV{txNT+B5INfAqTCtdOUF{ z9JlmMy?l!WMcx6(K29uW^G<2=`{WE-4VCHs4so!eiUsNhYE#_Yf((irOXtcZ?g-+K}$pY}vu0b5g^p)}VAcVe4xd;BsvVX1_zc z_s9>i{AlS({o;WY3dWM5%=8IR{JybgZsuHVXl>wbekyGubu|gKW6q#}S#Dx+EEjpM zVYCqabv^icIMs~?vpAn<-2q0x;qe~-a>+e5b};?*sx9_$MX7L@9qdoU&SV!ducTmtT3K@5aMYQ~*UQ{1wxBQapj7cCdFSHMt*$n}KGyR{53SpRn1g9% zX3(;Ir}DUi0jOS?=^Vr0-XikWQeq=r_nh=hAiwrnc-OX9I|WdK&1 zyIlO-6B*`v7OF3Zgl00I5wjR}W?0(MmQu{wt#I)$8FWVI&#(w576LcZpLi;*xr$aOfJp8Jrw z+y$a~Oj39aS?jn)a_v(2b(V0@hTWBi^_Mti*b0>BGa5SOp^9_V<;!#_HgV|BFI zjPJ#J2}L45T9qsIIf|IJB4lfIO9$K#!EC-!c@Yuc4eYR%+$c#(L}EP_i?MIonrXzp?RE!Us%%Vn?PxolPCJYg^>|xWe1Z> z?O5;}`7SAX*2KYE24i=REq!Nj!e8_Jk8#t45LxZsk8htEjAlR_AVxEO`Npf|>;rH;`jV%=i&#<5Mdq_4tqFA>+qP$dd zm-N6n9F*voo8GRG(A6Ef*2R;dW8f0*lu31&OHfiX(;KK4+k^Udr|vjWhbeTT7HfFz z$Xj}DMOt&#+IMpmdOMapK7(~U<1sRUpfDNjt;m+<%yX$wUXQnks&$tVwfVrf zoND#0`yFO<{EaG4qAe5Ny#NA!K}#)(K46SPPtlWXTJT1q0^$%NK*(p|-g3JLtax;l zMPm#eINPrR=LUfn_zF<_=h*mk%wfkWkMEG+xhunKn%SLebbfVRZmmt&%!%HeE{Oqe zx^`TQ(>F?2Q;PUOccm}OGfvEz!HwDM&MNCDtQmr~;SP(#H9~n(143?KcSXd?$nrWV&+Mmf* z?_!~0p=41&3_KF_uQ^~R+QXr}rq`-GeD;?96)M^%)n(hSOXsdDQ}a$7Z*Ty~Isu5B zDMZ5RHPDhHC;T9_U7|r&BeKlA3ZwIhSah}}OwRUH3JC(&x-(PvVsuJJ7}|(%egDz$ zId>_&yapsT4AEpl4@@nIBh#Fa0Nim6ciU)%&$qZlE{jV!vK>v0Y{PW4CRu%|&NrEZ zc!=uGyOujUijl;;gDaqIJ|YxHd!AQHD$>WCvkPPNHOz6e%m?eV zmA>lvydb35o1crn;T+%4;R@QIb-&kobg=k&A-CqlEvQ5bjuxrXsOa0u(V~GP=9WQ} z80$sx?lie$o+dwc1Yp*cJy^f*H<9{^qTWhqyQ}kTz2im106ZbMsJ+$wcE)qxGqiww zcQ{%@TNc+mTmFEgG8`RRl{S4ao(-{FT7Vgw&(B)v=hbIjjjIhc9JLId@#5&FY8lnx zuAUMb)xYS2jV3(qnv{bvZEdj!Zd*Mo&7ImW7fRipMF?G;5X79Yf;tm_^YjU9MpbJc zb<*(J80AGXJPd9qYLBXXyf!uB~Vm+@3_WOACc_<+pq;K63v1_S$5IIOW~frB}!fG4ca!nbzbD z+sI?_n#HM(bS1G~J1z3ygE<&2sK8#>%dR8N$9DWBd-)>vOjjyufdmAvwBd37E5^(M ziJeEst-5i{Y1XUbayS z7t!Og2~em_#L1ejmNJxGJDuLDa8L#u#7Z*}zU(#N)0-Q^)scO((d>E>C1R=f4A39~ zM0q~}V!C#%d5cE$=jJMy3iMW@ZI@UoE;oFE#te)qY4`EoFV`1A+UV9EFMRA|7AaPc z{L`B^XTNDru>cDP8I!V!woeH+?WN2rqAQMq|JK2w_Xh@xxVnVZEUSwh*Ze%@bwF|S++1}M!O~m=Ws)5UFq;of5Ad7G4(;Aq7XxprahPw;& z*rwZ&VFZj(7B#-aJY89ufBZi8+`c&b%5+dddWa9TyEZjK z6=9?nzgnqN_IPRULy)k`Flq(=YG1`FSs}GMXSpIG^eXQBy<)4*yezv|dnIw^S@^<~ ze%eafiCYv2pQ1`Lxcp0c?qhVUvKjnF$yDex^0H)+*%*vTkOdSPgD-t(Bc(CmSKTrs9(ZfeAc)aE90(w5(Yd>l$b zgu5M6C94j8L&x)Re2ML+fXj)POklhJ1$(6JI^6_ffoDj?NM+qlHkm7d?#8D=gF2MrI*@3qlyA{$_sLm?i z=r;ZjXKxwR*4M3lqlMxv?xkpPihC(mT#8dPNO5-wl;YMFcPlQz-6goYOK=Opoj3n; z-}gCZyw7;PJRdSLk};C(tiAV|Yt1>Y-?a%W-*ePb>Y1DW+h1w6Ie%>X)!al#xI@2Z z*G$yAdf|MP%>D0=_AO2aQ5Zi_Yh6s;Wa#bg$&2F)K6Q0NE89`K$V2s(+_Vqu(>j%+ zss>E=dXcEVzhZu#F&Qs72IQ=g$KS#7DXH_?ndEc@*#^?W+E9%iZK!0VUsv^;jFB+A zG>70F5H~Ki%v@Rdz0tO<<$iH;0b$xs!e3;>`17k`>_^6D9xlSG3uG^oZAdybSEk`r zpobf()jq7Yl9v?<#25b=ZCo4b7RT8l(PeTfRvD3ERe0NU%cGKMpfr)w7Q#L?jIZ+* zwX0%P?XT_b9pLCrMV(zq=GED8w`YDLH735E?w!BMyY{9AT;>GK23+s>sNax-Rdr8} zpZku&&eKKKCzcJFaMNn6)c(5(|4ZJN*25{Cl$;h$Gy6p1t~m?{wZC91P$=c|1&2xO z??(}597Y+@?t3wV%JT!TfHWJb8<}%t+@j^N%*wmKjJ{d3d8+|UPwqLTKzR^No3f;G zMu>xY;+x-pI%Af=6NY($;|i8@)fMUrJx@B#6p56&U3PoZ0*01v&yJWE(_2#fL*1Q9 z`q+E0dHMv?x&4!FoN&5^eZ@(!JzQmjktQnh=sNnKlfB$Fo|S(?$l6R^fN#Vi)`-fn zdJ*Nvs&_-#DA;FmSp-QtuI+X$MJO_L)Cq^{CVq; zX~~t=WtAp*Y|5r@!Nj~O(!QG@t8nX&!NEyi9g==z#`*Kudpzpw+z8jsSoL<%w%_~^ zl{W^4z(*uc`&*GI8O3)R#UIN$nt!-ndg?5Y85XX4wqsLv38;|UrY&a$%Qn7jFk2M# zRaf8gT;TiD+@2Xq5+4x0E-RgyoTVp`K7>A=EO@Vd8Od3Bd~#Q_2=v@$y4Ni^!$|E4 zufnbFT=onK`d6L_-f}AQ&rXDLS$j>*JUg0aXHVF|_CSG2s4fuLA(FLxSn6aszE|wQ zkEd<2Hl-Tfa#5;%H@s3X+cNG~7s?uUTO$Z_^BL?o4s4-F3~Z{uP=J}o9q5NC-93jPI%|g@wvS;eN^%jMHcW8hvoSK0pc4) z95C%seX0oYehbv=uBMYTJ`p`1XT7_n)bc&Y;D~bPbKS{2Cx_aN@xNM4u)Q<>ARKwQ zUq$b`>)Ug`?w2Z#N;;R-cnI(x;0dW%B5A*41(Q6d)xL})M_t(N{|OQ#cE;Hm*P%SD}BX@~V_ead^MP|+Cz#!9IAYI92y9tIO!+s~b)ts%v_ zkyF8eA9^UnmJMEj>}6_Gh{phE*1HqrHFCd2^lq6nBwPNj|Z zj?F-h%U#UW7HBERd1G%sQQPts-idsbwex3xm~`O-^2hF2Ru+pS+)VqMZVYm3)R!FH z>>@igeg99)&7~b!PlCtXvAJZG0|eguziBE*#s^1+o163gCPwP?*c>_ae|m#D&Q`dg zRpYhJODNNVRRYrI!w-CrFqz{3SxE zd(WS#Pb#bB2i*E6n`3L-wPh5QT$l`3=CnnT{{fE$(SsQ)wg+BAZnsMeqoUz8+it~MNr$uZ@-~>0 zQ+NImQ)UPM44(7X;lW#0h_~rN^=#wVuVv4Na5YyCr|v$%fT~z=@G2GD)yB!^`d2iS zy8li;e#ovngnDz`<0t7HlyWG2&!Mp4GvaoQzickeFR}U{Z1a#`3qFUB;A;a}*yGj% zxL$9bP`s1v0D%liYc1IQn^JHum%AkCcF?5=9A;4u#rJLh-kk15g8hTxlhVt>hQYt`AmL`@n1_qr5lCI=0 z#y(9{ZA$$1Zd_u(30Gy=wc#53`w(itYTM~Mrx{wQSpTrt zy6IY5k+#rTc&1i!Z!vT6F9#}I0?)#+`z_6$lN)6#?pT9KA%=_Nl*eiGk|ej7{e2Q< zA^)%)UFpN+o&{$9rm(F3NOhTAl{Lcs@XgJk1k-Y!A;jm zuaXJmdc~VFN%J}0`p_dft5(bXAdggFcW6_!m)I_t7z;i<%FHQoMUUY3B4>Q~o4yt7GEVxQug69nmbM^UyC=n5F)^6XCC zU;X#Z>XzD43(vz-=8BwE$7hDI$Yfco+J|CTSdeGe-lJUFP{|bMC zF$j=gl^3gV*a;*2n>GW%jEobQ{7uU`#NjMcWd%m1`az{@WA&ZD?8mk zU2Wp6WJpFX<{7=5rN3mh;!r9f8OCGS785BZgY8`;27bPm#Z5df;|z=DZWWj-sLH|5Md-Bnxqy@By0$V?3JBdtr zyo%XSNhCg%WJOA?KUzlPKn)04$H4M2^#M0vE!0GHkv4q~j7D{`FsVt&eLsez(=wg9 zEL+B=5fHM4d1~%N*P9=rPHDU|b>19rO(BZ(x{B-62F}|6phl#s$B|1iFZw_FSS0PI zyx~b}KrYw6la!YX$GJ?b_nc8tFLA2%=$$Tju6T=HclGgkIuYGRmf-t9TiNM}W)wQf z*uyH+q*OQf_L|$~&gIctjGgBMLl=Fr*qUdXkN9{=+Sz%#rx%w5jHLk3v7-v>r!Y0J z!_3mQ!@j!NuM1fMkQl`@#7CR+Qj#%FPpl*2K_T~mRef?{H>`oo*tWl8=I^r zLO;ggDVh0i#A}qw3MmKB#8hq(qAY2pwB{#!33Jq)PsASl1Xqln351COx!LjWYi?wo z?#lkATc7gj0T?)oFd z;L(=UfOL#CdzWM;kY!>LB>UumpHGGcfg5OkxvIPRT&#*vk5%a*Ra`^^`jO~Uz@_ek zvqk&jL_sZ*sydAUyIfsKul?;azN@(lh`^HZ<7s}O_2#6xp`%YkYx9+~h@Qv4)w+|?i{quwm*OfIG z**~3+G8M^$f2A>wZ~uNBSfm+{FTClY@_x$GiG!W1_+XmHBs`-ApFIZb6o_bxHGW_^ zPtrSw3B1+J%$mS-u#_Z(VtNGgY7q9*TauEwQ4Z?$MAsDmHnt{?oUUA02nKyG7~fR4tQL=8ODz$F>N1B5m5R>Or(?eAX#0x;df z6b8P4V@UcIo)L=z(^q^U>3V#unZxn-_D@j%pZZY4-gzr<4uIf`C6P@cC$Z2{khYpP5C4 z3Il!L3jMUQ2DaPVz4LF1kGaHdPl3vcDNju--;N0fJTn74_0mRq`uUwIE1m^g9FrpR zXf7)hAPp3v%|Fce=E-_&_wbO|`70}!AnCA>vUa{JL~B}H5GMoL)t(lR+LrzHz0J(( zQqB(h^s-`~<2W7zoVFL>(xmUnqOV}*!WdnDcA1kVFJa;QHuavpHxgrD_NWSW0q(P< z_FfPIloxHf=7T*cu=cpyx-l3#*TF=neZ9K}*!+yii$H6^-#);d`I39sGH?8TTITrM z@v_aFE%|$ICCDm5s2059c6wQ(o;^e0sO&)THv3RS_-pQBno;oF&?{Vm^m&3jeufQm zJ-|3;xuDgO>*nspnrB)pq=LWwtwBF7HvPW~#9QFWRBv4GAWKMIq39?Y)Ge}z@_KmhUb~(cQ2jjhSc_I z?8Rkkzt?@2+O3UEF%x@EQRC0t!`&dzwX+lF>v2S+NAm8~)DWtLAX2fF!AdC07+!+e zLSk=EKNkUC3%8SoV<>gn*wof2VL_Kbtr#BK{o=fKZ+&Kh0RpXk);Qzva}PIi6m3uv zML9X#17x&9#I=Ssj2mHEEcSK+JudY!|SLIo>!fFiX)|+Yfb_$II2dsfWE$9 z|4*4#LeS7_UW zSyZRdMx@rTMhPoet1%m8EOj2olPDj~?!$A_D%kzb{(I9=-_*JN_nIE9T@MlLor-Z4 zBIHVE^Xf0a9Zlq#Kk>9VEG_RpC^FX^S&d&zOuE^^(S$!>o72lgVWk-`2U)tZ`U7}9 zVR}K}-0*qNxagZq+6dZ*S!{sHgU9RlpL3+bL+b8G&4|r@Wy5RKDT@ZJ*sC55^QgiF zS0d#z*dTG0uXEjYDxa*x!okqTQ@+z==?a8Pcu~xwjq%(`+vu1OBl{2TxZP%@mJbXv z@h6wgRQ;T(jI{S>)isk!Ii!OeGB6<012VGP)W{IU2VY9(e_TdfTTRYauV!?iUEd>m zlhycJdPlD;;|EER>O>FQF9c~e>U>)h8+#lsOWaDS=>=Y|pFx;AZYixKKJkrH->&;k zcb>>7*Kj0Ivgr;+ZdT$Ar0SG7Yi65lRm#PIg}+w6#lBMVH!M}P$;jJ#FOHQwI zX-AEB&|LOYNcxBnd{YF0Zxo2fwgwlu(Z>}S9Klbl{?DTBAf1twF@^1)jTN3DSX*6M zD4yj7hhP?(a@?gS%QkQbbs|ikJ66TA$*3`N%h&k`^V3+__A|q5U997gFc%optu9`h zk6p{v8u`WlnajQn%4IR;6Z5bu+V6Lv<+#12eI=xMw*Tgq1wnqniSy0C)&Lj4t@Q;@ z=GO4+5Tw^2APncP{{1HsX|_6f(@y8&R^<=|3J5rd%1Sa$5evbvZ^U5~H=@rJz~y8w z6YVr+4+bU5?^qq1uBN7txNFkxFT#>=yVQGO_frs}=mIwB=SHuW3cJnSm>L*mTD+n7 znCI|g+e-9{^IpXZyB*BsY+2s}FIyFFVnQrZ3J{8X!u$Oe;hQF^t>+VOV&>GQ$bsOq z=web-#&Gh>Lg}NAK9`AySU)DIB1^#c7p&)ZH%*#YN@0vk)htHA(FHbss3sE3Mrj04G>jDKP=EpG2Ygl;Ws#3aq#2J0ZKb}U97l0poOI&x^ z*AZ-^*V#gxI->31E(twLs)8AY-VryLn8njaT|xo+6lt&T^%YhZp00}{()nUb4OC8! zr9B`w+s|7l5&GzEH%YsB(zrz=yRIhYLartf4i2pG81QY-7Cs}3 zRpvD;a!8Py8&VeAy*S_Q%;ZgbVG935NF((cWYThdw+4_H<>!m&@|l$bDbjM}|m&%B-edp2;8l^kDa+Sm-k^>OQDD}!!Del;hE zi>cTeYkf~~f(HBQ0Gt{6=1!160uBX<^c#J>;TO!JoHn@k+gtZzHfmgUVs#MC%bmY4 zO+jryRkX-#!B7Y$cIjr|9Ip;*zz14*c9X{Fp;Yp?60B;LScoB$$@3;X>Z0B&M9chl zyWY3d?qbVc`j=NH-%TJ4({W~6Ct>`G=sJp*vG%^4$6Sd>Bc8Fhdz1p{tHG0}d%Aa^ z*bgafVNGqk6!I=~t!FR$cMA+Pbr?=3EMoZPV#QDLxygXCH9O)2H0WhYU)$B9fkI4c zKLNn=MErsF|IxX5rrJV~88PqqDyfQaQ2GLHP4L=x+8c+qcC8vj>06$!Jl7cR z#0mS7H#`iyEqH{|d5cE*xqleP3-EzJw^WSms_1B7B15hX!UTwtnYdh=Vwpn&` zEq{#yWO`J>0dGHi+1-9E6ffBGR7$Y*y0BUku8@TSS+X8)+>uPh_bTRb)e7bz zqF3}{9iSH7vu|>0Rc!2I;FnZe73iYF*>yQp^huqMm*4gL@pMYrx-YQyZ~dQKYlUwV zibLadbsF)rrU$l>30BKCO5j&N@Z~+dHbg~^XLxL01jpO;1Z^z?MTJU6zoOX-!qvJkWW@)SIugT78 z{$<&yy!jn>AJ$$sCi<3uPaN}@p*G(`as741TT>cLbJYJ(-B8lHL=;&a@W%{gFs@Jt zswXRIWK`)NMmldppH6qUJP4Uleb0Jc?T)5L1(&3>&|uztz$u4(`GfY;REc8zm`k}Pnoh_Wj|#4;Gf|q+7SYs_E!Q-1$0b+txHz#>9XXd2 zKf94N*7 zL9+;V@p*P^RgDj69;DsfXyH&KPX8ihQYPhex`SY2bga=j!UQOf32-C#S5ZIxQ` zktgw5K!@kTuY6in3-#JPdiGq&>H`btlf%ixJky zs|yQh>TebEQirh09oX8w53c2gR zWK@v8HM6)_?04yRYleoW(GW#kzwDjECF(@d&#rIpo>>6zPPt;}hYcY{xNBph zv@%@oQXH)>6POmKQRLPXK0+KJY^AvH+YGPsEN4_>&}ft*^vr<+;Bj_hG5lB&1pAm} zJLEw(?M=$!iSNHt{9?D^Y9DQqS)X{EY~$gMwf4J(r{Pq(6lY{nve?&q5AnGo@LdTVIt_vbT2 zq3A=@W`7?L@?1y+b9q|WLhk1pTyvZhIBlV46*i~PZ-$feUmAw+!uVHn=c;P$$ik3| zSgTs*kev`ZoLJqMAqlrk5z!Fv{MY4gbQAT>oR0SL!Ff;8i4Gk3Wc`UqPI?RNkD?+; zMx)0SfCDFqUnkwGCUIV?gRdPhc{7tdFKaMOti<8N+c@>u@{{v(j_qA6hn*PpE`w8} zW}txabOxz?#GGbC%QfT;IVustEMtnZEp@*_3DzEAMo8<0PZK}ys*Xg3X=9#t+-aYv zZ!=e}+zoVWCJ)S2EbMl);Ep2+J)DhD%@my?A8TkDNCb>U)ax zELkQcS{05v6JFn`JYpNcVh61L(bi3!i`+5du#o6{DqDTP%47Q@*d+WXe|Qa2{M?rO zbe~k#3cwE?o8!E{d$RQ!ocBHX9G18cd~UKWMb(^M6~We0_0joN1D_nJaCixSn`D%B za}0&4LX#JAcH_^8keBVRI^Q2HV^2}iLUfkM*gZ7%Vzxf|qPHOqSU%11^z{Bh2R9k| zXkUExUhNgvJG`&MzV}kvrH3k%_h)>-+~uC_pQzX$0I?>&H0EGFJy1b5fuKF9Vj2`T z(kq16pQ+^_sDQn@UAhIoE&67XCwLCMj0Y(2qfPAht+vc-4c?e?T3GC)ps2-`U;?J=uL;#^gb@!2;zy~#ZbStS3 zGuioucIAGfw3S>luw9hD?puQ`={oQgXg>z#yJQ}7P*9lDKjkGeM6(Nc?7w1@)h z?0iUzSzhY~9Bs%cy0y<(s-jPBQqX$MP9JnvRC7eKsi5G13wbx$5yn;sg#troi>Sy6>ncUJ#0q?!zO{wlU5 z5e&s2O$Vilgsk>;+n?$f9JamtPe1rKDIbt|t&%QwQ90JEniWfm&-!OA%}dkM$BvKO zy%C2$<7`Pqe>lSPWj(RFseC^&#|F#1uf4SB1@IQA#dOXE6;$Fk2}vy4uVeBnyZIZb z0br%=Yp35*C_eSR#J(+y6F%E!7He<8ygVb7jdKf^8&_fap3Qydy%t42m3&)7GKdym84J^nf!aPHH$?uuV~T*<@^X5=b=eWGEkUZMvtKzv6bfV&6PW@7V@QDILms{t zDC2egPD%cskfFuPnks_XPs>Arshc7{tJ+dSRN6vgJ9qRR(^=Z?h6B`AN}C@eY*Y#- zA7={hPA@r(iH86V9ivCMKPOjV-7SJ;B1p;S+ois+URB9oD^i>QSz%KCnQ%GCl0JjI z8UN3{7pUN~NateN(EQt%9B$p}Z7vzI(l*4ij%a#?-HT4tldd7)yYY^vSFxdsydgJ1 zyBBNRZ%~r8Uh6k=9~|s?{tf+^JgV+}k(2{8(ar87e3o#bUv&29?P;alo@tIyrRmiy z^%;N7TB}9MT)&(H+M_c()2e4PZg{9_waeizSr#ez&PkGrM*Rxt^+rt+e}!qw0)hjS$W6t_RF&^V3A~v zym;2&Ry+1VXL^{}jlAOv+BIblGEoSi;KTYbz|y67vTg^h;6LpHG!;bJo{COJ7VUSh zBipp6E&|Qgj2e>V@@;f(8$5K)S#wd0cAo)nRFn^79y=T?Zj@}i{A-1`sW;0*+v$B5 zO_6XbOb)7J6%!AP*WRoET}U!_KZGzO`PuM077f^XD^N%#^W?I)dsRKYO_=3e1Wri3 z^3wQS>A+Eyk3h2`=0PVB;jCO{*mvzaoe)MYR~YrdzJfhSC8liCXm*!-L?^VG#hFKR z$$O_>6cB-|I@pf;0`9osnF~s*ITDWaFwB$+z?jnR=x$9&8Pz^1it2Ko|KR%!KDlLL z|5zXp?#ulm{`kwLy5Nn=;@LJHfm#xGL8HXzm`CH&v;aVR9TD!=_rAc*lzHs~AR?_q zerq~T|5iJ{{?2cWm5{cLp}I_kQ+c;WueAB+dx+26(9&yRn~PUU^!^P2cSjMEaID5) z=*?tX-BWyhVtrynwY)WgFdAdo2&glS+X{Ga0?N;A{6kg|XFnEirDGP z^U+Z&Z7K7Ciloa_w*g5`EjCZ3`w1MBl|Fd!W}}s*k=J)cF&tQW=kKVNdq7rmJe&)o zo#4(Px&N$?axffg-8!42H{I~v61FwxNsX5KTF(Akb^`CLz$N=C64zsHjv#W^$D+vm zm@apd@@gxDPvM17MNUb~@<`^_{fP)tPbmKFM8n@#lCFt_hVHUL9C-bqa`@PRo^svn z?a%iLiL6FF;GfQ_J|DLV&{sx?t-|ZbpP&6vyoC8vj(1OFe|6wyV&{B8I`UubOT;Fp z$0N=d?~e77eC`#lXEPddt)=X(ph&rQ)D9NtJ$DgBq<%%=%sOQ9=TStK9&!>-zZBr3V>m#|LFzew(hxL5VApnYAK$0DH zOVY|n8Awrk<+nHY#bnNHT;KILpHr@hw;!(u%|p9x4-KF%H@JrS4YD`H275L*oI*5F z%ATze^*XNazjRRFqeI zg-Vj-G4sof9a9sE{>n=?hfQH~BL~G<2~EDss&emV0EL+|uY+bqLKe|5(@5b}_aR>;-?4AXvrdOP?akCW{Gv(wG z0aQJI|EkP+d-L{$y|`VzA%U=_d1;ZRrD3$cQ6%j&D2~2T}hS zdE$9E!I--IF4BE@y5_sk?*DMjdo|12;R?f_TY)ZO z@a4N>dM%kVj^Eg2E9o)LH^~j;buu!PmGLF$?uMH;H6sh0f<&Pu`pDjLGWJ#U2ww|F zEw4DzqHBRz$GrUFDo)ArcdRx1w?S68h(I^!KnGH%Yx`n?ujm;D zYiF4Lu-AL)`a|Z%UXLxs>(@&;hw-E6*L~;&N$*Y8Js!lb?mG|jOu=enQXj1625k_f z@?dnNC3MTdIitKnD>67g;?Fest*-<7VJ5zpSuM47?RTE+dac0rknPpdTlzJ;)X36) zLhL@oBD3WxXk&*IGMFpN0~gEANE-A#H>bs2lOxmUngU`gbi;g}fYS$JIOrg`se_df ziMYH`I7R=9e1Q!g|M}uE^ge9|;ZNVcyjy+pV{bN8GC?ADdAq2s*895zBO<;YtHFt3 zgew{LEV`f5emiO)N4iKM9@lFJ3C(Rb7CCeOqOYQ=PBsh1FU^B|xyC`avl#iGTPmz{ z9)65jkKSxGrh8oX<%*CO56*{2fsj_)Wa`^py}1%2+Q$@HgeZRxHt5$EpplHqDQaOu zP0Mt%qC<(?LOB~F|A$P!eih#Giu%+3)f!sZEMc|76&Vg;;PS6!uXigc&3`Fb??h2W zLO<@+uL+n_Z3B-WWJJ6uYdh(;ZiLG&h$8yveK~YiXySGXIlZ|o(@-i|k2JC^z6xW2 z&}IAG_{!U&k5-VLzru{ufRTc~~Ethkcw{!jWEt_q>8xJ}-gC4;vBytUB;P`Au6 zPm|Ebt>#e!?rd)O6;m!x^|m^a&8G?gn(1ppg&n6mQWk=4@;)Mx?;HK*vb?sg2SQ40 z-9W~^gxPXJLpkqz;P<%Y01B%}tCc#P|KgCGSjy*csv;$ta`a9NAG84bpSQ&UpG|M( z8V29PZI!)P7nL0owKH1UPd z*C&^s9%c64!qES#qZq`ofe7DR;(dPX@_yysHNG5eR8L7q!xp#HoOqvQ-6B+;_&3Vd zf32C?!NbxU)!p$O&IVT$Vb7kUX>Z%35$N=P+(z)WQr)GQ`;=N#R95e~YIwLg*8J}A zu!ohvee%o$QypI)G-sQAm9x;7z?NCEA}?!&a{#87LPN7 z$4wQ#gPmE~t-VKnqg5LC5O&#SRDD?MbbJwk;;&ORKanA{VY5x3|*?3Ot!CJyis;qnz?jn2a=MTz)I z$jzgnE!XSz*U2N@vNCVKFz6@x^_GMjz<~w*PQ4t%W>alsnW<+;`ifeMldK}mZ%*wn z^GPX`*zD7D_D4r#L$*LnyA!w_zbGuwvv^agC=|;-8lbBFSBTMmPcUCl3A>=20X_Xt zr9dFG4_w_pT~9FV@^388VfW+6vRCZn{8QVg_vOD$269h?xc|3@1~8pv%})ryip9&v z@ou}jcp&x#U)60w@Q7a@9bSJDqfwfK@e0|N?9F@2{+0}Q_F_ix)kjku zIzY%xPs1QD7q(k7_{Dse;44~@o$KG;Ugz59-+#KA7O*fBiBAYn3E~l%Ihya&6t#-T zUdm60lJyy!ACm27@);bzL$%tUce8UMJuLZG6p8*t@%ztk!gp9!<#eYwv?E^%IgkcIE_pfj$1`H#V<*ke7HCEn zo8WbAgsSo26!mvBOA}-CQ7x9y0LAa(;Hb1Nqto_`2SzvUD06-4T%W70 z#6XkFYo5mjWlUogXxDG4%d4JZ*y8fLBuS^>0PHr0)WJ)dClZ(Gla;mMf~xR>WFa5% zAKo~CrDT7UJNVBvqh%s!?r6Vj{6Cc8Vd8V}zhl`tutjs%`ZVql=qJK^LX(&nwRhqs zEO2=R)NMX9A!7YDat_jd^D-T&SbF>0YT6KhS?LRVsakfxfr@``pNdHwzNYp!@lod@ z)7SP6mHo)jN}gG-C;u_F`fxrE%qf_3B5t?!-5%R|uR;ndlJ0#kVdSF#A5{6Ht3oFA z=;S4ts^B!7&HfZ6O4d&mn|@S?%6FPyC`ngdP2r#V#i?He-*3IAxh zNYm@`^{#LcwoFmlCci@|@TIGC8gc*9Xw{Tk^M7Cd|0#esdzkkVbi4r6sXqWt7l;?$ za;5~2kDLAhd}QfZg2RSkQP=9osu?an-TEn$?*_2C!z>rcF?Gp=f8^^Mb{(~(r93Cx zMF__(by3*_Cq_&$AC6egebw3AHkLNf6#Pe5-PH}I5-wpXp5jyHffG2jVhTiMKOyQY zY?vVv=4;-@w!|(=mJNuu{%}x9M%hl}6Id+LTaj^c`^5#9Lc@_V@GDGe`CrffKIr+v zd#*l^EmI7Kia(4V(8#Dd32)py zxLB^-sZ(&*g+cV1t$4SzP0b6}d~DS4FSXc6&V{+aD;&sNj{m~%;fft{0X@6+fX1c& zI}zbYBBxPep>gn%E=5y#3mYGa2>&ULT;U&#Qs+ZQd7t;1>uv$51sV?NxbgBu^ht1_ zB>Hq=?B5ovm!o^;v6F8-OFx<8!ngF`hE)GoazV%zv3JO7Xn$PuG3}gIj9J&?JGi5A zZ1C==RLu-d#qE8QgdtH1>dA48!DG(BTY)73$M>BoF8xRYN*56N+ei} z82&Y7g|U2ryAXeV#(J~GtoHwN%h`@myCuiW3^Tn&i)>s~3hegv$4~g1C4k)aYRkb+ z42tW%1+X_F?A(iV=+kt9X-_&;-@=0F_p|&nTAF!QJs!l9hugcds@|zfl=3lNXz#X_ z?(Oh9&}M65{u8L;;l@EoZQs;f_iwD}8IwB3N`>Xs^d+N*vL3RYSf-oxvX2J}o4)DV zcsYkB?ipq%Yb(ssj~yY%-mYiizHK_@lF`xSSu-eCvV<&CpSj6XmNe_lAfN66V{!Tx zb5CxJs15kCcEo^?^1(Ho681J}B|<#lJL*^(QAahyLysY9+Jk;=UD7k2acrmehtvIc zDsyIH20W-7aZg4yP|?$Sfi!V8|AZD~wyN*_n1W}6kXDf2FO`>%=x7j_0Q}`K`5C*4 zte(l@wWOKGVAr@2U~rR+pjq!YM65Rr_b0?O=kL}GhT;7gy7c};QEL+vG|tU7@OHXK z*U1_c_;7|EygxD1%yp69;Uvq?!djAh`+d^mxI#UuN`OcN(;cdN8pkGLM0t&{WDtq`q3VmT_H5`1_lZ@FkXj8OzG)?zZ{hy*s3RmmZ!L zmG>`;EzlySiiSYQI;y)BvnDFan@UV;Qz#pmk3!kPTOXBUGNmZ878$jw{)o04A|I%M zY8MiQsYHD9@M$~nIJfdgS1(=rooJSefGl(+rRiquc;wV?cTK_^hc4anG`3XmPk;$f zG-MLOEgVnk_bIM|6L2Q-xddxxem7G`m(Ix>rel$z@T&aP@_9z`LJl2{d`-h%Cf^Uy z>AlLwOtN5^AoIb*mTBDjnqt zz47q9tc~y0e?%7_6@q}A|Da>GfWPm1k^G~Ix^hvu(J`>z6~(f&SXAsNM_f<0@IRxz z5hkkad(uxF&y=5N?V5?u87)cEQ-AJN-B&k2N}lYzQbFlO>|PM`pyn5wy^db&>E^z( z(i$R?^wkSj+J57{K3_n}_K?2XftEM>91b3qdJIosZOc3_jFBy{FE>|~qAwUv9T^H1 zpFD%WF{D+GzCuPQHD2#4WT-eS@Z?gl4k{z2nKtFoQbm{X~cFq>fi%=_Ud^xFVYgEDIdZ*aC((B0Og(A*m5%m<-E z(u9W*3x$dI?&Z3@6;S3vTsYY)2+RddC2XoG%vNm`6|S&D-;#(%WX0q>bx1G)3h@*v zS==<$+p~Gt*-qs916%77J7oz|gk1jQV85TQxo8g|pe%~xfuFvnU*-0ccXqo3KX$Qm z+_$~wR%fy&4NPFkJKt(uyV(WlrvuK~*rro5R6{$PreCL$e^QNIvCV9W!K(vvP6uG8 z-#^iXTP@%0s$EMJ{>nvjp5HDsVyt@aNQTU!tCoMk!J5Jwo!#kBe97?6KUTDZawA4) z^cb~aj*CB6B+ioLaE{5Ew&j$3=xKRj=bMJ$A6h}wzBH93mg|aJ$|MJW6IdC-+>NW{ z(e-q%jXInqO^93K*YChxSncnulskV)qfsuARLCC9c3pX2@X9T9>)&RMz3Xy6{#g}N zZ;(A)w@f%MBnhO8NPf3wTxdcd!&)4XY}bMunBq*97!@1~mLhx$s^pM6HC3Nt5ueJ|Sr*K7DD) zM4sMOS9_^ylv8bixPb#VwTH8@Lw*+sR#=|Wwg8=^wc2CeU-lPcZ{l*f3tDtodiN}Y=jZJo3XJuyy|u#b0x2E-#kRbe$#Lae8%DEzEt$u=0_ow4 z$&oI6zP+IUS8gI7RBh5&ms7p>w_HK!fx%wvG4!EUYbiwcJ9i4L6{=Jm7c**`f<;=R z!EK=q?bttLGdDViALCv5eYn#;^**P#LMN$TsGe@!yY0LGVC{(VHi%0WDCPJ-pLvcZ zVsm_=&AHTaw76o%4Zu6wSOvEHA8rykvGx22$o)yc=fc*K#=I7|JstYej;U9)rz<^U zAORc;3ns^{3sYwH)rilfALJX19#n_B@Eq$#?U9Az!V1B`B~R_SA#JF;7?n#C%ai2o3auAjtt1||+33{5GfRrwI9oaUd zNBp$a)T>RQ86aw$-CZWfTn#nCq@cWsS7?*@H}93{N~)Nz>7R~>KAD@m+CBAbvXWCp zzJGg}F7U(9XqT~2I`#L?!3x}%1rEMp3(5%IOjjec8Ng-p9jxG;%hf@(78M%|B>wO{ zN>kkL_~V_QA1C*?C)RCCCcd*s^1zG@;@Q6aeY2mTMqk1PQ|;2$WisavL$`}K7K0`S zeBb5Jt>95kel!fiUZ@3ULv3u6o3Jo_gdo5q(_2xpiL_j@w4uP++(9{`Nk)DtyZzsb z)5mDKf6N`XVhx0Qaz5`Aooc1Xc#T(I+&{dE1S*dU_I%G^WGt6e%AdCkr$`Y_D&hcI zthQRAD3$gMFCrdC%25Zz2v$aYN&}Z=2uELWr{*qHMzUn?6oKiL*U&_B(nZSudJAeJ zY(WeTM7)?K6wuTzU?w=BLC??3GB2m2DuLXu^#p#8HJ6WwCv>JYx(ZbtKiW~&+gVh8 zu2hAY};;9B`<&w>FKQ3sg#}fS-wq`p28kq4PBh?kWRJk!|7{~ zbi{M<&=OBJo37s+6+qw1-VCy4;CD_Dk?lG(N<{F*XCE*Qh?~7C-BSd(f5pXe(PMPB z{^!FytI8Cz#AO@0Jw`gj0@2xq=8gl#@~#h$2~5Xk7M`eIdS!lmW|7~XxwS$u0Z zm*p)lpK9#$Y7_^?nySmrg|}Pe99$*y|foG)WHeJCaMcnd$6XamBEs zXLi9R6J2=F_*)6T_#^_ul*%wlzxWxsu#V)0h4~I876bNQdYJTp!Vz^jVB=@Bnom}l zKV;DAXVI#iY-zu-v8jHCR@vG!T`g&X*UV77g^04}5K!S@5GNI8-BL$+{ZrXAT}r*c z`@RvmWr`FZWkp5y^Cl)vpXoDY0%oH>t@YpwNEL4|Gh_A37m^PjguVz3b{)0Puvqpz zL|_DHNq#@uUHEx$uDMfzK}>rheo%xZ$q2EGie{|I3BYO1uS;@&HV z91kb8dOo`Yy$ljUfZh*kLNrkuNe(xCaop+Xp%Z>Cuak)faxXY0*Kz3IA2RRNW~r?% zt2!i4s;~rS+q%slg7v%eOHZ%n1EOLC@Jz)z( zw6bRjmP|<%&0nX+!FUud4kLdjN6)GohYz?1MZ`Pco-;`By%g2bat?}Y=B8O=%)}FB zGOzeA={>{jHov5>fzou956XlbJxpc^k(f9bs2HCG-1t)Vh_y%>T-GZo4LB`9yLq;x z`aS*`27~znBH1dBf(0tgGWq^&gAOTO!b2_##+b(Tp+V(8R@m7?5S(Ht%%(s5e`LL7 zR2T!QCxD2=4B|gF_&=ySv*2cL?qS1b25!a3?UqeUQQ3W#%L2J@2{Sy7$-2 ztkqRh-PK+FJbUljj~DN5DuN>hiG;R&3LUv9E!AqD+3EQd zoYiobb8|chF9xnq8kmDTL4r_{z$<*r?G)|0kWM zg0m4CCJgRLrB{xl`UQDKbt`yfyH06Yssb*_jM06IC@Y|@?d>)#hLnrml`Hyi(ZoI^ z#~l>(wTSVn?Dz$q*!zdwtFpxB_~2H;H8>H|QErAS8!P4G!Ks^M{!7pj=U~)zB;XU_#RSKXSXV>I6h99VfVqyu^ zTuN&uD`E2_g%Ruo#lCIQF(4I|mfVrUx;&~=jk!UoSOvs+tk~_O?>1b3h_7$b$ z_Swn7Lb8>-gaZ0ayI%hbEWu(#pQ>IeHiH3rGjGrh=bRjr0K|@&^(4h7>Q>hs$(7_{B0&bp_ahg>a5XIlxNfk_g zSF}bILeN??woT!Y@gct+taVY~jA9Vi7OWTb_Y_f@H?Eqts=a1XKoS*|ySrB{Q`K!x zuA>Eg{~7%C>dBdP&V2cIx4VSgl4T+*wSbDHXMSsLjWJ;7@b_2`ZkwplUoc#RjP(@w z{;mzZD4JDK@ag9dYxn7z^)c@%9?+}rIv5P{S-ddK#UF&K@>J; z1|P!=&6lpLCD=JRztp#FK(c&9%M_=Yi<~*9>@qFTta9k}mYixBH#J9U$)ay#Pv zA7WH3X8GJYQ9nZRyYXa7^Il!6u(+fwSTTTg#nj-ODJdL*@;UFOWO3(!=ANJr{d0${=PJ|)cn-}d4expRtCrn_2EYR6a6?wc<~>rmge z@5|R%E!1v%Zf9+}^V{ z;LmH;u5ybuWiq}{9tk@5wb(qd$LZa?@9})lYng)%?-iVTJ7-*v(Sh|VRI0w#PmCs6^b!Vm~TE>Ru=z z<&kLl<@D}ne5A5Imh}}@edk-1PPG1RAE|71`GnpzJweYzz8v(=8+$9c+E`%4X{uYk z0Cu<>^a#;kSDS}z)g$qa2?Rp3X@zp34C*!N$OMA&^=){A%I6`k)1uU?v_cPdE;kG7 zC3e6v^wC+_k-v$ggI;>?B)`J#opKYrNi{3LEQ%HdUo?4b1>ksOYhpjkfm-wRcV z2Az&AC8T(*KshpTYa;Y-^b}nm=ATOxyER!MR#y{WSeW|^AgIbx9 z(-CiwFMlaT`LO8fl2ZEFSrd^o1^G+7&WTBAt$-(xZOeCd%h2}s;q}IWd}uNXX=e?0 zr;HHzwT$6*!6zlDOrvJBww#m?A3k<2e*+q-C_6_`Xb6L&%cVfE!;@<=-H*TZUvxM z-m+4rGmuLCsC3SBE%vtRVdDNSl{=+}Zm>-XWg(%0)R2!jcoHB6d@|TS@OX{`QoYef zJvEq85kn?G-8mp5(_zNMmv-8O$L01c`21^r1vwy0qar+AaAodMg{vil@{F87K08bB z#De1N)nDh~ml#j{>CMHm#0#k6OD2LRdyO2hA2dzF;5XR^vW#?QRwk?HyE^562O}?7 zfHH)$hm)<{V`~Zeyr4^!WpfSGN?Fps>*qf`^(^-u)(Fguv-^jeCxoFntq8=Wb|He- zO@%QIX7jj^f4)3&*^!>~QfNcBgZ=qu^G_;A*ug&Ny*)Cb0d4w`9(YF_M8;p!cbV<9 zcsoUpeb5RAz(ZVRn^_``o9GHvID-)e&*!JJ7_e{Ad&~;H4WP3sv4-%9`*O(pC&bf@ z{8;i>o@+5UnoZq*uq3EkX3%jaIH?-c%qA?O@zHC>v+{cTRgGu61vj6hPspz;MVc?84mWm6yfr3&Yl!T++44qP(;k>FX$09XBwwh%l|+b zjW}JWEc&DwYE;H8Iec8vT&zFC;&Vk71DH2{t<96K8X$AvQL5bgK(YVF@;!6+a$NaN z8g89ao>I>Z-zi}%AUE*tmT+JO(WshL@)j$l?eWk^;D$T`aQcQ+mPexGw%8g%m7OD$ zj^2eh<3CLUZW4Hp*reFvN-xvhe3klr;tJHBE$88?4=~HD?r8A-I4~YUW^t7}-t0snfKk!Eni0I8 zy!2KU*=@0Wx_ODZIDq&2P1nQuv$5?#3dd^>wYIdXxUIVV#zVn(Fz2Djv1-m3w`)7e z)5LkgS>IPL6J`2vuQ}+c=?l7flna?8lq*?7us*-!NA_?OLz0hn6K#I>Lvay25)tUK z?%-3c(J)9{DOY379f`1;(ujEiQ=0ZreC{xKzJrDktOJh2FO-G7jU+;Es!C6cj90>6 z%CD-8`KJc0>ZtUNsyNI-%$?%h^Gt{=$7dQbUPft;B!-Hc*{&sVc&~wvAJLZJ#yu-%Z8C-cyJflVkMqY4gv|| zn<%QPy&azr=yMo&{o1mbk1MaN5^tTO#ZRzAj&& z4+7DFThOm{47NtKcU{jz%1h=-ri4<2+|FKfqrG}M zk4LSW49hn8{F(C7SAOt*yK)dnz?F*d?b1`wDZikrh9TbvMsbzV|S@sRY6G!S6KyH zQNN_vBxOfX@NHJ)nvi^S`d3xz3B6hN82A zht@0&PJ0+JT0OC7(Sz)p$%u*-?ZycfR=0wOh2|%U%RJ3?IsrgUYeN$t4M1!!|SAEEXyg9lST_{u~@!%(Zj?jn|7SGcN< zj}cY4xoTM|J{^FISm;=o}HDtJ%Xoj$qG zZNzu`?8ktz7%7?dh+E{pgZn?jOeh0z(HU4i`J}cmhUDxAF^wpld#Leo8o+P;_eB2B zv6S_@xhPTdghR<64YV?f0hoB9nHc6$XrPxm4gYt~V11a1N+)W=+xY>|3fFVhLO4XL z$A}}C;AnHNZ@xGhM!igqFp{OI2}Cyoav; zwu#^+A5ZTX;&*}2`*c}nQTlB?aeqq&+&bliGanV zKkr{9)kik|QMJ?-1TYEvVDtli5?a^^DHcAQI+msTZ&|IHQd%|&IGpJJN*4BO44urhUMcxdZbc%0n0?-Ja*i1u%(+bGR9@zKQndk?>(spE0 zAau0_qNLs-pPR#xHKe;+gP*e3I6N=4Dzfe&pOscAU#V77OeXYfpB3p;n$Hxaso|)7d>)HMw=_U7G*B z5%1Qo;$IIua?vX}fckmKUEQE^kOU_9dX(YcY%E9${{c>joAUaIE{gO%catmt*2(H&JeFp{bpStweLf zBVTrM=-TXWe}zSy%%)d98dh8sT*%AKI%+yQev`ZU^Qh)t&gqJ@c{-04cUp7`4KUei zE<*m4lpJ~E;=63}K(!35DYS<8rhAx}s!TD+d&b*k_GE1QoAvA1Q)Sb6`4}Ruw5=N0 znyMwbyLA1>TE?C6iSH70A$L}ZO0_$kcs!OEPE2BHp`VNiJ9baDq@!-A^)I{T4@a;8}#ziL&V(5IP*@m^-H@rQTf-ifj+ZHHE5!G zg-V#qy(kyQ^St+6O1@4gN3sW}{zU+d?N{m^=0c&4zDTt+qyY2Gmv~%6pIrvswM7Tx zAq4|6eE-^1#{YwDxSRQf_ErRBNOzCjjFZ4qId8RBcW?6Tbik7V)%7dlN#^GSj~5=c z@tFj$g~$AGd}MK3C+r1Ab`dt-N)$KTJEM)E7^i#pOUCwTg3UT{ady!_xza6d??%w4 zw5dYoz8tfLV>8$D(}&lX-MJJ#?nPpUEO+sw11_Ps02I`7x9Gvv{mS$wUoRL9Gn+@#T*&S9>W7!s>pk9 zrt&=3p@y3t6(=Y!82!7Lt_^Hog{O5BWe1qI?f75KA$s1+~qhU zpg!6yS#s$1a)qf*ThAPNQcSfAB4xy-YRCYotqw5Zl`3TUdBZJ^!#UmTM2VY^#h*_a z7QM}gy1MtJgXe_z8~AaX9t2!{Zt^S-tgca9t>yxl4u5c2^>H#x@dq3)1dq_pTDf7? zUCU&muYN9lz&Z?IYgBCEwa1AOkiz)jWWPfwA^3P(xD1Z&FWg%zZ1JNNjh&d)<(uxuI;5xxlD5=Jv62^VeLIlLdO7rA6;SNCUhQTG`?j6j@U&D$ zD-3{!dK`C5|Lmc_xgj-~-00?V0EHI!&AIZjzv;T+FCmEkQPi_}2jJYoR3&D97#2o7 zyhS-YrR~Yk-ymCpkf!ry<3q#h0X-MQ?DPUxADo!2D)W`9d}r*ZiGCzD?y*kpRG{|} z2{enMz1-dbx7v21oylwK9wlOjz^gU4v_f1mtPa{4PbgfqB(4A1E$hF*0SpLuPiH_# zfCy^j8qYZ&w_>>34LxgQS5)Zxm4RJs-7CpL+JMlxF?+?>Yo|+PWz`;jszFxu{38y30FgY0lkoa#zBJSRiO&|I zXnIeHLhNQ277peYEP3lRd~B=1gz=%YgG9#Sb?sIg`E#rks?I}lx#*jE?|r9(K?n2x zC|k#p-yV)XE2UgBROAQBj)&e&xp+~gCRISN*;v14T)vPmkH3~T0?sa49()bF!jmL6v=2K8RWK-)WlZOyz+&jhQg2@OXyG$*V7Q~JW5}iOp z$doadAeD5vH9owZG`U(MBHh1X|4fm!ed0NXWa^JLT|6cjbem0GVp66(8J*ZPda<{` zZm_q8lRc>)%?@W@_Jc{TCqu$&+aa(Gp6(2<0l}iyTR{p)$|u#z6Gx4*i=*xOS}afv zDN`fuF4T1qCN$vGr6D+N0@iE3tqJKPkXYoX#%fF1)y{p>*TlYRlj-briE811-d7^a z_yXTw+Q1Z~$(jltlV9SGTdv0@`-)(6SU((l1F z?O39sWlxMcc15nWg(odlDp!%Y2B5j(k8`hxLY{#Zub=JvMC7lHClbq0nQua97}3v| z?inuE3rR-nZI-VJsJB&Dr1qAS(j+D6V;ra zX;Iy9aFu&UeFd?Cd}XW(I~S=!-5wbP0%V#s>(XgGTwile>b<~Wo}-sn7}8G_%<>#= zlS~?JH=FyDUD1q4U*iJFxe7gVgpy*nY)L@eRt`rN zUC#uKR~)o9w_5E}{9=C!x==|PGT6*thP1xp5(0!g25Vs+$dyFG*=4IBOyMTE_LlIw z5-3<`Nxdlv4j5{`l$;xfW@0DwG@K{mPfQ3ibz~;R^}Mb3*YMY4wKwa#P98_twC;TJ zrwmMU0lE9UCmGU|>45PDIoNnLvwq8svnUxW%&13opFoa{6S26Ll#g0U8Us$agVVB`Z0R%-$Z9A*d3%0nn0aZ#9MQ!_d+PI_m zdXCPPDmM5um1$09>5aCGp@M!8{ABK+F0%Pktlb2!U9NeceqwO5yUp+gIQXBY&O%=h zcXW4p=cjOJX}%G~z44>}N=J}dMlyUNM{n9jqIu)r0eneG7*0-2hsLH#(=l-GM^&G9 zoNt78yK*{D>-%VHHjx-pVzCFdEG03=7so`@ORW%*e>QW>Muj_HSHEcelvgGiRzh>( zEHj%J!ofc8T9CQ&zOt)e4o+aw>DRqQXTU>G8B>!cn7pq*3JDLvhNz|zugNi0`IQ>{ z%D9W3f5+)CQIgJzt|3QCmK=6rk%7h{8{J-7|W`y&j-+ ze|#0U5|!0uo?USPD@lcX;Nz#V)m$s`GjIZls?WwStd}B+XBQTMFRgIa1E+G&VP`ZuUjO zSsyrxVi5?^Ce7FKW%jO+`f1O?-9y;KPsPiSQ=A)BHbH(L#%Nm#zugNvgnlYRo^@6) zb1Kz~n`wW?q8H68^t7=T*iwM}RfM7w4|z1XBBr1TS;n`hZkwl7({@Zb31Ly_kYqI6 z(Zp)~Q(OsI9n_1l>j|x3>ku(poRJJF{scQS674X+FVQpL9KT2@I;c=1^{af`LX1`L zf?R&eSNWEL)|{X!xhKKr$xUHCwrpxq{AyWF{kmf+maWTp8J*l~fkEU*!@Re~8YfDq zb4<$Ldg;$-WLsO1u4mu$V@iHh5{*XOY^hFfw&1+O_or{*jHlb!5GX*44%eMe*S2;%A&laYSi-yzw~^~0|&Mcm~`5s8m92}#Kl|j z+|w#*$jbCa5N%Dhg|JVY&W$rYdOE*#bKYQ|EC;URPZ&eL)zGIfa?_mzd5Yj^pocwv zUgJnPtE=muo_?6p1_)PRn$`mn4(_z9uU%jopcniL}en`=Cw7_*e_mQKrEy2h(6}O-p-e zYsWZT8=({RO`v^%Cq)fKuS^11m7X|latnKf%O@6XRf}b z27Vj_=}SdpJWn-H4s)GHrCbVlccsfY_(Kl9)2}i4(4t^ogE$MXuH?&Xw$1|Bi5lBBho6eiyUA)w)gILKmUftl9sf5|&`fk0}@=-5#J#1HJ%*0^D@Vp>k zmUyZA&c$fMl>D-k!HZAneK^>sd}!L2d!ED5B708umyu|gLwPVD{;l)bO)^QW&gT@Kn)x0IqVI}_;$w6H zi4ldjodSKynndLS!n^$k64?|=^07Z-W>KFw{@<+rd~P<*s+=`6V@N)Ct91g zhde0xY+pjQ-Nxgngko%2-q58h25Os7om((`g46CH>q^_55r2qVlSo#!UuvxUBof^? z1eTzyt83`fNErzxk){8z*Wfh;@W`@f90FAhIejDpeQ6tGdq`2u_u(YWd%bF*U~>PW z{fu=G4@eov6(s-n1uaqz*l1Z42Ab^%&+Rg}`1-02FC$gl#xe2wT*qL78Ub1f*iyA> zR&AbU{BUEz@3g!Ft$t3n5K6tO^s`nUA(LN4QK~fTy?P_B<*`FUr(dQ+ZuW5 zxE=~{)ZClf&dwa3%UMRSf(Ag;a5Nd&7DJ|2E;VNenqqQRo*o&8GzsUQ1U9fP&c8yhC`c>WOp_hyq_ zrBlzmJk3SoSuQd-Wor4V-Wrrb7qiX}PQ-pMg|MXJu-Z)B!bxXR?aD1<9Q8e|^TY}I z$Jyk|RsRYGL~5>mV%_WRJ+hE!i4vS9E-MhW`EZWG;tUNC^65hKUZvc&csJrB%#QeR zy7W+-#k%Wk1cN|{3?lV%IXEr(YCKECi8`1>6fj2;@WS6+TaCvI1TsO}aJW~QL5RrX zDGN)>n}69b`%G(x7f6xi*xdsL%s~f1>inC|q5QYDE);@;+=?tKLb&@Ux#!ww@bD@z zGr6mq8}wU(qg%>OS90W?7xWyhCsrze!g(IN^P5l3$D~6hZhK&5r=zG;_}sMq>7rLs z^<5ha=WK~?K2%CT>XmlB9h3~BVgO8V`y$_|d0xopSbPyVrA+Hjj8+xSO`9K`$z#wK zt+=cLb972RlSNriYl;$X`E(9{^zNDNdVMKNrOE70r6PjEhT`n#%?iJ75{qF|r2QnmngB<;jfkB_GM< z5pARHyv)+8<@{9`=;0Kjh`-f#Y;L=`e9HHl93Yv)y@H<-QlhKQfoR3xACIw}bg^~s zQb+%w2*XKRjb@+`9)Su(Sv^w-U46%#9FWKGt^#eH?1oTXp;L|sxYhM=wwoI6>d6h# z<_cQOPq`k2;@dyT#_7){!WyvoGA*y1`Z}nTs!cu98JPoszrwT&_BB@#b-ylEe5?aF?SzXr6EuF$6C9i>DwYLUTuju3BT`%(SaogxNOxuHA z#0n@5z|B?}{&K-$qKRXzNMiCdJ{KH0&AaTZ%g4W)NS@|be(^MUaw!{hPB9le-*rj8 zR3@>JxCW9ruW$wZ)g-`HEers&ffjMa)Zr$Jyk!KzHzLn{aoeK13JulFBNX*P9>?u7 zCUg3J0&azE1@NJUy3&8X)|yMQ65queo66BhH=g$$ogRr@+m7uOH`@`-M!&7{1@}B5 zk3@!DQE<@7AGqc3zbt19l@yow*FP>0W8dH8n@IWM;)j;0PR{*SJz7r9&046x9$Ir8 zOUesRMB6*M3|W8hED&2iUa5ly$2nzN&y_HnpH}5dbX5O2a^V15Yy%7PFu<3FY}vC&>L=Mn)8QvqODX)GmA07+2))8{F$0jN7}EV0pwzYG&nV&g znmxYOSwS2grS94@dTvCPoAMm$1cq*EI#GDcYDewY9wvRq0PMQSr%YC>amjX%ng5ibt=|3Dc_o1 zLf>_;-7CH$Un26AO_VJ*6{^4AETvcltfI5FKEKrmjYm)KKN2sHK~v_S`qoR9%(RAG z(v})AO8(_W=Z|hWMX5#M`Anwsu>j@D>t_*=B?;uqia^ZTAi5`1yQN#)Z@?H7c=T%KS;VnqfMZdp zY1bY76@Qzu!8PiymbUUrL#lXXKcxL&zI}STRaPTl>*kR~df%YU>M=tenAo7wW;b z&n#|JuEDwO*M-KnXhPK&X!d?7eDgOYy3lvKe(TZFIe@K1TWX&_ld+>zww7_e!3pEf z=Oi}1OP#JK|D%rF=#P+7M(^ggWw!YPgf%mLGYZSST`b6`WhRWCC6c7dF6PWv7EbrS zOd^5c#woLi)g1awlm5i#zhiDs84CW4&a%+A!zI7M(30mqZP&lHG6LS3Hab?^+MONF z6vf%k7FrC?Q&uOtBg4UB?tV^2KQVB6?v<9}w@jQiPI$#F)Assq)uX-H7 zMoRs*e^_L_O&$jpvq&9sGtT?jX}}cTVZJO_)UiP!w^=x z4cjvXw@F_fgH{nrt7WI5d*a)aS;RQ?$;uqXnOTVCbU=Y%(h%1Gh-v4z&9pt>iPJ>g zW5Fh+^n|7O`cCFjs|5vVh6=F>C{Rbk?8BI+@$-a&sA_= z-=<}FK9S6mRlRLe$}qm?=n~0{SP+O3A<-wSFBRN@fs^MljyW5y;=yY=K2M~-=HZ@8 z6C`ApY6OT*Gz-M+QwL5Z%Q$Q;L05&YPXbP~EC|xSdv!xu2E0zvcc}x@*yZdh#fmx= zjn)@KW-0pad?rgp-v7upey(R|@bD_B{NH*W{iC3uuD%(h`{T;^_@n_3es|3X*s(>)(rLyPVW%u97 zaAV{CnyxUHvmXFcr}eTpwo9yL zSk1_lH?SD~SvS7u8ii95U*`$Zn_Jd8P9e}M z@Xw5V*VYfkq>{)mjIJjoed4Va+|58_s7!(?|LGCm z;IuDAFl zqT4A=Fx8uGD+S@J9IgzyJ|&kx=J1{s70&DjNl6@pR@^7lnj@PZL5?o0BL1>79NWQ~ z7_6?B^k!4KsO#C~ys+>V>k;Ksr+s4~qv$k4F+HZOR?kfq)mOxb$oOMYJd9+j^Wekd8#jM z?twoK;IIGwJp{&~@4>cQC*~?U2(`CklKmE{OJqY(H$ zspr4SiU?Q_cx$V!w)QSO2>fXe7`|O*7>$j-Yh)2@c^~#?>OLe`<^?=ZPzR zRzGUX>?mCcd0DRJh7pN-;$gZUr^+?oY>kv}hf(_1O0yRKy-Io;GekutD%TE2?WeAH;!g(Xq5Ev>PI;y$hYDv?-Vl-d&8P$=P0QMFsD!NB5 z2n=)Q*}gja5Fb1X15KLI#8rDck61uQQr7j%WgIY+FLtg!7&-_taYXQ@SJZDEWs=Cu zmS_f0_8U@*ox?;JhdRC51x!q#`3-)4#OgOJUb~}l10^1DnT*cEDQSM>!0oXt5?}MT z$F|iUvIP5#vtfjoqHQ1a%9;^FNH=8D1XYI&#J_mdrKSkGC|I zs_rRHg1HYktj6^wvzG>Yc|vRD$;z&eNVj}q%-6HB0r7WPzV8IE#443SlVq?MQqDf6 zF@KO*H(5>v3GpbE_#FP^K@X!fIoy=*3Ue>h>?K6=6-rUC`#>(y#+;3!QYKC>*RGXB>YsD1%W}5D^&$%WAI9^~ zw|IMEw8>2EP)rcPC!02 zR2nECg5Na9b&WtXFe;%B7^GcuVE2r7-JVptqS%u3r4EdEIg)}L=G^i~6+%rL?0v4v zoB36{4CET5Ob(fI)lU^|VfR#adTHQBWXC09#tq_G7pw5~%)kWXzNV@MZanqzK>?Z-@fZ}2RYKYMXcFfOM-|A`A(wxos)XL`ehc3Mh>|@XS{=?jizdjLz z;D$Pie9k-Uf5b~N0Lo8iF%w&FK`y^SQG-2UBtRkr;Dab%$;>Wiqi)3;h^PbPM#jzd z6uJ1ME&8T_d|oqKuPaE((sa$W+v?piXHGR)$IL%6j^X%@lb)WO-WyK)NrP%wH(cd*sE#QQqyZ4*3gbV?;w;rO@Y&Gidj-qd0*NT{jUBGTs zM*$h3&*5xVzITSmF+DP8|F@0G>~`99JJ?P9=L_#8a-~O1T?zoXi5kFZ>kt zu@CEpWPMoAgWmc&c!IoBW5bv#L%HQRHCqF6Vd)gOs5bjGPT1pYSV+AzO|VO z4e9NG@87(A+b$;W&$GK4c3p-Vu)QZz2GLs?U;DL$T%KcS!$2RJWj_9pRZH_dlsR{Q zG-m3^`lf>@B+$Qb>PxiLvSp>QuEbUN-%wm+p@;mhd&v2Ep-4+a?j*j+Q*XxW7b6bn z5LhoqD6KCNP>*;>fi*Vr^^iY-*y@kf+A`9eYy@EV9t9&3mYl_%Gqs1smlAn>@ts)r z(P@&4gg?~%MS683`UqWT^BC8jyy<8c^-`g<7m?_wI@Tk;6kWfADN@?r84u_S^^gsP z&AK8T0OOY#EgQfFa|ojpR1Z&Yi>m~tOjjv{|D0L3wwp87kTm~jE?CT>z)+?taPqwT zgoP#68BcIyEfRe$1L1tE=b3od0kPBW3|yx1sbiu0zTbqcb$&>EV#P_QO8b7F^wQEG zZ|`SDC6F`r#U7;0$C8{gu8V312R%g6aADXHVnB!xOZ zfQ)SWWcGN-Tk_Iz*c0~(GS`aB)z zUzPv&7`arram5Cxa>v9)*>dad()au5-8ydv-6-L;UxkV-vNJD^Kd{2|vC8zGKvPwl zFHliGC&v@BiHgz2N^nHc%w1b-+=i+H@5AvC+9`5V>_9^r$x34ebLdDL z^##Ci44epny~Od{P6VG*dbqO<*mdrskpkz1v}4gwjPACQ_u%S0Qokju^5bayViSz0 z28``w%^vej8c2tWw4x&zYlz+>nfv2c(e$Tco(oB5k#DITSGbY>!>a^HDtYuc(%WX1 zx#mZ{MDZdWWKA9MRItfkM^Ao2oQFFfD(dF%HoiV_?PK!dT$j2$Oq;5Uc8|NqmDv-x zv_$Ya|H|(-l4yeB5Pq4%mwMvfg$kvSVa)EOOmgjs#uyYGM=l6ulOr;n%}HbHRH6tz z;6j!zB4gHI>1JKn@vJ@^Rcg-amIziNj6e~%zPlOrrYdS}!EKr5WiL|_V!2l7NabiA zb&R!P$9eGdGGH*GtgAFxF_6knw4lUpSFe${s|zD19KEnD4LS6NGHXcDY?_%{j+eqO zQ9QDOJFIPD)vM8wxFFa8t4ss@}d$XiB13 z1d)a$HFU5Wz?hdG=+aMmA_PObB0I?BV%EZE&}V>d+m6J64vK{0~s{PrNX6Q|El=C zm;WOy0r4FIp z$Uz?=1!>1kh2Q{*eeI>dAzeToBtSk&TiWHg?ro8-{h*?q82hEnQ6~ObvG7XI-mgD# z10xB|;B(4Kl+S8$(g=4&<^e!^64{#PRNRIbuudUyk^D<58!`5;*d_Qe76X3ia-dZb7wZTQ)hx+yg5?2H}@nB}n2rYP6?V3{og z%YMG3+FU+$3)}``U1yK|8U;aI#UGPFD|ot`ZJu~8nYora z9Rn-pPFu2GuScRt|C|VC2JFkWYV zdYY)Q^NHxt=c|~xu~kl58c#h>zK}jcE0(v>M^m0vYI5OJ;58xlhWv%Lbc1of9gC&% zrkEtWbB*2I4|5`N3W34C`H_Bpz^|)m#q)Z<%mKe$Ns64lcw0xDk~!0RZQEi`#`tFt z*%eZ2a5PoohUIy`Ipf%Hu3+B!1;R_Ub4bP{aYy+v(zx$;rSNDDSjofomrRmVMZm@) zR&l)H)UV+WZmHyrgjd33Q8cyt;kk>|7e57#$gyltI(0C1=cNtkk{s$c(!A|@(jw-1 zBYphCemBHWjb_8i2Y^ znY6E}5L#Cj`4{v-Ove2p?M(e8R;s)Gstk8D>e|yg)kHBx#FR*D65Sk(mh_BKY)M4R zbcJP?!xuWhi_JD>-wFLgI8eDuUP^_*;qYLgB=gaDQ~kRVLU&2Ryg9r8^T+;)4BA_@ zI~#FRDuA9+sj`8=de@MA4);z6s-+h9f`APwqA1B^%taa@p9z8SK?_D|D=#cz(a;;y zpY2;+g#%`SRpsF~0Wa+${>QV1J zl(T+yj@4P!`)(9Py)QcW44)}XS$pZY;^F%7AOP7=kx*i1*)^l};q7MRi^^s#A_1Yh ze|a=p=FyVFVHT|y$DMAK@uCldj4p-xMGLokwj2uSXJm4!Sxku}lLs3a-xT{HwX|?r z&!MvjfqpbxZ5$e}Pv;v^=?0MYd0Yx<(x^9c?=M<+k8SW(eNAEHkAzvCm-`PF^vz>L&}`E3Qp*^W**k> zeuLw)T;IO@1^pwj^s~mkU{+u`O=Ct;@zfJgy=l&c(~4p1MtIx3{*8C{UjKqe(TKk* z9J7T`f5|6!UI&`IF@xk&>D%Je=%~_l1j3dB0Sp{Bx=VGlevD)KojgAhRK?bbL4Fji z0DAn`-XL+b2liqq%6h}Bsd-Lvu>Si%-4^WM7OZlBEuPsle0Hlze)11xbQ-_IbSbO- zdRhr)E58o@eD<~ocqI7+^!D<e(TX^DwqZaO^u>=0i`MDFKG*?Y3?LuKkyBlwOf+SUh8 z1;-2u+ajXBxsc-jN7-9P#j$Md!w>=l2@>2B2=49>+}+*X-5J~^1ozwwba{>C;$w|IT&4D9seUz?0+qdNAs7mnz-k-K$ketu3Kbj3>$ z{jasDEuq+sY?F_PleNm}`b&}m$+hgQ`{!POc8a9P{dC@G006dWR>oDf5zoS1`D1T8JyPK+}h^W%8)+X@xW2vIS3w;s1_fu>@C4Z4v7!YOA=Y1RxXRD~(#ayiS)M>&M zmMv-yi)@f?tvF>QGR(Q01SVF7c<&$zs=T!+t1Fg=*sp^o5AP@$X>BR^t{xSxJMCFI z=psfXLtOH%wu|0V;|Y!p1heD5VsY=n=Qw4g)#5Y9YiBNA?F z#38WQYLC6Xhp0FA>}9jge!S+RCb4@dkcS#ozAn-DO3s=8S43_C?cWi(Cch(c=>eAS zPIV9s&BLF2@!>au4WzGAu?BZ_%=I6hxDwWX<531H+(~_Vrmpj1@25pDRA%%z zwOZ(0H78oE&E<_8rLEDo`T7`VF^bm^RR{~Q(CA51W8SJi6kwz|xgWaN5Ye|8h{;6y zz0T`0_HwxK=KIdyF~CsOZW+8nr#7E;-y{rlIl(nLq9k9+Da!kWuS~gyD`moQO1UrD zRtt@z-FsB&U9kCl+f3s$`0B-_%#uX9M*M3q?M7qT8R4DkIM||h=5NjjkWb_?eFA+Y z3yp>j@CIP!d5!)n>UNs>7syDgXm|ZIk}0~}vSgXKD%gMd_#W3a^c0A`3+Zw3G6i{z ztASDix4dv6JJI7+vY-bd;-^HfZuj6hJz403aaxKAnqRD=K&_CDU97UF!o#y+uo+=? zESdyFL%pX;Gax$}-{N9Ymb6j|L%!NYx|ZU>w^{8IOV7aYD7fm86L}m>>e=m7-sWub zxqxoPtgMD(9vv%ueer}!WG216mUixq*PEJxw8U5S8_-axq0NVf@SocA!0GVrA2$O9 zB3q4D=lQ;On&_$WQ9E`u#>Gmv6zBtITtHn&)0go!nJ4CcoViu4_DSC|*K^Rr;q19N z5SAZEV@NOvt-@VauHo%xOVP3t=sN=#O{eYN3*$7nSuxi{B~81ITCzk|gk4!o*W6Rz z1raUYFS{@)uNkgR4(v0{C$U;{M~~c?^i+Q{o{unD%r(-S+jp%3uy=4%b>4wHs4h2r zZe|PI>_)Es(KV7?#AJ_-v-hBI+(lwc;2Jt!!NVO!T&3qqz!9xI97H*^T_PJwC=IKP zpE5RRfN-6{lRDNh)4hA{sjMl(>&La5&IPAxr!{irb(QQyj@V{AVRA*QB(~P%vkn(& zR&)tp_v+nXR)y&J_hvo&r12-OQKDW2o%F@_WNz*=q z1wND4lnx&E+&KzqBJ@=lVfmz9hhoJ& zw*LAn#9O$LXROeb(!x^gD~<14#aZ0FhR^^PQFMz-Gg#Y;iOyu3JpO3UJcDxsgja!# z$xbU+KPuM{Vu?-G3u7JkCcj2e^Hp!l~7yi z*(6K9b-hVv?Lny~TMP>fj+(cY1!fU`PVV9NP%0g|$Te$|MS#?R$t%i3UMSoHHlnfG zz|;bOK8|_|JBG6a+)meGLw(%ca}1d0khJ9jrC(OcQy@CFld1G*y@xrC)Fk)s`P}9kI_=5O` zFQ&X^Dx*yw{NsJw$B>SgH2)=mf+|qxxvSu@37@GN$wcy400&FjlD$vxlBx4p(pXkn zMg;)Vg{TN0<8F!=T0$D0DorKO7DYd^Sr_1%A#bU!N>zQsasOE#}n3=QgmnyNsaxQU_X03# zidJ9cjtm*ECDhSgea?MO+56YmZdY$ZNh`G97++J!(HYNEY;}!5*Dp% zPJcnj(^wkl*=oB}e=vM%T-t7I4qru_YHxU87ja4ZTCY!_T#?kX5JqpQ;Q^GwDJtVJ z7(5319WuUn>Xjx*uiY>+7k9=Qf8)@e-y2SJ+!n__9GM5NgD_kgTP4a5 zq3fLSEbGxEy7iz+g^#1po-!r+itXjUG3;uCnxG z^ya|npYPh7VNljlKxqTeJJ9ZKFO%0S(zTP|Y7Q4;)Fm^OgQjv0)3+d>=eBhqtOy5& zb}>CZe2=amD(HsMzY(c|MN;pT!k0_Rov~dAxilUt@~mTM?Z(B- z9vvI?!9^{Z{y}@We5tm|!bEK>ae7F-KefSVPdVn+>cOs2GrzTb>8z@T$!jO0g9KuC zS!}58QjQVy1QK}C{wtM~;o$Y&?+vhvh8BD3q)$5|KwWTMfxIvt%_b~;&Ej7A;7y(S zMXSz9G>p72nO0Fu;Hb;EhKzvJ)BVFR*v>g@=rX8}wmU1#Ax)jY2Z!V)TUwVJ#6}!* z&GjA>7Y9gP0hVPGK_RT^w=mMIl?a!7cO?QvbZ5mQ9^d%&+1{ariXDYfMCkY*t>w-^ z8=v%6V11|1EH(-iH)Wf+@|-r)I#P7^_w7prQ`G~>4}qg)8hZO>D2>(L$XB;q-)!=B z#YMM0AjG5a1MOss&oAsCJqr~lvEu6(qw4!td0}=ADNTx%F1qCNdJDwaxq$p^cd`>> zzih9GhvmlPLi1dVD0b;fQS7eJFY3j+?`ZYcQc7B7`Oa674A?zQ7m9I(F4=PA!5Zbe zLHUQ`K{v$;5Gp;kt!&up%a}cuyw0;Jus2j7Yjk2notjZHDcU?d8N5?M%gpv>Q!TP} zl*Lx)ZuAh5Il!*7lPj`4zwM;gN^D2`s2-muif@u_1Bqf|z<2-JH>%+fzn6gIN&3Dm z6?!e@s5GrTjXB!u!R%3V$u(sYn2fO;LL`}r*PDSGsm4@;p+vPFWe=g#{?bIcqit<+ zn?05mIf;__{oJ_7MNTKS8k-IMyl+)K&_8x8wf1+^c_Ntvvj|#3)NGNmJl|lv#aV0k z(q?$Or1e&3U*1)+%RVxP*Sm|*Gfr;!J?;OFsTZl3_s?PN(~2*|O}7)(>Z7LRA)i-! zII^GPqUewAzZJzP^iqg2vKc{6RCj{532VWsH?xt1?Z6S%%wSNwQ`S3BO%C%8i-728 zlwFy}k~m`8lXoOj(czRUt42(qKwDE91|kDe;SjG^;JrfHUDb-&i{SSvQr`u>>$X`X z9PjrFfe26T*rlLVbhlpp$Y*oP_k!F}t>4OflXhBVK5VKUz0m7b7p1}4^GjpE!Kp`o z_oOLW+K7!{x;=B{{6R8RWNda>&SpfG`tjf_@^A%|9Tm zSgml$#umV4poLN1)~x`C*X3f<;YCIX5d|5x`7dZfFqr?D(9f%~Z`>-BrFd|_lcZO5 zonmK73badpmp2xex!nK)&0)Wpm%ugQf)RfiZE6$N_Y5`?Y<(Wl#`25=iui69(oI7t zK4_&dw7r!>M5aeMgv_td(laN^nd4Ecs`dA*w`=o1BSCp4TuX5;F?xEIK8X}G7%@|w zcTXq<#^*31!1mN#PM&!5HhD=a*+`UvdY3v4>5z&IQUXio2ia2Utqxi#VEg)q6<7cL zI78s4!FzX8R9tM|xdu>R9o1jJg-?G27s}ANY3|XS`iJ{%I~d}o@y=S+$F0&vTFVg6 zk8V&+$o44qfSb@!n?C&w_Ef=x|rQ??2|4>d-!O^*#w*C#HwxCm=e z0UPI1L&wGR39b7^#W;!gHGMsy3^=O5y|ml_Gihe`pbs`;^3g;#U2|oPCo^N!+wdg) z>*+e|m+|4W5P=cZ##;uN(Yk_QH;^YDl;yr zjiV5EOVlj)&W`aOUwx!uM~Xqk z;l&zt3BCXb;CIZ8Vx65e7oFr6R3scnnB$7{j;x6#0$C)%ldrlh8R%BU8>Y!!Cfa|8 z1zgA(K9`97-Vm2KwzYK^Hg#R9RUI$W>Ro$spW%>IZ~OTCqBX-|ORkv!^!AQBzuFp^ z!!wIp$3%K1RbAZtt~C^VN>3wZkYcENCJv(mB4mu;DzV|1$}4>dw&sBQB-_E71p61t zVtyeXgp^zD zpu0O4kz4~cS(h93eXIr)EJfIoc_8b(=8vY(d}-7^pO(TIwd<8&FBWTzYB@!mkB~kX zvDD{KTIU>iRQ>wItHQ&phknLp%&)EGGypdT?_}kKLQs-&G z!FnG~)fGnbxVr{|NsZ*YCP1p-OelcvQFTX9Pp5}DOS%LE4@t~axtp-tzJ##6RLVB$ z$XvX(5P;=b8Ce?XN8Y@(M!mbq3(#Rt0ZjYS7~#2+-hSuHxb`|1w>&wiR5IQ)NKHE* zryq}a1bVu^)F$rxIbGN&flrJst#G{vU?RAAeVp&VtUFjNAdYu1X85#9_2MoQHNMx9 zb;O3}67LfezVP~tU?DtVpriPnlSLcobjh6W#T%ffku5qINLR9MKhD9iVGXYc{yk2V zYtFFdVPj z$JrZ=IL`5jRRp4{k(TEVlC6o3Jd{Ask9(f!2`5;J4V}v>?>z;RPv1UT*kfGgHC7N1 zn=|R@p3zd_3iM`f%@+mBGM|q4*gKOcu<9QOX6c(9s-K+|9pNNMqtX~R0@_zI zDI)vHF4~~mErNjW`EO9u4E>ud3 zrhcN0g>klVhP_qDk|LRWI#Jfq7G2N0Lpsn(Wud0rxB;)h$&Kx5d!WX^eq-|;!VBBF z*5%FV!09}1i=K*1@~-vx#BHL}*Q)QeG(#&~&ZIE>rU3lGbmoN#W;v)-nY6hkmqQQX zKAY#N|9($K2k0xLO~G>7ckE`cug#Xg>_M9|XUexDnw8yul_SInHAfkecfeQY&^14w z_{rPIY_5tseS|Yd+-01is%pfyjDm8#;FBzATf-+CVlCp0fuhpr>z~F~%8Ga6x^o}E z9Kx?zOK@rK(HRpO1UNYoCqfTTV)4vWzn?;0Pee01jZVDJaPNyT+DdlZfZ1b}GMVan zN?WN8ZaE~Idt>+^eN~Q>hR-ciln6{MNe)+YRw7^$M6d+z=`;_q-DV2|N-yw2}Y z9d22uT}8LoVEu)wuIKFF%bYbJl!7&mTrTMfv<+JUExOS=qzek`Pqo~tpj4j;J}09# zqEOCv&!dR5s}_lWfpGuMlp>igFe+%x>PeM>>`94!ja~lC5(1TTcgZ!4FKpv^+4B%P z;F>jy0@!8RyTMnaO6B))Pey2vrD{|hPa7?AX`zTPM+PLYf9)19(D44b!h?xeb53A|0l+|b-6l?brfF-^UC&1g`0sa>ZWluT7JbqY#{{p+N zE%qRxX1C8`CHtDW68!bbq zqATh-iH0Pqo%PPz+|YRPxz&~_?;C=(POaW`p)u-gkljf}5Xu$wv`utWv6Kg0oef%b z2Q1OCS&CJM>$m+QT-0(^1cGG@L6JAUh;8mLSC5~K_6bC^H~U+lz@X|3ej}cq$pw^R zP#_H=fne6%a|8$EifpT^bi@$8!d06Q+Z|0B$9Om@_l3#0t@fF8Aj55Py8^rCG8@Ne zhkr>Gci6$H!-@CfWFO+0NcO~2JudB(baJ}y%D6Nc;kZ4UX0$enu&OIbPCVm}kzhg) zlHZ;y&af@x9K{5tft)X}8>G3#u6V|@i0K@FTVf@K`!9bGfTz06lRr&Etyq~#21W?i zoRhQ>kYqNEUiE0rz`x4QV(d!;t zpo6Qz38PGPTiAAJRw?Jc=CD$gz8)Y(`|f9rQ@6}_MTnAW~CU_n-f*dz}sLUt%HHy z?ii~JV#Z z<+A~$LNsJ7D@jKoz~;WPb?QD|Vvp)Goot6EIu?3V5ze*0yC7U1F$HQ#;M|&6udL_b z!4p)5lr))7y8n{pc;Y`_wZ*r_nP9#0A5trW%n@ekk-7Me16r^NBJ%qc?A{utk|#>z zkii{2_Q>5O2%_&a^ze+yxr-GOgV|eHEKv2<4g&7>2P4&*{}QGaZ4j1o%;(N_W;tFk6Kz|w zEin=0_YeqY-I4K?JzJ}`dh(4Dtnk{|5+?S+MP(w85(|yBdB~lmBY)Hilm#ELZca9ze^J~1QV}zhoP$tW=kv-` zA_HV(&hp#fi0x_Hu<)zB(fJVa$d$=KhyO|oAo^>1lt=+BQn^bva{-o6>nc4UrM@*( zby36Ua&-vujLX>dmh(F&94LO$P)*sJ;`b4Oq*5Mf z4xEm@>;x#c%ArU&GR8UnRP5m#tfG=T!=N7Nx-$+a^^P7@lm&kW$2h@~$x|?{`7PtA z3DWO$IWAiUamj5q$Y7kUSHzXh*Pq|fwi%w~YQrx*F&*Jm?;0I2=fcV)Am;O>X2A0v z2}au-wZiDOk0kGEY5d?dggjYx0)cY0S~(qa-Jqtwa?Tuxb^O?Te|;zp0b(CoL5{?i z)miS|*YRgVzk*ILz@op)ap<5(I>`{cV$s@fmy&7owj$3`+?dXVF0&7&%d$|xhF_M* zooaMiuaB@cADJTnajH4VJSXaWVV`vDQA6?G{@fsc9Z>!l8f4Wh+u?*kl0K`a(*pe> zE{yc+$x5qcW#TD_vg~nY;ARSTso_k#!Rc;YTE}d-fjZ}J#8W?q774jr^Zz6Z^qPg6=Cy@-yrNu_H(uKKIIzUVebRB1{MZ~Igg4JLFj|IiQj%NgVabZ^tlcRT z$j${2l6-744i!j8xIS+hxL#W|{pChJ&)t!&lb)7D?n!>t^h2ShdD>u$XqdTJ%UQ@ECmO_LkAK}B_n>)0qI2j`+?8ysrSbjE8R-vv6XV`!J}q>#x>V7@ zP2s*7#EE4yduepW5~rB5Io$|drg=u!MAcs9S~hq=-Z{l zSK|Guipk(19iy#{q;@7t5OYvRnxI?>=ZV*tZSiz^J23%$fs70G{heXwEouK9L&uKn z^4AF#0sK2*?)^>oz|D2X9KPsC!TDox4;=?CiAUh&waeo@v~8&^WssLy|E-*t>B6ZA z%U2a$(<5NAsa0QhAzJl5jj`4=BsV*_f0Df9qiDGiytcl zL2F?|sdevUe~gVop_SJjYegT6m`rtdU_jjR_0U8PWvYQ40MeC+q2S3nLx=qLe|da< zq>Tpyg- zXAd>#D9~AcOy_jU=^I5_S-ziUD(GwR&DJlwud;J?jy#dsV&OJxxhA}@;|Spzt?+eN z#7w&!H+hUUs(hQXGE15Edl%U}HN_lZ*5>}pcHbJGBEm{nJ3@MWzVr0FqW1Poe459C z{o&B*v8c6%;_`h9f34}+S(Z)k>2Hp+M@E_NnuU-#DcibtjZ99FZ|B_GW()B)E8R)6 z9i)*^RvQT%v0JL8Xhf-oCU=cz@J|}{zKyPUjq}-7$%*ej9!#jL!|TrVa5)y=v1`|* z%3t(ZySp3-)M%Hueea;xNfgEDq>>6(whk!A<)5|@t|IUDL*4S%#yWlT3ad99OhiA% zdcu=hdKq21pMp0%2p;Z^0QSM@JL!GYiChrWk9SvO;T$O(=QiWsBH_r(D4?(SbrddN zoJ+j7dzUrQ|MWGl)k@?^{bWCd*N=VuE?;hMy>WXg1i#K9XVkWqZbLhq#YkU``Ixi) z)ffyMQS(6d&Os5~CKx%<=AQVWhh?(J0MXqB5Wqm3kVw0(U^5bS{aDYI@}lt2>;=fr zkl;_>5jYXeksc#=1aPl*obZKXvD!T}GfUZ1k}p)k>9la`8h5NQVK>KmxJPc{GSdnN zd(YZ(q5A-yteH+~!VKuEOi#?|Tty*pC&s(qQmsKS%5=QuiHFk?plX6?Pe{M>aVFdM zd@GNs+lH%F_xRT=h$r>*g9kUJj*q7TTh81M-VX0WvANx_9rH_`sQYh^rE*S>U@Ct3 z&Uq&kYKF;;6DL^ZJTcrz@~AtPMI4?}J##wdEcd@JcC_v?VHtLWsAb%dkDZI(_%-9r zbi@!nEyhtxt9>8;6$`5{AXMr^AbOBZ2{)GK+V#25}3j{^D+_o$WO+CA>iwHaE&8})*hhJyo} zl9Cc84DNzF<|l|)muKu}Bhp*chLS&4Eh$!uB@#iZ&lZLk%&{VFi44^~aWAP1&UkZX zzC+C|ov_kS{Epo5Tc&3*pWT;Nv@DAQ_EXG>GAcQec3_?sq;T}fw<2701`eeV#B0+5 zS8rJIiHWunpmF@-@xMHokd9aozwZ5eFNC1!{P&5!ysO_IZ)zZ6{&u$heGar0 zl}QY$=)Z3M&#(VK|NNW4`Z_-p&;UFUrY|?Mv)4$Waf?>DQ|&PQpn#Z6g9Pl@GCFsg z{`!Syux-%9wTUB@Yy-WMT>pGO&a1uN08~QFl+=BEAd2O*$}RXNlg(kh6G~nS|-AuUl+u>P6~6 zv)_>Vf9s0S0`wf$KDpA=*$jK)>yrBxt^u->$mXBJQHSeyEW^`vJg7{Gz z08Z_e{CCo?wIykY8q>#baQ3J_rQ4R6C{N6rw_g}kX%l6>w6189C$DpBDgUq9-g7>C z@Y#X!FEo&U?;?`Me0{3nrO8y0yi>{E5`cJSkFM7M1}wnYta{DBg2MJ(}O>0bYM+AG4Y^0;-56v~@&o%*F$ z6q2!JQ`lZ*)~K~SW;jmj0v^J>a<)*QJ}PC}+gN6_*SiLSHmINN0McU{DuWxN=}2$M zde;ZE-adw85fxgLXTq4oNyH|1PAnN67yI4uKnkWLXtAP)v7sG>l;WN6O_fgnmB)Fm zFfqYI=U7-YYoTG;97*Ib^z%+>l#$qluLk%Ytcr7=e}=Qu$Iyn%V8a>l(mBLJW>I~q zWu|VpuW6e2O;dTRoYg^NUxIY2tR|Nni?^flfKpJu1nq6d@M%c-hl18+r==w9tJxD0 z%q}rUVoNqzXB;JBqpGyDF|ve?E?vpMBU4b}(9mH;5jeZkAoTiAj4Lx7w4fB7iEnqM z(Fs_Y$`wMP?h_?6puZ6e?3^62V?wqTb)*==DWx>$RvZDk7QL2#6*8O3Gwt8J9g8UZ z_h@_j?I0MiP#!yM-@Et&2@cm0!W2ruAt-kI1`3kfx6q}HQYWi&xyfZ{k!p7+CWeHE zpvH<0jHNvX@plPAdy6y~IT9*KcP`8lPFjUZ11X)_%foGM1NF+4#*@=>;#GKY8g>UrshUfdZsTn(8HK(|-um5Rcfo!4=Ig7EXW%Mn_>by$ z>=*%Ep*tGvv2hpfsLU{7%Zb?r;Xt-L@*J(IX2;U)Fd-n`Tm_r7>!EWkEnAHhG-*bD z(a|*A=%Q!*HdFAyTg?@;bM~~^F#A_~uVw68A*|{J zv?9qd&pAPz)rn9BktFA{4qSZVcYDXXa`Gt^vHbeQom zyjG#6Ksq*~@2Bfw$Q|nwgSbkN36>>k&f^=jCWoP`lFxrD6<8s6z-%~S9G-mO2bjG< zDP3I!OgS#c0V~Z|+w6}7I-VmPEIvj2 z^NSpgOmL(d77jHoTO@NJj(5aLi)rwwHkZPB(G-y+AFdy)XJ6VZ`E0J#o|)na3{
|_)W@@JW0G(k3CL1zIzY4;ay_B3AIayGhrV=|V(*Vv;qu~-ba z(wIN_ybKZ3Cd^PQL;C3nesj&YD#@_eRWPa6s_6b5e7<0L2R`YU7Zm>;5sf z#)kJB`eL9@9dRP!nUH>TdqjI3ExopggR(P86*#j*qyand4fGo-;;{92w?`>}I?b-W0e7f`kS^cZ5|A zwB=1^pD##kNo)*-V(t(K|D(*hbn#yVuV?TNFXiE~`&&7}op}^Vk@#inhuWY^C81R# zTImnZ$0o&Sy6TG_+P7!4#VZC!-j}ywt}sV^Ho$K|f9{N1H8QxR-8h2u7-D&xZnmI> zat!I!P8$w0V^q_5Z<_>p8aE1HpUZ!hOP2%v%nQ=AAtgnqNZs?19 zOcGKUyA@>(`e{~a=hOAn57nA=@O<5+JIP!Hw$jWRAFT&n1R33L9fBMWc>447V1Vv! znYQ&I`Q)c*t~mmSIPbR?j!6!%>N~34@I{YS=xSx*e~ZIn(1#)73bY*SW_3STopV z-mV?|RW&`(5JS06wjRdg=SK%S{KZ-6k_n$Kepw$#6FvL~;)zlLed&2`mh0&f^CCgh_3|cM zIVFWiwCmP3Zu)P{{c1^fslIIA?5x*p-uKX4I+&9qL7%e?j8WsdXbQ91%+Rd98{J8- zpg8&bAF>hJi-Rs)zk|ZidU{WALRC`C!n)J`AR(5__ygVetcw&^>yfv-{Zi){xccS4 zu7uqKNL`3Soj(WPP3gacdzt~h51{;T+j(V0^_0lTW9}0Y{G*r)KcoOL*ibQI!p2p| zPQl@Q26A)&$n1mMF5w}HBTH68_mB6wRrk6K*qx>`nkaufjx;_P zD13&1Y?cJ?gF|N5(%K>@SWMmU(`F6#g`?cnJUCo zoFymR>y3nNSXOYRncP13L$W(^R19R~81t*fuAfwz|0whjIS@!li1w90`pWtft$Wlz zzX;~?$dS?fbBo_c9~1u6(Qg^eDnWYsr&6FJQGcTk=BfJ^)~GRX2CJ>fYf{YpTNfM7 z9%N(`*%C*)Ype1k54PABlbdT}^1c~4jCZ>MnHR2yrz0mh4cd`iy64vAQ-}^KNcf+= z+4}H$D^m*RWGy{~{qvAC8FU#K@K z7lYI)N>2-aiYMwNhaYC~==g8t{&nzwRUuFI4;}s12{u(3IgNaL=vJeRm`?tD>AluE-tV88hm|T)^Xb z)BC4Dx*=9L6>wyH>49b}RHI{V60e{8-8TPI*x!cdQB^>lJa}eR_8CcGJ-L(CZ0!Us zz-8|sm^Lfa<%xZHxDg}2YH4%TJBSK~>wH_3BaNhmbGdU~<8f}svg#{cp;D5IN}Egn zL=0zYE;-7BqZfXGdl$^HJ3F8~AC8aYEJNKEJW3?1@gJoQKB)Yyn;7hdsIzvh(OlZS z%0tB>iyS%0DVNMQW3Z3kW3S<8JsW)e*0B|d4wo+exj01BN+GXN6i?oTvX8d3`-J!W zEYxGLD>0*Cr3Y^|2`at%MLVf6_?U6wETZIRNo^EjMtYC2jDs~`SJ<7ol5mO9J<3^n zvjW9g5h2l^^9q1iXEOFiQbksyADo=gz%zVe1<%ak&U>^(BnKQ#bJ7(WgpA)@Qg1WG#LJ;Ovx6>YYHBI)L3@a{|F|v|BEHH z=&ZGy=3a zMycO>|1o?I89?Jh{$p@4Lbgmp8)IO(`mXD$mdp_Om9L9(qh#7-%UZw5t z9}}&0`zO{D!2mk%%FvwIU6Zz#M6)*UFK|tm3@AA>!ct}WRQi`VG79;)Zda~aFM82> zJyg^%Y>Z#V!5%-J3jJIJ+eO!O64QX4FEfG0U+74_d7#E(s)gi%`dmrc0~PQ+tu_>w z%W!W8xJLlyGiIGvScw!(8Aw2im%E;4C4Tom-5>OACir{Mic$}ea9422Mr}Uwa*tj` zNAEm%Kz%X_G2CA@Y9Q!Hs^8(W(&kapx{_tA7MtKio`Sx`?gP9r)gNO@TO!`w^2&8- zOAMealv0mb8lUaTFS6&N@Wl?oTG7)BqM^%!eUImpmi;>BDWkX~!W`KvtGGn4mX9_r zq>xnOhQ>>^AoApF#r}ANc)agHOE4bZ;Dtyf#-#TkzZ{vdEXZ7=s z_MsaKa_W@3hq}jjFOOYXN}7yW@&+7wAXcV}9tRX&_Dm7i+a8JF93&9?2M)u>-~*iZ zHd~e}cdl%bQ%}K7=-GvgT2w#Xzr@b}nrv}z7LLQ8$kvoGqqAl*xMJMgVlJ-yne@qJ zF%p|2gJK>PT9-SM_x58(i#A(TzUv_^*W0>(gzF7Wb7FMGLj3_8eg@XqbhM7NquX2m z1QsV_O2P1w_|zPuiyZ83xj*J%M@nKl)n=4P#n+|dmwR=EKMW-{4ai6m-YBBz_kfa< zp3~`vhubBr&p94CeUkvDWE2|HkW-M5RyabCLb~;B?<#%h1qY^1W-VPjCsS}|Y^_Mc zjzkpzow<+->Z1#8?*m-6!sLjWa`Sxq*2_utu6OS7)v+k%?@XpNqHal06f z+*9Q+0{ufylzZZ_mNvihQ?8eDVx|l03S>0OKAYSE7gis}cp(&0Ix`nHD(x!!)?13c zlKTHJMM_(CN3s9dqH;~d)6qBXnGEK))ZXmTFi?!%+9O#*Ls1`jdkF_A7N*ifC+v;WVZqdM+nz zqNu-aR|0A4-{oUGMW0Zvuj;_lM0+>UM05#Kh(vmfEo4LOT@fyYiPd%_0C0pB0x^fV zq*6##fd(>#MQPDnMdGrb^>DXL%>(NNg4y(IHldMl#dV!2p2B5HqrJCvDex`S08QPq z5pT1@Wh!;V>}Dv`v`wL}p#qp|1Cmn-Gbo&YyuX=jK~707wtnN`=78H#W=GYmdi?#t zbHC%^9`{&W?8DSeP)lP$>YGi_2#@hkQvw}tmh_W{y5zaJx~(EV8x?n#QKLmarENCu z4UXPY_T?(4GhrO~U!{~U0(X_B*099*KW(`g6AeGD*P-|hbWoC}lD@rD(H0RY@$Kvc zgN23b0#O`EKU=a?K%@O*5zHDT=gyM=?yO;hfft=x2Cb>)aRU&<(xg)S{;e&CwcRHp zN%i!x`eEmxr-Jjg5`k-AOV_6p=izPjYt-~sI{nv|FZ!)_CF;uB;9tPw53MG;k>{vH zcQN@K+Zu_a0F+*3!Q=Pr4632#^ReJ%k*Ii5q-B-w3vlRCVZzP(lvuSVyb_s+00Ri} zQ&Cms3fN;UwZv2M5;7}hQ6{~S^LFdRV`K|e{$6GSs%j7eHTqi!OZ|Py^ketPa}!JO zt29{}v6p5`ULj`d5v4jETQ#7J!6OwT3utqR!PeN{3j4s`Pm^>FFOj2Q@mlb7yjBNx zORLze$HOd0?cCXXt=8h@7`WGe=a&Lm>GYg9x>^~w=wZ<4?I@FS9~ZUSeh22o(NF|j zD6VII`0UN1Q`(O1Icf|KC6)O{_i~DbVQohb2e}$W5{EY_K&7G>r~U?p(?GLQXV-?z zFB0z%x!8Xo6bzk?o3rZv~iFWGDwM>PA7xD$)YVVQ`hz+LB*}| znjk+LFI)DxyX2;`0sNPP$`kn6Ye{AZcc{mak(r|TleKuP@R zX8pEWOsYXY>qGI+gpr%*{+bag8gStwS~mpyWfL~nTA!{`8~s2mKqkODU8O?X|J$*} ziY_>9U*T~-n#F{NI@_gqp>u)U`~vi>VZ*Z-F$6H(yN{ocJ)J-NDoE{kKp?Ap4p{=+U5wP4GT;p0l^?@7nk zOH=csfhAVCG)4q_yWrfdai!3E5p|&tZ1`%0R3&`er;8XkB^di9T7j3BaiL3x*@`11 zSUeU2o---yOe4qfM{jk~*@Eda;Gl2Rp@q8M7hgZkTmCg7a{1I^y|ruIwU&c}A>dJt zixhrvPSJjU%*dmf20Ml#di*OgV{*-ZM2J!M-U#0GaFxa>rOT)5m#g=QQ10%-J!rm| z44St!4+{UI%tP?sOB4NayR&+j(I4S;Uu0sFQq|{-&kL4Ajxe#)N5aH-tG|v|WcCwQ z)81(>XQcII(wmKh8rMX_n1q&G_lr&FcnGhrW3=AJIMi6LNuK3n@7TB4v8AJ;qsOM| zeDl_$CnhFtyx6ewh(<>yH=;{W4tWBJ((v#}_pZnIs!yNAfZ>oI=b!c}N~Oy9^zQj2 zk_#0&1bgtTLhN&ne4_^{(cn*-J!fdSEljFN?ReGI=Xyi+Q|cmHs{?6p7zHmttX{eoGH9|$N20J%X3;C- zv5LC4)=I$iR$E?xW0G}zG=n&NF;3ypv+is%**OcHY*>Fezs|DkI*k?KpIJYG2#gRh zF>2!PNw;kaH^n__jKZaBrzsPtG0$%Je`+)vKreHb9={*0mYc7pEnf5p*Dytxa z?hM^y0J|vncj+p?*D-#{V;!zgke3V&mmah}x>H3ng;?;zpO=2JD+z&iFSbZy2s-3& zq)nxPwD7b4cEr2mu1Ud1&IM)wgMu?UenmCH3PYp}dL~>ax;ZaKL|FJH6x=+Sx+#HAu^n}n z2Jvv_yx+56CYi!72jbm)1l+LlHe2qlls0e2cM~TWyEBuFyJYP$r+J*e3fN%rk(R*K zV1R)sI0w8yvBx5SE5cvhbtF59(cuMY~m zj;CZ>aX6E&SM_fbn*SbGfREkQ51ulf^kqUW1y`x{iCC)nf*_ufp2k$tAw}FZZ zAjm#uZn^)tfv)-y6`4JMcvpPVFp#DM-fqW*?jUcif?_LJ==hiRX4=URlI7qK1C zn&FqDSb4JB&>XE)lsgT)V3&Ak;5S#elttaQ+v;z)ow37yZsBT`bxa(mGb9KOr`kV; z`OSQuxuHc_1*fWaLhF}gR|m$|I(|P@R`D3jFXRjN^Xe) zP8O_4%#To@l{DcTzEl>gCFz>@3`R*|gM+w(ojsI4nwq0LCJ=~#a3-q%(EK&QhC`6& zdz+K>V%#p6-unj#dM~%**A^Me#9lp`j__=$XD$y)EWXec&%ISH`#n=(M9I%n1*NeLFt`Dxw%=o!1wW<5R<NzwOclD6Qq8 zr@a_pkd7G*Cs=lW5;^~McDj+38cbj7wI8~tX|CxOp@eU4Hk~h};nWbe_sa?In; z$w1&i3u~1zXiK3qePBf^@O|Bx2!Vzh;EPb-cMv2X)02D1BDL#>L0-;fY~s}{M&`w7 zZ}M~V1zmd?6oc`okz@6{ra)AKu7=XE=f-cm&pyCsuHPbSMxdbVD!f+g#OS=oUGBsn z#e4gje|C+p6Fa_B1-Dq|%5e7oSo`Xzs=jYu1O)-<&VwKz4bpj#l14)5Zt3ojkOmRy zQYn$nLw9%A;m{$?p_{k;s=xcYzj5Ci_m8)SLpR5vXYaMwnrqHa%8ivm35$OW8@u-hFN~ zaVW8Z@jA^bsmO}xc(O2k?Yd*EiPoMu-8m+>CuvDGW}OTqN$inLiS#^o=FwY_TnCJiM2;VB%V&vMBG}aF`Gibc*ZdR0MQ;o#fPnHZiKQ!_M3Oek4 zObEI}Kt_lANFDW1B#tf+r6t=U8rQR*tf1YZj?VN_pT6EY*=BMjz@1uu@d3h|&Iscz zN6+$B z<;K;=E@p8U&q|D6?C3VnOuMp|ktQx2eG{E|8;~!bZC?SLs~( zXnJ?0#}Wip^xotNTH7^&HR0W(2BW9~5Q}&TrLNrh&Q!Sc=7WtPEr}xr%-XM>OT`=u z3jdxhQ#%sM*TAbZ*dJCYoVdHmGAtta6%L7&qw6l{A|%<|%?x6eJ5em?=KM+nnfcI_ zgncfyC|5swTR)tY$B$Ro(Tg9a)W=|l-jvlJ_pla!yNv`vgM>#u)LyJzTQUFN*_Pth zI@zrMfo`jC0lZciG2>kZBzt)7}IafWLq7>rd&y=UAQGKL3VC{rZ$k|3&G*O&qQbj|r!K*0DWFE-$Tyf2TK?bc-4mPTgU9w*9<5^SgcFg04URvmax= z-F99!^uifEnq}D7gfD{z*ZzZ3I`x10-R4_&J$(1c+E6nV?SeoS*JWv$qJnPWnp`v_p7;$zBf7%#b*P4+DdE z?#CgzCrz6mo!OI)kB$p5^o|?W9hH{iX_*h~9jp%sUCnA6P$s|sKc0_Cjys7Hexm+( z%p&W=S)NJe$srZ2L$^Q zARBztiCKPxX8)P*LAv_yBsm+N-?%l--*!Th+H+zx7(ZQkw*PQ$TzCN#ZEb9-NXg_z z{(kA~WM@g(mWd3LFU$fOVJ0eJgora_@|G@L!{>(2iVx;>YGQvm#j)TOB+acxkNt{Z z6&OgBRd1gGiQq@e=BIC{SgE<&4A>1ISGW{}k+UXks^W?5f6%UpS5?^INP@ZSKCf_| zQj{$B(TT)g*E#0}g4X!Gw|wER>$GKi+GRtA(ivlrc#3CbG8(yIf|a@IP=mBT#_3R?np63?- znhv$P{+}FvhYHKIcl7w(y+a3^Ws}QF2hqv|bA!(Nq#*?K8$ClgZ(!*(?1HUx<$~#r ziBA{H!zdoT6?oG43Ggv6>0-U|ug#TthMDky4kwm$ z)efS(V!!g1?$7*+Qez2T@pmGKBiirQEE}9pq;xRjt2vZ-bKcJeUktu(C0B|OS;)V5 zn_$!5Mv5EhcgH$q1K(yfN6TyP6yH)elnXtheC9|h86q=Rnvt_p04Z8XecyilPuVjR zkSk9VJ7>a0Y+sj_BK8L-AuXCi?|lEw6nxabj8|53`VF%KsTZ24PTC!w{tO9D!P=%( z8)6($?f8(d+K1q}@hZAPYSeB-wD^1Jsoj>a^q;xnz=+Wi|A%FiUNr&O#qZ7GlG~ww zm!&ifHW5K|H~?Jo(C$gM+CmIpOl?=e|EwyP@J>}R|K>(lrvHF3Bv_yQPoTs9BC7od zeDjOYj}p~U<3kQ~vl^Ufynk$&JexL{dRO{URI6Lc@Ox2UL4>QqW@pawypOgLwY=23 zUBQyrYnP9y7!O_&9$?0f%g)6Hz--%1CjMUbn7f7$?ZXS`ABcGD7amC*w52R{8EAaoBtohn! zgB!IW`)hS%-S!9lcpktjNDiltaCP?8eBF;&7xa_^3JTRc_wM&M;2^9OXD@$m9-nJA z+xjh6sVK_+h-1tZ#)5$%*b#+a{W)eaned0yjFg@_W}*z5@ylZtrQ=>qdMEw52=J{t zc3wY{N%?MLH?hz7US!=dNf)hY=Hr3m>f=*REQj_eW5s=%Ooc^}VH@7Xq3@$uhlwRT zv6`l18N)}sppA1jmX+`0x*qSYxj~NO`hIjd4Yxm?GipwK-ty_xF!|~_fPSw&9Gpvq zKRagjzP-&-Rri9K+X48v*F5uZ%-@-?WN=M`!`*(Vr{`Hw((21{8v3{sF%(LyZ0~C~ z%H;7#dhlIZ37A*`z7umi=Sg225ZrL_Q%LJ>%ZEVehjU5tai_W&8>;_x<8&)hZ|4`PJ{625rIsV&k*r0>&P)4i&B z*a1!|g*;3|arHhT#u^A)@5KUdhQxrfPd}Mou4bFaGCo>;ROqwGkufLa-woPQ%AU3I zad;&XGIk9AJgj}dOm!#%E6dCt2`=83}_Q~APtSxV=!cCAh*N4cCKNYSmi=W|{N?z$B% z)r6w|tbZps2tj)`u(By36vz%6fpK$0P60l-|Z9!d_DHU#?_uH%-2l>Fr;O0PD!z zM@WsBk36=$7m6Q96M9TC#5wF@+>Q?6JnZ9`zg{HSbxLkLSjIQ9#IZA2e2} z|4KA?p|t1q(Gfb;DguLt@5~;7fVgwxv0pcV8*oteRVDi>M^$g!V$1%&2D2b z>&ADCrIXZfv(=@A?-1+D-^YJ}kB4QJ$DU$Ba!3Efm3+ECK?g&l1QS)qPX=sTQ+Y3w z3Nz~*-tKo1FW5gAuf^yZPqdg8Qs;=~EK0&er5zZFycS6v7z-ZPDEn@G-7TpxASH&f zFr2FIGh7bRTm70V=V7tS$CFs|g9FEdF$Bxgf|5c`!-A`Zf{*b;AkDuMMNI5*r)XG# zSYAPr(Rf(?LfPp$Xi<2WmP~IwM*kqEWBqC6xy{Wf{FVDv*ej2#l%TOKsN|1QA5C1p zp67JkduDd7XjuuAUu*ifcm5Qg9jU*ui&$i4uIK(UbjxpSJEL*K$!WQ4a9vgOt>f&) z0vV?yGU;KSFWm2qa_tzp_8yGAt+0;CJF%ihjd)S&v6C^z4WaOwDeD%u1X^gc24Wqp zPRsSW#!n4zu--+7X-C-GTzq6I@l6iCWSy^;_B^qAHJ&CW%eWCn(7wB7$}G*`HQ>{H zv{OChY;Dysk_Af48C>hnsjZn8U2tr=c$)sTQP7y{Z0)GO{95OJLEL1&|AY*AbY`tocB0~rB55#~j-48BWddbK!| zL!)p0GOU34c_sTr*(R~;p^cQT6Uww6cQ_7+l2&96MLZGe?(2>=tmDNr4YQ{q5-$JX z>(?C5YKDhwv^BvU#LqV0HFNNZ!NG${D2Sp2)^(U_Yci6~c?i13o|a5zpS?QjzSomH zV>*9vlgpvwxfelRd&6+YH-c3$Dz+GM-#VFW=g|LMu*UI%_|EmGik`bWf@{TertYBK z(t25w_eIAJ^N{1)48;09i#tAVHnw?ZrfFU7@YE)Lf4eP$2V*_DI7BZazdFzPusfPp zm?dFc#Q{m)uOnOF$x9o&Q`87)in3ooG#wCeEFZ3XYvUiMt+Z+r)K_ZXgCCA4s2jbQ z`f5M;Xo(7fjd+7~I9lXKvjb;yFRaJPsfZBl8T{Z+6>*-CgLd58spvmg09&WxE!n;$ z_qfE@-hHU{({XJ*a4@=4&A~)d-&N#79p={84aN(;TuWgD#Yii6JtZW6PEAdhU~5PS zG^`8EreK)atFAk(|C0r&^#6vp|FA!?b!!N#luemLbavF-=2+n7D^S<9{$LeF6ak{B zTzu=9L$&I|v0T*yb2ymazdDWa1ey6|-oD`aY9=bQx0}WYBWgLEm1PUZ*X;eD)LYtE zeKmfCmY;;LJbIbAFVETm9Q&cwpvAh%7&W?uo_(SoBJ~{*mPlkT&sLhzwi+68*^J`0 zGxW8-Vc4hj!cz51>iWRNd#8X`yI*(5RYlsL8%1bYC_9r{8A}vHh)bH$qF*nGZI9er z!}uqo$>v}z!7mwo-SBhfK{#i$CvOB7U(;8GQmGD4-b~Ja;tj@dE;m!}P#?k`J(34YYjdRsnbj?wr^nB_a z^6H?xA*bK|?lLDzDWB=GS-Zy@Y0L-hMdSiw6G9 z{*lWXAwD8|rJWn%jkWb$@<0aCt3!7oXW7s^Q)~R4x2#$0C5{@f22;eHvs_AWZW%&LR;;|iU@ImCjZs?ga5c{3^-;ukcLF;HU((bVa;j_hT5AHdI1+WiX7D^SX`*f`O%G+mroEKekTaAUBz8u4t=@4 z_?BEJoNPcj#rE*g%+^euWcuUG{`SKm;p>U8)%;X6jXF4b3ft|cm)f~w=Iitw%*jIy zC$NUf8)2=Yn-6jj#a!6fJ;!rPvaN-K-ty_AmhEJrf2uPz?ZH3Wq|3*cS^1C6u=>je6=FS~Ysh^E%a+GywShW{ z-uXI1x)P!~hc^}r@f;zk)fBneLd0$dtMP+ON!vmSOM3!+S*d0f3tPo%!K^CN1Qarc zM<4bE_}5x;Kze^}_-{glp{4ioY5h4x+p4azcZRdx?AWCv}{star5) zi5yxL389D&JXU3#?Ok*;U1|^o6H%L6Ps?fz&USpyPS+7I=fSdJYlWw(`~A*NLZ$hC z-wDt#h(M4pC3YRAb3h@lu-Y;@wl`Atq%9D!^h%4d%G_l0?HoO~@Q(Z9`z*@~sLex^ zIsT*+--bO4&$l^mj9!#GG3^<1q@rS>ElGQt<(#F|{-g>)QXDGugle`Zw}@jpRlIP> zd}pqTx3GJMLMVZ3z)&w@Xfvf4o$zRz+67kFxRnjM_i#CGUBK6!_#@X<^8`pl(TOOTZ@jZ?T1La*4lez*5xl!wKL zcnXYTJUiFEn#Z=JVOD)!Dk~OE0v)Ud*#t%AZQjtgT`V_?0g~REtf>Mp`ZOyAO?d{#6&~*8LDp%9Dr1~!yV-%O z)m9@_5i)O#M6#$lEsgDly$JJhA3L02)8=r8LC;dt*IYcRr;3y^f-0p@8}36d#^3w8 zir??r>vT3IRNC0+1qo^;G!zXZTN3EHZul|?c@Fik!l>$E$(YBG8NGu6eJDx_NyH5A zZ3NZ>-?w5&dlDg!MyUnTzK@6^?(xXeHKv71!`2VXv))*9nWqW#KN<;2O_4AV3cN3P zs^B@&W*~Go_lC8tgyw$Rhch#%``9-AeU0?(Shc?T0{SWKh{ZG3?~lM|F>R2P|Jq~n z@WmyvaSkiAEO2q9k9%IXA?^X73wn}`H8oM%Tfp zm98kC=86><#&1nm*ONN4QUBzvU|y%m)&BnX1ebQv^>6;FJ>s_8AK7R}{9aG^Yobu^ zOj*|B(|7c)T<0RkFVx+R_MbyHlM_iM+c#j3M3*G}%&dcb`nxkLVPlJ4>Nv5U!;2eo z^6rNosD=H3=ShbKH#SWRFyOM~4V5`iVshVT(Q9wNz$=0-_RZ%iJQg(VtO>j0$hycE z=e&uDv1}_96*T4SL@MR?ArwzgTKcB&=HZHHMa$GPV#R@ve@kC#jPXa0JNr9y+Tw3% z8np}XCu@a$Z9{iNl2kjH%Nkkv8B9W^oRtb!ILfEst2_70apBOl_=PM9iEWmG&XAv_ zRMY`Tho>A~ZlJ{U#NnwmBxaq88E#h94%YJ0-A;oY2Kh zbCYc_-%)DDd+3r%?A>ss1=;O*Exx`zYb>d`ySgSy-gc?lpPQsq=l45`0jZV+tHyJ^ zk8yGxw2-mR;ri}~GC|$?*%|l_VszE6LP%Vk9p9(EvhS46F{khBIFq8M)S^v2s_M}h zdV0S%5b!l3hlNfkty}qKGJX_E$>>~h(I)0~q0CgsXfMpM(yX`P^}@>e6q_y=+x{N9 zhupH~s=8+XF*dz_K|H?@R-LLTH+?j_#vhp~5YxF+ZO;X}ey06HC%} z$Nh<|5LxF|NMowv)1(=ZMpW1dM!#?%@%*TQipmStmMKSUUFxx!8b`9=^>#cdd&!-^ zflRKL6`ppBow$zN&v*pk)d_(=jr0bOcB7p!q|IQ(kw=sQI{Ya$;{CIvBe>TK`m?c~ z;oaE$a#M%IK=?cQM`Q-bLspD)Wh|&%ttOq`Su2RNG`u0xs5T@Ei8g($v3p4AD1{b5 zK`xNcnybsOE9m$nYgAgIr&pa-6Ns6bEcl6h4)MWz)YO}CC`fd1u}cVo9|W`r$afFA zXUVm!O^C}B+Wd?osF-`2+saRW(H&F!*Q@n{A!7)-&n@8QCix9;%^qgjFgj`{`%Lv}8 zf!>_=XDD6bf62ele?@zGA4O-La!3i>Rv?)0gyNdr2GY<@WHsk>Jkz>%e}f1v8Kyn? zL|lzg4{ z7MAye0TheTSE_jB`n|306sp>Er&NQw-l>|$ADBZq2>xkZbNY7*mtOa zQvl|y_?xLwVY%bcZwo~FQ5X)*aQyft)%8=tn``>o!zEEq7uhd15xEP%b8c}LqC^X) zFxen{z2YnuZ%&n8T=V^~0)a~h_veZ@ab8W8@B2?{AiP3GaosmMfU^XrIWZ;SbMkCv0Lgr5yy;kDjk0;h(3H}L>|@8K39jby}5T&nF8hKki?&9#yr+s|wjlGP#O z>00bo!R1azol?0u6iwrv)BUDl&XOuoGK3NPFEnWx#A^Kd{ zYNu)z!)ti>zKykpAGW}gFM(BUBQN-w)E%kHIdxe{XZn=X?3v}37|O-|z?F=amUX@_?O%j=Hs%j92Z!yL z0gW_q3-{pH4IXw{D7od!)BFUCbws76Lx`?|+9TECod}Kcqli2QXgSwQuJ|STuj{I7 zLZy+`?2e1d#k{xM-V`oo?83ZX7AOa19Vq44!jF zC7zY0QRWqMpfYZK_%)ocus$5i?-^H>4&D+40w(fzE7;@m%-718W}r1d$P3205H@ z(}Rmg2=ySF)l_4PLMs`NZl88ZW3RrxM__Zq5r*6t%$>)lTfa$5Qcu(4ehRd>;m3q- zzizjh>bAI2QqnM}e|Jr?xIZ-c1mW+qQaKDHNrPP_Alak&F^d}HcRZ=DBc zW2%HAE*@oMNldK@^w%I*Q|T%1n2ko(d?$+HO2D-onX*%QO4agV^tE|$tv#{U4k_>7SoIAd-5S>D_m>A9Gm0Pe;DfwAvgZa2R8VOxM(uk$|-zp?{4@*U%81 zfTb6)oEI}Ya;NA!EsU+YT_OY?9UL@f%Zl&)?gWt*POPMPR1f>mt8qRw{&$jf{^Oj} zbNf{Wublvi7a$cqR<|o8de3J{u!>&URTG+KuE}5f%w{nvuQIJM7WJEWDwRrt_i!bF zwzQStCqKQ(2XVE+VK!qL%~g+whtjR1Y!!&0tkruMxjx$WWByIO*musuqFT@Ywe(^= z6#t0qwrPqt(?r&tOyGorw??<))xSnUvWOOWwe8*MTukkxWZXlF2 zF|0{MN>`XEYHH4=ezx2SoLpO5vpswDKq~M(m7m`nBs|CbdWtxTUXl5)m^HTR`#(a~ z9)7?PwyEl@f&DgO7!FP5_weSn5n+YYkJUI4%vPhc*LC2&dq7@m4J}PbhE_C&q~m3c z_9QW}(Q)-G*2_t3=hu;ko3C$_oi8cZRoiHqi^B;O+8Be?x#^P`4p_SHb5m>hCPE!< zr-iDEFxX%-6cuoU#b)93(+qpttM=ytS8L@<6##{*#pC0-Oe%6ko&NG%Usn4~gd7cr z)s_HeZtghOi^z{H2=cjgZi?3|z_Ko!7divUWXWi-wNRFEFH0%|Mkhv@Q_R8^I(T8{Yq($jW?*jlOZP{)EpppdgU4-b zRxJHR!ZrEg&*%cOZyOynRPoLX>Yj1^frapT(W6VTgWU zZ5G|{D)mp0k$4K&V!yt81`-MwU#Alg`aB2v3iAje`vQ}YsO8h;Mo!rg~7@?-GGhLmdDpfwF42%(^&c5Za0_)!M6Z5dgy0WBr z^72{>=E2*>r1zV%h?co8lTYB+dond5y9wxDSk=S5gmQ>hC)WM@yRE4OgossH?(P!! z(k?W95H%$7g~Q7(egR7sc)4s;%zPh9ms$jTa1>ljO*S2$vBaf*z%V&zRU=pA6~MEq(P(L&12ylCaSgkzHJ8AuyCV8n>CBorR7?$k3oYMf zD*&TYvh}_Dhp3v*J9x&ZC#0@CZ|&y7@}yV?fAo{@>Q?#hb@w%m8f#yAEK`PmU$$$w z@wK|Jl_U)~DYQMB1PT{2zzMlK|);%1rN2zxifUJ3hW( zsm4Ic>C4}bf|TV=ctje~oACb2k!R1a!3FCVdquq{Nmb4^IUMGU?8P*RE)jXjRiU?n z5cp0C(waNgk58aI-1<@QQ}X6-T%V>&%tsdx4_=zD9o-54#0Kra=KXig+Zz20pfFW; zSAU%La`m6*GMsci-ZW(kpt{V69Mkjb(Ws7XJiA(iZO0sUEi)cL70j^`tLwP-Vu6m; z2YLNr?aLio&O8ATA0)ODBzJg5OXLJ2^{i~^hi^b++Ka=XZ_Q+Ij=Oax8Op|HRHgL??g>$x?%z!|a5&vwz?<75P+yUrDa4Ny~6aAP5@so#DTgxy{ML+}2 z8`ld|sw1*CalV=Zt;Qtrb3cl5bHz&XuOApui;?)uwj5tSwdpGnI$m_JmOjRwI%ljS zPebO7F}6McNX8Wh%mw!7vPKMI|H*^-p`e*W4;K@BWN{JTWlX_-_oZ=0O3!a8eZ#@} z_`$6RwW-bP!HIrm+D#~OsRiy=CA_1wegZMVN8Ds8oX^j&zHT;_9BQqppWIIj8N;ey zI4C1iYFicGAFs|&^)@^EoHp3VUmT=*LxhQ9GSxu@pvBDUEXwtK?KwP)L(EQejkCE` z?``sSzq@(;@%(-d(h9Ybu^& zG3T^aIJNV7YjQOAYCQSkEd|eb^#Qij z*`eurNB-{P$8A2(<1UolID7oi7Zo+azJ`I5ufw-Iu5F$nXX>Cf0gthmcm^F*fz!93 z@CUHsqT?3vshfRwZVT-100_7l2-EVon#RL1}+A$u<2 z{`%UpnosWQqr5Wv=lJ^Ga0a$B1=G82`7v_JL%!#VZ1;7}?lP`~TfvwJXTG=iSc6fU znVEjQydWK=yNH;hK4h$nwnq)@u9P+zS4p5I-_+(#)}^~m-(`)99HHyG@yKXS_N8TB zkF)UaV=-B7L&h%s-N_g0c@4f5@57As4fUE(Vyt*UH+K$ZRhM{pbiSQ6VD8Q7d#`Z# zwUE329!R+F)@jv!@X`>vkfe1n)5P}{(8iB~c zigCfM{-dv(NUAKyT`3`|rd?)MnzXK?Z*!R|IKHQXO*^5cMl}~#%8}$gf{DoM*!(AS z#Z4QEAFAfMGurq2rlX-y`^lf9I$qFIXE|6KYs~dpzy8e}yNR@RfYvid1taF*9rJRQ zWi8wK4bOc_f?+`OZV#GK(5h&SY`CJ^ug?K5Qx4~2Hd|xBRZstTpSdu(3B$DmXc|%_ zNV#qY`Y)F@cT~5|hI~R4@0L!u5LX2pZ>z*f5|&<_4OK;6TW;|ydFZj4ADA`WTe5Px z5n_KH351sH4S(SS9~kCUS=~Q9$epX$R&RntuH-|ZI6uvwTDLs6l|H0Yi+|R1{UT8N z-d)h<_KAiViqp<>^yUG%Hr0=E#Rb+$3_(NZO>LFU7*E@FJrMM=4B} zTgC$XMm&fbWm>J>YLqVp85qwf%~`!T4chWj{Gx~mh@32X-SvD{ZS>M=f&*4`!nO6= z-YlmkU%&-#?4}+Z3cGy&Td)8swd;o;R>NT@p9%0x7C>g9X6iL2Ic~E+lp&>_3 zb-6Su3sGWAh^U89bFn2SkDDF)R83=o@g7-gSA15=E23p!^Dh<_7~g*a{tRTip@WrD>dp79{s4KR?<_PGs&SwfOS)+V z&sRH)OHWjiI!hjQ+dr#mOnvvp<90l`r)P*(kZti->6KlB1dcPY7P= z#b;rW&!5$^Rj+*TQyJ&0PgiF__k$x<_lCO?2bPnPzR+sgomz1J%cgDx$G2$eY$5># z?{A*e>e`aiDjt{t-4SNN*H#;py=Ipk_wb_~JNQbCDY?^Ij=f7w)I8m3@(o}9Fgua! zPnXx}IVFn^-b?Ij4s0@=8SU{z>Y+4m-j+0*&tD(FSI>m3pSo7x-jJ-)`we!ik2INT z%yRwh#-Kv*%kz_RsjVk5H2Y7Dm5qa54tyY)llCZzsS9{h~=3W zA@5cCpgSwHVNCm@oyC&PTVNf+e2O>{b~lc}LVXQ#cio#1iL#~4>ErTY{p1U0KST^< zMB~>``x?WccKXX7TGnrlKkyz3U2+U#K5qHg9BFRrhcukov^4ubDxujP zW!S6h#q!qOLlQKNvjeZo5OZcQ7zWxYSKs<4=W(VfyQX)TK1i_N3bC`-Zdi_FQ~B6s z*~KE@Q9vZcAr)> zPgnUCYaTDRNjadzARvQqS{ty*#}mE$gQZw<{pN!KCU6@!ctu6o{Ui8+@6;-UsCae& zD7%=V@|&nUvG(NdE%eha%|SX|=#e`;rmz)DGu}^r?qsSP`%Cil?rhUpx=gIHyFXz% zOpb{SZG(Q=Vh%M}7gf17FL4cH?glE5B8ks#dwkA)#T*UT@ju`aHIjAb9KbtS207N~ z;b+FfFD#ouhPmEjZLF(RZg-+3{)lgzkNIM5KPzfH&NdBlY?muJl>P=rHdqyOvtLw_ zd?s>;b|B#=ch7rV!)1ituln_8QgB90V~dqKZ?}Q}{Gk5PTBe^#Dh%tzk)>BZ`pxFT z*+WwQ1{?1~NZy5QB1ojzo7|>&y=wE|i=6+1geFI7d|p!N%qu>1pZOs5E@8!c(MPK) z7=r4f)}6|j?g)|dFrVijmrA1_!JrJ`km&czH@7-JmBErlMIL=|xdm5EyG=L`; z6&=$Wn`p!YC=GsU2q1Ynx0$H@bqq$ui2+`1>8~|v_!NXela5BZ+rJR>gRc{^#y?iw z?QK|$?u&g)9`fcHXU7Ljm?RX>3{-Pw#!?^}kxb-K=+YG7XXlnOF!?JM4Hu~hvC@5t zB{~-d7ueMxkgpMn`QQ7B)W8`WGwxEl>k~qpF&!(OQhh&4+3zOUh>J)^NL8=ze`%{X zdCh-x#85qh`h8@*rynJiLavixr2o47xV3q^NmZn&ho4av+|dvyDbd+6#xk#B_4Tw1 zb`7u4;+X1dYoMk!r(YjYKHCM$cTcgfr~dGKPz;{8`l8$;Ty-x{}e zVHF`ZwIWK2^v?%nTTeFJIR%|LYyuU6HW{Jb5XD_ipI{z?0(DhFv)WTQurNCQEwXmnxPs|t!s zzWxOgOqrjr{cB&SU)l@`z^R05$~`lz+Z7tDOnv>(qun z)TF@>x*&c%2A(4_zhem4DRuvFYV)cdfj9r!mECJgSxgDf6;whAA?pPS08|=tH|u<`93rICovHUdBL;+pveZnx zApf5|_MR^C2AfUd*3b&9nC`%mnB;zxvo;I%!{Y|intsK!*7tWhpJy~TiT~19u~HJh z+}D6MmGMWuEL?Ux<6!QUl)aNcM)@`wHT29tBT+-l2f?j1zo0)xJtpsW08paHP=D1} z_)Ap5X2X_>MsYEhGR7nnAX;%w6?^qHm$7r4$fq-;zuxki$gey+()Ufuv&Y#nlkWD}MBd+`v&Pel)UeB9g#9ZdN<%Q}HW6g7S)yt4_ z)DIF>Y)L%N@IL$rcX2LY3)!nRTUl9^*&RvCZNkK)9Qs;Q$P2z@m(h-XO+FXdF=Vqf z))CTX+$~+8@sSd{|4W3YlVtsCAr#2bYN5-soWw;W)5+DpVNL_$$Zy4%n654tS86cV z$(>cr3HO0E8EU+>hPbfV~I;-RbMnVC58u~Yz=TCZ@|lnqMH5eCiEuLQ!{ASYdZdX#fZ8w)k*{Hzz*7R#Ho=YT-DP_FsMD&VL;{5{bawF z@n%o7Ax$vdhPJ4dfBvmi>o@7Bx!QoAlD*!pT!9W=pJb}4O*E2X=X#2U-JWM;#J6{) zdxhEH`cj%@{mb7NTlY-}U%fUmRGQ+=iu0Q~3LH|kt+QkX187Q)w}1_cjEArD9{95t z>z;JIKbrVhTr$56GTxNw610I6vf#?lu65;T0Yh9!txm{3K{G}&B5~fznI8pbd}%N- zQ%oH^x58ZF{(41%3eGzysdJn;c!S}qHH4`00E>U1cR& zQAId!UOZbdIW|oS5R4>X^U(gh?Xq?Oe* z6FyMFJF!h4%rw(xa)&|OS$;lJCvHFYxavFuc2avUMKD3&s71%GZAKOznWpnAVK54L z2yA$NmpB*ox>a}qpa#s2W_10mhGrXhvloQ?hIvoKi{Fd)_*O|Zxs(;jtDkb-!Nw1{ z^U?#W;2D4|PU{PvxSw7Kf?0~nM1=tHEtOxrn-fduO2YS0PPFeKQnX{=!m(M#N@&xkfqJ{%1MfMqhMOzCG+FX#o>cWK!x0Hp8@Rg zBP|G?uGU$ifcWkAksbT1=Yz^C5C3mQuX3s{aupb1BI^0j=@+(Rh=e&;WBETACiD5; zcslLorzW#oQgT8v`z5yMt!68GJaIBNeeVWkVmOu`uQzO-vEa z98HZGE$I(cMOjG@O=%|yKBOj!WcXBHQkT}ip>i%bM^@ea*F|AyC+eqCy6q5 zUHnU50rdJefn@*CP#vmAowV_`^jtCd!Bh;X**VAVc2j1UmptY(p>nnPNxhS!EYP$)5W3^ALDhDdS< zjg*WXH#6AK1tuyiefxpv@Wtb`74DGg3>$S`LPmQ35r#J0{YRtye>L~xq5>kf#CGY; zw-s4PYS1G*JRGh3qONRuPN%sibcOvb5D#`2@QakHy$(nHm{~UlrKt zA=-bnL4ZHdc>UI+IW%US9+opi5!hJoNU3Sb-^4OIAT; z>sFzeT0_f{LX}QPPC7YO&FV(sOCVGlcdDxsK)vu0AYR2p{V}q>?&~^j!Tq~eTP+Hq z&GG+bEn__iQfC!ZDCAGF|)__nAwH$g_u`R?xy*acBfBp0MQ%(rN zE19sNaqgBS<1Pb8K*^&>mxBXboP2X3N}*`nd5=fLvT1L;A3vu)4gNw~ zVi8zA+;)7f2Ldi73=O^Q`$tKMcS+FI<)t!t*|dFh-={`C8#~5yj9l1RVuU#PhPE*w z;+C3xvN{4vnMi>#B;wLkNzNIBu_^0tcl#W3L;IgXEGqgyTS?DEDryz1wKbx*b+Bql zRV^N2jx9HziE>MPn;jb}Oatl{Kakv9>cZ8%bUF*tk?r#lfijDMi8tmH>beS_fLXl^ zys-hAMrOYSK$U=-!kT$jwFSqsfZexGetk*^e2REmSmTl*LXQk)nt&&NmB{veLHuON zymQN8dTW>fpjc0c(nEnx7U~-Ev02$F&@Yq}?33eI8-V2>sorg5&7Rs(k1w4SEj+w2 zbq7DSa|LL1s$zVz$0JLwIDhrzpit9?#q)rXx~gk&IDCAoEeG#(_W1NAZ5p+Twmc7$ zVjdX;s0}@fd~+E9L)B|D+m|`er$DASU*MEeePtwFG8BaT597|IrIq?t;$7URLCcoo zx8cK~41g3?Nd*#9#k~G{&7q)QKSn(91hb4$0S!QL^63Fnf{B+x)}H8Gb%9vqo}I0 zQaIu2Fg#RgOQ@S)RQwLcoYE@1WA0KPI-zeChf@!kGbKn-e@Q=2<+WTFWTv0# zxhS)(7*jWD?IhGBNlWQW$XRiO_jn|x>bIP&`M7fpC;wew(pkSuTG<&6pZS2a`_$HK z?PHTmwNZmhg@qL6Rsj%|SwoFpp>ECo5-a~b#-xb>9{-1lRCcrmuU)QNTo1#eSsOsD z*qEB!>`Ai&q4(m|XNS#oIh6rkJ$~E4DVX(aV+>%4nLjOboV8%bCSOvzPAEIs9jO~5 zh5d$A+AY3&P3z?TOZ{9@u@l}c8LavWOF@D(^pB{ftIjQ>7)whc*l;3DOXA&VSNe6? zr6xOx!h)^}Mi<@JFVlQD`I4ITSO8ufIGcT3DeYtY@BN7qISF>{Xr3*t8F;T2<8Ktr zg+lkv_66*Kc_r@YlIyfX2{Re@y#l-vNb{VR3;9{TzN z*3b8V%zh7EYS`T*Ko%}2n+8b8aS8F4U~kNUSr9vy`}$`7KTmYB?|_Z%p8^Z;vWCNf z;UFx6wPggpYN&sw+n=laWP9}eM^V26)>tVkV91`?DCMf|5GHM3f?flFQk3BN82{Ht z!h)4_f+hZ++q)0XAx!Lia=$vr2vK6@0B<*vCVe&j0(gwHkT2L3vq7+Tv?GgB5#Jx< zYIR_*`5o=ZWK~!Ru(4un?n6Cs0q5fU7>L`k`5)Y(2WYG7sD;)!tN^@=Z*fqst##sw z5P?~&B@RXJB++S`HLK5J=`%|vE68rwo6g`8fJ1iEcS0ouaUuwwQ3kDXw41p-c=TD%H$Pc%PASt)1k#* z+fX$s$62z2dp0X0b*ribj9YY>yihx+D$4dx6GD+%6y4=9p4{AObRupZ80u6%r<%LB zzGvG80ZaH)-Q&4l;3gB(ow9P!3{%Ej|J=8>vXoYGTuEs)``O;+LbeVqLm>kUx@U}N z_vIU7K7Ej}YyM<{d)LOFZt&Nh&X%s>9MtCRVxk%kad;X>WMJ{>`aNZZIt?ZEXs9Qf zDG^?r-Uigmt?%_3t7wGyJ}x8S0e*r7ATl>t!x}RIZ`G*?cAhm|C~)?xCQs~cAC0sI zv=i6J%*~}qjUmx*(MU;=5}|`**)|RLFnPM$@}PCH>NxM`@$&&<2x*E$K#{o%{?xT{ zs(opFMBa4mf(j^%Y)yva13z=4&t`0Qtv-mhG2i|sj9+JU!T-E|F~F&IktNgV8e{my zUQ%2f4F^ts$vh=iKFKT~0#A_&!X+b-0#uC4tqZU#7(+U*%tgIre55G9F(kY?ci$WU&|HT%@BB0&80mTr@I#$DxST@{%s9F}9T`=F9MxBS0NB z#L%|o!fPMtQt`G_5E@o*z!qU{OFQWhzG-yNoY8cPS=@a8)V3K;DAm9o(jGiCR<&8!+NAvZP*I)HTCx93NmF5aoVzY2Y#A z3cTYF*$o&wpf-kE%{$+wN7fz~0tPN&-p1<4c1hE28kO$#^|dndS1fD>PoX zkHq3i}a?2?-T4pr!21iI%B$gTMYF+GSiO0%W1A(Bhj zql46(v=x%ZHAUpeoqycqyByH45p3F+6};*XgHvNRn_gl{#TA9Z_CuH^IZx zN}c`mW-o8BD?p%jn7EYvDljx2gxMP_hjnDq#@8iGvx%CK1qPrUzgbx=Lz&5gMXaG^ znAgGb=%R4PDle=J={}|NecDR-@rk3zb^0`XmkFGKH z#N)1Or^a|9PJT8)A@(?Y$w7RvsXy-yfbgi{r*!*5)Y*N^D#us z4FN?FrMx|(t#a5JVPe`mJ+(^6q`~urxSfOgOu^z%rh1#)Sr@FM3!ihRSN8_tX(PrH zw?dwa&pp+M?|&k>jR6QkO66u(VfRdtwNP~2D zjF9f`oJuL(4U_JcZU#&w#;A=I&%VE>{(jDR_Q%fI&bhby+I{c7KiB7azhCcDC~9CX zzZ9L}N^!o#2igs#I?*=PqkW#ThC9EXoXj>w8&2dgInsG^1UfA@^NK{%$OuYWt~Ql> zHkNTWoxFVQhNTcI*%=djcJTf)-5?L&t;Gz!ni@)I%MnB&p73)1>FiV)coX5Fe9M-= z=q~1L^y2E2j_L`%j@o{jCHKvaVqOuL+`1JMzoeKqbb4<(7ps#iADLb5B-eN~%Bs5J z|D^K89eH(p*@8#iHj3|4Mh=ocqZ7CFoJHNd|D-$c{f`&yfav6t3LRcYW4>R;N+YM% z)v0~>(n0nkea$XfMtyWrAjgFbI^Ff~*;8hvxP6e7;qXPh1~68n~Q z2WGp!`aP(9r{V6p+sYlHtG_X$Uc0T`ACC@2GZuoh|7Rf2 z2##4H@ z3<}L=m|vw(FQw-t76hQa@Z|dCwEQ{94Gd~!KhpK!(o|`$U zntnUUBd{grs409yzAS$j)Z%-q6bUh$uJZ3375RB)>F3AGj?1}sQ==BbzBdt^8loNX z>h>llxx8z_n>GBG@r7RB!8E|yxrSsIE*|(80IttX3JJ_!0<%q*1F)$rf_#mZzMG?= z9r&8ux*=*9Gml53yeMDW_Ny9}Y_N1B!V#SAg(_0DQB3W3KRj~3quEKp%OM(FNV4Qv z=M)$-3qtY}3#OB2m||DE=Tx(8oNlf6Dl(#5>;iTm;Z}<@UXyxrh<%ZMUbdb<$57mVx2H8HHEnuIPkhDhWZXJ9AIUlT?y?6i zk6yjctEJgD+dy2H_enj3{v6Lu0E2cwFirXPEMizpv8}M>Q>$_6qw@&%k|6exQ?hz&o?918AU1a1p?l3#B>Yzj9=&CO^>Z{ z-W7~IhJLvh6O~hYYmULep60Qa6RdM48FjCbpeaEq(eE)j96z}8t`J|tJvT0wcTbMAXAZTjq;8$7;m*Ha!1eyD-; z|L^^o@3GZQ$@f|UZ=WUuZaE-5MWcB?4!m61LqVf4JKJhQ)d;HrTGj_w0yYbs+Gl-% zf+l#8qNss1v<98AwzZ<2jT3r!EoSkyaB!Yts@KQR_DAEv8REQFu$$hq4!gwuE~ztV ze2vgT%uw_=f081XwM|%z$m~McCfF;YEgwC+-NN&9-=k)SQ;dCd%^OtvY?xYnhZR@ zytj%yoKA3J-KLGoUU{Abn6#VP2yZkrTu#kLxBULM+FNVJ{$r4gex73>Y;@^&k4)p+ zqZb9Hvpq;%Z$P4kg9^E#B5wkb0;6sJwkyPV>pk>fuOS5Xs>Nk}DrzBrxz(0E_b^vF zZd!4|Crf&CYT{tKN9lO8CHhbQFB)1Ji|6@g&8Wpq$MI0Y!1G#q2E?e;v-QmJ9syY0 zsBBEcU->Ky^kLQvXmM6DP@@hzUmw_BE>ZY7YTHrx%e1!Z`9Bi&b4bL>@rA2W^g%B& zhm7Vpr;iUWv^M~Sj881Izc~Dp6%$5?fhEI4ebr@09S`dI|Kze=n_xQHbG~+O!4Eqj zx##mt=f!d}6|t<1qjzpPkyp+1ey|OZ+~?NL`-+d2#c!$`hC#hUU3RNYi38KaF*`F3 zWjr@?u5aaDJM%c<&R~Hrh<7^&9&a02$Rw7C+^hkC_L~Yx=9P^7^($TIkVY|5JM}L( z&dpnh6DfA>@uBUny5lzw1un|!z=v+A7LxvdR-ptJx%snsy&HL!7n(MQw$ZUHEBMqj z{Rz`sXF|E)gZYr2J_C?8mq2SwSBX`GiEPAuF!mWJn5NiSjM@xcFbc87Ya+h|#hX7n z5Sl=5v02u3hPBKFBXhVOjDh;KM^j1vKGym-cX*u4s0Dg7EG|+^8{RRv4RyTNV2JuB z_r=Ve$AUSD^7$p_XQ}!ftMxJMX<_c`&}havMbdmk{G;D3v0aMdae}CWhW?c#bzt-F zDHr{~kem@J0y|oZ{$cv0XE{nL`5ay`^#-QAkQt^jKH6O{f><%6_VQM`_8suE$_*r4 zEc;eLG92qK&WKnQ*=s(0760BSTzZ<``rto&yzE|EK+kS%=Jj!F6Yo{i@NNO<+ufK@->mybuX4RP2>z}a4YR!&fH5$n< zjL&U$2O&;57xq|Vvc;*W%H!OBp`Ux4%M=u8&I;7Lba_lS@%xmu4N}3eu5kXi=I>TG z+sS7tdg^y}@9*fx?<4c&if3aMEIIHEcYFsYpviHN77KJkjHv&&3F+}>D6d8DCdJ*C z7WLsu_PKj>v{Vd#%QcOPx3o%EW;z+D%sRBPSH27l8@t=*zMu;}BXSKvQ;XXqK$ztYVqO)p7LyOZ?0kT&&wIL zgE2B@A)PuroDSD;= z(SsSm46XnF0dg|G(bruU4*NM=++hnT0i@D~)7|+WAV*uH`SAbcBZ?GSA5#n|z-;soW%4|X~Bu}+5deeLt>FZav;85guLr;#P*d3L+ z9n*BKCJor;!6|kT>NnoKer9QM0XUoGW4}0H0F)_W={&{b+&j{4j%WFDXD<~MF&L5| zEKlhEwET3$M(M&xXOCZ4bV%afY%AcPGkJK<;wt23yu^e?_o<$+ITomW)|wbAkBr6* zeCl4L_ucd4=DHp5x}3WAJn2B^SU^FW{kG#VNw)~|+toiX!{BZHU!$Hk{|pHFh5tni z4&VRv>(~=!wLb6bewdRgjRil zrwSscfv^ks7Aoa@h$OJ<*O{N5*KDfusDvs&GP*U z{0?KI>HbG_A;#q;Lra`B3@uf^Ni!5$dz`5Q+}kY-9(#)&3u=MbT|cPOXy2@XRT25{3yi$@A*%lC)X z8Tp;}Px~E?Y90ICSeLm76>b7=k>CrE*}e9i!CN?rFL^F_e68zhL*GMdf`pu=;RFJP zPob_8I?4fJcTG7|-zgq4-n5O~Qs5)X*vI>K&bQs^QVKs`dk+SkeTU2h?_p#!$poU` zsuxW+tq2DoPQEVuBN+Z5v%5L{#})?dQLlm20L?6?YS!m+h3BAWJ0Ah>{YF842gL^M zJp73Y(t;Y5JyG7j=r6X9VCS_Vq}&k564D|_(ppe`+shpzF+c56URU=Zc}-)O13OZv zkeLWnPqsy|(08M}e%lCDYvSk1l7O4d-wW6uXNYRIBE`1IlPGiY5QG66vpbm-S!Xf@ zl0u)%Cv{*o9Tz@tC?7;fOkU<;H|6`RL_}c~rE{HC%jp+XJ;Q*j%984d24ps z=J0?bfo+JZ)p+oB!-p(+-GlbO*Q^F)JF6T)?fmszClITL=e3rP{yrb%(ZVmCd2n+@ z?>?qi3D?0xl)*YD7A>f3eOr3xo$^v2;nN)$t?01mWz68yzXq95s_Gtah%2COOtX zPaPqjz=6a?;hi#zmJgN^yHe4vr>Z$ef9^WkORW7el{zBIU&t=g>^t&uGo$t(d6e5> zE|Ih)4MXQlzKD9_~zn;P;`J6Prv_e~2EmPVA^TL%7Z+qjreYTJ#(Rec(C=t@r ztkCOY)`v11zj98{oBH&AMWyHVX(99QrV22Gy5~E+`^8&9Pdb-@Opvt=yb!`3G77 z6#cL&pN%v#j*a@mZZ2~1^n;6*GSJG02b>>ZEb@6%c%aPL5K>^cmC#Xg$D{CpS+Hqa zS}QNc*k0pC(*F9fS^=MFwt>^?)Ead;8!QBR^s9tLQQw|yjo7s-4XA1oRa#c2Vgln>oz+8Y3+@cb~aXT58hD1MW7o z`6ud5e(Kkx){BvtXFZ^vyQ=RViSvsLl?*oc9)1n$bJ34=@4uH zL2>o4x`x4KgA~3v*cBL}T2Ki!rCA5--33qR!aB zr@9Vt#?r#sB$bnDuhII(UMnwax^RyI$p5~YKbVC!kw%VwDS79`Z36VRSpGTA_&iXQ zwWGNoFay3`WY+%t`(Bg>gsd?3!4=m}L?)@dV?Uy4Yl!Y3$T#6ttC?!P8=#5<+vXGj zU|w`7m6nUYXRt!3UH0VjCQ92B=)o`Tv|3!ex0k!V-Y6?E1ewT%-J3u*gL93d=O{6tF0c|6!{PyesMJ|6nVYeD}vm=u-(4kE7Nz7GIP_lfN|JM{D*~+n5 zM}*$RL8IlS+O@UZnX@kyLBFKfj%&zHuIi?x$sR4Koz?I^g8NP1maMbgjy}T9ulErC zCF3r<@=~Fbxi>5(Eh*K7HTwq~?)Qmr<}s+$%ZrPC1k&niKhLO>n%0u9?PAhcrY&WU z740r9J5z0jr(0EXbG0%I??eXPLW&^s#pq^m%-!$#IcLdp5JP629lvw>^T}b}nznX& zs?eUy>G|k+=`{RdW=n?Sft7oW^yqrn2}MqJfo3Z6b;yOlyKYwtyVp;GGlO|CG2mm% zzQrU+^Du5?3)h)er;eI^KJ$oJP;ppQJsTIpJmsC;%E>>Y@@FQWaW#Nqtwn~vFr$IE z-vy>UZo}~@=;=fp52r_H;k9;_IPF{qHJtAET=;aqSPk%^vA?DxY-;`~ z9u#zobr3VUsBVIZ709s%hk+H{B;d61Rc|Wxy+ZwD@M7waj9Q7{7vlJ!mqyUjZrMk1 zEG&}~JNQntf8-z@cXDnNcP)AnzyHR}msV&}57TRRzs|Dx!w!KhA0M`YaeNDyTLJI& z`qlTtl3WNEmu(gjPY>Qyspm@mv6$_yxlA+^bVh!QzM>>@^xm9bFu~XGNoCeW;P;4o zc)HevaYGhoG=f6;SIo>46*I*Yz`At7k;vij*P4^|Hd|YlHm5sac7+5Bg2&p7N%Ywn zqE@3!>tJ{HH;Ep1@8a$k9O{w&f1xVsA)vBZba0|;R_T`kW5OOM!FYTdSv)C^2>8x( z@{}}aboZ{e)%WjjpwM(}!zUmN>vT{Pwb4AD0H1}cfwHa)H7qcH>UbJkDkuIk@&~s) zzcD@q2~~SP5u}C5NUZWL_<5Fw;u4aJew-cuBm|JB5=DjYIJv#txBl1{b}tFx@0!Z- zDznUh;!MsRz!B<$Pw~VrUNr+l6PeFiL4*FNC+PF%$n(@$QYPboBDRasS0BVLo*+Gn zP^!KyJvcexo_~_3!8^9sG>jED;+q)`9{xzsw z5`!5F^ZuGb`Ge%qhzK~v4Tf*v%(Lcj8d2H^6^?Sj{`%-wy?d&l4SU;fXv%@hf4MHN%$)Z*ZEjpa!HBSDU0^rO(hLLYDIl< zvY4l$*Rp;130qfyA+J}Pgyc2YZdn)$ixaTlFdKYHu$s^-Za>dWe4$QSZ0|*#pu!iw z6*TW~g*4WKNk3mi=(A+`^fyyuf2=49@3{zkO%fL$w^DCSPZDC%H^Cmv!6#ns6Xs5D z-U=~rk1hH)B0G@UMOvn)7$p~-us!sO%MXK9V3Em+=KK5jG^l}?7!Vk-mB`X>c6-GI z^w?;tym}z^rdibU_^-wDk3Q+HSA*BLCmX(jdRN$C_|k?HQ0eu9`)?lr!+(&zQXUBX z+19!sThY?u(7I9W+`RA^N})O^^zG+^r$CBaj)aKRS40n2+S}iqBC)CW)AR2<<$wF1cj+;2kuxC7vc)RW)F^rEQDP zO>u?wQLh$K0>o7aq{+)0tS)?7oYsf36mE1oKc64!XdJW@I<2)O3Ne2i5%50S7@w|_ zIn=?Su5XbrXruqPqip%x1ERQbhu?}{)!90-bb>e^KK$1g!@fD@zmJy5`KYPsEwPLh zWBz;{IDGk6<@$Sno3Tn1;EV?HRB`9<$mIZM7NR=x`~45APRr;1%jaX_PVWLDz&(0P zMSlsq&KB{Xt+tGuyXEf)<}LmaZuf~hShse({d%q_0-1Zp9w0%_Q=0BxmzTG}evbN~ zXzc6F`6^Tq99?kahiGN~d(%koe;w}Y51HpXM6EOiHua?R8`^Wb%4~YFD0xv(6Gk_> zcN%}CjsImmJ#4>^2jFfA?_&^jZoRffh6ehY7Z9hox3&v?E#sELshQ*RT8RD__Ro zDX3R{a~?jY(@vmxpGkKEosCti$Vh677)Xy4z-ls1#1PzY3TvgV%S((%?gT+?r!7v_ zp?=anWE6mNfX`x^(V4$rPJxnXzN+LA6dYUO<`%T2Y!t-m zbGh}r*%fqpRcfjqwwlRK*5VyS*v7B2O-E*Wx|t?5{d;F{#=fJ3#vzB1nmFDhmOpl; zXLq|HNs3c3!4Gp1hEQv6tJ$3>Zq%V@ADR0)dX=xrc=H`fLD-5)g7O7JRi=s1ftdVxyuaft@*e(CI#g zQOfEOC9mYfU#xKeb4mmNAsL@N zX$3#>rOY+x`#MmRqp@b#+#m>0x)nPOP;dZhb!DPSn@omD6ucI*VvG zrfrR>zZw~E^vGPeh(Jpvf00W8h<*iN*tzkcsy3ZzV3 zm(+qvjG@cLfhq8FyYbgSQVWaw%!zGBs^s5WKsEM%w3By>q=LthO1F^GWZ#ef+^FSu z15W*pso4C^#n{?>o`ePqJ>(AX=nY3)g!8dOLiu33U2Q?!wees6#z;H)P;XD4!Ta6V zM!3OcQ58ySZ#T^}ys^4eS6DABpty6tc!yo4KvUO?UV~TsKI!%<7|Y(6HL+i9h@dpt z{ia=enj<9OWWwB=vO~5i?!qt?p1a5Xxwk`?D_Rl53hscA2fw(0Jrh{&x7EIlSs8!y zv+n*j?B~E?HGB0~7s8H~ zl8-$dU?oNA6*iEI(?iQ{RO&`wU`qx>m=CtNUcL8#ZJ=4G0_T$|Yb(%MLBJ?3y6S6f zb?_?TkoG|m3;ABs{t#c$9#ks1+QcArG^rg{|KrZYcaxa&4TC-D3N`hgc7v{&|8_q- z4Wy6ra>K_E&c&&Dkf^_#7I*@E`!KSUHbbUBy3+Bddpq2(=hkAEP@YXhLRf0*AJZ7i zRIz7PIg}>F=#!egvUTwen{tWw^PXUQab;ZvL@48M>m>3QQ?f}-KkxnG;bai4%5dF8 zo9Q9pN`D(d2pbnmAplDztLK0{Ff6D~P6RyBrAv(42|Y#~-{xRfqPxJG zBi|yX0GG&>iKD9q0iNoWir=#Y)VVKg9?;FlsYjGk8mVsD}drGTD82PWt|1(kee z$+*~Dyu;)}&a~y3Dqo-&*`ce^Naz^7KTIlJF1Gh?{XXj)kURsOqVw3 zfzEKke5WV1VkZ?LbwBzNhigf=hOW6%Z*#!1Wby73rd>Ih6 ze3ni3Y_Cwlx=rEbjqGL-Fk;k-$m&Isyi26GWgj<#nr(^u)}H#&2=URHV&0j!@miQ_a_ZDT6T+)yn|?%;cj3 zPFHUEguj=%KH2T=!0&-u!5;E_Ozq!A`lAjSEH!y0gekVo7tSaD4EXS@+6`oN$C+W> zCG*uP+zIv__3ITyV@pnLI+9tGTAKw8y-K1SL^52rUdL5h5T4V~)rypsod(j^);+J& z_MISeDf*o|z1Vs?7BY^Xo?bXDPkNsi=D*WS)CO7#<25FemQ%xxxd^z^K@di~jPPn_ z3fw)!1-VyG!PNg{`jMiMcTNS9$QNNN+_m51UCjj4j$jwU6dT-_dleph-}IdF7JcFM zIGW7z4eGN#Th;d=0$nHb(GI2`okNR6$ikN@dYZ-4R|#Vt>&{m_>Eb`iI--sfSX!#K zh72xxY(~TOxm~rsj~Qx$g1d92t>v>#JO$=!IuqVyYnR;41m8K{XwSBe*KaVN;*_jG zB_&{Ur3DK$(K{`;CqJe982T?H>)j1x^n^uNR#eV=9UN>8<2Xy=Q^V~K+Z>GFr)$}C z#IGg<^Y@F4*j_=81U&xGeUx6Dh8|@+E|A+ifal{z#|k_goOHMo-*FBZhL`WS8fb@` zO9yco%~k&NAut?YX)Bl8fC%M8CtGS9KEnUHB@L@2wE3UTl-a_GuKR76M|0v?s%|{E zB54==+*9Nc%#Tz^IcIGuPs%$7=DD0iTd{DPdvrbhQou307aP*eJHc-j73b7V{`mE} zZ$BXvUV4Z+yq`w2-{}33S5Hf7+kAYiTGu!6$(&PPR%6yJ?n~Td!*LyfCvwnUIj4^(2Zd)p^@v8z1 z7ful;Y6&sjJA(m7geQ{X1IY?feB`Cxg`oEh~~C`CwH)WB@`A*eal znYi+&htAq!qF#i`fVqqC-zj8LHF2ebtD;;}m?qFN_Qbw-&Ums|JbL|DZQVtrroijb zQiaD;`HHK8yJZpO$t*Us=dO{GN#B%UM}BAz=_2!mtR zUp&bW1Ng<*iwXM#UbA?%bTW8OyXMm6kA?wyMx%Jw!h?=CFvn@q6Td@wLbgv9{+v>$ zj;|)#XFPrhqw0T0>XwQ+A?fO*8(P2MpSLtAslgQx3Men{@_Iu4-0$-+fVVDX+nKt{ zR5}@U%=o6p#CSb6duBB3AD%AS{G>ph8NbM~=)5)A6bof-M70(3`|73{ynh30%dx5a zCKrbMn+}F=zsFG>1a_9e2?d^T&w$oy+8(HT(u*b)w^fB9=xa(UIu8G`OKGxdFU8dP zbOsyLI-Pi~U*|9AM&v#DMiIm+7vuMZO*^^KdRrSgzNPa?ElLc^fgZ%*I$*t zTd#Y%4c5k_CeJxXFbeXMf+N7-vpZI=3!Q=v1%hQoKq-_Wk%JZ!$nhcT-;zU zDT;|o^RuAov)8Tu8o~7$u{)j1@3%{zZ;i#M-i|cRL&TWLGD^F~Ye9MHaT^q_I)p*4 zNUo3`-zOHl1R1cMtMZUZKA>}sF|972>Eza}8*#sqCc`2w9_~7DHl;3pXfLL7x&KiE zMB59pQJ6xCdWLsq3VuSYCnHx3Xy2?l{5+jyU7L~)KA(gnjNfLUT>v8{Bq0-#i&5wi z84f&uZwcx?0~w4@m5VkRa3sLixAc?jy!5%dNz|`Ra+#21mpMUh&JuASMZFDM zDw}p!E=}KUc!YPhJ-9^3p>px^P&13hoc5Ercg~Wvem5xkwxdH@8e*niuvF|64JW%F z$V~IW@1hHtWcf=X-~`UEqVI5a|4B_eXg@Rm@ma0b&Vm^xmjc1~P*V2;gJLWI00hv# z=~%&`YW*BsBypk5*vreU+g$cS_Rz^MPxhP9{(dfE?|d<_A%j7KdbM=ovVKxVkJfef zj2LleuKqRw_k!uT_B#RFzTkp!@?t_?cbt~j{8qMDfb&tE07 zJCAVZYio>*_Jd730ONCgZV?3_>qDG=96c^C*Y!R;{#JfS+2lAU8D}N4eAbuj@9;{j zw~WalV8C*Xc9;tU7>a19_1i1LuH$RM1d4_wBI&C~S?5dTru+H*yiPT04jm=~^C4Ic zt74}dGID&s$FV36_y7Qu@VBmCzg*ga|BhL`m_}YgF=v^&XW|yxf0eh(J_rZjfYu)) zB>+9Htf5>a%RS|f3_`=t1VMX|(W>(cE`7f_6#e)3Ft)APoAg`bwd@@^roCCK)5%=w zH)|hj;oe1XJ76$68{PhGw*8(HKBKuuy)^_E$&4m47r&Qlc5!6Z(>wHt`t$<l$cO10MPLa&J>brT~xX>d+ zx|-8p!$iTBurB*WUW9^_`zM@wm6!a0r8m6QQ{L5iU|E7iYlkR)EKV&;*!Wdu?%`;;110)US*6H^|q^cR$aEP7q&C7%kAJjizAgFJVL>85 z5=XZ^qrbo{5#(qB?*59V^mTBbAh>W`IQy=_J05ofz@QQ$p~UekqmnYy1?Yy_%(=E# zPcOC;VJ(jtUt?UIWWVsOJ=|?3V}VX-IcyyzBT{QqxSvgNgh#GFLZMEU2Tcbe~rfPw0Wa-~q z6kKumZ~o#hy7Z?7N(=@k&u$O|m9-#~q-sNwXUuNneuekL#qUPbU2JXj47PAmNLUjE zY+z}UCmCMGm_d%HR1a>`%t|$OlPR>GJRMLutT4Did#aC0=A32eKXxCrlE=+_vJ4C4 zg)d(|r2rSGcUgbMGJkwyR&=FxtbVX#{IIJ!1KLPo-QEjAj1b!-HXR*zu@?F6i1CE3x zOG_mDCrF~MY%jk?qz6psyA$Ys)PMLY)UYdfyjB3WvL>&%{s9;o<1nW7gump*f96-! zw}d-kn82*gN&!LFVDP{5M-^3f?@N5rGcmmzeD_m+`+<(hhr6MZwQ>h=qvD3J=N}>0 zG14TBhDH0_6-K^M%Add>*TzI1*z~}(4M3K=s=%1P#}6xsZw1+T%zrS#+X;7~1R!-e z`A0E5h&fe~I>Tq{!PaY$yZHHSJ2gH_1%6*cR}fz~sS{@H+}vcvY!^>p;zl>}5xMkFnilApN-Z-^ytF=-L+s{rmX zHI*wTwQjjjfgFhUPa#b=e#t<2zD_f&C(B-R^9m8`+UTjTtmb$?w*6YDG# zZxXKCK9IBYIn=+%)7mlit@z$n{3Fe}`oZ9lW|0q-WM?K1NmgsXR=hB?w%r?a#4di9 z$jHm-0k=*EfHS_Nb-1q!6Lk`})Wsy19(;!+>Oc`zNX}vkzyzXMe94j?i3EpgB0Tk^ ze@dcvY_Y-Y29X4{lN62Z_Uw?Sp4(TB|Mv*Ui`j#-^c9ET*K$)gA0fYYWVP~>5pBbs z4d?~H@ZI1XBN=d@+OHOUfJ49rS{|L35)lZ7(+9mQ@G!9YCsBd*>2aW*a+K?@v3xhcayGs z@R0P(WWl09jUP9=R5>~dn6n#^0pw@08_VsNL~~6F@b5uf7q@@0!mfXo6xAF1^v3v* zk2N5-!b6@M%@Mc314BM+hGf|yG!CwA*I$NBdg&Y6QOT@1YpV}WpDy_!_dVA~BX(hd z^%;G04aFBRt(ZrLj_CIoN|++b_BrqR;FVSQ3L1Waaa@u%^}8lQ5iaWC zL8qN+o7u6G4ugSV`Ib{Wwohrm$hi2rRoTz{MU!ECMI4TMWX6H7q@xeO6LNB@a3siP zPO6Wh+u@B?65giSXb{97e7;2^%R)aDNQk#Na?XieB_#54K8s-eMJ)5dc$M4fe+6O^ zO?HD7>~5bDo~LmVF!$>8Q1^p=?^M$zuikXI`nfOjh-@1^e#y-E^X3=wmXzOLKR!yf z;_QdFN(kvpi3m80>X-u$r&vSKGD>Rt7dxHt(v+Tjjb?2+p=}Q&Sk_x|iNU6mwUX>* zRfQGF)5>zKPMjCN6}xPAY%g-D#;ZdD!Yq~&g2kJ|I`86)qNhLWn~QIkx; zHzsV6!rGl7jFt1Y<+So=0dzMj*sva79sTr|)p5YkKT#>?Vb8HNBMFm_FoJ5rD` z+p{pfpm6QxqSevQ<|FydLbKK(tf#bFN= z!-qc-qvnf^40b!cF^}K@gvva}nt*}j@7T5Pk01kS;I)_U+&S(j1n|u%;DcX$3e-xG zApm3=6Nn_@9o(CCLnv@&gSg>Sr?YSIQpx!KP&{6!?shqifLnG(h+8`W4U*y?yxbhx zzg#s^u{Lp$6T@dyOp^?6lEc8B)gJ<(S(+I%ti4B9kCy~P+mM?KffZ!aQEG73Ux&|b zg>%Ki(a#$~K*hz8O~VDdoO6G6CMy~0IwQDFSEaCRidM)#FPiU(e7DZj(9fmF8s~fg z*$-crj=lo}T|0&m_Rmp^xfL|vy|H(nob~BK+N&1OEoS&gn-}G7M@%*ACU1N+odF6B zOK(jXH!}H+#!=+|(Nnu+cg_wuZ2|w8WI3H{OS;1LnOoVb|MWP_eZqTrk6K}zwcj3y zxNWB3yb?(v+u!AVjyIB*j!F%j42TdXiT#FyY2HR>e%<$xE4hIcx@|?K=4cWvI<0Ar^=SO)3&($Z{#eD+teUO3H3-M= z>8TR2e$m{7XB%~ya~{NZ(uYX7q-Q{d_QWfo-08+$Y~JNWS_w6Tk&T9nwb+o=A#i;rA|*PAdF zER)#kNvKOY4W3+Y!)$Fm!ml$k<<1tHMfhhx88)k}LGuAm$JFd{Ooy-3%z-M3rybD4 z@62V*vhVfzg*{wueBevQAS2Cp*rkTE`{%-%CGpMPJMU(rlKnirg)_asYj)R(Nx2~+ zXYs*)RcrOx89|H@(f7qf#ftth(T_{H6n6|of;WZ+W|itcPgE^872@Y7U8W+`DrEmj zXgAQ}%h|c%Ymo0DprXq|HYE#tMrPmR??d~XPoG81hNsu%Og=MiPObQtr*d*9N7m(q zWMw4G=afh8_5oXRb}9jSPUvaaL|0%Mg6;Rd&%AgUN%&)+&WT5TAjGG_(c#~!)cwlA zzBo-eeqq5{$1U^M;rCX8zSRV|P+)KLxXWHmZ&-`)j^NR`K zbPj)+nHSqo`h#9cXso9zazakzL%DhF^ zIO?Wl5Qna)Wl4t7EmSZk{(bq~Z*5vYm~+y;QVss2nH_%6Ve=ZEy5xq4kj6Y4^6dDq zZVL`+rW zYvI`0A$v$;-Z6$N@il#M@9%Iat^T<<_9Nxe{Ry0hVS0t9S-lB9`s&9;eUoq92NSi= zI#i3lYX%6Hlc)ZC($jhQIXC^(qCR3d30|VdwjI)`e^#01VXRpBI4t@+8AmTVwDq&y zb^qDN{$6J}Ki=B3vynH!iqGP{=@ab=mA+>Q3sYizVfkXHBlyyZNpWLqS}g^{zNEnx zKj_3M2c|6UeYw;^Zdx(EY@i##^NnPK;P?-irILm4SkQA$sEL_F(keRN-k=2gC#Bws z?{>nQl3_C%M3%@ov91Wa8@WqK!_xQFqFB_(0sUKCG7zPgUbpJ>>@?=PpC)6j@*o42 zE0(;@szOdH5%Pf1T8mTZ$HSIfEtGG}$jY$t)D+F;h`=z*YCJH?i(}5g!5vVI|4EPW z>DeU&|It!7=Wbq*4hHp~1>h^qkVYR80pf-{U1?JwoN&O~c>@yMV@ZH+JkOKY?-t(q zK9S?a7JQw~o_9XLQndmXlVTNs+J$B`)5EUREv^17b-h3Q9^BL!aTb5$_4Y9pnRde$ zaSA81X{a#8Z~{Wp#6NhX*_ge;+_*#r>cM}?9JM5u{~C_sIAkyImuczncCJkGmV>%E z1`8yi(i?{^d_Fv0LkJxxN5`W+{nSQsE3*Abw)=>_AI=G_@RXrJko6x4(766gbM91x zjP^%n{7ELYI_w3ZdEG^WcwqX{?tg@m@KZW4(KX+qr9ME&Gv)2Qne5EuK%vbAgKc z2T}O6jH|mYD?KS85_o#k+#`BV$SI4%KP5(OqTBWMB9SEe7=pG7zh^f_EgkYrR{A`1 z2LPEjs&YAD;-jQI$I6$SkOmRU^$WsiP!uSw2AC4W6LPjMQ6^aFe z4SU^HV-+Q8Wd(RJfyYRGhAgW-((SQskW-tqRMGsy?Jd+%5nE@ zPy9pjGsqac_yM_7M~$=f*{fIYD*Jj02}iks-F~5%re;iehr3&_hQu!nZ#AU>Fv~5j zskDjg(y(A6!TFbQ1Ja0X^JDSv(nL}g#kk($DY>KmGn97jb)xO_8|2$jgcMiv?;0)v zZs5AmQNHq&4Z6o_W{%ak+gl|2nPFdeXF|-PpUz;7IB(wQ3LW%GZHcFK~sI8}#$ zI*)bHR~yCAW7ry5k(Xt*`){cdSbS$|+QxbnsS^=-Ut+Z;C?jqEhxfvoFtPvF>NpARuTlhUtyI)iDLC|tjMd2c9H80rd7=cRd^uM2g(YbvTtd+jQS_DOA=S)JfKH#zNC>WFU7HO%Pzj59KPGZlOS z9~HzGE}Wd@vvob)4*)85-A6C!8o{5`RJ3qn&_}LzFJW!P7I7<1maA>4Uico$Rb)>( z_23gn!H|+q{crD(eyJ;K=pB?-=U!T#Y);mbibm=!2;R5{hksuYym(ud$2I;$F*?y8@jYxFX^j&g|fpSqK-UuUA$Ju1>VCObXNZix&A2F=EYYK%LdRNf)cRKkxy*>w!O0T+v?f@jJWr)DOwYT%vKZ1&Vak z2aEDmJQ31L{~PpsseDGyaD;Kfr*#e&8PD56CV7 z2gaL17NQI>CrrIX;n8lL`HOzKOKr>EPvZBQyvS|X58QMf-VK(-V2?FlOXM%S#^2^6 zdG?JZEM6#B{#f0y+^D~w_9=Zzur!IzpjG3aWM*gINe*eWVNTI2H4`3Z-5I-0Hh+#{ z!Lgh<#M7FerlZ~hax1GppUdYs?xz2>vJ3J~9yz3AWPXDIXknL+`$=kQf=^>% zi;-t3-}GDSukOA3Il6tTHvY?HhgF%{s?5zcf_>4)HGd?Rc2+3nv|aU+&LPLsHaT{! zV@>>gdr&HZyWA$t=+oSfV5ac9m4jikKM{HgO5fPaFC&>mjV1;LRH&)xHLcqTRF(H1 zx;{Ng|HIrkIDqRWb}KYDJ*|s*uaeCC>NQw#8GC&4$Ch}eKXb5a?)g*gnd^XJOJN%o zKg!?$g?D`POw?~LcV0^xbUY-F+c$#*q*I#P!^t?NetdXlLp_wvp!fRC)H7-}Cw;-F zl#)~-v=>dPPpkFe>;LPR#Uv-mFF5+$`LcI#vC?ogNd)QPO=Rp#i71*hO;Dd6Eg#zd zp^f-!v(zdgW#6gz#lv(KLAx<5`eR%#Q2I&I%kaA+kilk8|Di(}S@zxEG2=)#H}-oZ z`l43lu20B6p)XFB;~C7I{OkBVT2?!x3h#sf9mFGYAA&ZtIuQ>OhXmng-i%X_q7iR%q{)?|)!y`s-EDJLAdMfWeAbnJFo5I~O zIM_6wa@e!}<+N}ZD-$gsd$9hx8KrD8w1vLn9CMmGdbf8!4q?6H+Gy?qo#lR0a$?vm zai5T=32CGJKSJf7#)R8bw2c)M%S+4RqE z%1PsIKqdK~mKCCMta|h{3fMg*K$pn|PlV@Q=Fz6)$xjau3Ly!}51XQRU9Gu%mwk|y?q;bnZv^#9GwJ(8qNKm-3> zsW?5DNRQ{k^UJjG5gs$XdR#Sm5DJ)I84tJVbRJTgGv7Gyg_y)?fa2dZviRwah|TaE zCs9dMYC7y0Z+Ka#^qcef&H6liJp3N_)w`VDbEKbTUP6n7r5eJ~ztz4b<*WxqYru;zT(7b@sgd_Oe}T)7li*i^yC-Nxp&v@o**{|as!oI zsjaMP57=WB9!ON~>b-gM|Ae#3=8n{vyA=9R(c?etgrWc6Vw>^g{XtfBH;i7@DXTW3 zcwt@A<=9)W77;rzcZuRcCT`!DDjfRs{c~lOy3QN&#tDJ`kM_PZDypVg7eqj^_J5>SGK0YOl54g!P3A)_F9V8|JUIAk~*-}AlS`<-=u-F4Uf zb^FJ#*P3B>@7~>2)m2YDwWgz>@CkQQBF?rYV06oY-^JSQa@1+c%jEW4R=w0)M4 zewnL<-)09Ur65l9RLdCVFxN3w@phNtwa46f?4HuIVaIP-hiyp^*G@vW+f=9Fpb1dP zCVJ|a406oTMN~)6ViQ%$a-{<1weRLCIb9Ofuwou|y?;DhC|B4=f+*j1q<&50@_WF8 zRZ`(bVIT5@0+%(~)Ks?W;tZxUy>@abD$>Y}y9vxA=}t2lnor&^7Eq{{KhVe;$XrB} z%_#MS#O7VOn8e@`ErhGVtTxc}f^7Y`{KR=ePaC+-Y)>q=0fHH0XJue#UF)lN3*BVP z(AEOyf0&NBv1T7?7N1(+UiH|(IKhmn%BF^juS#)*kt{tYVfn)F1tH1Qj$qKFbS4^@ znBtYlAP27pstBUftRe4iA4H)S<_C>Yd`xfRYq0%%7EB2d{By`(D*)WP!)7iAhp4I? zOIgXHX5Z3W^*E{@4eR`uM>hQuD!HfMB+_rmuSCeAA)iL+0UGZ{*(nxAal17~Il589S!QFG-$E+qPyhmm%z!2BooUW^A z`WHFE^ymD&F?&U@wiiI$5lmA&BWbZ zwn;Wv>722?Bimvt{9HL@e~m~QemKwaQvKuh^(Drfs=KA|8w*6Q6zCXD-9&cThXZ_i z%#(LdP`}zArN%+Iut*_dzdb+Q(qN{XK~#IibZ^cM}W1Q?WWx47ooWg~o6mPEl1 z2yM`5tlHI)Gf1zocMvr1QeX_L2ffwnYp3C~!FsBRZ^y zAo{{si%(CRo=IgR8OIvWJmmt2w$uz+&T0@!2j z2JROL46DB`uym^J$T?W`be&8(Kfg6MJ)FO~-0KaXcAWenmT};&Z(sF#&b+-~wxcCM zwtbe;8|E~YY70n__}dT%(0YuxKF(q@Q%mtz)Qw0nrCI(!%irzGFL07&3=~W-@~nHm zz+oAzKa0-PiId8uA)YoSI2{-}^pL7%g?@q-;{A^(~*>7vuWc_N%gqqT_vq#_j#+tJu$d5i;D|?Oh zB1}C}h@o^jK9W&&F<0VJxKS*))k@qhFQh{aF%Ril+fS|ZyWAn=JCPEP%GAoX*ICTF zwDg^=Snq}G`CiGqg6tO)n5Dm*R_Wf0Xk=BDFI1bEYz|=Lc$H4}F=YW&*E{@sv>PDA zBcW2ck(s3)lg$+!aGGCl{P=MJRfA}xFQ=!Gx%!zW36&jta zvX)i@Mer|O7gIAh$zk~PZPa-Wql0$)b1L%jeL5c64c)1|vPQe|_qJbtBcl-xl{Q<` zN5tow1KqR|*&Uwj08>#|a22iZLz|lblaOnZ-u`qqpzg<kwZmEl%eBvWQ-Q}MvJ(_C!K@#5eM~hFC1K5}@UX3NdX2A;m|0KzY923| zQJCM^?%}$hniv89wHeRTA^C}tgF31HgXO6P^%-nvD2P_sK{)=MTeQ)=t#=>Fl&B zJ7$W6Y_al(~!tUb8|`CHv68XaClrATV+sO zq19aa9_|s$*VyI$E0g0ZYhA;8)DjWj+?yif@vQ@1KmN8c#d5r<>1O$)2?DH&<%v3G zrr3jL?5ryQ6Z?VZ|SpL}t zFbHicsc2uE06X21f8M^Dn4Cgg(;U5whVmhCuFcNyytcn+l>6*G0^Duw+wIPk7&lG# zbo`o|@C)PXLs7;pUj}<}5nDoTJI|)zLdwKC`}WYm*V3dP7o{a`5*ZUe95A`^Y07>V z-dwbB8~rMn(t6D_gU2^tRA~Prll@eRn(9cNp^-Pc1$q5e@f87MapMk2e3`c-Zm;PL zW{knkk6)HGL^>y2jpyA_UPL7(+GZ+!_T^RLU-mBI6pVqYnzzOo1#pZNNX#uH>&TaVGwaPUc3H1gI21IFK1o!Yn(L6TOoNdBOA*H5K zS8#CK3Cyx@Y)=yOz>97;JJ=7baS$QS1&Zy#H)q_Je!J62d8NHh#g>)LXirJD5y*&) zx+kGAwm9gf_uRV1N-d%5xn$PFX^@rbcJ`A z5Y%-glzzh813iL}F}G+sZq`NG^J>6o$Whb^pQ!t1H+iOVgcj1Z&8gNBMbIHN)*wYO zpb?IATPPB+77b0>8?qX#cf5C84U8FXhrXSzt81*ODMxJ027#rFncUm2_CEFG;^bjp zQz5qIeVoAKSbzUzH8J&gkaL;r+145OrBB?2Vbk|$h zTnKo+5(1Yug`SeuiD#|coO4xQ9~;d1`w;Br`nVxOg(8a(!!n7*$n3})lu`2$jQw;N z8QeA#gS#PgsI0!dd#DY(3qY&O#r1dP0{-6*l6#rUrhS8e>$JNd7sPY8kKz7ls{RPA zUk1{3Q+46t&e-v*u}@J`QPl`DS1v>&lw#OQG>AWj(!xJv%{+T>nog`VBR)VDA}gCP z%PUqoReJf;{GhnGbh%&ZT3z3j{_^ z!G~@7m~?3$9wTzSI2k_pH@q`{Ee=9^@`#htrBNR!Q)9`Q=on+Uun?tzE#T-{g-|ki z7-#K2bDzm!^jP!WUmiHag8)UroJUPDeGTZo$W{1IR72t5%pJ>LNDEuntA*H(#_ew= z_e`#dWDGs2u;Bg7LRW^DFiKU4Y1(k1OQ;1uQ`3TVOlBJAtxG$<)VF2cqv>lIXu+dV zyw~Zn6Ryc=MsexH{#;QV z0};^Gut90R^*)vXnGVthx|N2KkjcS$kCY`rtQTT~IYg909_)5EPX-1}C5!8~swa9F z1BjMBZ$4e#^yrfY-Pu7P9xi%(SQ2F160h)g#HA#p|FP-JF_=B`oR?iQp#|k`s@YdO zc=uc^fKrY5Rk19~EQ8#tL0D|yrZJZBz~J0I)XotX2u-#PyL34T)*nY!t!0jmYsGl+ zJJ#*kEWd#o2Ck--PD*7+jOjF3>5`$~UCqs3Xno95-a%^jL1lforWCNY_V{FwS z?T&sxo#2f?Xp^LZ&XI=JfLxD(OTQRBv^YBYH7TI%cC}7Qv*g2B(_&qtsn6HP@Np}C z!HI7nxRbdU_x9?o1t6#HE2o)Dj#q=_R5<3Y^32GX98%JpQ*0icmA^(ep)yTxkckVGvNQG-MhI_ z^vxFgF>_CAo%HRq+66nMe4i+SDeA4b$749D%ym@c%K-IWAP>O-A`qJj=<8AbdyA8SpMEN=$AfgM&zGIDA9nmQ0Q zk;Nh-5c0WR#wx(_Ugat$Van0MY7?8K@kww=WJ82w(m>jX%)*!Eebb%#a8}3BM+r3D z`Tgvqm5!o}g_u7FGqhY1HsE4&kXcU|8*<`zAC~9o{DtZhVjW&c)B(#~2Nw78*QQ3M zY(u)IHKixy;?vQOdr3o0AEN4Nn_KFl)84$O8d&o@Sr(KrcUW58im>(xf@OFXrMo-c zRl9D9K~FH#u!zB7Zc4jIwIP9|xx=+DtK9P{)8aVw9ECOuSK!qSV{A%CT23UoNs=!@H|f$jZL;Gsm~Hg1jf>hhQ#)|PuVb(JTYkgNS4awKf9KO6zNQlmofv+s z8OP!2*Ozn#L~$%XU!&m~oeaU81j0tTUMTsyqnTYw-M#z0N1e!W(Rq~0uqG`S8NCFJ z;VJPCpl_7BenRNlP(eo=CL6>GoR@WN7~hs^`Y zwctUQn5<9DB>w6xQFt9fhWtJldTpZ5JYG|I?0Cm+(!3d4!&?epmX2kVh#WI{L6vzQ zu?(L)!Q|t87V$%TsHuTHf+AJWqub#-ro^Oh0PFRr@{7wUCJ;@jg7NDf-kshtF>@8u zx%%ejZGLogxwIG}YuW$|1N=ueXKIogpf##Ks6+Fxo|vf$k%1s`a4LjjAbzdKs_#O5 zZ5(guUX|GO_EcJPDxNZ-%}xp#7Tb{%8(FzdO?JJEkH@drLnu)f7j$WYS0LH1G3qW6J>^J)T=)SC|L3aT6+%D|> zhEOXbVGCwa*2nvF>S#|ko>BzX(H^ET9&{82wZ-=H6$ChVTB!XAt!j#4D9K+zo(G>x zvR}u4D?6thw$kSvuw9-srvex0_{TLxZIwY2FL-f2f9+>+fo>Y_LWScous!#LX%@e8 zQJVP(joQ!k|K4la<~b6U+;%yNbflVPekYgAo@g^YklIAruv6fe?tbA#k~C30oZOM! zA>FWCL=E?X#l^&Tt zM&Vz7m_?ZN_AprCe|KO4^UN64h-Gh;XAQ;96ps2JDF_>?rjij^Q96a59rR*?&|>P) z+%wCghBd7F{O@U9S`+(~b*n*PQK}PW9Y?ggmd!qr93rYmr4l{auPIprKvuNk@6kME z3uHyJ(68&hM|Y+?mz^E|t+iDSzK+-X?o@~Qd#=W)HdPTgz^mYPx;QsD3on&5M;F`A z4Sjh&=9R&p)nEQS`I{={GFijdSBABeKO_1JhUY(-l-nzu$qCMmX+#{O07RC%s=^UX z@9zcay>0XEIR;A4!J4gx03{~u7bD+>RPy*&r3%btk{RK`@w;`_!NI~*v9O(xJ6LAD zSz@Mb>xQk?>MJC@VFsrCz~u0YJkA(cqXq9omqK4MslGXHT(xUNZ zJO)R`dN};A$`8T|5(C{tGVI7^>R8-Y{sP0g258Q8>1{_>T|D-+)xSVL=O-`_No=zPvWLyS}i`gthY}oLhUxl7p0Ew86 zf#4p+Fy{AG@&wznChgf*qFAg`uUF{2Hb=4@2>{XDs@5!TRT{lL|ycYVF&rUg>-OC<2zyQ1+Q zQnblsv(@rYhg|{X2M2G#;^JZI6E=_chX%pJWr$%*murQ<^UI>wq;2To)5vC?D>{dd zrY}76)=90p?Nf+|B_e9nPDV&}Yy1Ka7Pz6tde1KPWEU?T5Ipg1)nT>}WH+ddC)RO6 zM!$(soa>dBQKxrWN$KI~<%-4LW-w(k!kTk*h{&}e?60?%DWC}gUvp4*xY#J&piMJ7 z?)}z#_&t+=%V2YI=QNCHZAdw|GdV%FPm8f7d!ZZb#JS#9GlN`VuRmFtPtqX!E)A{J z}4aF|K@5Mp`}75~{ntvVsNH`JazWyp-~kol{hZ{}w%qx0)>DhGlR} z)ICi|?+vbPDDDfJ@OkTyK@c#>?*cxR%l5r|9(2C0t~4b$W&AUaLu_`?y8eVcU`#Y# zw@I@RQit6ou!2prH~Lpkwyzl_gRYYJx6h;L%gm4JK4rk~KVVwBr-iXb$aRuycQLfw$`@Ovm*~M=##>K)3i#NgMxXPb-SHqhaRmA%wXwT;wOC>}g-Y*^}4ZS`<5zr6pZLxW@Q_YBH=E`68AgZace_mBtxFO>xEgdVO zn&wSVHgdYAPeZ@_Ik_@<6ntATvgDC{TC{ER%Ibb8{9*xe{dct{|wdA33~ml^`Z} z6ZDRTfW0V7B4kee6U9Ju{oHCtg57?(kA9-gPPgMuzhx^^djx*>OW`};2CmkmKobo! zE01#{RUGx4GGOp5#ci`wiW~oHSz!CFu^8x&y0Ogb5GM*pCg~vsPm+zAp~9s0gC|!< zC`F6PmY4iG;j4Qal8gebsI5z%Ai=H_%cm%C?+sWy;zVXTQnHdLw;-8eG*45Cln>8p z78|+$E28@JWSiXP@#{T9Qfdc2*1)|t-z9oS({3*9^Tms%waZl!e8ncn6ikc+ zAKe}`$wjW=MC!ryLSY3F1@y9?9w_y|Ak@GgWMBQ&Uod7|wzqP1`C zJfbqeYT8<8!#W~#(8V68&UbgIVA$r3I{{;}R6-!p&n1f8mH_@Ri2%@xY)F#cSQRW zBRHe6OYE75RCcghJTntL;8T*JJ;-hHz9h&D7i^lP$Iz05?ToGgLjwWMTDv~Jb7O98<@=H)NG3UWqW-pu5!KIV(TtbW63t@hrT04bC9)&E z2<>xTG-FhTFS(X>J}=`p)r|k+v`|pc)bIx}TnKqmrTrwW-qeniNu}AONIDaJ7a5>OmF+2ljIqt8^O8j% zeFXd76}o#P?@sS_h#p$(i87$jq%xt}YE!k4x*J znV(=${PHR9<|+K+Z{7MGIGKk_r84LcShjxyw17+mV+ZXAE98VD)kM~!)Rji1RB`qO zkz4z|k2ralMVK=x=AR__9|Li{-`N>UM_DtK(+`$C`f7TfCxE?7lmEk$q}REbo9QPNR82^&>a(v-o%pPX)Nbs%C$ zh*+%hK-sR608spw!@Gt9c5g8-+;qpYY2VDg-r)xv(5tv8`_=pFz}J_R({Rxn28{&D zm=%2WFcv1~{&(0JWB&05K&AlGf0sayMgla4NSwis^BbcjNXltmnA!~R?VF!?bd|YC! zb*+zhU}N!DiUD64K~lVrqfaLb#)j$l;Xpb85Mb!+%FG$GU1@+9&aINtYbgwA9)DZ} zfQ_0VPu>3x=K~js@!w>~CUzqKQa%6r9C`J}jqr~jCTap`>%RrZC7%AAUH(7_ z{z#kA*G<}R%RMtdC2olD{p)VGe@7N-jUKtwVV?q^f!{};{;pGc+r`G|G&fm&xY8}4 z;D7(_ZiF=+a0NL12*a(~A(>~-;TeIf3MB#PH z7Eq$T?m`{^W1#sMg6{xHdCp6gC}iC~5(bU=kGn0i82*K$at3li{-dcV0~PlEvioFB6lP6y}pU+)SHSsHME2XKQgY#`g&yz=7IbRnqczYNU229d*hRi{nsH6!Q5mGKd^mgBve4=F2RC>1?-l@I?4rd(EUe z#pS++=(}^JcnlHy*v{HwDW=%P3#O?M}@})VQKoGf=OlOE79M& z=EY~eCDbc$#Y)MdEFZM1-F8bA`S`=(1^a?UMN(~s^N~cW*j2km$xI*`rMo&5MAE{I zZMe58NEm@yyKFPts|Mv7>^&Sua@>88e`BcR6(Zm3sLB&-eLz%Z`%Wa471`Q31L3jL zle-%l!6v{mJ{ZnJ9mmzJJh;63ocP1`b(+0Jc1MzkAi}3gOi>4Q=)dz1#4Gf7$!1Y8&9kDTQ zL%-EpH5R|AwFvI|{86&!V7AW44vQ!bwySQvW6mCelSc)wSijWGTt7<^>JhtNZqLLS zgcg+xqY<W^)uf#%OmTU_Dg)0{)tHbo6}@r^y6#+pi;EsyXqeKT z`8x`%PFBXoy@fmDsW=PINoY5w43DoZM$-(&QHo@{HjO=-IM_WzRy-=r%$e(GbXm>2 zJdcWKaC$TA({DG$j-NxR`2xh!f#S&*A7CNOc+!uONu-dn@c5MV=ze*j<$oxEWv5@^ zxxPDl%T3V0T0J!$(OF<<5&wr!W6+Ka5rRLUn;mWI#9@c zZP2n}(8rlef~W#@MR__SG`x=p>s_W{rk1?2>%M#8vd;Bh0G!vRLuke(g!)Y7hW6{q zxWW~$cK$4B6gK|F9`DY+KilWUrF(~F-2a{);EMiPM%d!7RN2m9h;L-?KAL8q58uM9 z>!=%vitYp!?f2+MMR(wuukA5iH3hh25GqiScmW&&tmlYSHJSUPVC_(6jP$)9u4l7+ zF7|GrU(iBbgOVV!?rJ+81`=nqYk~ou=xH61+l$qe<&&!T@pnu^@TsJuqwi&&C}joJtURw~yoTc6DV!!y!r3=S%|6>mkJT^P3Z5 zTFwWYuY}p7yXqMSFh8feIqp>EMVNMd=zQX4Q^i$E4=g@!0Q2dL==)U4b1~yp@%}Xe z_IEM#+rcLiei?k~KC&w47$hhW656nfy71eErmOERGI@@gt`?rUzy;IsR;wGIbGS%k zAixo<5fAp;)1^R&9r$CWq^cU%G!a*W4gz$yvY-e91BRS}8S&j_WDrBsl?T>EYPI8n zatY7z?DyPjd?fija_p(ZaW_92Nx~HQCwDrqg-z!^c=q1-0`FpVw-y#;dG7Wy^VPr& zLW=OG%y8;IEEeDr;6GEP**G@y?c2_McP7EX`51+^Q8+-SVn{`{a-o~dsP=@#icCj$ z;lONkcfjh`B$p?L?D(krV_+7z{zdBZk6UKm{fmV`w1mvH#|VCnUS8b10-XO8+o*v6 zx2Ylwr&B`Xe+&Y^*Mk42d6h``-{{1D-}`^Fa{sRxYNa>WHJJXm?|H$tXh2g{)Kn;Y IYWeoR03N|)<^TWy diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/cillium.png b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/cillium.png deleted file mode 100644 index ae41ac76111528c40edad8308ffccc9a011bf1b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108152 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 V1gV*?;Y+ANSzcZ4ovi8O{{VuEDS7|^ diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp.png b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp.png deleted file mode 100644 index a73ef0039a6e7693d3ced0ff6d123ca8b49d93c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 291688 zcmb@uby$?^*ET$qilj&X*itk1ecji!)_I=mTx)iuhMEGwZOYpa2!ufK*;6eD1F=(v^V-5zUJ*x<{YNx zktX;TZ>gCwyV7~h?-FTq+|2FxPWJu_KgJ85KZDb1v6>c-i1D)Ne;r+4E$`KeHi%Zd z?npR0K0FtrrBIdvUiHFLM;{Kl>(ck$89K=HY@uD5x zE+NdnzbmG^`(wtT5a!O#&TyrjHoyJ&t?w0&jT8R+vVUEX=;p)m@$u{*Kkhy~%EBZI zzGG%%6JbqAXq&HfsQRxvytKB7kY^)Jdm`Mb_EN>P@ecaBop0~|ZK*N5rw2TZFoif@ zhHOoSYa_@%|MpdraySqt{?pZipidpXGoW7N!W#;%Rs ziZGG&f5yBhBx#k^InrS<+Vig$OYO-^m6#I1cPga`{O&;@egwNAHU$I;YS#aFp+4ut zmi+74uR)uao(izF8zUF6I9I9(b&*g1+}o;b`;pwvyAa#C{7BDCT<`$PcX*^k>ZGek z4OV;0WpoyblLq;gkHg7ts8PS}8lcSE)F~I9_i5vSAMQr3jJ4#P9XB1!6=e=Tf4+*i zpkmsdNGSjRY`HPZ{p95LhQbSFa%M5fGxg0sBLo{q!5;>jxidG%Fq)6A z-+bXr%iYxB&7_?t8d9TqlfVwG^_oBodHj9*gE@xqDPGfx`z@_>MvuOz^4=JvfiZp< zXt_l!R^~++tCgH$nMy*$#QM&i3Y5=gJ;_R_Jc^_Q(xR zkxHrc0i{a+ADonhjuMO`V-|>&PM?U?NC}$!ifOte3x}JRcBjPnc!w#2=6~DMa%8Sz zA```9KmJTQK^2kh<{z)d8v}=`M-{D|=UKWxG$}w6F(9Zu3EZ5P*MCZ=F(5w9daII= z5&6-dG-sTVCcDxCZ=xf(+S}^xi=29V;L80fH~YtSuDINj4~bRbVo%gPNoYGhZ6Xr= z_aoYi4#m3p-DZfk@!%&Of#2iSKYCbov0k!y^4_C8OoaPSq69MxbH1$*`bi)ebxwWu zAJ5ep$KLzR%;O4&@Q)DHW=RInKCju&mM@SU+Q=j+P%flSThc+OkM=-b%YT#i-FhqW zwf;rq*b|#!7%Yw+^ET>?9g-cP=kt|P=x3*F>hQP3#|B4(XN zl;1?C*zh|~QpA3qvG}z;v5~=g*IKdOrcph{!j7dC9I`KyKVsz=I;CH+z zHPXC9e`Yt)(%`*Vn*u`2=Tq78dSMUB{M!Q4sWK^l-{j14{Rw5zi;08y=K9>M+?u%! zE}n-nom&>kB{z^*e)Ds+CHJ|Fjqi{z;hx2QDYvh;+{J`@ZQM?5$i1w#lA?7MWEFl> z=05KJR2I%14P&>PLpS`E?g#tS#%;zDiq9@@{dTC;eu=1fPir!tW1lPI?`4R89xdvJ zJbjvI9jgf+bAh}rkcYQbjNNG4T`$O{9i`Ect@XYZ0e83Ly>oDdLBMMZb67B;@X9b&~=p6rSUl=}H&$ZW8I@Q^OpAG{MxC!j~!yFn^NkeLZw!HWJ))wLIh1Nm}SaX{pmM z@An9&yW$VbKFL)^scl|63VCiJu?Ke~qiObcx-x^Uvy0EaQ0Up5sR865-5@e)RR@8( zG1N3%Y^7~0MB6$zJTFXq9M)4!u(L~rfo6*@&gBdC1*$^^(BzY%6YX&nLd3n;4^@Vu=3w%F?LC6-)hEF?Q0}fVFEe z|CRQdi^%Ifh0^TjQ@Q|tnG>BbUvIxNK|jD-6njT=Rb8!D6?L2w^&yA>VK3Vd+1Ysd zGiA;_9i7#}R75riaL8+=iCf-mqH8E5{WoV_ncaCBtCo~y$;GQ%kWG>A(X|BrNO=tb z`#0&q>&u>l_bc~iDAk*m*ajo6!{0zxVbf&{l~hF8m-0ByMy&072P7m}*8?j*KxRbJ zhT(WpjpOLWkv|B0PNo#hDVx{D<|eA+arWhXX)oOC#osWG_Xgwz@-(sq-*<9MTclyZ zvH1@D#^A0!^>h&N&~<0~O5&B|7wYh(p#2-t3%Z;);wS;~?JrP#Whb9v9A8f@* z-@BQ;eot*h1Y}2cK|Ezk#sz`G-FPerSZ-LLwm-h_x*a^InOR45kARS>sI;_gef916 z?v8+wxIaPc4pm!u71p<+Z{T*`6xWkHVpPJnR6h$zGbGalAuoh<=Dtd8mzE5FvrrbU zatTRL7Frta#o#nfAFhvnY~s5yL_ua4~%qi}AmCR@XXs}-m^SIez_ zdyCJ==t0}-E$!jk{M%ye>+7=GJh=!mke*n#uLCtM4-Q=9uDg#-wKyj3o>O}Xrx&nRfaQ`}P z5x8@_1uOIW6FI_O7aa&Vo##0R9c8Yr&f%qD^)gmvfI;4_Y>^Wh|BUnTj+O@4llP0W zqM`z8XYUG;d!$S1KDi$0wnM1ib`tGlT4?EU>Fxd9#r!(%O8zufL%Zaj>3ui=^d!?3 zf5*|OTX!%l9}#WtZ59)iPC+IRZN8$SqWW>mT%Y5+dw<00cxO|Fme${Z>@~~uv2X?h zu&I3hf`yagaa80#XxuMonx}DRBci`wh5CE}ac*h+n};n>?^XG_bboF|=Q%6NhOt=X zr%fX2?KJ9)W{_Gedceh{vxI8>-1Jnja&PWN?C0OnboT~lzjdNtbmAenJbKu7es(#) zB4Wr9OZon{b9WFI8iMtPOxnwsqYuDCq@$KGosBsa8klE6PK0@q76H8bS$bz!1;tn! z_}G7Zu26bnfX&n0Bjg*biTOe~n6o`tAj0jiCDm-PpO#Z}?&`Uemz4kjQLF;ybRJik zV7JzmgY&Xqvz`!WOG;Z?9cx-m`IR2ADh*Ybr@&X1x>z-5nvwj@CgzFgAOrz@cH->4 zuPjZm?A^CD{h%Z@%FcPRWv82hU)j^DZ9}hv-4x2_ zp4ho~*$%WBx7kpp_^+87brEFq_X~?QwOzw()tbrC9@~ZbCt{}e-)u1XuGHaXZt{K= z?Nw$wNImP4wkqShc;*U($6m9`r9sw9 z0p^(Su^%2UXI0`#&VJ>f0K}~s+`osEQ?$Ax*`j47*k3Id>4B*eOSSB~h07mGBU0}p z^SGM{91&h-hRChJ0RNm1feh(0XODx#H7$QQwReXSAgwM@E;glYomE(VV$9j)tMkX& zFLWb;yv@6unV0rpCTBJ}ACe=O=#brv^PYe8LkBrH31p;NR))fn_ZY&m=|Kj=_^_xk?tetOVQ%leUd#`eTf>wwt zB^#6tGoB7kM=j+mS;4Y>r<_ZpQ#e}>#L);1LjPe@5SzTHm*}lbV{};t&Nz;Vx_iQ7 zs(-X_`}Lsh);I|{k+IDB02}JYH_FOKFer5mJUwfy0K|Wm2`AL+sJ>0b13^$>;9eJEOq7x zMj;D#bUihH6HhqvQt~q0UsvSw-{FY%cGwMq(6BHpcMlI}g?-6o3aovp%P~km0~Dy2 zNhM-mX8`ucn5;!~4eYoDEaJjx{;(N89dAr#xLl-jIbmv5|7~-@^pDcHynB>L^3v7R z8Iz^_LLLI4Ruv0ZRw#YOYL))E41 zA~_bZ&HlDgyj_lrXZG15^S54Kf5r$^(5u}4O%}JCVOI7dk;}Zoo+hWU7QeHgY$Y{} z{M<|GAMe!XAFrhFul%2$h4;QZgJ4l|a`KBuesxKNvUdUp0RSLZ(#P#&S=ALYyQH@`2~x94}0SQU7c4@T9*s^iug>j?PFPfAbI> z-aqXPT8jXN*MARa3jdhHf1UBp|HW;hSiJSmsQSNMNMJhlb?d>iVn2sB=RW72$FP%^ z)CDE-ja9cld|1AfGzfVOTPFJx+Zy`(!@HRA2-kL_9{8{4`aE-%a++r6Y#bC4n0UG` zO#irPr5>9X-Ek@56S+Bw{V-qxGlrrWQl!f%b>)%9iFt?XPlnW+zO{&ObHkZA<}N#A z!aiB+TExkU@A!^v;R(dO^rk9P0PwFs^{&l=61Z)pX)oBXG8JN;VcB7~Vwemp|g z-W__Cv69!8OSdd!%5 ze8cO~d-+0lXl2LR9mMsuxD$4vB_?m4&^`UkF>1CIP&{&OHu&&qzH)(3@uGm!^}F-% z2rDlxW}-Z#zxGPbk$wjAwtVCI%?-MZr7#v4^((s~a%pXm>`5Ww{{%|8LQi1Bor7O2 zoN|5F2^dYw&YK2)800ZbI0(3Op)OxGG3m=!uZ6ByxRPp~&UU*&(2B{Qgj%iiL=_TN zIT8IGb$4;=zn}N~hliWn1IWSgapGViMF>vOrLg69>tSmGu+dI$LII zWH^D@=y2u3EXDSn7n)NAnPTD#4j9#{cfJi3jRrWtg7J`LiyLclcb+}IHmv9DsS~Qz zBaGNw73@uX-;+A(^yxBKXkJ;Z>S@-(a2Z1dimW&6chLRQMe|n#PivQ{6_2wf;Nd6y z$=|f8yO5So7JnMlmHWngPhf_le5zeDV+vk8LAiHZ83iyronpaf&!lVE-;{Oa4IdbVl>K}XZ9YjP!Ic6_u%V9ENO zXglXeW%{C}22**uaV5IQU;h$=^Po1_1rDD-d&p!9^KwISsN_B$mJ$pXj1-Q z4RHhY6(WIyFDCuHe=s#eVv)3n4d*1 z_Dv|S>CA~*dka6|hXi(lHiZ1-4GZ&nZ=Jv|E@O|J`Rb#vell^;q&|uZInI{BxN1w#!?)o}& z&Yd9(ehHoqUS=X_Q`7!lo}=IF$1h$n79ECI!$(QWzMN}@SJ`{SbA5?tH{fgAjM4qQ zJ@b0Skw~XP&iCTg256LvIgW%ny|A*A93w7&7M8e<&}+W$jQMMgG?mL|<3;0zb%})T zyRp`ly2@p-`6B<=Ey9Xp%f?6Ic_OxIbBdMxy{Q0DA}{1TzCF6pDDYE>QVIIN{KHFA z0pZ`H8mTX|yG7JW#lJ%d;}BBmk_rxULOg;1bqRPym~ECg7N`q1PThpAGKL20W+e;< z7*fXO%uVXzPrgow|Kw4jY77Qa;w$%WroJ<&DG6Y8-q;j zN}g{j@)!^*JjIW(xioxL)yMCX)PLP4$TSwS_bX2eB8A2cZrX|s#Eb~u#Clb2a^UTK zL+ue2LDy3Y6l-=7vPp+!e8FFaU*wE&xRZc^Wb6y^t8nJ-yus|@@2If}S5`4g!Slzt zPRfb9^x~Kiw~hCLB$u^tdySKBn8|+(;Q4(%-&?g1{JGjjg{jnlVx;=f65ms?8vxZ@ z9a)1XUq09!)uofkvAmy6*8M!_ZV#fZgB`lgB3WfhcSf4@Zn0$Zmd%_YA(I`uY}#V( z>1zIA4Nvj6z`Ad$ekoMD+A~|SXT5nw%{n^oWX%!SGP~xNEhaWL!Xl?3Ez7ctVaBgh zoI3d%YfSBg{mQ91XARWn8|dg#^HsrXC{u+J;nlpVRzsgoghxwLewNp?^!pDgw3gtx z^64F2)_MAqZ86T~FWVO~Abt@DE7e$e1n~>}Y+|QRNu2rdQZgr9?{;uf(Q(Om_iZ;y zeX-Qh$_m%az2pqrbk<_I3|pO>pHl0j-h58BqZ)Jd^X1&y6q$5$-wjdq`mSkcy&mv! z-;n<_i_dZn;f!)dL=!RS|8>$@CUwClUr$8x1pju@2M`zR%`7q%%*%%iu@aWH@H-~Z zg3YII&oToZ2eA!)v)z%LxQn%L`;B3$)^VH6mFn$_XzSIhO1OPQxCXNFKG^tPWv6SW zc4Lqy{5FIM%Ms6d=uzTb>i%r|-Nw47i(hsXUqlwA^ma0{p0tG%?Rh)etupj`iIgH8 zp3bI>DpqOCx<9XhI}*FMY_T?;d2Xja@$$F#LX*$p(R&HPSmBQ)Mhi(}Iv43LB4tsQ z$De3{zNmyh4OS2qOeY=?VW~Z#Fdb& z^+c~aV>sQ|GW!;l0ejud?$DUB-=9CyQE3OHv}1}Hdo6s-vB246T3mTE%Ijd>^nozy zt10&$BgaB2#WAD*tiiHwO-ia-9~N9p&e2r1AnP$_p)}19IBlo|)P@6prQpFzw@mFblLnrZ zk^_XPr70VRA5}{i6F}(@yoh}QoH}@|&t-^2;Ol6G54r`Fywn934j$-;>O8Mv1PbQ0 z@`FJNf-eOnCZ11u)p z&ZFA1v_~KFOT2uBT1I%)&IJ8Pqm4e5{uTQol;Z26DxL|=Sd>oZ$C?L z$Gh&cHM7sFAT*8M=aZZH%ILvJAN7hY3dvraeas&%row?k6*3Q znKrae#U>Ip>-bnb+Gleg?Ga$#JbllUd%{l*Vok&ExvAs}rC`8RtELrtMMBK7y92%;EguuY?=B&;_5cy zGF91VFp!$?YW?k7slL03@kVJuOS4Ke46MQ7?wqQ!#~yA%Eu{89ohna`sR}lgKns_H zo9a6-R=tWl*g1vFGnllQf2Sz)y76({_x&w1cek3(@WE|7V+cDPo?vA6Pq6ZCt49Pe ztCiF*z~AbbLorOmnRnWd?&vTaP&`pJXTu9Ol@HPZFzsS zzV!QdVlLsZCv-;TY2j!3%E1nSm@ttqUg<^wqX8vz)pHh2Y9DxDM9(D2jLvqIXCbYZ zVvDM#`YIj{uhy?8@^pKZIZr?QSAjFVudrv)R@HE)l``FvCt_mpUCqyB?{ln*wo6GS z*udMxEYH@fLu)&;*z$;X&=A}IF08~8&_(Xbgj9@p)Lzie@QP^MeFw9yGV#ClHFu@!kD^SXx}iK+FncZFa9 z|9w<{ZKC*_nJR|}4LY6Ql17Z$5$irvS+!1&eQpET%~P5V@$#6c9cu@PZ6_GNjzP@9FFJ#p~b z*mG+fHyAm)=!!gbGHUeI6hZp5Tm4u@|C%n~00R>Xi`Q6$E(nrzIQ0yH%SmV_| zT2CVLYKG53n<)yR7eoEz$VU;&aJ4ls zxs0T|ysA7;Euf_^ltNzt5tUl-ss9DTx`2X$!fYuX+UDr&e0zg{@@XjjTn&%+j{Z!! z#Z6KY5{;lB38%&8jIKBuhiW6I_JieiRzALja3VTq!J+Q%2=Cn)xoC3kFZub5xAE{E z8+I8SoShXUC6V+F4Hb-!>l~e(34veU!o$m(n=@i#VaZngEcl_Jp+Q)^M0c!VzgfAi zu8!pXeY@(t?=Ra~xVYj@cV`t=yJGJZAdyIIEv>tDRR*K>RU~)rNZVH##CZJvVU_gx zv$8=+ik6m^%Bfz7uJ+TXZ)(*=y?1yNk)6@x+Pbuw}%+Ag_ z*3I0g<9m^1@mwjmj+mBK&CSh?1bk6cROI(PFsrcI^Wou2#lgWzN=%gPOW}OnqwPiT z^5siws}bTYzhb2eQ?Bs>mBCE$&**zgN@jsCo4YlOf-k0ggY50uV(BCozWCz22n4Cnf`PZ*!(I@^!M%25DEm=P*Dp*BDKbu=v^b8EB&ix4|paKu9 z6%^F0_=>+W%c~HzKI!G-Q&8nFHF|x8WCb?^dvt+7L~Zv@pxh5W%!dhE5KYgj*5>WPEKT=m~yM}_U&$iseo@f%)M{xs}q-(my^=dRU{-N ztdE1r%vkUqJb18D87|@zoX^MVQ%uBmetxdu?#}l%BI5G^lHnvc>Bt~(&{#?eQu3lA zTue-?{|_rp9bzed9F=OQ$LXQEx4Wwf)&P#v4t0HHeZ^I`Z7)r{nXG4$10v6FJy}oX z3;Vi2U68q}D-RS3{h(U}jfugp@a`NNOKiSIIP~`QJuVC*c)-Z`2866t3bTxi42zIZ zs=K>83)mpO$B*sy=IWS`4lsSXKi36SaJ}0nJq0JY1kagD-oAfNtfa0^-kru#HBa<# zocSvGsHKWNbxKB7w)4lwj0{!e*}f30h_Y(~oWsD(le&NzjSJI4mEKPF8g-?^-rYo_ zMkOR8d70b1rCnB%OyH4$v8<&fBgn6J$hqP5Ibw9?h4Tj04bux@n)oi`C@CuDs7qYD zF)}vpnV3i><1(^Mz}=$6XCCn#o+HLjo>{y;6`HB@D0l%~T3wYrJUmSL_|bNhrM|B2 zgM8i{s*NE@RQlb!cYlqIjX6?{^1M2-oN4gk1`!+G*w|=$wl}{*KiV3C#VRP6qNS~E zx4+P2oe_tFM>gCXh_vmFqe=Sk;Q?)8Q4xFKVJCT|CrnGLXo7^8SPBM%@dsZA+=Y`a zN}?{*DFq!V3McFhDy#{1=jya~ga@-Evl0>$Ve6@;OnQ2H2*h?7D-)Ca++t-Vf10Qd z7y89@?$Fv&gGFh-)mWit#Mo(1Jea_djTDtNfAcL4r5{F|Y=ifNgJ);u;D{L=9km_* zs<|Qo{qkjWy4=EUXSzHoGgEE98Oen!nBQX5=#I=MDVvk%>D=DhQu^@WL(->DiVZ&d zDK!1xN$_9!4yHdzN=mZi<)-?n%-!@fnvC-YD|hePLhS-AKR=PH7StK)S&439K>;(T zNn@>UhJ%B2sR|oSQ57F+>UA}Cd*@4ieF~@9>H)_f**B!@y6C`F{m2u7EuD>fk7+pl ziAR4*kundyiedqtAhm<9ukiZ%`bfefWtA^|>%mZsDL&ZtwsK@-WTo$+`CaS~aG1{k zG_7rHD1gww5US6bqZ?zi3 zEtH-;%fA2E`s2W3e2r%Xc%f2sf$%%K)8%1e;^IB%SV!)O8Z`L{;D$=MG+!`X?Yaar zR2gvYH9Qzd+6u1oG7Y-0GH4EX^2*OI0bqxmoSdeP4hgP2`L9XvXJ04WaIwoya#Q_* zzA6GD2h;X}fmm~Ma~1}M_WZtpQ^r?DO4}ZCE`aXC(yMuOM`k(R$N5HIS5|Z zTXGZh_Vp&QqT@o;XD`3Fn4=?3-|o#L1uS zK@6=1h#`;?p!;LDJ5$9p=G22q3Dq)5`xqr*OQG0mxzAEyHz{yplW%*fsf7k;_CHH6B+` zP@ss>Le~c9d1Yk<%}&zN7-;T7MJxM=2V@ZQaxp4RW3l2mnK5mmBsM_)SV%CBPg zeyGtW{$`INKn%x!23F((Ws?=5@G=JqF<&0EZUMl~%FmxPIyMFaaA#iMbl61&@WIZT zc?PJLYL`Vd%GmHq1J1u-&S&35Nm-d8I5?O$i_&>gF$`o#;K_tuQdXAw#l=OX+p2sb z;o_`Ii|YOR_wy$tBhl1|b(1h(Gf)0gexSE^_4LOXN(sa!gNW-AB=D$*nF$16i_us0 zPt-!r={+<7FuAoTQubo+we=NJlHPoy#`XxJg82p?!+{$2!`p}gg<=Bg7Y(iV;2B}u zEtjKf!FE(HmBmI8rj%=w0?t(V(gqRF!i*ZLK$@02&x;&J;>y;2=C!!7`@5oh4Yv$r zO1bv+_fr9Ua=a%`o-mP-Qyhbxp3->mMM9e2ZkCUsld4bn5(qvBOBeyD&|X?0@R|V zqm$(8oUg9-Har|HIAGglEnmu-5m6xQSy)*WixqzU{K*0o+sc>`(9cOJDe^!kkP%*r|)Wz+vr`qQURB;@1@ z;4yds8b`JW3s%+u#g2|nv0Uhh9%zd7BJYmk83!dp?B+&@>R?LPbcRR!XGP2)kY$t@WT$ zERk8AEL9Z{iO^zzwwrOAjD!H;C_g{pNu(YiKD1^5v3MJ;S4IJ;BL94L(UOq~oe2D< z`hNRfUsVfGca+inbItnKZo*;l0j@Iy-mvZ++vFI5DA$Wtf?mNXSS zT-=;DZ?GvvJXttj{CFdA1=p@145>1s=y&t*$UE7d8dIPPv>bJ%3auP_FyHL9&Oy*c z{%I6A%eo8<44v|`Jhd(M6KrWbFEIfM%3k)E`uf&RE8gYc*X?@Q7K&48(M?!>=Yy#3 zDn>I9dAzGsdw!jrog)!+LC=7AB_So1%L+J(^p*V=ZmseskR2ex(F>?{n*C*rdKx94 zm-G5H*1j6+|_z9&PYj_(N&{OCxj)8{8tvf=}BOSjZWF|;|4$7jzdG5Ru` zC9(QTuyJVoHETXlvS}h-Y(Q$Ls!;j(_#76jOG`_ma{%zpiU_*QIyi7eOT*>%2=t9v z0J2#Rq{)HWGl$or>!XwUuxShvGjn2DS(&fGwCji@`tHx35u1Kk-QDH%=EHB(=z<>3 zP;wYc^{fZOestwXSd9XTuXg+`1LQRjcxJjjogE#+sir}StgNh_ORX4*YQ;v4T}T_W zoTZ|sRsqWDuZ*oUDEZwQWz+~x4=4oN&L~oT=Q&|Cqrl#GbaraW%ZGR3?L6`LqX9}K z^y#4qPC~+jW4r6+)_9@r#*1$#C*vugS-{;NN;okQj3O2%eI2N}VyP66r@QxVhHMOc zRzM3*pk9v-4zfWc9NMYDR6j@5l`Y%D`|iqW*e7mL1_T5E=!gX5VLSc(m*^EWqbdAWNhs>1QGz=;4kMw-<@LNZwNk|$`s-YZ|Xh?Rxq-Ra)Ea#_o@ z2ri{S`P&z1qdH4>VUXT6LO&iHEJ|g<{qLA1=Q*=5TYHX5%(u+yo>Fx?nRjfUkTLJ z*K2`V3!0z*aqi=7kYivP4^7=bK4^f7JNEwLaP%R(c<};$GG+RgGB&Dxf4cLVp*m+0 zAsOxqy;6}yOF2i}$-xY*YjVpQhCr>`Z4T!!Ze~@hsHzI|vrV_%LSP}QYWHp}u- zKs)q!Rl8-W@6{U&FTS2_@~=7n#<1B?a!(diW4yeY0lNuRM?!Ncp_8?86B@4NT|F_@H%B0WD^?^C6%=Os)zDts`vf9Y~d$x4e0$UdzoJ!fDOkdpi* zV%%5tM9R3@46^h~uL!2%i<&Qw`an7M43zeH0AdsQDPx5*ZNUg?b2DHvZj&*@#f9d# zkuZMkFDf|zL5l(lXRr-ju=x{$9xnxbuc=XRa|54-fMmNYHh-_Ekac$Eg3wD!()sMo zNoPp}LLkqdKX>)^?s|iJZ}^KUm8GTS5~zz3^tbjVOAN^*A8KoBhk@^8OLX(HvmvpR z0y1M?RH4x?binUlwuk3@`*xe0+vH7ClXx1x-9zKz!RyNn$vp76BD7=}3kwbX{_5EJ z>x6wi6e?XXh5-S5AI_i<*E%pj04kN&O3&aWOvNLb8oM zXp0u88Q=AOnb$ z)$aHRgOVE%^j-myZTA=wkNEW1CbzM1Zq4Geaf5d!5OX{(3u5UKfisR&p!74G1m33{ z@Fda%ouWYbl=#a11RRLhb7SLJaQ4}`xtPE~m9esVge@)Q=Ekd*B@t`Vb zp8rk_lIKi-jg1W;$is}{X{L$fj0~DM>L;N9(9p(o?W^N2`aT5I!hfv@RNvr*p(vnX zHYZD{bl8&lDetvhBiIe99dV_JUBL&NDjk2{<>KP{`t6$xxFNt7O?~}$mzM!LIyy^$ zprvN3oksE$hbLMUQH%zAq~N@z#BF_MT{D}2N=1pKsEaH>sKi` zIh?@^Q5)VYn5PJ!>ZOjzd(#y*L}2y{A6USNzIeB9cLWR<>2V7S3)3?*-vlw*9Zx58 z!BaR_=Ra(vRa)lO(zgaeWH?t2&$h|{++b~eJ*Tmey2&5R4{UJq^4YgalJ6uatPvZdjfqt+{_?Y@LMa8z?6*d@G7ZRSE z!~n?;j)x>=3&tXyz8awv2I)#r+IqlMRFji?J55FhlFG`;N^pHd(j3*owQW-CiUBka z1&UATmojcpwrAV z^J*2SR!%VLT33=WD={$)Fpk-u{!hT~l?5&mFJSK0aEngaX_Sr;6kf|z12wg>wOL(Vbpwhczn}o?wc{+o)yW`ozlA7PKJ4AQTb`T4 z(lOelnbmKr0_*8^fk!l@dNh3nTsVjn06LqYOkvlh*FDu0KYnD7!49Tcu1Nvjo&!3hucf7303W2E0$3*BJ_njYHgCjiy*C-8s+^M2ZOGF3;p#asXNN0n)FD#9M{@(_ zwLxk;!uCBC#;{&?N~Qh8ZIKK$F*`6LsZpq7E_aWdJOX$C*`_T)=amL#-S_+2#;TV zeX`!(f}p`r4hnRBhe>?!s7zQI=oB|IqeoX3?cLosfew;4OqQHnX!6ek%P=S*8#Ya% z;

c25k`FdESJ~)p>MVHX9-OI`Q8A#|&}01=!^&dS)_5_NMQvS2@55sdZZo_vDq5 zJTOzfNsegy21wCXFPIf0^YZdK`S+&F8Gv&TVjw?TT4--SJnm6gxCMn zG2nPW=%cV(t|Ik`6_~UEzRi{vQ(!>AL2An-j;5yOEkeRB&;{ZRICqVq;FU4j2deA* z8oA%uRs>it7uX~}4rgSz7PhC#7$hXnEFc_+;P({C0Mhr-kOYzg_{wf;zwW>|q$EGO zFaN|Tmvsht3EnFM)p`kd0>qE}vuC%!JtB^d-1{@d4LJ-!JEnE#cf}znoN~ble-!tx zR-F3_gN=b*!=#q}4)BjT+K#?3D!tZ=It%(*SQwI#kulvP5^&CAP~#jc5r}A=m>>nM zC?Pw%l65DjUr7#k_?EGcF;M11R5(nH8-%avO>oox~rGMWgG=^7QVk|dRKYACqoY^QqHwC zb1fn)Y_`z&>RnWn3}{ev#oT8w#)i1=&InLT1W**HWyqMDKg@0k83DP(+w$hko9yRB zy5NcAw8b_l*k34H)o<%GQe z;M8#7qA2H)^sEawTy;FQ83Z~21HjPq4=X%B_+|*GLkL=~PCqkx14cfh26$Vtr>&@n z8%HM@7Zr6oUBv4)05Vb}mV3AT0ndq~lOh1k$>RHzLe7qS2do=G#)-3|Wuez?YJk;1 ze*@??6b8wRGlYekyL%L>yu8034@~@bfp$>88QqjqSWx9QIL_v>6GDN7suX$8)u>@s$a?f10~BUDjtJU^X>7*&?+#% z1U~7RrXV^_?1C|t00scu=?1z5jkJwdr?ci%{vapNv(AHqgPXH8+(8H!^XKh!WRA2m zwh`bP0DqO!b#(v~6q)mYdB&7M3?2yRl9$Ur-+mNw$@C>Z4ALl?&<9So1nSZwk(sB| zv?Y#=(*P|(fwzNZlAYaM^!BF}bKk?kqGJ zo<>&ZDa7Y~`6AyB((SYZtpS0S1X99mu{qForm|3Ylaz)g7W8M)E=jE?>@Fw|(KM=T z-ej1AI-PYv$5ys$v5?CG_MNubSt?)%f&uP(;LaWV9Gsk_+?8>(;hhD!fT zz5`r+Utn9RiYO`p2*P?8YJjS&DF?E22{c!kGFX$9-hy0@&L~Aovnq0HFet8LSdqCTZPo^_WlOF(Pz-6Fawd$47|1Pq5r0B47LL4X3mMs=ty z1Hc{Nnqg;W*VNTzqAI&v=ZlAjHz2YOrWrtR3cXlJK+8p9Y{!{O-2E1mM7_^`93WN; zP%Vtgy>xNmzMcmo_LVM+v?w5C0fhqv^oB0z90PRq`IYy9+y+$@x31_Qa0x!n)dO{f ze%;d2l3BH?{#R7&i|DhUBt^R`4-k1EB5#_Qm~2j$=k=(jMpTt8udThY>PvYE>N?-+ zi;Yg0l2bxRRu&z=THi&k0Q?pf_}LkGJ80!}6a<&lxv$@*1RpAOp0AH2!b1y>V)8N& zekq)WQGK&BO!vVFzXYQRx!|8Wp7UW7oS~8*-Pb5#mY^(CMIzpLRJCFk&n3oYzGAwSt{u$cS}xbQnYInJK`rxH$i*Dp+}N-Is%2Ep;Vn|~55PJ2@;b|U@RLL))lg8-HNHAt z0@wlKL6N+C(`^@(hf&%y1j-x$`!82IBGJPX)HF11D;>B}%k}l3Ftr`~LI46UXT)|1 z28#sl6Foma$#>qe`_Hx~Kz|05EDZGY5RfGF4-Zo@|AJKDSecLH%B>9i1gD0LgQG}} z1K*gJ+S7;9hF=$GA*jZyubKjpf`Iufj*qHOgOhqK0};>Nooc8Jw_x?(TpA>TE`5s) zYY3H7I6e$&Gd| zU6?AB0uQUG5~x4Wl0{dWmaHbp*U}=J!K%;-9^0Un*}eMe7A-W(yRY3s6N!YQ@6I$Y zS|9;8hlx%T@&<)iN;z~N1_U;`cMAL%w7XJn z(Vb9M#*MaR_M;3MeR&@-F-7f%8`Qc!XgZy7V5De@9zPc^>Y{7WESlgqYlT!?RgmHD zL-?TqxjCosi;5ouO^iSC-hMxkrKJ_2qXXvUZysdWoDOb+`j1~Lzt0_O;A1vLdb z9IkYt8^6uSq51g?K;laGm{f?*9ta2|F9e<$-*pt8L|dLf-FyWRV7>n-T{2k0%G!Dq ztfKSG;rYUSQ4v81puVG>+&Yf#hU4 zU~Vz(Up_CIh_X5Y1xEp(HT2Gay#rlO=vzE;uyp}={^z!HmSjdcD3YUG+eVe=R{TRa^mXRO17r_H3o}Jzfl>%~-Y^VyjY``{4 zqe-nY^NoitXLyFwr=oE3;wRVs{E6CM6nq1Ue9)NH0P-8>#*Kt*^;J0B^N=A75T=lS zY8~ia`o@O+)!7BbKR}C5jeWn*eb-ii_3nd2AP}PkSwTt*3k&&^EiJPesIMoBWIT-< zzd`dKJ-#q%%a8UkL1Q6vnh>lz2K4qju9AyT6ZTa*^}wYlI9m)ho%;hgg=sI*=&FpQ z?7=uxg>u2r=@|+P#e8mZ@jKa?sPsQ`2A48_a))-MIea;z5%jT`=xm?cCt^zzFLq~T zWH=rBr$YA$QzqTe{dLfCk3!xBuJGyL8bw|_57k1qi07sT7(8GGzKkZAwE$)@sN)mP zo%;cmje$Zzb-}7(VH3-D^oobD>tqv%l1`tM+qX9+-iL?#B;UZn0nS(VoQeOgz+pxc z@N|I3ZguJ$pxn(iFR9!%^NN&Y>uFBh#`D6fWPcYITU!=%+aL7pEwx%G=!&3cm$wnu zGN5likp3hQJMg{$by-evG02Q@djZf>k~jq-ZQLRJ$`ni_fDk$Y{njbdU}KeF*((v? zxTEb+D@)5^Al*7oN@$8epB6a0Kn~wUVuBip=aoWvB_|&?tRX3O(U5Zr#aqn1YeU(R zdgiu`8m}Va{*^8Yz2x5P^93^iXq(h1wpjrDyAb9zVyYzpToCv6)Ec^V2O_%s z+6Z*TK|V&!rm!a}U9q+G@=~r;O?oSLr{!PBlx7N+8qS?8dL>jxOr9zh8tdH#Y>^AB zFoOo~lHX#|4^Y9NW%-xq-}o?f3cnAKR~YEp^e;?E0KZ&GRh6{m5uf|oGjt0gUIOuq zH%n0GI+Z=~zpClKMqK73SUZb!i_raa(9U-~Q4lDaC0m>$3&Xyk%%u_!=>?8dVCAdiKE!KJIVeD(3J zudkC55@Y}&CE0tnIo|U4)1PyNJktgZ$=`}#bnS2BX`eiQfi7T2{2_2@&~rbMp28Mg z_~5$&uvh5L?m9?$IGblBLwl$fpK?RFglz3-%? zq?8L{qWn890!{?(1I#rr&-S0uuO}vT7AGesk7DIz(MwBCwmN#L0wU?oojXaXsR{-q zx{bno{i(_TSO4mmLqU}-^zdOQkc)~%s8CtVzC5-c%edZ_#5ljK7i;!L&(KOiVu5 z8pDBmGFYGzfRn>xO|7lJ2xnU;|EH~vZr2J4O%*fL*^WHy?df??qRUQ5*wN83?a2T% zcybE2DOYJ0nA3BZEPenQC+?t83lJC#o=JcKyw3q29YCwb{1reiG~WaX4-p3h2BJq3 z#BNqO&2ivBFZciakvFVyhJr0m#FNaSwbBCff{2znTe1>rX*$Fk&+>WR5B!C-`BgIbARWa^W3%W|KB?6 zoOO!5zr$yEzhBcw3Q7ReYx$nPj-_pS8MXEtF&Qt7G3c}N)d%yNb7|Uwr>yCIvv7u>ZO0khgJ(p|lAbu)1}QyF+Q$-R z-Nw$0$x$-nkVG)|PrI`mc@#GO~-FSgq~7I&ZU z%AGuug#5-gJ31x~7dm8)Pbwe*<-NUF6H%&Qe=^(^Pum&Z`;{kt{n7@4tKpAb^lX3; z6tWyj64K2nE4SDj?#9Z<<@UK~o_FSvgVOAI-dIwJT{mH^Hc<2&IZD%p=B$?19jZ70 zp_W%vXqd22V1PEfd-LXLNHjDLNhuy0V*?2M0eKHe%RwBj-= zd?Wx%^i8}WT$MPqTCY0{sNe!qAMPOQceC2InAZzTu=1i${b8cYf=vfin_bIBR{v1u zQMo$qH|+3ceEOw+Yuk!D5bAjIusX1@-@)+0#JPF*?lLTI>vE=9ChZdb9%z~ClCNI% zu@x6C!`ArGX!IuO=;F=EH-`H9L@`tGdWn{+uC9i%Sgyn~J<~KrBXucz6mC)AGmVpG3{J~>$CdgoJ#~iW z*X!0HN&p36R&J--XgEyx7~|AvUs<+WkATwXH`Okw=)3z?OrAWs00cFD)VYTe5xf)z))-<&%bA^?;c^`D^f=r^Ad*3c#{w3plP0R;1+`QCYO z?Ywncf6e3PFJ^TFDV|-Jnf0c&mJih%eKo&%`~C!|HCs_c)RZ3(?tntS^%xLPNay-B zPfxXRKhA8ueI|?AaHU_L*Y>^jP`G~K)x{tTvfF@fF%@bIgVH!pSJ;fXK~uf8c+!Os zA*Ga%mC3Ae_wE{8Ulu?Bfccwb^(oMLOrAQm z4T)<%dc`+8eOonA@T5Pr*~EAqKD-&J1&7;9c|JGi@Im1VU#==7s%c(hBj@hlelBS3 zRu435*HzhRc6N3E@GrmoW8wZBTZmgu8zCfv&_M|ErpU<1{2260Ny_JX|DW!G#m^e% zO&GOb^nWPj|36#17fu8SPz>x`#-(j54TO68M5D~ix0n#ooQkwbiEo^qF(#II$_ro;NQL`%~UvgE1Hc4h~EzDYHC5 zhz$z??gs+Q;D??<~on~%>2 zC2Xq?uhMB`39Vm+rXRasn_T{I+l-9%%&jZ0V?faBgA^_B*PDC>W9!zf2D>2mn_z)0 zpFV6B?gm6hbjSW2_dOxj+Z3VwrcoFh8{5W);Kd-*KB9aLFOhywlk5STop2Ob;4p}; zJ`gQ!E$nf5h&AE@4eDogwSfO6M1Yb%tMl=z&PYQ*On8T_gq`u1ib+-U)iVuXEibA(l^rP%FCjTX%gzw%3>f-qF##}EO>Nz=!y4ea;KpN#H}Oq+y^^B52fTtE`GrAO%@Lx-svr7 zduwL7C55Xqw*WQQeCcf3BZ9Jyxk>c$IB>0zArDlA~lOD7VvuZOG&L|P= zYeJHpbJ7J?*<7dx&T8&C_!mY>8Weo^bj?k7z%EZ3>0h`1IX^1BD+6lWH2FhBc)>Mw zNg29&ru(hX54{K2<}aJ?S5@rnmIH-((Y??Z5g@lfAOlwsuVsX+F*F`*j2{UfEYmbi zE@uM9t$yNp@_}vj7KMa{g(dy=*(;l~oaW&*5H(ixS@_XPAi1e{B|rzw6cWt3Y?8*) ze09cZXK}MWVDy0$nkRRt+2EtOqFVU}cJ9Iiov~H%N*^QTi zslg}u#?mXSDiKU4j z)>-@Y9s_Wy(35tnw(BtNC(KSuOUnRI6W)|$-4kdHS`&VmTuOPl-Q9tQOU*QXwg}W%>)LN5$Pgp> z+9r=V(BTx~an9oBKMTjyO)PNVzJDiLXf^Ctr+&OW{%vru1iW`~uc3o}xPe0t$NN`| z@wJHSB@G4E8$Q6%n4N14ONEV_;=m-g0fNpx-0HpF35+m3_F000{vcih+vO1Mm%0qgI3Z;SJp@a|YzIPYkXgsExLYWy`oA_5zA~e(rR)TP8WVr+%)1cVO9# zT0k>1sl#;7jGT{rfAzJO-ERyY_AAGzeL!cpd~0wxwCX^b3Ku6Xfr0C7;!?@qVF`Sbgu2qwbzP zXRv*%O9U?57ZtuY#`C_mA;V--BC8|hxyN8%Um>g>=TQj~)dIF>Aygt(drcGLFhq%C z1eGg(eQA26R%EHj&E4!ezs!-co9O63!uJ1BGM|IKgjDpXTj0rn4~hhakO(YRne_|`bn?&P zFPCsl%z5;vR^Qxn8^Hk3o1-RMg2ox*`KLui%QtL@g3Pg)-QLz#?6e)G4QRr~#=bI0 zJH8isdGtz`7IAgJC55JhOm8r9k=_=i*@3bH(l6l3A#2iw+Vv>;fB-^Ne@IR{H8r1F zUsA6#17r=(vxT|aA6zpPnG6c*(kbZx? z=l{*xurBa+7Tg?{u<9>UQo2D<$kL_0P?4&^i@0l7kecvRPR_l50K!r$1%UlJnC39t z=$tyW2}0PdCi3Xj|CqDFNP~Z8>~F9}OiZkJzo(}s#>;NJRCIwl1_oEk$Ax2d*!@gB zW+t8Fa4kOKWzRrYt!C3{)KGzLdD6cvGSJplktc7B=YN?l`1$y(v%H*q01AhX|ACbb z>UDDW7->i_-6KefMi?$Ij-S7NMOQvty7SEi=s>Fg<=VmL(E)cE91`j2>C4uyf9?1d z>Jbuy8#H`q`ip7dU@XBk(Q~-8wCEDv(Y0&y z!?HFkT67vVFairefGl6PuHOEQ({j-Mc&#_ouA4+Js^nAea-JXeK|Qr9KXsk^$&+FK zqp{y#dsFU%`bsn75Z$J-Sp!{iZr%GpEv)Ma6MTvaFKI|6=>tP0cD`hUWTAR=+|fk! z!4T29OcM-yW2yM8vn1ifYPKDW&w>6#U-&DV9@y~#BH05p3sBo0Aa0o2(A>>^Gm4>` z@jdrH)$#Q;bInhwcyBR$xb(&U_>B(q3yZ-y;2=Cw5aTs+@AZ?i;^I*740teAAZjrR z{LAwHcvAS@e9Ijw@95sjbZ})3kRlcj1~6h=wJla2-K=1*szM+t&<{&?mcV`6CoE^u zsi0;QqxMU7o}A-NKq}EthsU>;i7=!N?X{Lo7F{+Fz+=sa$wDKZX0(0XvJ5AK84aZ( zj!6vrdChO%+F>xYrNMSf5DDqy*(t^kFJLT4HB4!E{xW>|URw6VwQo3PX%-zz3T6w& z94Q(X?6zc%I&0k37&DKVB`mBC$Ri#Q$kit!-I8FfhS4CD%zLJCG9>lvNcJ7i8kZ!nZ4k9rttHbr@fR_oMQ8!z5pHhTF4|j#Zyq<`SdJdk|JoDtL@cRGi zLClj``;!}Z@Fk_CI*yJ~n5s&3gW8@cYEr%`K2tAR2EmZqwf(fHL65ukb%hA{8<($M z9SX()Rh-r?{;tiZMQ;lUcLEak$G?@s>i{>N9b`>bofjP}xJ9A*2jr*<@hrJ>(_Fa$ z14H6X20Wq&XU@EX#;eh><-=2S;ZkPT1if7>!(aA;y8!uJ1@xn`Q>}KZuvE!L;LuHv zPs;O%DE&s#SBjNEr;Qbnh&1@aRxjTQR?VucFg4MoY#BV1kRodUt(P&D$AU%w2M_pP zzKN}P=|EB>UcP$%Tr5e?LC(U?Ayh*GwlJAjh6+>%GKoxkTJqagOx{ose^N6K7(tLU zKY^JF{}sxFd9-g;tjgad9K5|bIrf%8s>Kc#c=XK7xJnDr!A&N!2LeY`?uP3=a+6OiT2%5v@|xsCLI*xE4Y}5LZ1rNZ1|5 zEbytbSKZJ{F>}J2Mjl$CAHn97WAtN^ikk_djn}cVx@Eu?Y>^GSQ;R|j3x;mqurahG zWUYAdkR}AM$SaO-YAi5l?$Ag;E38Ru6fCarJy=O>KGAC1%=P@bzDAFF&k=`@x>c+U z)Zt51S~de+V%f)+8>Jpin?n{OuVGPI%3!1X?f8;k*(2V<#AHKg{hesCfQbh1#NMIc5;moM|&4e8e>Kc`xPwYHWj(jmN0an8glS-F=Z_}p45fS3=ka|!?3d5Cc6We#3`JdVIkvw zuK@5ZN2x(&6SjUrcHv`8(vR7dto7hQo=d0(8--Fe_Qev1+hAMCm2dOr6Xyb|fymkq zVhoHOv;tCL4kivPwVDyfYt_N0QKaw1c&vBGK^L}{z7KmM=zOy6qq{CqdaM((zSuAN zqHAHzuusyUwv*4%`QlhII$vJb@UAYh^efCnD? z%DwSDxms&huByp)nufakkNIkEHy>+V5PWJhtbipf#>znaDLGDk3S6NCAx7^KABSO70M>R6h*ujMwq__F{{!4gu}Q@^>v-Q68K$7Bres;;BUmMz;1 z7(f6mI(OWLtJ3EK8wOJLHm9=Ao*{Q9~ z$+1sYx3IBM2pWgY;BQF_hYS@p{mX7>S2I|`g1`D>*g?;qt9NvCT-n9@AM*IDRQ|81 z|G(jW+fa{*S4=EG*PQ11LH$LvJTFE)q=&N^bG*9imLtGpJ{tEkKnGADp^sXY{08F8 zqrFXkk^JY5cFYBc{KI0xSao#-l0otQ6bmIpQ6b`*S2;KcUVsCiFl5NK9uD^(-{9KC zk7gAWAWR;MrKKx7HVM9arS!L;|Ff=|Yu`+uspti`xVQ>1SVI6WZ@VTj*V!|qUKsG< z|AVu_(Mu!`^B8du@UN6h@<6yf1DW4wo+fgjmvDhXANO5m>*R6l*s*6XU;g%0p!B$= zcv9dW{SdkL6QOa06@RCMk3Wf&&?le&CH*7pO%t`f*qQb~dXIMQCWauv;$EYDJLoJN ztjo~LZ2>Ug0tI?l-g=PHeVN86U539h*fTf)b*u)edj`TzY7=V=-3nMLe6U=% zL)A+Xe$;EpW{=OKP}VWI1D#Hr2hYrz0u|P(*Y!X3)Z*7I;1?sm0eY<@hMb{^iPZJU zpBM`AR>fS%XPFJW*tR*_F=0^mtzjrew;g{n6ROb+a$2|Bj4?o$U;i)FvYzJ31_YdR#$@0v3j*^KWQp=!5z)$_r1NrK|w)AEKl_3MP!T6)AIxD)@LBOVny+I zA1Xck&4HRj`~m{E9z5VjrH~Dj#Gh+uXb8I5C@Vw#bkyQBb07tKa>uqVJ|u9{c$2CJ;_4ZqMP^-*9nD~GGR)9_&E>9fXzz`R$f-G>{fkW7blY( z*P4GW2Ou-1mqYps_+gZxh-t-=hRRO9>ha0rVLv0m*MTfE@bnC99)5*3wiQqe@Zv3) z`>R&HisN}K(yha0T^42ESno2Ca2!B4J-RI6(gLYH_Zi(suG`EgdNj)HfM9pefBJct z>t}ilf3sY_VM8no324G_bC2CMS6=o5=J(GYnyU9d>x|g(vET2R7{|*tI8>s*;TV(5 zUNC?D=B;#>1SP^}sGFAT`@&!q2hCx~FK9F?{p{dNb8^4Z6Ek8KR=2~anTzDjCx$*R zH#7NL@7=b;5u*AuEO^7eep$n$3yJnb4w9XJ$^Le=T-yb$ottD4F%N1*3I(8J;-ZVZzh<^U(1g+W5X4C9TSbVa}=pbB?hv#15b4O~ZBtkjVuBCU3_Sgh*NrevD`%MtBKemF}_>(!^sWgCu5i3rCAH94+%# zZ}b{n50umoTxTrIRkk&80fs`mcJ4fl=9}0;?Ah;w<=-I#9ZorzSlqks#aDq6dfnLA z3hljkk5NsW8Xx>p^i#8bufP-!)wTvJD&MOfcu-5ezux`vFAmbT(3S;53K7HhW0p3b zR(+DPtBIRdXP>#=)(yXKBIZqQ1A9fpbg;)@P!>}XO4vN<(nMyhkIlW_)nFnw@7XhZ zrD^V2+(*U?XooE*X$!A%)+!~y8LFms&(2|-UXit%gLng{IVtlqje-egr-DI4V^UDJ z1=C$RQ|)i*e&uspr)SLAIXSr%MkAMDCjie$D;R#`@X%+&j2{lj|IwFt9w7-?HtMLE zuow!|K8aliUj-I-tH*MdPbY)+c>39$NuCZwa2V#@994YwVOq|>xd_)OzdeaGWCEe& z*@!V!-8s6dOee?tiMh@E6g*>8o|fs!^O@F3f!Isi(8ENGy}Oh-x{4){0RZ@prjCN1 z#vtz()tnPZ@o9bk{`A9lCn`FR903CW{jDWdP8YX7$t!DV;zr6v=Jb%&bCECRpDK<|Y{Z(0kF%<6qxlX(1;?eb4UeTAX6(9#yDLs%W>X05&YWn-4Bar3ITD}DQp>V`m$v~G>B{Te z&jtd%UdC(1$O@1bB-bHeZkiS-B}&k0?^-zYAkq&@=Q)@XiO&=Kz)+2ei|xOcInFD* zKE~)4)-g>mj&PAy!*GY?_9mRE*t0R9e0_b-yCt1rrkQgvao5i5_t`GCz+rUw5#7VHpaq843k9o%li?)u&*4Q3Msu!jp1Dqm;Z;^ zpyqS=90%|)sg8|n5=|fJjry-0&^DYs8~q^F6I$05u=W&w_F3ho##sJG+7I}eI)TK* z7u~gUAU`21vY66RTDqXLMO+aN**mcRIgM~w=<5DOCSF*SuGYn)dkoWD~etiy&<{|^LQcvLaPOboSmI@j=>fX2raGvu<`Ust~JM)O7QxSFaQe8X?QH* zFSFE>HM`$Fk|(AGYKs8*D&!-~=I4j&Q_SH{Z71F3ysIhsH(a`Jg}!xZkP0SADgs7i zUN+s;h?3p3$Jr#MGHPvEcdf!yq@0jT?D6BrNA-L%A|=9WL^7A@|LD)|HcIYz?V9LT z4W^vdJD}d@wzGS(sN98Ur>!=x;d_2~rc%@yrblGc5~g)T0^_jA^9Yc92vaQgQJ4xt z16anh4<9}}Du7W8$E#z%#XV{CCX?YLfh4G~r9}jDmv}nUijnp^qQ7ihJ8JUjq)MB# zU84)p^{j^AB>ETML+6%KOh-qvcMUyp2n~7u*LoaId4eKoULBLYI9|!E7t@gT-$41f5#2GlW)h7krmWFBk|R^o zYr=jFnE8`3A_fcs0|Q;)Qr$E*P%EBVHY6ZWfIj7qxy~RBKLY9))Iyy1%%s^^oXE_E zT5tWvjYTljSMfIFW@o=g8rS3jW!=HhQ>{%`ffK9c%>W9|Nf$(3blSJ|^q@~Thbc|% zENI&BqizY<_sP}RWfT4OiRV02um={%LFJV<(wzWl?RJV|$b+EX5-k!$OsCPC0<+v> zXlS?hqyEZwpp~q#H(M0~E0|AOa|u7Z#BWe#U z=#^{7Q8!Uvi|xb@&LkAIlF7f?LzKP!55qb_Ih+`NWoRUV(2L_ft!XI?8vz=l3c9Hz z=GhkZ)iAQ&v0-h~yz%L>Mm)F?41FO$WRp-^`*90-<3?Lize5TG7Wt~X8H9~9flc(? zLZTFUTe93>fjq7BI0kMPyTUeHh!Zcy6h76Ra`H81-;`<0Jm-@jRJFJtp;79ApzXCI&3#p`JeIg)eQ_y)#! zo&hv{Xm+uo;`zv*lnzb98gm;fCY)%O*7t(vr=Ej6Q?RjJmEs*Mxf*-K(jCoTc^Ea% zP#u&g97FdicYRV$|ManKXR*)WaiKbDd-ao>dw-dZwY{XO=L)CS4EiEicuA5s9H!a+ z;C_!sCUg8@__$yEH3)8Eb?%Yn9M_VqH@7mfEz>tFj1SIQU!V;YGf$|MXD&F$D}vfg zo{XELm@njmS|KS}BD)ZJ6$0b7Zrc{cI3_S%Fi2ZBf4582zdrx{%UWfU%{Pi!tE4XMs8 zN?~#@^xUMws5*y(ujEPW<;#~feg2~V52ro^BV^4=NN3NlVhu%I#NnMQ> zjm^^Vt^7U2XZoN~UMwdk0Pk!W*$7jvG*gp&aMI;)^||p+iL)Xd|}Vtw?8pCV^vY@3YdftAMlcJ_@ij zqlAGo7#>YzLX-yZNfevg&ue>(QHc--r@b-Rh#=6sDyxE0q;*mMzLcd{d^@^Dd;n*W zcnp}>IzxTLv`HW>#QXR=4^Cp-IYmxc$W^s4HRhsxx4`6t=rv;4K`JLb11|^dxYg)z zU)xXkFNy&wa4!pDbBid=Ps#g!-toG%H2cl1m4nLN)$EIVV{+xBrFlRP6oXEJosR=| zg*qsZmFPMcQsZ{1RrD@aQB|gn;n-l%Qi?#qU6OJH{zI2softv62W|~_2Uw1{OH|d= zgQz`XprfV52K(FE4e_pa!!U9}c+X83#J-VnBLs&OoAbTCq}_8ulS^_;#Q3|NX}8hR zte`<71-&93A=Ld4G?IoCpP=gDu>td9e~*#zb@WSE5znFlGx(thh|)A!?Mw6s;=955 zV40-!IxVdW<(wsi(Qe#mJer%{>JuwEU1Y|wKMHuGQTvRL@xZqKQ$p+#4KI4z-21`G z2C?u?{B6VXs^6fXklP^gKAj(8sC!^Pq53be7|t%ndO*pY51JmCTeKjkH+aEDJrmY9 zU8nX{Y4e7RSDM*{dIecS(N7jNgn&svH;g`K_0Q~QlwJq4nsUHW9uHkrGa=o%n3yek z0U+g-O7{f>1h(Vq_94<1<;I+kz;>}S3w`M5@c(EsQn(S?NdnuE=h@dT>%Bz*Y*`H` z(#1C(f~LEw%XWQsoCv1iWHI+Uq29?~hj^vRjS)z$)_`N&e!+1W*?!i*cF#AUCMkZ zGC4_;^bE)|MR6k6B`G$C#gRBqq($HLkqDpU9rm6qh8FT6ZOfg}7{9RreWpUlY zh=`57Fcwo)wVU)ec;8n}rRv{3Xe!Ay5s9}dpA+UiKNp*4oWO8=tY!2sd)05ps&#@B z!U1PsF^+tSunz>rs^+bHRbDRhYgRV4tCF%Z<3vVBO;u{X-_YCjX0+g@O#9%iqm-m! zD#>aPicFJhaNugVFbJ?T4k8LrZ%il-e$V>g58Xy82NLyDs}54^D{iwEAhw#je@{%V zN!YR}#>xVYzt0P#x@8nzrkY=qKg)EqwoX8d>M8cvj~~6uWe$8n8A=IH-&)U!s2^6d)ah!)R6MWJoXX~`&ItwHQ)X0UIT=ft zKba2+Y)xa3;$eV;Tkxu8iYNsk9YyUROAT5^a|xko+}y>K@`Px!EkhAUUAJGDACNyj znDQEm6Oz4?KobHnxv|{uA*X*S^Jv^l%CLcjo>X)QGc`+aUZI#Qd@FfB??ZqMQF#$h zh2OL|7c88|$-8hX=#Q4kwwn=IRamGpY8xm`eF?V2U8f{swBp;3?Azg{#`dd&7#C11 zLUk5n15=1@{A9T?C1|YLCCcXWxG{X-$bP>7FIh%3N0o9O)&+mOt}ZDKB)n|`zMqEF zVi?;uEBs2ED=fUit9Z9CSkB5jh^T`e+G^labzo4C9O=aNSZNY@E&Cs4S?aPT`sw*?6E$5vhpa%|Q0 z%0EXRBrJZSbw8iFBB*!Uj&lRe4ZU&W0*VuYCEdY;^x>k!P{`%3u;%pzA7O&qZ zrPZ17YaSI>Xkpb4vJXv#R)DW(Hz_o*tgzCm``4&-pF zo!z~oX*-O7$$Ts16d|Ar*#cW&7GYd|kXhohlg$~yN{rg%v4&z1Mh8tsrGfV}u2sD1A)Yi9vge*A|<{xt|&{B+xNY1WuQf$>S4$Q3r~x5^oOwf$8Bx zYwH<+UUT3rl_p6Qp3KgIq;&P%IqdIn+3bVTH3MT0-}y6Ve>;Q9({F zt6~5BmHR!hTA?7Dgn=ooWsJ9rrC?X&ugCQgVpYLOWO)E16SQDs!?FV& ztMa~0B*}WDGLLq0X=$k#8aL<1gOQa^ccpv3`p;fWP3D^3q=)aekdwptT@YG8QE~C9 z7%t?_s79*EX7TI0UybZo`EI0xL7Cyl(Wuiiz&DW%2UZz$%$B(6|LxvDHX~`Z5$oVz z+ik=~AP>`Zzw}td^Li-6zG2WAzwp5q(2^8v70E)Q3~pLYPRIXK>g(LJuCEGJt}X4LPbhhrh+p? zj!|q&;Ex~6!ZLNC;C3)%@Ryr16h99>*r$3y`5AMsX^3ueqB3{)sl^r$M3VQ45``io z{g8@}m>$jCD^g-x0Kvjs&CFOR^nX!eHyxe3U5$bqaSvfy=l5x9@?f9+?HK6#H^)HD zF#2apzyn0uK{D?RI7bu;dC*>~4b21KM*}?J^4sX8&;t$m@1U!Wb2S+3G6)6%rC>oZ zCMf=3v9diKjCxDSi>NYsNnqW$dK&y7YnL9n2u1{@?8^$znO7IA_+6siE67eWV} zgfS=o^zoa98f?zD6pU2>XdPdB@#TrcO^IFR#(?a|jRchSEL0VLNApCiJaAFkspj_1 z_}a!(W_=tfYQihVoB~)z;}3lY46vHa037wXDRTza-lu>(IL*z?kr+9dV>O^B+yBt_v`HmTOp9C`~-})+Yu{AA~PTZ=Xvi)nPktpyvjUM zQ^L4g#9?e}j=QDm_(Or;dDAGE&B*uMwm}i31XlGB@b&(EMO(}gkom=Gdag5OJ;N>v zh&XsDjhy>n+yDm8hQFeqU~{5*zS%X2k2n{k5J)jsg!=v(=M?9h?+8^y?m7;)I0?~D z)C&jrU0_kafLBMEZsPqx{WTDl9VT83R?ke9SrK$zBF{&i4O(=fak_-bn6*RBrOtKM ze@qSqfPv#O_;vO4jOKH#bKkvRN6T~QUh@92JysQitlK);@*TrI(p@&a2J>7;lT_dp z2!&;UM_AT>vP$Z5AR*VF6Sc#t3N_7kwEp2ZLj?A>0~HN&&@TT@{)gxmX$N@oSJBKu zUQB5z=-J_OgV$aIeKh}^IbzB4a4e38hsVF^;$6(JHB)>(#fAXvO(E4Z;#bIQFj-|0 zB$SliKr&@F0Jlgn3?>0PbnHk9DCtc`q%IUc=>MY@1TNy@N30ffxB~4F8yk@4Mh!8P z=DX1&kqE5caT>N+k|0Y+oHO$r)O8sFhGPrI3%LWJ@g=V`+75h*qreU)68NJEq&^J( z7pw|=A4wGoR<9h_Msj12Ty)M4Pyw7{R4hw9$o_)|1N+1O)zRx9$i)+0W{O6@58uYl z0Ow{qH0M!3D7OJBAlL$p(iAj7uqV88Z|6Zy@)A5T9M41YdJpeKbV36B{Cg1vUhX3N zoekPR^UiPII)LXZ&=RBX3Eh5M6jR4#oZu3`6Mr8(^LO6=5|vpHC7eh9MxYE?;el5G zSl*w-<3N%_dL4MH;*a7&XPB=UG<(*|F#k-2#X6vJLv=aG{_C!Z`>e|WQ$^&j}Bc#Yku zcNCfKIcxG69F1d(in2`!Qi|U}|D6);C${7sg4!1Pyru`*=&0xR--0?HYi@M-LFTvW z9U|3Wpg)CaE6GH?!*od20v)glNNm8z(&1|%5D}vDrBOyb@1OVz%G`#|N~$vemre2B z;Nz-LQq!S6vwtjxc)20bP!*c_xi(EL6vJ@hM6TLK5o8BlGKayeE7xzx0%EKs%Lb;= z*g@V%+lE)qp54`Dcd9(d&p7x>;LTsE3o>C|?0)kw#nJGxhD6t{+^G37Hm3jy56R73xsQNJ*w#xlsEoq=rHH_QVou$BaWDucUFLZo2Hq(`L7Aptls4cLIxXjgB zv*yg%g4F{9np`F%p_O0m>$ePx=_*rwqvSXzd#9%;4eWr(V1=PmJM`M`I?)O$j zSmi7h$*r+FC639=EFC+d>Tb}V4|&>3vqHa-vRR-TAu5(GJ*Y7Z;Zuoc#!|uVr*J5T z*9@{6@G#mkqniyhFqBXx1!L-b!VF`gM1$ssuRq!Z4vByHI@lV^mklx!2M4)(2x1}R zsnV%gLMu`zY);U~jwvG!Oz_<+zJ%SZ(%zFhZh!Y%YOpfb^s!eXcWS>Xj^E+`*P%+g z^UV8IW*|d-~h7)(km{c@x{RRgxq(mOz3nQ-`gQC6hp9z4voO7F#yPcG_fTY zOr0oP;~&)OMYe*Y=5Sw8%Kov>uPqx2_S!|^kmy8X&k-_;k5@SZJR6{ zpCDWnM}`PxZQ=BgbLa<)J%w><3ig^mrw$yb`FY9goA6T*H-zR=WPVte9~~<}T4YF) zDW40Urh~c{4~%}7E}K?N?4Eh;%x_y&d@nZTo&R>Q!g_xR)BLPL zBPHGEZ0{Foxw*MDxNGF8oq(;Hd_Gbk>hor(x?icV0m*X@p=08;!nwOphF=07K{57t zqXu69;w@jhHVhSvI@VB9ZX4x$DNYlpX~-5$)*hcb@L>g(9&CcP=eT<%U`nO9;i%Qh7=FsKhB69}-0?;-D9-GWW+l zoc~x_<#z#(nU338wruC;Yxx5;8Z_3x!^oBM;Tj1UL|?j8g>h=yv}slcPmW0^-~?3%Tn(J~kLJULUT5HEo=-)2CUu&=>#vkPFk_^%{>uUA7XoyP*ew-1>o zCsr`Sj@~Hfa+VPsneLY>N4}}r+LFKsa8Pt$M6tqQvh-Lyk)?FE6*Grk>m*At6K?KK zp6oksg6l`!rd8k5Rxh%LznaOu%`bJG<-+5xd21irSc9Q*CwbjuC^wgzF=<_cvF?D+ z-ppyGlMKC|%=`&GK2DemhHF=wPNbsXura%Ki%qr?pZbe%mPc_RZ&yKpv`UkohELzk z>ql=e7qO^Fq-~2#3bc#E5}5clJ^bqw-=pc7<7su;;eo7%QD+L1OJ8T!-m|g2i)VIt z^0a^REVvk|=FD4X&)@s@k^X#>lfe3bs1|juX_y5Nd5qbkUQz!Cjr5@*4;|M5AG55p zvv9MS()xajoLF%xP2+-`cI@WWy_S`1=pS(IpD&iN9iG1-?|*YAfMKT7%u2>%r3+E7 zU^LNbg|P8&r^y9?*=19S>48Lo?a?ppq`WEY_vo;1^D2*qLc`4uLqe+vd-z-lXIh81 z^q7c)=VMUMI&cb7VjQM6pum7hMeY2haWs^%^b*QWuY1>(MGbri$A4X=JuS_3tbTW^ z<$OjelWo{?bmVbaONV!o{KRgggNS*9_MJL&zCQ{qj?l5?zDek%klY!BmW&{*XV0D$ zKr>tX6OJ25w*AmH0a~D>V3&8$%%Clq2q6ImHd3cc9b+K&K%+v;Jy=jq6zru?y#G^t z`SujE$KdWxgYbaF5aAci9qqHA!Nn7jYxGmW+=cE|;tmxq2zT^>^n?Q^rFrT?Wfd2< zRY3?%r|sL^bwF`Yj8-A(H|%I4&b%KX%l&%yZ;J?sgCGcfL|eH;%;bL#OApe?oBH2U z^s1Pz@Lf}&hBA9}Eh$H3?IwQuQU0y=2Fe)9EctzE0c#GhViMVoEsugZ1Jx-hkf2u| z#V%%xc7fu1ffsI$ueF5lm;B)X#zI3w7X{xkLpJT9J_#L2!5422Du8q!8K`uEMs!5T zFSX_D3J9AE{v4TrlMEo(aC~_iouX`>xz>Hr3L8|@2%y^y&oopQ(czD9mtykrbLrp% z=sO6J`4zUiZY_Hr$pe(f2KZ1zU5tqEMGenUfFbPy!70Ib_yy9#2U2Y5*IH_Ve{1)7 z&~KKcj{@YT(+40yhg=!&emmkB5DB>S(B6PdPmGc+$VFZa3k&)qQKfNq#_=yMdvtr) z?Dy_PTl3DEZ*zJxf0d2D{A&K1^$R7PEjal~b}q}~54f{`AmZt5*tCjoPmSQNPT9%B% z5JG_r$cCf{g7U$7Fx8YT3u<0iok^z^h%5KYe`%-S0{9C`FcggIk~s=0Dgx)}w`(iQ zmSr1#SFW7R<_dPuNLF(kWLrInEV(rPMgy=1ayh;A%{-<6&>FQ-KthlaKF zVv>{Lo=7|f=&iHULV&3g0K$(n=_bk%k&#x=Mibr%M2V0?iX>Ql>fk=EIhvf>J*zeXWN7VA#6x9a38SD_Fu~b0zifYBhu- znCUDUD^aYe9Vav_DzB#Ax#MS?5u?nw;ZQ+Ck3H`BQXIL*=SN0Ptc>B8w$tA-_R6X} znI0Wh7BS${U=eK{9g8JX@+KPGV>c8$Ou)omq@?sNt{I(AMh1tG_YPgQZ|9OUSJ5_x z!RItdC;*z8jL^!z>yVl%gS{>YTEk6iR0$IYkCOanCi zmzMkxJSS*=7M^G_H*^9JVc02}O2)~EqTm#8ELFwR;jqVfszRL5e6D?MW=xY+6^0Gs|&i!Q!=R`B3P}66OdiC>JzPoh=9aw#05mL5D7v!fUQN&Jj8SEfIoh`5^~} zr+B5sdcz!mS^fb5DllOKW}%#m-&rG2egppA@ABPZwoWsM4b>FZk$82wp2Q?M zWeVW%-ms#hK{!+p_~8`j@`6wqiBD0Dqy-Ccy)p-1&R@A+aQ)#$xyO2+zwM{{!sp<1 zJUDTr{;I3x6dZ^g2GB9Fq~s*ehK~ozpbR{P zgvp(nn%ky2_m>MV)Qvv%Ij!v5YwM7{RgF5c-5$Vp0k00BKw@$f4fPXMZWCfq7bhoul1R?b0u=8UxUa>g? zjL2E{Yq1#jK?AZFh#@XCt!uZKsHdY^^n(sQWXR7J5(+?Zj8|wp_EtX2 zP$j3D!e{OU{a>+N>^3(KIe5ck>U7_Uz_iXn+^g0iSj%sG`B#2d>iD_d78=&Eu@h(% zp?NurB_zsmjqnc_P-~>;gZ1a;l-}unSArJkw@=w~Bq(7iyLNtG$m{H^;;Y4aZ0Dqu z%s4i0G{9fTeZ@pY3mx}tbbP&+(eP`az0VULz$)d*+L4&*CA zwlpKnwWNEAUNTB^XbGVsOZ=`eWYv4MYL4TzS6{z!`d%>&7|ahft#4=m7RyIRBVgE4 z_B|BY*qq8&j9q?u$P8kl*%FA01I?rCXZtPs~HGFm`+p@pWTAxsP4Ddd1 zC)QZ{Mr{IN(pw}YMG1BV`0StMa@IX&fr?p&cr^nU!)azfi>l!YNq&Om2u75Qn_hyo zKm$VyL?7t5rLWVnTfVSl>|Ce6GShwEP|H*`Wjl z3#OyebO5 zFYg`)mX>aZFYIaz&+1+0AzFTrodYSYW|(FvR@^AZElo{&4ipoAUpIjQpf*8!+&lrjRWprBRsSxR=T>Xiq5#PM&T(w;VE$5oRfg%3Hc`xY90%i(+wWjUaSx61#7fl%hlneq}F%03Gv;ufPmiF9%jDHz&ea{#?z*q!4p5Oc^(tLIiDc{;o9huz-9c? z>+0)Uk&`#Ngzs}bL*})7NRZPQbbXk*;+isAD@n&7HFxlTLDZLm$d_@sv#d} zIuzL;b0Qhhi!iLp2(E{j{ff!MQgNp!)e`qs-?>EpJ2s|I!Q09B>BRNeECdC>Z6Fla z^4G)TB0O)N3`!%U#VmmC^W(t`|JS3EzKXfx+c4Y7m<`AR2c+ClJGW8s)6a*f5KxOj zpwEqF{0vOPmJs!?hme-7cXL|SO5bL7Wb3aOEHiL_%>*vzheZXf#4?Ol#n!@pL43$rxa2?EE`+Z)z1g8E!-~ouYY4_Yx}-a(s#=l98^Au zV-~P6m$g1jUCHRk8v=d6yvdjs7FHW)&J$3X4=EF8(P|3IQW}0gX`uJbTvVD_-A?vt zUg@Q5u95(&53mMp`Eb5o?Y;><6TJyJ9U!wciPDU{CujHSYAR}nt#yeb2c@?hTiU?3 zy=7|n=3IkCf@vmy$gOcz8?8B#bLWi5Z}_YpyZb%HJ)NVVtadcX+}Jn}U-o^~n;^xL z(nGIv6=j!>x0aoNp&Q1Ia5Ya--$U8@J>%*geSPBd1CL4RN*K5EI}9)GResIKP`7+F z9=#=&qiD52*%M}(o!q7)o!n&R#5jRrB?$B#HV-+ElTUF11Z0NOi8mp2n_%n)5vPNUZ>6u?$YAsAI9BrB*6#+O!(^4!gkCVNi4?2fBc%H_7)} zKsl4gj``t~7KE+68jL`yA=X#CSReFTpnnTkELL0)DzHO~Lp<+`>n11BF$%cFLg2G| z@aSQ9ofD!sbS0n`Npa%1lJ!M4@*&#S)}Mit^F4s&(-?sk!#3q4)x?{}jorfDLwAoa zrIXsI^8%H&dqo6JcH;9C^ZN0{l(u-&+@rHSYYXP!MP@VDPZ|&Wf-jN8F4Q(Pf1EZv zZ#s(dVx;)scmZcu)9Ip$*eCoS(CIPRM?TJ^Q$0{j;S9C%7b*>Pb(>RIx4|P{>usH# zRgO!D#ek#FKKWzi@wdX!IHh67=FO+;d8;f^%TcxrkBrcTQU}*>4r+!Du_BQ)mBt8d z1TQSpWsDtf(_r0RlZ7V-%+CXGx2FDWU|=$LyLIIfPdK#@5k|(}-GW|TZ{Z2}lJo}Y zk}C^zRzx(vl4a8QGkC~hjEh#>4q>B&mh9TCR%W9eHEkp$|>@ja>62;9;^NoeyiMLSV{4|k0`yx(d_phYH|>W?T#ZO z6Yu-X;&mOLLP>zP(5|BX*n#w)M(szwj&E;xUHa7$js=y59yviEP1Zd14(&&ElCeD1 z#(ZSwECD}aD?0NFp&bY{QNiP#wZ2t+?{0?m*%cX)7);Y{EF0B`4uc~7YjTptc zCKaM3BnuLRPMUJ@aaSPEp!0`N4P{hPHq>eV!#I(GPI95-ISkjFbu8GGsK`U=;>*ty zP9XyxV8wLbEfY{A(4vA9aRbX0v&g!OpT}u*F~6>PXZly>-6z+Qv3?Vc1f!wa)^EN4&;x-Y1Sc9+GmbZUkQgCp`e6nI?=+Ih# zao$?G|9!z3lV%A$35PcR*ul%|M)wSfBnBw=c1fHZY9SE`sY3jNf@E{XH>Z9`wJ80x z#2L&J`Z-E-&p1i25GWDva|++K-P>1#T$dca>+6JhKt>%ocin%%qE;kV16PZy?aB_j ziFi#r$kB>dbK`fa!5x6}jap#vd^I=FA{~;B$_fK_et_EG%eTvvErHDlf7b*(FvPl7 z=AT{*eb3+Q7jki-9qxiX?ZfwUiPLlc`pac(NxhyPNYIx|2B2D5?0{iMjh7(T1`rH% z%$L-eZCc$2aG`X{IDO!PPmL6PI&6i{mX z$}XDV`+UEkAD94&^D$w6=dI@3n0Od)_C6ycb?9&LZf!B}4xGzDa?j!T{COfb+JP!! zo$34zt!ER|5gvjwqYzNBG}w1<1^l}jSR+h~fs|zXXc+8S5kaomFAK+G)v~yZ<8izq zl7t>0Q#E6fCMkzOYh^^;@ejQ*y-QhgixZvVeJ?dN6!;JF$7_Mw*=yMd1{Gw$-fIfr+H zQ^#|Pyo46NStTvaL_j)BsLt|`Jr-RTmz!aAmAxm8#CdL~CNVulfSyTvcaJ(e0@0y^9k??{Anz%Q-cA}eV znW(U_VhepdiB$ewO#`6EX`By)I?uD3g9k{zwNjWB&}-g4^4)s6Xxf4C{Zhq3iChZ= zUic62S^KhQ^Q9qx%Y0Wc8l6L6&!V27)IZ#RA^f#fSWxlR-HtJ*Wd$1kT#;z=I5ejAiInzPSUMxuz@jYpsXJsNlx@ITG5cZOcq$Ek(wWa>nP zL+o9+Kp;9ieCtv_)gr7Fe+dX&eK9+zz_Reg;=61eF}>s~>@-%g;OzVogR};1oQwc8 z{fg<_IdbEc?OUEW^S^Nj2n@UpiBZ^?kahH58Ey{9g75fE+(@K74<(4k4wdZ_deq2XLI@>~X)J|J@TELa0 zjC62cm^f%-6f#D$&S##RvJq8~564Y-+X#!SU}#y)rHpYxeQ{ym!fX~=qL(7o6Usd? zure`H{hXkUCX+P-gzw^EwP{i3iULDELh;6Ui33dDTCs}#@Kmc)&K+8CV5O@UPq8^aEzmT zx@lvGbo+|Mi)&q<$t_=8y9QOAH7=bzV2$y*%!U!HM0AKCg+jg=4Lqy7LV7`u;`wL4 zc=NRvGDclYo}7weG;()+?R?Euv>L@g$4vc;KgZs8cTX3ym-D&&)3XX^(2^_I%3@Lf z;Vv9WgyjG>y)x}fKYhNRj8;Xt_YGclY7Y-6GcKnsH12GnLKGPkoliX9R8?`Le-B+L zwAZnV9l13tp|f?*Jbj@k<&Ei@&!5REgFGq$vw^c$tcGTB=p_ywhqo9DF!_q0v}%>8 z7%dO|Au|5@!KYOdaYC?-%|cDk&7_caMDS3|lEt+)5S~||TLge+>?wFU8VrL>O!!A^Qt3Rix8nU+hbTpbRgdD7bRH(qdJ*X*t*g`m@QzXidYfwW29%MhhJn zvll6IAxh^T{`_2E)$4Ow;FoMDB0c`$&x@iRzfbXi4BH z6kOcEls`z&!In7dcKFMqufu9<^7n!P;N&2eCLQ0mR3q}6^Uoq2w(5&*tPKYz(TNx2 ze#4mh?(Cq4u>AA*Au@-PX%Q10XisT=FK=PYy`%;@3X9xINqYSl>0+p(w?jIGm6h_J zDPxr2jFzECDnkxKt=-+{$qWwT4W-U2|BUTR9jNjC!R?EAf`v_kPp%3aXHIF?D1L+VQ>I>o_i(OEEU$`pC6 zUL3tZ?I7|e5fKbc+Nt*v@s;!q0OTO0+FdQ!f!`4g;WMF5}&31w7o{-ey(0sdQvIROSzZO z!O%ZYPGL@VY3CwsvA0}CGdx1Tb)q3JK%sT((EBhGz;8q`;~;@!2dK(iO3Qp-YcLOu zB?>%JA(g-Gw2lwqXnW&K}?@bEPyPhJmB=S(NcZCdNHUjNn80f=J^BUWOHTy^*^2 z1l~+H5y$v?#E)-=waLobbxpQJO-=BubUB7&JHm2zpm3loULyi!g9Ko&)SqF}47;># zda-Qxkh<9d=)Y*B3+`Y@tjczCyGx_4+6|whq-thWS6^91(ieD>9G>+Y@o|kgsk2ir z_A~OZ6-|nbaH4;DIfv_8sOq<{`v}FrL9qt93Rk+{FWxBXW@u>1SI)0f(7_TsG0K59 zj?#vg`+fTBLiXK#bzI?&gX;FQy|$6kHHMnv62T8h=!8$2)Cg|^im|0dJ`RGZTCDUP zZ?$&VhPr;c5&TGN3C7#3-Ouf6|9)jz`apJw?so6%92t0GEyVwRqd&58F9N(`ak78U zf4~eeW6m}?Rbe=F%9Pva$4}U_$2DXbv6o6va zLpH+F0VB~9tQ*a-VD;#NEOXY$`9@WX$T^Z<7_y`CSaLCInL zHeYD!DWjm701_zhr^+Cb7tYJOq&bBAXMdnnt83lXrCj@zelP)Y*a;8^xdc}RDNmyc z^(N3!LhdBt1c$ONb^<_*@J(N^dMqL=yd8@fdTI^cd{WkA-Oj(2?&CjyX|oM|EtIo& zu^HpaNaBY(vc|D(XMCw(uQ%iLvN!>VgZeO{y$T60cqWwNi`_9~VkIN5W*8vkZ3F}5 zK3=<*1Z#NNFgSM&L)a7k2u;Knde&b^_cHn<-dYRzavO?KXvA$#9Kb!&D6RR%&q_~s z->xzx1POkq?Ot;^Ke$2q_r)ROh1bcNsZ{Hsk&vi=PI^re!zE9Ir6eIQ#PZLcEXA&H z4}Mglx+h^t+&w;R_eB%gq0OR2(+&t!?~&s7xfG-ELX=(K?8+J{t{JL+`7!{ngf$2W zw3BiN9$!b5ufk>b(gp;rB2XZ4+-g#bE?>5+FkykG`Iuf2`N>#ZF>9XQUIiuzmqd|- z6z7V@o{91ui^bb8$y5t_KQQLM&|mpZpXZ&vBXN&MLn-)}nm1ZIMGK1dmP&Xu{HYTe zQxH5{yU5x)d`{4|QMHS)oVh(seqOp=Wf|g(k(YIu+@kGo?l0>zdjJdoAY?-0mA#Tu z*%Hebk85VrK8D9)s&W%k39+bRp=bzsZ=;2lUBTPAKy>29zc@#XN7Qn#5o0h>l+en9 zJF&we!$|}CElHsK%+)9mn#4EIm|`)YAzD8ccn;AWw> z)}@a;YuVU-f=&{Rd)U0Qj@xmRVpi>O`>B{w_!@Y0rQBKYe)sYH*lm&Hcw+ui_8(#0 z6GicM;)A~1{+Zs#3(!Q7Y%l(8*mWCr&G?^dnBU9>bml50#>8NlZBTjXT#8NzfvIdK z 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

vs{UyxIC!?{58j2!bD$Q= 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

?-oV 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 z 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 z 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

X6bsrg;O6@=l( zEEa0H(Js1wnR<8@cF`83VUzG0OLEEaDVbhF&wg$;c!;4+6hN;V?(XRqJhtOP!0s+a zQyedOI>|J%2h@x=$vQhgX(}67ooh?}I6KoF)1xY+hU=g}Z>)Ag%YJM`|dfEj3< zY87~g*r03Ie%{eB<)bpHjPH-~$L7T=N1BeP6`^UN{AWlspApf;DpTzbAG0?Rj5W2? z;T-mgI*uz)8b4AI<}T^EYZ0Nh_hY=YX=tM`a&bSs-3 z6MgXf1VBnMDdM#@r#zoy1>F{8Vi#gGf@qJ#2giOBQM6<{F8JUI)RJWp>=GJa{B5~+ z;GR$nbzq9d-q(6=jh8EVwcMFr@p_ zdg2`Pr68St&3Xty*x+Vvm8Aj>fyT)nKTqsoJa`Va#J|2OX(XhMebk}&H))!dR?GN5 zz9Y9@{1|k3{`$J(Yk$rMF7tnVWgo`NqyGNk{}bh!o)UQC|NhFobadZ8_}c&53r9Tl zfx7+<#?U}2`rkhUJaY*oMF*&8y_C=F95}(FAc=((ci`ebzG)^&qsGk%N&4Tul~2fM zxyZqB?F|_&|5K2Hs27|WrT^;_!T%lk!Npk-`V5eVbGCJ4oc`w{O3n2x-#zj7XZ+vZ z=KpWc=f8g8Cx;Fne$yof9mo3aZmpg0R2X#*;J|qMKR4(RIp3k_>t0gVlrm1*bXbdnCZS$}<{x+e_F%L6op z^t*llGYA<&j!@qq4&%Z33I54B@E_agyUfieW=3yVpw(@J% z$?(1Zc<_#)ogO^&$P8uF;9DP|x_|zjnwA9vxi_q{hCjtN6aV?X4V?c&?{LS-?tkp$ z{?|M6|0-l47u@yjumw42b|6xHa9#d=q6cauK5N3hgfbcttHPs%q0fKmFOWq_z0vs8 zXDb0JLrA^%LpKqel@Uv)H>?V87QQwR#>Wwtk~?|Y)Ueo4WH&-V_Bt~1BHxX_7b4P! zV$WJJ)Jfp8fb>^De0j=ZlnzR7B-%hHZ)x^#O-gFjj}Z^=BNEUu@dE$?0XmNEU0EDu zMr<_Jmu0fxKmv@2l;2bCI@(!6*PBS06k`ukcTV^0pdgK#sSoLQ|$5 z5{ahd#Y2eYA)GQ8RLari3jzLkIsql@%FU2jg>RNbJ`-fMkG-M+z)b<{f4uz_ z@O*(a!y+zzHvzbce|?=)pL*(Z7GISz@|^U#X#JdxVJ&ByDCF|o5P`>`5IBH>9PXa} zKGZK*o)iQE0D=>0@V<}G^8-aP3P`T;!Y-*)z*ZkLo{(a|tXTA(oBOpFO8N%8DZt@VQD6ha@3|#L(k|I(4F&SLR zT|ZUvcx_D5q2!@egGdMv2mwGlL@QQu6Go^Zd~xLOVCo{m1$QXlg@r}{bwq;#6lV2$ zU0{A3_bx307!9*s3xrU_rwqyI0ICAVfmevQwX~XLcXt;QEGNAWSW%pZR-UuVXfMc# zAZ5@wpo~H~`p&V4mj%dF)OYL9%WMd42K_qJM}!gt$oqK^gT0UXfWX2~T?1fr(!vrt zX7vEUZpZ$$b^Wt(d4Ng+RR&2Mx8=fW?NJfOJFi`y=&kbEO!Uu8FESP*y+0BoppkSDdf6zctO zp&mHjw20&knu;dCfx(qQUJO0H?8Ds&x_vM&FmBj|h6@Kf_)R+5(hsUnIZu7q49=wObk6_6i)9tBrR|JcWn~*tIf7eF=9A7n5ch(hB>e%+GK5KnkQV?CKMgQL17e~zK5l{lpuhXxJ^4A+ z+A~m|Dnkd4KH+?6(InNNLmvQ$A7QimgJAU}_@%*4{fzu1;?DFbN)Jv1ASuBBVj>2F zk%II{_XP=Ua9ql^zF}fvbDqC=aX(-P$1VQ7xoN|25Ji{ByQAdJBM0C*{w)E7$voiW z@O*i?Wwq>VHs#(;)w$;}r#&^krZO=cv^wsy(C+k!UvBrACo}f(l!S^G?=dUpVDMcj zC5GKo#!v#P^BD*koV!-nYJcoP=;3ym%mc6&(Jg!i&oPU&cTc6SfiRUMNWHIlrG5la z$Dc_@s94LADMT(Xbb0?M1ZyWKDEK-q4&gk)501l)6UWZf*o#t_c2a;;1Ce(jI3rwW z#=rwYTqGf0yad>B3?5x?KBlM6+Z*YmL79jABQl2^+0MbpIOUJvX1D9zk>AD!fgY*8rh9Z<}xQJ--^54{Pwrw$Oc< z>&i((e+}I(cn0q~72X-3tiU*n7c|PGTZLZLC2&@l#5W;V0o)x;S}m+XLY;Q!-U7$P z6=s%2kS7CoAkX^*7~gkbVwg$5WCIxV^84R`ON5;3ZRl$u*ezU8NVtT06%WDqGa#{{ z@PETtsP}@Q@P(0_BkI-$kKtlN=5dy^!37u$9|4I+(11Qg=LbC%bMwsqh>FO@iR|46 zm-E}p&r#|$`ydFO<=kpZ8U84G(3*%^Bl!}M zjgL~t7|Pg39v&<*rT{`0;)Du~=rM?UxH-28nl-3KP9rE;{2Gj-eRyCml1;+p)0MA# z;x{|FbKm$Tp~wj00@8`wFyC{Bng4)#Vd(yrtqgXEA#hjxX5N7{z+n`kH$;7eXNriR zphW-iU75KFYTBQC&9-oJAd(^AMIdfq;{dVaHeJG@6N*@`0kzit)W1*5cjh+u&;q~& zK??DcXZE2`fzi>uH#d@1lsmpvgrB4y@V!uU{apP8hWm@pb}Ag-ZPQsWz(oc^mbb7m zfqL_4cZa+d{1h(lG_bO>d-4RR?b|-^;XZ<`CKUQTJ8T~j!eGM&FiNk$VMXSSA)GS6 zyzAlaLE7Dj#s+**!AbHQ?BR@!=6b*wiXA3zfE6nXa1>E?zT`66dpl#4`pISY$pi2&e!3#q|*>TW^z(^|7LMELME| z)TmkcR6eJ?m&>*wpGW$MkQ0KxC^M47K&|8-xV-?~nQx%ifov04gB}>GN*&}eEG#Va zfrCC!KK>L?|CzPi+2hO~rzRKuw4k)iw70s(yIH|!OHo_<6ky*!78Y#Q_I|kqN#5O?YcX&++y@+`!fEbzi4FNM^1?7Zc|3LP$iFgc zxP`%@juL1)zMy{i0gS`()V~s_t5@$F`e{ggbuA0>YiMCX&yyKeFI)STOVG57&OcN8 zU<%aVKjm`zKS6~e_vJGCe_v*x{QKj74$t^kaq{m41hB#gL~giIz z`qx26u5hIB4ae3>3|glOZ&<f-Nwd7 zMEAXBU2}L)7V$}kFcx`FwFz%=$K{NDrv8XZDn~g+>^QU4i9cG#oiQ}aei(lz$}=}#+Cyw882(eA&to#| zhRJzYyUiQh^qyz3kB3oLx1O8IqU=_B7UV046|_B=*8eWm5lvaNP&j|{6T)cRN&0St%ozA-2v@^rsHu7?u0{gh6qstgmK)57>^&{%g>KF zthEW9VT9KMO)}^(Uu<*cfZPbwpb(;IEx?AG0<2@94t@a@Ht-Ow-FR?_Pb4^Es*f+u z&T{gZ+z3*GAPIID58@VaDj{iBK;w^rh-uItRob{i2lhbpAbC6G-SZnd0mbUB{-pop z!dklO@~B{Ylp=UsEIg{Y7gmwu>*r?*>6SCe5L&EIi7kQV(-`ayp%HDCVMSBFB$Ov* z25avRhC#b7nfg&$xp2%oP{o8%P(TYyyv{ihw5DC3d)5$p`?PYt05<;rY{Pr$->*K#raspn{!)Q zK%k8Ld$n}~tnG9MSXs>avvAD~lNZapQ%k0d!wlVTf4`*hxn%qyb9ZAU$;M7}!DK*7 zsdl@--~QxUf4>9IOVh^wU%2{yYpDhZf?#;?zQvEQYK<^9o?I?PKQb8@u@1p$LKSPH zM{S(kRmZRdMzlyfdq;>s)7;As9E+gx5jVs{p+~uW3Ybj_kiAjQmXSkDFB z>LD;?MpW##FoRMmrw;=A9}Bd?OQ0vqcq#$bhKNbfwl?VGQJ3-`0@RnUI~oMR8|FO1 zlBeqlL|x2x_l3=YsASaDQ7G7l4M28vTx$n{jP5lRl@s2De-PF;p;i_XEAJ?aOim7k z5kf;1_E!=n{}7M`Vc{p(kxflpzLj`K%(1n)d|(-av)D_>#{x@p8H$^(=$7*t zvA7u@dQRJ+E`)~+E$s7RVmg*C4mqpCXaI2|GWKZ}S@1g=%IcV4dAebN&_`V8z7DR&s?J{uL%D7F~s`?%kIbE?m zVrihu3ttDQX+Fn`_bMS$Scp;FI3BFk0zs4Vb& znZveW{M>=`Iu>iXtS^`Ka`UZ2K@1ChHD#DVz{U)wu6QKeLbe)$ygmr8{DXs?#MSPM zyyN9pp3H&U6f#upLX{Tl_plsroFhD;|HOUP{ii@@;4;W?lz#6^%{5BoO_QO4fnbvW z@*)$3&x2$M>BfK`D)ea&^&Mb?ZHDiX*MO#zVDon%2v26_z%n%eM;74(LEE#j+wuCF z7YLRDyP^?9w_LLH;03}O&X2U2eQz0z>Az)LP0tXOrJ1-aHMkpB8fvon;x))@Kb#H9Ecs;J!m1B z55o7}2EtK<_?J%DvFXs^rP)jmp$qziA=i zon3yB`SFIWz)yIi*C4>+1injY69wU2;-u50f#@Rs`$d6I01gR~IQx#4PP0SGs-=pT zC3?6|5SM_DSAIMy!Q5mwAUIg$h+b0TN_aUp_7 z`z}50MHjS`0~3plX3`2VU6Ma%j#WSvY)0?IEOR#{viLekP7EHE-%koCbbkCl^v%bW*NH>m7qQ?cI=MCw7LfsE+?H@D_6YOonjnrkNFM=ruR+KF?qTgm8A1q5N14>7xn`<`X)%Bjke0A9$13p~1!AvAdll!3-c4eU zVp&?B&G1C8aW)5tvRz|e#9_6V#7Mij<+eSUx#j1XOKDk@9+t68Wt`Ky*B&p{ekpOn zGpr#jhP znzE5GZJmTo#gSTRqg}m4*MNEdYBi#O23GATmZx0?Oh)2!!dILXWvS zh{kO8eQ60WZVtcOHo2oQEg~@lbo&N0!J3d!prLyV&!Xm#^qPHX9ajf|qK%I{ml0o) zJYLo{*0OQSRu{bi@%YTkEW^=9b2PZ6uoe}U!Hp~piO%>5kF=1ygv@aPJ9DULlMtUL zOPCaM8|cYDr{Zq`O-hHY>M3f&$DdNSm7d7T&%W@sa$H@F*oKR}Y7o%8+*rhDt;geG zK6resT#y}YG(m>OYVI8`6SFkFAznvG!AOCCK}Ik?VJrP|GEQ18#N8!j?BrTr37Z8z zO_jO$jV4yhb_BY{KUb9tUp#l@ie9L1IyFL2jv32;(Y5KQq9 zKZKf`n_XL+e!Pn_6CfJR zX?K|1Yq319gCj~3Zb)8Z$ISQ^Bz0}2m4{S^x>@pPmc#LEIN9>9!j=F5BOb7hVL?Js zll0?=Hn)u{Oh%-1y3g=N)9>nGZ`sOq&88m3=1WTm<*XUBmYb}*kps6<+Nw;dGLssG zLrS|7O?K6>nw~*T6>*bk_H0hc;yKIZBfGKP-R6U|(OPP5=-ak>4t;n>g6vYCcsO07 zQ!CLZzaaVkI~unoEoLeSMv^G0!v%u!jkB*q%lm8n2SsvOCS2*eDMAPbms|wq8}U+F z53dAuXpM-W$*rqeGN-$FP1f5!kMdZv-HLlqUR|9~9ZJ}t>(umQY_wY;`c&uZqHn92 z#1KmswTt99GK>4||7hS;sr{ooXXGDmV1aO5m1gO(Nwg}`?`Av*9Faq?+j2qQc4b9D(_B*sCdSi`F62tHWEB{WyuouYQ*My$%K~o@9G#ruiR|7w z3i)!{`fMbVfOXS6{k-z)=gxx<-Ica5(LLkE5z8x(W6tCJ3}w$`RSNJz5GrLR;H@Hh z8{d74ZzWc_N_WlX^SKj*okXQ2MwGBhH|0pXufh|`2;|`U;O?9jQpZTY=kd_0&Aa}~ z6W94|bv~ng#G45E{I{8fNM3Wk{FpRVmkoN{7Urm?wE4Jw7`uSMN>6x0*PyafrT=o% z&YLXUjVA&N=HW5UlV77XZ{Y&m-gIh&z}mINNIc2xx}4?Jt)e5LPbxmKrppu}=|xy4 z__Ca3KubW}Nt}4ckVSank5;^CN)qmNKCd67rxIrPo2amS{$Ul$7)kZRP zE0oL>g2KhsT7?`cv&&OlhMLw}H4P}Wr-cMY-(Px2_59A(AUI1l5L1t;6^7r-wu!NK zd|o<|KB6Nb)3ue~7HSqd@yVy;b5_-(bMk1B*R3;=GSCA6T#3SJvDFP`K!dP3i-)~d z^xAG6wA{#Bqhv()f>N*LR|nskkE=6?eLT?kUaHCM`~l-ooQ-qJ6B81w%ID!Pk>)u% zGOW4)sE*Ld;|}$})s0dk-DGexCdLFn#svy;MArnc4txVbxh;~3!$TSiOv61W5Do1` zRfb0E05V01LXSQ=fEo~<}GB17>tfaw4aD>8IY$NNm_nzzZzV$McxkZ ziqu!FfyoV}paPV5$Z#)^@pu27txv{H?A%63USXHL#u zw{+gWCHM5?_2NPaFjSuE^KUf8A0aJ~R#t?+dJ|0(9q#!D4HN^WfY`b_1-r$YY-XmX z--m~S@N}REDgy2!(rE@nx=2=p`w2lh(1Hnhj|8 zsjclWrlO#{JBScPY#h}X@PHAL&Q4D&Abw$jHicPP8;hg^8ZU9@$z^*{mZagck7n^~ z+`eVYfIJl7bkWdvT~TTs8RbcKu^O&C3GOm+D<7cRcc_Jd523J>TfasSPQYZreCYYXn&GeI5?#3*}I&73OBY@Ij5UH;afK z1|N@kqW@jB?B#0LpN*cPTv)eW?yfQVNr~blfyyb(9ydgb3B7OUC0uLk9U`682EVNA z2w!m5wr_9fY)wcZ)LB3i(F!RYkuH{@?d-`1vBG;JbJFX(NmpabY|{|0M2I#?B}{!d zB^WvrS%P#tzFaARO$6iKkdC|}_@V($;}pF_B;LlE0zCz>G(gOekeMjRKtFg9M6(Sx zJ*h;dJ<4E3hLFZ!pP9h?Rvh{xJkUtN^xkO4DDZMv5AXbWVDE%#p6mFu#g_Un0LSgN z*X^q&CqgRqizdjERQwL-!>NL!=M$BF>x=2uCxbX%W{j*N>b1dD(CuAFCMF(OYRpbe2&Q=vo{Q9E-YozP0EHq$O6>?$y?cA3t3Nx|B;$}??Hh(h5CKoF zl~k+Ul1+*1)Y>Hj5B?+U&zdu{mv}<{Q^+lPd8nn$s!*?PoGd)7Eq0PL|+p3><=D%z?i0_t#&iN;vuy;4NJfE3!&2zg8-O8bs6Ixtd zn@|QX5L8;Za3TP!z9{~Mlw6VD@7!qC4P}ys0ZTaP9a- zZ}D#D>;QJ{N0R|{LY6E&`;|7TN(h?v5~U8@eB6uihMxC(R&xTj#%9EGJ9S!VE`5o9 zq%`=Ao83VsU8k+7B5->L#^!#eW(2c-^+cWq=P-m6l~fkb4p)U!r#|MW;N!U_(+gQ) z>ttw?M40lHs}Ohn$t_!1s(Pinfx4&FPc-h6L=i5Z*tF0_{>Z1(ZG#84!ZZD?wd-*&0-EF6j)Jof-TYjlg^-%jj zFd}LI-oI2YOWL7)sS8GUcnnwW}A9v4r z^#TT9LIP6=83P1+^Ax0t>8HgbBAt>aR$R)0zjM1QSXU52Hq#DzyqqI`oHXX$9tS@%&$L z0oU@?c0dzjohr%O6UG`0C!q&6rySyqMb!#;%oJ|%&=K$!+B5-kv0vVKdUv%u z-|4xgk`>lCO9($J(20z+Q6E-F4{-;u>9;+kmm9UYV&p|x6W`ojy_-74<0l*5 z@C)P6SAzU1cuCS91Y059I9yY0P^zTP+v#kf0m3ZUjrQQTfcgl=M*epO4;A)Vs@v)e zsfM*-%bH%EJ-{wi25EwbTj8xClIm1< zaF}7Apn$cswac+DV=cyWPL~_4bC%z@>L+|v9+#d;ScfNz_^&-V&Rduk-DbYj%@V~l z16D&G5ta-oaGNWF3=;pk~kbBsRDHC8*;v zzc;QCpVel1saca?YW1$xQ1&=Jzi{j7xWJ3+JM4Uq%b4tS!(uYOWHKYE%a z?@~t+k=XGf&xKLZVOKO)Z>2{puugZNxv|u-5;x%UQRX{IP*SmT=tAX(2M!? zimEDZ7qZ3gv0s!l(!YEhQf>|v#*{ZnUcMz=XuiQzwwi*Fj|R&M9B8w6tbIzcpEYW= zPeh-bJLa7dTnG1oL(09~gPGaYTl?4t>FHOz8%5trPwx?|kS1!(pmH%9q~jW0auaKPM*EYxiOFncK1Z&@yQjLA$lnRz3BRETdW_P>fqLh&;=! z&*iSJr9>gD8{o^F=i)jH>4LUkh{v~yz-45*7;IX5u#P~qq|ntvTwOBpY<>uXt<&0K zfG;1c3Qiztic$#UA&3`dgU~;6ZTX@scE9D4_txO(v9o89VY)Yyq;)@-BBK&ty2SaP ztcl6#j+}y*0;YG$9UhlJ$)nIG*F2ke2=xBIaB{GIE<>nj@zvt1b_pz9qLreCwuCYi zWJoW-vdS(7Dl6z3e62=0fr#NXbfiFy2*i|#$&}pI?#RRn-X-y-&!4#>U$`FUOrnni z-ZL`L>TS@$st+GhAQ!-qO$={~$rCg9F0V{Fw(Iwr537jhCHEFTQ8c&GG>8 z^b)m-VUtOqR%X-5{C53utjEnDNmsW)-(zLSP3Tod)uJZ7^n%U0QPsav$T%vxm2aQ_ zR%V+r0S)!$Z$1j1%T~{;_3I4l07v52ac)5_DdZV1l)$dKtgilgO7#HRAeLS%R$mPU zQ5pl#ej_or2Zm@ujbSPI6JYoTgi#`Cbi`ESOdp9k}IPegYQh8Qw&3$}zi7@PnRAV6hbhXsh0f=hkP6V-2(YeIB)Pju?Be%6@> zss%2X5|-=XP(`srJ_+~KHQzWeD@N|e+tvX4Q-jkbU9@&Z%;QU1(rpwBpTX6&!e+NHf3qtesZ*LZuZ9@uZa&|wKa>t23p8Ab8F3ZC zSxIh(;elk5Ub`85NC>p2%NcY8a;EggMEDKY{bhk)kpWbY_vXZpJR&%{boJzg22^@e zq_omUvZKAbwz7KZE)nWxBKOo(Ekljsn%}f@yK^wfFji>JB6rTqK52+jq{Y_6qlx?# z2_syZ<(<$PjH@zNH1VWNT$j&A>Xfkl55E0gG2KGuW?Gpe-u6}FOSd%_)9xN1A*xr! zvMRE%6z1vt7di3f$AV5wDcVunNA+Uq@OUeRb1yBNtyYNdHL5J`STvJcNS>MV-I@fq zo@?l}Fa4rQiRFu*(J05ZNK+FN;ju54+u)1y11up<_UuOXCHYU*YdW<(j+*Xn6h6^= zVyk*wHg3{I*~vk%Q$MKc^j|qc9K9H+I4r<&_GXejadCA~0DuObuV;3m&9GH`F=I-y+K@L9kp0rz*b!lbwP?;M6*%If%qUS{nfS7_D zC?HWE!C2oZ!!hndd0AIShEg^&^U}&?b9kpKY~S}^FAh{J!^qG8A%FQiz5R}TJ=T4a zJUQ8I3}UkGv9d`LNbWfxj9fnvMPHV7eJAXYgiIrioB!Ote%b0G@UpN3CKZDEsiXg&xe@L3FB18?d?UG1C}SOTg+ULjur9-EYD5p);OM8E~hsVxYcExjV}oC zt4z9`l`^sloX~WnEhM{e;_=owymUAA>%?{0knu%_7)@*DdRjTQ2`exUQUeQ5Idq*7 z7$P=EUt|`OumO8goH9ZDbHD7V!tzmt%e&5Z$g#W(({Dpgve!uG6h6kiQ4S(LtGHEz zfBc8D%X1pGTy`gqZp(|)pA^eXvt+g1Cf`=6C(ku$%AAgr5D0DFV#DU;JH3F^8m%Bb z(w6y{O3VA&PWgyzpnc)B?XMk5L&|7Rr_*ACqr{#p^U3Q8UB)=;q`S;B-51A~)YS+p z$2+gv%1GRlpicN2J?`8+_`2bE=QWH~4nBv@g~W=zrLR`QZ@$sO!PGUDJLo2{OPJ4I zPTsDQBQ+q72u^B^Byr z&&>PLdnKqNnL>?B%}#WAp6X-L((%yp?ZFF)g4s!xRLmh(DV?J9lOk!7mlG1cE;@KL zKH)>lP3}00N|&0lkn65F)hNiQ$$S~q@ynCtE0$#Tg5h41!|WU0Xk7tvbGRgPcCVH# zHruP4d&|x2iuCTdpabIyfxqSw(mT6LIb98m|P zU=1+RxIeMe5L|$CfSIPWsEK~JB_H-yNOBCh37^rnOxWhjtf3FlNYeDn3Q>N|Yp_DB zPIFVZsb(KvT#t?Ynz;8Av*a4L4*eQj8gFl?-rY(w;bxw&6d!(*~3T zFn;LqWd6x~OG~;|3((Vuj`9ne1=|{%XYfQtd3}jGx zSwN&ex_Eqd#`As2>S->icCB>7*Q1iRlbjYsr0Z&2eDg*=J{hIi2gIE|nO6uSXqaYf zs2yG%aZ&#oodT`Mu-Mof={KBGFgA0{ox26UHnh6)8Qv4LQ^B5ID-!1&Ijnv>QVUWD zXeDc85a>1{owO{Iad}*4M{^Mh3t~(OVA)-Ar)};9_U<*R4Ytg#t}d>cWbZ%L^z=@_ zWr|ou0b4Kc_B5{x@GSm7WP=_+#j!fU9iUIc#^BK!&1h;=VAae0=ZEk=F8k2E4!<#9 zlXru9A7X`$U=_RMG$Vg_db#%~6j$7jQEK%Y($e;a+Y)nfogPH|N~r|c^61`gix&Vv zfkHIr&18N__NX`t1^L%xWuNlq#AAtk%AC}M8bgiK=t4ol{*CIQ?Ck8;xe*mtFL!eG z?f+2tq-UHxn4KAWRjtGSNsjwJDDM6n$z%Vu)bIb%7tZ@8FK-v-MO?uR|-REcT$<*mqw93zhrJ zF}!KWo1G4Lp-5@(x<`0EgN=gx!Ga@U6a#PPN)yAPBSSHnwpXWo z8DP|Wru6JTmU9gQS@7hdgA6S~2^~(JdzNQWIQE15rm24|zj=@Ku`P^O9B??Bgs5KL zCr;5FlXx5aPeN(4dMxGMM`FJk()i_q1|`aipDfr!L`A@q8(g&=Mc_;Rri78@Vq0VB z8?RJeCnh~N!)xDHUEFXX6?(wOdbo9!;jTV!oONM*<(~awREt8@-&^rIwjeTWFT2FfIP9p89#;RX*1Ocd%q_A7?y-tjS1k8r8(x80a$NS6aZ96h zc62nQX4i5FpV_Bz!$b_?#PYAN&F37wc~5h7b5nW)X;NOg1Rti^OTSbwowhN`{*A#i zb4BTH)dByrBN`um6krQ7;~lW%jmBhQpndx$dh%jt6;LRDk5p>6phW=B&+bF{yqs?k zrXxJ|+q5(s#T#}~)2u$q+#W6Rj9HlTYz*8)A!O--O{IrX;iq{=O+Cb_R)|z2p>4i@ zXmPcyykwvF6RN3|Bn;Z=byalL)P>bC zC*@07YaSk}+c&;ee%<}!XtKQRgRJQvACFJV8s?vpcuW1rZ!_f*=Ga`O%|}>lxBZX^on>Y{MWo70& z2LzD6ZkY3`c|2O4#IIfV?m+*n1P3SIr&`~o^`9G&FI)V|4k^s-@{Yk4NAK^b%wbTE z(c!QP`SI=+Sp9&=F$?a)%dcL$%g~`-JFk=o(ra+{(V^6D>py#!79EBjJ8<}kcTI)Y zT(s3!@*}kFMupvaFZ;0)%+47~pY&csYd?lrmD+hF#XTuhMMYAt`ff9&FT&*U!eyYigf5iLO zKEH5bGp%S#Ngl$>`flKrgO7Vri7%B?ww@ULY6-3Dt9epaVrE$VR7%n1$BCI>S~64S zhX$Dnv`lr8O~O>$T7C6}iP2V_s0|5;lc(hj%B#NdSJ};^67MMZybmExd^%xY{40C% zX~SITkIxxA6}^sF_#0&1gclwtUbjD_I=`-Qq|K7>3pvN^hp$G5r0>a<+BO=HJrpih z_jV)6r>Xnd*%Osxu;e$Rqmv)JURw^Rxce3R@*mGRv;iTXhuF#lly0@BHvDj|NPNN| zHNBu@c|E7%ZpLk+Y<}2=vof5p8)@k%P_RxW(?i3~F0)u~HAcuP~9FS+^|16^rj|AhR6kLb*% zmBobFBtCDJ!KqH~AL4pPF=!HVd(X+zqEJoyo5X8Ltdx8H{=NPSrZ4~F!gnMK{l~;J z+Tr8`w||a6qa7yyKYFwNUul5<$8w37Kd<>~b;&WYo_kOX7B;jNJDJ-JkMK+0*teI; zk0s00-A*ttj;u)*5ZbEGDr`3hn6u?{kY~6`v*@2bIXeDplV#kBi^3_%pYhuPrUUOA z%3Nwc`Cg%GQf$e8PzNKJ=eykT;e*_MqXO_&%@Imj!+E9E`|4Xi_)^E0pHWLk1 zvv3$tKMH&DWInrGc^Lot#;8(jYwf{@j6VNL6ejsx>e%6io*@q;+gr5+RE?bVpLHs4 z_N0RFKUrR1efgHmX6v)_u%!T`Pn+2X zeqYCh6LpYKd?WR@RoHXpbu6>~mH>TUJTEP+zoCb|@KG*bRLOJm$OX!6HQSccoLftU`xgbDd?mI+uQZ4QmZR$^>4bNW zR*c?3jHDs*&=b_Q55X1aqh?@x(I8%K^Bl2+SnSl}Y_Ih@P^NC3HKM*+dAqL4r(w>! zrZmL=r*-1{njyNc5c+@kvZapFw+z>?;IrmpI^AWFi!d~4ou7}f(jNl#56xbNi%l2% z$}gRTmym}P2JYO`BkAMtjI5I%QUvBHE^mE~)rOZkrWqj!1@Yu;aeqq*biGt^X$B~+`U3C zR{a`k0WV_h1HY5N_NX=@a$yAoMZ5jcC8pGRaSL=CbK7GMIjG$Q|UP3jj&oNP^&BtUE2%*VS zk$MMhG}P8kGAlX7xNfg>D4yym+;i5QM5{0T<|SpNsCI{rCnJ|T^8*uEVO-S(i;jD( zTf`;Op%o=(x1)#*(vV*^eH$}klqS6a$E~?Gs-UYgQiGh`avgSo*Y4_Gh#gX`btXwW zyDiM$M9U(l#0l@$2xJn`m%cEqgu%~5|xVuU} zN`0$Rv`lK%0ooJMCbHVLYOQ`qOle}VeAu(xtE?KlswTVJ-|O%bm+A3yxrDgXy%LOi zTdj1BN2LUw?)M^3`Vx$J1AmvAi-d&!hLfBFV@HUA(!lo?$ZTo-dYKdgN4_o&%pLo4 zzj^UjVh#u*+qTBg;~;xE*w{QafO#k@Jp}9}uB9Lb1Kp_vj7<9yNhNq%6FVk`|T(@;P}wh4~1yT)xz^ zP1;X5QN|_(?Gd|1(nQtlRe>^>UEG|J#6}>o3bJD2)|Yv?RLJTjJcirh*x9)b(?Sfq z4~Z^LQ4)m{5RqIG8*DGRG{9~VV7Up!LorXMcV`~L~Xl*vD}}bjQm1vKl5nQ9Bqbj!ZMQ*dKXzB z_Cb|+j%@z4!~iuTSQ%asGwj?b&3aZjqS(ggwciuW^qHPzH|(c}QYWwLq3qTiloeJn zvn;**Zj%N~>?F}fM}f+>7WSp*Dime%V=4~AJ5x5cNg-~A;YKJ~+NKOj-}STvnlN3Q zF75Lsb#C)dOIa+la;5CjZk^B@8F;D0)DW=|Qm--H|CqB^7^~sY6c`u7f9~Cvwy6CY zy2KPAr;G~2rFoO}eLIrtdk6F4CZx^YSs&ccOXSNLHIjGIp{l>&Jsge1#D&QaBv~4K z9k9`-QTJ)Mg$bUWw}F?j^yPcqIs{jlJw1|0o>=|P^UbgTQYsfUANZAv-@g`T6Ni3; z+U;fM7Sn8|bLPM#MN zAcK!IQ=4C>eSc;9C*P?VPR>nIn2j#fNeM%{X%1m?@gJ(fpq7C1*dyKJIeRV6fsWb7Pw z@jlnl(Q}tR$h_|S4mW}E?y1N>A|KYvyvJjW_+`r;tLJRp|J+~wII71Dt&yKLu|i9Z z9%TJ<{}s1blu?xkDv$Y-3OB_K#T{vXN42-Q=r9SrQ(bWWv+ZQ>bOug8y%^A3o9pRG z&1l8IHtR6%m{B`|Nbp(9M=nc+UVPwe?WXeUp5v zhI)-&I>58g-QrksWbn`vI3f-mPa1VmK9G2EusejQy(_Nrzt~dkO5yTK1^hN30Q~TE z!Xv-1>_i8-O6XRNky}FW6?FX`pTs9FX^M-K)N0x_Q09#rGR4x(^S>G8v61=IKauOjMOMN-n}GPMrRz1L15C3)?pmfi({kW^w1wNelPU4ws(9(y_F+~^v8(Ym`8SJgD% zOXW*&T*;X;jjQ|WZjK~ya_z;en;ztPL5x!-QZAA9Q-rkb8f z4KB*upB{H_yJCxsSOf>k&N@{h_YiF9Uo?5aN=)?$wG_2HJ1<+Q#GpRr*gevBz+2XB zybhh3obK29?OBfQmcP^y2g&EXPBF5&A>W^68fwg@b*3 z9If1!H$NOfR^F2eFQS(9rzT$Oq$>5k2idX&HZ`Kb(~$Kpl7?(ETaxRRSavWxt>&7f zyn782kkeGMzl9TAWIIM4o)rOzW>QPejMm(}-KK+RD*%5UR0b$T^K{wHZB4RKlz4;~ zXodGU+2wiZlE{F!K*-3`kvhZe?_bJKUhJg`!NsOkcQ>rIJ>GCS>DSx8 zh)H_&GfzX(!m#40VgpQm$-Kh*d3D4AJ-i$s7ZAwND6VZj{1%&^)GKvVX^<9g5cTfl z=|}_$n0#+XWUV{U%;6nRJD7?aqGU1qQl(^R9YNQU%7g9*Dz&HG+B43y-S$%Rl=-A$ zD0DFLetK}MJ_cBVlfvUdsdfDIo!z}dHA9i?%zTVx-e=@P@1Eiwus!x==PF75Q~Ria zkJ?)?$juW&vYN9BX%Jiz&>I+F>?!xwIh(odVuDVRY;(0MzW39@1w4b|pVjh$@=?mY zx9jTeua6kWyuY#&5%>pOAkQJ$hYMt^H@qG06c-vX?-hliYb}=n3W481v0%7>Go3O} za_OjM(BbV|rLW$!DNu&Q$Iz+Tj)hkRZELUC%wA1ovZEgK<8So+6n?v19r_w6wuaNlsz)t@ONlWM*qskiLW8UGRP zt3U3`8SC-CwMRkZZ-9zwK=%6q*ekimyv*LIjjtw9xBnzjTPpKQd0>lamAB$OdG*j= z{kPqozv5E!=-x_pUJ-=af^%|cbT#g9T5n`Tq(;qs?Y1tMdTlGi{FUi*TXk*I_u9Bg zW{VDqPG_-v*QY1S0&f$CKfvuv3kiz;KD*a`T=&Fg?8}hlCCrQ87%Z9aOd}@2?dJQz zw{o#lM~Hj$lo(Z<+~!=_q$y9iV&n%Jb6mJf(>vz~y2LT7Bw@Uj{)Cs02dyNObT8g* zl1>_PToE@Lv-%yZ`4~4zkqRfj_&su{%e>zE`G&OKnr)8Mu^&InNX>IE%MNJ}t6AL4 zG=^2P#0gzwPE+b7bl~4S?DhVKxtUXt2P@CdKRO zrGcXlpQ|>cdDWaV;2Im~cl=|BOFo=0*nVUA3-vL!#zJH9(>ce}-G>k~?j?pY z#9B6lg&`!RDUBv|+2061VCnkD(Bn#ceM;cN%`CeL_Ye5Ks1qokd!K5Hl*H=QuFK)0 znKAW%Rl^m6r14?Z<9h49o1A04E0_Q%6}KZ+gj5%0DcbKP-B^Fm(4_aw`wxI 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 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp2.png b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp2.png deleted file mode 100644 index 04b4e033b0a1515312f6f57023909a1860e27de1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22533 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 |d|Ec_+BV;3)d|`9V&n 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 M$K;N_k **Importante**: Este rango permanece **en un espacio de direccionamiento privado**. Para una **exposición pública**, es necesario crear una **regla NAT (DNAT)** en el firewall de su infraestructura para redirigir el tráfico desde una de sus IPs públicas externas a la dirección IP privada asignada por MetalLB. +> **Importante**: Este rango permanece **dentro de un espacio de direccionamiento privado**. Para una **exposición pública**, es necesario crear una **regla NAT (DNAT)** en el firewall de tu infraestructura para redirigir el tráfico de una de tus IPs públicas externas hacia la dirección IP privada asignada por MetalLB. -## IPs Públicas +## Direcciones IP Públicas -Su clúster de Kubernetes Managed fue entregado con 2 direcciones IPv4 públicas. +Su clúster de Kubernetes administrado se entregó originalmente con 2 direcciones IPv4 públicas. La 1ª IP se utiliza en el puerto 6443 para la API de Kubernetes (en nuestro ejemplo ctodev.mk.ms-cloud-temple.com:6443) -Esta misma IP también está NATada en el controlador de ingress *"nginx-external-secured"* para el puerto 443. Esto permite la exposición de las diferentes consolas puestas a su disposición (consulte la guía de inicio rápido). El acceso a esta IP pública está **filtrado** con una lista de IPs autorizadas. +Esta misma IP también está NATeada en el controlador de ingress *"nginx-external-secured"* para el puerto 443. Esto permite la exposición de las diferentes consolas puestas a su disposición (consulte la guía de inicio rápido). Los accesos a esta IP pública están **filtrados** mediante una lista de IPs permitidas. --- -La 2ª IP pública está NATada en el controlador de ingress *"nginx-external"*, en los puertos 80 y 443. +La 2ª IP pública está NATeada en el controlador de ingress *"nginx-external"*, en los puertos 80 y 443. -Las aplicaciones expuestas con la clase de ingress *"nginx-external"* serán por tanto directamente accesibles desde Internet en esta IP. +Las aplicaciones expuestas con la clase de ingress *"nginx-external"* serán directamente accesibles desde Internet a través de esta IP. -*Si desea modificar las reglas de firewall (añadir/eliminar IPs autorizadas), debe realizar una solicitud de soporte.* +*Si desea modificar las reglas del firewall (agregar/eliminar IPs permitidas), debe realizar una solicitud de soporte.* -*Es posible añadir otras IPs públicas si lo desea.* +*Es posible agregar otras IPs públicas si lo desea.* ## DNS Para el DNS interno (CoreDNS), el clúster tendrá estos parámetros: - Nombre del clúster: `` -- Dominio interno: `-cluster.local` (en nuestro ejemplo: ctodev-cluster.local) +- Dominio interno: `-cluster.local` (dans notre exemple : ctodev-cluster.local) -Este dominio interno es fundamental para la comunicación entre servicios dentro del clúster. Permite que una aplicación contacte con otra simplemente usando su nombre de servicio de Kubernetes, sin necesidad de conocer su dirección IP interna. +Este dominio interno es crucial para la comunicación entre servicios dentro del clúster. Permite que una aplicación se comunique con otra utilizando simplemente su nombre de servicio de Kubernetes, sin necesidad de conocer su dirección IP interna. -Por ejemplo, un servicio llamado `api-backend` en el namespace `production` será automáticamente resoluble en la dirección `api-backend.production.svc.ctodev-cluster.local`. +Por ejemplo, un servicio llamado `api-backend` en el namespace `production` será automáticamente resuelto en la dirección `api-backend.production.svc.ctodev-cluster.local`. --- -La zona DNS pública utilizada para los clústeres de Kubernetes Managed es `.mk.ms-cloud-temple.com` +La zona DNS pública utilizada para los clústeres de Kubernetes administrados es `.mk.ms-cloud-temple.com` -El ingress *"nginx-external"* (mapeado a la IP pública nº 2) es accesible en `"*.external..mk.ms-cloud-temple.com"`. -Si publica una aplicación con esta ingress-class, podrá acceder a ella directamente a través de este nombre de dominio. Consulte el tutorial: [Desplegar su primera aplicación](./firstdeploy) +El ingress *"nginx-external"* (mappé sur l'IP publique n°2) es accesible en `"*.external..mk.ms-cloud-temple.com"`. +Si publica una aplicación con este ingress-class, podrá acceder a ella directamente mediante este nombre de dominio. Consulte el tutorial: [Despliegue de su primera aplicación](./firstdeploy) -## Hubble: La observabilidad de red al alcance de su mano +## Hubble : La observabilidad de red al alcance de la mano -Hubble es una interfaz gráfica y de línea de comandos para visualizar y comprender los flujos de red de su clúster. Basado en Cilium, ofrece un mapa detallado de servicios, dependencias y políticas de red en tiempo real. +Hubble es una interfaz gráfica y de línea de comandos para visualizar y comprender los flujos de red de tu cluster. Basado en Cilium, te ofrece un mapa detallado de los servicios, las dependencias y las políticas de red en tiempo real. -Con Hubble, puede: +Con Hubble, puedes : -- **Visualizar los flujos de tráfico** entre sus pods y servicios. +- **Visualizar los flujos de tráfico** entre tus pods y servicios. - **Identificar problemas de conectividad** y errores de red. -- **Verificar la aplicación de sus políticas de seguridad** (Network Policies). -- **Explorar las dependencias** entre sus diferentes aplicaciones. +- **Verificar la aplicación de tus políticas de seguridad** (Network Policies). +- **Explorar las dependencias** entre tus diferentes aplicaciones. -### Acceder a la interfaz Hubble +### Acceder a la interfaz de Hubble -La interfaz gráfica de Hubble está expuesta en una URL interna de su clúster. El acceso no es posible mediante port-forwarding de `kubectl` ya que los usuarios no disponen de permisos suficientes sobre el namespace `kube-system`. +La interfaz gráfica de Hubble está expuesta en una URL interna de su clúster. El acceso no es posible mediante un port-forwarding `kubectl` ya que los usuarios no tienen los permisos suficientes en el namespace `kube-system`. -Para acceder, debe estar conectado a la red interna del clúster (por ejemplo, mediante un bastion o una VPN). La URL a utilizar es la siguiente: +Para acceder, debe estar conectado a la red interna del clúster (por ejemplo, a través de un bastión o una VPN). La URL a utilizar es la siguiente: -`http://hubble.internal..mk.ms-cloud-temple.com` +`http://hubble.internal..mk.ms-cloud-temple.com` -Para que esta URL sea resoluble desde su estación de trabajo, probablemente necesitará añadir una entrada en su archivo `hosts` o en su DNS interno. Puede obtener la dirección IP interna del Ingress de Hubble con el siguiente comando: +Para que esta URL sea resoluble por su estación de trabajo, probablemente deberá agregar una entrada en su archivo `hosts` o en su DNS interno. Puede obtener la dirección IP interna del Ingress de Hubble con el siguiente comando: ```bash kubectl get ingress hubble-ui -n kube-system @@ -176,51 +178,52 @@ kubectl get ingress hubble-ui -n kube-system ### Creación de zonas DNS internas (clúster privado) -Para reforzar la seguridad y simplificar el acceso a sus servicios y a la API de Kubernetes desde su red interna, se recomienda crear una zona DNS interna. Esta zona permitirá resolver los nombres de dominio de sus Ingresses y de la API de Kubernetes hacia sus respectivas direcciones IP privadas, evitando así el tránsito por redes públicas. +Para reforzar la seguridad y simplificar el acceso a sus servicios y a la API de Kubernetes desde su red interna, se recomienda crear una zona DNS interna. Esta zona permitirá resolver los nombres de dominio de sus Ingress y de la API de Kubernetes hacia sus direcciones IP privadas correspondientes, evitando así el tránsito por redes públicas. -**Ejemplo de configuración con nuestro clúster "ctodev", con el rango asignado** **10.20.0.0/22:** +**Ejemplo de configuración con nuestro clúster "ctodev", cuyo rango asignado es** **10.20.0.0/22 :** -Basándose en las URLs proporcionadas en la guía de inicio rápido, puede configurar su DNS interno de la siguiente manera: +Basándose en las URLs proporcionadas en la guía de inicio, puede configurar su DNS interno de la siguiente manera: -1. **Cree la zona DNS privada** en sus servidores DNS internos para `..mk.ms-cloud-temple.com` +1. **Cree la zona DNS privada** en sus servidores DNS internos para `..mk.ms-cloud-temple.com` -2. **Añada los siguientes registros de tipo A**: +2. **Agregue los registros de tipo A** siguientes : - - **Para la API de Kubernetes:** + - **Para la API de Kubernetes :** - `. -> 10.20.0.20` (IP virtual de la API) - - **Para los servicios internos (a través del Ingress `nginx-internal`):** + - **Para los servicios internos (vía el Ingress `nginx-internal`) :** - `hubble.internal -> 10.20.1.1` - `argocd.internal -> 10.20.1.1` - `ceph.internal -> 10.20.1.1` - - **Para los servicios seguros (a través del Ingress `nginx-external-secure`):** + - **Para los servicios seguros (vía el Ingress `nginx-external-secure`) :** - `k10.external-secured -> 10.20.1.129` - `grafana.external-secured -> 10.20.1.129` - `harbor.external-secured -> 10.20.1.129` - `opencost.external-secured -> 10.20.1.129` - `opencost-mcp.external-secured -> 10.20.1.129` -Esta configuración garantiza que el tráfico hacia la API y los servicios internos permanezca confinado en su red privada, de acuerdo con las mejores prácticas de seguridad. +Esta configuración garantiza que el tráfico hacia la API y los servicios internos permanezca confinado a su red privada, conforme a las mejores prácticas de seguridad.

-:::warning[Para ir más lejos: seguridad en producción] -Este documento explica los conceptos de red fundamentales. Para un despliegue en producción, es fundamental aplicar medidas de seguridad adicionales: +:::warning[Para ir más allá: la seguridad en producción +] +Este documento explica los conceptos de red fundamentales. Para un despliegue en producción, es crucial aplicar medidas de seguridad adicionales: -- **Utilice imágenes seguras**: Prefiera imágenes de su registro corporativo seguro como **Harbor** en lugar de imágenes públicas. -- **Controle los flujos de red**: Implemente `NetworkPolicies` para controlar las comunicaciones a los únicos flujos necesarios entre sus aplicaciones. -- **Aplique políticas de gobernanza**: Utilice herramientas como **Kyverno** para imponer reglas de seguridad (p. ej. prohibir contenedores "root", exigir `requests` y `limits` de recursos, etc.). -::: +- **Utilice imágenes seguras** : Priorice imágenes provenientes de su registro de empresa seguro como **Harbor** en lugar de imágenes públicas. +- **Controle los flujos de red** : Implemente `NetworkPolicies` para controlar las comunicaciones únicamente a los flujos necesarios entre sus aplicaciones. +- **Aplique políticas de gobernanza** : Utilice herramientas como **Kyverno** para imponer reglas de seguridad (ej: prohibir contenedores "root", exigir `requests` y `limits` de recursos, etc.). +::: \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingargocd.md b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingargocd.md index fdcb08f2..30090d40 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingargocd.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingargocd.md @@ -1,75 +1,75 @@ --- -title: Usar ArgoCD para sus despliegues GitOps +title: Utilizar ArgoCD para sus despliegues GitOps --- import argocdguestbook from '@site/docs/managed_kubernetes/tutorials/images/argocdguestbook.png' ## Objetivos -Este tutorial le explica cómo usar **ArgoCD**, la herramienta de despliegue continuo GitOps integrada en su clúster **Managed Kubernetes**. Al final de esta guía, sabrá: +Este tutorial le explica cómo utilizar **ArgoCD**, la herramienta de despliegue continuo GitOps integrada en su clúster **Managed Kubernetes**. Al finalizar esta guía, sabrá: - Qué es el enfoque GitOps. - Cómo acceder a la interfaz de ArgoCD. -- Cómo desplegar una aplicación usando ArgoCD para sincronizar un repositorio Git. +- Cómo desplegar una aplicación utilizando ArgoCD para sincronizar un repositorio Git. -## El principio GitOps con ArgoCD +## El principio de GitOps con ArgoCD -**GitOps** es una práctica que consiste en usar un repositorio Git como única fuente de verdad para declarar el estado deseado de su infraestructura y aplicaciones. +**GitOps** es una práctica que consiste en utilizar un repositorio Git como única fuente de verdad para declarar el estado deseado de su infraestructura y sus aplicaciones. -**ArgoCD** es la herramienta que implementa este principio. Monitoriza continuamente un repositorio Git y compara el estado definido en él (mediante manifiestos de Kubernetes) con el estado real de su clúster. Si detecta una diferencia, aplica automáticamente los cambios para que el clúster coincida con lo declarado en Git. +**ArgoCD** es la herramienta que implementa este principio. Supervisa continuamente un repositorio Git y compara el estado definido en él (mediante manifiestos de Kubernetes) con el estado real de su clúster. Si detecta una diferencia, aplica automáticamente los cambios para que el clúster coincida con lo declarado en Git. Las ventajas son numerosas: - **Despliegues fiables y reproducibles.** - **Trazabilidad completa** de todos los cambios a través del historial de Git. -- **Recuperación rápida** tras un incidente volviendo a un commit anterior. -- **Seguridad mejorada** al limitar el acceso directo al clúster. +- **Recuperación rápida** tras un incidente, volviendo a un commit anterior. +- **Seguridad mejorada** al limitar los accesos directos al clúster. ## Acceder a la interfaz de ArgoCD -La interfaz web de ArgoCD está expuesta en una URL interna de su clúster. Para acceder a ella, debe estar conectado a la red interna del clúster (por ejemplo, mediante un bastion o una VPN). +La interfaz web de ArgoCD está expuesta en una URL interna de su clúster. Para acceder a ella, debe estar conectado a la red interna del clúster (por ejemplo, a través de un bastión o una VPN). -La URL a utilizar es la siguiente, reemplazando ``: +La URL a utilizar es la siguiente, reemplazando `` : -`http://argocd.internal..mk.ms-cloud-temple.com` +`http://argocd.internal..mk.ms-cloud-temple.com` -Puede obtener la dirección IP interna del Ingress de ArgoCD con el siguiente comando: +Puede obtener la dirección IP interna del Ingress de ArgoCD con el siguiente comando : ```bash kubectl get ingress argocd-server -n argocd ``` :::info -La contraseña para la cuenta `admin` le es proporcionada por los equipos de Cloud Temple en el momento de la entrega de su clúster. +La contraseña para la cuenta `admin` se la proporcionan los equipos de Cloud Temple durante la entrega de su clúster. ::: ## Desplegar una aplicación con ArgoCD -Ahora desplegaremos una aplicación de prueba usando el enfoque GitOps. +Ahora vamos a desplegar una aplicación de prueba utilizando el enfoque GitOps. ### 1. El repositorio Git -ArgoCD necesita un repositorio Git que contenga los manifiestos de Kubernetes de la aplicación a desplegar. Para este tutorial, usaremos el repositorio de ejemplos de ArgoCD: `https://github.com/argoproj/argocd-example-apps`. Desplegaremos la aplicación `guestbook` que se encuentra en este repositorio. +ArgoCD necesita un repositorio Git que contenga los manifiestos de Kubernetes de la aplicación a desplegar. Para este tutorial, utilizaremos el repositorio de ejemplos de ArgoCD: `https://github.com/argoproj/argocd-example-apps`. Desplegaremos la aplicación `guestbook` que se encuentra en este repositorio. -### 2. Preparar el namespace de destino +### 2. Preparar el espacio de nombres de destino -Para que la aplicación pueda desplegarse en un namespace gestionado por Capsule, primero debemos crear este namespace y aplicarle la etiqueta de tenant apropiada. +Para que la aplicación pueda desplegarse en un namespace gestionado por Capsule, primero debemos crear este namespace y aplicar la etiqueta de tenant correspondiente. Ejecute los siguientes comandos: ```bash -# Crea el namespace +# Crée le namespace kubectl create namespace guestbook -# Aplica la etiqueta para asociarlo con el tenant "default" de Capsule (si es necesario, ya que el namespace probablemente ya fue asociado con su tenant al crearlo) +# Applique le label pour l'associer au tenant "default" de Capsule (si besoin, car le namespace a surement déjà été associé avec votre tenant lors de sa création) kubectl label namespace guestbook capsule.clastix.io/tenant=default ``` ### 3. Crear la aplicación en ArgoCD -Ahora que el namespace está listo, podemos declarar la aplicación a ArgoCD. +Una vez que el namespace está listo, podemos declarar la aplicación en ArgoCD. -1. Cree un archivo llamado `app-guestbook.yaml` con el siguiente contenido: +1. Cree un archivo llamado `app-guestbook.yaml` con el siguiente contenido : ```yaml apiVersion: argoproj.io/v1alpha1 @@ -92,51 +92,51 @@ Ahora que el namespace está listo, podemos declarar la aplicación a ArgoCD. selfHeal: true ``` - Este manifiesto solicita a ArgoCD que: + Este manifiesto le indica a ArgoCD que : - Cree una aplicación llamada `guestbook`. - - Monitorice el repositorio `argocd-example-apps`. - - Se centre en la carpeta `guestbook` de ese repositorio. + - Supervise el repositorio `argocd-example-apps`. + - Se centre en la carpeta `guestbook` de este repositorio. - Despliegue los manifiestos encontrados en el namespace `guestbook` del clúster local. - Mantenga la sincronización automáticamente (`automated`). -2. Tiene dos opciones para crear la aplicación en ArgoCD: +2. Tiene dos opciones para crear la aplicación en ArgoCD : - **Opción A: Mediante `kubectl` (Enfoque GitOps)** + **Opción A : A través de `kubectl` (Enfoque GitOps)** - Aplique este manifiesto directamente a su clúster. Este es el método recomendado ya que sigue el principio GitOps de gestión declarativa. + Aplique este manifiesto directamente a su clúster. Este es el método recomendado porque sigue el principio GitOps de gestión declarativa. ```bash kubectl apply -f app-guestbook.yaml ``` - **Opción B: Mediante la interfaz web de ArgoCD** + **Opción B : A través de la interfaz web de ArgoCD** - También puede crear la aplicación directamente desde la interfaz gráfica: - - En la UI de ArgoCD, haga clic en **"+ NEW APP"**. - - En la parte superior derecha de la pantalla de creación, haga clic en **"EDIT AS YAML"**. + También puede crear la aplicación directamente desde la interfaz gráfica : + - En la interfaz de ArgoCD, haga clic en **"+ NEW APP"**. + - En la esquina superior derecha de la pantalla de creación, haga clic en **"EDIT AS YAML"**. - Pegue el contenido de su archivo `app-guestbook.yaml` en el editor. - Haga clic en **"CREATE"**. ### 4. Verificar la sincronización -En cuanto aplique el manifiesto, ArgoCD detecta este nuevo recurso `Application` y comienza su trabajo. +En cuanto aplique el manifiesto, ArgoCD detectará este nuevo recurso `Application` y comenzará su trabajo. -1. **Mediante la interfaz web:** - - Conéctese a la interfaz de ArgoCD. +1. **A través de la interfaz web :** + - Inicie sesión en la interfaz de ArgoCD. - Debería ver una nueva tarjeta para la aplicación `guestbook`. - Después de unos instantes, su estado debería cambiar a `Healthy` y `Synced`. - - Al hacer clic en la tarjeta, puede visualizar todos los recursos de Kubernetes (Deployment, Service, etc.) que han sido creados. + - Al hacer clic en la tarjeta, puede visualizar todos los recursos de Kubernetes (Deployment, Service, etc.) que se han creado. -1. **Mediante la línea de comandos:** - - Verifique que el namespace `guestbook` ha sido creado: +1. **A través de la línea de comandos :** + - Verifique que el namespace `guestbook` se haya creado : ```bash kubectl get ns guestbook ``` - - Verifique que los recursos de la aplicación están correctamente desplegados en ese namespace: + - Verifique que los recursos de la aplicación se hayan implementado correctamente en este namespace : ```bash kubectl get all -n guestbook @@ -155,33 +155,34 @@ En cuanto aplique el manifiesto, ArgoCD detecta este nuevo recurso `Application` ### 5. El ciclo GitOps -Ahora, si modifica un manifiesto en el repositorio Git, ArgoCD detectará el cambio y actualizará automáticamente la aplicación en el clúster. ¡Esa es la magia de GitOps! +Ahora, si modificas un manifiesto en el repositorio Git, ArgoCD detectará el cambio y actualizará automáticamente la aplicación en el clúster. ¡Esa es la magia de GitOps! ## Limpieza -Para eliminar la aplicación y todos los recursos asociados, puede simplemente eliminar el recurso `Application` de ArgoCD. +Para eliminar la aplicación y todos los recursos asociados, simplemente puede eliminar el recurso `Application` de ArgoCD. -1. **Mediante la interfaz web:** - - En la UI de ArgoCD, encuentre la aplicación `guestbook`. +1. **Desde la interfaz web :** + - En la interfaz de ArgoCD, busque la aplicación `guestbook`. - Haga clic en los tres puntos (...) para abrir el menú y seleccione **"Delete"**. - Marque la opción **"Foreground"** para asegurarse de que todos los recursos gestionados (pods, servicios, etc.) también se eliminen en cascada. -2. **Mediante `kubectl`:** - - Elimine el archivo `app-guestbook.yaml` que creó: +2. **Desde `kubectl` :** + - Elimine el archivo `app-guestbook.yaml` que creó : ```bash kubectl delete -f app-guestbook.yaml ``` -ArgoCD eliminará ahora todos los componentes de la aplicación `guestbook`. Una vez completada la sincronización de eliminación, el namespace `guestbook` estará vacío. Entonces podrá eliminarlo con el siguiente comando: +ArgoCD ahora eliminará todos los componentes de la aplicación `guestbook`. Una vez finalizada la sincronización de eliminación, el espacio de nombres `guestbook` estará vacío. Puede eliminarlo entonces con el siguiente comando : ```bash kubectl delete namespace guestbook ``` -:::info[Para ir más lejos: gestión de secretos] -Este tutorial usa un repositorio público sin datos sensibles. Para sus aplicaciones en producción, es fundamental nunca almacenar secretos (contraseñas, claves de API) en texto plano en su repositorio Git. Soluciones como **Sealed Secrets** o **HashiCorp Vault** se integran con ArgoCD para gestionar sus secretos de forma segura. Un futuro tutorial detallará este enfoque. +:::info[Para ir más allá: la gestión de secretos +] +Este tutorial utiliza un repositorio público sin datos sensibles. Para sus aplicaciones en producción, es crucial nunca almacenar secretos (contraseñas, claves de API) en texto claro en su repositorio Git. Soluciones como **Sealed Secrets** o **HashiCorp Vault** se integran con ArgoCD para gestionar sus secretos de forma segura. Un futuro tutorial detallará este enfoque. ::: -## Conclusión +## Conclusion -Ha desplegado su primera aplicación con ArgoCD siguiendo los principios GitOps. Este potente enfoque le permite gestionar sus despliegues de manera declarativa, fiable y segura. Le animamos a adoptarlo para todas sus aplicaciones en Managed Kubernetes. +Ha desplegado su primera aplicación con ArgoCD siguiendo los principios de GitOps. Este enfoque potente le permite gestionar sus despliegues de manera declarativa, fiable y segura. Le recomendamos adoptarla para todas sus aplicaciones en Kubernetes administrado. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingcapsule.md b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingcapsule.md index 0ed90c50..f44ccbbd 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingcapsule.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingcapsule.md @@ -1,65 +1,65 @@ --- -title: Gestionar permisos con Capsule +title: Gestionar los permisos con Capsule --- ## Objetivos -Este tutorial le guiará en el uso de **Capsule**, la herramienta de multi-tenancy integrada en su clúster **Managed Kubernetes**. Al final de esta guía, sabrá: +Este tutorial le guiará en el uso de **Capsule**, la herramienta de multiinquilino integrada en su clúster **Managed Kubernetes**. Al finalizar esta guía, sabrá: -- Qué es un **Tenant de Capsule** y cómo organiza sus permisos. +- Qué es un **Tenant Capsule** y cómo organiza sus permisos. - Cómo **crear y gestionar Namespaces** dentro de su Tenant. - Cómo se aplican las **políticas de seguridad y las cuotas** a sus proyectos. ## ¿Qué es Capsule? -Capsule es un controlador de Kubernetes que introduce el concepto de **Tenant** para agrupar múltiples Namespaces. En la oferta de Managed Kubernetes de Cloud Temple, Capsule se utiliza para delegarle la gestión de sus propios Namespaces de forma autónoma, sin necesitar la intervención de un administrador del clúster. +Capsule es un controlador de Kubernetes que introduce el concepto de **Tenant** para agrupar varios Namespaces. En el producto Managed Kubernetes de Cloud Temple, Capsule se utiliza para delegar la gestión de sus propios Namespaces con total autonomía, sin necesidad de la intervención de un administrador del clúster. -Al entregar su clúster, los equipos de Cloud Temple han creado un primer Tenant para usted y le han designado como su **propietario (Tenant Owner)**. +Al entregar su clúster, los equipos de Cloud Temple crearon un primer Tenant para usted y lo designaron como **propietario (Tenant Owner)**. :::tip -Por defecto, su primer Tenant se llama `default` y la cuenta de servicio propietaria es `defaultapp`. +De forma predeterminada, su primer Tenant se llama `default` y la cuenta de servicio propietaria es `defaultapp`. ::: -Para saber más sobre el proyecto, puede consultar el [sitio web oficial de Capsule](https://projectcapsule.dev/). +Para obtener más información sobre el proyecto, puede consultar el [sitio web oficial de Capsule](https://projectcapsule.dev/). ## Paso 1: Conocer el nombre de su Tenant -Como `Tenant Owner`, no tiene permisos para listar el recurso `Tenant` directamente. El nombre de su Tenant le es comunicado por los equipos de Cloud Temple al entregar el servicio. +Como `Tenant Owner`, no tiene permisos para listar el recurso `Tenant` directamente. El nombre de su Tenant se le proporciona por los equipos de Cloud Temple durante la entrega del servicio. -Si ha olvidado el nombre de su Tenant, puede encontrarlo inspeccionando las etiquetas de los Namespaces a los que tiene acceso. El siguiente comando lista todos los namespaces que están vinculados a un tenant de Capsule y muestra sus etiquetas: +Si ha olvidado el nombre de su Tenant, puede recuperarlo inspeccionando las etiquetas de los Namespaces a los que tiene acceso. El siguiente comando lista todos los namespaces que están asociados a un tenant Capsule y muestra sus etiquetas: ```bash kubectl get ns -l capsule.clastix.io/tenant --show-labels ``` -Busque la etiqueta `capsule.clastix.io/tenant`. El valor de esta etiqueta es el nombre de su Tenant. Luego puede usar este nombre para filtrar y ver solo los Namespaces de su Tenant: +Busque la etiqueta `capsule.clastix.io/tenant`. El valor de esta etiqueta es el nombre de su Tenant. Puede utilizar este nombre para filtrar y ver únicamente los Namespaces de su Tenant: ```bash # Una vez que conoce el nombre de su tenant, por ejemplo "my-tenant" kubectl get ns -l capsule.clastix.io/tenant=my-tenant ``` -## Paso 2: Crear un nuevo Namespace +## Paso 2 : Crear un nuevo Namespace -Su principal ventaja como `Tenant Owner` es poder crear Namespaces por su cuenta. Puede hacerlo directamente con un único comando `kubectl`. +Su principal ventaja como `Tenant Owner` es poder crear Namespaces usted mismo. Puede hacerlo directamente con un solo comando `kubectl`. -Ejecute el siguiente comando para crear un namespace llamado `mon-projet-dev`: +Ejecute el siguiente comando para crear un namespace llamado `mon-projet-dev` : ```bash kubectl create namespace mon-projet-dev ``` -Capsule interceptará esta solicitud. Como usted es propietario de un Tenant, autorizará la creación del Namespace y lo asociará automáticamente a su Tenant. +Capsule interceptará esta solicitud. Como es propietario de un Tenant, autorizará la creación del Namespace y la asociará automáticamente a su Tenant. ## Paso 3: Verificar la asociación del Namespace -Una vez creado el Namespace, puede verificar que ha sido correctamente vinculado a su Tenant. +Una vez creado el Namespace, puede verificar que se haya asociado correctamente a su Tenant. ```bash kubectl get ns mon-projet-dev --show-labels ``` -Notará que Capsule ha añadido una etiqueta a su Namespace, indicando a qué Tenant pertenece. Este es el mecanismo que garantiza el aislamiento entre los diferentes Tenants del clúster. +Observará que Capsule ha añadido una etiqueta a su Namespace, indicando a qué Tenant pertenece. Es este mecanismo el que garantiza el aislamiento entre los diferentes Tenants del clúster. ``` NAME STATUS AGE LABELS @@ -68,16 +68,16 @@ mon-projet-dev Active 1m capsule.clastix.io/tenant=votre-tenant ## Paso 4: Comprender la herencia de políticas -Una de las mayores ventajas de Capsule es que todas las políticas de seguridad, cuotas de recursos (`ResourceQuota`) y rangos de recursos (`LimitRange`) definidos a nivel de Tenant por los administradores son **heredados automáticamente** por todos los Namespaces que crea. +Una de las mayores ventajas de Capsule es que todas las políticas de seguridad, las cuotas de recursos (`ResourceQuota`) y los rangos de recursos (`LimitRange`) definidos a nivel de Tenant por los administradores son **heredados automáticamente** por todos los Namespaces que cree. -Esto garantiza que sus proyectos cumplan con los límites de consumo (CPU, memoria, almacenamiento) y las reglas de seguridad (como las políticas de red predeterminadas o las restricciones de seguridad definidas por **Kyverno**) establecidas para su entorno, sin que usted tenga que reconfigurarlos para cada Namespace. +Esto garantiza que sus proyectos respeten los límites de consumo (CPU, memoria, almacenamiento) y las reglas de seguridad (como las políticas de red predeterminadas o las restricciones de seguridad definidas por **Kyverno**) establecidas para su entorno, sin que tenga que volver a configurarlos para cada Namespace. :::info -Se han establecido cuotas específicas en su Tenant de Capsule para limitar el uso del almacenamiento persistente (Ceph-Block y Ceph-FileSystem) al espacio total disponible en el clúster. Si necesita modificar estas cuotas para un proyecto específico, por favor formule una solicitud al soporte de Cloud Temple. +Se han establecido cuotas específicas en su Tenant de Capsule para limitar el uso del almacenamiento persistente (Ceph-Block y Ceph-FileSystem) al espacio total disponible en el cluster. Si necesita modificar estas cuotas para un proyecto específico, por favor, envíe una solicitud al soporte de Cloud Temple. ::: ## Conclusión -Gracias a Capsule, dispone de autonomía completa para gestionar los Namespaces de sus equipos, beneficiándose al mismo tiempo de un marco seguro y preconfigurado por los administradores del clúster. Puede crear, modificar y eliminar Namespaces a voluntad, sabiendo que las salvaguardas necesarias se aplican automáticamente. +Gracias a Capsule, dispone de autonomía completa para gestionar los Namespaces de sus equipos, al tiempo que cuenta con un marco seguro y preconfigurado por los administradores del cluster. Puede crear, modificar y eliminar Namespaces según sus necesidades, sabiendo que los controles de seguridad necesarios se aplican automáticamente. -Si necesita crear un nuevo Tenant para aislar otro conjunto de proyectos o equipos, puede solicitarlo al soporte de Cloud Temple. +Si necesita crear un nuevo Tenant para aislar otro conjunto de proyectos o equipos, puede solicitarlo al soporte de Cloud Temple. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggapi.md b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggapi.md index 5a31934d..7ff464d4 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggapi.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggapi.md @@ -6,27 +6,28 @@ import gapischema from '@site/docs/managed_kubernetes/tutorials/images/gapi.png' ## Introducción -La Gateway API es el nuevo estándar de Kubernetes para la gestión del tráfico entrante. Sucede al recurso Ingress tradicional ofreciendo más flexibilidad, más funcionalidades (enrutamiento avanzado, balanceo de carga, etc.) y una mejor separación de responsabilidades. +La API Gateway es la nueva norma de Kubernetes para la gestión del tráfico entrante. Sustituye al recurso Ingress tradicional, ofreciendo mayor flexibilidad, funcionalidades (enrutamiento avanzado, balanceo de carga, etc.) y una mejor separación de responsabilidades. -En su clúster de Managed Kubernetes de Cloud Temple, **Cilium** se utiliza como CNI e implementa de forma nativa el soporte de Gateway API. +En su clúster Managed Kubernetes Cloud Temple, **Cilium** se utiliza como CNI e implementa de forma nativa el soporte para la API Gateway. -:::info[Versiones soportadas] -Esta documentación se aplica a los clústeres que usan **Cilium 1.8.4 o superior**. -Los **CRDs de Gateway API en versión 1.4** están preinstalados en su clúster. +:::info[Versiones compatibles +] +Esta documentación se aplica a los clústeres que utilizan **Cilium 1.8.4 o superior**. +Los **CRDs de la API Gateway en versión 1.4** están preinstalados en su clúster. ::: ## Objetivos -Este tutorial le guiará para: +Este tutorial le guiará a: -- Comprender los recursos básicos de Gateway API (GatewayClass, Gateway, HTTPRoute). +- Comprender los recursos básicos de la API Gateway (GatewayClass, Gateway, HTTPRoute). - Desplegar una aplicación de prueba. -- Exponer esta aplicación mediante una Gateway de Cilium. +- Exponer esta aplicación a través de una Gateway de Cilium. - Probar el acceso. -## Requisitos previos +## Requisitos -- Un clúster de Managed Kubernetes de Cloud Temple operativo. +- Un clúster de Kubernetes gestionado de Cloud Temple operativo. - La herramienta `kubectl` configurada para acceder a su clúster. - La herramienta `cilium`. @@ -34,43 +35,44 @@ Este tutorial le guiará para: Gateway API descompone la configuración de red en tres recursos principales: -1. **GatewayClass**: Define el tipo de controlador (aquí, `io.cilium/gateway`). -2. **Gateway**: Instancia un punto de entrada de red (load balancer). -3. **HTTPRoute**: Define las reglas de enrutamiento (rutas, headers) hacia los Services de Kubernetes. +1. **GatewayClass** : Define el tipo de controlador (aquí, `io.cilium/gateway`). +2. **Gateway** : Instancia un punto de entrada de red (balanceador de carga). +3. **HTTPRoute** : Define las reglas de enrutamiento (rutas, cabeceras) hacia los Servicios de Kubernetes. Schema GAPI ## Paso 1: Verificar la versión y la GatewayClass -Puede verificar que su clúster utiliza una versión compatible de Cilium (1.8.4+) mediante los comandos: +Puede verificar que su clúster utiliza una versión compatible de Cilium (1.8.4+) mediante los siguientes comandos: ```bash cilium status cilium config view | grep -w "enable-gateway-api" ``` -A continuación, asegúrese de que la `GatewayClass` de Cilium está disponible en su clúster: +Asegúrese luego de que la `GatewayClass` de Cilium esté disponible en su clúster: ```bash kubectl get gatewayclass ``` -Debería ver una salida similar a: +Debería ver una salida similar a la siguiente: ```text NAME CONTROLLER ACCEPTED AGE cilium io.cilium/gateway True 2d ``` -:::info[Nota] -Si no se lista ninguna GatewayClass, asegúrese de que la funcionalidad Gateway API está habilitada en su instalación de Cilium. +:::info[Nota +] +Si no se lista ninguna GatewayClass, asegúrese de que la función Gateway API esté habilitada en su instalación de Cilium. ::: -## Paso 2: Desplegar una aplicación de demostración +## Paso 2 : Desplegar una aplicación de demostración Desplegaremos una aplicación sencilla que devuelve información sobre el pod (echo-server). -Cree un archivo `apps.yaml`: +Cree un archivo `apps.yaml` : ```yaml apiVersion: apps/v1 @@ -109,17 +111,17 @@ spec: targetPort: 80 ``` -Aplique la configuración: +Aplique la configuración : ```bash kubectl apply -f apps.yaml ``` -## Paso 3: Crear la Gateway +## Paso 3 : Crear la Gateway La Gateway solicitará la creación de un LoadBalancer para recibir el tráfico. -Cree un archivo `gateway.yaml`: +Cree un archivo `gateway.yaml` : ```yaml apiVersion: gateway.networking.k8s.io/v1 @@ -137,25 +139,25 @@ spec: from: Same ``` -Aplique la configuración: +Aplique la configuración : ```bash kubectl apply -f gateway.yaml ``` -Verifique que la Gateway ha obtenido una dirección IP (esto puede tardar unos instantes hasta que el LoadBalancer sea provisionado por la infraestructura de Cloud Temple): +Verifique que la Gateway haya obtenido una dirección IP (cela peut prendre quelques instants pour que le LoadBalancer soit provisionné par l'infrastructure Cloud Temple) : ```bash kubectl get gateway my-gateway ``` -Espere hasta que el campo `PROGRAMMED` sea `True` y que `ADDRESS` muestre una IP. +Espere a que el campo `PROGRAMMED` sea `True` y que `ADDRESS` muestre una IP. ## Paso 4: Crear una HTTPRoute Ahora que tenemos una "puerta de entrada" (Gateway), debemos dirigir el tráfico hacia nuestro servicio. -Cree un archivo `httproute.yaml`: +Cree un archivo `httproute.yaml` : ```yaml apiVersion: gateway.networking.k8s.io/v1 @@ -175,7 +177,7 @@ spec: port: 80 ``` -Aplique la configuración: +Aplique la configuración : ```bash kubectl apply -f httproute.yaml @@ -183,7 +185,7 @@ kubectl apply -f httproute.yaml ## Paso 5: Probar el acceso -Recupere la dirección IP de su Gateway: +Obtenga la dirección IP de su Gateway: ```bash kubectl get gateway my-gateway -o jsonpath='{.status.addresses[0].value}' @@ -195,13 +197,13 @@ Envíe una solicitud a esta IP para probar: curl http://10.200.205.2 ``` -Debería recibir una respuesta JSON de la aplicación `echo-server` que indica los detalles del pod que respondió. +Debería recibir una respuesta JSON de la aplicación `echo-server` que indique los detalles del pod que respondió. -## Funcionalidades avanzadas (Ejemplo: Canary Release) +## Características avanzadas (Ejemplo: Canary Release) -Gateway API facilita enormemente los escenarios de despliegue avanzados, como el Canary Release (distribución ponderada del tráfico). +La API Gateway facilita significativamente los escenarios de despliegue avanzados, como el Canary Release (distribución ponderada del tráfico). -Supongamos que tenemos una v2 de nuestra aplicación. Podemos distribuir el tráfico al 90% hacia v1 y al 10% hacia v2 simplemente ajustando los pesos en `backendRefs`: +Supongamos que tenemos una v2 de nuestra aplicación. Podemos distribuir el tráfico al 90 % hacia v1 y al 10 % hacia v2 simplemente ajustando los pesos en `backendRefs` : ```yaml apiVersion: gateway.networking.k8s.io/v1 @@ -221,6 +223,6 @@ spec: weight: 10 ``` -## Conclusión +## Conclusion -Ha configurado una infraestructura moderna de exposición de servicios con Cilium Gateway API. Este enfoque estandarizado, más rico semánticamente que los Ingress, es el recomendado para aprovechar las capacidades avanzadas de red de Kubernetes. +Ha implementado una infraestructura moderna de exposición de servicios con Cilium Gateway API. Este enfoque estandarizado, más rico semánticamente que los Ingress, se recomienda para aprovechar las capacidades avanzadas de la red de Kubernetes. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggpu.md b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggpu.md index 518d2aea..53c0c96c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggpu.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggpu.md @@ -1,18 +1,18 @@ --- -title: Usar una GPU NVIDIA +title: Utilizar una GPU nVidia --- import nvidiasmi from '@site/docs/managed_kubernetes/tutorials/images/nvidiasmi.png' -# Usar una GPU en Managed Kubernetes +# Utilizar una GPU en Managed Kubernetes Este tutorial le muestra cómo desplegar un pod que utiliza un recurso GPU en un clúster de Managed Kubernetes configurado con nodos "Bare Metal" equipados con GPUs NVIDIA. -## Requisitos previos +## Prerrequisitos -- Un clúster de Managed Kubernetes con al menos un nodo worker de tipo "Bare Metal" con GPU. +- Un clúster de Kubernetes administrado con al menos un nodo worker de tipo "Bare Metal" con GPU. -## Manifiesto de Pod de ejemplo +## Ejemplo de manifiesto de Pod A continuación se muestra un ejemplo de manifiesto de pod que ejecuta el comando `nvidia-smi` para verificar la presencia y el estado de la tarjeta GPU. @@ -22,7 +22,7 @@ kind: Pod metadata: name: nvidia-cuda-check spec: - runtimeClassName: nvidia # Clave para Talos NVIDIA + runtimeClassName: nvidia # Clé pour Talos NVIDIA restartPolicy: Never containers: - name: nvidia-version-check @@ -33,27 +33,27 @@ spec: ### Explicación del Manifiesto -- **`runtimeClassName: nvidia`**: Esta es la parte más importante. Le indica a Kubernetes que use el runtime de NVIDIA. El toolkit de NVIDIA se encarga entonces de inyectar los drivers de NVIDIA directamente en el pod, lo que permite al contenedor acceder a la GPU. -- **`restartPolicy: Never`**: Como este pod es simplemente un comando de verificación, no queremos que se reinicie después de su ejecución. -- **`image: "nvidia/cuda:..."`**: Usamos una imagen proporcionada por NVIDIA que contiene las herramientas necesarias para interactuar con la GPU. -- **`command: ["nvidia-smi"]`**: Este es el comando que se ejecutará dentro del contenedor. `nvidia-smi` es una herramienta de línea de comandos que proporciona información sobre las GPUs NVIDIA. +- **`runtimeClassName: nvidia`**: Esta es la parte más importante. Indica a Kubernetes que utilice el runtime de NVIDIA. El toolkit de NVIDIA se encarga entonces de inyectar los controladores de NVIDIA directamente en el pod, lo que permite que el contenedor acceda a la GPU. +- **`restartPolicy: Never`**: Dado que este pod es solo un comando de verificación, no queremos que se reinicie después de su ejecución. +- **`image: "nvidia/cuda:..."`**: Utilizamos una imagen proporcionada por NVIDIA que contiene las herramientas necesarias para interactuar con la GPU. +- **`command: ["nvidia-smi"]`**: Este es el comando que se ejecutará dentro del contenedor. `nvidia-smi` es una herramienta de línea de comandos que proporciona información sobre las GPU de NVIDIA. -Para más información sobre el funcionamiento del toolkit de NVIDIA, puede consultar la [documentación oficial en GitHub](https://github.com/NVIDIA/nvidia-container-toolkit). +Para obtener más información sobre el funcionamiento del toolkit de NVIDIA, puede consultar la [documentación oficial en GitHub](https://github.com/NVIDIA/nvidia-container-toolkit). ## Despliegue y Verificación -1. **Despliegue el pod** usando el comando `kubectl apply`: +1. **Despliegue el pod** utilizando el comando `kubectl apply` : ```shell kubectl apply -f nvidia-smi.yaml ``` -2. **Verifique los logs del pod** para ver la salida del comando `nvidia-smi`: +2. **Verifique los logs del pod** para ver la salida del comando `nvidia-smi` : ```shell kubectl logs nvidia-cuda-check ``` -Si todo está correctamente configurado, debería ver una salida similar a la siguiente, mostrando los detalles de su tarjeta GPU: +Si todo está configurado correctamente, debería ver una salida similar a esta, que muestra los detalles de su tarjeta GPU : -nvidia-smi command result +nvidia-smi command result \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingharbor.md b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingharbor.md index 25f6b2e3..1d55d079 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingharbor.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingharbor.md @@ -2,43 +2,43 @@ title: Usar Harbor --- -Harbor es un registro de artefactos OCI (imágenes de contenedor, charts de Helm, SBOM, firmas, etc.) que ofrece una gestión detallada de proyectos, control de acceso, análisis de vulnerabilidades, políticas de retención y gestión de firmas. Esta guía explica cómo usarlo con Cloud Temple Managed Kubernetes, desde la conexión al registro hasta la integración en sus despliegues de Kubernetes y pipelines CI/CD. +Harbor es un registro de artefactos OCI (imágenes de contenedor, charts Helm, SBOM, firmas, etc.) que ofrece una gestión fina de proyectos, control de acceso, análisis de vulnerabilidades, políticas de retención y gestión de firmas. Esta guía explica cómo utilizarlo con Cloud Temple Managed Kubernetes, desde la conexión al registro hasta la integración en sus despliegues de Kubernetes y sus pipelines CI/CD. :::note -En esta guía, reemplace las siguientes variables con sus propios valores: +En esta guía, reemplace las siguientes variables por sus valores: -- `` : código de su clúster (ej.: `ctodev`) -- `` : URL pública de Harbor construida así: `harbor.external-secured..mk.ms-cloud-temple.com` (ej.: `harbor.external-secured.ctodev.mk.ms-cloud-temple.com`) -- `` : nombre de su proyecto Harbor -- `` : namespace de Kubernetes de destino +- `` : código de su clúster (ej: `ctodev`) +- `` : URL pública de Harbor construida de la siguiente manera: `harbor.external-secured..mk.ms-cloud-temple.com` (ej: `harbor.external-secured.ctodev.mk.ms-cloud-temple.com`) +- `` : nombre de su proyecto de Harbor +- `` : namespace de Kubernetes destino - `` / `` : credenciales de una cuenta robot de Harbor ::: -## Requisitos previos +## Prerrequisitos - Acceso a la Consola y al servicio Managed Kubernetes -- Un proyecto Harbor existente (o derechos para crear uno) +- Un proyecto Harbor existente (ou droits pour en créer un) - Herramientas instaladas localmente: - Docker o Podman - - kubectl (configurado en su clúster) - - Helm v3.8+ (soporte OCI) + - kubectl (configuré sur votre cluster) + - Helm v3.8+ (support OCI) - Opcional: `cosign` para firmas de imágenes -- Acceso de red saliente a `` en HTTPS (443) -- No se requieren certificados adicionales: el certificado TLS de Harbor es público y reconocido +- Acceso de red saliente hacia `` en HTTPS (443) +- No se requiere ningún certificado adicional: el certificado TLS de Harbor es público y reconocido ## Conceptos esenciales - Proyecto: espacio lógico (público o privado) que contiene repositorios. -- Repositorio: colección de tags para una imagen dada (`/app-web:1.0.0`). +- Repositorio: colección de etiquetas para una imagen dada (`/app-web:1.0.0`). - Cuentas robot: identidades técnicas con privilegios limitados, destinadas a CI/CD. -- Análisis de vulnerabilidades: análisis automático (ej.: Trivy) en la carga y bajo demanda. -- Políticas: inmutabilidad de tags, retención, reglas de seguridad. -- Artefactos OCI: imágenes, charts de Helm (OCI), SBOM, firmas. +- Escaneos de vulnerabilidades: análisis automático (ej.: Trivy) en la carga y bajo demanda. +- Políticas: inmutabilidad de las etiquetas, retención, reglas de seguridad. +- Artefactos OCI: imágenes, gráficos Helm (OCI), SBOM, firmas. ## Conexión al registro (Docker / Podman) -Prefiera una **cuenta robot** vinculada al proyecto para las operaciones CI/CD. +Prefiera una **cuenta robot** asociada al proyecto para las operaciones de CI/CD. ```bash # Docker @@ -48,61 +48,63 @@ docker login podman login ``` -- Usuario: `` (ej.: `robot$miproyecto+pusher`) +- Usuario: `` (ex: `robot$monprojet+pusher`) - Contraseña: `` -:::tip[Certificados] -La instancia Harbor gestionada por Cloud Temple presenta un certificado público reconocido. Normalmente no se requiere ninguna configuración adicional de CA en Docker o Podman. +:::tip[Certificados +] +La instancia de Harbor gestionada por Cloud Temple presenta un certificado público reconocido. No es necesaria ninguna configuración adicional de CA en Docker o Podman. ::: ## Crear un proyecto -A través de la UI de Harbor: +A través de la interfaz de Harbor: -- Projects > New Project -- Nombre: ``, visibilidad: Private (recomendado) -- Opciones: activar la inmutabilidad de tags, auto-scan on push, etc. +- Proyectos > Nuevo proyecto +- Nombre: ``, visibilidad: Privado (recomendado) +- Opciones: habilitar la inmutabilidad de las etiquetas, el autoescaneo en push, etc. -:::info[Buenas prácticas] +:::info[Buenas prácticas +] - Un proyecto por aplicación o por dominio funcional. -- Restringir roles (maintainer, developer, guest). -- Activar el auto-scan y las políticas de retención. +- Restringir los roles (mantenedor, desarrollador, invitado). +- Habilitar el autoescaneo y las políticas de retención. ::: -## Subir una imagen (push) +## Subir una imagen -Ejemplo con Docker: +Exemple con Docker: ```bash # Construir localmente docker build -t app-web:1.0.0 . -# Etiquetar hacia Harbor +# Etiquetar para Harbor docker tag app-web:1.0.0 //app-web:1.0.0 -# Subir (push) +# Subir docker push //app-web:1.0.0 ``` -Organización recomendada: +Organisation recomendada: -- `/:` (ej.: `payments/api:2.3.4`) -- Inmutabilidad de tags para evitar sobreescrituras -- Tags semánticos: `1.2.3`, `1.2`, `latest` (use `latest` con precaución) +- `/:` (ex: `payments/api:2.3.4`) +- Inmutabilidad de las etiquetas para evitar sobrescrituras +- Etiquetas semánticas: `1.2.3`, `1.2`, `latest` (utilice `latest` con precaución) -## Descargar una imagen (pull) +## Extraer una imagen ```bash docker pull //app-web:1.0.0 ``` -Verifique los resultados del análisis y la firma (si está activada) antes de promocionar a producción. +Verifique los resultados del escaneo y la firma (si está activada) antes de promover a producción. -## Usar las imágenes en Kubernetes +## Utilizar las imágenes en Kubernetes -### 1) Crear un secret de pull +### 1) Crear un secreto de pull ```bash kubectl create secret docker-registry harbor-pull-secret \ @@ -113,12 +115,12 @@ kubectl create secret docker-registry harbor-pull-secret \ ``` :::tip -El parámetro --docker-email ya no es requerido en las versiones recientes de kubectl (y puede omitirse). +El parámetro --docker-email ya no es necesario en las versiones recientes de kubectl (y puede ignorarse). ::: -### 2) Referenciar el secret en sus workloads +### 2) Referenciar el secreto en tus cargas de trabajo -- A través del ServiceAccount: +- A través de la ServiceAccount: ```yaml apiVersion: v1 @@ -159,7 +161,7 @@ spec: ### 3) Probar el pull desde el clúster (opcional) -Verifique rápidamente que el nodo puede descargar su imagen con el secret: +Verifique rápidamente que el nodo puede extraer su imagen con el secreto: ```bash kubectl run pull-check --rm -it --image=//app-web:1.0.0 \ @@ -167,53 +169,54 @@ kubectl run pull-check --rm -it --image=//app-web:1.0.0 \ -n --command -- sh -c 'echo OK' ``` -Para una promoción a producción, prefiera usar un digest: +Para una promoción a producción, utilice preferentemente un digest: ```yaml image: //app-web@sha256: ``` -## Cuentas robot y permisos +## Cuentas de robot y permisos -- Projects > `` > Robot Accounts > New Robot -- Scopes: limitar a las acciones necesarias (`pull` para runtime, `push` para CI) +- Proyectos > `` > Cuentas de robot > Nuevo robot +- Ámbitos: limitar a las acciones necesarias (`pull` para runtime, `push` para CI) - Expiración: definir una duración y un proceso de rotación -- Almacenar el token como secret (Kubernetes/CI) +- Almacenar el token en secreto (Kubernetes/CI) -:::caution[Mínimo privilegio] -No use cuentas personales para sus pipelines. Prefiera un robot por proyecto, o incluso por entorno. +:::caution[Principio de menor privilegio +] +No utilice cuentas personales para sus pipelines. Prefiera un robot por proyecto, e incluso por entorno. ::: -## Análisis de vulnerabilidades +## Escaneos de vulnerabilidades -- Activar "Scan on push" a nivel de proyecto -- Activar bajo demanda desde la UI o la API +- Activar « Scan on push » a nivel de proyecto +- Ejecutar bajo demanda desde la UI o la API - Configurar políticas: bloquear el pull si la severidad >= `High` (según la gobernanza) -Puede exportar los informes (JSON) o mostrar los CVE y las capas afectadas. +Puede exportar los informes (JSON) o visualizar las CVE y las capas afectadas. ## Retención e inmutabilidad -- Retención: conservar, por ejemplo, los últimos `N` tags que coincidan con un patrón (ej.: `release-*`) -- Inmutabilidad: evitar la sobreescritura de tags existentes -- Garbage Collection: planificada por la administración de Harbor (elimina blobs huérfanos) +- Retención: conservar, por ejemplo, las `N` últimas etiquetas que coincidan con un patrón (ej: `release-*`) +- Inmutabilidad: impedir la reescritura de etiquetas existentes +- Garbage Collection: planificada por la administración de Harbor (elimina los blobs huérfanos) Estos mecanismos reducen el costo de almacenamiento y refuerzan la trazabilidad. -## Charts de Helm (OCI) +## Charts Helm (OCI) -Helm v3.8+ soporta OCI de forma nativa. +Helm v3.8+ admite OCI de forma nativa. ```bash -# Conexión +# Connexion helm registry login \ --username '' \ --password '' -# Empaquetar el chart +# Packaging du chart helm package charts/myapp -# Subir el chart (push) +# Push du chart helm push myapp-0.1.0.tgz oci:////charts # Pull / Install @@ -226,13 +229,13 @@ helm install myapp oci:////charts/myapp --version 0.1.0 -n < Con `cosign`: ```bash -# Login (si es necesario para obtener la clave pública en Harbor) +# Login (si nécessaire pour fetch public key dans Harbor) cosign login -# Firmar una imagen (clave local o KMS) +# Signer une image (clé locale ou KMS) cosign sign //app-web:1.0.0 -# Verificar la firma +# Vérifier la signature cosign verify //app-web:1.0.0 ``` @@ -240,7 +243,7 @@ cosign verify //app-web:1.0.0 En versiones antiguas de cosign, puede ser necesario exportar COSIGN_EXPERIMENTAL=1. ::: -Harbor puede mostrar las attestations (firmas, SBOM) y hacer cumplir las políticas de firma. +Harbor puede mostrar las atestaciones (signatures, SBOM) y hacer cumplir las políticas de firma. ## Integración CI/CD @@ -265,7 +268,7 @@ build: - docker push ${HARBOR_URL}/${HARBOR_PROJECT}/app-web:${CI_COMMIT_SHORT_SHA} ``` -### Ejemplo de GitHub Actions +### Ejemplo GitHub Actions ```yaml name: Build and Push @@ -294,24 +297,23 @@ jobs: ``` ## Solución de problemas - - `denied: requested access to the resource is denied` - - Verificar los derechos de la cuenta robot sobre el proyecto y/o el nombre del repositorio + - Verificar los permisos de la cuenta robot en el proyecto y/o el nombre del repositorio - `name unknown` / `manifest unknown` - - Proyecto inexistente, repositorio mal escrito, tag inexistente + - Proyecto inexistente, repositorio mal escrito, etiqueta inexistente - `x509: certificate signed by unknown authority` - - Actualizar el almacén de certificados del runner (ca-certificates), verificar la ausencia de un proxy TLS interceptor; añadir la CA del proxy si es necesario y/o sincronizar el reloj del sistema -- 401/403 al hacer pull en Kubernetes - - El secret `imagePullSecrets` está ausente o las credenciales han expirado + - Actualizar el almacén de certificados del runner (ca-certificates), verificar la ausencia de un proxy TLS interceptante; agregar la CA del proxy si es necesario y/o sincronizar la hora del sistema +- 401/403 lors du pull dans Kubernetes + - Falta el secreto `imagePullSecrets` o las credenciales han expirado - `413 Request Entity Too Large` - - El tamaño de la imagen es demasiado grande respecto a la configuración del Ingress/Registry; optimice la imagen o ajuste la configuración (a través del soporte de Cloud Temple) + - Tamaño de imagen demasiado grande en relación con la configuración del Ingress/Registry; optimizar la imagen o ajustar la configuración (vía soporte Cloud Temple) ## Buenas prácticas - Proyectos privados por defecto, separación dev/preprod/prod -- Cuentas robot dedicadas, rotación regular de tokens -- Inmutabilidad de tags y promoción por digest -- Política de análisis: umbral de severidad y remediación documentada +- Cuentas de robot dedicadas, rotación regular de tokens +- Inmutabilidad de las etiquetas y promoción por digest +- Política de escaneo: umbral de severidad y remediación documentada - Retención estricta, eliminación programada de artefactos obsoletos -- Registro/auditoría: exportar y conservar los logs de acceso/actividad -- Integración de SBOM y firmas para la cadena de suministro de software +- Registro/Auditoría: exportar y conservar los logs de acceso/actividad +- Integración de SBOM y firmas para la cadena de suministro \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingkasten.md b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingkasten.md index bb2ea29b..5e4c63de 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingkasten.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingkasten.md @@ -1,5 +1,5 @@ --- -title: Hacer copias de seguridad de sus aplicaciones con Veeam Kasten +title: Realizar copias de seguridad de sus aplicaciones con Veeam Kasten --- import k10dashboard from '@site/docs/managed_kubernetes/tutorials/images/k10dashboard.png' @@ -8,107 +8,110 @@ import k10infrabackups from '@site/docs/managed_kubernetes/tutorials/images/k10i ## Introducción -Veeam Kasten K10 es una solución de copia de seguridad y restauración diseñada específicamente para entornos Kubernetes. En el servicio Managed Kubernetes de Cloud Temple, Kasten está integrado para permitirle proteger sus aplicaciones, restaurar datos cuando sea necesario y garantizar la continuidad de su actividad. +Veeam Kasten K10 es una solución de copia de seguridad y restauración diseñada específicamente para entornos Kubernetes. En el producto Managed Kubernetes de Cloud Temple, Kasten está integrado para permitirte proteger tus aplicaciones, restaurar datos cuando sea necesario y garantizar la continuidad de tus operaciones. -Este tutorial le guiará a través de los pasos básicos para realizar copias de seguridad y restaurar una aplicación usando Kasten. +Este tutorial te guiará a través de los pasos básicos para realizar copias de seguridad y restaurar una aplicación mediante Kasten. -## Requisitos previos +## Prerrequisitos -Antes de comenzar, asegúrese de disponer de los siguientes elementos: +Antes de comenzar, asegúrese de contar con lo siguiente: -- Un clúster de Managed Kubernetes activo. +- Un clúster de Kubernetes administrado activo. - El identificador de su clúster (por ejemplo, `ctodev`). -- Una aplicación desplegada en su clúster que desee respaldar. +- Una aplicación implementada en su clúster que desea respaldar. -## 1. Acceder al panel de control de Kasten +## 1. Acceder al panel de control Kasten -El panel de control de Kasten es accesible a través de una URL segura, construida a partir del identificador de su clúster. +El panel de control Kasten es accesible a través de una URL segura, construida a partir del identificador de su clúster. 1. **Construya la URL de acceso**: - La URL se basa en la siguiente plantilla: `https://k10.external-secured..mk.ms-cloud-temple.com/k10/` - Reemplace `` por el identificador de su clúster. Por ejemplo, si su identificador es `ctodev`, la URL será: `https://k10.external-secured.ctodev.mk.ms-cloud-temple.com/k10/`. + La URL se basa en el siguiente modelo: `https://k10.external-secured..mk.ms-cloud-temple.com/k10/` + Reemplace `` por el identificador de su clúster. Por ejemplo, si su identificador es `ctodev`, la URL será: `https://k10.external-secured.ctodev.mk.ms-cloud-temple.com/k10/`. 2. **Acceda a la URL** en su navegador. :::info Nota de seguridad - El acceso a esta URL está restringido a las direcciones IP públicas que usted ha declarado. Si no puede conectarse, asegúrese de que su dirección IP esté autorizada contactando con el soporte de Cloud Temple. + El acceso a esta URL está restringido a las direcciones IP públicas que ha declarado. Si no puede iniciar sesión, asegúrese de que su dirección IP esté autorizada contactando al soporte de Cloud Temple. ::: -:::tip[Guía de inicio rápido integrada] -La consola de Kasten incluye una guía de inicio rápido interactiva en su página de inicio. No dude en seguirla para una primera toma de contacto directamente desde la interfaz. +:::tip[Guide de démarrage rapide intégré +] +La consola Kasten incluye una guía de inicio rápido interactiva en su página de inicio. No dude en seguirla para una primera toma de contacto directamente desde la interfaz. ::: -## 2. Comprender el almacenamiento de copias de seguridad +## 2. Comprender el almacenamiento de las copias de seguridad -Por defecto, Kasten está preconfigurado para usar el servicio de almacenamiento de objetos (S3) de Cloud Temple para almacenar sus copias de seguridad de forma segura y duradera. +De forma predeterminada, Kasten está preconfigurado para utilizar el servicio de almacenamiento de objetos (S3) de Cloud Temple para almacenar sus copias de seguridad de manera segura y duradera. -No necesita realizar ninguna configuración. La ubicación de almacenamiento ya está definida en el panel de control de Kasten, en **Settings > Locations**. Esta configuración garantiza que sus datos se almacenen en una infraestructura soberana. +No tiene ninguna configuración que realizar. La ubicación de almacenamiento ya está definida en el panel de control de Kasten, en **Configuración > Ubicaciones**. Esta configuración garantiza que sus datos se almacenen en una infraestructura soberana. -:::info[Modelo de costos] -El servicio Veeam Kasten está incluido en la oferta Managed Kubernetes. El almacenamiento de copias de seguridad en nuestro S3 soberano se factura por uso. Consulte nuestra tarifa para más detalles. +:::info[Modelo de costos +] +El servicio Veeam Kasten está incluido en el producto Managed Kubernetes. El almacenamiento de las copias de seguridad en nuestro S3 soberano se factura según el uso. Consulte nuestra tabla de precios para más detalles. ::: ## 3. Crear una política de copia de seguridad -Una política de copia de seguridad (`Policy`) es un conjunto de reglas que define cuándo y cómo respaldar sus aplicaciones. +Una política de copia de seguridad (`Policy`) es un conjunto de reglas que definen cuándo y cómo realizar copias de seguridad de sus aplicaciones. -:::warning[Política de copia de seguridad existente] -Una política de copia de seguridad llamada `infra-backups` ya está configurada en su instancia de Kasten. Esta política garantiza la copia de seguridad de los componentes esenciales entregados con el clúster. +:::warning[Política de copia de seguridad existente +] +Ya hay una política de copia de seguridad llamada `infra-backups` configurada en su instancia de Kasten. Esta política garantiza la copia de seguridad de los componentes esenciales proporcionados con el clúster. **No modifique ni elimine esta política.** -Debe crear sus propias políticas para respaldar las aplicaciones que despliegue. +Debe crear sus propias políticas para realizar copias de seguridad de las aplicaciones que despliegue. ::: -1. En el panel de control de Kasten, vaya a la sección **Policies** y haga clic en **Create New Policy**. +1. En el panel de control de Kasten, acceda a la sección **Policies** y haga clic en **Create New Policy**. -2. **Asigne un nombre a su política**: Proporcione un nombre descriptivo, por ejemplo `backup-my-app-daily`. +2. **Nombre de su política** : Asigne un nombre descriptivo, por ejemplo `backup-my-app-daily`. -3. **Defina la frecuencia (Action)**: - - **Action**: `Snapshot`. - - **Frequency**: Elija la frecuencia que más le convenga (por ejemplo, `Daily` a las `02:00`). +3. **Defina la frecuencia (Action)** : + - **Action**: `Snapshot` (instantánea). + - **Frequency**: Elija la frecuencia que prefiera (por ejemplo, `Daily` a las `02:00`). -4. **Seleccione los recursos a respaldar**: - - **Select resources by**: Puede seleccionar aplicaciones por nombre (`Application Name`), por namespace (`Namespace`), o por labels. - - Para respaldar todas las aplicaciones de un namespace, elija `Namespace` y seleccione el namespace deseado. +4. **Seleccione los recursos para realizar la copia de seguridad** : + - **Select resources by**: Puede seleccionar aplicaciones por nombre (`Application Name`), por namespace (`Namespace`) o por etiquetas. + - Para realizar copias de seguridad de todas las aplicaciones de un namespace, seleccione `Namespace` y elija el namespace deseado. 5. **Haga clic en `Create Policy`** para guardar. -La política se ejecutará automáticamente en la frecuencia definida. También puede iniciar una ejecución manual haciendo clic en el botón "Play" (▶️) junto a la política. +La política se ejecutará automáticamente a la frecuencia definida. También puede iniciar una ejecución manual haciendo clic en el botón "Play" (▶️) junto a la política. ## 4. Restaurar una aplicación -Kasten facilita la restauración de una aplicación a su estado anterior desde un punto de restauración. +Kasten facilita la restauración de una aplicación a su estado anterior a partir de un punto de restauración. -1. En el panel de control, vaya a la sección **Applications**. Verá la lista de sus aplicaciones y su estado de conformidad con respecto a las políticas de copia de seguridad. +1. En el panel de control, vaya a la sección **Aplicaciones**. Allí verá la lista de sus aplicaciones y su estado de conformidad con las políticas de copia de seguridad. 2. **Seleccione la aplicación** que desea restaurar. -3. **Elija un punto de restauración**: - La página de la aplicación muestra una lista de los puntos de restauración disponibles. Elija el que desea usar y haga clic en **Restore**. +3. **Elija un punto de restauración** : + La página de la aplicación muestra una lista de los puntos de restauración disponibles. Elija el que desea utilizar y haga clic en **Restaurar**. -4. **Configure la restauración**: +4. **Configure la restauración** : - Puede elegir restaurar en un nuevo namespace o reemplazar la aplicación existente. Para este tutorial, reemplazaremos la aplicación existente. - - Haga clic en **Restore** para iniciar el proceso. + - Haga clic en **Restaurar** para iniciar el proceso. -Kasten restaurará ahora la aplicación al estado capturado en el snapshot. Puede seguir el progreso en el panel de control. +Kasten ahora restaurará la aplicación al estado capturado en el snapshot. Puede seguir el progreso en el panel de control. ## 5. Seguridad de las copias de seguridad -La protección de sus datos de copia de seguridad es una prioridad. La integración de Kasten en la oferta Managed Kubernetes cumple con los más altos estándares de seguridad. +La protección de sus datos de copia de seguridad es una prioridad. La integración de Kasten en el producto Managed Kubernetes cumple con los más altos estándares de seguridad. -- **Cifrado**: De conformidad con los requisitos SecNumCloud, todas sus copias de seguridad están cifradas. Los datos se cifran en tránsito hacia el almacenamiento S3 con el protocolo **TLS 1.3** y en reposo en los buckets de almacenamiento con el algoritmo **AES-256**. +- **Cifrado** : De conformidad con los requisitos SecNumCloud, todas sus copias de seguridad están cifradas. Los datos se cifran en tránsito hacia el almacenamiento S3 mediante el protocolo **TLS 1.3** y en reposo en los buckets de almacenamiento con el algoritmo **AES-256**. -- **Gestión de permisos**: El acceso a la interfaz de Kasten y sus funcionalidades está controlado por un sistema de permisos basado en el RBAC de Kubernetes. Solo los usuarios autorizados pueden crear, modificar o ejecutar políticas de copia de seguridad y restauración, garantizando así una gobernanza estricta de sus operaciones de copia de seguridad. +- **Gestión de permisos** : El acceso a la interfaz de Kasten y a sus funcionalidades está controlado por un sistema de permisos basado en el RBAC de Kubernetes. Solo los usuarios autorizados pueden crear, modificar o ejecutar políticas de copia de seguridad y restauración, garantizando así una gobernanza estricta de sus operaciones de copia de seguridad. ## Conclusión -Ha aprendido a usar Veeam Kasten para realizar operaciones básicas de copia de seguridad y restauración en su clúster de Managed Kubernetes. Kasten ofrece muchas funcionalidades avanzadas, como la migración de aplicaciones entre clústeres y políticas de retención granulares, que puede explorar para reforzar su estrategia de protección de datos. +Ha aprendido a utilizar Veeam Kasten para realizar operaciones básicas de copia de seguridad y restauración en su clúster de Kubernetes administrado. Kasten ofrece numerosas funciones avanzadas, como la migración de aplicaciones entre clústeres y políticas de retención granulares, que puede explorar para fortalecer su estrategia de protección de datos. -Para más información, consulte la [documentación oficial de Kasten K10](https://docs.kasten.io/latest/). +Para obtener más información, consulte la [documentación oficial de Kasten K10](https://docs.kasten.io/latest/). \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingopencost.md b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingopencost.md index 98d78f73..30960035 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingopencost.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingopencost.md @@ -9,61 +9,61 @@ import opencostmcp3 from '@site/docs/managed_kubernetes/tutorials/images/opencos ## Objetivos -Este tutorial le presenta **OpenCost**, la herramienta de monitorización y optimización de costos integrada en su clúster **Managed Kubernetes**. Al final de esta guía, usted será capaz de: +Este tutorial le presenta **OpenCost**, la herramienta de monitoreo y optimización de costos integrada en su clúster **Managed Kubernetes**. Al finalizar esta guía, podrá: - **Acceder** a la interfaz de OpenCost. - **Comprender** la estructura de la interfaz y las vistas disponibles. -- **Analizar** la distribución de costos de sus aplicaciones e infraestructura. +- **Analizar** el desglose de costos de sus aplicaciones y de su infraestructura. ## ¿Qué es OpenCost? -OpenCost es una solución de código abierto, estándar de la CNCF (Cloud Native Computing Foundation), que proporciona visibilidad en tiempo real sobre los costos de sus entornos Kubernetes. Le ayuda a comprender con precisión qué consume recursos en su clúster y cómo se traduce en términos de costos. +OpenCost es una solución de código abierto, estándar de la CNCF (Cloud Native Computing Foundation), que proporciona visibilidad en tiempo real sobre los costos de sus entornos Kubernetes. Le ayuda a comprender exactamente qué consume recursos en su clúster y cómo se traduce en términos de costos. -En la oferta Managed Kubernetes, OpenCost está preinstalado y configurado para darle una visión clara de sus gastos. Está directamente parametrizado con los costos reales de la infraestructura de Cloud Temple. +En el producto Managed Kubernetes, OpenCost está preinstalado y configurado para ofrecerle una visión clara de sus gastos. Está configurado directamente con los costos reales de la infraestructura Cloud Temple. ## Acceder a la interfaz de OpenCost -La interfaz de OpenCost está expuesta en una URL segura, específica de su clúster. Para acceder a ella, use la siguiente URL reemplazando `identificador` por el identificador de su clúster (por ejemplo, `ctodev`): +La interfaz de OpenCost está expuesta en una URL segura, específica de su clúster. Para acceder, utilice la siguiente URL reemplazando `identifiant` por el de su clúster (por ejemplo, `ctodev`) : -`https://opencost.external-secured.identificador.mk.ms-cloud-temple.com` +`https://opencost.external-secured.identifiant.mk.ms-cloud-temple.com` :::info -El acceso a esta URL está restringido a las direcciones IP que ha declarado al soporte de Cloud Temple. Si no puede acceder, contacte con el soporte para verificar las reglas del firewall. +El acceso a esta URL está restringido a las direcciones IP que haya declarado al soporte de Cloud Temple. Si no puede acceder a ella, contacte al soporte para verificar las reglas del firewall. ::: -OpenCost UI +Interfaz de OpenCost -## Explorar la distribución de costos (Allocations) +## Explorar la asignación de costos (Allocations) La vista principal y más detallada de OpenCost es el panel de control **Allocations**. Aquí es donde puede visualizar el consumo de sus recursos en tiempo real. -Esta vista le permite desglosar los costos por conceptos nativos de Kubernetes. El menú desplegable "Aggregate by" es la principal herramienta para su análisis; le permite agrupar los costos por: +Esta vista le permite desglosar los costos por conceptos nativos de Kubernetes. El menú desplegable "Aggregate by" es la herramienta principal para su análisis; le permite agrupar los costos por: -- **Namespace**: Para obtener una vista por entorno o por equipo. -- **Deployment**, **StatefulSet**, etc.: Para analizar el costo de una aplicación específica. -- **Controller**: Para una vista más técnica. +- **Namespace** : Para tener una vista por entorno o por equipo. +- **Deployment**, **StatefulSet**, etc. : Para analizar el costo de una aplicación específica. +- **Controller** : Para una vista más técnica. -### Agregación por Labels +### Agregación por etiquetas -Para un análisis financiero aún más detallado, OpenCost puede agregar los costos basándose en **labels de Kubernetes**. No hay una opción "Label" directa en el menú, pero OpenCost ingiere sus labels y le permite crear agregaciones personalizadas. Para ello, es esencial una estrategia de etiquetado coherente. Por ejemplo, usando labels como `team: backend` o `product: api-gateway`, podrá analizar los costos que corresponden precisamente a su organización. -Para este tipo de análisis, debe usar la integración de IA de OpenCost. +Para un análisis financiero aún más detallado, OpenCost puede agregar los costos basándose en las **etiquetas de Kubernetes**. No hay una opción "Etiqueta" directa en el menú, pero OpenCost ingiere sus etiquetas y le permite crear agregaciones personalizadas. Para ello, una estrategia de etiquetado coherente es esencial. Por ejemplo, al utilizar etiquetas como `team: backend` o `product: api-gateway`, podrá analizar los costos que corresponden precisamente a su organización. +Para este tipo de análisis, debe utilizar la integración de IA de OpenCost. -## Dashboard de Grafana +## Dashboard Grafana -También hay un dashboard de Grafana disponible para visualizar los datos de OpenCost. Este dashboard ofrece una vista alternativa y complementaria a la interfaz de OpenCost, y conserva el historial completo de las métricas de costos, lo que le permite analizar tendencias a largo plazo. +Un dashboard de Grafana también está disponible para visualizar los datos de OpenCost. Este dashboard ofrece una vista alternativa y complementaria a la interfaz de OpenCost, y conserva el historial completo de las métricas de costos, permitiéndole analizar las tendencias a largo plazo. OpenCost Grafana Dashboard -## Uso Avanzado: Integración con IA (Servidor MCP) +## Uso Avanzado: Integración con una IA (Servidor MCP) -Para usuarios avanzados, OpenCost puede ser consultado directamente desde el asistente conversacional Cline (u otros) gracias al sistema de **servidores MCP (Multi-purpose Co-processor)**. Esto le permite hacer scripts de consultas y obtener datos de costos directamente en sus conversaciones. +Para usuarios avanzados, OpenCost puede ser consultado directamente desde el asistente conversacional Cline (o cualquier otro) gracias al sistema de **servidores MCP (Co-procesador de propósito múltiple)**. Esto te permite crear scripts de consultas y obtener datos de costo directamente en tus conversaciones. -### 1. Configuración del MCP de OpenCost en Cline +### 1. Configuración del MCP OpenCost en Cline -Para conectar Cline a su instancia de OpenCost, debe añadir la siguiente configuración a su archivo `cline_mcp_settings.json`. Este archivo se encuentra generalmente en el directorio de configuración de Cline. +Para conectar Cline a su instancia de OpenCost, debe agregar la siguiente configuración a su archivo `cline_mcp_settings.json`. Este archivo se encuentra generalmente en el directorio de configuración de Cline. -Recomendamos crear un servidor MCP llamado "opencost-xxxxx" donde xxxxx es el nombre de su clúster de Kubernetes gestionado. -La URL del servidor MCP sigue este formato: `https://opencost-mcp.external-secured.identificador.mk.ms-cloud-temple.com` +Recomendamos crear un servidor MCP "opencost-xxxxx" donde xxxxx es el nombre de su clúster de Kubernetes administrado. +La URL del servidor MCP es de tipo `https://opencost-mcp.external-secured.identifiant.mk.ms-cloud-temple.com` Por ejemplo, para el clúster "bestie": ```json @@ -82,49 +82,50 @@ Por ejemplo, para el clúster "bestie": } ``` -Para generar el valor de `` a partir de sus credenciales, use uno de los siguientes comandos: +Para generar el valor `` a partir de sus credenciales, utilice uno de los siguientes comandos: **Para Linux/macOS:** ```bash -echo -n 'finopsadm:SU_CONTRASEÑA' | base64 +echo -n 'finopsadm:VOTRE_MOT_DE_PASSE' | base64 ``` **Para Windows (PowerShell):** ```powershell -$credentials = [System.Text.Encoding]::UTF8.GetBytes("finopsadm:SU_CONTRASEÑA") +$credentials = [System.Text.Encoding]::UTF8.GetBytes("finopsadm:VOTRE_MOT_DE_PASSE") [System.Convert]::ToBase64String($credentials) ``` -Una vez guardado este archivo, Cline cargará automáticamente el MCP `opencost-xxxxx` al iniciarse. +Una vez guardado este archivo, Cline cargará automáticamente el MCP `opencost-xxxxx` al inicio. ### 2. Consultar OpenCost con el MCP -:::tip[Requisitos previos] -Para interactuar con el MCP en lenguaje natural, la IA subyacente debe tener acceso a modelos de lenguaje (LLMs), ya sea localmente (LMStudio, etc.), o a través de una conexión a servicios públicos como GPT-5 o Gemini, o utilizando nuestra oferta soberana **[LLM-as-a-Service](pathname:///llmaas/llmaas)**. +:::tip[Requisitos +] +Para interactuar con el MCP en lenguaje natural, la IA subyacente debe tener acceso a modelos de lenguaje (LLMs), ya sea localmente (LMStudio, etc.), ya sea a través de una conexión a servicios públicos como GPT-5 o Gemini, ya sea utilizando nuestro producto **[LLM-as-a-Service](pathname:///llmaas/llmaas)** soberano. ::: -Tras la configuración, puede usar herramientas LLM para realizar consultas en lenguaje natural sobre este servidor MCP. +Una vez configurado, puedes usar las herramientas LLM para realizar consultas en lenguaje natural a este servidor MCP. #### Ejemplo -"Usa el MCP 'opencost-bestie' y dime qué porcentaje de los costos del clúster no están asignados a recursos" -Obtendrá esto: -Respuesta IA opencost +"usa el MCP "opencost-bestie", y dime qué porcentaje de los costos del clúster no está asignado a recursos" +Obtendrás esto: +respuesta IA opencost #### Ejemplo 2 -"Usa el MCP 'opencost-bestie' y lista los costos asociados a los volúmenes persistentes del día de ayer" +"utiliza el MCP "opencost-bestie", y muéstrame los costos asociados a los volúmenes persistentes del día de ayer" -Respuesta IA opencost 2 +respuesta IA opencost 2 #### Ejemplo 3 -"Usa el MCP opencost-bestie y dime qué porcentaje de los costos del clúster están asignados a la aplicación con el label 'nginx'. (filtro de la forma filter: 'label:app:frontend')" +"utiliza el MCP opencost-bestie, y dime qué porcentaje de los costos del cluster asignados a la aplicación con la etiqueta "nginx" . (filtro de la forma filter: "label:app:frontend" )" -Respuesta IA opencost 3 +respuesta IA opencost 3 ## Conclusión -OpenCost le proporciona herramientas potentes para un análisis detallado y en tiempo real de los costos de su clúster de Kubernetes. Usando principalmente la vista **Allocations** y combinándola con una buena estrategia de etiquetado, puede obtener una visión clara de sus gastos, alineada tanto con sus despliegues técnicos como con su organización interna. El uso de LLMs y del servidor MCP de OpenCost permite ir más lejos en la explotación de los datos. +OpenCost le proporciona herramientas potentes para un análisis fino y en tiempo real de los costos de su clúster de Kubernetes. Al utilizar principalmente la vista **Asignaciones** y combinarla con una buena estrategia de etiquetado, puede obtener una visión clara de sus gastos, alineada tanto con sus despliegues técnicos como con su organización interna. El uso de LLM y del servidor MCP de OpenCost permite ir más allá en la explotación de los datos. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_mariadb/concepts.md b/i18n/es/docusaurus-plugin-content-docs/current/managed_mariadb/concepts.md index 02992eba..a1740d7c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/managed_mariadb/concepts.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/managed_mariadb/concepts.md @@ -5,24 +5,24 @@ sidebar_position: 1 # Conceptos Clave de MariaDB Gestionado -Esta sección presenta los conceptos fundamentales de nuestro servicio **MariaDB Gestionado**. Comprender estos principios le ayudará a sacar el máximo partido de su base de datos gestionada, alineando sus capacidades con sus necesidades aplicativas y requisitos de seguridad. +Esta sección presenta los conceptos fundamentales de nuestro servicio **MariaDB Gestionado**. Comprender estos principios le ayudará a sacar el máximo provecho de su base de datos gestionada, alineando sus capacidades con sus requisitos de la aplicación y sus requisitos de seguridad. -## Soberanía y Conformidad SecNumCloud +## Soberanía y Cumplimiento SecNumCloud -En el núcleo de nuestra oferta se encuentra la **soberanía digital**. El servicio MariaDB Gestionado está completamente alojado en la infraestructura Cloud Temple, calificada **SecNumCloud 3.2** por la ANSSI. +En el corazón de nuestro producto se encuentra la **soberanía digital**. El servicio MariaDB Gestionado está alojado íntegramente en la infraestructura Cloud Temple, cualificada **SecNumCloud 3.2** por la ANSSI. -- **Alojamiento 100% en Francia**: Sus datos permanecen en territorio nacional, protegidos de las leyes extraterritoriales. -- **Conformidad nativa**: La solución está diseñada para cumplir con los requisitos regulatorios más estrictos (RGPD, HDS, LPM, NIS2, PCI-DSS). -- **Open Source y Reversibilidad**: Al basarnos en estándares abiertos como MariaDB Community Server y Galera, garantizamos la ausencia de dependencia tecnológica (*vendor lock-in*) y una portabilidad total de sus datos. +- **Alojamiento 100% en Francia**: Sus datos permanecen en el territorio nacional, a salvo de las leyes extraterritoriales. +- **Cumplimiento nativo**: La solución está diseñada para cumplir con los requisitos regulatorios más estrictos (RGPD, HDS, LPM, NIS2, PCI-DSS). +- **Código Abierto y Reversibilidad**: Al basarnos en estándares abiertos como MariaDB Community Server y Galera, garantizamos la ausencia de dependencia tecnológica (*vendor lock-in*) y una portabilidad total de sus datos. -## Arquitectura de Alta Disponibilidad: Galera Cluster + MaxScale +## Arquitectura de Alta Disponibilidad : Galera Cluster + MaxScale -Para los entornos distribuidos, nuestro servicio se basa en **Galera Cluster** para ofrecer alta disponibilidad sin pérdida de datos. +Para entornos distribuidos, nuestro producto se basa en **Galera Cluster** para ofrecer alta disponibilidad sin pérdida de datos. -- **Replicación Síncrona**: A diferencia de la replicación asíncrona tradicional, cada transacción se valida en todos los nodos del cluster *antes* de ser confirmada. Esto garantiza un **Recovery Point Objective (RPO) de cero**: ningún dato validado puede perderse en caso de fallo. -- **Distribución Multi-AZ**: El cluster está distribuido en tres Zonas de Disponibilidad (AZ) distintas. El fallo de un centro de datos completo no provoca ninguna interrupción del servicio ni pérdida de datos. -- **Failover Automático**: En caso de incidente en un nodo, el tráfico se redirige automáticamente hacia los nodos sanos, asegurando un **Recovery Time Objective (RTO) mínimo**. -- **Proxy MaxScale**: MaxScale es un proxy, enrutador y balanceador de carga avanzado para MariaDB. Gestiona el failover automático en la replicación, equilibra las solicitudes (escrituras hacia el primary, lecturas hacia las replicas mediante ReadWriteSplit) y ofrece filtros para caché, auditoría (QLAfilter) o seguridad (RegexFilter). +- **Replicación Síncrona** : A diferencia de la replicación asíncrona tradicional, cada transacción se valida en todos los nodos del clúster *antes* de ser confirmada. Esto garantiza un **Objetivo de Punto de Recuperación (RPO) de cero** : ningún dato validado puede perderse en caso de falla. +- **Distribución Multi-AZ** : El clúster se distribuye en tres Zonas de Disponibilidad (AZ) distintas. La caída de un centro de datos completo no provoca ninguna interrupción del servicio ni pérdida de datos. +- **Conmutación por Error Automática** : En caso de incidente en un nodo, el tráfico se redirige automáticamente hacia los nodos sanos, asegurando un **Objetivo de Tiempo de Recuperación (RTO) mínimo**. +- **Proxy MaxScale** : MaxScale es un proxy, enrutador y balanceador de carga avanzado para MariaDB. Gestiona la conmutación por error automática en replicación, equilibra las consultas (writes vers primary, reads vers replicas via ReadWriteSplit) y ofrece filtros para caché, auditoría (QLAfilter) o seguridad (RegexFilter). ## Modelos de Despliegue @@ -30,51 +30,51 @@ Ofrecemos dos modelos para adaptarse a la criticidad de sus cargas de trabajo. ### 1. StandAlone -Este modelo despliega una instancia única del motor MariaDB. +Este modelo despliega una única instancia del motor MariaDB. -- **Caso de uso**: Este modelo de despliegue es ideal para aplicaciones simples, como CMS, que utilizan un único endpoint para conectarse a las bases de datos. -- **Resiliencia**: Aunque se trata de una instancia única, el almacenamiento subyacente está replicado en 3 AZ, lo que permite un reinicio automático en otra AZ en caso de fallo de hardware. -- **SLA**: 99,9 % (fuera de los períodos de mantenimiento). +- **Caso de uso** : Este modelo de despliegue es ideal para aplicaciones simples, como CMS, que utilizan un único endpoint para conectarse a las bases de datos. +- **Resiliencia** : Aunque se trata de una única instancia, el almacenamiento subyacente está replicado en 3 AZ, lo que permite un reinicio automático en otra AZ en caso de fallo de hardware. +- **SLA** : 99.9% (fuera de los períodos de mantenimiento). -### 2. Distributed +### 2. Distribuido Este modelo despliega un **cluster Galera de 3 instancias** del motor MariaDB, complementado por un proxy **MaxScale**. -- **Caso de uso**: Este modelo de despliegue es ideal para aplicaciones con accesos distribuidos, como aplicaciones de datos o de inteligencia de negocio, que se benefician de accesos de solo lectura sin impacto en la ingesta de datos. -- **Componentes**: - - **3 Nodos MariaDB**: Un nodo primario de lectura-escritura (RW) y dos nodos secundarios de solo lectura (RO). - - **Proxy MaxScale**: Un enrutador inteligente que distribuye las solicitudes. Envía las escrituras al nodo primario y distribuye las lecturas entre todos los nodos (`ReadWriteSplit`), optimizando así el rendimiento. -- **SLA**: 99,9 % (fuera de los períodos de mantenimiento). +- **Caso de uso** : Este modelo de despliegue es ideal para aplicaciones con accesos distribuidos, como aplicaciones de datos o de inteligencia empresarial, que se benefician de accesos de solo lectura sin afectar la ingesta de datos. +- **Componentes** : + - **3 Nodos MariaDB** : Un nodo primario de lectura-escritura (RW) y dos nodos secundarios de solo lectura (RO). + - **Proxy MaxScale** : Un enrutador inteligente que distribuye las consultas. Envía las escrituras al nodo primario y reparte las lecturas entre todos los nodos (`ReadWriteSplit`), optimizando así el rendimiento. +- **SLA** : 99.9% (fuera de los períodos de mantenimiento). -> **Nota Importante**: No es posible cambiar el modelo de despliegue de un cluster existente (por ejemplo, pasar de *StandAlone* a *Distributed*). Esta operación requiere la creación de un nuevo cluster en el modelo deseado, mediante una restauración. +> **Nota Importante** : No es posible modificar el modelo de despliegue de un cluster existente (por ejemplo, pasar de *StandAlone* a *Distributed*). Esta operación requiere la creación de un nuevo cluster en el modelo deseado, mediante una restauración. -## Copia de Seguridad y Restauración (PITR) +## Copia de seguridad y restauración (PITR) -La protección de sus datos está garantizada por una doble estrategia de copias de seguridad. +La protección de sus datos se garantiza mediante una doble estrategia de copia de seguridad. -1. **Copia de Seguridad Física y Point-in-Time Recovery**: - - Realizamos copias de seguridad físicas diarias completas (`mariabackup`) (sin interrupción del servicio). - - Con la versión **distributed**, los registros de transacciones (*binary logs*) se archivan de forma continua. Esta combinación permite una restauración PiTR hasta el momento justo antes de un incidente. +1. **Copia de seguridad física y Point-in-Time Recovery** : + - Realizamos copias de seguridad físicas completas diarias (`mariabackup`) (sans interruption de service). + - Con la versión **distribuida**, los registros de transacciones (*binary logs*) se archivan continuamente. Esta combinación permite una recuperación PITR hasta el momento justo anterior a un incidente. -2. **Copia de Seguridad Lógica (`mysqldump`)**: +2. **Copia de seguridad lógica (`mysqldump`)** : - También se realizan exportaciones lógicas de las bases de datos. - Ofrecen una granularidad fina para restaurar o exportar una base de datos individual. -Todas las copias de seguridad están cifradas en reposo y almacenadas en nuestro Object Storage S3, que también está calificado SecNumCloud. +Todas las copias de seguridad están cifradas en reposo y almacenadas en nuestro S3 Object Storage, certificado SecNumCloud. -## Seguridad en Múltiples Niveles +## Seguridad a Múltiples Niveles La seguridad está integrada en cada capa del servicio. -- **Aislamiento de Red**: Las instancias de base de datos **nunca están expuestas en Internet**. El acceso se realiza exclusivamente a través de la red privada del cliente. -- **Cifrado de extremo a extremo**: - - **En tránsito**: Todas las conexiones (cliente a base de datos y entre los nodos del cluster) están cifradas con TLS 1.3. - - **En reposo**: Los datos en disco (tablespaces InnoDB) y las copias de seguridad están cifrados con AES-256. -- **Gestión de Accesos**: La autenticación está protegida (plugins `ed25519` o `sha256_password`), y los permisos se gestionan según el principio de mínimo privilegio. +- **Aislamiento de Red** : Las instancias de base de datos **nunca están expuestas a Internet**. El acceso se realiza exclusivamente a través de la red privada del cliente. +- **Cifrado de extremo a extremo** : + - **En tránsito** : Todas las conexiones (cliente a base de datos y entre los nodos del clúster) están cifradas con TLS 1.3. + - **En reposo** : Los datos en disco (tablespaces InnoDB) y las copias de seguridad están cifradas con AES-256. +- **Gestión de Accesos** : La autenticación es segura (plugins `ed25519` o `sha256_password`), y los permisos se gestionan según el principio de mínimo privilegio. -## Servicio Gestionado ("Zero Ops") +## Servicio Gestionado ("Zéro Ops") -El objetivo de MariaDB Gestionado es liberarle de la complejidad operativa. Nuestros equipos se encargan de: +El objetivo de MariaDB Gestionado es liberarlos de la complejidad operativa. Nuestros equipos se encargan de: - El aprovisionamiento y la configuración inicial. - La gestión completa del ciclo de vida: actualizaciones menores, aplicación de parches de seguridad. @@ -85,33 +85,31 @@ Esto permite a sus equipos concentrarse en el desarrollo de aplicaciones y en la ## Política de versiones y ciclo de vida -La fundación MariaDB publica versiones con soporte a largo plazo (LTS), lo que garantiza estabilidad y previsibilidad. Nuestro servicio se basa en estas versiones para asegurar la perdurabilidad de su infraestructura. +La Fundación MariaDB publica versiones con soporte a largo plazo (LTS), lo que garantiza estabilidad y previsibilidad. Nuestro servicio se basa en estas versiones para asegurar la longevidad de su infraestructura. -| Versión | Tipo | Soportada hasta | +| Versión | Tipo | Soportado hasta | | :--- | :--- | :--- | -| **MariaDB 11.4** | LTS | Mayo 2029 | -| **MariaDB 11.8** | LTS | Junio 2028 | +| **MariaDB 11.4** | LTS | Mayo de 2029 | +| **MariaDB 11.8** | LTS | Junio de 2028 | -- **Actualizaciones menores**: Los parches de seguridad y correcciones de errores son aplicados por nuestros equipos mediante *rolling update* (nodo a nodo) para no causar ninguna interrupción del servicio. -- **Actualizaciones mayores**: Las actualizaciones de versión mayores se planifican en colaboración con usted para adaptarse a su calendario. -- **Fin de soporte**: Le notificaremos al menos 180 días antes del fin de soporte de una versión LTS para planificar la migración a la siguiente versión. +- **Actualizaciones menores** : Los parches de seguridad y las correcciones de errores se aplican por nuestros equipos mediante *rolling update* (nodo por nodo) para no causar ninguna interrupción del servicio. +- **Actualizaciones mayores** : Las actualizaciones de versión mayores se planifican en colaboración con usted para alinearse con su calendario. +- **Fin del soporte** : Le notificamos al menos 180 días antes de la finalización del soporte de una versión LTS para planificar la migración a la siguiente versión. ## Tamaños de instancias -Las instancias ***StandAlone*** y ***Distributed*** están disponibles en tamaños predefinidos: - -| Tamaño | vCPU/nodo | RAM/nodo | Max Conn | Working Set Max | DB Total Max | -| :-- | :-- | :-- | :-- | :-- | :-- | -| **Micro** | 1 | **2.00 Gi** | **40** | **1-2 GiB** | **2-8 GiB** | -| **Small** | 1 | **4.00 Gi** | **80** | **2-5 GiB** | **8-16 GiB** | -| **Medium** | 2 | **4.00 Gi** | **80** | **2-5 GiB** | **8-16 GiB** | -| **Med-Large**| 2 | **8.00 Gi** | **150** | **4-10 GiB** | **16-32 GiB** | -| **Large** | 4 | **8.00 Gi** | **150** | **4-10 GiB** | **16-32 GiB** | -| **X-Large** | 4 | **16.00 Gi** | **250** | **8-20 GiB** | **32-64 GiB** | -| **2X-Large**| 8 | **16.00 Gi** | **250** | **8-20 GiB** | **32-64 GiB** | -| **3X-Large**| 8 | **32.00 Gi** | **500** | **16-40 GiB** | **64-128 GiB** | -| **4X-Large**| 16 | **32.00 Gi** | **500** | **32-80 GiB** | **128-256 GiB** | -| **5X-Large**| 16 | **64.00 Gi** | **500** | **32-80 GiB** | **128-256 GiB** | -| **6X-Large**| 32 | **128.00 Gi**| **500** | **64-160 GiB** | **256-512 GiB** | - -> **Nota**: El almacenamiento se aprovisiona de forma independiente y puede aumentarse en caliente (de 2 Gi a 512 Gi) (pero no reducirse, salvo recreando una nueva instancia). +Las instancias ***StandAlone*** et ***Distributed*** están disponibles con tamaños predefinidos: + +| Tamaño | vCPU | Memoria | innodb_buffer_pool_size | innodb_buffer_pool_instances | max_allowed_packet | table_open_cache | maxconn | +| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | +| **XS** | 1000m | 4096Mi | 2458M | 2 | 256M | 800 | 80 | +| **S** | 1000m | 8192Mi | 4915M | 4 | 512M | 1600 | 150 | +| **M** | 2000m | 8192Mi | 4915M | 4 | 512M | 1600 | 150 | +| **L** | 2000m | 16384Mi | 9830M | 8 | 1G | 3200 | 250 | +| **XL** | 4000m | 16384Mi | 9830M | 8 | 1G | 3200 | 250 | +| **XXL** | 4000m | 32768Mi | 19660M | 16 | 1G | 6400 | 500 | +| **3XL** | 8000m | 32768Mi | 19660M | 16 | 1G | 6400 | 500 | +| **4XL** | 8000m | 65536Mi | 39320M | 16 | 1G | 10000 | 500 | + + +> **Nota** : El almacenamiento se aprovisiona por separado y puede ampliarse en caliente (de 2Gi a 128Gi) (pero no reducirse, excepto recreando una nueva instancia.). \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_mariadb/images/Distributed.png b/i18n/es/docusaurus-plugin-content-docs/current/managed_mariadb/images/Distributed.png deleted file mode 100644 index ee4a1e353a2658a16bc1f5124435c901c6cb9349..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72032 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

VwShLNe#3Wqi1Ep5M@G#07mwr^kgWb7IrbRcTu zYXWQ}DeVG?GKetx^`)%nqa!0Nq4{u~Bn2Zt47I$Zgq^Fs)iyWA!DMO7pj+qlnik*i z$39H0&Xm^fupY^x*j;P!Omy#++Dv_tXV=~yp7aJ|z4s!in`h5MK97NpBFB~9)BAy! zjzZnx^v}wuPIA8%qdR0Vz*_*6BC;v>SA)H}bjI-}lNlRBZ+1k+M5ko^&V8lRej=ppG^cj7>pZ z1$;RLbxnqanYjAMY6Si0l$)o8?!L_q#HOo%{{-g-n(MN&89l*b#NtFv;HeC&;`|tS zMDla7{FiYW#fP^aZem80+BV&e^Nb_?vVH8j_#=~1@GMaAION#q#@dw^Xrt$|RM5sW z5)(Tp`0B~LI4(c*6&}*yw@6z3n?dj#|{%!Wem-eZ6Dl6N<7luJ>=lSGG;(zr`%7u zaV(6#)1zf)EYa?GdLC)f#+$8RVIJhPf$l1zkMg~@VYbLy0^=t8CJO>=hde?UuRfI> zu;SAmYj{C`u)ZXgzPc4@s}^EB*S;7MhT9CVQB&U+|98E~ZtiX62H zL(Qe4u0_AYKcF6XWZ9y@Ts_P^mcLUA!7!AZyJ34AN&~gp#%!8OHL3udc)-Jg_r5nS!BnG?mViT&A>;-8%yZW(e(l(yOiEUGY%`cS2-rMM6q!A1K+w_kbKM8 z@x0Q56_DE#nVRtfQLRS3SCds=^ol`({1peXwsv>D&A>DW*Uf%M}Zmf`E^;w-&Zs)xaC59Cb&G8GB^rr_$4f9|;iB4fu`!RkXd*w`eh zD#qIkd)n7I-)jNeWMxxc}wR*K~w%1&}k{U7U_H<)+ zW)*bh(4aIdqIK}^fqH)7`gtXEWy$k_U#JdOW_lL4hoa=5a~p?~k#ll48FC~&zwL+{ zo%=a!r8Bcr`fg0vt@g6Hw%lX#=Fq)!UT%Fh)$h5!oZnTz z?NysvG8jn0M+7T0nQMUGpW0k!tHGVmw@5GTPT|kUk<*eXe{x7P&I;_d?`x^<75TqNF zkOnE~kdz_atJjN4_@g% zEc&0!El|aCzu9QlJ(a<2du>GR3P{2;wuV_XqA`uuK4(ap;~_e}Ra4%=w%eKU0O%1F6}#+OLok$F>^%j&5xU2Jn~6`?hUW5ZZR}C7f~bwgmN1G|5lyG5;DA^ zgSOLMZ7F37*=N4WX&0|Far`8If7aC^s`6e75D=Pk@~Aofy^|kGJ?f%ULgn=BwSs}YL_%;z2J{NE!W}vowmTZ6@dCtI}5`JX$ zO73S2-BD_*XqTLfe_DG-5VW@T{-Z7i;El{Q?;PtsW#9UG_S4_fwC}o4t>k7|>AN$f z$+Ckf^6NJX*HB#Nls!A4Z`CY(-=zCc!1LWF{D(JDtGU~V$sfgawq#`ArrT;k@dg8O z+|p^Nw7!T^EOn@Y9Gh;`9+JL?Byl18h$Dgi?&F@weMfNkybTKZ>t`+WhKVP1 z2ZJ`fvLm)JlizgfMM4}dN`n8`Oq4*(?>z_9;96lWRH-oci-u6ph}HE+wh(q$!T**y zzuhmafui2KsEw;D`{Q`Lh7bsU{i`v+R(~@%4PUCb4fb79Xmz)0w358!hjA~I38Ssi z>n$9@XsGY5i#mPl;?Fz>W3{iCX(i?rSW0$D3A;4poAH?bMZ}{bg=2gPc=6+TAZRzq}y$-8Kp2 znrH?!DCw=_gY3p4Vw{+sRJS0z`sZo3?NYQqWd_nt4;{N}H$YRlhk}GUFJ7*=1)|on zcjyRcpAa2Rw+l0^W___8td}`tS2*(KgxK`jWj@#OOn**|6XO zw7;qY!cO<$<6pm1$?jg38+s68fF7s zVVH+e4Noq$7dW!-&SgHj-)fE7+8}|(f_bwsMFs@@Th&~CDg-tk|EVfKkVYRnULh!6L^58UT>dF7G`=Raq}lJHEJOb^+{ zn9?8;f+Q{zPJ>FJUb>IBeJ6RnzfM0sURD4~sOEQT>as`p`O1^(=~TWXiBnXU=G=Z$&x$ONV=a2EmB zTpu;<)nt>va-O(o`wPNLh3@|U&3rx*WLl)2?2pT!RxC4h zm<-PUyzU3-zNUNy8roTlf3e;Gx4*@kNr%zV{c)LIkHOF1=Uz}$XsZaz92Y*Ir}E9g ztZs{6gWMdB)^}^S6YyCYEqIu+gslIDZ(Ew1=Y)&A18VALCOzK@hj)xmBwVP%Qtx-h znwBc|D?%+EP-S6NfH@;t5x_vemTj_cgNx=@tLODIcn1FwK~=zJC(B2UzH#@PFE$zr#~!y(sCA+iV1Emr zQze}~-p4+-?e9tR&opS7_uiWiIgnuO@rJR$Z1A4~BOl*yGtQR5C*_-hGB%|Es$OlT zh|K4Q!RY@?A8J!9v1s1{t^q%rJrmc02L{Y0%U1&uu{*P}F&}d28(uP&A~>jy4Q&Rt zq>B7H#F~2f_RXZeEf$JP0Mt+V9>gyhM}}?W^V`hw#-MkwPEo102$}A)vb>+^2P@@` z4RxZv!heOoZ+2K@f@>;A&^e&E;d2E?d@57csP=gpvc@3z^L2ZPBR?Xi*?ki_c5 z%d7KnNc~YGp^_ePi9}oO>c=HpX$(4Tb0+qIB_+90BuF8f?JV7{%}vK&v_Oq`Uf^dy13utI)G_!@Q8=62a+mqGi5Yho%{PO43)t;G53xD>urIrKOA{^zD`!a#o5hE%oZZa1hL7Z~nYWxm4*B(wgU*Lhiltxl6*g8+G? zGAJ1!yEM9^`P*OQO0+Hmn?R!jWSE^&Bnh1S8oaeOV?)fribmkI0ZxYuROp40Pa9gS$o4{3{#KFy&K-{U zs)>b@p;|yL?2%At%fsVOS+oEV%@>$0<=@`ax%Au7OSoo)i!8=|pk@{x{gkfQC!KuA zK7YMwOIY~@&=RDR-Ee))B_mX-GI_*+!Wp2q9(16^7tPvwGSUmgj!3%(yA(`l{;QLX zYrsTXrX^ue)rlDTxnxYE7vs(snB0CZYe*+#eX0T4sjBLFimkbshjwdxX8d6aq-9#< z{@T#(zo}zIR_VYekJho_-bta@Z_wV*XOKh>*rf!0XO#^W+GFZU&PC%pSqS=b41^;L zm7N9tzs+k6Uh@MhGHa_b7lKTLGY_899c4ppc%cj}LXP3{fnU(8UC}<5RJOgL=s>u~ z=ebV*6WC_JNqzJLC&|-(vv8s^$J5dD@+8BBd%$g;=NHe_I?$+37dJ66ECtwCKAY#s zO5%jo@p!=OmyOCWS_W9**CKNkHo<&0*7e#z3g@p5!Dylb^LRd~1Iyb$qv9t?jrgy3XAw#q@ znF^Q-yX&3^4xqj9NzS)v47);?w<^R#Tl^9k2q-#Ls=n|%JZPB&1r2c=qL9?hQmF%5 z0;!x+g$)IEjX9r6^lBtQe*#v^cGe*Taios5kkbAryga4)I5X+l0eOWc|AOBgp4SFT zh6fKXn<*sD>{5DsU1d__FOT|Vppfvd`Ij@IsQm)5L_6Icuc@_re}56gUXS&J*>3_YNqZcE}vg`pg}KOijM zEgy$v7EX{dGBU0XaHNQrjBk#Wo+d=*183(@DpT=+OckFUDIbG{J|D01u_n5OocErH zM_r-b2VUr>0nA$i2^RzCrN&L*U{rV@3k?6RK0Gbb=ZB0G+ocf8DDKLe%2-Pe2UraZ zTue#y2<3CQD!5oE>1n2+e2<_#CqPokkcREH}Q z^HW&Q;}J{G4hQ^lHq2p6t-;UFHto6%UZug1GNDPe4Yba5oO_qHQi&)o&|h;5EhS+W2DS>^AA3y zg5RFeHP`$n^=~FxfJk?J(A3=^Pe>Bs_2y)2LIe9~ylPn~iCVj5CWvgW746_c6%GQ% za2j3gUp-IRL;XHjiJjOiV$0$1$ayJiV{fMu?pJL!-?j1-&@16^2^qQ$3$F7}U}E=A z-< z^bedm2rFC=o0*z3t}e_s1YgP8t|fT;+5Pc8=@Y#Zm3GRIw$urECnwyJAXiTxhi1)( zRA8TOkXx4I5Gqq(L{&TqqURB%g@JM-^4nk-Fy|ae#(kYIu~|yJRQvvjMm}sv_9gQt z1%EQ-!R=>eN9mT4oaCS9*~#DSvy<2Pu$p;glstUp4qh>2^D*yEKdH><7%fs$pbI8i zmxTE$^stcC;-}=r>oHn9Vp1Nwe-HHA$w$Yxyh_d#Sdi1rg7$qjhL^J>72IFQ^meL3 z!b%Z)a+I41L8sAj3u~tsNu6I|p3Id_Cf9e0sh3{y$nH~vc0ei0JPi2CgO{Y1Xce;& z`MHM>HFs8G1lcGJZaXILzuI#-u5Le+qTsxx1bFLg+nZAD@P` z5Sb@DD8d^#`C9UN-_ol@4H+v(j-mwD8Ey!F)vDf!`gBtCq;tZuQl!-nnJ~MB0k7qP zdxsM)pyF$AWOCezWzf5A{SxXirT;vq)%QtG%Y&$3g?AgYo~avDw(M}pZLfvtg`_L- zs=#1b$fn$wZ_^dO?3O1qhph>6Ex`b({DW{Z3ETC`Ca79H2-0i_44S*@f9(;m-9~p~v$6g;<8%w- zy?uT9K&^ar!}xb&^Lrr7tz!Eyn~PQYYj2YrU1XeG;03Tjv0P}U{)6ECYYa+wGrm%h zLNa2}CiED+^!Uv}*+O!7R`}J0>-UG=2`%QT!^0i7T4T?}Q|LQlH%Rr?x)O0+v1pHv zZ}j4URig0#Q9Q9U1BujU=ZT&VAmfBv4^CA|Dp}$3*>bHq!}4?r4MwuCmLXf)(gnFu zUpU`)kC%lP$IEq-crTM(wh(sqTi=4`j~<_&6on+dbzm)jA6;%_o$!S(?S{>kTCTmq z3gl+TiyK0KzzQDk$VcamTT29_2RsrNp;Hh|-!C*S;ZKpXz8J#$-1c7{=Z}LBseOF^ z<;#m=zb@altpiU?RgNM$M`Lw>ZbO|z82me-DZVl763$mF>$G1UiOdVWk9w4Xzs5cv zp|qS3#1#ma=kvKjJ4^<53w@0Kf7?YAgufHg3OLcp+{n)wl|K$$)>;Lt3;%81(70U4 z2z$AYy6Rr}?wbPaO8mTPgGJXjMf3oW<=k}^j+;LbIVS4a-0l^#3p|l}@m_w>2FLSj zI>o(#{J6gtXOF-7ZRD5cM(VMEy-sOSr=6+{&ko)<%{F_6jyb(Ypt z><5lYA0wWNA4j(erwY%UmIPANSKB9jxUo8DYv1JYqFkQ?OPXadm&^;6D1#`x;#D@P zO92YVov_1~tWjxdFN!A}y950uhDC#URAh?)aZ)(qI+iP?3-nECrlAhLk>pD7ytm?c zEEv{vqqv3ZtPb<38-)wKj`}-C3kF4~D!q6=zi3LV$fSRdbNrmNZMZ`0^A_B7a^CXM zTl!fl>g?nn)j7zkf|o?$JKXDW$2#UX1e|zI<7>L|>hfuw>yvpoij_;{w@;@m_ufXS zWdHKisP`UhjI&fFpsZ(E@1(Jcqjrw8KgqM>pu;qe@QP^je0k6@|3HsT;RTZ+QIjgx#j|U7%!4P_9NOpv#X_zFn|mPKmeAb2*wjEI`?u zVe4pt`x)$Pcerp)^rI+KeCc%f%AoDuh)+go8`Pz#8w?%)5oGd)$fU7zpQjXftj zbb0*g_cLm5{bzq^?3pbFaT|nS9T7%w;aEZ&)E02!kr-UW1Y$)C&%NF^#dY3W^86%p z?_MLM^OwUsplAR;Uq!KJNCl3ZBD4lA|4~2EM7a3-VK(9Oz&D;BgwWD~BeEc97&v81 znFycmh8Sa1p!^*t=CZD>ztSqg$N9zC&uw}`ay69wDGs#n&lUfaNN>__iyK)Ws{uIt zM~UawhZKPfsdm?urf&yZwhxEpN5Pc@z9|6R{wYE!KMz2(ImC+g{pyXvWV>dAonGtQ z|4TI2;$BBgCjqy3$$<6$EbwoasS^&_Yo+6@Zd)fDliLezPHZJ^ggRxiHh(J^B2I7H zI^bXyTFd=L62nH}y`#!;SJDpl_IkiAk#=78$Q#-QD#syb=@R-{7~X?9y>NMd(H#XN zpFR>^&OFKWkMelRTl`yQ!$#A+2do+;o2<@v4}`N>%AJwnr}J01|4?aEUY#KApEVPQ z%kFQmmUf&2o45&>09^;7jKpF2=CV*-Q|;M}GqmqjnxT{MeRf1XkHL)`09!(xCiICr zFOlC$*AQe0z+tmd?Z{{_&T)pI+fo_fn1h^%jPv~{*F65`uJrO$aSdwYsc7_%2>;7SdV%L75i_ zGjNrP2(v?V-HZIiBY%&)ADI-}v$=G-)E@~gmAtXUp%=J_83a`e4fXtuZ34_R;DA$G zE8(?1mpzFFmvCM+R_K5d&>;b@*q+0_xR)YnYn^Q(_CaYXp=HN=|0QAaAHi?x=W%K! zFBn@7P04>q!kqLM82Y}ysXyz6M%Cqanj+0-%z3<{4Sak=`7&@mOYsL_SIv1O))cwv z;^G;>WZtqV_-FuTkYk5G*k4c8v+k|wSs=Bg$5yYSx64=fL#oJ>c}xE7SX=p}9_fQ{=J6ZFXuvpAo*9I?)x) z=xGu*{gYu)k{TBb8;g|M3ab~sa}D!aAe7scusAhE%i#B<|pLk zcWwjA^^z`L&o=uRoqoKP!W$#L{8aZogCJI1=Hll~0_nIlGu?HbQtfb}=~jveT;@|S=`=8(bV zZD4ZF124g~$m+ryQ9>RzzS@c<_pXT@9c363kl5E*c*Xb;As0hQT4`s_FeSxtX|Up4 z{&B~9a#GvgkoOv^(!CRMfM@FDLdLcsE?gP>!%q3XJI8;Ko^!iQtoSQ~c}pJ{lwg0e zW%y`3BlKg&D%!{3fwgRhk&)0KG8xv&t;)}XD{+44ny^#BQnushQT&)Hz-2T+aq!PX z-Zs<6wG?7idXH#>^(8?gzwOUEU!U|&gn7iRXaBKN7bu+_zx{ZKLl{?6Fh!1t6O0oe zd%@UpIL#EX_Ft`tY&qN@xpuRetC!EVF*x!qKzrx>tkBL|jfp4%LQB}zUzxw5oA}1R z7gH>1keJbQ!AlcE;cRZflDY{{6}**%E-*CD!`?T@EBh2J<@9*5x{*dfV*f;%BWvQI;^DZq*idi&2gwxrYuXuS zJa@3ip(MI5%7+5J@YXH72`9QHE0E<=*Fm1za|Q?`ONA%1Q0@(U>VCaKOB!Vf-IxYR zpaCA{N29pagAmy3@d!xq(y-X<*0||>gETpS%r!BPUEa! zTE`VPsAQXBE*yQ!jUJm1(7H`jBSAc;bA5OS5w>=aU*(DuJvB zEg>=Pf-1d5@eDN&lJPyRZ3zcJfm;|8-mSIxvak{eLBjoxZ4O<)nBV>O2E0^HrhA(% zX`~X#9bPKUHhPjoCm&~F?OPd;$85yC)va6|c6GKax4ybMkQYe+czZUq`%$ce#&Fv^ ze=3ibVDoXC@2i;|lU!Rk{@}jUnshDR;Qj~kh58RcSQLAH58dj|{2vS3d?__Oz61&E zT>4^7W96D5YAMQKtm8%r-LcE;lIv4K93XNV94p${Y-$yB<6((K!&ccvg#FgR8WQKK z+Ok!$=U#?h4*N@xA!PEU7BLqz4?|;}Yb21Rm3I~$oriv5LYs*tU2^vap7R>skwLne zR>tKw^3CAE`~BRI;ZI7$e%R9I#GDwFrE>(@@3PrX?N~tuQqr|uCsJfkgB0?5S`L9$ z&eg5v>={{rMq`ByBSaigygqyDBmCKcR}xO4vS*F;U@2+ykAh&%I7R$;&>E zY7d4rfE{H!4mAa)eivox%75m$2YOtxd0{^G&JdZv){DOEoALvXD{P~G-ue~W?_Bd7Grd|BQSE7=x%(hf$KN(#V)4G zU>Rwqr+44;HZ86)(V=Aj6VKo7J$|7Mu_N-L;#VXA8GPl~?d5yVN<>{kRK=G@hlk5B*H?yWYSHb3eh;6$zdvf%>@lZT zZvWzbMnreviqjUHf$%8Fo1}-`Wj%{+^O<0HF^(5u6s6vU^8xQ=*x&Hja@w~C%V%B9 z+|^_c2eXuT{=EB`d->tSNIAD#Yu=1+PTEF5454qs0l|Nv`RY}zZ?$<Ja8!5QseYKh+8TFpPlFtz=Mb23GcCK z4OZrNv~RQ9zUX~l#Ey;ed8pGdWMpN@95m39X^r^!`u2@C2kiaT2ZLMN8O(6*a4nJv z?E!-7C;HBbE0_$epuMt0-Q^}3QJyI;F3{$mk zn`7^N_VQ&(=+7R;I-TVeRw=LNW&#pSqV`YCSjg`P+ynh!3RQ_i*>OPT1-V-_jx zImd%(Qr6g`&rb~)J$>z5XdhTvQ<2HXC3eF;8u6~JtqtaB$D~xM#E>lqWeJ$Gd)}rX zi=sRvP!m#vHZ27B#MQ)MzpRE>G^}tMmogGX(B3M>4~<+K7n9c5`e?e>%()M>omWW_ zQdG7C>8h~bY6ezD*86S0=g`GL3ow}d^SVU-~#XZ_e!T+xO$qS0G_5NUs zduc!dP8SQQxRSm5lhx@``?a+KVBe=e3MEF0)q|OpEKMuriLFj~!f#B1PqKTqYPA*?Km-~7FGODD~VOQ?KrPq;)=XwRrJ-FCq)2a8M-!Wx5JBUQw{c* za2N80zjGkhJBUu-{K=58MMu@_(tr9H4*2GVYEMJBq|FB?6zdtx-W-E;3X#AvS~Npw zul2(2_>y}qDRt@RqAST=#>DbAt+ZJH?vXA~B$sP05S0IYGLRg175fl^e!nU2fbXwc z^7M7h>x-7QfISee*H763q}s(%7#DMfOD5CvVM zq2j@T&w~TrQj_!25W1AIePsIPu?yR{r>%J@3tT0Ggxiw_MxEL8&I5v!W^DI+1dxh6 zx9ExRV9|oM^p)Y(<`$kRz0)gr)`9M?upwlh)c3j*9*O7oC4fW9BW2C0#}+2yIW{v0 z*de`qXrH{_`Roz(bugc`$R6JJ&1mgO84)?Y9HH5l!{y>i}# z^@rC@3S-oZ*n(4Z3gzS7td#g2L)CN_j+5y%YIF&S7FiQ$Yk`RiDiMbpucD;DeVjqNv(mQ4W^gDU`dy$LVpO?8g z5a@b$6BpQL&RslcOEK!zcH?tm{}6fY0hZBvn+qc`%oSCgxWW9_>DP3dXOi5+F1^M^ z>R29;GzQf4FDD1jiJb36s}qE;y5Bae+yjLJ5`fS*Hq>!D8!0nwLVGH~c4nqT#O=4< z_??#o0S_0oPET9P=l&~?Eq7!+k|wf^1#!T#X*>KV}9LsbxLI50XIa3(~o5l5x-56Go_he9EUEII;Zv{B!(*V!K%frF;zl!1Gg z(p-v?)H&!a|8G8?qSt=3)1CnUEUgF#%rg|cF9S9AHKV0C&oS|?F-F+!gX28d8FjzM zSglKEd}DgNl5k?n>e>b6hnoPLSkNVPO9ElO;xY5H63K;gL0=v9z@hGJM@hoxkc*;K z8b(d3QB*yhVhNKYoaS1RdEtH==2g1lo+cZuf(9WUG)*^QEiNvO!Wabn7D_>;wIC2y z*)V3(hBZ;Z(*yYvTw=5uK|oS6qN=6+!T{Xlf2U`mf)K% z!FYa*4K$uFyfeZram|oi0QW!d$XjMZ^0@3+zYlqx5%SPVJ=1A)} zV5=d|(Oi6le08lf`^VIitZxtYd!{VeSl+v7egSOo_0>5YdmMk}WXA_HQUA?fPYla@ zlLq4c&bn?f0blTJ-hu~nkFhZvNE3}Lek_Y)@*GR7eEPfxiE<)bsOVQmkG)d6fr*ui zxR%L_$!&(;0Eic&(+)gFQUwxyARPWXJ03Cvy8AvvAg)gDWt@1>?6U`15!d&$o6dD6 zNN>k_zWDO(%Zawg3pE+5Nby%Qk1C%of8?xt>S|Tpw znm#AWCjjPY{OCMP6NFrHJlIc1qZ&)jjX2YDbNPa~yy2V`6%}uR{x-^kgM-V^R^n>U zh0cLxx*iLLMa-! zz&WnOm6wA<1)ZnQ=-2Evoy^D2Zwz1OD_^7{PUX4*ESx$oFe;(4%nt`;GvW$Cv_RN` z18;|hum?Yke$rC3(3QUMeE-WGAVA~BUXhDKSD$)`p(b|3wHB!vdPJjYGMSB^?&pX) zfXs||tC#FHR!lAhywg3}aBskn7WRPU3QGw)4$54)OkcbLxhoR(kC}>m_g>tPudtgc z&$+ulPu%W4WiF|0kVL^JcNNvj)f*54_`bJH>O)XOtn>@9`Yez@1|=1hnlU*EL%FFw z=MNf_bZ%W*V-ti^Tz0`9z)j#FzJ7Zodijv6wzaTd0GiBt^?^Srbi*RpZ%kqo9kPGm zC-&+IUG_$wP^(EhW-xPlY@$`t`HVsc_2JOK^~ZQ~>_5n;Jr`m-1DCf`#K`y6cNVhR zGIFhxora1of2xu2O-`fmwAnjGz~&D?DPi9+`U`aC$h7ES1~kd(3^0198FWcUq~Rt&ikw$OUvFnMk;3?E-GT zJgmD_W-G^EG8TY&yQ_f7<>K3Ob>a_YL0_?YZ=tJF;Ik^UcjO(s|GqV@Ms;QWU|XNQ zQJiDG-72&z_48%$2u3C6#u+!>UH{gL(*-z%w_fCIok1Cp>eR)U5S}pWPUTRtcGW}z zQq!};xpC$|W#11c#>CSOc8JitaynC^FG>bkyGK}cH8lp0M;^ui81)M_Cd=F2`C$EL zvHpSolvM$6eXNVW#P_zbGQ1j*Jb&O2bo!P9XLSA z03cN#$m>b(RJLv$Ip~Y~6$U6g67$vySFuwhyY^{uU*q?JHQymr9&|ipnOn78^&%0L zU0lQY`S*nlodEf3^==5~;SMU#$wp)N`q64wPL5#Ae5N9qwV9~5Kcy-5@VNQuYc;bN zGM4toG?IBNvH?;xRl`8EixWosDkP&ndQ9!QXKNiITbn&Lq>ObxDk;!iEKvZ`_W(Y> zA$c~Q2rec*7iWBID@z{5PUNN{oS`77T^W3G_%Hw6KPy`_iDr*c>AhSUt`iS^;U&C} znvKvqtzTU8@QF@itW!4-j$G+S;1QBhYYj~fEp?}kj{}o@dX0?{TD%b%^rfI z<>tnQHyMqui#s!)DM5%9qeAZC(O+QGF~b*L`ij^ZjRzU*%s1JdoQ5N^k@s{z<2riE#+j7n;4;Z|-j2)h4%L?-zZ`AF}FTZ`~GfcNWB@V4~nySMl)6*p)s|ilE`3E%-@Z?}-Myg|7a7gZahUdtkN9K%q(@+c5FD{<7?kK^S$sedsmy zfAg|1^1`zAwLZUf&UMzBv~Nf77ZT@Qnd1ZZPIL`?4tj@pUW}l`_tSsX%`dLfjsO{K zAlFPe1i&0sbK8W`R=B?-^1O$jy~U)$?j!+fX{qncKlP6MLJ4Vz3fRQQ$FIgje_oQU z^6oQ`>MlvB`FIjVm+-Kz>DY>fS|RgU@eH{`*+{muK=JeE-!E;-#i1A zx8kx3Tk_SfkAfl=Wfwm$rf$SOUoCVJE`?=d_ymHvd2>#Q_%hg8vX0N4q@%`{3?=9_ z?xy)cXt`8{OB(Cx^i zmfQx`*U~rXh2BwJvhkMv1ed>f{96F{7o(SJmBEX-w|pqM_k(d)0Q(fF#r)ID|DD{g zX!g)%Jk-qV9OJ%;)f9EQtY-r0W-|lET1#Z6_})_nIy%YigO5Ka3d{JLh0_N;?_Qq+ zoI6G9>|kjOKE=>+y#cSnj`~Ooz0Oj22qN%cthxT~Og1YbDDMiDWFB7d&h%J8rGSVD z^VDvBU+47hrX9uBXQO4D6*=FXw&lFjKDc}FrHpt*GrRDopoqfJspPOFN{mlrjWL+v z@j2vf?+AO4v;>sSbm@4(%8G{TKyoq%^#?DbecRT^GG_b7(~Y1%x|1`DEkOWw_eeG+ zl+xr)91DMj6mYDZdbz*Y{~HMK=(HAJ+SwJ1l$rD8{4x7$8}x_iTwuJ$VjT9}81zFD z$ffF@O@DPcnU#z&c1TY3O5r$VQA1Tw1TU@s-QGBowHcsnO4p2d&^MV9W2t_Pc$#BpYXO$#s%IuGwif})4TdpPvppq8l`;W4 z0Q>Svce-%n)F>t2nFvSPrS^7YJk%}RJw|)IIjH#E8FuwqQRiNv5|23>El6dg6;Ho=1ZF>J=}nslBdsljE@f(L1t7o5W+vwZ=7V-3rtN&fu#Zdk#@Zo z9^>-LgnUHUPpX$J5S(6WTAq=Y$Iq8B>1DVDd`o<}XQ-qEJgV+*Ov)$2N*(2R5rOQW zKdeJs9x|hfOgM!%wM{^|mWU!qKrkJq){8i7o=N|@UtH|VGQF34p9S{jVLoxJpTf|=`<7kT zkGl6#vcCzly;EejetVbcVXozl#2%T1Kx$ANlNLwk5R<7XFLvk!QNO5whzNx;Q4j&J zZ64(~*rvYc9DUYx)NTfyNkB#MM=+H#(F_GpOjUY^i*=)4pfjgGyo`mM!Z+>W=v4f% zSU*@0r`TQ|U&17#HDXR-gh%51QeQe{N^gi`T)Tp=KFYce>>gTVlU>D74pI%!x;Mq2ln zb&WyoR*5yC89!O;^p+uCziH~|WEHVC9eM`>aX4B4LHMzu!5|#;G!{5c!Ngt0IbDtZ zkYw2i?vop{WWdt@83oz)@oeK1(Uii0#29UXVDK((57)gp3u$~d$zg;{zz zRDh2Ulz+~pl{FxI>j{wiyWAw=+GziFqCP?&hyOUPwOP;Vl1*a6h6o@U5ZnLO(B<*I zAW7nGQ1N}kD(kSE+j(;MdPicT2w46N6B8|XyqCp1$I#sz>kiu**1a2#9QDaRehMTl z17V8+{E9fWSM+U7s+nJq=Kza>ms%Qo(uLDvxdVE^>Qis`L*^(-D z4q&JRZwwVfk%C6gx^)f1`6SqWDO23>&w&dwM#$Cs!gGj-zpf;P&Z<%x?o(0Ex{ZFx zVg}?lNq}kxDWV*CuO$zIpolP+Q<_|OgzzeSiXok^{aJz!SgS@OM3#o-zZ@-tbj+GH+ga3W8FYr zJYU}v=p<%R3{iW8+`Z(9w?$a`?q{~==kh@8aqB)T@v*)=$m&Zjsz{r;E zO5l`b1fcY+b__k&#b!~_4cX&B-s>jEQ=%F4;zjXL(*u>a_^UH7n-p~SOcb9=!RcUSO$%L zPmX`icR%@+TfcRY<9qD5cpETfUw3}dG9JA>2U5W=CuAq6hFH>6S)C}RWAo%|TXL5} z?`eXXGDB7G0`pFQbbjoz@K2XzmK<^6GY%P3YrKH% zNleExd&~3McZ#C77Tgo_Ecid`8Q^ON1O)V+n7lmd^NDkyG<^iNU0-)^!+xGz{>i(q z%ay>fU(RW2v_-Yi1gc(sMbl^_@-(qng~ZXYG;iaUDUi_V%FBD`ynp;soG53`W%zhU zuaQ#?!R3iErp^mbU(aXI-ueTKi{i z`xH|R2Mf=1Yn6~5{uc*%uxz!lmU7ea9#2)5(Y(||o5^UMqD)iXh^KaaiS?UXmh%)V z&ZpJB_dq5w*(QU~VV}2fC>c_H_>`DvO3Acj z>LByH@mKjwen>bK*=MPjU&?7U1U6fIT=o&IqcF43yNu$oK=bC!&|xMy4`m({SyY-l zkF5UY7wL~SD$Y_@4xR0*E3ftnY@;l_tl$g*wXwG(5w^D&gb)gSpO@qSqjj2pHT_z4MeX`1noU z=3wUUy4gSUW1VX?baVubaAmw2htYPLtEgwP#{ z4B^6FQBqRo!@4#^`1!TuMvaZ|Zj;`ltpEPqB0L9>yqkJkg+mtWhwTftVzjr}LsQ|e zw~os7llfQ+j$|mi>5kfamvbECc`)(|A?yqzur^vlj$m$c+<(|(138T`7xh&IR_l%Y z+EE~e2j8#^(t2bxdRIL7kH2_;i*WEOiu#5-!`X`4a_D|zzrzcUVR--q8Fb7rW&MRV zxJqlI5-J`W3I}co9B5rItyG%MsZwRlRZE+8+Ru%WqDp;8On>vRtD7tIkKb6B%*Xpg z+L>vu8~mQ7+6weZg(9pRXoS3aJQN;g*?_^|V@E(AZmO_57MaxKPyxatLG+tm1QY36 z9_3?f^Y{5eyS=M%u}597Q&kh{BQLXB^^H5~S&*D~l3h1+8SA1Lf;OkAB+;)0<<~`X*;$=V?p;Cw%jH*zaW;an~1;BQ4JA>K*zn z-)X0W-Q(iR4GO=bZcJs$bQI#-r;l!M+uR}#{$-dWzcm&u>6|>2h<5vJ{B7??^yIG~ z3(Qj`{8Ii5gY$YH;_{Ccp^GMO*3@<_Bl*u)yIvp~u(WTC9|`sLJdnGu*tq;K_x&|@ zyjz#G-^p?vLo+J?lnDib4S{4C!gkO%(_nM);S3_f^6eFMv<1(RsGLH5CeK0fxzhRNS>qJDJ`s1!~@*>jJ+Pg<1TLY1Erme(r0Tavv_3{g}^Klnfg^dDMg z&7F?61FQxA04K?f(!m!{kryh?s7c}KVpiorA!ezjbamlv)-zvStA6d1;j1ulU$PkJ z`^8q+n5l3(B)LnhzO1`v??JjiED$_e+K}_V7wo0{{Lspk2U|kOhyHXxbuh<%DWv9F zDs!a$9^ z=*#yg=ATI;s1~!=N8r8r4q0OpM(8JA01>9Xz7W&K`Utz%RHaGYO6ZZ#%mPU9gVCSk zaw&dhE=Cdd-u?#1w}WYvpX`4v((l9Y8NvQ07LDeAFr6kP87R=8IL~R{tv9kUE_Z(Kg~o-k(pFS3p+YvhoFgEPZ#o ze%2zSP#hxo31qYyp)sOroJZL8jg28)nvTpCTME-ZQH%;%H$W;M7ly&UrGanqrRDt&&mjepKa^56PF-)k{XVM8p5g8Qsh|kR>TXcF zx=_2mmW$0_hh_V90ZZ9)q_b*Ip~mtqtnoWD6b7bRS3K+RQ%= zI()8A!I}R4Jr8G2`|5D!;$vE;t-ioOJ59-ObWrw3PBl>mQ~&{hEMcX6&$ulv*GPly zpEw80nF*fDg)r>#Tytf$`~lM6IOvU-qLg1dJ4GMaC?cQ)L85>o zNDfL=(hP9`0YyMSqGS-sqU0a~Ly(+?C>dqQTtK2^5S5&hS z;LPdMp}M-dy6Rsw&o=W1g46t07p@HkAVPH|LbN80oxzNk;X}0Di3tC>VZOCm|Dz*~ zsito_>D*%B4g(-I9--%Yk;fdP z%Sppw{fU);vESUX@KRE`^(7DLVq#@d7icW^!I6Xh5UtP!uZi$ASg|D-Z!wV|i(FnwX4{QN~-&Zc4}0f9$+rN(FKQNT&FXB#Du zND#3gZo7IRRA4*2`aC#5IbScdgA;wO2JLxhKK{{;UmGRM>&yu>%gxb zJ(%@DuR=+kU6Sn#=_{W6Kyw~PlbWQUI!Cmyn7 zq3;XNE9kz^PVc`LbmZAl5f~2cdF{0bjCGqBrq4vVO`Hd&1T8m772K*l@r8>;A3nmZ z*0XU;VbYq*DP!=PWBRc5XmT~hQ1+Ebxw^9eXmQsqrDmd%MJl%CY-qw}f2I3EbspD+ zbxICwtlyVllww+)hUoH8*{+KdR^_kbBy<~-l}*QhI--^_$|%J*w^qxgXc(MAz43ZX zaM6wOBT`r$v-wgNswa#~nxL;g@^VjuwYQVu>ftRtr3(T_g6neJnwloQO^KYqODX_& zChV5=~0yx=tr2E6yRlF!gRxuK&Z z;?YTj@kc62K;tyWd%Rimavpux$X1%Kz=DBzme{KgH&fn^E`6>{`P@@9Zq_~iX3hMo z$>l`J)#gU%?V||F7uRpiCU*F=XRXL;mepvX_0G@QX$OM_4LtPN$L!GdjQ@rF=Mvj zI-Yt1Kkm+0(rcBCx5ZCynKq<8b*NbUSVaWu8}}VMdhX{ks-;#a!CQ;HFqU1pW|P>y z)UNca$&R1Y;nCMU#BKC!Wd7B%N~^L1$($U~JGJLvp*91TF0fk7caX_Y@`jP+*GyXH zZ|>$%_QJ`=XI|)JH!_-y*LkU{t22wUq)vDsQgZYS*qeC*a)LW$W zHrExr;AIcCSo8D5Rt6*0u1?XF81^;PotncZLY%If=jcm%&j&vL@MshtXVTWvLMkP% z`>4ex3A453u>WkF>8ijgrIgu2PQlmcGCUXz<~8@>$r#1hM=lSm3j>2Gv0zw_@c@K{ zB;Uxuxq-|N$*(OykUJr`+cdsA8^|ACGC*6Bq`Nx!uG5tK|lb(oCKK(JWf@$VS zPPV-u{hDi8=4RaNrLZeM9A;@(r7JBT?og4%sjrD~3Uw7#A8uJ^XM7u}fe~_&B5wY& z;Zt#3mY!e_E56@x5u4*DtpMU8rE8M_;^-q*{EBk0+in@qT-UM1jUUs~AG%1d<)Zgq zVav-IOVBwiD^H()9xrADVv2$iQJt+Bnuva^Gv=mRYfZVmFcRc)z<{o5=*<$uPz(wN zq_PGur}yd(T9y|%=&q{&OcOh|P&E8qtIcfObMtU3rBt--5D!*Q0A>sV@$O|g?I!Zs zJCO+A=sp?D)*BP+FX><^?UhZLz7Zwk&fZa8%Nnpnh{ROq4}A;G&>Ibt8q0Yez4iT| zCyjlMmVU}3wvWrVw~0ZAGtDCv zRE$(;E33$JQ6UbBb1%tOenE}dF@Ip`Vi&1)b~$du&t=nyVy*mBAhAdBOq+%$a#{K0aMfXk%F)P*O(!uSRpvA$!sTXNtos2U= zU481v0DI=qvVD^!?h--`6zmmnAY$vK*x#XamlfT6U*5|N+^HQ6rF&8tE~85-o9m-u zo?~S9u4}~XAfGyCXjf$0^?r!)j#yIXs_;{}ME8Q-w3^9kyH5rCQPN>>Gb;nRP~@8Jj(nP^g^aKfWm3d2 zcGgpk^GkwY;J0t=6i+ui&cJve{`OOOTz%VTWj;=((kK1d#OC$9JZ(kWD#ZdRdG))P zo|O@^{xWy^SoViu#qw7W8^e8Dv9Y3Cu`+DJQAJIsi;x-13&!l&<}UEjq;DI}OU;axCN}8+P@Gbdr3lw~ z)6RsdG4tcyv%vC6#25B}$+>&+gUq20-I%PIsPkPK`I?u(tyDh(T{6mR;%>LO=JKF^ z1ig&2k02iPD<0Xb`KS!?;ylDL@DHE&e@>D_@B9RN*KNSGeZMV4m$KV8gQ0x+M`zMCy#c?JA@oQdPFu*-ML#061 zte2-kNTk4$CVC2PcMF}KbBm>Okp=b|SUSfM5h^0~@9ez0g&)k>p>vXH=L8s(usri` zHe;KIR{9p6P$HDB%+yJc-=J++p`4LiP$EJSxs2^F|X0WZu(#1r^q3Se z`phhSR4?Ko*{s~pC|=a<%JgPC8IESQ+5%C1=f?J8tbs4CqxkK4rzq~k+z4_hHB9=J zTw8m)y;ze}KxoqHN)vLjo**AJxyTNT0ZyXQZ@z#l1dAU4xza%7G*0PnsW?u-ej80>$ZtjB1#ykg-X6a zTh8bur9LMCjhjU(lgk4f3`RsP&Q7gY#iC7|q49xoTyA-+rTp67{SUNX2PspNb#)ryeFH`a% ztL>VyFpqzetu5rNy}^3G{-w9gT5bLkrIdL}`oZd1`vcX(ArqBv!9(m;iXln^SGb%j z-=fI>!hb;mNSrE99T3PY-CHR4EG(T8LDshEqh%ZUphHT&zWlOi%CuIK08jJV#<0X( z3gL}I4oIrdE^}8V(`G(4F89B)U)6HRPoF=ly31sM#q+0my6H@P|5ai8WwK$}C#g>;a8$n?06Hy)Keu>HUDl;>lUs_hwYe2J+TT8I6{mDBGKaaNxaLQd6`BUb;gMLE00OymZqx3Y40ZrUH=`)& zmm8Lvni`+V1^~?JszuY(JVyRm_)ow^!F04^juwh@fEi9V33DXT+9~FH;KBBQt_o|? z5}%a{e3G{%Ej4AC44_k{QY;~{=>cl+>@uQ&)Nte?F^iK_>xhNXI+IPwwBntL;cj^0 z5jkSzU7s{<_NeBZ$)#(+C4B3E-SO9V)uSg~KIem|C>bX%Y7(sT2yKUpMhWVa8@(iW zZ#O9XT$qNQ23O`r3r{pKFlgkCLZh)S&K`iJ&?hb57tj~G;W0zkeiGMoWxBjCD z#ATLzoi_7|cACO_{F$A?1tSb-iK{N|;r+NgG6Y9JJz2AbPk7~E%cN{JpBeZf01Kx8TyFf{Ny^o=%N@6EIEA-K-PFy$c)Z^Rz> zJ)>$0b&cZxnIuU1HA!4goqZi8X!W(DIfWA8_G0+Ksp)Pwm*(Z!T`*qQYaHZ76W8=q zd|OmKr__YTlnSsH^#lPsG`>=FD>@#{6AP!Chm{`UuK8DOF*y}M4T1u6&Ww=bs zQ7)Cre|aLo3qO<=I;~q77GeiXVk-@ zkX6GWp=wV*ky~A)7aRVu7JDdeTfj&uT-6vX{qDfZ#+c`M8+nnZm}iY9a{ZD@wG#LO9&&;%TmJLoD$m|4$nsJgr%uBm%HKRJ@ zF!rZk+7@bZRD9z5<}D_s228zQXhLXY^cq#}5s^|PS;M598ENAC_cwFG_FkbEv+L`n ziY!5Tyvg!9fJlHSa+(MQ>K?M76trl_9W0I2ldbGFkd$jTwIIj$-Wg3)Y=z{awHS*O z?3|8Le7o*wDziJK8K#ulPRZ<>K?aNeXeeadoL+af3E6Cft?;FBaLwN%N~nWe+iSx& zJca6j3)orLzayxFLxDy*g*RIopB8-V3w3aj0oNP!XB+5tS4DTI_!} zvS&mM#}U|AR$*c7(OcZQ+h-VlkhGvY`(-` zpk-$>#_UY=q1RM|cEWI}JLRp`<0fPqIf!3?oX5{p2^tw|Kq!Y&ih7};-+XrCWPWn8 zgolW!!9lbufQ>0z5Bm%~Jqvps3SpW5ebp8QcUrw}aQuWBICW+Q7n5vko`F%mwzd`r zM&pizX02~)Q*bf#J+u!^+l|Go#w*CU@NlyIXMJHlC?@{E%DVM+s!HAjQDGIw*jY++ zcUiM1Fx-O)K>+e!2V10fkSA}HXb-3ciop6ZRe;6N=h_q49sU(79bOy^r*$D)_^TQ{ zEFZMKzypI(J(Pbass4doEdzTbsCmbhB_h#{m=y%qAKrFc?3a%pE4QCpq!R~s^KmX{ zU0`2#0MJbn2qtbCL)EONy1FS@5va}0R77)>FqnkV>3*(z z0a`0$s47(~FQMVGm@=p1Kf2ydMX5A#ao1zg&`7u`Jh(xzvK-ZV@2_0c1~W8`*ZTi> zRT%L_0e1p^w2DD@mXe4kU}DD7tqK_hzd{ypc(sUjicUKI`}gnf)z1K#0E6A70d_kW z%ouEASTe|ST=Xj>`dN|p1kM=kJ96~O%q;teheBiHY(^bVaP%7Y1K*2RC=h`XZCzd0 z+IO<!(HHn{CK&fVyjqXMVr#k;^VgZ=R9*9(BQBhLTq02CPgB(URFLbH zqp80(xTfdM!r&K!V)CC>65B%ftZOOLHy>=Tu6cz)g)ynl||& zvP&u;dYP*7UV@{r%PhPDgmNEiWX>o88dMd|99{)sKZTx$s*j_N2omx|Zd(KP826#z zt?4DkIAfL?>7^i)hsGyt;rTkHi*)z3;Pg|AbSF;CDRB4p_Vx(D51q+enZ42$IO$U; zhyxX$>3h;=AY@^Kb?EMKdo_SfW(uzGB#(m*vxJ{Mk!2dZ1_ew1AFOIN$>VH_Cw+dU z^B)u)@-sRa(5%;<6Q?vzU}#`4*T0ONZ>EBVc-r=Bf4^0wW+%6)KyW2y)nvB) zLMFIyX%6EG0GEGrp~N@{TY^30gSHc60D!(VH3iNN7YiAr04V2la|20!;UvZd^5(N5 z!3FK#gkp@HXz=R;X%iZ2GZj9hUP0{d?@O^3y$HllX${t=tpvjZVY#q6l+7oUx;k2o`MHTnyD||mKglO3&%@E( zH5hmdD-CXoeSAe9LUzMUshZn8Qh&yZtXqSRub+YQ6pC@lkdKw9Zx++9gV`Q^`0!!F zn1W*CtgrviyE4Hk_DFjot407Vh0c9=_)1sXwJFnuR^Axbi>H%3DcOv8%a?y>5W7={ z5OK|*1O(Hk)kQTO`-AAx8O3Lp1y>&#T^Fq3WMg}uG%0xB>hs??A|}oy5@3S+TOS%` zK!1y*!<@UA?hBC`hSQEkEB`ZQ5T+Fo7)XpzP;d~Kd;;4AZUgNm^ct=zcrxu;PfovOze=e6IbhjOzKu4g zHfMKUwQCcl#15GP&EzT6)~TGRS>LFJu(0+I?Le9a7wc1>hsDu-7)+lP%%%v))1U8) zf|N89B2V>?;?`KgN{oc4T!ve zwR$~qT%tg{by8^=80IuZ86~{2^d$CVUvy>!>qFpubP#1c9$nU2X^VWhe=T;fjIZck zB~?wkw#<)n9ZLxxY~tS2=82T1J)$4Z9a&*ruk^5fh08wFRJBOhHI+y0=skahQw!uF zSrylk3YcJ>0uX(YCM3cw+8~S&C%HXHq316igBPi~#7m<0y$~8lv)jgJFeDh(q#0vTGluh(KAV*?s-;2A<)?n4e@UJA+X#YWn|~wUVSf#C-(@k> z+F~?~<;Sk0rumDzkFK2T>~)+O^IQ6Sy1-0a9VjmC*61>ETyWyUgzqrq`iipnk zd?HEI<2B?tygJvD-G-BWDBfP#TgS5;c^IW8Rl4JT)UoN*nbD`wB<30=-?is78zk9CbF$$&zoqr$Jz4w4e`^yJk|!Jgh!d zI_O~}3Lt>8tEzNHF9Hn(Dw5FUla%!3ukRDTR@Jn$*sL#E08Q5WVtZ?An4r%cZf@?$ z7{5z1GrVGM%fDZN!OlP-UZi)yC6%SQ&g(1_!Vcu}Bc}QWOq)6R0-u|N`fa2&4tJKn z?2lq?)2gWcy!QqQ-@K`B<4G@VM@~-O64wwrKW}O~%+Ah!g{c9^Rx(@0KjYFTf%Nn< zEZp3x{vTFGDrJLXo)wprB)A7KN_Y16_p5+YUubL|0}fEA+`S6UbP0)PttrDkZ~&Ve zrTw-A0rPhE)~A?cd~F}tuILf`t_m}T&Tc}X;RydP3LyOlqs-U4i%pYRdqCGdEvL2> zymv0_--gTWXF8sB0Ae=UitkTHTw!VWQ>X6q3MDBy62TVUcu|vG+T76g&!f8#jzpsS z`dxjPBO{ZA)#7oq7%0ApFbHUlp4zL?BR+4PH$q6>=m>6tw4 zTUyG;U|iv}N~da&k(DL4RlotDM9`@O6$yz`RYTAw5*11(+8qz{>(jz~dPn;6;kELq zcKPQM47l#`U@^pk6-{K|GJIP6Pw!M2Jiyn2P*jYh|F5Z#O8)1Yu(-QMEu^u6)^t%c z-~flp*3QUuAy|?J=R|V&*e;#}X?iQHD_rKgdK(dq>KS|PwMa-GA=N{?| zQ2efOlMfoEl#+)>&HQ>qLV}{Is%n3Z#_ia9PWeZCq|A_(6}7(ZEN(aL|2HfDeuua{ z{afCXK1{SOhqrHdYs9T~Wr8!lUDb?hXmU!*w$ob&)CmbtbzZ;!tNr6j^{(!^x3)g?K^DRh?>RV@x5GpFlWBe@1rwLPxxhn~0zi{gu33d9D$aEzXS&~x=^Y0#B zn?Q@p;I%qAn}^CM;^xUgo12?IG+b(HLjaXH?a~bq|EVsp_mikmSf1e3Y1SkY$EHv} zNZo?Ut5bQwgAH#^7{4y?LaR}o4Wyd%Z%Yc|s`)-+BB!i;xjo72xh`CZuZzL3k8*x_5GhQp=ezi94Pf8OfV43>Fs$81MxL%u$TSwzd`^L{Q>s7n2 zK>Z^bGW^3$-j^X77QT))1c+NEgGL!u)v$SaW+by_3i*k9^4=T>60)VUAIyK+a1!%} zzf(@f`iS|~Ej5r{q+XW|GH5WppBAFl@muXmHttE4PR*py4CLoa_5&;kl~Z%!>%zCW z#vpdCLAS|?i~$yIgTIV`CG}^S#S|kt@u>DT z1DX_Hk`%wl2`o+_lxhb=x{wBCm}*?y#uhmf4R;@My;YHd>NJ8xrg(M5fMqwmRHWdE z*+iY=An>(#0N$LvS{Mvz- z{0azoS`ADq$w%^95`gMEplL0TnkER zKT9*dadN?ST8DAIE_9C znH;;O_H)rSOLDgyjLClpFoM1|2u<9VU}GSB^D3B>Z^SCu;4%tdN?zRK0*k6wzZXiA zy|=~wmAEB6He}IlM^^=984L^lT zzc;*Bo2e$zT5q~c(qE~Vo3T4D!9JCrERZ*|+Y{=V!ps#?`R1Ej1BG~1hw2RP#`cgY zv!-1d|IK-g?%v-QB(jylQj>r?nK?pTs=3Ei{?6MfA`I*Llw0Tu`R#N? zq<8qDXdHe=O=D2DrvZ9!I=c_+hy!=Hc=j z@}+u?7h{twbWKDGLLS`Teji;TFN&t~QUIHb8?5<1S$%h1gRP?{m)VXmB}{2y0{G;Y z)$;W>NS~&p? zzwvhQ)eN5o^EUc+Wc-|8?uTKbTTo*l+U1|a4dw2&xtA;@Ul1#&%u^l!R!NgBdrJCT zfZ-Y=8cocsLC=z>5`G&U+*G8KKPUw4=J%8kvicu%w@07*;pr5KNJY(itxOgfFHC2d zPR>)EC&9igLCURvp4zLfr({{;%+ BDS-e0 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_mariadb/images/StandAlone.png b/i18n/es/docusaurus-plugin-content-docs/current/managed_mariadb/images/StandAlone.png deleted file mode 100644 index b45d0458aaa988c2404e508a15eeb92d3803a869..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42541 zcmdRW2UJtp*KgEu96`lV1eL0YbQwUv0D^*u1Sy8zmC&oyNVg#Z5?bg@gn)GE(p5SH zkS;BVkkEtD6awU(3+lB0_uhJIeQUk%xfYp8IQQn9U4Q$x_a#70Md2{bX&M*|c3APo zH6#r73l;|3v-aDs;FI%t{YBtEdz_I9vaq}k<{9wj7mKUPS7ES%5ZcW<`@#EzcW>xA z!(d11pr1WW4lhk%Fx)%EYgaYy87+(+NYEfwQytYD>hC${lL#Z(;_FdN{=Ip`K!P>~{#}v6_#s=uoK6+r z30x649UVmU_2k9z4ECNTfVzw%XMP~@5|LE%O*I67tY1s z(jSY?s<2+ZVA7r3Hy2YDVY^a(uWQ8DbEE8quLx=39MhKm+KY1P8Vw@)gFV;apEcx73(rXVv0Ayrxq&(?33YI<}yo-c7Q_ z+%cfc7j355C+u!mu;3Qn{>14kmE61bC~_&iZsA-6x_>@2JdlHASg%>UczcNK+g)KY zs7>_2tJ9V)6pX4AcGXUBux_udEV|goQP<|?+C2l>H-`0-Yig_eC`SVQE29lhC`^u) zfHOzfma@EDaiQ9*I5?DSxrGO;mTAu{I4mw35_zZ#s$)854}^GB8b7r)ELSkEDZWYb zL_it7Y;4R)L2EyamZ=f-lQbiJUKydvjOlXtf2|x_>}Sr6>`b>0jjdZKi@Yf<_<`Hi zm7MHFe4C2AbSIZSZDw2Bx7cv@@`$hQmow|P@d!w?;fIOH#XC)vo^5+#SDie3zB()9 zga9h6QxzXm zkCXzYt|4WtT&0HY#WbwRlH^)=20ejhF2rnpLKV($15-|<_(_F zt}au{yNMzgITy{3Bi!m*RmW(RiV$yZC7-7Zo4wwk7DJD|$x zn;@n+Yfw`;s^g=R$7*a@8LYANzUfg~p7a-IZM}2@QGyRsrfF}WWEz3ERa;@AG_>eT z=ucMi_Re+J#;|T%+!~@T*ug*BWk#P~&a*APNm*WL04EG*I^P);XpQbPq^{-1h7xM4 zJ!S4`TF;Gak!gdzw&ZuOl*z0t2P5Z}#+a`iA!lPLolJbA!x$C)U$wQn z6!f42`0~^PeHhig>vXd{hL$r|OY|k=8mfSqn6qe9rixs|0~>i)m>-8eu0BAl1B&Bu zFqo;pYb-FXl#X5Jbsx{jqpk_xN+%S5Gg!7a=@wpnoGJbR9BM`XtKonjCMt900@fV6 zT{cJYy}kOOc$C_l>ugBi!**od_Ds z7~M~yuEz`_HB%|o^#}Sr)O?5Wopxnm2r}iP=73)~Ywy@aq6nmvspu6q!)Y%gWYU_f z&FqsoLq-V^vBVWzSw&N1`3ujf`?Jon|HK?e|s=la#HF%^{2x%nIy zM!kpwgmWc*WS_4#j0-nCQ&z{BWTJ;oqiZSdsM;HzDJA3{F{JjCz4^D-HEbCr?`PNQ z?i6~?`2z3wB&%5c!7OUT)6HXhEoeZr9T_Om-Phw?e6w5KY~`a9At}--VEEMOF#PZh zF(XxX2=o(B$ib;%iDY`76bO%WmPpNwQOs9lg+9 z&ec@~o2F*uyWQwJJg_nGab`eSb)hhV!eKSB=v3Q5n_#3%pUQ$&qQClKu0`F0B#WJvCzd z1hdLqQ)GozZH9UhmVuUuVc3B$mifcPf{P3;!#h{CXG@#;bIn*^tie@UoemvjyX-AF6Y__rlgy+TQe7pu@D(9YQ%N;&JigSCkUo z&p%xsUWG(RuFA2(nmt?ah&Brk_OuM9 z!__5Mth0Hrus1<+lq}n#ciaFmwLg?S2>ZxI!wI_qBni7x^jvK(>{|f%usaC6yyu4& z`Mgludw&JIz%J5)Mfa1zhwRn=mzN`)Q;Ow&tsT3&^~5E*L$W>j_pnEcivFKF>s9j$2oS>o)hmuJkKat7T!)Q~Za<8Y344BDW>$eIyT*wOyW&lQ}Ml&d+;R zL0)@AnH-f@A|^E_$5(4?d}GdT4F_9Qkb@&kSDv;b4fGw@#$eB5ab;>w zyn)jCrrX%%PI$c*H;ci!#8etSAcba49!7+UeAf%_wPD8%xc@Z-3sOVyg{H z2g$#|LferSu*KXG1KfezrMlME&-R=NkhLOmpold^^D@Uf9>wE^s@Pzb=2imO{`?uj zy)AP08H3GxJYEcnQ%?)It=)P$u9m)Qp)BmXVjii@CMGC*D3bv(tSx9)wT&$IbbC3k z%jcKpV3~aA~C5by9+Cfo4`T<^?0+-a}3-h9!0Eyb+R7FFFVPSBaL z>6zSiUfEum;%dRWmLR9d7#RD)k%jE=jrT{gZk?vZJ?$AK_^O&eZsSZn8Hj4M_+35> zUX)p&Hv4(dQ&`S|_ZIh_=ChiveNG$m7rL!y4;PwJuRDt{r)hD^(@PbVDcyN((EXxm zyjc7|5Q9AZwV*Y{cXG6-^a%GrX4p5YZ{6)qtKVeZvn?xoPdR)Z=P!}v`Q%c@6y4hW zyZWSbw!vwE)G4tOa$l~s%WlNSpHe8G<%WIkDb@5$L;DZpZcT>;rqhXZYjevdG@2)7 zF}UjuQx;o1mZy|&WxVC&4FJY$8tv|>g=kY8(52wQ^rw&)Uxy-7=x>pA8dOXNCrB>E zFP)l+Ip=}ub<>t}IQylGziw(G+lo(UBYClBRnVRreZrZ8^o|?D!AfQdt`Bvy!L8e) zaS9`N>p*^NOv*3M*YT$cWXUoPIhyv2`Fs%@jfuC0XmII+@}p+2Tm!F6?j22OGYK%l z50|=yAND(Te_l3a(va5=*)#tFx3sn=F^t|Fp*LNq^Fr0w+3?UQzhfCydn{Gx5d<8P zTeST`+&Phf0YyXao%`Tz{H8lGhXqM?7aA8V=fq+uO;7i~(Um)RMWppEIM?TE`0IgE zegZ~{y~S(cZG$)I5wOBTe&OgAM#S$nZ1Vs3ZSV`mSvPq0L74Dk*_O&lTAbZdqkFK3 z-&u1G`J{K|?RtT?j_KM6`t{2Oip2AHw5O>7uhae(B@S!nEAm6uKODT(aBEU_NGRw< zvlDmM&Ge%{kb{2UUTL&A7MsMN)TeDIM)@#WN3OUQ`a4Z}3rba;f^e5tR!Z!ZBBdI!3%KKGz1n$|8LrrdPc+-P7ycH|7j zjA)}ytamM%N zD>6F94;By_JXrQye(Ec-BZ=tiqt<&Neb54ZfD+4TD@|VO*0Qc*dHJC3&N`whSht1# zU?DgtZ#>mHXs^T#YnGznT)h4@LGW_NX%3V}JAez(K=L#82ajuBk{7JM?4gp|TT#`< zZN-g)v1{hhaEcb(3!`TVtiE5$Gm8~vJa|HZ03>%U*&wl5-_~}pUz1+x9EuTm~+R$F0#>Z zvRz9eo1c&uGMZ|3@U)RMHm{M8Cm(JHclnIRH9I_X?&zUwEcb;qzj{WG2onkUl>dPK zGDqg}X>lTC3nN!kuV66&XV~E%85j1=4`g8Br#}+(ePbx?KKk$ab%SP# zhKr?tapHhn#RWE2cOe-2gLj1`^a#b1Rrel^e0_@;)Yi1K-wUgEoJug$N?CcYkc}%% zy44hnD-v(JKc*Vl&?EkY?g2%w&k=}reS1TBDckF zMzJnjZ+ov#n^s!UF>(m@^r{8tW!J59?!^4XwyvzW&%|4P$P7-ocYfWZ!0u*c7%Z(X zaP$Bqn;Hlm0pAI|4qon?UrqT1_W8KqF<2TSczLd?#=Qr!wO?Q}^5Dgi0W5;a0CipQ z057n({b11>Rp@e~|NhI<0?6Xguk$NtGaXq8dzyAr3qZ+^mFgXc4Gnof|Fgcn)Ab(`ti zc6FcTa%dSZ%=%1(&hYE3W6mhB`4?&u)(TS00}2SBv1fSY)Juc z4!uxY!a%oINSS1TZs`x+0PAg$gzm!%0vWU;X7Hw&{hv2AIDwdO^D<>Q1SpB9=Ab>W zgCK;Wi%V7P6P7YHx$U@RZ0&!A)n84S9DST26Xw~;$}y3=ac$NbLbC$ee&M_l#d2A* zS?xg&%+-z6IW?6Ck#+l3uM;i1n3okEn9HSL6YBazky;Hg`(Q@5Kxq3KwT0|#+Yd_u zG3vhUts+!8v)2N{;OG{gP*KK|_TQR&#$ z3An-CDtD3l4u4;9Rn=jb+U;8UuG!9Ln|KguT$e1m35jXP4BrUSBbpBes5m-D)E$q_ z{Dlgc-Ht(iru92kXhf7TE{T+DN!MkVPwLXuE1u>T!MBAm{_QJtbIBhs3@*PBw{1`> zT;J?JemrTT)aUL2tF9M*Ve~X9#f*qKv%CIL-7l68wFWR>`P+9}`_m>BN6KcV&qnwP zEuIh5z&P0}8S&7b=Gl_K>b*`ar!(^&_Ub#FS5xZ2V);%}Z z*;MZHZOSCsiP7+=C|;-Va=NSX@C%i(RGp<0Kl~3?tHyoCrf*)yp6^k2ICMzF&zm}S2dN4W_ju}^^{)s>-F)CrxI~E!u1JxdPIB1D_gtQ zY97u_djX_n&dmib7u9+=LMGDg0AG7M?EWQkLJ^)9%erA%(%UbxR4Ft^G;>-UM47Jf zwc+xj1`feS;;0*0cTdl z@Mc0QI}NUC07bk}ZuJGmlPzs(|M1ZZ?*qAyQuxO7xr@rMOK4gct5;370U*l4a)vzb zZ)GT{8i`!>C}t9na}Wp}nw4-Cfw4aUwVeux2B{=d`|2*D;)IP z#Zz~0|^OAg8s^Ym- zf}G<0)aGS*3a?pLC9P81=eRba%9)yoe;vAfY^f%$m z{7hj7f(1R|%2^P#ekO=B*}YMDk(cSb>a>oPw@;NNahFgqLJka97=D@;R5t5ofY32G zuxP8Vi{+LO$pqfIOoEy6{B0|dE7%ecqblNZi@&l_`A#ew|KYIrN)(8zf7ai+$^)8N zdP{lCUPamSzT44-Q*RwwYZPi7w#qJi@-}Vg<<}8Bct!YcqEzXUuUy4mVrPOl+&ZyN zY-@$J^KoX7_pU4<_%O{N*)|heQ%UFRAq}==m&~KVfnHPD zktZs#?m-%TnhN%N3n2|@cBQb4%Ua1grj(yL0`-tqBN$o$hl2%Ooj8c)T8X3jX>zaX z7i(G1@!S|WIqF=qa>?dd)z-9ZW^Sg4_&%74&PA)l6)E4G$inctW2fCfG*nS~qVqEv z=0K7Yvu{!mwydMiObbPuHIVo9zYS$TfWRl5O$(Fypy8uKFsN2u(_$4BKl6kuKbHOS zP;gXA8N&@bQJ|OCn$E>qq>wFHEpO1~v5sF$2DZWj{Qd4<0pjBX5Fvg!@I#LfCj6he zsM(y3F*pL`3?;MCTR;3=dQ9`emW-ib_8RML>dY~4j&oD*Yk1wKzR0eBED=mQZ$ec} zfe!iDRuifP5?m5Xs9w8SY$srNc)fZztZWbHi+BG`?NCI?2v&gCY=*V0s6 z&g84dPXJQfjTwMIc|yBGo?u?@#tSK%fD*ce%f6Al{RIbHA3^v~#G;<2oLconHuIig zEL1S;3iaQf3M~J-)BF={{_u)j^qKk{c*^}W`@aLxCe4&yZ{pLtDH={`QclN1PwaYP z)v%7wB?IpEvC<}}!gvIz2vB&G(%{BN&6Vt+%m%q~cYbwE)#qC?`WG)OnXudJdL!pl z184l?7e5arNaL#9|xiJ{~UH4HMs%Z z7s5$6C&efe$U=tcRiA&?9m%j&tDn35xbF@wQk^3t79zQq@8*$d;K0NeC zgTzT|0Io8#vN0pS?8K4ma1Nr=yI!VT@9EuSqNb%OFrcb;PP?W|O`4BK9QgdFdy~oX zJ9Q1zo6}d7{M0y|w2W)gMVa2rUq|YzTR_PKby+%-~qty+%G-M&#& z{^H_y?Y0LVSqOdD%}Hu_dIyRO8FPBv?F3}2e*^5}gQz9i(#0@21slBb)A1IY^Pp3g zYBrs_AE~bla*~l{rbc0bl$506E$%ZJzzN>|t%8J-+fnAfVS@kHi;y%~1A^?*7K7o19?r#3ix3UCHwYUB$tJ*4)@*eEj-+ z0$hd`3o;7!iEY_L5dLB37CYc=Io{K9Y`IZ-r#ZEEk~Gwd|C%hWRZ+$wP+7(ry3q&{ zJj#FQvRQ1 zYAbB{d3@;eC$c<3|Hcc#Z=|NrpL?02hIsZ*@BvDO;jp)5IUG~p*`!_%gJC$nGjZtk(C`gQ`&e&bhbm zi26^By=vvGw_tTSeykU;np&FL0$i%p)Dk+wLf=#XQA*izu-T1*Sg3AVE?W@ViA8HY ztDxWDC+yU~keSNtXf|z3lcrE9BwRIYo0&WQ=n(9#&B6kX3-j@1z zl=9O;oD_n-fdKf=U}Ss}cCUEiHYY`eE~(1=;fkfW-V=fzdr2SgyN~j^Eq5}dk;h$6 z`5|e(pPthc@~@xl)K4b}h3KxIH45&BValHWE0n?R{cbl0V|OaI@08g8$eSZ_vhwtX zs(i~5E^g5kZoGE`MfDCGF`}5n8(gkYGq)#jx~|S&9o?xcpvs}vSVHB=2$Efa&*ojU zI`>Z@AZ$UmyW6STwSU`rvcJ4a@50WFBs%p>7UVoTjX6tPf86FrZ^p$za)>v2hXBLT z|HVW92{y2Meul4q));EsX7}CSE8kE9#M8-t7c8f4|1ieu-?_4o?*ZqCAM)4#@+&8P zvbF4Hiz_ILcwBdRu*wXF(^lNrYPJAs_c(|2>17H06=ed+W_rrE{Vs_ z%!Who`k}v^qD9vLd4bJ-7-e(_cH=$(M1`N^3h!>}!CzHAEE5H}Gh6l`;V=99lezla zw*P_JCw}a$>aVDWak%B zZr1Y@q2oRVx8N#`r(_s?yuuva+18Klgo*8>_9B!^c=o?PTqXyp)p`@sEuVy6|a{k&N_nQR;tuU{PMta7>3orZJ5 zf{AsmU`Zz(?M_seND>Dkq{Cw4(TawbQN>JK4l(>tiL`@$l@rTP!HzzPx)EZ0+31ODyuglM zDV#tgMjblHhyc@vKexwiucvDklKZ%P?NWBmDGNS3VYUoe9xwNLQ~@KRAU{3?6tU-X zK6tYOs0|<(h{yXG#aSca!8acT*raz^x&etyO=JYy*#H?8A7KcwY^ zadq!`_G0=4SO03FkJ#D76}Nc%p0y7-3j&iQo8UR36~OfW3WFU}kAs*}Uj}SaOS{tx z4h8bt#nC)}qTYdj$h~3l$#86)DvldplN)d~kZaNMAp#!vKiwmSQ+2vnJo}{;zstN| z_+@38EQzT9eD$>x;uYrMn)TN@*`0XpWHX`$Eq*QM z$C?<8ja%4#Wtzg4Jso!QIJC|H%I$xJ_hoojgEH#WN}XCk?`M(H?#7f?UoOh=kXI8~ zqaB%km$5Js?4M{G07c31AIt(ory+I>M<^)%Nl(KI!J^h|Xsr$T#&^(G*poDQY=5DC=sqburb9Ssd z)^C@4fdWYwYA5^{9{Dp?{`-bInfKp&+zF7ADqzx;N20h6;2|hBTlddPHrMp*v^ogn z+yh`%>i6A-2(-1`9G-60z1tR{ZR?MTAHTnY8}skx8i@L&95OCdwB{Ha<$yZ%H#)NR z5972c1H_c%Do+2ltpA4Opcgn0spviN8pQS=IraY%P14{F{e;l}8NiaO+Dn=ggVgm~ zxJX2JqF`IQfL?R^KwR{c1%TcE#WkDwfTa(aT@7uo*-Aqh1kO6=NcFc=CB;4&w)#>h zC~0ex-pu2i6PGkpi{ym{V*`;LF8?@%Iv1KFGY{qH8LYO7+f>a?9=54v=QaoAF3VcK9~-q=)2^t~SA+9+S}}Z%=2) zwIpT)++@Rv0Ut;Po4T(RY#*bUK~vuRJ8j#VW+!vTjvn*0EA5Qhih3-mUpN(#NRR)~55 z%BXW&q;%MY7n>v7%w6<}0nz0brVa@K3i_a&`8(>Dq?*Xc-$e2GzW8J?f6aL3+KaTf zMq!>Mi2w_3c_VunvyLx5%NPHn5Kd;iYnUlaujh5^Hslt~i^aZD3zU-Yl=91S3|oxp z*xasJtQgX%i+=CkD?xpMjpU9IspyP~M2T|@qd z+})Wjo8ePJTY@hM@^{SGckP(ePr4M?pvM(x=%ShE7jpftwFOOEKa!hsJgK~m7}6sh z0S&L8hh1Stcj%g*K+t&?>sim8avk{whQZ6f&I=XZ9x#VjGm20MEvblKs)!peGd_%gZhYd+I=uO z8nK0N`=aQUCdoA#?{LZg)UEkfIlkKm=f+C?h$x{4`P|rcrud$Kun5`_Kg;a@o_PKE z=3hqy|KHx6Opm<~<|rvG3}7t8R#bHdatNc;1Lm`H#Kh113MBxQ_AWhLDeqKUBP}qo zt-LtIgZ(p)XgQ@BsKj`rmQWLJZIlC`w8Mk=QY=e$GRZgF>fZjM@3dvny~gV^gFZPB zEzQiEO=GO`m-t`sb9Af|jE*f?m;ayG&w}pi1xp?y?enX_69Dx8DDnO~Ig9^YmVqcy z*Y&$JoOFMwtgHBj(4kN&1*14S9el7#L#^VPo^th737^fc%|X9E`fF9AU^55$LpZ0p zNmaAqw}>A#hk13?P4Z>WXLuj8^4`9sxIOpvK}Y2t>PPYhjkiBr;eRcK{=fe?j}`}Y z&9d@_cCy<~7AoBNb;b48tdq{LH+&$O%@YcZXWh$TZ;osGb-!j|(>)-Ufv@6RGJ(pB z9{|VeOC1w_OK)wAZz$JqN9@L* zmYcGE$RGxRw2zH~!=({;(B}I$4-sB2<<{~=E5(I0fGM!!h^6~a5c8b#pwEEzWUY#= zRU`tHC;hfG(Nyd|q1Xs~I@K%})Wg)RVIi%zruJO1V8Y_xnDyLpmpY+Xqg(wW-maY4 z@UB5np`blgd$`p0xBp^!&uFn)ch8thfxWY5-gR0|ZzIDY@0L;lCeTO$(ea^iX;fcx zH;aPVQY+1=t(G(EP0yUl(cRMJ4#?O@3RiT?Du-K};FHK!VjY4Qcn7!CHh#Dqx!i4E zK8qW5T2-nfY6~t#*%%QxeB;G*S>v=W&?yf)5ZQXx+VqpPn;)A+78btN>yPUHEPmMZ z6bA{kUW(`0Hpj2c#m`@)R;^zfUL%3d zE+o5|G>4C??UZKu1Guq~t#0pk((9u(mBhj+rAaP9Y_qEIhZ7y0MkAauzK+^>@g)@p zQogrYh`~V2obez>t&b?SdMUnf)9sp^{i{M%d*%XFdlvokA@t1HJ&SDNU!ycyH(eFd zR*oJhyy6U6m=d`JR}F%J*9{}RdukpxN4U^6W!gR)vH^A@j;EdRj$DM8kjkFUS6YTVz zcMb8ehAmHaSPS0~rCKxL*F znZlbsGFdmbkA}@1$PatqJQmu*$7?ofZ!WUO2W-4>MJ^~rT(hOk?=Ue8BN~Rnz{&N@ z&fRM4evM$W0pcV})Cat7=*iPzk|tk0|EzP$sjYl_nT&q=+wJ97rsL=6DBEBB5EbIu`B0!M505MGA3T zy7%^?yN#n?4sXisy^#9stsYz~dMTR}S7~hTgDMjxTndJhULUu?3pKG!332&6m?X;4 zichF?eo1cmyx%`3wut`b4TjwW^~qSewq%^Xz?R<_so1%8xCpyaEbXlC3~&bU<;U07 zG<#brmFU{+92SDtA#qjp#INf(OrlQQC{W>ix_Vu@Ki+-$uvgWlm5ckO%LGYwluRx* zkyt`%+sm#eYLy#E+iH&pH8Dd*t1^M^BXA5#!-16DIX z&mzjvpQP6nk0c^OTbb6c&0PK>5?fe>bYq)@omAE$!`bVi?88^h{6F|sfLTGVHZ*JG zHrsr(jgdgGE~LTX*Ast`VkT6ogt+?lwlHgdYGBqkAvQ9WwSL}TM+{2T#47!kE#abZ zevPU@!<7>>uu zFng_by4>|beiSV|LahzW9C;ukvaM4p32}6;y{d=Fof7XpCB8JM!w#3vPtB==X>BqCUBrA;&I})xLAThF#yIbm^$s7#aPeYUZi62%DgZqyt4a&3{jfg>5GdP6A(l*5vOXGATtR#>Gp zH?B=Sn39b>PbWrlkUJ}4xGim3Aw?hNd(C{>Wrm4^&a;`Lv$Hu)YWtIE>}6D*M&8!@ zHIK@6YRNiAllL;EtkQ1St20WqUB(y8j)H!8tLjF&PcN50F>rjw_=@BJaIh20Vk48W zaQ|FYLYU0=MQrvj!(}j|5qI&9r@;xBDX%A_NauJ%fd$;cZ~5fJpb#%&2G9|bV@6!b z4rY56y}-nSf`cHOf1svtxKurO)m%C@F{>xu-Pu15kLepJXb3FtxkB>Vm`KgvP@|!Eo`aSGuHp z%A?+a<@USlfMN!tgqujCTU>OE^U>KxfijR+07pU~c9Jd$|`a1Zzr@6K5C9;C-Bt!;@K{IZHDh>Fe` zr)`?7$zGotMpA%)>s*clT{e0>GkVcU&25Mz<)1y1h)WZ}O1RFN+RH+c%>!f9G&m`t z`3X6vcD^<7Wfc@=tG#MDCStn1s+>)Q-Z`0#j}#NmOWA?b{nJpKp< zb@Ql)BY3b&Z@L#0i0NIPEIU4C1=+}_V7O5ei?i=PF5X%bFKsqac|dy+OxyY_xDLBt z&M`UoR>Me_%aFjkTnrgXQeu`fe&CGo)Tq>(O$-0~&(#ne9~+n^Yv{CEYqG!)+Fq0C zhjRTo$Fr|2t)$2&I5v$iHU*W}hA=uCC<2SJM@e576fzD{V~z2;a)jlM1HA@Nk3eFz z?ys9ZS^P;gLSBD7zO7q2@p97#Z!{b;aghwNSE*yuow2wU5F*r%0bNJOgml?~U0_x6 zBilaZ_F)lwz!Zn6a(W?g|^drcZftj-6zd$(In84EUTw|!ZP zpXwhfl?N)eM}eIL@Q3H;o>ZZy=fAzT-}kn#`0pUEDyeBm%(iQy~S)rRkm zHcgHLO{g62~>LHJ(dOmS)cwMf(@eQ36Ut#MqpxAhjMNYp@XT{{5-ln`?d5 z!k(hEb_Wjn9eba4TQhRCQM%aS=88FCgpMl^UQ-_k?|-~B9F1>8gP)pyRcHUks zMK4S|jW*cAZhkeSYYt)M#kM6Ga)?(Utv&GtCN&Hy0ivWB2NEh69+zPe5?SFPEp+4< z5XIZ=R*CY}Ri`Et@W(j(YZOKRs8lp;z2W0wr!|h`7V*VI4&zExVDaXJ&00ad*~+Dv zT5`hqv6-zD*G-qz_qln=5$h6{IJl%uDFBQO02@YON^AuLI_zDw?UB z-Dpo=ZmyA~C_9B%@-#-fjkm}^*!Vz38Y&}eKax9TxtuMbaBNfaj6Y;<9?F-Fq5(XM zyeHHYr6bgIQbfGELchb?rNFCX?%eRnu&~XQtMIQ~ZIkK0cM-$a^)7L0?ZC6G^G~^ZSQHROY6@!g-oFHUlVGI2Ir5`>Ee_` zCi-EK9o4$_Uc^i5buU>;znmxhc?VI_h@?*~bMBondU|?<`#dp(*H*IQo)9_-q$sK5 zoG#Vo0uiU3KiTaAGV}Bv&9u&=%NXY?)@JZDPVgjDxp%*ir#&TVjV(Xe4u)hbU)`I# zm8~YcBYsE)*lPz3RR>ZnOT|}%;cKe-ttUF|3V#CoL>;L5h(UEc_4C(Fkh}s309{=& zCRPgU75Yhk9bmNhmE&tm?KWpa&&!@rF*+aqTBcJ}9j-pz{DP*0CyrAgsI}JLX>e~K z*@xVeu^f)wC{cGswAyH<@eEYG;z*U$%n)B5s2&NmVN!op(Y@))siC29jz!X~IFQqn z4l-wo4W?cIix)bhg%<+oW6po6TADTuS9kIwdV7&ADCbLq<4AxA6yBou@?0c6ZcMZo zlev*X&kn{i>!Pnr$9a==DV;8iq}*$^+Ce64{<#Um4XLZ z<}@^m9B61jf?RvQk{(HIPc#BHqAV`tz@fDg?}SfG8e3o6DpOd{XlJppmei!gufJDW zJ>9P4IjJqUP%7-xaAtYHj~P57bTQ`ji?dlk*7tYhER@g2SCLd7?chBucI4Zs#1ozi zuM&mE@Rb6gRX&z?Fp_lb+^K3b;NiySZ}W{uS)}{gnfI9h^a65|Pu29`$#w~mwRCOV z)&yf~Fh?Lryr38a?mvOC!#kctpKVGQtEx~a#cDcdxn2Pgx`2{FE?Jny$4Itc6UtxY ztSB0AcncrQ_q!!p`^~?^tvjHsnr}*`CP&vTE5#u9RE>V#=^A|_9Ub%SiqKR@)6N50 zEe;CvMGF)T)c1Ta9kVzDEA@Vg0 z{Oe8LNIf@|2Ve^B;%ocK3+t(M+cLu6fyK3^#AQ}PelD>(|5L`5&RLtLA0^7i`>HWJ zYGxT12*v z^eA&l)Un+?b$Aiz9r0h_5f{9EM89_GrNJdr&)!S7AsC0@Ffzf2gmszBBq&HnP^(aZ zb~!gJRH`elbhxiLmv7??p<-iKCjf{xd5N&WNtQlhCVUNY_ra*q-=2It2F4d=_6az&_>PLUw}Q;TC-coS#bBkEw|sVep&zsI zuCfu)WTYPFnvqrhLMXachu8O>GuFieov}VAi-Axn^jAB4?CqaCD$KGj_vt=czEthE zbP9*OZF?a*swdgVBKRQb!!bUR&L>XrBj(}p7z4MES&H5K=s;VC!Zb3Y@YDEI5T=dM zDn*UV0--(G~&aT^Oy=SRsm(U}w z7W|XXX9Z6}=?T|Mob0yE;|?Bq%$)Am9lc$O@S)5~4|f#9(OD#I9SK}{O(Z)>rEjLa zsx2{##3)EEbb5Q7Z}MBMV2T>e$;5HE?efi^Bk4Z|Pjm9_zn7i)aG)l1`M~0 z4z~REiJk(9rT!GeW%b8Q=&-xTtY)DwJ+FZWg-vvX7<(w_Nxwp7@nH9+7JqtLRp#bD zpDSf;FMH^3-63m?)1w!w_gA|~gTehZ1ZIaqALz(m{xs$D=GE7s00qw&6H(S%Gdd&E zug1M!9_o&OS^FGHn$GOm4pf?2>png1lIdl?Vjnm4q6Ll7d7V)*6eM#Jv&vDfgv_Ba zyoE`|#xkQ@OXu0{?S}UL#mBM-*PqGq#K`(}2T*nF673UP!S*3P6WW0`P(im#=8)pu z0T8i*xI0i~K?+JV4&jN4qVu{F42^+<2X5Y``Gu1wE}W|95yRXIhDW^)hSyx;bb^-Z ze2*$SqB_2))3g9^4V}OXjH?lUn0k_q&6Wx`_F;%D58Y!L&i27arGst>UrfmSqm3gE zByhUutRoJjh|x@m>e!Hx%x#TjuYky8DdV%zhlWpYd#7cq@$&G5y?ZCSY{H&>i+jKN zOSNwA5vo*yijR1!G?XTz?ghXbAu!WxTV$kuDU!WE<~W=Tf@zy}AaRWC0!_$|Gtl#5 zSDqaj0%Atb2S=ikgksE za$8+s)w3Or73);#8*ldtm(+A_I&G6NyJ9Xq2%xO^a+qYF+6AVe&>oMDkPSny@7bY} zY%rJf5D7gw!xM9smb3kos@+pv-dI!ssFH%zM>;%QDJg#6gU?TB1M+n#fNy9}x0I{q zM&`@F1+7QGw2m}LVCiZpX_QNeES?RYkxj@JW~HinW>i8rpb<`@M_A|X351SZ=o|l8 zfZ=B@rCn30^28KRR|`v#fMv1yAzA+bJ6V5JHt2>mG9h0{JZ6(|da>Or-7O2S!jK|r zV$mNmt&4HBE|vu@%t(Gl>Dq=h&l}p{F_anPsf(7O?n0q`K&37G*o%6+qklLh+wnUx zIeR%Gigr%~pdnx`$MErx$3Oy=a`E3BK-t)Wp4zb`Fgp2%JOkpiK%~o9Ch8G93D^?Q zAD|W{K^)ozcaE&Pq}YeX#FNlXCN7fdCHoHoC?1pq>Y>vgE{gDgPV`4Wxa?E$3n%$^ z+84O_kdE~7KtBg}Z0b>&x}ArJuOjM#Po7SVM<@UAT)v`q$}f{=X>hllc(E5fHsZ-; z?Oz&rNZ&qTffcWtOMi!#3HSDg57P-GH2%P781In)R_BXjlqQq)GJlzZts|g8zvCCC z;3Su~7CxPk%=z*Tgjz_kajSB){!qT!jUE@t9~u*0H%Y7sO^rMlCVul=;eVDMtC;d# z9Zxm6t+wa7N}S4*Y!dJ)qK$wqamylMMEiF*hyifm|EFu{JWl_{q7YZ<-SvA+v}BWxeoR-$Lduq}M2n zcpPo=FpmWwT=XQW)>1SESh&u59p_v+4lahDK%{tmooVm)kzN&Qx-;_SZq7s|#Pzwp z2FHic&@KgpffF7(^}p$yd|aDfSWO=HqMU^rI6iyIEaq$X+i#G!t~UGIso*<=jWOdYamPnn=D)J|qRDjV9dyU}?Kj}EoHnbBM z7>`j3eXG^h^|ljrOezXbPXMx#@?V?C%5?&W{=kJ<&>bwrn%m1==?!Hlzf-$<>fLS# zE>+Kc;q=wN`_AXSB}!Pqze5+-aW=i3Q#Q>NbintOwVhIJy09dB=Lz!jEpFn2TS0Ah z)YpkG#`ZcBo-gPYsk?fJEEey)nrCc8IwXMB7nPEIAi|!Q*lquwVSS(`+b%y}y?A~f zc!CyrmxXdWL6whVY0IKahe9Q7ynnaDrSA~^fa9?RoP1TRsv92e@KJ2Nv?ddM&%51g zZpIY}9-)!CooL4IS*>$UWPlfoS&yC|zTk@DDp5ZyKcHwWdArDKq2N+R8Qk}`Z8H-{5UYtG%?Ft27XUi7`%R_3J zxfATC*TG0c3^^8gwyB&O`)CJ0m?3&D=MopzAojO zyxyr33#BX>@d^0?TlbZnmN)`bMgB;YoXk3XBqgjC7~b4lUEINpw~|CjRR?U)llkKB zMO%P2`}$Uj{A5f7X0Ku@o6+VgDg%7t6j~(QcD-vAY1k7kiVZCTH<*dAJKWEgxO_K$a~5~G^n3jZ!uy>OM`pmZKB8g)Sp!uaD~`@8AmD*kg1>;srLsCwEAYyk+p2?n zxvBKHYoOT5*kY}2&30PZ;0^N%6@D>aWh+tpkxNj)>MkVwvZ*!9spr!kq?UK{$S((g z1~rQ*H{Q8oKcy?A6#Jy-yD(Su0J_!Y!Q`68Ucg~l?VzU^FAcS(Xd%Srz=%@!MPY3z(3e^^|qvIvL-OV`{r z?T|&-gr#7v0j0`4!;`IdD)$wr_YEpaC@EU-#SY7M9h-TkpxsuMyxqL!aW0Y~6WwlR zEDny`m#)k-=dPS^scYo%A?}|~#*B>=ycszJ9owxb?NgdLPwaYGjr>w|hIpH*(FdYc zfA&rSfH-F>sOeQUfr;Pz7%Q;UM`3IQ_!GYtcP_HXK797HVbjAw#jDU?*2l>j zpd~8)Rb};IQ?#xKw%E%Gz1aJt?bn4@1bo>HFoZ9Y62r?X@CExnsOz}V=T{%)O!b!9 z4S$xoXWH@i$AW3Zw%8};RMV#(JyWY$o7R{seqGvWAE}fq2#oeeP6HgT%7h9pN+oAH z?#7spQ)HK~H`{%f)1yXud;FkS>I7PKNWWynnjgDunx3%(eB>Qm(Qmu~}Teg?g zs?1n)zH~TYAG=5*Vbp3{PxwVv7DDCns>YoA%#1@b|4!TBp@Xhtq}O`N#hP;QREIT6 z^|>)`>j;;VRdPOX{x9EC4?%k~GV$962pQ7Iw< z3epKE2nYx$QbX?@lqxmSJ5dn}Nbg-rK)TdGXcl@WKo9~%=^+$_&;lfH!nya{d*Ao{ z1us7)JA3x*J$q)&TAxB=t$}K1F+Y!ge%qGF2x??ekrm&ooyTE7$L#(hCwQl zI(#JCuSX;*O0K1Ew<_+DWDUB-GY|Bd$6*=pa)m4*o827dy!^86gPI%1z#Pm*w-x5MEePNTT_ zKLR)t%{$@|1e^fQbFj=@3Ose*XPrRygjy_mlL)m88kujt_igCTB1O6a1WtR~SD0O_ z-!n-Y-R@wH=odqSin5TivSG9M<7>7$pO2_(@od$4-9$A`Wit+);kokGSH6nHTq6-Dh*I2r~-#_g^j874#p&*>38#Ub%T zBGR*02NhIA=Xw~kSGm77;Z$CeX}GgC)u*m}1>BXt*;nFp&?D*<$8*o@HB%fGPay6$ zb{}T-Tw$9O^xBG7p_U38vf;eZtgG#vzg(*jwE*Q^>Hdn*1K@qs9O4#OKLF#F< zbmH8qNrDN95L0NeL1{7~9*8$}`FV_r`9104lF;d4-Ve+v_#CvKav?Cpj&<>XvAv5C zp}!Ka@h4#SFw5XL%Vp~xh(RFp%+EI8X8y5Le8+U&NTyfWl)V3&b{?U5uMLs~ga@K= z(2JN(_1Rji_f@~7wNT!Sjr{OTm|#ycY@{BapH`AnqFbP`z?FAA^zx4ghBeJT9E97x zYXVxIN@1>i*baAlUT)tHs?^WL*<2+B7Mr74ocQM*tCjs1zD>FR;$b_vzD&4Je`O=;*L>r$2kC&j&HCyyb}fsGXbF*m!?g_|Pxriu^}KGmz7c%`NyMeIFTb z)n&~S3xJEa?4d&s!#Ja|l>y%5{;<2e>Sc}4@GNJcSa$q1s0+3>A%Wk}gks6Kf}xai z>W-C}_p!YJ3)}-o&vx_=_*%lS1iheZKm5rRh06f#`@qqzT5C~fHi!=P zy;-bgR{;M`CF~)1CD818g62}*X+euuet8D^Rb4Qx7FvYnDW{3UF2ZNi`qfg!VHUn= z{T67iM75C9G>(({w?DK3sT-TuiKk2 zIIN8~?1>KD-zYO9?I?xKX~Nc{cMR6-;eRLrXbWJ7LJ{kev~!HP`Q32YJGffw?mf>m z2#Y0Nh_;1NSo7FVaCj@a`Zk&!Up=f5hbc7`XHZaoO~Y*GGHa?COTC2Y@3vW;ed}sT z>omzsb>+`xezJulrZzX{)_B>v7TW^G-`uzfE~F}PW%8DfMkZvj$>;`U`syng{`DK{CFBNYf&Gy{75A6@_a*1!b-!}P zX3peOTI%Y)lPIVg$V4DCnWme4*KJ1rl0%mO0`Ov=_kK6pPHAi)-SqP%ht`71!fbh5 zkK%T$ScqlfmHl8FT)Dj)d3I>reIfeE#^%rtv_PdL*1`i$w>7CK)S@H<$>gCIJ=2?X z@)Mwo;0-PG1vZiIV_$@q#Z9*d*Aqrm=esL>lp7dNcfn;P^i5=s331vGY;J`X^tqNy53sZ$Rt5s zp}1npb>~&w!1awB(S?J3jy|c7ZCTa~JLyP|*IP)|F&K^-SNHGULB98|!xM@Q1;kLzjhi`ejUAeHVA!hxmgKhrhVzO$Qnw zl&#ikJ4mX=%6|4iO93u{?E(`Qi$$<}nSWEbXXeHgyhFV8Z}*-aT#R2@Ggkn=xR&5e z@Oot?uuj|bbq|e8EJSj#)Z?d^OP83Pr_K_XT}4p3Vm|S9L|uzb{~@q0KAnp4qgZTY zoTsQqQpT)HQ;el(8B&B2Zu(6BBB&vngZ52Cl01Vr5%XZm%P7g|a;UwW4qooUA*N58 zVo}k@L&v^vf5CTJ<{x~$c0N^R&UZ@8_37md^s|FUSrcWs4kEks1aJ7>ggNFgS;Txe z=8Wt;-D!(M@o~3j^dgF&UXk~7E7MQdyR8YmcvxF|=u$K!A|AXmP2;{rK=vpI?If^W z^n2L6Ma0%t%vzR?*Zl6t(9KGBZpaM2H~kZ#G}lp1?n`wWaX^n|LOGC3Bs|kbSHBOC zC-)hPR`A#2`BEbqAnSb}0m<6zZ6w%!Yt}4FvzDEe z<}__#f+nSei}Tj{*@Ew#l}oH_#zvWx_~M?Q6fR$t~%0!NC}`@qP|g`J_=3QWOONnIuT zm8D*mjEuahC@KtxAnakDqkJZ+Uqq-|(uCFF9UWhsr}i2(2ix&O4$#6Ro-9Xzy-tWU ze{bKjPsKBDsjz&ry=l3<#r~iLyOZBLOf7xPY|?IJ{dQ^=q#w0iP>nc7Fs#E&ytzoF zfjKCdG5w2$-$)wU0YL+;@J3th34Yt9f|jIdkE!w~`5F7cob}H3O3l3HOt{jX)#%Gr zbn)TewC-=V>Z*9j=Ts@Th@E;{WAf@#<2vrt}25N}C z<((%`Vz~3+l-7c8Ox+pl)iI+1&FouWxjXiLJoAbunGAZKBF1{(ukR#K7O1{(M4*)T z>!Rf0W8dxeMa01Vs`I{TY^Itiya?zBe0v{Q;WEk!*t_hG8Rj5ghLHMxr-$N*<(>2J zoZ`tSrB^whh)_*ZG|#VoKExz#(%xFN`9r7p)4tWt{zAT;7YScrdLEX>nSvssRZDe$ zJXZsG9ii}W?jD@Xy@A?wPW-@J&Ef9IRWNhL%XSxs+5X~g`C0AACj4}$+}5Yf4nyqG z1$#+ld)%j`T4|F{_1RSc8d9rwofcyIwZeQR(o(gE$zJ=RSe%%+EsONj>Z>an&nhBy z)&k>LDj7p{$b&H0ta?)mQ`3Q|K;}76yWe>9`-|wt_m`2ihwNQuo-T;e{iKa2imW+W z-6E1A4xs&-)sxDPyjcZ=Eh|6yZ7vuW)Q4)k7_Le1d>xy~ZlFiE?|&vL(Wn58U(JFK zkM+X6jUU?c0X>n$e37JMvY_VrMuPc`HkYU_G3`er#vr-n@(mcM2e8@dY$DbV&fD~m zZR4SSAp9J-Ey5f88XjD{7i&x+;;j=PD6UvzR)_ldkFQcHxADJ%1h8A{3k!C+xL^5I zCDn9JQ>YsKSOr&Xqo2pffRc6MWsq>A3klZXHz9+`|;Zms1C%l6ziKee) zcr0)z1&W|&mN{}+ z52ERzUs6@ZqsgI$sn})BRgL`_#JfH6U6=XR0xc((|@5^J(rS>87` ziYi~R$?}eNY75`V3jo;D8LB(wueSeUa?h0+FIHAFDMM;N?#HmX%x=0*?bxCOljp*^_D4)I3g~6O2hv5t7cxv5U*8CRs3Dc6|(rIQsqm* z&e8#wudmK7aNPh}T`viu>AXIg&ejq1$f&){Ny)GK$+>$yo$JuWv1a?J ze(AX8tQcBJ^d8?V1weaJEJdMQ#L*Gph_^RNfl z9OmFD{C4`hYe8{aRPa~Va|w_mfCWN1Teo#)Xc#ZI^IPZrR%&WoS#}<7L(KX6ZI3I_ z-XQmsP+Ap73<)oT1#6NIblm4-u;5%lRaxpHsl>iRGDib|Ohp3>@=JUccDlEFT!nP} zTgG~g3hBgo~0{g zNxvP`JUs~_AKei($rHTpKbNBid96?w9rhSprO&S=Ru7M=q2X-}nLQgq{i`L1Ad?*Y z*D1*p=asoZt%Ogyk(YqcKx;nRx?=93_KSm*tx`*;dL9{J4dI*<1xH*X??H@3*OuHA zkw}xCtT)(>S87VKgLP7>VTkN3vPKb$%m*b97tX)%F`!Is(>6+YbV#{4OUbr)>?czy zqyES5wSje07S5;m*{`rO68q% zr==o^l3kx7g_BnC?{k=TTO2yYGXK;C0gCOPsn_RhDqARF$0gC$$K9@rk#T8G*Y>Q9 z?N{6I5Br`x53g~ByZyHDh$~0=tg{M6f}98}Xn0(i)Yu5}IZi6`RjRVV${J}?#(#_I zf&r84*@6jh-KK;3ho#k1V3AALUMyH|O3gMead^=|U;Lh)$k-sLWOepZMRs8}Uer<{ zYjT{l<^6aXHmj$^yHeuzHa3!AtY`!MSJoE)#tQ^7(?|ocjBaJ{q%F(?lUCV$JQT+g zZu|HLFA8zAJP9z<7&3;UPA6QER#3AizS6if+*a>Zt4R$va=4~>tw^N-{`*iN+!9to&t9+75T)|0Mc0+{y}UfEg&O%ZsE~; zHT#vyX*%d}_y1%)A)&DV=Kf_Qzz%fQWX9&(1%%YJD@Rjmy%u`*qkFOLV+!5L|8Kz| z+Q!D)4d*x`5}|!tr!8BIzpTzoUdvFYv&v*=NFC2@iyhN#oi^U`*?ZhaSZFg|M5_uV zl$ke}gpT72vRtJp->s6KJ`{%yK!Mi{w*SD3@&_E95moj|f_3-OVf;PQ=1}`N zZfQ`m|1X_*(+;Y98shP?6oDJfA1>25IQw4EI?dj@q>M3OQL4|9%OUe%alqCZFRW2> z@vQ`h!7Cu6TB>&hX`g>#$VepWeE<<}8tru7fjHY!*Pxmwch+piJ`FM{@Og$MXD%cz z^IE-$Ozcdf1b%I-8^`zZ2f1cr>ebW43|{1)rnzR*bo$fZnVw|tRoty9?%JAFrK+2x zz8sSJy%h3;N4P=48%B6WI?MUo*Bg^7{W^x0PULPXiU{D%&*i@M8hQ={y#^90{@}3>)ZRXe&v?T{) zO+g`^32JhS7t+se&l76rtk5%H3_SvFpBl~#k(z5p3RZ%iKv4am!5@cQ%)TYZt&oEK zKYSP)OF@$CWK8WiQv5b%*SlPVC=VP7yXO`^d^pN@C9efE^vptv@rgKJFcZ#)5Bd7v?LEc4o#N4dDTxVStVE(L%C` z7GIX!>*F6^`u!eMNMpl0o{6{kzSe(U`kiz$REG*1y8|+BY@X%s7$?XTS9X{Vx?p`t zn9Gt10`jVP+PR9xlv0s^YO`)pQaUv=?Ua~MMz3#Xc6~a3U=^foE5d{!=`#?SOwE6_ zss-4hHVx^4SFX1b(|iz<+Z!pE0Km%!NK9(xFu7Wbv>A@8=w|ewC>=ya9*)Tdryk(J zJADI4Ic=GWPyek52b3kR*PoRT(BpAHX?8bnhI{a4(PLW@AVe3~O%uUTFnK)EXt3RWuieb@!^(;og(3U;tf%GW_Ff{HgW{OuWrul4$!n3dz zWYUDf&z<97exM3y0Rt7F?)EPMxo;0$wE!?gnq#(EU{|p(aNt{9*~Jzr@ZuuCv?nTu zh^bXveE-+=m{4@-H>}MRdv<+1bvrNWrPP~bG=YS{5|m9Um)>U@6}+8ihqMW{9Jo8x zqSeKxY)aEk0v^Mhz+}B^?Vlas#DU_HAJQU)Q^>s)lQ7tt+b+V~aE?>s9D!Zqp`s?s_) zpLsT&oTx@k_MC}YyJKk=&Y+r28NJM^=8rNe%izk7GHj_4j3vV}3iAfkvvg;4 zNgF2sKKgT^7Mke07>Lo^;Pq+2Dy}hkpjLf8P)$7V7l^%Q)?d(>@D zIF+)iXucR;%xR0285=D&Op|5Jeo|{N2yzKD)DuayS3BLK>3PxuMaP}tw&X)L6N9i$ zZ0C-8d7LI4%-)#^ZUYT29waQTQab3|M5m=?%LDTLUNXt4nH(adst{^$v1A~f0Cpcn zjdCiv5gSuiD5JF@H!3!NoLOv5N95Utx91f!&(DZAhc3xYN)9{z{2HpAMDXaIUrZ3B z-eg}eal(W4W%q7#^x-9PGbVQyqFl;rn2z2dfGQRyi*GF6o9!102zrFlbm44T5MImU zmwYXI?>9PGL5HW8de;D&mCOj6AiGH^42UnpS?@4a9h5Jqx(p3}mcwm;O7+f?7$nhM zJ59{xde#^<)l1DLx4oV;mF))lxE~&Rt;W0pAeLIg;2SQuQs*b$CJeKWQNuwHvd#<<-5+5(*Y%V0zGz2m>Ug zC@G8JKmxD(I&s!Tiq>kNKZM4KO9A~=8F*%tCgq*?BwWZGOnu}JHG3Ouo$4BH@kvTb z^HKxYP_mroG=KCC77Qeh*$=&XLu&yejd-`Nr7}Nj@o5b4%}smdMZb>gr*?HrcdK8tVv*^wM@!-M7T?;$2Wh{&FrmwSZ!h;CTPFap?_A0ub zYRxW0pZR`m+_v5=2U4?7)AiD`+xrwi!iry1gzrYLvejcfnT8Df8$ASZ@qb;C7X37^ ztC~mXtg`u?Kfci8(l;jo(yk@){mVls$|ho=(0sSqb_Mft74Kl?$xlzdeGQKwz!~Z2 z~yfOl*NZ#>JPR5g40+;8}Wd+^lSI7ylP^aFYQ})m-UdAr-@(lZc(#ZuO zp^TgR7wOaf&CF;j_aPoUROIn_FQMxHUKTqsmb#A%d>`4gqYl1k@=*CI8ap!|BGm4d z>IFv8yoC8J(G+8-9V$Xnb&UnCVNttBN@q*=d_5_#Jo#~KZhhU1B{;*2Au5s2-|-H~A(f>jrMe z`%JyP4!JLJRCmH(eXneif@!NA<4j2pnu05D~VW3a<&UR#o6`RFPC~s zQ+e0aYzy0WT2Ykd;R|Bw_lK;$I|c3@VYX&A{!#lW*9*&T!xcK+K(DIF!>(>M_mEgK z%&K1f{%Razf8=rS$82kSQ(S*+i~2z!cqLY9)E566G zso;vny)S(6@tNd&0(T7zH_g|Vjxp*61)wfJ+dVr!Qk<9j$5h^-hs3>n3Em76gAfVg zw$nWNkW8|`zGiQK(vsOXq}k%NFd7mkn2-rGw+aZxhxKb%7*-lBkMp0p2uf;B=X|=U z(r6P3Z9hY9p6r+okwT26$!hv}JC~RRuaC`7?~os@rHpWK+us%qeCqas=wFcQ$?Ruf zaz3xKvG&K4!a`dy=RweAQVFXQ%LNB$WL<{B3$q+V2gfYjdjCzO?lw_k$r+)MA!$6IFlJ!VSW?Ur$IbIbN0@E8$Po*6 z_r3>z(kZ*vqVk~04 zYBC_usb+jR#Wi=|yaYME+fTgWXTCYc?X z!a`|BvdLe^um-C!(<~NAROM_XzSMKy{%tkqaHMK;Qn@YW1RA!%<}7tgcG$KR@4jAl z5i@ahCsJ0t@ru~2T|tSgwS^FI;qZkD4FR?kS>5xNQY9VfnNN6IRib;}YKRG%ZG7M4 z>ypVMQVVK2c7OOsB`A+)!wSRA(xv1zw}#QY)tNw_pnRcNd&;C@|M?ak^|!t^oc;5G zK!O!w(bO`j!BVz^&uh)M;OC=@BBaps3s7RIQ~VNrG`GPov;h10^LLBuHm%48r|j-tmyY(R zj{NRpQNTh5Gp(A5JtkS|RIC~C%98?PsN@Ni^9%*U*y_L`ru$ux$qeago?%@q(QlcO zT0lC^1xUBLX0_U^8P7t53fSkIEP^R5^ID@an}{hLA+l$xN>WNDOyI}3uE!B?8; z?1xo`03!0nST&~**nDLByGWg%fsn2lT$g^@+=#(H$qp^4F*?_`Fr@o4-A-`a z)_&ac%PB^q0e;U3)*m2<2_B{udEJNq!hArNTlKyJF06dfaDKYi;4_R4x~FQ--)FIx zIw=7iLt0O&aE91yiXSaVdXC)2DX` zolL6!Vab9c8BUGq6Zr)jAc^@xK?lTyZ~duoc?N*C-@D}JzOin*)-68wY&3Y2^TZDz8lNsOe$f0rdFR6zY-YD^=p zf=yZgyHhqF^0*byq%_4=O!#tT1C^)4hg(Zcd%IWf^(4Iv^*MSJd6( zU}+ItySIc7LMbEnN@1YHZk0#{2`I~t8K>3+R^KPCm2Yf}yt16!_e!an!66QwRqUaU zQIQBULtcq83w4vr;bofjyO363fgzgTTSipMAjV- z>_uLl`T!!{;GJGwaFJ+dUU(t|80zpo({T5D;RK14J0IzkeN?fLKR2{dV%w9bW7d0I zr#V;aC1b$Fwdi+QG-rvuh?Yjr*TgLEaM3G;2e;S1J@*8^oBBg1JDj+>KI4(9$e6{G z+m9kznt~AT50|vZ^-!^w&jQf3oXJu_r=*9HW&}ZekG3{Lzick%cT0@8OzIZw?GH-t$h>E9VExm{DVe1U3Ke!4=fx0 z5X-j%TI^^A``e}8w__T2x{modc4w8)A}IG)8ft^!9`mFQ%{XqZU~|Pj_yZZU!?Kl0 zq|CGRrk~|5#oNm37t2lehdAhgZZmKE4=M9ED(BPBX35wq;C2Zb-zP8SUpss)+2oQT zirC5B8Nc49eP7aaF)vQzTo!A7m7jY?a7aeIB6>Y|N6P7;D?s029D>!|H`7)YR*iZ8 zkwjOOm;nR#;6s(V7mfn9ZYI_*`k$gJe%2=SS4S`x%8xOui0|!S3V-;^h7t;lb{evF zbUUN_s}ha&2d6g;Ra{t(0G`nfCU;AD$$AX1RE{gM%zV}|2XF3+&PTc92ub-~264gn z$a8tPuBu_z8oTR#W->Yk>qb0MJz`qdZ*l+(!(7+96&1m09m}W8qvEWi9KHvCdC(*z6!n)f;Kza` zV`EC7p3u|Llr)6F4z$-3vXAGy+CL#Sht?+Sk;)MdnLCe3RsX+HJ^e_jz6rsZMN z>XkXw27*kr#pUkh&sb4YK{AU2m_5HL5J*-hmxL4H?*62 zNnbFwEU`clWf;w~LB6JXt5`y~wr|N%=T0UlC)~7x#2dyCMMc*K32$ALJ?j=*mJ0EH%6LR(U_<&btNC13{$iVD5Xe` ziVGH3Q06zPj>c8Dj|q=CJ7dlIjS~heG0%jme)`py%(kI_CSz?XJAm#bBto+LhrWKq z&X^JVR6YWYT5_pcixsjI)-upjh&OMyty)8=+Fc**_=xlqb|udtdMWorar5d|EqcX52m_&gXJ3EWl5vc=DzQ*4?nb*80{k6 zWb9G!H}&ctD=ZcVYM&i$lM2F5`%IVuW3+j^Ql{?(@Dg(`a>hwi;cMHOG?`y_wq1() zDVDKX?W#OtEm)KxXdWeH5cw`JT_L-}&uqk*w<);Pf>M`{ZG8OrlC4}Oz=OJa4(y?4 zOYUrtaI&!zz-QqgH&jQQ={tqJ-uD-u1o}IVi!WKY-kM~C4-6DfaioVvh@^bopWoi- z?dB^qrZk#)FFs~^Hk34{%90tApf6fU-s{Pm{h_a;ulu;A{~RQ&SB{r>PcY^Mzd_fJ zNX6_C7suHZ#9)+UyxKx<{^0up8lg^G?m*uAnMPF^nC8dQ3--)xn_)!`?u+kAoujHy zuDOkm`x8^28AUE_aky?C*e9xT+B#df>+=)>hf5vzThsoKKWp33ovAT&d=AyhL+l{M zD*P&Vn$Iw&Cp%xR>#t_o0=dGUcWe7atm5yz9^{1$?O0E{e#{dlQ!eaVM_%?%kFhn_ zZRs0pZ5)_;I-XPI2h7z|R3+n-G~W&Dc3AcF>$V2(G~kR2eutX5wb2`V$s@>5c@C?C z+K8)R+of@%V4#5Omz%AX+H4nX<~j7(*hv)Xk1}OU(UvktEr}H{K`|Hdzf^j!KCWN- ze%>~kK_OfHr(9QEWTF%%s3dODIaKGHgR^;ldCWt`df9mh$y40pwa(EMjy!bFma!|o z8-^M`O}Zz}C>AJpf~J~p<^*v_BtWf5+2Eb<(7(GZC*VNwgR9WDBTt{80-e$azxhr637 z0`c4SmM?=|MVL-4Qy}zu%@kS4Z}Wq5P17%2W~when~tyWJw^7X@t#{TTTj)`9vWuL z=pI290ZX+tK5ox6zBgO__EVhP%W$@on?70J)$>_p(7UP5@r=PaJI1`8(7g_?>{o$f zdeL|3B;C5NG~Lfxs<7LUr`M**ImcN*Xytj5dXDqWWgf*R!&(Au$$N9R8@f-FyntLN8rTIjtx)BDHsDyps!AR zrvUgi`hB}xVXcOpr?de|tvmt6WIq30a2QeRs_1L_h;3LuQaayuxY=OL94*(y_bzpM zT#+8CF{Wa~qu?r{n*EffO=qsR;H`Vd6Yn@Lwvf}^p^O*BG;#@C9V`KABeMd46o`>w z6qVwo13;K>vyVQ3Opt{r1C(CL_O9(>=Z`D0O}WW-vlLHjIF z4K|>CmzqHrChF0JLET*9iT|M^?=WJN`YIgJ>0%IbSzAy6AaeA1+E9_k2S!%u8w|#t zZG(D`Ie}=gf4cU(_Ux+UeVpFY?7S-PbUSvuq^ds-q_h_DO9~LN!BuH8WFseqc_4~( zgGoJ9rzug^Jin*9zvC{Q>eeN!ry{z-JQbrG2F60MmWjO?_u2)-)q=**aISp;L^RDK z!Nl-002H{@MGqy_MH1MD<*Fj(MB*_QB6*^&X@;2M>iQfo3>$#e`9ohfTMujWS#2dS z@KJ>xbA`G+W6knJb*9eT1%y#3IyKvU{OrXsHz2VN`XHFPQWY;pBnz?}gzAl!XqIVJ zYJ?N`;%LQX`Ufu{giiM$er|mHeYb8a0$Wt{t?D_ImGvWbSW+d1BAcTX#-mf+s&elU zFUG5PhWqaD$0sjxUWvqC!}vIoDC(iQFA1;1I5zKe_@;}z-*`z7k=dW+_1)X;f)(-jm}vo4Q)YDZTvUJR3c zqypw_7k>yOxP)+z4vJCB?Y|iAF4e1r#^N36E!4+cc+z`^2i}8bb8{ZLYuoVB@kO(< zF1j&Zj4ccitPZPLN>Mt6R)>jT@a~BGyWG^r7b90t zJ{8g1azuiw1^~`nA+nQ>swT0f>cxW-;MU-!S~Rm|)-! z&+hR|)Y;Xm{a*FHhqBtc|0uI_DhN!GA99lq<|m zuebTp-R|`+2WiZSZn?V_0&CKDZF>5lB+`&)bVNK}*;2U7njShtxE0DcB*r-A`lKw5 z&cF9kc+i`2tdR-+FjO#Ha=u@thvy)>eQ2 zD{B)Ay%$yri0E-iQlBeo7DEvQ#V#hh0wsm>PE&n zlxT0DBhOgxxaKk7P)$tn8heL!S^nA11SLhlBC4{IQ(ggks;ZXI{PtIL6k2Y1!9pv>s+FLjK zZQ4;4>gX65mCRWoQue%{s?*1pAXgOy3W{ZgbS5HvyIqsR7km@%eRhjnmk( z`Wz8|qUm5d<~lm7t8GKU;ay&MxDVL*`m>U*Z{2M+qnb(o%ikAZVL_DP-rZ|DH=#*V zu(&NQEC|ml#eQ^hK;%C=IAPzn@|E)CSrh3<tWH ziw17DN0x2R?ecI77$gk$OKviITvbw6MU#H`m0*uT%l_1QiLuIpL(reKK!_L&i(`SC zbD~tQiyINtXXCwGSYVNg(bX;Kwk9eb_-s?Fmb2mM8F}FzP7m{$B;0LA2C%k^ z;^Q~}(bvDxL~S_dygs4u$xZI8K=;`Td9PjSeJ9cwtWmD9=nfp9fjUsDKk4%u*R+)Z zX#O9I49**GmhewZ*d31N+NuIUDXnJWo$^=_P_8e8Ne)wYRFmlsyo2LdX8y+ow)2j^ zWODxx34C5$2`sp{XI?^6^ zKv*5wJh7CO#hk+KbjDl@yM#OvYAQWX1 zhZt3ezCZmE{~UR<{m3@c*WB1Q5zKhcOSCO4ShrSP0nBAgSC~2>O(xce`yn{w=NkssH!?z$^(28ZlqA z2s`UxjaMH;qEl4-{gWAP*K62w;d7>zf4*V6n6;fRk^quO4Z1%-5~Hgjx5jHDDJ84N z>k4Dn>y2*C+{W$wy&lLKdtzW;=H~^Uz-21aV5r?>1v0#EgY#2mSh?1 zS0^vIHKO~CQtAYGXZE9~Bu^O>F2Nq$+TtYD^NLp@;Y?I26V)3Du$ZkLY1fH@A#;BL$jlgfyHh0At(9_Cfx4IqUQzMYy88 zV+DmRESlR;D+_6`L|qLD#CQ+q|D5YDW&dmG!B}SSKHkWp&Ue&x>=+Z!ApZC20#-Ny zeSLj&xuq-t9`nBo-e+OQ5gw`uyyxn~=;SN9qZ1tcmpVhJs;In6fA;mPL1DE`*JTe8 zAoKsB!g_Lc|gpp=!Ii z(6`XWq;FI!X2#R>x70D!LdMcASa3|;>=twP-t7~|8vkptWB%lJU)QejlRVW}K#i%| zXxWkK@>jZ7UVe@d3LGW>WRnG3FyK!04^QLxpH~kPk%IyV@Xn;9d8C$I^6KU-P&PJB zsprl0FS*Vu4q?4vJNl+q{n;n0o#VjwrhA8>n@Yl1{^J-e)j5}zQl)ILD*c%}jQAh_ zV6P){tZzW*Ubt+%LwJ95UdN+aEKmXj_8ryAXgQUhBr5OOqaXF-<@u6Dgpy% zf9@(C1PgQZ-m4SFKx;u$b)(~k7 zHIDr63HF%#YR%Z|o}>?h0EwFzD^t#?ng|}xDKLW^3kGrWb7Gh=PmSfEDR6M`F=VRQ zI_ykSQHD=9M%Z}x{md1v@Qv|fyrVy=uL=wrNUtf><*$HUc?x+yYPn`-TjgVc3-Krr?ZYe~UCCYOFECCbvAdIn%Xm zA1h@)vTE?#y*DW`?qXa6wpOZ*fXgJ8SaeVi8bFjtlEp)|mWIChTbLyGVVl@j;Q@3v z3f~FDqk2vFf@I9*`Gf?P-t*Szmk?>f{XCpEj=gHoV^aY*7Zk|JxC}dW*Sy z9^2sL-Ff07GER-vvQ9B^-Mi)3r{FkTa)K$fPnl$!3}>Ej%DN1?3^;`BZqn3ZRm4b0 zL-*ace&Tmr_+$kJ0#W_mQeAc<-K9GEv*a7T2=Xdp{yGdkgR=U)u}btnCU&1VzXBQ{ z|NiZ`=i4FkTlgmtxTp=2kS!&iErgcCZ=<5Z&iIAuDaz+I=Dgi!355MORa)7^&uy@7 zfJE%vME0pAUy_!It_ctOW*L*AJpUzEm|Uni7m8g)Ca6vOE?JLPskdl%HFDeAw!N7v zRbt3rCFA@8vw`1;@H$sMP1bs>_Rc`nltyLB=CXU?<|o{~6HI{u);DHlrqv z=NqcOc1lCo58p3Q>4~v3++ow_!5=sIsI`#_EH7ik>El@SQpeOq3;M|Q;7&VaKemt^ zHM98sr73FH%pNS-U>vtY)7i@h!iNQjlAVIznr~6y$)JRYP#mxSvtSL2GCkdG(O54<0~5 zTF!2KR_v+v#KG5TE#pm+TK3(Fkp+ji>A``0WtXM~oOJqD%aclQQ^za<-X$@qXQ@x! z*vZ&TT@};m!bVNA*NCoNbjAgHW>XhHtV>>O=&Vo-%EZT(L}kf$7~`8LG~uSILFO|$ zs^=5Vzz_0QNricfd*#aW4}AvAdm1wr#RE(IQ5$nLnkrkDd|LJg@?C(ay81e9ngA!T ziz-b?!w-p5s~wji3x zAN&l(Ocu7*e!T{b&BgSb>Ab|qmZLxqRe0mA3>N%Kmb;u`iF6iuRU?BhAE;hKR_~(6 z4Hs5#Wegem^6A9}MOZJ)XQ^g;X%Qm(KT?ehx54-xFk|ObG6Bzg_ydjZTpk|&38zts zFSfN9$#OF*jL)|t!Zhul)+0g_`yGX0-1tT}#06|1iXiu>XR;0+kSmzPU@2Lft%s(F zA=CW!7B{|RQapnwCLc30`{jOzW_5EFtG$O)Xk`yR)jZe{Z-&24zYA%C2PD*Va5chP z#eILD#y-@|d77=Q^K-2)G_|5a-ZlN85X_H#esDG(ebJ5v0E_A$tPi##K@n`;c!<{) z#2g35!Sl;U>Yi*AU2RVU6jN@39UbUVtSJzB8FESYZoDOpEVq}a{=94aP zWqfBT+S@7&<4^H)+>BqD@C+LnYhd;{&s~zxVo6G*-jXeQVtm*M?xjhg&9dwG3mKlQ zMwFE_WOq#WtbE?rMt&v9+|}v3^p3P<#Qa8Ce?+k{`|@Bj)X7@~b*`!3{$k94eI~b8 z&6-6(Mjvsm=E|@^(GqTYdlVN>^7jet2d0^GLzc}+wJnFZpz`wgRY{dRaT+++ zq#Nk#a~=ga@nGlp1vtWk4;6Os{4+C9q7zju1i}Y_v&_`5sqzfZKMxy2T_&n4?09Le z-y8h<_+LPr_kl(7J+~ZD)xY&mpgxN)Pf-6ur8ajmQ;7g}yb;$W(7*%~e1Lz&*$2}` zD9=J_m7tOumtCQL|Cwrkc=YiF0pN`?fZ6YA^xNzWKTiG94{RzQn4zM&k7CLqc0te~TtJ;HlCG@L=1 zWagFqTUS$h)IS(JV4B`d>OFZ*g=YTB1G`BRq$|sk93G1!*8)YNJK6*5K%L?Ie;=i$ zd1Ckv-pXfZzw$nz-jefzb)O9q|Gw`JsEINaey}H^Dgf}ANqVm&SB3U~5O|)N3rkQQ z0%~|;Z~ve+X#?UzWw2Jg17(3EK>cy^>VY7?LvM-HlMbj?e`5+{rdx{C*%7eV=ZI(R zxwSp+kW;h%Jzd-xPx)iNhN8>FoyTsz`b+N5n-?Wa*x3WGo;e8|;13MN3~lB|U)k6~ z7Y@zJ>ULY4ZDaL$N zXChdAZyTrP_5>~YnXcigF3>v3l=)?fq={;X)Y1NX=Qr-RjnCS1k6*FnNic96?Er8o z)qjmC9EvJ#Qfca?bq}>x_6J_L!M(IC_`;#($y*J&7qq>tn*H$gjMj@^jGrz_jxxD- z?4;3#>)W5qnD*?gg?ib-lzCF$b!Tq#N&oX=TU(^v-1+wLRgx`qE&MqzU}Q-T@`R?rt8J;_NF!e)1>73&vAK22$|0NCsyhu1N2fg zvdfNGhHWg~#ADPo>4b~8S8r;N%fibWz6GU7PFWFTbS|?S`4nO_N zE`DnA?YTF1>w;(~yp zUH-*v!E-Fcy!^IjPIX&&8aQP(OK$SplC6o$T}9k@&oA_TQruB4efiv!Zt3^?Uy7Lh z{kdMvX6;$6d25n1uk|cz`+aqj*25e%CytY-$*rft=Bci1>!jdHk;0khSi1hWnSTyh zf1@?%NoK{fuaBoVW@=A)bhrLUa;ewjo+W(Ge3pKAy?FD?BvC(L?p=eLByL>y=-O-x zH0*MY((*}~Zb{-^&v=%eIHK8n2Y4gbFNw_)9-R;PG^s84ncf>$P+8##T(81m1H9I( z->Fl;DM@{c!?*lJ-m2NlF67@nz2&}}m>(~2*K+#eYXL_4RP}a!F}&`P_2a*6RqVBb z*$-KF0TY(YwSX?aqShd-Y>lJcrL&@+Y~L2ydhw)DfPeqxN3YhjUEln$ZdTsx;CsN7 z2Rt(vDIGdWiQn$CiCw)hVbl49ES;%N_UThR7tYVrm?(9PZI;j*pu)CmIcgn6k0zcOl#O;5&_Tj(evs#y4%Sr#cdCcf!Vf5km zO-4ZP2myyj5uWQ`w0jFgWF>Rir$ea f0;(Yy7;Jw2kKAE?G@Z9|A&Beg>gTe~DWM4fThwnf diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_mariadb/images/stack.png b/i18n/es/docusaurus-plugin-content-docs/current/managed_mariadb/images/stack.png deleted file mode 100644 index e66ea488e66549c99d5e00ba0743278bb2a52456..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8593 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 previa -# MariaDB Administrado (vista previa)

Conceptos

-

Descubra los fundamentos y principios esenciales para dominar nuestra infraestructura.

+

Descubra las bases y principios esenciales para dominar nuestra infraestructura.

Explorar conceptos →
@@ -22,39 +27,39 @@ title: Descripción general ### Descripción general > -> Este producto está en versión preliminar y su documentación puede contener errores o aproximaciones. +> Este producto se encuentra en versión preliminar y su documentación puede contener errores o imprecisiones. -**MariaDB Administrado (on Kubernetes) by Cloud Temple** es una solución de motor de base de datos MariaDB administrado, alojado en Kubernetes. Complementa las ofertas de motor de base de datos administrado en máquinas virtuales (denominadas aquí **MariaDB Administrado (on IaaS)**) +**MariaDB Managé (on Kubernetes) by Cloud Temple** es una solución gestionada del motor de base de datos MariaDB, alojada en Kubernetes. Complementa las ofertas de motores de base de datos gestionados en máquinas virtuales (denominadas aquí **MariaDB Managé (on IaaS)**) -Esta oferta es adecuada para clientes con cargas de trabajo de Kubernetes con bases de datos MariaDB/MySQL, o clientes que desean consolidar muchos motores de bases de datos MariaDB/PostgreSQL en un mismo clúster de Kubernetes (agrupación). Es especialmente adecuada para bases de datos de pequeño y mediano tamaño que no requieren ajustes ni características específicas. Para bases de datos de gran tamaño o que requieran un ajuste especial, es preferible optar por la oferta **MariaDB Administrado (on IaaS)**, que permite más adaptaciones por parte de nuestros equipos de expertos DBA. +Este producto está orientado a clientes que ejecutan cargas de trabajo en Kubernetes con bases de datos MariaDB/MySQL, o a aquellos que deseen consolidar múltiples motores de bases de datos MariaDB/PostgreSQL en un mismo clúster de Kubernetes (consolidación). Resulta especialmente adecuado para bases de datos de pequeño y mediano tamaño que no requieran optimización ni funcionalidades específicas. Para bases de datos de gran tamaño o que necesiten una optimización particular, es preferible optar por el producto **MariaDB Managé (on IaaS)**, el cual permite una mayor personalización por parte de nuestros equipos de expertos en DBA. -Los motores MariaDB se pueden elegir en la versión 11.4 LTS o 11.8 LTS. +Los motores MariaDB pueden seleccionarse en las versiones 11.4 LTS o 11.8 LTS. -Todas las copias de seguridad utilizan el almacenamiento S3 de Cloud-Temple (calificado SNC) con cifrado en reposo. +Todas las copias de seguridad utilizan el almacenamiento S3 de Cloud-Temple (certificado SNC) con cifrado en reposo. -![Arquitectura stack](@site/docs/managed_mariadb/images/stack.png) +![Pila de arquitectura](@site/docs/managed_mariadb/images/stack.png) ### Beneficios Clave -- **Soberanía y Reversibilidad**: La solución se basa exclusivamente en estándares de código abierto para evitar cualquier dependencia tecnológica y garantizar la portabilidad de sus aplicaciones. -- **Simplicidad y delegación**: La solución permite delegar a Cloud-Temple la gestión de los motores de bases de datos, en particular: actualizaciones y copias de seguridad. +- **Soberanía y Reversibilidad** : La solución se basa exclusivamente en estándares de código abierto para evitar cualquier dependencia tecnológica y garantizar la portabilidad de sus aplicaciones. +- **Simplicidad y delegación** : La solución permite delegar en Cloud-Temple la gestión de los motores de bases de datos, en particular : actualizaciones y copias de seguridad. -## Modelos de Implementación +## Modelos de Despliegue -Ofrecemos dos modelos de implementación para satisfacer sus necesidades: ***StandAlone*** o ***Distributed***. +Ofrecemos dos modelos de despliegue para satisfacer sus necesidades: ***Independiente*** o ***Distribuido***. ### StandAlone El modelo ***StandAlone*** despliega una única instancia del motor MariaDB en una infraestructura multi-AZ. -El almacenamiento utilizado por esta instancia se replica en 3 zonas de disponibilidad (AZ), y permite el reinicio automático de la instancia MariaDB en otra AZ en caso de fallo. +El almacenamiento utilizado por esta instancia se replica en 3 AZ y permite el reinicio automático de la instancia MariaDB en otro AZ en caso de fallo. -- **Caso de uso**: Este modelo de implementación es perfectamente adecuado para aplicaciones simples, como CMS, que solo utilizan un único endpoint para conectarse a las bases de datos. -- **Puntos clave**: - - 1 instancia de motor de base de datos - - almacenamiento distribuido en 3 AZ para recuperación automática en caso de fallo +- **Caso de uso** : Este modelo de despliegue es ideal para aplicaciones simples, como CMS, que utilizan un único endpoint para conectarse a las bases de datos. +- **Puntos clave** : + - 1 instancia del motor de base de datos + - almacenamiento distribuido en 3 AZ para la recuperación automática en caso de fallo - copias de seguridad físicas (`mariabackup`) y lógicas (`mysqldump`) - - SLA 99,9 % (fuera de ventanas de mantenimiento) + - SLA 99.9 % (excluyendo ventanas de mantenimiento) ![Arquitectura StandAlone](@site/docs/managed_mariadb/images/StandAlone.png) @@ -62,19 +67,20 @@ El almacenamiento utilizado por esta instancia se replica en 3 zonas de disponib El modelo ***Distributed*** despliega un clúster de 3 instancias del motor MariaDB, con Galera en modo "single primary" y MaxScale: -- un endpoint MaxScale permite el enrutamiento a las diferentes instancias según el tipo de solicitud (lectura o escritura). +- un endpoint de MaxScale permite el enrutamiento hacia las distintas instancias según el tipo de consulta (read ou write). ![MaxScale](@site/docs/managed_mariadb/images/maxscale.png) -- la instancia de lectura-escritura (RW) es accesible a través de un endpoint específico. -- Las 2 instancias de solo lectura (RO) son accesibles a través de otro endpoint específico. -Así, las aplicaciones pueden elegir usar conexiones RW o RO, o dejar que MaxScale enrute por sí mismo hacia los endpoints más adecuados. +- la instancia de lectura-escritura (RW) es accesible mediante un endpoint específico. +- Las 2 instancias de solo lectura (RO) son accesibles mediante otro endpoint específico. + +Así, las aplicaciones pueden, a su elección, utilizar conexiones RW o RO, o dejar que MaxScale enrute automáticamente hacia los endpoints más adecuados. -- **Caso de uso**: Este modelo de implementación es perfectamente adecuado para aplicaciones con accesos distribuidos, como aplicaciones de datos o de inteligencia empresarial, que se benefician de acceso de solo lectura sin impacto en la ingesta de datos. -- **Puntos clave**: - - 3 instancias de motor de base de datos con Galera en modo "single primary" - - Proxy MaxScale para un enrutamiento eficiente de consultas. - - almacenamiento distribuido en 3 AZ para recuperación automática en caso de fallo - - copias de seguridad PiTR y Lógicas - - SLA 99,9 % (fuera de ventanas de mantenimiento) +- **Caso de uso** : Este modelo de despliegue es ideal para aplicaciones con accesos distribuidos, como las aplicaciones de datos o inteligencia empresarial, que se benefician de accesos de solo lectura sin afectar la ingesta de datos. +- **Puntos clave** : + - 3 instancias del motor de base de datos con Galera en modo "single primary" + - Proxy MaxScale para un enrutamiento eficiente de las consultas. + - almacenamiento distribuido en 3 AZ para una recuperación automática ante fallos + - copias de seguridad PiTR y lógicas + - SLA 99.9 % (hors plages de maintenance) -![Arquitectura Distributed](@site/docs/managed_mariadb/images/Distributed.png) +![Architecture Distributed](@site/docs/managed_mariadb/images/Distributed.png) \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_mariadb/quickstart.md b/i18n/es/docusaurus-plugin-content-docs/current/managed_mariadb/quickstart.md index 6ffb4e1a..0e97216f 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/managed_mariadb/quickstart.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/managed_mariadb/quickstart.md @@ -1,33 +1,33 @@ ---- -title: Guía de inicio ---- - -Bienvenido a la guía de inicio de **MariaDB Administrado** de Cloud Temple. - -El objetivo de esta sección es orientarle hacia los recursos necesarios para comenzar a utilizar su producto. - -## Antes de comenzar - -Asegúrese de disponer de los accesos que le han sido proporcionados por Cloud-Temple. - -Asegúrese de que los flujos de red estén abiertos hacia las IPs que se le han proporcionado. - -## Acceso a su clúster de MariaDB Administrado - -Según el modelo de implementación elegido, dispone de uno o varios endpoints. - -**StandAlone**: 1 único endpoint (1 única IP), accesible en el puerto 3306. - -**Distributed**: - -- 1 Endpoint MaxScale, accesible en el puerto 3306, capaz de distribuir sus consultas hacia las instancias más apropiadas (este es el endpoint preferido) -- 1 Endpoint R/W, accesible en el puerto 3306, que apunta a la instancia primaria, en modo lectura-escritura. -- 1 Endpoint R/O, accesible en el puerto 3306, que apunta a todas las instancias, en modo solo lectura. - -## Sus permisos - -No dispone de ningún permiso a nivel del motor de base de datos (ni `SUPER`, ni `ALL_PRIVILEGE`) - -No puede reconfigurar el motor ni sus opciones, ni instalar el performance_schema. - -Las solicitudes de adición de bases de datos, usuarios o grants deben realizarse a los equipos de Cloud-Temple. +--- +title: Guía de inicio +--- + +Bienvenido a la guía de inicio de **MariaDB Gestionado** Cloud Temple. + +El objetivo de esta sección es orientarle hacia los recursos necesarios para comenzar a utilizar su producto. + +## Antes de comenzar + +Asegúrese de disponer de los accesos que le han sido proporcionados por Cloud-Temple. + +Asegúrese de que los flujos de red estén abiertos hacia las IP que le han sido proporcionadas. + +## Acceder a su clúster MariaDB gestionado + +Según el modelo de implementación elegido, dispone de uno o varios endpoints. + +**StandAlone** : 1 único endpoint (1 única IP), accesible en el puerto 3306. + +**Distributed** : + +- 1 Endpoint Maxscale, accesible en el puerto 3306, capaz de distribuir sus consultas hacia las instancias más adecuadas (es el endpoint a preferir) +- 1 Endpoint R/W, accesible en el puerto 3306, que apunta a la instancia primaria, en lectura-escritura. +- 1 Endpoint R/O, accesible en el puerto 3306, que apunta a todas las instancias, en solo lectura. + +## Sus permisos + +No dispone de ningún permiso a nivel del motor de base de datos (ni `SUPER`, ni `ALL_PRIVILEGE`) + +No puede reconfigurar el motor ni sus opciones, ni instalar performance_schema. + +Las solicitudes de adición de bases de datos, usuarios o permisos deben realizarse con los equipos Cloud-Temple. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_postgresql/concepts.md b/i18n/es/docusaurus-plugin-content-docs/current/managed_postgresql/concepts.md index 96680a5f..c72426d3 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/managed_postgresql/concepts.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/managed_postgresql/concepts.md @@ -3,27 +3,27 @@ title: Conceptos sidebar_position: 1 --- -# Conceptos Clave de PostgreSQL Administrado +# Conceptos Clave de PostgreSQL Gestionado -Esta sección presenta los conceptos fundamentales de nuestro servicio **PostgreSQL Administrado**. Comprender estos principios le ayudará a sacar el máximo partido de su base de datos administrada, alineando sus capacidades con sus necesidades de aplicación y requisitos de seguridad. +Esta sección presenta los conceptos fundamentales de nuestro servicio **PostgreSQL Gestionado**. Comprender estos principios le ayudará a sacar el máximo provecho de su base de datos gestionada, alineando sus capacidades con las necesidades de su aplicación y sus requisitos de seguridad. -## Soberanía y Conformidad SecNumCloud +## Soberanía y Cumplimiento SecNumCloud -En el corazón de nuestra oferta se encuentra la **soberanía digital**. El servicio PostgreSQL Administrado está completamente alojado en la infraestructura Cloud Temple, calificada **SecNumCloud 3.2** por la ANSSI. +En el corazón de nuestro producto se encuentra la **soberanía digital**. El servicio PostgreSQL Gestionado está alojado íntegramente en la infraestructura Cloud Temple, cualificada **SecNumCloud 3.2** por la ANSSI. -- **Alojamiento 100% en Francia**: Sus datos permanecen en territorio nacional, protegidos de las leyes extraterritoriales. -- **Conformidad nativa**: La solución está diseñada para cumplir con los requisitos regulatorios más estrictos (RGPD, HDS, LPM, NIS2, PCI-DSS). -- **Open Source y Reversibilidad**: Al basarnos en estándares abiertos como PostgreSQL Community Server y Patroni, garantizamos la ausencia de dependencia tecnológica (*vendor lock-in*) y la portabilidad total de sus datos. +- **Alojamiento 100% en Francia** : Sus datos permanecen en el territorio nacional, a salvo de leyes extraterritoriales. +- **Conformidad nativa** : La solución está diseñada para satisfacer los requisitos regulatorios más estrictos (RGPD, HDS, LPM, NIS2, PCI-DSS). +- **Código Abierto y Reversibilidad** : Al basarnos en estándares abiertos como PostgreSQL Community Server y Patroni, garantizamos una ausencia de dependencia tecnológica (*vendor lock-in*) y una portabilidad total de sus datos. ## Arquitectura de Alta Disponibilidad: Patroni Cluster -Para entornos distribuidos, nuestro servicio se basa en **Patroni Cluster** para ofrecer alta disponibilidad sin pérdida de datos. +Para entornos distribuidos, nuestro producto se basa en **Patroni Cluster** para ofrecer alta disponibilidad sin pérdida de datos. -- **Replicación Sincrónica**: A diferencia de la replicación asíncrona tradicional, cada transacción se valida en todos los nodos del clúster *antes* de confirmarse. Esto garantiza un **Objetivo de Punto de Recuperación (RPO) de cero**: ningún dato validado puede perderse en caso de fallo. -- **Distribución Multi-AZ**: El clúster está distribuido en tres Zonas de Disponibilidad (AZ) distintas. El fallo de un datacenter completo no provoca ninguna interrupción del servicio ni pérdida de datos. -- **Conmutación Automática**: En caso de incidente en un nodo, el tráfico se redirige automáticamente a los nodos saludables, asegurando un **Objetivo de Tiempo de Recuperación (RTO) mínimo**. +- **Replicación Síncrona** : A diferencia de la replicación asíncrona tradicional, cada transacción se valida en todos los nodos del clúster *antes* de ser confirmada. Esto garantiza un **Objetivo de Punto de Recuperación (RPO) de cero** : ningún dato validado puede perderse en caso de fallo. +- **Distribución Multi-AZ** : El clúster se distribuye en tres Zonas de Disponibilidad (AZ) distintas. La caída de un centro de datos completo no provoca ninguna interrupción del servicio ni pérdida de datos. +- **Conmutación por error automática** : En caso de incidente en un nodo, el tráfico se redirige automáticamente hacia los nodos sanos, garantizando un **Objetivo de Tiempo de Recuperación (RTO) mínimo**. -## Modelos de Implementación +## Modelos de Despliegue Ofrecemos dos modelos para adaptarse a la criticidad de sus cargas de trabajo. @@ -31,87 +31,84 @@ Ofrecemos dos modelos para adaptarse a la criticidad de sus cargas de trabajo. Este modelo despliega una única instancia del motor PostgreSQL. -- **Caso de uso**: Este modelo de implementación es perfectamente adecuado para aplicaciones simples, como CMS, que solo utilizan un único endpoint para conectarse a las bases de datos. -- **Resiliencia**: Aunque se trata de una instancia única, el almacenamiento subyacente se replica en 3 AZ, lo que permite un reinicio automático en otra AZ en caso de fallo de hardware. -- **SLA**: 99,9% (fuera de ventanas de mantenimiento). +- **Caso de uso** : Este modelo de despliegue se adapta perfectamente a aplicaciones simples, como CMS, que utilizan un único endpoint para conectarse a las bases de datos. +- **Resiliencia** : Aunque se trata de una única instancia, el almacenamiento subyacente está replicado en 3 AZ, lo que permite un reinicio automático en otra AZ en caso de fallo de hardware. +- **SLA** : 99.9% (fuera de los períodos de mantenimiento). -### 2. Distributed +### 2. Distribuido -Este modelo despliega un **clúster Patroni de 3 instancias** del motor PostgreSQL, complementado por un proxy **PgBouncer**. +Este modelo despliega un **cluster Patroni de 3 instancias** del motor PostgreSQL, complementado por un proxy **PgBouncer**. -- **Caso de uso**: Este modelo de implementación es perfectamente adecuado para aplicaciones con accesos distribuidos, como aplicaciones de datos o de inteligencia empresarial, que se benefician de acceso de solo lectura sin impacto en la ingesta de datos. -- **Componentes**: - - **3 Nodos PostgreSQL**: Un nodo primario de lectura-escritura (RW) y dos nodos secundarios de solo lectura (RO). - - **Proxy PgBouncer**: Un enrutador inteligente que distribuye las solicitudes. Envía las escrituras al nodo primario y distribuye las lecturas entre los nodos secundarios (*read/write splitting*), optimizando así el rendimiento. -- **SLA**: 99,9% (fuera de ventanas de mantenimiento). +- **Caso de uso** : Este modelo de despliegue es ideal para aplicaciones con acceso distribuido, como las aplicaciones de datos o de inteligencia empresarial, que se benefician de acceso de solo lectura sin afectar la ingesta de datos. +- **Componentes** : + - **3 Nodos PostgreSQL** : Un nodo primario de lectura-escritura (RW) y dos nodos secundarios de solo lectura (RO). + - **Proxy PgBouncer** : Un enrutador inteligente que distribuye las consultas. Envía las escrituras al nodo primario y distribuye las lecturas entre los nodos secundarios (*división de lectura/escritura*), optimizando así el rendimiento. +- **SLA** : 99.9% (hors plages de maintenance). -> **Nota Importante**: No es posible cambiar el modelo de implementación de un clúster existente (por ejemplo, de *StandAlone* a *Distributed*). Esta operación requiere la creación de un nuevo clúster en el modelo deseado, mediante una restauración PiTR. +> **Nota Importante** : No es posible modificar el modelo de despliegue de un cluster existente (por ejemplo, de pasar de *StandAlone* a *Distributed*). Esta operación requiere la creación de un nuevo cluster en el modelo deseado, mediante una restauración PiTR. -## Copia de Seguridad y Restauración (PITR) +## Copia de seguridad y restauración (PITR) -La protección de sus datos está asegurada por una doble estrategia de copias de seguridad. +La protección de sus datos se garantiza mediante una doble estrategia de copia de seguridad. -1. **Copia de Seguridad Física (Point-in-Time Recovery - PITR)**: +1. **Copia de seguridad física (Recuperación en un punto en el tiempo - PITR)** : - Realizamos copias de seguridad físicas completas diarias con `pg_basebackup` (sin interrupción del servicio). - - Los registros de transacciones (*WAL*) se archivan de forma continua. - - Esta combinación permite una restauración "al segundo" hasta el momento justo antes de un incidente. + - Los registros de transacciones (*WAL*) se archivan continuamente. + - Esta combinación permite una restauración "con precisión de segundo" hasta el momento justo antes de un incidente. -2. **Copia de Seguridad Lógica (`pg_dump`)**: +2. **Copia de seguridad lógica (`pg_dump`)** : - También se realizan exportaciones lógicas de las bases de datos. - Ofrecen una granularidad fina para restaurar o exportar una base de datos individual. -Todas las copias de seguridad están cifradas en reposo y almacenadas en nuestro Object Storage S3, él mismo calificado SecNumCloud. +Todas las copias de seguridad están cifradas en reposo y almacenadas en nuestro Object Storage S3, el cual cuenta con la certificación SecNumCloud. ## Seguridad a Múltiples Niveles La seguridad está integrada en cada capa del servicio. -- **Aislamiento de Red**: Las instancias de base de datos **nunca están expuestas en Internet**. El acceso se realiza exclusivamente a través de la red privada del cliente. -- **Cifrado de extremo a extremo**: - - **En tránsito**: Todas las conexiones (cliente a base de datos y entre nodos del clúster) están cifradas en TLS 1.3. - - **En reposo**: Los datos en disco y las copias de seguridad están cifrados en AES-256. -- **Gestión de Acceso**: La autenticación es segura y los derechos se gestionan según el principio de mínimo privilegio. +- **Aislamiento de Red** : Las instancias de base de datos **nunca están expuestas a Internet**. El acceso se realiza exclusivamente a través de la red privada del cliente. +- **Cifrado de extremo a extremo** : + - **En tránsito** : Todas las conexiones (cliente a base de datos y entre los nodos del clúster) están cifradas con TLS 1.3. + - **En reposo** : Los datos en disco y las copias de seguridad están cifradas con AES-256. +- **Gestión de Acceso** : La autenticación es segura y los permisos se gestionan según el principio de menor privilegio. -## Servicio Administrado ("Zero Ops") +## Servicio Gestionado ("Cero Ops") -El objetivo de PostgreSQL Administrado es liberarle de la complejidad operativa. Nuestros equipos se encargan de: +El objetivo de PostgreSQL Gestionado es liberarlo de la complejidad operativa. Nuestros equipos se encargan de: - El aprovisionamiento y la configuración inicial. - La gestión completa del ciclo de vida: actualizaciones menores, aplicación de parches de seguridad. -- La supervisión 24/7 de la infraestructura y el servicio. +- La supervisión 24/7 de la infraestructura y del servicio. - La gestión y verificación de las copias de seguridad. -Esto permite a sus equipos centrarse en el desarrollo de aplicaciones y la explotación de sus datos. +Esto permite que sus equipos se centren en el desarrollo de aplicaciones y en la explotación de sus datos. -## Política de Versiones y Ciclo de Vida +## Política de versiones y ciclo de vida -La comunidad PostgreSQL publica versiones con soporte a largo plazo (LTS), lo que garantiza estabilidad y previsibilidad. Nuestro servicio se basa en estas versiones para asegurar la longevidad de su infraestructura. +La comunidad de PostgreSQL publica versiones con soporte a largo plazo (LTS), lo que garantiza estabilidad y previsibilidad. Nuestro servicio se basa en estas versiones para asegurar la longevidad de su infraestructura. -| Versión | Tipo | Compatible hasta | +| Versión | Tipo | Soporte hasta | | :--- | :--- | :--- | | **PostgreSQL 15** | LTS | Nov 2027 | | **PostgreSQL 16** | LTS | Nov 2028 | -- **Actualizaciones menores**: Los parches de seguridad y las correcciones de errores son aplicados por nuestros equipos en *rolling update* (nodo por nodo) para no causar ninguna interrupción del servicio. -- **Actualizaciones mayores**: Las actualizaciones de versión mayor se planifican en colaboración con usted para alinearse con su calendario. -- **Fin de soporte**: Le notificamos al menos 180 días antes del fin del soporte de una versión LTS para planificar la migración a la siguiente versión. - -## Tamaños de instancias - -Las instancias ***StandAlone*** y ***Distributed*** están disponibles en tamaños predefinidos: - -| Tamaño | vCPU/nodo | RAM/nodo | Conn. Máx | Working Set Máx | BD Total Máx | -| :-- | :-- | :-- | :-- | :-- | :-- | -| **Micro** | 1 | **2.00 Gi** | **40** | **1-2 GiB** | **2-8 GiB** | -| **Small** | 1 | **4.00 Gi** | **80** | **2-5 GiB** | **8-16 GiB** | -| **Medium** | 2 | **4.00 Gi** | **80** | **2-5 GiB** | **8-16 GiB** | -| **Med-Large**| 2 | **8.00 Gi** | **150** | **4-10 GiB** | **16-32 GiB** | -| **Large** | 4 | **8.00 Gi** | **150** | **4-10 GiB** | **16-32 GiB** | -| **X-Large** | 4 | **16.00 Gi** | **250** | **8-20 GiB** | **32-64 GiB** | -| **2X-Large**| 8 | **16.00 Gi** | **250** | **8-20 GiB** | **32-64 GiB** | -| **3X-Large**| 8 | **32.00 Gi** | **500** | **16-40 GiB** | **64-128 GiB** | -| **4X-Large**| 16 | **32.00 Gi** | **500** | **32-80 GiB** | **128-256 GiB** | -| **5X-Large**| 16 | **64.00 Gi** | **500** | **32-80 GiB** | **128-256 GiB** | -| **6X-Large**| 32 | **128.00 Gi**| **500** | **64-160 GiB** | **256-512 GiB** | - -> **Nota**: El almacenamiento se aprovisiona por separado y puede aumentarse en caliente (de 2Gi a 512Gi) (pero no reducirse, excepto recreando una nueva instancia). +- **Actualizaciones menores** : Los parches de seguridad y las correcciones de errores son aplicados por nuestros equipos mediante *rolling update* (nodo por nodo) para no causar ninguna interrupción del servicio. +- **Actualizaciones mayores** : Las actualizaciones mayores se planifican en colaboración con usted para alinearse con su calendario. +- **Fin del soporte** : Le notificamos al menos 180 días antes de la finalización del soporte de una versión LTS para planificar la migración a la siguiente versión. + +## Tamaños de instancia + +Las instancias ***StandAlone*** y ***Distributed*** están disponibles con tamaños predefinidos: + +| Tamaño | vCPU | Memoria | innodb_buffer_pool_size | innodb_buffer_pool_instances | max_allowed_packet | table_open_cache | maxconn | +| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | +| **XS** | 1000m | 4096Mi | 2458M | 2 | 256M | 800 | 80 | +| **S** | 1000m | 8192Mi | 4915M | 4 | 512M | 1600 | 150 | +| **M** | 2000m | 8192Mi | 4915M | 4 | 512M | 1600 | 150 | +| **L** | 2000m | 16384Mi | 9830M | 8 | 1G | 3200 | 250 | +| **XL** | 4000m | 16384Mi | 9830M | 8 | 1G | 3200 | 250 | +| **XXL** | 4000m | 32768Mi | 19660M | 16 | 1G | 6400 | 500 | +| **3XL** | 8000m | 32768Mi | 19660M | 16 | 1G | 6400 | 500 | +| **4XL** | 8000m | 65536Mi | 39320M | 16 | 1G | 10000 | 500 | + +> **Nota** : El almacenamiento se aprovisiona por separado y puede ampliarse en caliente (de 2Gi a 128Gi) (pero no reducirse, excepto recreando una nueva instancia.). \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_postgresql/managed_postgresql.md b/i18n/es/docusaurus-plugin-content-docs/current/managed_postgresql/managed_postgresql.md index b6003c9e..6bb9f4dd 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/managed_postgresql/managed_postgresql.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/managed_postgresql/managed_postgresql.md @@ -1,51 +1,51 @@ --- -title: Descripción general +title: Visión general --- -# PostgreSQL Administrado (vista previa) +# PostgreSQL Gestionado Vista previa

Conceptos

-

Descubra los fundamentos y principios esenciales para dominar nuestra infraestructura.

+

Descubra las bases y principios esenciales para dominar nuestra infraestructura.

Explorar conceptos →

Guía de inicio

Comience rápidamente siguiendo instrucciones claras y sencillas.

- Iniciar Quickstart → + Iniciar el inicio rápido →
--- -### Descripción general +### Resumen > -> Este producto está en versión preliminar y su documentación puede contener errores o aproximaciones. +> Este producto está en versión preliminar y su documentación puede contener errores o imprecisiones. -**PostgreSQL Administrado (on Kubernetes) by Cloud Temple** es una solución de motor de base de datos PostgreSQL administrado, alojado en Kubernetes. Complementa las ofertas de motor de base de datos administrado en máquinas virtuales (denominadas aquí **PostgreSQL Administrado (on IaaS)**) +**PostgreSQL Managé (on Kubernetes) by Cloud Temple** es una solución gestionada del motor de base de datos PostgreSQL, alojada en Kubernetes. Se ofrece como complemento a las ofertas de motores de base de datos gestionados en máquinas virtuales (denominadas aquí **PostgreSQL Managé (on IaaS)**) -Esta oferta es adecuada para clientes que tienen cargas de trabajo de Kubernetes que requieren bases de datos PostgreSQL, o clientes que desean consolidar muchos motores de bases de datos PostgreSQL en un mismo clúster de Kubernetes (agrupación). Es especialmente adecuada para bases de datos de pequeño y mediano tamaño que no requieren ajustes ni características específicas. Para bases de datos de gran tamaño o que requieran un ajuste especial, es preferible optar por la oferta **PostgreSQL Administrado (on IaaS)**, que permite más adaptaciones por parte de nuestros equipos de expertos DBA. +Este producto está diseñado para clientes que tienen cargas de trabajo en Kubernetes que requieren bases de datos PostgreSQL, o para clientes que desean compartir múltiples motores de bases de datos PostgreSQL en un mismo clúster de Kubernetes (compartición). Es especialmente adecuado para bases de datos de pequeño y mediano tamaño que no requieran tuning ni funcionalidades específicas. Para bases de datos de gran tamaño o que requieran un tuning particular, es preferible optar por el producto **PostgreSQL Managé (on IaaS)**, que permite más adaptaciones por parte de nuestros equipos de expertos en DBA. ### Beneficios Clave -- **Soberanía y Reversibilidad**: La solución se basa exclusivamente en estándares de código abierto para evitar cualquier dependencia tecnológica y garantizar la portabilidad de sus aplicaciones. -- **Simplicidad y delegación**: La solución permite delegar a Cloud-Temple la gestión de los motores de bases de datos, en particular: actualizaciones y copias de seguridad. +- **Soberanía y Reversibilidad** : La solución se basa exclusivamente en estándares de código abierto para evitar cualquier dependencia tecnológica y garantizar la portabilidad de sus aplicaciones. +- **Simplicidad y delegación** : La solución permite delegar en Cloud-Temple la gestión de los motores de bases de datos, en particular : actualizaciones y copias de seguridad. -## Modelos de Implementación +## Modelos de Despliegue -Ofrecemos dos modelos de implementación para satisfacer sus necesidades: ***StandAlone*** o ***Distributed***. +Ofrecemos dos modelos de despliegue para satisfacer sus necesidades: ***Independiente*** o ***Distribuido***. ### StandAlone El modelo ***StandAlone*** despliega una única instancia del motor PostgreSQL en una infraestructura multi-AZ. -El almacenamiento utilizado por esta instancia se replica en 3 zonas de disponibilidad (AZ), y permite el reinicio automático de la instancia PostgreSQL en otra AZ en caso de fallo. +El almacenamiento utilizado por esta instancia se replica en 3 AZ y permite el reinicio automático de la instancia PostgreSQL en otra AZ en caso de fallo. -- **Caso de uso**: Este modelo de implementación es perfectamente adecuado para aplicaciones simples, como CMS, que solo utilizan un único endpoint para conectarse a las bases de datos. -- **Puntos clave**: - - 1 instancia de motor de base de datos - - almacenamiento distribuido en 3 AZ para recuperación automática en caso de fallo +- **Caso de uso** : Este modelo de despliegue es ideal para aplicaciones simples, como CMS, que utilizan un único endpoint para conectarse a las bases de datos. +- **Puntos clave** : + - 1 instancia del motor de base de datos + - almacenamiento distribuido en 3 AZ para una recuperación automática en caso de fallo - copias de seguridad físicas y lógicas - SLA 99,9 % (fuera de ventanas de mantenimiento) @@ -53,31 +53,31 @@ El almacenamiento utilizado por esta instancia se replica en 3 zonas de disponib El modelo ***Distributed*** despliega un clúster de 3 instancias del motor PostgreSQL, con Patroni en modo "single primary" y PgBouncer: -- un endpoint PgBouncer permite el enrutamiento a las diferentes instancias según el tipo de solicitud (lectura o escritura). +- un endpoint de PgBouncer permite el enrutamiento hacia las distintas instancias según el tipo de consulta (read o write). - la instancia de lectura-escritura (RW) es accesible a través de un endpoint específico. - Las instancias de solo lectura (RO) son accesibles a través de otro endpoint específico. -Así, las aplicaciones pueden elegir usar conexiones RW o RO, o dejar que PgBouncer enrute por sí mismo hacia los endpoints más adecuados. +De este modo, las aplicaciones pueden optar por utilizar conexiones RW o RO, o dejar que PgBouncer enrute automáticamente hacia los endpoints más adecuados. -- **Caso de uso**: Este modelo de implementación es perfectamente adecuado para aplicaciones con accesos distribuidos, como aplicaciones de datos o de inteligencia empresarial, que se benefician de acceso de solo lectura sin impacto en la ingesta de datos. -- **Puntos clave**: - - 3 instancias de motor de base de datos con Patroni en modo "single primary" - - Proxy PgBouncer para un enrutamiento eficiente de consultas. - - almacenamiento distribuido en 3 AZ para recuperación automática en caso de fallo - - copias de seguridad PiTR y Lógicas - - SLA 99,9 % (fuera de ventanas de mantenimiento) +- **Caso de uso** : Este modelo de despliegue es ideal para aplicaciones con accesos distribuidos, como las aplicaciones de datos o de inteligencia empresarial, que se benefician de accesos de solo lectura sin afectar la ingesta de datos. +- **Puntos clave** : + - 3 instancias del motor de base de datos con Patroni en modo "single primary" + - Proxy PgBouncer para un enrutamiento eficiente de las consultas. + - almacenamiento distribuido en 3 AZ para una recuperación automática en caso de fallo + - copias de seguridad PiTR y lógicas + - SLA 99.9 % (fuera de las ventanas de mantenimiento) -### Características comunes +### Funcionalidades comunes #### Versiones -Los motores PostgreSQL se pueden elegir entre todas las versiones compatibles (actualmente de la 14 a la 18) [Ver "política de versiones" en el sitio web oficial de PostgreSQL](https://www.postgresql.org/support/versioning/) +Los motores de PostgreSQL pueden elegirse entre todas las versiones compatibles (actualmente de la 14 a la 18) [Consulte la "política de versionado" en el sitio oficial de PostgreSQL](https://www.postgresql.org/support/versioning/) #### Copia de seguridad Se implementan 2 tipos de copias de seguridad: -- Point in Time Restoration (PiTR): copia de seguridad física diaria del motor completo y sus registros de transacciones (WAL), que permite restaurar todo el servidor a una fecha anterior precisa sin perder transacciones. -- Copia de seguridad lógica (pg_dump): exportaciones lógicas de bases de datos, para restauración/exportación individual por base de datos. +- Restauración en un punto en el tiempo (PiTR) : copia de seguridad física diaria de todo el motor y sus registros de transacciones (WAL), que permite restaurar todo el servidor a una fecha concreta anterior sin pérdida de transacciones. +- Copia de seguridad lógica (pg_dump) : exportaciones lógicas de las bases de datos, para una restauración/exportación individual por base de datos. -Todas las copias de seguridad utilizan el almacenamiento S3 de Cloud-Temple (calificado SNC) con cifrado en reposo. +Todas las copias de seguridad utilizan el almacenamiento S3 Cloud-Temple (cualificado SNC) con cifrado at-rest. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_postgresql/quickstart.md b/i18n/es/docusaurus-plugin-content-docs/current/managed_postgresql/quickstart.md index 77d78679..6ae9de67 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/managed_postgresql/quickstart.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/managed_postgresql/quickstart.md @@ -1,24 +1,24 @@ ---- -title: Guía de inicio ---- - -Bienvenido a la guía de inicio de **PostgreSQL Administrado** de Cloud Temple. - -El objetivo de esta sección es orientarle hacia los recursos necesarios para comenzar a utilizar su producto. - ---- - -## Antes de comenzar - -> en proceso de redacción ---- - -## Acceso a su clúster de PostgreSQL Administrado - -> en proceso de redacción ---- - -## Sus permisos - -> en proceso de redacción ---- +--- +title: Guía de inicio +--- + +Bienvenido a la guía de inicio de **PostgreSQL Gestionado** Cloud Temple. + +El objetivo de esta sección es orientarle hacia los recursos necesarios para comenzar a utilizar su producto. + +--- + +## Antes de comenzar + +> en redacción +--- + +## Acceder a su clúster de PostgreSQL administrado + +> en redacción +--- + +## Sus permisos + +> en redacción +--- \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managedproducts_overview.md b/i18n/es/docusaurus-plugin-content-docs/current/managedproducts_overview.md index 38e0ffd0..d919ad95 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/managedproducts_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/managedproducts_overview.md @@ -1,43 +1,43 @@ --- -title: Visión general de los productos gestionados +title: Visión general de las ofertas de productos gestionados --- ## ¿Qué es un producto gestionado? -Los productos gestionados en Cloud Temple son servicios cloud completamente operados por el proveedor, permitiendo a los clientes centrarse en sus aplicaciones sin tener que gestionar la infraestructura subyacente. +Los productos gestionados en Cloud Temple son servicios cloud completamente administrados por el proveedor, lo que permite a los clientes centrarse en sus aplicaciones sin gestionar la infraestructura subyacente. -Estos productos incluyen soluciones como Managed Kubernetes, Managed MariaDB, Managed PostgreSQL, Managed Firewall o Managed SOC, donde Cloud Temple se encarga de la configuración, supervisión, mantenimiento y escalabilidad. +Estos productos incluyen soluciones como Kubernetes gestionado, MariaDB gestionado, PostgreSQL gestionado, Firewall gestionado o SOC gestionado, donde Cloud Temple se encarga de la configuración, la supervisión, el mantenimiento y la escalabilidad. -Se basan en una infraestructura soberana con certificación SecNumCloud, con alta disponibilidad (multi-AZ), automatización y soporte respaldado por SLA. +Se basan en una infraestructura soberana certificada SecNumCloud, con alta disponibilidad (multi-AZ), automatización y soporte SLA. **Ventajas clave** -- Liberación operacional: Cloud Temple gestiona el plano de control, las copias de seguridad, la seguridad y las actualizaciones, simplificando la orquestación para sus despliegues. +- Liberación de operaciones: Cloud Temple gestiona el plano de control, las copias de seguridad, la seguridad y las actualizaciones, simplificando la orquestación para sus despliegues. - Estándares del mercado: productos simples, reconocidos, probados y de código abierto. -## Nuestra cartera de productos gestionados +## Nuestro portafolio de productos gestionados ### Bases de datos gestionadas -- **Managed MariaDB (on Kubernetes)**: una solución de motor de base de datos MariaDB que funciona "on-top" de nuestras ofertas *Managed Kubernetes* / *Managed Core Kubernetes*. [Ver la ficha](./managed_mariadb) +- **MariaDB gestionado (en Kubernetes)** : una solución de motor de base de datos MariaDB que funciona "on-top" sobre nuestros servicios *Kubernetes gestionado* / *Core Kubernetes gestionado*. [Ver la ficha](./managed_mariadb) -- **Managed PostgreSQL (on Kubernetes)**: una solución de motor de base de datos PostgreSQL que funciona "on-top" de nuestras ofertas *Managed Kubernetes* / *Managed Core Kubernetes*. [Ver la ficha](./managed_postgresql). +- **PostgreSQL gestionado (en Kubernetes)** : una solución de motor de base de datos PostgreSQL que funciona "on-top" sobre nuestros servicios *Kubernetes gestionado* / *Core Kubernetes gestionado*. [Ver la ficha](./managed_postgresql). -- **Managed MongoDB (on Kubernetes)**: una solución de motor de base de datos MongoDB que funciona "on-top" de nuestras ofertas *Managed Kubernetes* / *Managed Core Kubernetes*. (documentación en curso de elaboración) +- **MongoDB gestionado (en Kubernetes)** : una solución de motor de base de datos MongoDB que funciona "on-top" sobre nuestros servicios *Kubernetes gestionado* / *Core Kubernetes gestionado*. (documentación en proceso de elaboración) -### Productos para datos +### Productos de datos -- **Managed Kafka (on Kubernetes)**: Una solución Apache Kafka con schema registry que funciona "on-top" de nuestras ofertas *Managed Kubernetes* / *Managed Core Kubernetes*. (documentación en curso de elaboración) +- **Kafka gestionado (on Kubernetes)** : Una solución Apache Kafka, con schema registry que funciona "on-top" de nuestras ofertas *Kubernetes gestionado* / *Core Kubernetes gestionado*. (documentation en cours de réalisation) -- **Managed Airflow**: *¡próximamente!* +- **Airflow gestionado** : *¡llegará próximamente!* -- **Managed Superset**: *¡próximamente!* +- **Superset gestionado** : *¡llegará próximamente!* ### Productos de seguridad -- **Managed KMS**: *¡próximamente!* +- **KMS gestionado** : *disponible próximamente!* -- **Managed SIEM**: *¡próximamente!* +- **SIEM gestionado** : *disponible próximamente!* ---- +--- \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/market_place_public.md b/i18n/es/docusaurus-plugin-content-docs/current/market_place_public.md index e3814e11..3b1428b3 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/market_place_public.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/market_place_public.md @@ -9,10 +9,10 @@ tags: ## Plataformas de compra
-

¿Eres un actor del sector público? La oferta IaaS Cloud Temple está disponible a través de:

+

¿Es usted un actor del sector público? El producto IaaS Cloud Temple es accesible a través de:

@@ -32,4 +32,4 @@ tags: Más información → -
+
\ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/marketplace/concepts.md b/i18n/es/docusaurus-plugin-content-docs/current/marketplace/concepts.md index f1c44c9b..bd60a80b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/marketplace/concepts.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/marketplace/concepts.md @@ -2,60 +2,64 @@ title: Conceptos --- -La **Marketplace Cloud Temple** es una plataforma centralizada que facilita el acceso y despliegue de soluciones cloud listas para usar en un entorno soberano y seguro. - ---- +La **Marketplace Cloud Temple** es una plataforma centralizada que facilita el acceso y el despliegue de soluciones cloud listas para usar en un entorno soberano y seguro. ## Definición y posicionamiento -La Marketplace Cloud Temple se posiciona como un impulso para la transformación digital de las empresas que buscan servicios fiables, alojados en Europa, con una integración sencilla y rápida. +La Marketplace Cloud Temple se posiciona como una palanca de transformación digital para las empresas que buscan servicios fiables, alojados en Europa, con una integración sencilla y rápida. Permite: -- **Centralizar** el acceso a las soluciones validadas por socios -- **Simplificar** el despliegue de entornos en la nube +- **Centralizar** el acceso a las soluciones de partners validadas +- **Simplificar** el despliegue de entornos cloud - **Acelerar** la implementación de proyectos digitales -- **Garantizar** la conformidad y seguridad de los despliegues +- **Garantizar** el cumplimiento y la seguridad de los despliegues + +--- ## Tipos de soluciones disponibles -### Virtual Machine Images +### Imágenes de máquinas virtuales -Virtual machine images are the current core of the Marketplace offering. These pre-configured images enable rapid deployment of standardized environments. +Las imágenes de máquinas virtuales constituyen el núcleo actual del producto Marketplace. Estas imágenes preconfiguradas permiten un despliegue rápido de entornos estandarizados. -**Features:** +**Características :** -- Validated and secure images -- Compatible with OpenIaaS and VMware environments -- Deployment in under 10 minutes -- Native integration with the Cloud Temple console +- Imágenes validadas y seguras +- Compatible con los entornos OpenIaaS y VMware +- Despliegue en menos de 10 minutos +- Integración nativa con la consola Cloud Temple ### Soluciones de socios -La Marketplace también ofrece acceso a soluciones desarrolladas por nuestros socios editores, cubriendo diversos ámbitos de actividad. +La Marketplace también ofrece acceso a soluciones desarrolladas por nuestros partners editores, que cubren diferentes áreas de actividad. -**Proceso de acceso:** +**Proceso de acceso :** - Consulta del catálogo desde la consola -- Contacto directo con el socio +- Puesta en contacto directa con el socio - Despliegue en la infraestructura Cloud Temple +--- + ## Integración con el ecosistema Cloud Temple -### Cloud Temple Console +### Consola Cloud Temple -La Marketplace está integrada nativamente en la consola Cloud Temple, ofreciendo: +El Marketplace está integrado de forma nativa en la consola Cloud Temple, ofreciendo: - **Acceso unificado** desde la interfaz de gestión habitual - **Despliegue directo** en las infraestructuras existentes -- **Gestión centralizada** de recursos y soluciones +- **Gestión centralizada** de los recursos y soluciones -### Compatibility with services +### Compatibilidad con los servicios -The solutions from the Marketplace are designed to seamlessly integrate with: +Las soluciones del Marketplace están diseñadas para integrarse armoniosamente con: -- **OpenSource IaaS**: Deployment on OpenIaaS infrastructure -- **VMware IaaS**: Integration with the vSphere environment +- **IaaS OpenSource** : Despliegue en infraestructura OpenIaaS +- **IaaS VMware** : Integración con el entorno vSphere + +--- ## Seguridad y cumplimiento @@ -63,13 +67,13 @@ The solutions from the Marketplace are designed to seamlessly integrate with: Todas las soluciones desplegadas a través de la Marketplace cuentan con: -- **Alojamiento exclusivamente en Francia** +- **Alojamiento en Francia** exclusivamente - **Certificación SecNumCloud** de la infraestructura -### Validación de las soluciones +### Validación de soluciones -Las soluciones propuestas en la Marketplace están sujetas a una selección rigurosa que garantiza: +Las soluciones ofrecidas en el Marketplace son objeto de una selección rigurosa que garantiza: - **Compatibilidad** con la infraestructura Cloud Temple - **Seguridad** de las imágenes y aplicaciones -- **Fiabilidad** de los editores socios +- **Fiabilidad** de los socios editores \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/marketplace/marketplace.md b/i18n/es/docusaurus-plugin-content-docs/current/marketplace/marketplace.md index b720b65f..6ef394ac 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/marketplace/marketplace.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/marketplace/marketplace.md @@ -2,26 +2,28 @@ title: Visión general --- -La __Marketplace Cloud Temple__ ofrece un acceso simplificado a las soluciones cloud esenciales y a los mejores software de nuestros editores asociados, desplegados en unos pocos clics en un entorno seguro. +# Marketplace -Esta plataforma soberana centraliza soluciones cloud listas para usar, permitiendo a las empresas desplegar rápidamente servicios adaptados a sus necesidades, desde las bases de la infraestructura hasta las aplicaciones empresariales avanzadas. +La __Marketplace Cloud Temple__ ofrece un acceso simplificado a las soluciones cloud esenciales y al mejor software de nuestros editores socios, desplegados en unos pocos clics en un entorno seguro. -Al colaborar con una red de socios tecnológicos reconocidos, Cloud Temple garantiza una selección rigurosa de productos previamente validados, fiables y compatibles con los entornos existentes. La navegación fluida, las fichas detalladas y el acceso directo a los proveedores facilitan las decisiones y aceleran los despliegues en un marco soberano y seguro. +Esta plataforma soberana centraliza soluciones Cloud listas para usar, permitiendo a las empresas desplegar rápidamente servicios adaptados a sus necesidades, desde los cimientos de la infraestructura hasta las aplicaciones empresariales avanzadas. + +Al colaborar con una red de socios tecnológicos reconocidos, Cloud Temple garantiza una selección rigurosa de productos prevalidados, fiables y compatibles con los entornos existentes. La navegación fluida, las fichas detalladas y el acceso directo a los proveedores facilitan la toma de decisiones y aceleran los despliegues en un marco soberano y seguro.

Conceptos

-

Descubra las bases y principios esenciales para comprender y utilizar la Marketplace.

+

Descubra los fundamentos y principios esenciales para comprender y utilizar la Marketplace.

Explorar los conceptos →

Inicio rápido

Comience rápidamente con la Marketplace siguiendo instrucciones claras y sencillas.

- Iniciar el inicio rápido → + Iniciar el Quickstart →
-
+

Tutoriales

Aprenda paso a paso a utilizar la Marketplace con guías detalladas.

Descubrir los tutoriales →
-
+
\ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/marketplace/quickstart.md b/i18n/es/docusaurus-plugin-content-docs/current/marketplace/quickstart.md index 8af7640e..684ff1d1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/marketplace/quickstart.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/marketplace/quickstart.md @@ -4,73 +4,81 @@ title: Guía de inicio import marketplaceCatalog from '@site/docs/marketplace/images/marketplace_catalog.png' import marketplaceSolutionDetails from '@site/docs/marketplace/images/marketplace_solution_details.png' -# QuickStart para la Marketplace Cloud Temple +# QuickStart para el Marketplace Cloud Temple -Esta página le guiará a través de los pasos iniciales para utilizar la **Marketplace Cloud Temple** desde la consola. Siga estas instrucciones para descubrir las soluciones disponibles y desplegarlas rápidamente. +Esta página le guía a través de los pasos iniciales para utilizar el **Marketplace Cloud Temple** desde la consola. Siga estas instrucciones para descubrir las soluciones disponibles y desplegarlas rápidamente. --- -## Requis previos +## Requisitos previos -Antes de comenzar, asegúrese de cumplir los siguientes puntos: +Antes de comenzar, asegúrese de lo siguiente: -1. **Suscripción activa**: Para permitir despliegues, su organización debe tener suscrito al menos un servicio Cloud Temple (IaaS OpenSource o IaaS VMware). En el marco del contacto con nuestros socios, no necesita una suscripción específica. -2. **Permisos de usuario**: Su cuenta de usuario debe contar con los permisos necesarios para acceder a la consola y con permisos de escritura en los entornos de destino cuando desee desplegar recursos. -3. **Entorno de destino**: Disponer de un tenant configurado para el despliegue de soluciones. +1. **Suscripción activada** : Para permitir los despliegues, su organización debe haber suscrito al menos un servicio de Cloud Temple (IaaS OpenSource o IaaS VMware). En el marco de contacto con nuestros socios, no necesita una suscripción específica. +2. **Permisos de usuario** : Su cuenta de usuario debe contar con los permisos necesarios para acceder a la consola y derechos de escritura en los entornos objetivo cuando desee desplegar recursos en ellos. +3. **Entorno objetivo** : Contar con un tenant configurado para el despliegue de soluciones. + +--- ## Acceso a la Marketplace -### 1. Access from the Console +### 1. Acceso desde la consola -Once logged into the Cloud Temple console, you can access the Marketplace in several ways: +Una vez conectado a la consola Cloud Temple, puede acceder al Marketplace de varias formas: -- **Main menu**: A **Marketplace** menu is available in the main navigation -- **Virtual machines pages**: The Marketplace is also accessible from the virtual machine creation pages in OpenIaaS and VMware environments +- **Menú principal** : Un menú **Marketplace** está disponible en la navegación principal +- **Páginas de máquinas virtuelles** : El Marketplace también es accesible desde las páginas de creación de máquinas virtuelles en los entornos OpenIaaS y VMware ### 2. Página Marketplace La página Marketplace presenta un catálogo de las soluciones disponibles. Cada solución muestra: -- **Nombre y logotipo** de la solución -- **Descripción breve** -- **Editor/Partner** -- **Tipo de solución** (Imagen de VM, Solución SaaS, etc.) +- **Nombre y logo** de la solución +- **Descripción breve** +- **Editor/Partner** +- **Tipo de solución** (Imagen VM, Solución SaaS, etc.) -## Viewing solution details +--- + +## Consulta de los detalles de una solución ### Acceso a la información detallada -Al hacer clic en una solución, accedes a una página de detalles que incluye: +Al hacer clic en una solución, accede a una página de detalles que incluye: - **Descripción completa** de la solución -- **Especificaciones técnicas** (si procede) -- **Requisitos previos** para el despliegue +- **Especificaciones técnicas** (si aplica) +- **Requisitos** de despliegue - **Documentación** proporcionada por el editor - **Opciones de despliegue** disponibles +--- + ## Acciones disponibles -Según el tipo de solución, están disponibles distintas acciones: +Según el tipo de solución, se pueden realizar diferentes acciones: -### Deployment of virtual machine images +### Despliegue de imágenes de máquinas virtuales -For solutions compatible with your OpenIaaS or VMware environments, you can deploy directly from the Marketplace. +Para las soluciones compatibles con sus entornos OpenIaaS o VMware, puede desplegar directamente desde el Marketplace. -**Important note:** Direct deployment is only available for images that include your environment in their compatible targets. +**Nota importante:** El despliegue directo solo está disponible para las imágenes que incluyen su entorno en sus destinos compatibles. -**Detailed guides:** +**Guías detalladas:** -- [How to deploy an image on OpenIaaS?](tutorials/deploy_openiaas) -- [How to deploy an image on VMware?](tutorials/deploy_vmware) +- [¿Cómo desplegar una imagen en OpenIaaS?](tutorials/deploy_openiaas) +- [¿Cómo desplegar una imagen en VMware?](tutorials/deploy_vmware) ### Contacto con los socios -Para soluciones que requieran una conexión directa, puede ponerse en contacto directamente con el socio editor. +Para las soluciones que requieran intermediación, puede contactar directamente con el socio editor. + +**Guía detallada :** -**Guía detallada:** +- [¿Cómo contactar a un socio?](tutorials/contact_partner) -- [Cómo contactar a un socio?](tutorials/contact_partner) +--- \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/marketplace/tutorials/contact_partner.md b/i18n/es/docusaurus-plugin-content-docs/current/marketplace/tutorials/contact_partner.md index cde25543..a88ffa68 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/marketplace/tutorials/contact_partner.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/marketplace/tutorials/contact_partner.md @@ -1,43 +1,43 @@ --- -title: Contactar a un socio +title: Contactar con un socio --- import marketplaceContactAccess from '@site/docs/marketplace/images/marketplaceContactAccess.png' import marketplaceContactConfirm from '@site/docs/marketplace/images/marketplaceContactConfirm.png' import marketplaceContactEmail from '@site/docs/marketplace/images/marketplaceContactEmail.png' -Este tutorial le guiará para ponerse en contacto con un socio editor a través de la Marketplace Cloud Temple. +Este tutorial le guía para ponerse en contacto con un socio editor a través de la Marketplace Cloud Temple. ## Contexto de uso Utilice esta funcionalidad cuando: -- La solución requiera una conexión con el socio +- La solución requiere una conexión con el socio - Desea obtener información adicional -- La solución no sea directamente desplegable (sin imagen de VM) +- La solución no se puede desplegar directamente (pas de VM Image) ## Pasos de contacto ### 1. Acceso al formulario -Desde la página de detalle de una solución de socio, haga clic en **Contactar al socio**: +Desde la página de detalles de una solución de partner, haga clic en **Contactar al partner** : ### 2. Envío de la solicitud -Valide y envíe su solicitud de contacto: +Valide y envíe su solicitud de contacto : Recibirá una confirmación por correo electrónico del envío de su solicitud. -### 3. Relación +### 3. Puesta en contacto -El socio recibirá automáticamente un correo electrónico con sus datos: +El socio recibirá automáticamente un correo electrónico con su información : -**Ejemplo de correo enviado al socio:** +**Ejemplo de correo electrónico enviado al socio :** ## Buenas prácticas -- **Sé preciso** en la descripción de tu necesidad -- **Indica el contexto** de uso previsto -- **Menciona tus restricciones** técnicas o regulatorias +- **Sea preciso** en la descripción de su necesidad +- **Indique el contexto** de uso previsto +- **Mencione sus restricciones** técnicas o regulatorias \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_openiaas.md b/i18n/es/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_openiaas.md index 700bb51c..271bc714 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_openiaas.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_openiaas.md @@ -1,50 +1,60 @@ --- -title: Customizar una imagen OpenIaaS +title: Personalizar una imagen OpenIaaS --- import marketplaceOpenIaasExportTemplate from '@site/docs/marketplace/images/marketplace_openiaas_export_template.png' import marketplaceOpenIaasExportTemplateButton from '@site/docs/marketplace/images/marketplace_openiaas_export_template_button.png' -import marketplaceOpenIaasDeployFromTemplate from '@site/docs/marketplace/images/marketplace_openiaas_deploy_from_template.png' +import marketplaceOpeniaasDeployFromTemplate from '@site/docs/marketplace/images/marketplace_openiaas_deploy_from_template.png' -Este tutorial explica cómo personalizar una imagen de máquina virtual (VMI) OpenIaaS proporcionada por la Marketplace para crear sus propios modelos reutilizables. +Este tutorial explica cómo personalizar una imagen de máquina virtual (VMI) de OpenIaaS proporcionada por el Marketplace para crear sus propios modelos reutilizables. ### Principio general -La Marketplace proporciona sistemas operativos (OS) genéricos. El despliegue desde la Marketplace le ofrece una base sólida, desplegable rápidamente y fácilmente, evitándole cargas manuales y acelerando sus despliegues. +El Marketplace proporciona sistemas operativos (SO) genéricos. El despliegue desde el marketplace le ofrece una base sólida, de implementación rápida y sencilla, evitando subidas manuales y agilizando sus despliegues. -Una vez desplegada la imagen, se convierte en una máquina virtual que puede configurar. A continuación, puede exportarla como un modelo reutilizable por todos los usuarios de su inquilino. +Una vez desplegada la imagen, se convierte en una máquina virtual que puede configurar. Posteriormente, puede exportarla como un modelo reutilizable por todos los usuarios de su tenant. + +--- ## Pasos de personalización -1. **Desplegar la imagen base** desde la Marketplace. +1. **Desplegar la imagen** base desde el Marketplace. 2. **Configurar la máquina virtual** según sus necesidades. -3. **Crear un modelo** a partir de la máquina virtual configurada. -4. **Desplegar una nueva máquina virtual** desde su modelo personalizado. +3. **Crear una plantilla** a partir de la máquina virtual configurada. +4. **Desplegar una nueva máquina virtual** desde su plantilla personalizada. + +--- ### Paso 1: Desplegar la imagen base Siga el tutorial [Desplegar una imagen en OpenIaaS](./deploy_openiaas.md) para comenzar. +--- + ### Paso 2: Configurar la máquina virtual Una vez desplegada la máquina virtual, configúrela según sus necesidades (instalación de software, configuración de seguridad, etc.). -### Step 3: Create a template from the virtual machine +--- + +### Paso 3: Crear una plantilla a partir de la máquina virtual -1. From your list of virtual machines, select the configured virtual machine. -2. Select **"Export"** from the action bar. -3. Follow the steps in the Console to export the template. +1. Desde la lista de sus máquinas virtuales, seleccione la máquina virtual configurada. +2. Seleccione **"Exportar"** desde la barra de acciones. +3. Siga los pasos de la Consola para exportar la plantilla. -### Step 4: Deploy from your new template +--- + +### Paso 4 : Desplegar desde su nuevo modelo -You can deploy from the **Catalog** page or from the **Virtual Machines** page. +Puede desplegar desde la página "Catálogo" o desde la página "Máquinas Virtuales". -To deploy from the **Virtual Machines** page: +Para desplegar desde la página **Máquinas Virtuales** : -1. Click on **"Create a virtual machine"**. -2. Choose **"Deploy from a template"**. -3. Select your new template from the list. +1. Haga clic en **"Crear una máquina virtual"**. +2. Elija **"Desplegar desde un modelo"**. +3. Seleccione su nuevo modelo en la lista. - + \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_vmware.md b/i18n/es/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_vmware.md index 7cec9307..e87102f4 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_vmware.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_vmware.md @@ -1,50 +1,60 @@ --- -title: Customizar una imagen de VMware +title: Personalizar una imagen de VMware --- import marketplaceVMwareExportTemplate from '@site/docs/marketplace/images/marketplace_vmware_export_template.png' import marketplaceVMwareExportTemplateButton from '@site/docs/marketplace/images/marketplace_vmware_export_template_button.png' import marketplaceVMwareDeployFromTemplate from '@site/docs/marketplace/images/marketplace_vmware_deploy_from_template.png' -Este tutorial explica cómo personalizar una imagen de máquina virtual (VMI) de VMware proporcionada por Marketplace para crear sus propios modelos reutilizables. +Este tutorial explica cómo personalizar una imagen de máquina virtual (VMI) de VMware proporcionada por el Marketplace para crear sus propios modelos reutilizables. ### Principio general -La Marketplace proporciona sistemas operativos (OS) genéricos. El despliegue desde la Marketplace le ofrece una base sólida, desplegable rápidamente y fácilmente, evitándole cargas manuales y acelerando sus despliegues. +El Marketplace proporciona sistemas operativos (SO) genéricos. El despliegue desde el marketplace le ofrece una base sólida, de implementación rápida y sencilla, evitando subidas manuales y agilizando sus despliegues. -Una vez desplegada la imagen, se convierte en una máquina virtual que puede configurar. A continuación, puede exportarla como un modelo reutilizable por todos los usuarios de su inquilino. +Una vez desplegada la imagen, se convierte en una máquina virtual que puede configurar. Posteriormente, puede exportarla como un modelo reutilizable por todos los usuarios de su tenant. + +--- ## Pasos de personalización -1. **Desplegar la imagen base** desde la Marketplace. +1. **Desplegar la imagen** base desde el Marketplace. 2. **Configurar la máquina virtual** según sus necesidades. -3. **Crear un modelo** a partir de la máquina virtual configurada. -4. **Desplegar una nueva máquina virtual** desde su modelo personalizado. +3. **Crear una plantilla** a partir de la máquina virtual configurada. +4. **Desplegar una nueva máquina virtual** desde su plantilla personalizada. + +--- ### Paso 1: Desplegar la imagen base Siga el tutorial [Desplegar una imagen en VMware](./deploy_vmware.md) para comenzar. +--- + ### Paso 2: Configurar la máquina virtual Una vez desplegada la máquina virtual, configúrela según sus necesidades (instalación de software, configuración de seguridad, etc.). -### Step 3: Create a template from the virtual machine +--- + +### Paso 3: Crear una plantilla a partir de la máquina virtual -1. From your list of virtual machines, select the configured virtual machine. -2. Select **"Export"** from the action bar. -3. Follow the steps in the Console to export the template. +1. Desde la lista de sus máquinas virtuales, seleccione la máquina virtual configurada. +2. Seleccione **"Exportar"** desde la barra de acciones. +3. Siga los pasos de la Consola para exportar la plantilla. -### Step 4: Deploy from your new template +--- + +### Paso 4 : Desplegar desde su nuevo modelo -You can deploy from the **Catalog** page or from the **Virtual Machines** page. +Puede desplegar desde la página "Catálogo" o desde la página "Máquinas Virtuales". -To deploy from the **Virtual Machines** page: +Para desplegar desde la página **Máquinas Virtuelles** : -1. Click on **"Create a virtual machine"**. -2. Choose **"Deploy from a template"**. -3. Select your new template from the list. +1. Haga clic en **"Crear una máquina virtual"**. +2. Seleccione **"Desplegar desde un modelo"**. +3. Seleccione su nuevo modelo en la lista. - + \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_openiaas.md b/i18n/es/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_openiaas.md index 422bc2be..bb361a0c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_openiaas.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_openiaas.md @@ -4,24 +4,24 @@ title: Desplegar una imagen en OpenIaaS import marketplaceOpeniaasDeployment from '@site/docs/marketplace/images/marketplace_openiaas_deploy.png' import marketplaceOpeniaasConfig from '@site/docs/marketplace/images/marketplace_openiaas_config.png' -Este tutorial le guiará para desplegar una imagen de máquina virtual desde la Marketplace Cloud Temple hacia su entorno OpenIaaS. +Este tutorial le guía para desplegar una imagen de máquina virtual desde el Marketplace Cloud Temple hacia su entorno OpenIaaS. -## Requis +## Requisitos - Disponer de un entorno OpenIaaS configurado -- Tener permisos de creación de máquinas virtuales -- La imagen debe tener **OpenIaaS** en sus destinos compatibles +- Contar con los permisos para crear máquinas virtuales +- La imagen debe tener **OpenIaaS** en sus objetivos compatibles ## Pasos de despliegue ### 1. Selección y despliegue -Desde la página de detalle de una solución compatible con OpenIaaS, seleccione su entorno objetivo y haga clic en **Desplegar**: +Desde la página de detalles de una solución compatible con OpenIaaS, seleccione su entorno de destino y haga clic en **Desplegar** : ### 2. Configuración de la máquina virtual -Configure los parámetros básicos de su máquina virtual: +Configure los parámetros básicos de su máquina virtual : - **Nombre** de la VM - **Recursos** (CPU, RAM) @@ -30,19 +30,19 @@ Configure los parámetros básicos de su máquina virtual: -El despliegue generalmente se realiza en menos de 10 minutos, según el tamaño de la imagen. +El despliegue generalmente se realiza en menos de 10 minutos según el tamaño de la imagen. ## Acceso alternativo -También puede acceder directamente a las imágenes de Marketplace desde la página **Máquinas Virtuales** de su entorno OpenIaaS: +También puede acceder a las imágenes del Marketplace directamente desde la página **Máquinas Virtuales** de su entorno OpenIaaS: -1. Vaya a **Máquinas Virtuales** > **Crear una VM** -2. Seleccione **Imágenes de Marketplace** en las opciones de origen +1. Acceda a **Máquinas Virtuales** > **Crear una VM** +2. Seleccione **Imágenes del Marketplace** en las opciones de origen 3. Elija su solución en el catálogo integrado ## Seguimiento del despliegue Una vez iniciado el despliegue: -- Siga el avance desde la consola OpenIaaS -- La VM aparecerá en su lista de máquinas virtuales +- Siga el progreso desde la consola de OpenIaaS +- La VM aparecerá en su lista de máquinas virtuales \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_vmware.md b/i18n/es/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_vmware.md index 37035ba0..13405a79 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_vmware.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_vmware.md @@ -1,22 +1,22 @@ --- -title: Deploy an image on VMware +title: Desplegar una imagen en VMware --- import marketplaceVmwareDeployment from '@site/docs/marketplace/images/marketplace_vmware_deploy.png' import marketplaceVmwareConfig from '@site/docs/marketplace/images/marketplace_vmware_config.png' -This tutorial guides you through deploying a virtual machine image from the Cloud Temple Marketplace to your VMware environment. +Este tutorial le guía para desplegar una imagen de máquina virtual desde el Marketplace Cloud Temple hacia su entorno VMware. -## Requis +## Requisitos -- Disponer de un entorno VMware configurado +- Contar con un entorno VMware configurado - Tener permisos para crear máquinas virtuales -- La imagen debe tener **VMware** entre sus destinos compatibles +- La imagen debe tener **VMware** en sus destinos compatibles ## Pasos de despliegue ### 1. Selección y despliegue -Desde la página de detalles de una solución compatible con VMware, seleccione su entorno objetivo y haga clic en **Desplegar**: +Desde la página de detalles de una solución compatible con VMware, seleccione su entorno de destino y haga clic en **Desplegar** : ### 2. Configuración de la máquina virtual @@ -30,19 +30,19 @@ Configure los parámetros básicos de su máquina virtual: -El despliegue generalmente se realiza en menos de 10 minutos, según el tamaño de la imagen. +El despliegue suele realizarse en menos de 10 minutos, según el tamaño de la imagen. ## Acceso alternativo -También puede acceder directamente a las plantillas de Marketplace desde la interfaz de VMware: +También puede acceder a las plantillas de Marketplace directamente desde la interfaz de VMware: -1. Vaya a **vSphere** > **Implementar una VM** -2. Seleccione **Plantilla Marketplace** como origen -3. Navegue por las imágenes disponibles en el catálogo integrado +1. Acceda a **vSphere** > **Desplegar una VM** +2. Seleccione **Plantilla de Marketplace** como origen +3. Explore las imágenes disponibles en el catálogo integrado -## Deployment tracking +## Seguimiento del despliegue -Once the deployment is initiated: +Una vez iniciado el despliegue : -- Monitor the progress from the VMware console -- The VM will appear in your vSphere inventory +- Siga el progreso desde la consola de VMware +- La VM aparecerá en su inventario de vSphere \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/network/internet/advanced_concepts.md b/i18n/es/docusaurus-plugin-content-docs/current/network/internet/advanced_concepts.md index 3f315ebb..5cb19f95 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/network/internet/advanced_concepts.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/network/internet/advanced_concepts.md @@ -4,31 +4,31 @@ title: Conceptos avanzados ## Introducción -Esta página presenta las funciones avanzadas de enrutamiento BGP disponibles en la infraestructura de Internet Cloud Temple. +Esta página presenta las funcionalidades avanzadas de enrutamiento BGP disponibles en la infraestructura de Internet Cloud Temple. -## BGP Communities +## Comunidades BGP -Cloud Temple ofrece una variedad de comunidades BGP que permiten controlar la selección de la ruta que tomará su tráfico. +Cloud Temple ofrece una variedad de comunidades BGP que permiten controlar la selección de la ruta que siga su tráfico. ### ¿Qué es una comunidad BGP? -Las comunidades BGP son atributos opcionales que se pueden asociar a rutas BGP para marcar, filtrar o influir en el enrutamiento. +Las comunidades BGP son atributos opcionales que se pueden adjuntar a las rutas BGP para marcar, filtrar o influir en el enrutamiento. -### Actions on Local Preference +### Acciones sobre la Preferencia Local -The following BGP communities allow you to modify the **local preference** of your prefixes, thereby influencing the path selection toward the machine announcing the prefix within AS33930. +Las siguientes comunidades BGP le permiten modificar la **preferencia local** de sus prefijos, influyendo así en la selección de la ruta hacia la máquina que anuncia el prefijo dentro del AS33930. -You can adjust the local preference of a prefix within the Cloud Temple Internet backbone in AS 33930 by using the following communities: +Puede modificar la preferencia local de un prefijo dentro del backbone Internet Cloud Temple en el AS 33930 utilizando las siguientes comunidades : -| BGP Community | Priority | Local Preference | -|:--------------|:---------|:----------------:| -| 33930:40010 | Low priority | 10 | -| *Default* | Cloud Temple Backbone (default) | 100 | -| 33930:40150 | Medium priority | 150 | -| 33930:40200 | High priority | 200 | -| 33930:40250 | Maximum priority | 250 | +| Comunidad BGP | Prioridad | Preferencia Local | +|:---------------|:------------|:----------------:| +| 33930:40010 | Prioridad baja | 10 | +| *Por defecto* | Backbone Cloud Temple (predeterminado) | 100 | +| 33930:40150 | Prioridad media | 150 | +| 33930:40200 | Prioridad alta | 200 | +| 33930:40250 | Prioridad máxima | 250 | -**Note:** The higher the local preference value, the more preferred the path is in BGP routing decisions. By default, without a specific community, your prefixes use the standard local preference of 100. +**Nota :** Cuanto mayor sea el valor de la preferencia local, más preferente será la ruta en las decisiones de enrutamiento BGP. Por defecto, sin una comunidad específica, sus prefijos utilizan la preferencia local estándar de 100. ## Configuración @@ -40,22 +40,22 @@ Para aplicar una comunidad BGP a sus anuncios: ### Ejemplo de configuración (bird) ```junos -# Define a policy that tags the prefix with the community +# Définir une policy qui tag le préfixe avec la communauté filter p_bkb_rs_001_export { - if net ~ [203.0.113.0/32] - then { - bgp_community.add((33930,40250)); - accept; - } - if net ~ [203.0.113.1/32] - then { - accept; - } - else reject; +if net ~ [203.0.113.0/32] + then { + bgp_community.add((33930,40250)); + accept; + } +if net ~ [203.0.113.1/32] + then { + accept; + } +else reject; } -# Apply this policy to the BGP session with Cloud Temple route servers -protocol bgp p_bkb_rs_001 { +# Appliquer cette policy à la session BGP avec les serveurs de routes Cloud Temple +protocol bgp p_bkb_rs_001 { local 100.64.3.226 as 65551; neighbor 100.64.0.1 as 33930; multihop; @@ -67,4 +67,4 @@ protocol bgp p_bkb_rs_001 { } ``` -The prefix 203.0.113.0/32 will be advertised with a **local preference of 250**, and the prefix 203.0.113.1/32 will be advertised with a **local preference of 100** (default) within AS33930. +El prefijo 203.0.113.0/32 se anunciará con una **preferencia local de 250** y el prefijo 203.0.113.1/32 se anunciará con una **preferencia local de 100** (por defecto) dentro del AS33930. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/network/internet/concepts.md b/i18n/es/docusaurus-plugin-content-docs/current/network/internet/concepts.md index de452471..441118c7 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/network/internet/concepts.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/network/internet/concepts.md @@ -2,118 +2,118 @@ title: Conceptos --- -## Internet Infrastructure CloudTemple +## Infraestructura Internet CloudTemple -CloudTemple operates as a **Cloud Service Provider (CSP)** with an independent, highly resilient, and secure Internet infrastructure. Our operator-grade connectivity is based on our own Autonomous System Number (ASN), giving us full control over routing and ensuring high availability for all our services. +CloudTemple opera como **Proveedor de Servicios de Nube (CSP)** con una infraestructura de Internet autónoma, altamente resiliente y segura. Nuestra conectividad de tipo operador se basa en un número de AS (Autonomous System Number) propio que nos otorga un control total del enrutamiento y garantiza una alta disponibilidad para todos nuestros servicios. -This autonomous infrastructure enables us to offer advanced Internet connectivity, tailored to all CloudTemple service offerings—from dedicated hosting to IaaS solutions and PaaS services. +Esta infraestructura autónoma nos permite ofrecer conectividad de Internet con funcionalidades avanzadas, adaptadas a todos los tipos de ofertas de CloudTemple, desde el alojamiento dedicado hasta las soluciones IaaS, pasando por los servicios PaaS. ## Arquitectura de red y redundancia -Nuestra red cuenta con una arquitectura redundante diseñada para optimizar el rendimiento y garantizar la continuidad del servicio. CloudTemple dispone de un sistema autónomo independiente con un conjunto de prefijos IP públicos asignados, asegurando una conectividad directa mundial. +Nuestra red cuenta con una arquitectura redundante diseñada para optimizar el rendimiento y garantizar la continuidad del servicio. CloudTemple dispone de un sistema autónomo independiente con un conjunto de prefijos IP públicos asignados, lo que garantiza una conectividad mundial directa. -Esta conectividad se basa en **dos vías distintas** para maximizar la resiliencia: +Esta conectividad se basa en **dos rutas distintas** para maximizar la resiliencia: -**Conectividad de tránsito:** Dos operadores principales de tránsito garantizan la redundancia a nivel mundial, permitiendo un enrutamiento óptimo del tráfico de Internet hacia nuestras infraestructuras. +**Conectividad de tránsito:** Dos operadores de tránsito principales garantizan la redundancia a nivel mundial, permitiendo un enrutamiento óptimo del tráfico de Internet hacia nuestras infraestructuras. **Puntos de intercambio:** Nuestra presencia en dos puntos de intercambio (IXP) en París nos permite reducir significativamente la latencia para los usuarios europeos, al tiempo que mejora el rendimiento de los servicios regionales. Este enfoque también garantiza una redundancia natural frente a fallos del proveedor. -El uso del protocolo BGP4 asegura un enrutamiento eficiente de sus flujos de Internet hacia la pasarela activa de su arquitectura, especialmente en escenarios de despliegue multi-zonas de disponibilidad, como ocurre con clusters de firewalls distribuidos entre dos zonas de disponibilidad. +El uso del protocolo BGP4 garantiza un enrutamiento eficiente del tráfico de Internet hacia la puerta de enlace activa de su arquitectura, especialmente en escenarios de despliegue multi-zona de disponibilidad, como ocurre con los clústeres de firewalls distribuidos entre dos zonas de disponibilidad. ## Protección anti-DDoS integrada -Todo el tráfico entrante hacia la infraestructura de CloudTemple cuenta con una protección anti-DDoS avanzada proporcionada por **F5**, un líder mundial en seguridad de redes. Esta protección funciona de forma transparente y automática. +Todo el tráfico entrante hacia la infraestructura CloudTemple cuenta con una protección anti-DDoS avanzada, garantizada por **F5**, un líder mundial en seguridad de redes. Esta protección funciona de manera transparente y automática. -Las amenazas de volumen se detectan y mitigan directamente en el borde de la red F5, antes incluso de alcanzar la red de CloudTemple. Este filtrado en la etapa inicial garantiza que ninguna saturación pueda afectar nuestras conexiones a Internet, y únicamente las solicitudes legítimas llegan hasta nuestras infraestructuras. +Los ataques volumétricos se detectan y mitigan directamente en el borde de la red F5, incluso antes de llegar a la red CloudTemple. Este filtrado en origen garantiza que ninguna saturación pueda afectar nuestras conexiones a Internet, y solo las solicitudes legítimas llegan a nuestras infraestructuras. -**Todos los servicios de CloudTemple** disfrutan de esta protección sin coste adicional, incluidos los prefijos de clientes que pueden migrarse hacia nuestra infraestructura. Este enfoque integrado transforma una exigencia de seguridad en una ventaja operativa para nuestros clientes. +**Todos los servicios de CloudTemple** cuentan con esta protección sin costo adicional, incluidos los prefijos de los clientes que pueden migrarse a nuestra infraestructura. Este enfoque integrado transforma una exigencia de seguridad en una ventaja operativa para nuestros clientes. -## Assignment of Public IP Addresses +## Asignación de direcciones IP públicas -CloudTemple offers a flexible system for assigning Provider Aggregated (PA) public IP addresses, allowing clients to reserve public IP addresses **individually** according to their specific needs. +CloudTemple ofrece un sistema flexible de asignación de direcciones IP públicas Provider Aggregated (PA), que permite a los clientes reservar direcciones IP públicas **por unidad** según sus necesidades específicas. ### Proceso de reserva -La reserva de direcciones IP públicas se realiza directamente a través de la consola CloudTemple, ofreciendo una gestión autónoma e inmediata: +La reserva de direcciones IP públicas se realiza directamente a través de la consola CloudTemple, lo que ofrece una gestión autónoma e inmediata: -**A través de la API de la consola:** Integración posible en sus flujos de automatización y aprovisionamiento. +**A través de la API de la consola :** Posibilidad de integración en sus flujos de trabajo de automatización y aprovisionamiento. -**A través de la consola web:** Interfaz intuitiva accesible desde la sección *Internet* de su espacio cliente. +**A través de la consola web :** Interfaz intuitiva accesible desde la sección *Internet* de su espacio de cliente. -El proceso de reserva sigue estos sencillos pasos: conexión a la consola, navegación hasta *Internet* > *Gestionar direcciones IP*, selección de *Reservar una nueva dirección*, elección entre IPv4 o IPv6, y finalmente validación del pedido. +El proceso de reserva sigue estos sencillos pasos: conexión a la consola, navegación hacia *Internet* > *Gestionar las direcciones IP*, selección de *Reservar una nueva dirección*, elección entre IPv4 o IPv6 y, a continuación, validación del pedido. ### Facturación La facturación de las direcciones IP públicas se realiza por unidad de obra (UO) y comienza desde la reserva de la dirección, garantizando una transparencia total de los costos. | Referencia | Unidad | SKU | -|------------|--------|-----| -| Red - IPv4 pública dedicada | 1 IPv4 | RSIP-IP4-UNIT | -| Red - IPv6 pública dedicada | 1 IPv6 | RSIP-IP6-UNIT | +|-----------|-------|-----| +| Red - IPv4 Pública dedicada | 1 IPv4 | RSIP-IP4-UNIT | +| Red - IPv6 Pública dedicada | 1 IPv6 | RSIP-IP6-UNIT | -## IPv4 Blocks +## Bloques IPv4 -The delivery of IPv4 addresses is subject to **available stock** for our customers, per IP address. +La entrega de una IPv4 se realiza **según la disponibilidad de stock** para nuestros clientes, por dirección IP. -To order IPv4 addresses, go to the ***'Public IPs'*** menu under Networks in the green bar on the left, and click the ***"Order IPv4 addresses or IPv6 prefixes"*** button. +La solicitud de direcciones IPv4 se realiza desde el menú ***'IPs públicas'*** del menú Redes en la barra verde de la izquierda, a través del botón ***"Solicitar direcciones IPv4 o prefijos IPv6"***. -You can also view the address blocks assigned to you within the same menu. +Es posible visualizar los bloques de direcciones asignados a usted en este mismo menú. -| Reference | Unit | SKU | +| Referencia | Unidad | SKU | | ----------------------------- | ------ | ---------------------------- | -| Public IPv4 Dedicated Network | IPv4/32 | csp:(region):network:ipv4:v2 | +| Red - IPv4 Pública dedicada | IPv4/32 | csp:(region):network:ipv4:v2 | ## Bloques IPv6 -La ordenación de prefijos IPv6 se realiza desde el menú ***'IPs públicas'*** del menú Redes en la barra verde de la izquierda, mediante el botón ***"Solicitar direcciones IPv4 o prefijos IPv6"***. +La solicitud de prefijos IPv6 se realiza desde el menú ***'IPs públicas'*** del menú Redes en la barra verde de la izquierda, mediante el botón ***"Solicitar direcciones IPv4 o prefijos IPv6"***. -Es posible visualizar los prefijos asignados a su cuenta en el mismo menú. +Es posible visualizar los prefijos que le han sido asignados en este mismo menú. | Referencia | Unidad | SKU | | ------------------------------------- | ------- | ---------------------------- | -| Red - Rango de direcciones IPv6 públicas dedicadas | IPv6/48 | csp:(region):network:ipv6:v1 | +| Red - Rango IPv6 Público dedicado | IPv6/48 | csp:(region):network:ipv6:v1 | -## IP prefix migration +## Migración de prefijos IP de clientes -CloudTemple supports clients wishing to migrate their own IP prefixes to our infrastructure, facilitating migration projects while preserving their existing network identity. +CloudTemple acompaña a los clientes que desean migrar sus propios prefijos IP a nuestra infraestructura, facilitando así los proyectos de migración mientras se mantiene la identidad de red existente. -### Benefits of the migration +### Ventajas de la migración -This approach allows you to retain your IP identity when migrating to CloudTemple, ensuring seamless continuity for your applications and clients. You maintain full control over the use of your IP addresses while benefiting from CloudTemple's infrastructure. +Este enfoque permite conservar su identidad IP durante la migración a CloudTemple, garantizando una continuidad perfecta para sus aplicaciones y clientes. Conserva el control total del uso de sus direcciones IP mientras se beneficia de la infraestructura de CloudTemple. -### Integration Process +### Proceso de integración -Your IP prefix (for example, `203.0.113.0/24`) is integrated into the CloudTemple backbone network and advertised from our AS. Once integrated, the prefix can be freely assigned to your virtual machines, load balancers, or other services. +Su prefijo IP (por ejemplo `203.0.113.0/24`) se integra en la red backbone de CloudTemple y se anuncia desde nuestro AS. Una vez integrado, el prefijo puede asociarse libremente a sus máquinas virtuales, balanceadores de carga u otros servicios. -**All addresses within the migrated prefix automatically benefit from F5 anti-DDoS protection**, with no additional configuration or extra cost. +**Todas las direcciones del prefijo migrado se benefician automáticamente de la protección anti-DDoS F5**, sin configuración adicional ni costo adicional. -### Requis +### Requisitos -La migración de prefijos IP requiere que el prefijo esté registrado en un registro de Internet reconocido (ARIN, RIPE, APNIC, etc.) y que usted sea su propietario legítimo. La gestión BGP puede ser gestionada por su equipo o contar con el soporte técnico de CloudTemple según sus preferencias. +La migración de prefijos IP requiere que el prefijo esté registrado en un registro de Internet reconocido (ARIN, RIPE, APNIC, etc.) y que usted sea su propietario legítimo. La gestión BGP puede ser realizada por sus equipos o contar con el soporte técnico de CloudTemple, según sus preferencias. -## Reserved Internet Bandwidth +## Reserva de ancho de banda de Internet -Internet bandwidth is reservable in increments of 100 Mbps. The maximum available capacity for a gateway is 10 Gbps, potentially limited by the technical specifications of your gateway. +El ancho de banda de Internet se puede reservar por bloques de 100 Mbps. La capacidad máxima disponible para una pasarela es de 10 Gbps, potencialmente limitada por las características técnicas de su pasarela. -Billing is based on the 95th percentile over the billing period, typically one month. You may therefore occasionally benefit from bursts exceeding your reserved capacity. +La facturación se realiza en el percentil 95 durante el período de facturación, habitualmente un mes. Por lo tanto, puede aprovechar ocasionalmente un pico de tráfico (burst) por encima de su capacidad reservada. -| Reference | Unit | SKU | +| Referencia | Unidad | SKU | | ----------------------------------------- | -------- | --------------------------------------- | -| Network - Reserved Internet Bandwidth | 100 Mbps | csp:(region):network:trafic:internet:v1 | +| Red - Ancho de banda de Internet reservado | 100 Mbps | csp:(region):network:trafic:internet:v1 | -***Note:*** -*There is no **volume-based billing** of the type **'egress fees'**. You only pay for the reserved bandwidth.* +***Nota :*** +*No existe **facturación volumétrica** de tipo **'egress fees'. Solo paga la reserva de ancho de banda.*** -## Disponibilidad por oferta +## Disponibilidad por producto -Todo este conjunto de funcionalidades de conectividad a Internet está disponible en todas las ofertas de CloudTemple, garantizando una experiencia homogénea independientemente del tipo de servicio utilizado. +El conjunto de estas funcionalidades de conectividad a Internet está disponible en todas las ofertas de CloudTemple, garantizando una experiencia homogénea independientemente del tipo de servicio utilizado. | Oferta | Conectividad a Internet | Protección DDoS | Gestión RSIP | Migración de prefijos | -|--------|-------------------------|------------------|---------------|------------------------| +|-------|----------------------|------------------|---------------|-------------------| | Alojamiento dedicado | ✓ | ✓ | ✓ | ✓ | | Alojamiento compartido | ✓ | ✓ | ✓ | ✓ | | IaaS VMware | ✓ | ✓ | ✓ | ✓ | | IaaS OpenSource | ✓ | ✓ | ✓ | ✓ | | PaaS OpenShift | ✓ | ✓ | ✓ | ✓ | -Este enfoque unificado garantiza que todos nuestros clientes disfruten de un acceso a Internet de calidad operador, con seguridad integrada y funcionalidades avanzadas, independientemente de su elección tecnológica. +Este enfoque unificado garantiza que todos nuestros clientes disfruten de un acceso a Internet de calidad de operador, con seguridad integrada y funcionalidades avanzadas, independientemente de su elección tecnológica. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/network/internet/internet.md b/i18n/es/docusaurus-plugin-content-docs/current/network/internet/internet.md index 66687977..50a9c3c0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/network/internet/internet.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/network/internet/internet.md @@ -2,6 +2,8 @@ title: Visión general --- +# Internet + Cloud Temple pone a disposición de sus clientes bloques de __direcciones IP públicas__ de al menos 1 IPv4, o 64 IPv6, declaradas en RIPE, para permitir su conectividad a Internet.
@@ -13,11 +15,11 @@ Cloud Temple pone a disposición de sus clientes bloques de __direcciones IP pú

Inicio rápido

Comience rápidamente con nuestros recursos siguiendo instrucciones claras y sencillas.

- Iniciar el Inicio rápido → + Iniciar el Quickstart →

Tutoriales

Aprenda paso a paso a configurar y utilizar nuestros servicios con guías detalladas.

Descubrir los tutoriales →
-
+
\ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/network/internet/tutorials/pfSense.md b/i18n/es/docusaurus-plugin-content-docs/current/network/internet/tutorials/pfSense.md index ba162c40..c27a7c5d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/network/internet/tutorials/pfSense.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/network/internet/tutorials/pfSense.md @@ -1,5 +1,5 @@ --- -title: Desplegar un firewall open source pfSense +title: Desplegar un firewall opensource pfSense tags: - internet - tutoriales @@ -16,118 +16,117 @@ import routeServerNeighbor from '@site/docs/network/internet/images/route_server import neighborsOverview from '@site/docs/network/internet/images/neighbors_overview.png'; import pfSenseBgpStatus from '@site/docs/network/internet/images/pfsense_bgp_status.png'; -Esta guía le ayudará a desplegar su __firewall open source pfSense__ en la nube de Confianza en solo unos minutos. +Esta guía le ayudará a desplegar su __firewall opensource pfSense__ en el Cloud de Confianza en solo unos minutos. -## Requis +## Prerrequisitos -Los requisitos para este guía son los siguientes: +Los prerrequisitos para esta guía son los siguientes: -1. Tener suscrito al plan Cloud Temple: debe disponer de su organización, su inquilino y sus accesos, -2. Tener permisos sobre el módulo compute. +1. Haber suscrito el producto Cloud Temple: debe disponer de su organización, su tenant y su acceso, +2. Contar con los permisos sobre el módulo de compute. -Este documento describe los pasos a seguir para desplegar un firewall virtual pfSense. +Este documento describe los pasos a seguir para implementar un firewall virtual pfSense. -## Deploy a pfSense open source firewall +## Desplegar un firewall open source pfSense -[pfSense](https://www.pfsense.org) is an open source project based on FreeBSD that allows you to set up a virtual firewall. +[pfSense](https://www.pfsense.org) es un proyecto open source basado en freeBSD que permite implementar un firewall virtual. -A pfSense firewall is managed via a web interface, so you need a second machine with a graphical interface that has an IP address in the same LAN network as the firewall in order to configure it. +Un firewall pfSense se administra a través de una interfaz web, por lo que es necesario disponer de una segunda máquina +con una interfaz gráfica que tenga una dirección IP en la misma red LAN que el firewall para poder configurarlo. -We will need a set of two VMs: +Necesitaremos un conjunto de dos VM: -- The first one will be the machine where we deploy the firewall. -- The second one will be the machine from which we will administer the firewall. +- la primera será la máquina en la que desplegaremos el firewall +- la segunda será la máquina desde la cual administraremos el firewall. -### Solicitar una entrega de acceso a Internet +### Solicitar la entrega de acceso a internet -El primer paso consiste en recuperar [la información de acceso a Internet aquí](https://docs.cloud-temple.com/network/internet/quickstart#gestion-de-vos-connectivites-internet). -Debe contar con la siguiente información: +El primer paso consiste en obtener [la información de acceso a internet aquí](https://docs.cloud-temple.com/network/internet/quickstart#gestion-de-vos-connectivites-internet). + Debe contar con la siguiente información: -- prefijo público -- prefijo de interconexión -- pasarela any-cast -- rango IP -- AS local -- AS de Cloud Temple -- temporizadores keepalive y temporizador hold-time +- prefijo público +- prefijo de interconexión +- puerta de enlace anycast +- rango de IP +- AS local +- AS de Cloud Temple +- temporizadores keepalive y el temporizador hold-time - las direcciones de los servidores de rutas -### Instalación y configuración de interfaces de red +### Instalación y configuración de red de las interfaces -A continuación, puede desplegar su máquina virtual pfSense: +A continuación, puede desplegar su vm pfSense : -1. __Instalación del firewall__ a partir de la plantilla pfSense en Console: - - [(Desplegar mediante la consola)](../../../iaas_vmware/tutorials/deploy_vm_template) - - [(Desplegar mediante Terraform)](../../../iaas_vmware/tutorials/deploy_vm_terraform). -2. __Configuración de las interfaces LAN y WAN__ del firewall: la interfaz WAN debe estar en su vLAN de internet, su dirección IP se tomará de la subred IP que le ha proporcionado el CDS, así como la puerta de enlace predeterminada. +1. __Instalación del firewall__ desde la plantilla pfSense en la Consola : + - [(Desplegar a través de la consola)](../../../iaas_vmware/tutorials/deploy_vm_template) + - [(Desplegar a través de Terraform)](../../../iaas_vmware/tutorials/deploy_vm_terraform). +2. __Configuración de las interfaces LAN y WAN__ del firewall : la interfaz WAN debe estar en su vLAN de internet, su IP se asignará dentro del rango IP que le fue proporcionado por el CDS, al igual que la gateway predeterminada. 3. __Instalación de la segunda máquina__ de gestión. -4. __Configuración de la interfaz__ de la VM de gestión: esta máquina debe estar en la misma red que la interfaz LAN del firewall. +4. __Configuración de la interfaz__ de la VM de gestión : esta máquina debe estar en la misma red en la que se configuró la interfaz LAN del firewall. ### Acceso al Firewall -Una vez que las dos máquinas virtuales estén correctamente instaladas, la segunda etapa consiste en acceder al firewall para comenzar su configuración. +Una vez que las dos VM están correctamente instaladas, el segundo paso consiste en acceder al firewall para comenzar su configuración. -- Acceder a la interfaz web del firewall desde la VM de gestión: +- acceder a la interfaz web del firewall desde la vm de gestión : - -- Inicio de sesión por defecto: - - nombre de usuario: *admin* - - contraseña: *pfsense* (no olvide cambiar la contraseña predeterminada) +- inicio de sesión predeterminado : + - nombre de usuario : *admin* + - contraseña : *pfsense* (no olvide cambiar la contraseña predeterminada) -### Configuración del firewall - -Esta etapa consiste en configurar los vecinos BGP del FW. +### Configuración del firewall +Este paso consiste en configurar los vecinos BGP del FW. -- En primer lugar, asegúrese de permitir el tráfico BGP mediante TCP 179 en __'Firewall > Rules'__: +- en primer lugar, recuerde autorizar el flujo BGP en TCP 179 en __'Firewall > Rules'__ : -- Vaya a __'Servicios > FRR BGP'__ para comenzar la configuración de su sesión BGP: +- vaya a __'services > FRR BGP'__ para comenzar la configuración de su sesión BGP : -- Marque las dos primeras casillas y especifique el número de su AS local y los tiempos que le fueron proporcionados por el CDS. +- marque las dos primeras casillas e indique el número de su AS local y los timers tel que le hayan sido comunicados por el CDS. -### Configuración de los vecinos BGP +### Configuración de vecinos BGP -En la sección *Neighbors*, haga clic en __+Add__ para comenzar a crear sus vecinos BGP. +En Vecinos, haga clic en +Añadir para comenzar a crear sus vecinos BGP. -- Para cada vecino: complete su dirección IP en __'Opciones generales > Nombre/dirección'__: +- Para cada vecino: ingrese su dirección IP en __'Opciones generales > Nombre/dirección'__ -- Ingrese el AS remoto (correspondiente al número de AS de Cloud Temple) en las opciones básicas, de la siguiente manera: +- ingrese el AS remoto (correspondiente al número de AS de cloud temple) en las opciones básicas de la siguiente manera: -- Por último, en las opciones avanzadas, realice lo siguiente: +- y finalmente, en las opciones avanzadas, configure lo siguiente: -- Marque la casilla que define el tipo de su vecino. En nuestro caso, se trata de un __servidor de rutas__: +- marque la casilla que define el tipo de su vecino. En nuestro caso, es ``un servidor de rutas``: -- Finalmente, no olvide guardar sus modificaciones haciendo clic en __'Guardar'__: +- al final, no olvide guardar sus cambios haciendo clic en __'Guardar'__: ### Verificación del estado de la sesión BGP con los vecinos -En Status, puede ver el estado de la sesión BGP que acaba de configurar. +En Status, puede ver el estado de la sesión BGP que acaba de configurar -Asegúrese de que el __Estado BGP__ esté en __established__. +Asegúrese de que el __BGP State__ esté en __established__. ### Anunciar su prefijo público -Para anunciar su prefijo público, puede crear rutas en /32 y redistribuirlas como rutas estáticas: +Para anunciar su prefijo público, puede crear rutas en /32 y realizar la redistribución estática: -- en __*System > Routing > Rutas estáticas*__ : cree sus rutas estáticas en /32, estableciendo la Gateway en Null4- 127.0.0.1. -- en __*Services > Paquete FRR > BGP > Distribución de red*__ : active la opción de ``redistribución`` local, seleccionando IPV4 en ``Redistribuir`` rutas estáticas de FRR. +- en __*System > Routing > Static Routes*__ : cree sus rutas estáticas en /32 estableciendo la Gateway en Null4- 127.0.0.1 +- en __*Services > FRR package > BGP > Network Distribution*__ : active la ``redistribution`` local seleccionando IPV4 en ``Reditribute`` FRR static routes. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/network/network_overview.md b/i18n/es/docusaurus-plugin-content-docs/current/network/network_overview.md index 40dc81dd..6b15d451 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/network/network_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/network/network_overview.md @@ -1,26 +1,26 @@ --- -title: Network +title: Red displayed_sidebar: docSidebar --- -# Network +# Red -Los servicios de red de Cloud Temple le permiten construir una topología adaptada a su arquitectura: aislamiento mediante redes privadas, enrutamiento avanzado con VPC o conectividad directa a Internet. +Los servicios de red de Cloud Temple le permiten construir una topología adaptada a su arquitectura: aislamiento mediante redes privadas, enrutamiento avanzado con VPC o conectividad a Internet directa.

VPC

-

Virtual Private Cloud: segmente y aísle sus recursos en redes virtuales dedicadas con enrutamiento personalizado.

+

Virtual Private Cloud: segmente y aisle sus recursos en redes virtuales dedicadas con enrutamiento personalizado.

Descubrir VPC →

Private Network

-

Redes privadas para interconectar sus recursos sin pasar por Internet, con control total de la topología.

+

Redes privadas para interconectar sus recursos sin pasar por Internet, con un control total de la topología.

Descubrir Private Network →

Internet

-

Conectividad Internet de alta disponibilidad: direcciones IP públicas, BGP y acceso directo para sus cargas de trabajo expuestas.

+

Conectividad a Internet de alta disponibilidad: direcciones IP públicas, BGP y acceso directo para sus cargas de trabajo expuestas.

Descubrir Internet →
-
+

wmvQ$#Sd@!lK-@)rzxA=WX_#q_Da#G8t5;t9Q@=G!Tb#ZC$n>)Te% zN1WQ4JE*pH-l|;5E-}6|Ov$>Sx3A*D+;~-<2_!dH+186H{kBdAMcj+8tes=+UOQmH zW7rxzD+cnk7h`TnolPV!*p^WXf3}-qhQtPPW+VC)(5V4>3F-s~TCY(fVhxJQ%4CYq zLwqvS)IdcoiNJ;jEB%K184-jrW)*D|$fFn-2YT!=I!w@Ihlp}TS^1epym9R>3`QxU zbEZ*MRV8x>peLgtLb7d6(Z?44yAi*5a}$#rm;ynF4v^rhU;6rz{kfY#`U|EHAE>UY zsriIj7hPN5@%U{~{+pPY8SsSn>hY9-NpNsh+O@D@ zMC>NtV!vWy4g7nUd>0N)j!`*g0iC%pcwI-_Bc1GW&hxv;pd56v-9wiE>dGQa=>Sex z17{mCxqwlWm!FtfIZT2jMt~p>6Mi2BESdC&Tmy)pi}wR$VI(Dya|oq@^e(zE#6>zX zp$A(Ql{{|5jCykfYNBpn{fYGuM+cGAwD0E;()I(l7pwyhd6%|fLN|O{Af8aA!yR!H zGznq@QV*G5BV;{t935r=8=un~F!$s+X33-uNI+g7U6f!c5cE1Qa}%N`>@s8~5C(_< zypR3)(`M|va1e`f1Beh*>c56Fz)iOL2H_?a7RdEMr$;AN1TFx{l*E1X(L)p1!DrOe z2C}6K{f9+(KJWx354snXtRPOPGPi~96eI97-rH>d8 zilY9(6k8@CuPLc;PN4pcMc`dElf;4iO%>1X(%3)P7V7a%(ccWzq|CfHwJLRAtL>&c z62lSi!rZItD7m^T>*glDujN;^-te~It#)1Qw#k0}mt~zfS~pwkW*KH!%$Td|O}kG` znhcdaeyU9|BDiMnJy(BPzsg(3MMWX*KLWK52PMWoqsfKn`9r_22#opw-I&72O28y| zJ#4%ia94s#N@H%{{?gz75~NS;=Fg#?NgDAIFcx4^3bfW+sDz_g2l2Ef`=I8f_2a~fJ*oP zC{CJcgA_8H1{2LN%%@mLG7+QqQHi?)j1jX_gCYVZrjI2hO&pquip5YOjId2eO(g?1 zk)xohw55h9p!FfzbxHMw6JF5bPx!{=eVn`}w@551vol`G>u{6fA1fFHG%%SnM-98SuYB!ZOI+r>f9ftU&8E zrQbIAy(STi~%|&qxU`AXMhx{bwL;eqTUvOeYEc#FawERYE)=aUszII(*^lR6z ztH;H~iJ2cOWohOu;}P8?2=naO?XkEUL3Oko!1^DF(4qYzBxHLPePW+$e47F z76%d1P}U*IgoTIWc;I-h1!#=~(j7T+m+z6ZPb0p#xO0Rnt>p8N$B#YoC<$JaG-en2 zwsM-~oVRb!FI8g@ftYxTJB2m^BX5N9?!5Q^@eu#eDcvJ!bmBb!3cUrHfD@fkb#v6u z8xSxCNW~SA8WX6sP0Q7rH*0~2O715KHHJn;<4KDH)42EO(GTR~a)-d%V5gLfJs5BP zYV#a`W0XW)vGtpLNWOJNvy)tf00U|~vGC$9148E?V*c<63sdBlA;lz)TUd(_MH0T^ z-Yy|*5p+@Z1OzX3=Eo9J@*NqkD`<=0V8C8hZk0xBpI6EzlM~iAiXZejw5@Q(`|;b; zhpurCUezt`iBj9mqd$3j2dnn`Rm1a;%dE_Wzs>*S*ZeiA+OKY|U*`UsXTJTI9(6`O zAwB)y{5o|;;>w2PvZekvr|r7hxsM*a{;(%~yG{+(Ae{fk@KEms6II>~9{nWquF{-f z#nZLwt^I7YwpjG9_{k+d{<*@y0JUC-2eg-Id>P$}TmVncLtn0GS}CYoZs`ff#)$%c zuI#z3Y7w1{Q2LyW`}<@ym{}%1xK8An zLR1@f(f1&P7yCWdy0u08G2VIh7+nvr`ZV&_U#C3k2qhIv5?2iEy2{-AEx1KKYJKWJ!=avz%p=r8_zIp|9trwncZNC}WCXO}r%+$>?Luf7 zo0|Hx$VzzpcyVMk5g+VeoX!XXwk*U9ZIPsc=y`wkeKboq2K|vP$2S7Rtpxg*XWX21 z>hhNbmr~Z4sO(rmK)%5pKK-$T_o0MF!e9ut!*re9P!&2w@iT@B4*K(B*yQn~>H?yR z{;ZX{RF@rOHpAq29F~S9!73wG%}mcfK;?^zk4H}U2Q(SYCWjc?crg5twjwl1M*T#I zfB`WF1fg8;fFjA`JLo%L=Dc~kr(EE#4sgv0g%I=(4?Cwvgu1)?L29**<083H9Yaa4 zBm*@O!9K)vO7jmbF_dSmG0Ao5v9uW(M^5Ov+IQ}Z>*dw5;of{BcY&miC)w%hMuqrh z9Ot8n@RJA62%3Z$%r~W^OUI7bSIHD$Wy3RyAWb!0;{2V}j9Avgf3_Oh75$DkbGFQY zsU^o-wxnI=@;`g>%HL*2zHUVUecS zE#ErSZY+;|{j zGezl013ot&-$a|^k#`WAuIlDqgHFp9zV}N-`R2MGFLa%z6BR8o=&+`)#@<0b>MK~)p60OI;r08U5bAfAY|OD z>xc&ckv@c+4Q~;!k>v4-93U5oc5DJU5I*) za+v?x+S-r=#9K4pc!!qW1#>&DlSpTMOe+`cYyx&BS<=z3AEFxZX*2uAF8i>TlLy0O z+_~N9^n$^)%CFzOo5qYhNnalr9i_rJfK3{AQ~nE^vI|^ah+ic(hDk7pNW^s~dsHND z`e-$D<-?yPvJN>9?fD$bElX&pB_Utby=nDU2xM2m*V zBnUzToPjXec(%lPh@GC*OK)WCh7sUx&0e%9 zEo5L5xaJKXvU(7dc;U}FKBI)qpw^--zmB@T?rIa<=a?c7WB!mFTHqZq4KNCUacJ8X zpMU;E1xN)!^H!GqBA;1dWff50zP6_3Bj&{GL~+rzNahx&ED+OP!COHYy=dk+xHJhI%`O6vC1hgy_Jv* zKt{0$00ggNZv$O{GHXnEtKd5;2~A^#*>Q3e-ME_Bwo1qC_wU=6BM}SGqw+C{mxnaK zDLSXNbC)igVvFZmmKu&=JqlM>Op{9RBq-sUn3IK`MI z9!Ezjt)`sQR~%fW>WBjObca^!i1< zhu3rl!KrS8gkaMRuP+KX^VLGvlI|ZvNm`(BE7}|GlW&&)nt8+VIO{riNOlJ|OQx-E znL!X;x5%-Pa%8rM@D^q)WOcB`>64=XSbJtXPlrG3XKE4 zMgxR(N>TgOdijzi@hS};TQOrEAc~jQR|n(0>HT~0{bGr2#3zUk3#s7$_BMdMEM@o_ zh48OD`5RrKeD~_s@1QAFXALgX?kmr7HSk_RS|ub+fvdAA!L4za!~bM0K%%}ZF8bFW z`|W@2+q>`oyMTcDY*}suumSdwu3W1t3x~ik$Vd7b0q}j9LGS-ac7SeJZS5AJ>;RHE z=*9M5Sy>t4o4J5fQ_SWy4Rs%y5>9J|6%K$1Re)|Ogk61^i=%m6r7l}(WASv6N6{b8 zC_!^Xu|1B?eqzZc>mX}DQb~- z2z%}q`R1oiZ3ArfYF&;D3m1)jQ_}x4?%2PPr2#99e{m%nc{t-LPXIc(TRu*8LxcNM%!H( zWs^^Dc!;fbSDQ;7KIax@eDwP_v|j*tb`nJhTYK+iXFCw&c~ z%=_pm`KKi_#=3l-*&?yAgG8$^l#{r%*1nLyjnf3JEoc~4OS6M^fIrQudfs>wT_+g# ztFd36APfZFdq#`;?Iz#-pP@)NK4puPjhaxu|Eq$8*QVpN2(bX$BjQcWEyz((YZH$` zgG$dO-c@9ul1Xs=dikLcG>&+r%OOWpza%_*G%F?%W)}}7=|k%$jz7d20+fb0;o6>= zzBhT5IBi%G#a&LGLJr_5{gly~T9@qINElGTOh8Dj=iLrUnZ8C3qcu0OB>Lb4J^&zu zEStR21o<3LI=ge$lI@ z-P#n;-b01;SqM5?IOG}lO)|1bnw1m@J_gV?vWjCVKXbTY67oc| z`7<##``YzE2|mSLIk+k{s^K`T0gaTh@Q|;RGzr+$*y87LCQ5# zJ@W+69RTsSOsebi94*6^7yv_++BsT%aT3EVH0dekv*6&ysL0VS@!@fejg2>Nt~}9W z!q0tMM_>4(WyiMXZ|K`7X`I;Ll<#e<@8k8n{+RBBsY`sG##MR`o|71AvUIrZ2#w@% zOK1PQU}=-+!ByJ~hFr~7d2Qb!c}@B7;dvDfx7OV%`s5ImRJU|*o2NJ4RgduXlO37%UHQd7ZN2b?DN#iarEDO+76i`-M^R`TT&lq01AHSP}b zY*17zgnIpUyR`66IS?AU$yzK2PhuqDXuFz_=4oywnKGw%{v2X84i#RLVN2h_ZK zuo+!PZyZE%l(aFYuETaB+eXcwgy5l&0fF5xW2#;n1H(6m6G=k1C3_hWOknST^|eD6 z10rS&FA2o7v_i2Hc4yi>r-ms2zA%eE$f{&YB5MOx%M9SzGUeqCpG~O1XaCw&hm5D} zeQ5S%oHH^tiWDU6M}I%wvoKb1*ETJRi32J2}g!$mDGKUb}Xf2I3!? z)r=>iorBxat48nKE^JoZ+Nld~+J84NZ1QF8kYinLE8ahKufydrA%Fg0kQsk*UgpW$ zCR)A~3Wk>gjFWG7IT^fdkYkOXLYwNxIcbBVj1$VLFI^m*yX(ANebPwpu!ZaQZ0mB{ z@Wn{uQFAu$R67(AukzxP;d4LBddI-10;5NYhfF>cgk5n_w@IJW@5+bRGLPo+QvGii z->*@#KeA!qA?>Myo1~c(oVsPx%;m~YuU(XCua{)>TQg{0_oPvG9Ice&3R5yam;4nv zAYhj8QV9CF?&rSFEh&-oNg7eT zep{ZsD^kt-7DLY<@h@q9Jp9oyF?%2zL5lyFJD0`g%CZrZLk=qi-;eXvwv3y%>q_s# zl!3xZp5h;W>~8lp;in*_UTh$q?+xZe z&5&C|R8_@4`EMzI#QwKxcbmZ4LUTQ+sMz4OzjDh|J)vJ>6qmg>?3uIDNC$&hmM zmJ>n@P!ilE<3Di>lAa5kQ-e|}4%g6Uwk%vdy*v3iQb^`+GYYH71qecD_K%IF67DV= zzY%c_bJNCKwE}C7XuR;Gt%tB`mUE{=9dTgh z;zR92f~6!~3|hFN{^RLs{WPtz9&^}0Ld*-Q^B=jO%faaN2~`&in>eC5kZFiZhG2ys zV@hV5fIb8obkpq!hy=!f24Q`sy8HEogXG+U02R-}pFeb{!JOrk*JsEHmPn@*hEsR= z8Il|=s<69vn<5Q>Um;)N0?#0!)hjgJ7ZGyDfy8^+n{IilEuaIcDM?9yN5~<&2QERh zT2eaES)9?f?Tt!;WTsiPW?WZ2BvaH=Yz`9^+4b%{avzkXGz$%5?d<8EuV7P4=JA@k8FuBZMB!Z$oGNw zM7D-ly*E*4vswj1stPcLS7!OvvOfqp5!n;UNBBYdiJ~We$&MIN56JdgF#?l8)s(R&DG2o_D+LnxM&v**%n0Kgd)EuOkMy;mZ`~Z{Qav9g^k>|n z6fWQPX`bA@UJaG~$*2fid_|OWga@BwBIv*xofRw21|FR*sT5od5+c-y0G7mjWO)dc zX&B6qEyQFO>bH8uh5FsHh1rq?KA9Dr&n($JwDhW(-IpDm&Ufi<{9(7nn3P--w;wZ{ zZtd#grMzYDPQRshrp#N`DahNcEIYDc+F`RUi5<_Jz4)t($MrTH=f9mf_teBKhOL(; z-rhVa>)x*4`Yh61IeKaMtAwInXh*0O_f>B+~V zzoh2oRo-6{Z2L)rdU`DJN_fTVCuf}Am5&&m{+>5J;Vz)^Bm}8WWFAi&&h3Y{Q$&jG#}J6jl&XOyY62 z-qf4TMTZN!)UIpSeOInrne|=UvLUXIpn2M0AIA8I5@1F58T$H>#f$w@gy$Z5YMK;i zlxe81(h#-^=lbkf#evaFmrS32DDdd>$m*>4Z{qF9(qFd6^Nys4#!Gy|GP7Gynt6BC zAw%$9o>`Y0Q}$$nLLf>{)7Y^AD+3pjG2N$U&$G#OR&*q1l1)v6PNCI&gBW2|#&e@U z*&|7c$Zqljun-b_cI5Qw+LAUNO9pj@_=~0K6c`AyIHrj$9~dn0I}vPWtc&eII_n|& z4eD2yRg?0Pl9KxO?%gaXZ5pDtRnL6d%3aUjq>E?$((3wT9tfWEeF#l>2qMpEIxo61 zUv5poVo)X)PoJ=rf7`W)?*SmlJR@;$0;NFs*Fq<-MyRf3dYIeEq zhy}4F!H(-GXN1UAuns-2SIJhnV?~5asy*Hrn0@orVk?xp~R?Zf1Y1+hQJgO*pSs1}? zX?H~WZ0VT5VygN6EP&{aTqD4b9kKOW@u&!t!E9MUOiwq}D^ET?wnaHZd7yl*qvX8d zSfxlg&(mf2Ud=gA$4#0xbNV zVzG8t*GCT!1c)+*UQpU%-Un6}r*QTo5fVFb%$PB!I~xyLS4q#+)qcR?rr2?DX)t%~nY@(;;sS|15W~-|o3NzYoU`gI`fXfzlH!9j1~m*;R|)<> z5KUIfpL-U0u`DSjH8u66{f)3RAAWdw`X=^?;L1CxwXQcIU-yYw7tn%KZDca|K@71d ziXxqV*lm{;24Q(YSp3JP!$lK%M*BG8Aa#s^6tQ8arWG4Vk&Al1KV#Qs?W}w6Jz^-skgqD$$AWCaId~CU)}b?fvnW z-#nLH(@1x9b95RNm^>|A-RXJ#{kboW8Acy)T{bnmP7frucVv#%;P)AYFa4BCf6B@z zZa1w>(BR#j!j=vib>HoIr)g;;_C@tr_WSZbG>cls4h$Ihy7Wb)^>v%SA`6yjrG;&; z)sNa2Z6rBEVzgjaTt}c`h|h3gpJ9km&J9f$CcAN7gk;Wqbn0Mdk6Ima$ao$Usk+3tsR6 z5A5pf+h69T<);!BG#ULXO^7Lj4t>R^JL>p*4b_f~Cm`(|s&8d0cKCtSy#v+MeEs~2_vkciDSL#`2JY;tHOnY;> zt@hISJnsy880MZFj!xx{N6^EPn-QjGM96jG#9p3#DlShIW0#<3-wb4!*8&#~qQHn{ zl&{n|RqYn*mpDtcMvtB|ckb^%>9pFB=k$0Ml4`}l$qFzCFNmf_zk>Hkh;LIb+I%uj zDpE~gCjlxnS+59Z=l*_!Ga5X)=dMYYSs3BtJ0c!?giu{P=;}oGLsvb!SkI96rl=^b za1q~)5@P`~?XaEICl=g6X6D1x3$#Z);u^;q1$OPwn(jk-wd>cPE__jRJ>Ip-GAyt2 zs?CSAM~^lLy069~8)ZRC3Fn9SJGcmxgSE%zHJ98NiUSDj$YuoydKqFhW48Y?jsOm6 zShylGW=gw-94H{Mf)8F#G7#- z^Y{toC`}<^JOotvevvn~5z4BdF!Id~ZY6*$Cm^H|O4Z@re@O%^H42=`O#%MQ{dZH7 z8cWe1)VU3Yq+S%R)pHRWCCOHaV*}^NsLq`!TOSxO8p2Oy$?WBo1^r4_a1{NO#e0P% z-z`l-3q%KUFEzFLwDBeGCmvoTIqu8Czic5cL3~i+Y=U}~$%#~%VN^cuF}!S=Zb52f z?_ee4WQIW!K^gGITZt&dAxMM+CwaGk z6K-y78U6j6M3hlavFGT5xzpcF70w=cl z%54T&xpn0^R#?aQpca+pZGZd`(Kl%05D4zwdQHngKGp*qqhBk0dLe#Z^9Z;&Q<^UP zC*1;|re7Bnm_2__iKY$F2rpHqBsnzJWe>KM#&nC&S!^4msIY`#1t2b$NTvX45S1d2u23ciAO_=~OXx-P<|mqb z{`{E)jH3+uSY$SFUpSQIP>q5(CZdMLtcwg_&Zy~$;Ik9~Riz1HbZJ@QhbRD3gWr5N!lye8Pl~%Dl)RwdD~HxxRQs?wM;U8SkOSC-ejIyeXOK+}-q+ z;-M6%q^M{zP>c848Tj+zKsVPG`6{J^;v&TE>P#0$2mKq6i)`bAc3*w$W7=HQ6acd_ za&p9gJhCUDgJ2@c1qoN?FZ;G<1R#6pE7>*7?{ZwrcaCKMt2gYUhWev`Xm(4mD2C}c zpj!zZLn0EBZ#I-y9RW_!bLUHYotGDlu}R!8B9^;h(y{I2NobXI7oYITE&fp0xWm3Q zY%hniJnH)T8r>op;)7qIg|9*)r782Mq54fDb&3NG-Eq(LYvC(`Jg_Ix351BN33 z*l9}NfHtBvq8(%VVz;y$YBp!ID|@z?*kx-&R#p~nh-6w;Nj?UTm9bA&Meq=^GL!D- zzLHhMT}*vDqK*DSb;Hjo2R4#*F*JT8QtA8m?cKZaPjIFRyj0Jk92?grZYLt6Z<0=R zcQF8=vuBMM`2gRwJ@W_$o~$tk15l>FKM69$k9h1c%9Zj9vMSt*oO5(~-i&8*9V05A zPSqQw8_jCburF2VV(a z#W!+9l+5{V2sR|`2I>{&1f&fN4NP!PE-I9#B^}y4DmXu-#eudT9m?MtJKVk1`ax#8nwqAAQySVJ`(Mww$8#Z? zEpkCcD0;&p-3|CfXo7!m2f$*s23U(0sT06{jch(S|>B5C|h<0&Kt1M z2&V(I)2-#RrjQml--o0NU|JboZx-&+&Pvmr*d)2a@@^=ZBX#C+IQ2!ffH}_UD_saW zxGnRFj>AC;sA#cp=m{nahb;?&CXC+C#sBuJTmdz@NU@MeE7h4d&W(Ee%D|u2GKg)w za>dcHZJ4lNw>BBkEClPRtsOoqq(L_~BYMyprI2&AF0DOI96w$ri)0}?fkY(bQ*oHl zgQU2Nw`XezkQtgy*CFoEBF?a zPF4*IV;AG+@rvYDALfC#c^AK!*_3y=)m#?MLm z1`V@#+ysZ=rTMO)E$yDoap)vs2p((i(`GCe>9MCw3E@~>DXWgF>bX`mnBEPzg?{9QLEY^H9Hnkt5@It?WTT- z8rf@IUSQvd_Kh8P&$H84&`|B$|48F!(-F{VjaA`|ixJ<*>JARmTF{_JG=GyQLttUT zxT26?NH-o~#Pe zt0pi<%7(bu>CcbiFdH{(Ry!G^w$)bt#Tg6l>7Q)NkCvlfx1r1hbW79>%3BKm()&`& z&_mrYt9*^3SDshVwMx|{O@uaH(L|pw``EFLgE}8vr_zLzmHyx{ekq)5<{K_wI(M$O z$eXY!(0{+BhZ6}gYiIfTSWPpMv0fL6fG->?9$e`IvOlhS?B3hD;e$0*QDmodx{^9o(a!l8DtO9ptfH_SMm>SnEFGg9F@=apr5 z5;olK+c8N0ppWk(tEJoy;`s%)pu0GUG)LG&UPf{sIN%CM7!&YQ;tL?!g$!$@vh@y) zCn)e-#Q2E52)WX9Bm?GNtTg|`LnA|O9HVmXW? zVg0w??#@fq*4A!M`zN!E_ib#y!)g;bkYwc+KhD4XdPY;pB$L1uAD{2w_@j+pV}m?* z^X5r81-YRarNmiusQKhzs5i($r;wV-H-+FSt1;KfuYFxr%pZ6(xWCbn&nMeyBIpnB3) zub%B4BRd)>_ylp}u}|*&xpO-qG{qN55dS3pDmRn~<3JN0TcV}5g1k*cqaka`32<|c z8$%R5Qva@K#}Zx)8#%JtPxDcHd@ke`sdm&(?{_Tt)|O5a0oerJF!M_xsA4fJ?dC2XWg!k;Bk{bEE1!#AcD+B#_Vz+x(-KW5Xz>Fqxjku?}6Q7qpyM7%Pt`R&W6`@Cl7Me7Pjo_zfm> zW(nuwUwZe}%@!j*H@4_PDxXY{uzYR;66wWiCu$P0jB%%m;+%24oDdLo^yL!gyKS2e zIJ>uFV}k^@y)CFGY}q?dMMExIP4q7b3_nv@|K6u6!q2DtPj{W5aQeQ7`7<68O4_Wicns(H`1HLi7g?UAVa=Y`vc{-|5N;zdX52sHG39iJLOG#{ljgo@*$23Q}@pD4=-zs zZty(V*G$VT(yJh3Y}{juKBsQnR*ALwNnXkmHA-&OyFcjEiU$QZS$X1&S!v=AV?wn5 z)U_;(ziQ)tF>vm>F$GN;BkcxwFW6KNus7>mgwKtlbXTvxC=nSUtk6h%wm^ldeqY3@M!n-vmmQ zC0K+VFwMysPqPJtbjK)gL^yEiNuD$X;0VsgU6>r1p!E*duXhUz4XvJ+YYTlBQC}WE zrvBr7D2HZjo|T*l_RZdbJ}P_$LMITn#8mKB?Ep})Ev|X)>uabH$1MW7qQy%yisW-b zNUz}9?CJ=Xrh8w`2Z}=jchJkrz`Is$@r`{13cY$+8VCXU{jBdBkKPI6jl*J)XMRKyoUqOE8Jj$ei!)+y7LhCHsWmYf za?38af3GoRs$)${0pbAK3OUxP6S4tM+_lgzESj1nGF$NrBcj+0{xgYbD8TWHD&t)q zsea*WI_u4m7!P8WP$=3ETuO7(dK_byK!_AjasGl{#V#x+YIqk$u4|0Yz^-=zsGf39yM1`U{{%7FX>kyT2C7iF02TC_z~z zlm=uiT{ft5yhi$oJx%M;(q0F6<&sI_2LT_<8q&XMT4t=OpGhVmY|_+8lOEc}o5vXi zN+F|bm<}F>7C(nmQr*qv=2A;QVDA#@j>P$4-G|rf1Skn9iO@hIJ$MG$-nc8x+?3!J zNk^jHw!HOTQ&H8smD0(3B{y_GmUCIULsuxA5m`*s(%8rT}w(dQ5n;a411CqQD9uVeA z2{ECU)ueIW`sGt92eu@C@&{?)iEM_+mr*%+(SG6-WT%EKA98GTps5zKguD_JS)>G1 zGk1VgluFTz!0tV|k43U2tA%B1L&^cgs@LN=z1!`YH*Ls8+e{85@;*pYWv&){FhJi0 zhB_%y5U$oxt8y>N#0i*%$JvCNRTL%YWMl!WNL#4B5@w~vz%SoOSb?WEU?-JxFY+bX zD@iKpn)+G2D4!#}h&rGY+I>n{AWf<4h-XTAz(NWpPU&4_DJlIq7dd8%wpg^d8W}i( zg%mC>o`M3K1fFvw`SEBeI(m=nv8n^-a#%YLi)E)aCN0@u+3DWRTb_BJTFpPa+}bI! zOGw#VmlKQBt%sNXw0!H9!XB;t);Cq1XFKolp~W$d)wRQ+YPIHU*m=%x44}%)g-0gL zGEpwtJ#h1=x;J^7+elBDcKH3E9ydA#U1~Y;di5-eOXvKq9=)|B`~JPAns&XmR4+37gcf$3J^FrmmA&>)AE+4{v4Ur|rMcJoM?U z%v~p&JU6S2=12w>p)LYhvRU|Ud^|M6;uY$rR;BnIUzcS_dlzA6JD8pmV` zw7G?a#P*;ZtNf6yGGj)PYN@paoI%W#*`m^+t0FYxQ@CrBA^z~cNWg$2pMkP&+tWSjB92BI^%^|bdHeS5dLN>sBhhm|m0-F!#C-p*T@$?5%{dr- zk49z}C@1{~Q5ry`zpq(S9H3@x8MtsEvMsPg*{v!vissLefc^p(ww)@qKDNgu;RRoX zSWv%~o$YlTjg1!~4?sEQgmW~Ha@X@WSmUEYgcy9wo={jcfP~b1UCp~}twKb2-t5B;M{QsaG75T;MBdc1np-{ZEvx^+7MG|JfmlPql_k1D9ZJ-~WkQ69}bI6#rh zExa-xoy5ngs@s0cA&V;@*spIWnvERhvAfmn)t7IKzdt+`LXq+yx=Bh7DFl5eQX}Vo zftT~)oF}O`7Xu)@jqD4j58}{K2iMUXuHx$IN~MrGfe(`Dxs2W^Zn?k+%R|6uxgDVh6?WmE&J;U| zavL=0$8P<~KD|#r0c^zz8+|50PMuzyRS-;X&?jM6gmLKDrHkv)qvNS1s60?_w(n-T zjSYWF=p>9kBq)XH*VN?8~a<{9KG4bf8x-=k3-PC ztq*+r%&vBz{K4^ zR_X!a3R=scgL?rb&>%PvS+0$$$zZr*B}WOoriex$W*@Q$GJ!5XtRiu=s2u(0UonD) z7B-t|0MGl`KSncPF7h9yf9?a`k3eGV&!qKR!QC10>BSPK?xT*1NQn3imQa3eV`k6Cl1c7_W>&Wavd$UHf(0UQiJ7pD=Y21X)2Hf$? zlf8xye|FM#_OfOATvVQY_*kAQ#;#}{KaN>gf8xm=pfQ*`SC)_$BzcWo9`%k(Cub=Z zaIh(cVOs5~1Kj|9bxU?BjJ*Sr!|Dd2BkTP=Lv`8hw#+**#YM+AU<8B#KBeifiXy8E zd8Xk|znSiN#h4($jXa+Yg13{1BC@L<(L>_M()TWh(uD0Y^ETtVv0y9!b$IZ7mcjC- zv8dXZdS$-=Dw2qZ?gyidrVSWC_d&15R(j(_zVSn5yt3sRX8yX5=I z!r!<2*4jiPy2Z^_Hh*b3xAk=!e$#k_Rkgvy6HD%`GJK{LUlaTC)yuNIhr2A)UZv!y z*e&*4Q>B|J-W@c32x@+$W)`@x24PMOQ@n(3iy$QC2eoD4E8n$rz{A0T%;RUs`0%&qOiFkx{%#;<{2gH4{Naz@L=?KZVCuozW3Z$)L4o>LZPkf zFQ;%_n6-^EH5L03Fveeu>SBffT4BJbEiv6v$LzIj3+4yJVN+=RgM)R=6|HqZH}Ay9 zw=potUVG@m=>$_AUN$_LZ!D@RLG7>tU_{hrukY_2&g6vfA)3l(yuuYS{mdq@}8Q~@rM0aCWv&5MWlyt)gV}<#)Ml}%)O#*fUGjM zT2E9lo6`^)GUpv8od7PG?%W#{2U1Konp4H>v-G%P;s7tBA(2+F8ZBpUU@#_Ya`ONX zM1w1v8S)=10>wMokm@oD2#BW$ps5qcnDOVQ{45F5L!gUTn=PjRkRIt=D$>WEA2>mJ(b$onWamRw%Fq3cy`q!@|4&3>Ioud;+=6wH@ zg}vW^lj*senwcr3<-jc7L1;>HAyW?2r^wnFT%~yfH$gT5+9}FlPVzMo%gGSp*#scu zY-fRo>AT^mi`KSK0xLKH0y}c&orL#w`V$HOcn;F7NIx)p_R+xh)5sk=@@bo$%ZK<~ zQ4q|0(BR}C4Rki3#z4Av5Ri0h`4A2*p31ua;6ZPiss(L7%0>X1F7oA8N8}SSk7A=tQvr<5!9tn;IFu1n(3JFuzd{>9Mj{-tT*DyQt z^?XJ;lBq`sG~L5rq^3caw+Cxv3J?N=f6fPxvO>xaag=|CeMclO zG(xq}yOw}W$uSYrHTKhO=8V?{TXmTmKHIjjR_GVd`(WkHj^)3qPu2?kLB-6`a-HR_ zu*uiLZR103zO=Lc#a`uo#^@(^ODxq7OrJeNXZiH8$U=r1-b=W9(COT>mB*JqFpAV3 z@}{KyxXHHdd@Fu(T~emwTXAUS+Dms+vd*|wUG0AJhU>YwrI%l*^y{}}^yd|8LvmNW z*mP_`7aM-INlNr$zb{>w(+z18Mc|de383din)9KhWNIR><4VgO5n>UW^T3lAc@)m$ zv9r@~uV=T~PQC^1ZnnE!XU~T~B|ud` zEzVbUcpMl4av`)W=Vl|MyT%@MNGusCc`UvzbyQS8KkJ^^9FzvK3Yn3UBSyBI0CWf@ zV(&3Bbg?ZeC(cBQ)7@3Oi1<>n_b@XxJ<4~E_Memqwz)lj_)Ao0Zeq*_2+eMCa~V!yt96)o}$3idJ|WN)kPK{p_amy+FPjrgTkT6%ips$~v`{G+^C6^kT+ z!`1NxfdUn9IVx<7t6jVgSB0#2RMA8U+BU}{cm84+P z*cR+)rJNJhP!fgRKuQ{c5mB3i*5SjlC#EwSR|CD=`3)ROhWV_lSx4h(#!j?hxRd=eHR+vrvV1KVDJ)r z?D%5uUt!_kQpbk=NH+=pfu z>7>N3(v%(qZA2v`?byPFt5)uUj+ZkUyR?d9{V=*8+35K8?eClg6mSVKUCB2tsv{mk ziN2+06MjloozN1ZBt(_|ka1gtBQ$vB{U{rIUSGO_M88)(C z7Wok?P(>v+Vne_F(@x&OpK!Cl(_WlMAXEH^;pAciErcPM=L8o4*pCnkl99r76a$}P zUVTSl7SQ;Zp^5_K9ZG0CvoVL)uwqF#NqIN7Th-7l zD>_+rQ6?lfQ&Qe3RSoqutXjo)Cup$Df0El+QttX{5h~EIyJwmI=aV+NpbxkPn%Ih<-Q^wRdAx@=nwU zCq>=_=PB(55>e&^Nr7i*7&mU5_t*!%UJg^3NF?`^v*!X(w)6bvAU*9qM^#O#i!IDo zx_j=!a&mb;%$T>VuS@2qAFoy|2v}cYUUDF6ZBP0WOWTrhhYNa~)E|5^`jNs&`x(u2 zM!(5>etJQ!*PCY(tPC$GyA~Cfxn?yetPh=`<)~BHSuN%e@NmZt{oYxeQM8NodN}ab z!($1%x(4<8Q^7Sq*SsL^&QG~orz?6SnJYgG^!W1f<;mc=b!rGI<2d(DVZ$;sG-Owc zGuwKeh)(OL9zqlRgF6s-3}j7WJK>aMn5Ny89X=@iZ`T&93MD1j8U0ydYJdt8l&COL zmu*@$e7l9FyBz^M90W!%PBbXP_%1|R7G8z)Mm+lU!pkGgxfUqDpi+f{uX?jBTv90ZMXaTZV0Hy9CqW9EbeGQoldbK<y!!prc1z&(YM#$9OXmt7=B7g6ab zd4U4}_^6C?{m=f(yWaQE5kfOg+=xIQ%xX6cb5Br{7|>Z4{D5Z4@x_{R37=isdeE%@ z{a3x}Qbnz(sy7wP-hcl!vT4gixVOLkdh1hl&}|KEuf_U9fBy*}0gktyK2`wcNG5_R z#4ya7u9kr+hGk%6qo8IWc}z=A!$8i!OhrTgh??aQ72{)CrpL6*lyuDhJz2juNA}6F+KkGWN!O9KuOE8e+1t-IKij^-tSg5LIK`;yZgrgul=?4 z9oXjH&K`!|-90#|YU%~N-}waT0eBr$H})#3>+b9y0lfZ6DCk)C58+i!Pz>zm_V2yl z$Gv)c2(gOfUX9iU!}`-z#dERJM;ozi%fN)cS-c z^NUJrh5lZU7TXAX9%NU67*U^I{g7E$TsmrK`PNHC+xT5#)c4tgKuD z&Cp&Md4-&|bNkfe=L+hlclTJ);LhGLQZh1m-vhPa-y0|JcWxegC%4F}zhTLRrXcIk z3i#Adlv&*I#4kitQmT_r*wjyS=J>z@C{2^*|~vjY<}$> zo0|DC{tF>2COx_RHzqFeectJ-*G9eHuVuUs>L$?xGqV+Skeu!-vYkogql&oRhXrsP5Y|8hVoLLv&4jtFD>-@x_h59fzSD zEoNNF!F!|A3oWhfN}r0zlRmxyizR41QKf(6_&Qcw&Out_wVjL1n5(FmB%K2T9m~gq z?xAV(=DIh|zKuQZO~U-Itav?S8H>wnzMsOCje}O26taW(1$ihcmKViTtb6h#y)1M4 zru}8r*;zmC@1EYi?P_JsO!#ch7oA?^^&!X7-c41~!V9eKWW;i-@%s)lGo-vxEP=9f)5aV7))g`@~z# zzL^*{)a||>X+LXQ#OdAIR4a`Gn4)X>&<_B3RZJQ?(2V~h&R;k^7XaLM)2;2|P zFf=DC6p*3@#wvM$k^YDQ0x~|JuodVrtrX-Sfcg_CKo=XM=2ST>!Dxo_;ci6|YSoI> z_m>>jgLHLtmXz8Lw=_g-@ZmIgg88mL=?8t`FXmOb(upYw+^otK2~3^;Nr^&URxiCb2j~}Q=o@HNpD#i@4Z)ym#9W_V zm`{Fv`&e9>U*t~d!5t(F_(@UsZgg|?_<-`}%#W}rq%;b476gbOy!66K*54?}n{4Fe z<^75W&B3ewr4u~VAaHh9erCTG7T)^^x;eM7sc<{3Y+-N_b&3UI3S;n-9`lf)LP0Ms z+N~&`hq+4>*G>;Fg$}CfeQ$Kb0@1~)n@?*=9ub1wAA%T0TKn2RA3(y~DLpmMm zX~_>l$AY(kvO_Y3~ZJV)Ir}DGQuxqvgL#lxF zUCR36_yi6KTKNvK9crZ|Z!P(c5znd#?7_0y_?d6^&XYAMC~JsaM9kC49-b0b#=AlI zHu)YxM}Lf@XJ~(#43sdeG^nZheft!AB$oT@wVoo!0}VI2uB=1!#NSTqusE~B&2p|8 z)|HP=#S$j|$S>~^oNq5;yjRwWgU|G$PGnXV(-U5ih%}?^#HOtIHCp8u<)L4h$gWi% z%IXFU@TS?u_)C4}XyVho%pAm*dz7~JvNvPBPgP=x^Ne#D?2iTOlT$D1&%U8Vg#c)l z&CeG6L*pyUh2k}_qyQxef!5z6a!qT&vuqTNqQb#C9@lpfZUl}R75qX_dNWg~%&5W@`^5$e_9 z1L)J{9qF^eDBWFIKy`Z{z<~QQeECcN(c);6DN|;X?jA+=&&O-z!KN*2YbrWCZqduW zKk^k#mILgU7niPD*#h^@v=!bVljGip&!|h~EN8F`F4>Ivo@Gk26iem2dO5k)ez1s{ zY7FoU3?kUkoKE!AcK+52;`(iWtP6iDt4T7L?^Zrv$Y0q zDjmKwM`@%b@rEeS8oX72diU3v^K_#QHY0#zOq71AsuGJJkMzjKKmHD1XzL4*OJ}ZK zOI=LeT6=SU1W>+jA5r?o{Q#6`W9v3=4b**TZ}c?*(tNHM(_BWULIf(lbm4CTYx0svAC~YrxyJjoT^+kJtx8px*->c zp6eb0OU`0NKY%hV$VWi5x|&{h zyuuIux%6ah?~G}CD7)goM!Hz}_vnyiz}nmIbw0RYwy;RXqO9fuf5@hJVPE@SH&l}y z;RhN)hwTTt(Lxc4B(GTCYiNW$aEnrh$>K0y=|~RQoYP<4J%GBj)H9piKY%U}fKN!F zk0s|TLV}Iw?Fzm!Leof7&uc#!cMv%m>U|IPxf`4xeYg=T`$}Lv^Q^GJp(Pp!pvMuz znr975JlXw`p2dEhu20=>Nn&0x@nKX{=RoAst$Tkq1KHg}Fd7G(JL?UAkwO8WjVum= zuR&|#yW_o>C3$&fNdr560^ZF$!zCgqv{$gTv6bM*(yw@g@6{c%Ye@OTCWSqJIKF%g ze+S{War7$^GE!u78NX4hvl0Jme*dhJP=CYx0`%McgFAGlT+ibXSg-u*Y?z*Qsgz{e zL-l97|91(i=bO$IaEd%>Y`?c$d=}(0A&2{C_ORd;MRZANTRC;_`#tA3yitEzqHh6E zQtM&UA%V5X=FmT6DUYe{63?g{jQSGCvJyT3&k3Q&euKvFB`7N(!>(HUW!%7FD9>JF zFcZ7sJLTUgtgqJ|3SAyd;+xaHu_e70F7Ef!kRKWVVT1S?9F&^G)E&>(fps<`N45Yb zp3w8MgFVc8EiB%B2whgf&CPhxDy$~g;CQ=!migB6104h4r#=ggg0@TejCRsk`QBJm zQ-lL`{uEdCc8@kty7qwJ$OF(4fCHtl?dqIbZ`qsh>K>2E z61qG#^litf+Bs@ytjNCAM)8^i(Lf8o0XLlW2kqd;F@ag&7{O>@VjuV2nO<|{{Lzk5(cCfd~4B;NE+9r7G(lUye3Qt{pkA#rtj(56TGVXy<1BH-~*ZMR~z z^vT%(JNG)VWm%VZYul58dekYIB%$ul3@#Y_5d}WwZ~dJI;YZhEh{WrGG!aq#%UF^9 zujkuss86-HmFz!~{l7JmP&iZRl9+QJaT&VAS&eeW3l7HJYZ(PvE~rg=yed@>mtX*a z4pama;fOVEm{nn$F}L9obrm9Uv|_@6ixBr@c)G(IJiOY~W}G=wurbjgZJc|vzh>Gj z2BrUk6h2lZc3>2C`Z^5qGGfLqPh$~}8#x-?m)n+*5;b;DMY zDq=y`urOB@k?16Fn~OT!^5_W-T&npNxxPI>9vUaROz9rge7Teg7zW zQ`Z{ubvmFq7mtWH=pfq2#=>s!;CnwEd2!|CqbgkqaEYxcZxT1$mot(K-#KOh@gru5JOPre(_+eB)Ac~ICzjzDl>#?DOa*+je*d*22nWzU z!}4>o<~oTfwp3Md9+ z5$+KE|1#Fc^TH$;*g@9&dhXJDZ1xnOLOQSy2aWvK^p(Xv1E{-EMoeEtdnI$E5p@}dCT$q@B?62MD;ci81LGt6G( zXcY%g@4EVRr6u9drzFV1yG0gE#6>VeH$guz%}=6|6t}jReF=B4YK3+SjRNQTr@hda ztmn`_8bMg|KU^2r5LDkCMj$@{^R|oL_u27N2uuHMqLMtf+LuVwOg92ociN%3Mtuu) z7|ad@)T|tz6g`Ks2TBA16oef*w`+%JK*#I-PJ;^M3VINZ*BOc(SPRyL;DqGr$r9`z zX8ilCO62cZMFx+9RKZazmINYSNB!#EzoBL#+_|9&a$7`aW}4u^dZw37^v?LKrE}Hs z46xTP?U1-4dE2Wkic6%GEn7qt7dhb7*Giba;8Fy(6vGk0xK0PAWYV|+W~=uHr7-B6P{8V8 z9K1h_A;kcN$^(ZbU;=Qd<%0rqz>w`q_~`G44b^!xZe5`!`%+ghJT$Jj;rWiJ?B&ujfRF7pAEA1(*!%;Bz`*q|27^2 zHk6f(`^CaZe`kU=$cC;%fAID8(FE=PsC`C`Yn}MFCXH=fYu?#dg_51XUSIip_#@oJ zlo*+3dctx_V2)pr$vk|N<*{Fdz6#x9-6t2)9h7SQZlP|;I9K&rE$tbXJ@6xQoYAst zmf%|}+3PaAoRDN9QM5&z|4oMla&=zsd{=g*N?=LW^t}PIov$|q+E0CrVoeP|smwle zzs>7M1$d6X+apR&f?=9GRv0KEUR+-Uxm(Fj+NWhhtd9ObUeJF)n8#^G-GC)HVQ|t| zV!(OBp?ht1> zrQ3`2Y$mxhk9vJ6)=leGx~8HRU4-Vo7So(!pB!CnwL`-~_hd!F;^6==tBgb_mQ54}L%W(hE@uqRX1qUgn!DCde z?Bw;WuMF7Kj#NN%C2Hc)n7SxIjdJwKT%|_ko((>(V^eq74MVD;Cy?6Efx2c}JxbC^ zvBN=MBOs1Pyaq=X#?E#{@%d&}_vF&2C+tG5yfzFU=Ng=HQE#0drWpp5fQ8T3)mHl1 zZ@c7`3PU%?_@Knj7)FEl23noP0sdJg^GSaqHTZ?>oUz zlC5(7V`s6aRi`FVH})!1SpsSk13j&oH^kb*Z*q!73j!l#eQVfq9j^b2kyixvQIo&q z=QnSu49|6IPCO|cFQ!u1qRn(`<0G$J)g?oq?g>{4{HB`d(`47+=_Jl>yckSCt79SJ zPatmFQ=S;V!GhDc#> z3I4-%faVu_9FfyS%rr7sRrkY!7df!zsbbx+X5x>#;py-%ha!s)j{OfWs|@*itai5y z4z7Y*Cx~ch)-}83;>v=C8>Hr*b--j9u7i4*U;ep2&qj7!Zi%z)6|RwnA=jUvxn{uT z&J?iJlT2oR+-26GgR@d2lGm`9Nq(;Gv05xUaiNPHzRKof|N2Fx@%(bW7&z{iE4>RY z&Fkwf*{PJde$e^Iqdug_61P3T7P5xaePj zo<%96z_~}AQ*C*iX%IyYt?x_Di9F>F`lS4g4a=XY9Ni0T8gQwQk+z5iv&SnZDp~H? zUF`;RS3^|4?lNU2Bshn%Mho$k-QtoF>D^EMUsvIqc4%+Se z@*{$I22gJmGU2r#wo|Is57hXfw(*Y8If=CjM~6Ad!L{WGA}`pSV?>0gsAnV#*gf?- zo0ld&4eVIPh*h~8%MBw8l;AuF#J&tyv9g#{-D7T+0J7ELe+x($Xa*L=HFImC^XNh*V- zp9Y0;(IjGU(tEoVdORZWmHHmvAL3*dusjHBHu#jyPK><&VR`5!_gNE63 z_~Wkz25*5sr@tgEPZ{f)H;`~CGIzdV)?vEEhIZU1{`zrHE}RL#6trVSJbFFi3r%+wb9HPt}ATgzeq2w z(S$H5mur#x9rNZXm}O8R_yrrKTMr6JWsjS@X^;iK=^mop%@;2l+g>!+=&?1QQ;tXJ zUg)fk%|6FzzDCbgy=M$y)kJEeIyYHucN+G(a`W8d$4s=KYF!#MXYo>JJndnvg6FQ$ zt$B%dliB(QVaB!FhUiyF3d;=lpE0at?t#qy-zr*+h%8>M_|s`a9g#$WH&)t~uA(-# z3OxiDLFDwEI5CV9eov50DH{Y5*JQe0F`SpO-di#Q9g?7XfB{g=^bK21BNr$PvWhh^ zerGRquFdo=K!!_%>;8ceshcynvCS=@uN$$wu~DPz`Wsn2S*0p4#~?|LQ;;xrE%@2E z4&<{#YV^dff$@0;oNI@n#lTjD^EmIBfioo?pLYPl=T#qOXKclAD!| zF-{o&)RIL+#IHs_S>;~;?n5{~S)K$RelLCaBq2JbO^MTwchV29DQo9>0SpIud5T%a z43#ok6bhPS?R5OG(Rb*gE&PO8eo#6-ZEgzOjv~ID_dgL4zwQr!uQUft>+T7nv0~Az zXZIO@Xca`!fn~u!%4!l`ZaOE1zyot&^e=c_Z+fEJG@~+tjp!I z9rxsQbr37N-*~*m-wFvps@-7F4M+SNd;Ax?S3d%SzJ<#^3D!(tP_b@2VjS#t)2swJ z-kp*r5SkxL7saH9%X^&=%KPq06{fRM|;5YAg7gM~JRr zkEV1RpCqLw7`eLgd>dyA;kgSz5Izzo82Pa%QZH!UvH?GjMAm)##0_dQq+7eRqMSm8 zH(n&(NN#2+86e-Lh|!)s(%LF~4RutRrV$tDIIisA4%kgg$3p+n+;dI682F$bx*Aso z95ePt*Q*IaV%DfdVRpYW+?%*fbJ(gOt^&+F-obkNu5nbOY_X8)$ZvIm%r;X&p1W?5 zPjzhhaD~k*J8LhZdz#H%w_~t9=B}!Z63W=s%rt@wTa1bLlv5S?E-3F7+u{;D?UnmU zA2V#{{p@r)p;s!^U?qS1{?SkFhn?eH-i|Z%NlVU7FJ=OzoA%4+f2Q)Eg@wp^?M)H? z%>q$F&qClYLMf4CHLHqh>^qIBZcku$0%2~^-jA+~`gB93&Is{nCxI|$POrm(!)SFM zfJ7J@Y&ILHR{v0$wo{6j<0S2EQZ^`sa4 z1;)T$Fuo1?^?r-03@=W!2s_ap5A5o4taV@IRMAgbVUNN2&{@(NM$Z8aIdo26B4uu% z{8ak%G1269_Uibxe?6G3*GG8L;U~*)d_2i(1?cF~?&{llp2~8y%*#{10J1sfm*sZZ zqi$Bjj}tB+WUOSq{U@TkH&w#5Aqr^Tr+Hab(3uY+4!k!y+NIV7bwJkS#gm=YxD@vd zo@iTtK#D$;Xc%7bVB4L4T!{ zxvSLXxeo`Y)|n!yVhYmS-}VdaHNo4IpF?D287TdI+s28x@{~3wp9Gynl*ojTxbhYC z(-W|Ji@Hk}!&@OFJDv(==(th$Ydkde>M{ERH4|u8dol)y=R6V4&gSBYuePo)b6)C@ zLbsf!6ov!@m&kn7SuibsH5dIO_5KIJ_;q`R_ZyM%QFyi~a=1p@1Ug#XIYvPv2zx=X z1lEH#@_%Ksq%Sk#eAlSW#zmGR{bFK!KLwo6;gWpkrVf>_s(6yFAs14&I@X?<7timB z_ygXZ0!QxhK@Xx5>RFB_+o)=X#Uo2(6j)M`lD&0cWBnhg;~Xr#g{xzJ++sAQTkJk7 zYf<2I36JYw^<`AP=NLVigpqtvD*Q2(|hmp3A@qi|z(eh?zO zlixGd3fi$j4KG`LTKA|==+k~~VH$(eySU0tgaiv|)3|4YgfVl(@NT?0?i);yG9mJ@ z6Ml{1ooVnwtCHB|9XzwrUHgtXRe?4EiDdaV>ATj!^)gBBK-hN1{~S5$p#_bEvR^=d zxHa_|HP4p4KXR;nFl2Z7VS?)7up=SFpZDBNlSuJ6HK=IzSG)`AH7Lq^&;A98ro$WyN*(AuZhT0 zrJom`w_W{#>^l18BY@S^7kywd_7NNd1@1&e47JjHP#Nc(QW&yGGZ5PW6GF4vh_AH;S0Akyw0Pz}hcE zLR(%CJo$l^0hzTg6m}|Ir9?a1oUoO%9#qW zzBSw7BF-;%-uoNjXU1>vZxCL?HmTFWt%Q#hFasva(gb@u4j6vYCt70hgZ4;0WTEP(r-$~Bkc=*}Z zfOCN$n4pgISMN2G)Fz2!xigE-Fu|IC=_D%%fjS}QDEJ$dX7&Bv^C_Ck;CxuMedV(q zM|N@ivAmgW%!HlT+LWXxk85AJdAnwA^!PWX(}A@s_N&mo3jOnO>^ zp{055Q_}0?{}O>t3I4(ve-_SQs~;77dFao`JOLdR2tbGQD!UCI{%FaQB}Tt%Gjr*h zW$b%zj^uAqo@`jcqr!fM=bU)x?f*7LaQT{W_|F0qcRhHEQU#|a0-pjuzTUFQRry4-YPVN>p6|;CHOfK)R z$$5&`a40Oq4NR){}n!J6y?!j#S zr+hh0ZrJ>FSXS!Xh{ph#Ujui;II3mUq#WBTs+(`+YpA{_*+7cm4Gz~3MR;{~PLkmY zmI!RQ0kdBOtC~RF-*-0N*cEtj%E)z#2C$B94*GD7gk-lpbowUd`;D${C0sh5D8%2jY zxLUl59$HhMpJ4zQT(o+&bMp)<;3Lyn!VaTpFkmDQ>yCxcH#U;Ew9%6*I+V zZH@)>VAfbSjz?Ia92_x>>p}WDLlIy10ADwjP7Trvv153gw4iC%OK{$J4n=jR$^^7dU z)lx8s8>{FPg!yuxcvgt^%%sD)bRtT>d_W2a6od8mvCwTYXi}$P2V|jcg4;VTAHM0v ziZnP*4Vw2ySUq2?iZ5=p*8d%Th zZs6tzf@aIX(nVP-569X`p13@HJ$|jp2~z!nlpU9y3r7a0<9t%x(3uO<8TjXv;bRM< z8K`y&(E#tA zGs>8#c~6stZp}iobiye*t6=AF^B@+)z^eVthpyM6e` z5MwypGae;LgWkd)y};%!)&`t?heq$1Uwjb@i>K83iRfam3RA*C;uZ@vmw@}njEeV% zS@Wsxr6qP;#Bh=t_u^x$?yy2De^*oQb`5OVG)XEnu;v7x+8g@n=0e!z(BbcZILP(E zLTYZA%N}ng8P|ldM7uQnR|Vr&CM!Y54CpM}T-?7Z64}Czi`C6O~jdn^)yc0C? zq)LkD0p3DW@wqc%mO$gg%2 zT;P6b@yVIGJv1(7_eS_yk7&$~I1&V$3m(wyW1#PQN!d8Q&CTAYu%U9%hrsDcyLY+# zBnBEnlEfp2;b-!3B+h(ayOHZ=oTB7;qAhm{RC-WVQId;0C#7FxAHS-pj~hRNfPu1w zWnhrP0+#G?PZ&J7NG1iO{y-_-75Dyev$)KWeZ0J%w}l7MUXa59SG){3I#&nlPwIVP zlVFExf!<>=$3FQVheyUctAgi}7iR{|A+h*M>u(V1nM{v8$7!yqxdlLoAi5-d_LfZ! zvx@B5>obiD>A;gC*i+AT<%=~N398s6Pvp+zy+_Po%WV6o{KZCch5^!Wh#!_{@k-MQ zx<%<&tziPSfkLKUhL~?yDe6K26UOVCpWZ>^mN7M!M$|hf3yv6!#^gZ=c5$o@b1iZ$ zxH$n?7@Y=5gD4g3>;~c0b%(j(yEyre_%Xv3N9l-%=1x9b-Bq_r#oMi{*Y4b;?9@`P zJr*9P@mg*E0NxyaA-JkzWez8J%wVlx77$ai!`BOD88Q^KUI3anESDZvWsaXfw; zjo75@Si)}WE@UiXa_hjcbJ}GKPlLO7&pjgwOD&T|%CA}7Mi%74%OM$HD$fZTbALVP z&y{Az4KhZ#Yy4jme98CA(sl(=VXSfC8wRlHg0TE=pJG*9Y1-B*H0-)2NYVsfzsKRI z?-NjeqYx_`WBaJN3!W(mLcEzyTIvl$&1{auAGzX>kdi-xZu_Loq28TKS~WG#Unnvo zSfRy2=bX?pZbUHZwAeL%_kBQ)oXHLa+15=cqUW3*)W*d677QA}dA6kpmi70%+nanr zO)dh>zZS#$PlEWnrwL{=0sBbudx!gzgUGBbSUQA#Ka?Pt*qDcwB5B}=-D#Q_2xW}B z8p3`RD+a=Xp{~&)zJPl~aGPN&uCw&Z0a!xzgYBS@^B!*Kh7`2UN0r)p@qf}$(kXC% zD435Sj{l%8^RoT^#T;*YFP@bjj*R0x-K;nHXWHpLe@RNXmhSlmj$Wv6;*+3Y>o9U-efUqK% zjU)!B5_N2Bkp1{bZzpqfu)Yg*74prH;pv>73W zW``Qo=|I~xsbheubN}OeoTGo^NTdU|G{0Xgk&>>FV~kkzdvC|F5uEQrkgdK7;HP;> z5FCl2?3&-L5hx6VYcJ+HG6tx(AGO-k>DzFw3a-wBzS-0l#i(4O{>&32IGsZFolicX zUO$sXOL-`RtEKKe7z)8m9c)m89z;*{_K}7L=69{j|L{0EH`O9gNZ~Ebe^18~k63td zkF;bg2O+l5m#zlI3w!gc2I4In8(<*CPYW)5yR)*KaK~+0N+E)X6g?-#f+Bs1#o9km z){wZRORG6aM5XZNEO?j(!C8K77hRr%@adsNaMo@}tR?*uR-Un}eaT~kzIhDBT(}Np z7id9uSfS6jF4`i<++u*HuJ>;qi9@fzk3dZ#=(GsbkDPCg(5-k>njy*+AE62!A8W*U z9s^7i{$FFeDC~1OL>2?|MTtc^=bss2?};@Mqxd#xd>|KiLJ6X8PIO-u1+9`|;3NO~ zbpPik@|Uk9l7S7A2Bpz!R23$%J8u>e7>BY)IyTivw>0fAaLbt7j`Ln{68#$=qwmQ~ zU`#SKo?hTf)H-0WrbEWJz{{S8X}CeLz~LScut*rX-catfH)*w{>3Lp^{>va|iryFr z`Nz3S-yTHk!D4|o7+rye{UE7?8L)?4IO_Ep#VYBYBr5QA+Ea|8<}uoLd*djIL4PQF zi@MY5Hq^fvnIn~s;YP;&!oIhA_2g*$1040UkTCDGntFz)>{!{BuFt0S={(5%YK7b6C0lVC*>E3TeL7Tir`4b=L0Y>2+WE7P;?%aBPLH1@EaReRv8b5VUEL_>N}_WXl&>_(o;%<;mAYENI(`584UM>_NurA)^FlHNe!VW zFcx6`!8JMOEn;*zM6=gpF6|O`!L-(@ezvky`{!}zQW7_`p+026rJQq#R5ZAgsQdaP ztK~X!sYw%TV{ykFFE8>wrz`cG<8xz@z5!B+Xp3n3T{=8UJwoT_ufxI#R|;L@)_!hR zciD_WoGqeNtF0SXQy7dG%4cjdyCxF>uf5g7MCIB#eqBY(L>*;wO&a-1pI@t$71~he zyYOXr(Z-(jT0?=;JUTO0?h$C&NZNza)1Nc#K}DYJ(G^mziUKx94$3jUd(*$8 z3AR%P+b}!hZ!tXCB07%&A`%}VA_FF`!Lb;U07Ei%Jc7|a!l(~tV@yY)Py;es7%LTw z6@n8g%nlVwUL_rpP{ZWIu$?L7i!Ay|FsZH0H));w#NPC3scu&&-;-!)i5LUFmkz(a z-0A{Vwl@WB$=P?UyWM*^k2@5j;M6e?y4mA`UiUeL$D_kA)u}U%_zFcTlj;I}7i&pL z@t*I}Dk-Cqaa&-Kx6_S9lrPZB34mLj8B zbhx{5s^3+TD}U=a`FT$=nQa>QGK*=VHkuDW>&=^u(_CaC2y%)0Ei42DhcD?k3#1g3M)8}}Q{+bwV{ zZvE2S7F=(Q?3Y2heyWT-|8%A+zjETfC&h5+gl_*;T>@4ngyz<`Lk!NSoczV1M#?ds zg)Y|(EIPOpDOR@`T58`{1C>QZJi-7tBQ{3R&ZovD_1Z?v z93b-Fjt5@~XBM!Y{=x?g|AY3CE@&p~sNW5$Gl5F)?#7$RCQE2Qd-5(6TwHu_n4Z9> z^g|Tr7gFHluPf*Q-FbviMYmYf)B5dcIR zE2XtBv$*HaJF(zA&7MUvB3Hr{v5$6gqUwpa>ef=z`y&J4o+cl1FaH3}6 zb|9fc{^@G9W}b}*>+Ga+PvGk`er_U^te*;dW7>IV!#bHiztS=zX5nGGX!EPn$oz7F zmjuSSv*jFg$*nue)#;6Ce?+OC0Id7|bu5#q?F+l0Mbn9NGH@014s6>?bLZoOrGITI zadOyM#T2B`0QfBJFRU1z>xmP}z&ZS7kQf-Rnlu$MHzz5^QC6msGm*U(N8I`CyjB23XW9>>@soFLri8TEUCv~Tg*>V3BKhKSTCo{6QW zOux$l4&Ii{wzq(n>TDY};yc?@sw#Jb7Bc8lsCkXZd_<&P)iXH66OKtd@DJhIt^KIS zsLb*X5QsutzMBZ?ua3tmtc~d=D4A=tYk69=%f}l1o85W4J5CoeSaCTO?M-wJe;K*5 zwyR7{?1e&XA;n;;i!w+~x9n74;+IOM?!vz#cK71ZyN?PF%grF*noKyXw zO*qg~h(Vf4VPs72Q~MMd6I)ywe3>od)f6;FB9%2Wo+0NHpH8x9K%r3P_of^cW}Q=C z4xCsKptFuII2YwLVUc&s~5n@X*H0<(g4al#OTSIj;CkZYsnSOY9 z@VgugUkG{;m|(86#?62d1liBgt!kF)GJ_z)$UOM&wZ z$(X;RNghvi-b4GQB^g+NfzDDjE}N}`n)i^gdS74SM(%lS-0PF z_vbR*=6oVoZ|i3Dg`9GJ=6(n=WZ9QRQ`33q{|dnwq6B9tlB}8x;O(eP(OhSKuH;Zm z@JBAdYnr+BV5h0-$LAq+(K|s4F&vcapohY1SA5gV4F$mkjqT1Heu_yFbT?3HES6Df zC1%~id{z5~l)1Q4+vG0S&|$aIJqopCCY?^z+4_#!HxVf~HzFLMaFb`~BEoUM8zo^_ zAsf0#gnb;A1>fxnMAkh&_Gh5uFA<9-`+wjQe({eq{^o(d(jKd9RqiiJ5AvBf!R5PH5VN3G@BMeKwfLO05Ik4*@~2Ik zrDGcuZK)Qsr}=fgUI&rlFC%NsW0tVH5Z5%IBEQvu>kEGeVc%4l40T3i)-@+7g!FPT zmfbE5c;Gig=jMMl{2A`zqLkBP`qQl9_wa+p9Bx?0M15emzVB?0w5mMFq8?6&v0&X! z0}e4?ICd~W6vvD=P2WbD&$FQ^^k*M(!^%rjhc8dOw)&(osk8OI6*sAm#-n2qV;`Hy ztQ{Hoo&HsH?Y-C+B#FVF8gpB{=t;kYw<+M*7-6N>!G#X&r-@0B@GwiJ>nlvycEr*a%(T88TO+@uGW&wbJu zFGga;AN#U?DtcrKeeq|kot}}YmwvbQyLnZ*3MuWKF#0^HRPoJj(Du&;IyV*x|BgB) z2b>o$viDJ|lRnI|+&uScNX{7fB=ktoAnA?&@}`IFt1PK8`J>oDp&455FG62xR~#mF zA5K48WGzDmxBH=p+gBM%@eCLT>?l)oyN6VD#yNT&z;?a@hQPDJ8 zfd-13Ys_d=bIbIY^j5DNB8%#?BUcyKo9p5xyNsOIJ#f$t=?YIsuC)L9A$vTvougJ= zRiW)H4HhRR%>6F;v&L0Aou+E8t>(64MhwQb_ssvr@?+t6;}YfmKKS6mwiyt0H@g!Q z0NEp!U<2(is06!K;N5vGRae|F21A5OsI!1meoxR8AE~$9pLX7;-?lF|1)&a5zO1Jn ztSd7P&51MENLg#d3)cc?o66VKpFB(Y+Xv~{p{xz;R~2V2>mO*)ZP8@;>A$q@I==WQ zxW(^D9TK-^#|0G+X5lvEYVz^GC`Nsn^f5k$Xcf?c=2AZoP~SV>5@)+lWV@Gd;D%|d zLM7#xgh1rEO^6lEFD6kD4Sh*-HH9QuXsT`j=tqo^L!*zFM zmaR9?{S3t1sh&@kv%%Qy+{IBckNnmObgpqpy{x0m0}E$~mVZ6$? z2c`WcyYU4?VoPDv4$_p;CAEV^{#1lB6J`?ehG?_5FDGTs+w@JZtJpz}887>Twp3BB zqM=^Rx&k3ouq+=xSG5Hs&8kQpxABihslWnb_~+kk#C9O@m#1AKMz7sSCs%@>&6u6N zuu280ML1)2&2QFIl@6N~3@Be%o1pu)Zd6>eW-MW^O?Qt>_VTBIM%oMi#jR%>?cOiq zUdM?&U5G)7=@q&zCk?+7)&A?EcFEf<0ZOT|A?js{U~qaA@s@u2A@R45bZ$M74l`;M zeT=JnP!j4q`#)Fvjcl^Ugp=1?GXEw3o?RxeDM+(no<=60VDCdO1mUxQW#M+m zw@oCw@fG^7BgWAgQ}z9xi-cqCxh^dXc;7xsSoiXseCm4e$<-epBxX{O#fOX}rI%u# zi{H!}=96E|ikK}HXK!aT3a_NeaoslmqsFAN(cZB!o;^T{No|gM2OG_TxtsJP)pfmR z>p(f_?zi2zCtV~YXza)@bb((cmPQ|k8)DO#qK`~N{X{4Eo^;IML_W?k@cwy6M}-a- zTac#87so@D2@jH#lWx5TDb0aXVP-`_7*?XsMY`MSMz|-9Al3PqGVZH^uY;>Xw)wjS z>uX-U%UWhn{pqvdVKd#Fw(VShRw@N{yH+N<*+^0#oDZ3!(!Zy=zl~b0D*?Md4-{RS zQ5TR-cwPf`R)voId$%3T_GY^a{cg*9L3bF-n=H*(lpjIsLF3lpO2oMu1!_{a^F3C0 zr#27#xa%DL|El=Pu&CbWZx98PQjl&0q?eMVQ$e~xKwMF}I~R}!>0CNgK>4>y zj?j*4{Kj8z*4$~;cwe#2*z#c*7Oa;b#dG%@2xY++#6_P*weGLRG^quS#!G#l8n&0I zb?}0L)OaGRpx2J3eIhQb>~Q=@uE_pb1}=CO;UM@qks9MeXS;YJSyEjB6obs}0Cnq| zRBV95No9e6wrVPMZ_}CzfwKWSlAH_cnf3@l9W~?2+0Ex zceDW;{sK(&5VZqilBOv?yGtF8Rw7irlIGN#g;1uqz*R|LO=ex`>r=Tr`(idvsIBoc zZqM-y7bC8wRf6CEq*NGq0e=9Tt5%P=dOn3Tv)r@No?>ODSBvLqD4C8uJe}gWG_EQu41%FKZ_(Vvg>tPd5 z83%U4a;|r*mblBxrX6E@LrBn}2pVD0g?3uo2tsT6SI402ʻTC*{GziX=r)w9c( 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 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/k10dashboard.png b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/k10dashboard.png deleted file mode 100644 index d836a1536129b67fcf461f9bd7bbd85726adb041..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153879 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 z 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�qlGZm^ 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 iXLGgi5t$cuYOCGIIj54_}X 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 G+5ZdL1}U!q diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/nvidiasmi.png b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/nvidiasmi.png deleted file mode 100644 index 54abb537c84e9be00586ff9fb7f5b02c2a8d3d4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19640 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 I&MBb@07n5-pa1{> diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencost.png b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencost.png deleted file mode 100644 index d845e487f63f4e593888c05bacfd628f393e566d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89375 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�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 hH(? z6gx?$RGL2DT!MJ7wn6p;(OM8*;D_3CeD$4cLB+vp2$V`)P@qzJ;g+mhAHjh@>{zTWR{Kjf2{ z|9Oz8xGQYz+(klOwD45ArUUX)(}Y z0(`4d6WHAuh)sUB@NCWm)nu6R`AtrkKs&S6cLk z1*>N;I;Hy0*F^(t9+KvAR$c{pd)&BhjGDT=j&V+kfg7K&gW#sC8bpdB0-%`N&UuV zrt9@2=7t8^=mb`!2;4mPo-ZstlpjiX^0_Yj?VsPmDK`>trWS&mwOD+MKV~Eit=Of! z2Q$@?X0I!(LX)VUAOHA-dZ=~!Srt`FFfWr`*d?%VSDl3%28M6B%!&Ove}q@O_x9at zcShYE&Nd~60HF&LD)o;;H#37oD#VuHW`pzC&QXcOtKyB%^0SwNl5$`BFqGt)kLJ5y zs^y~$g)fA`)VM;DpNYa>za{Xh%CRrRw~OuHYLfc;Yh5hML*#<7wBlylrfx%8^;Nll z6#Z{diL%JmaI@4_P>trB3vr_a@UfTGB;@`E*`3BOk6GE&cCXd>TVDre;8@DL!d&RY z^3wyHaauX6x+=*sNq-BjCDo`}%+Wu$KYqIroH-c2JNiO{Lm*R)S#TbvKahME&L=2u zpyp&NbV&m=A+P1@R+*EAqi@v-Ih6vENisfBWUh)VWi& z3>`DVy0dv7#ozC)vMKJabBF&26g!s_69az0GgYYRGruti&{;PZJty8sa5H<c2+^@qGuHa?yx5u@Ctu+vlnF8y9wb+Sf+$ zro6y?c+jl83%}7s=sU&Y!K2y{o*mx;jIsLni@FbxO?UNjxgU-A3J8aSM0E`fmAk&) zO&9yO-Wp&Q{j6Mo2>Jh`3!TFC|C>7qoX3B^qG_`nB3@Q7r_37u7iziURdsdss5$`v ziG((zN(zCG{O`NLeKA(@w@@OPxubNBi`pBw+fP{XVw6P21SHr#|4gz*+7=hACEb&k z_ZO1u@*}OXy$=9K#?3CyYa+;7`kZ(E2MaM8p#S0(v%3|tN}%!(Cz5-M1cmb79uT=o z4WAsQAy;ChtYl>r+{4KZGU2f8S5(MC<-1Vz#rYdG>8URXQpl_vPW+@Lhb+*Yzc_@aqHxaILALnH68^Ts@JTecP`bMYU=IFB!WrNS&33tY{zNqklhB3wd zoclnc$~GY<4d{fi)on?I&Fq~E1RdRG!gwyqRk@(#m{Pt>$+?J>_SG>vuUNdX;ngAf zF9di65i67>LPl)KdMF^YX7l}kWn$}^!y)>eSUqZI>WV?jT6+9p{Y%4HB|zsFQXPlCoW1N zN6{+E{aTcyuPw4Comxjl=+x9)U1O{ek5Td`+hHudhYkjk>-MV5U-_7qE(#L#wb)tu zCR)r;ZQFuzC$Rlz42Ip~0VWFz#;=|of(u_awF+;LM{r<}w<{yU4)b$2&1U;}pMs`x z5}f&DusL}GNGzvJ!zZqA9}O0YIsV~YNo4HCp&(SnYSb*Z%eQ5;IaKiY=)#vNsrQW6 zdxsiQiA?Q1?q)vy`uUk#bC=XK7AiQs7sNfsXk{*X@A=#JQ(qg-jl}W1{zMY>QX~w5 zA1>f1HN5Z$fYufVhE@WD@46s3tK^iJ)z;;hZ2&4XKc8GCwcbiJU;BA}o^>1SLj6Bx z6;0azbnnZvufedSYD8WP#6`l&1Y{jpslA@f3M5$pf9UrajnrN{a+S*M5@wR;_jT8S zrygkjxWSwpo$`9?*saj&%}OVzfK|lO?ebv9mHA|b@y}WcMJHTMir}7NWf57`hEvR7MHnb1cJj%7F!MQ|XT)5Kzhc`t zXBY7j0W-bNtN!#FPt2iW7kt^?y+dl(TLOGky{ZlSw|oEZOkLo88LL=_ zGjC{JQDd#Uj>Xqt7r7^3=2axoy;`35X+3ZlR)cwWLYpN4S)fOQ@f!%=5{bKkLmIa7 z0q+XkLQpFqE|6R=4`#!2`o{HcoY@F)7IX6K8c4#^xCkmuc3SR*h1D?)V*0;e&?my1 zFEg<}(~>-0c+!<^XRdtcR-MnR-C%O9;PlBmO+ll8$-=X^;PP$9|)= zM*}M;Yo4OinEWGooEI=(EoOFpI~_56x_4~aJC?vR#5WRGc`YrDC38BB`${UW8_qf9 zHb2<^R@p#{BIda3IllaSX|4IW-)bwr*2N~)BrM%M6|(Xc&VKPi z*kLL&390bJfj3_v|BV=1kYIw#$j4ibvk@efxIS2%Qs~@6O5NE|*S_(H+`N3~t_#*+ zH4NsEiWROgy7yuvCt0dd4(?#DZn;ga%Z ziA@;Eq8k{#Xce9;9`wDGj#ShQ*$5U)`rDgdd4MvM_es$EULYXFMxoo$%)>|t+$Xlr zQRe-hu}aAY4tk}%W0)39`%_U-Y-<#NfE_(?5b0aOGK$6PRT(U|XIR{8VeSWLOjX;l2Ku7_DLOD==%v`m#vakh{`wM`8tB0B4BRt z*iCk9(9{_jRNs=b46?Ol%M9En0iffS0Gjy_Jr@NaK=)6Onc&ky2jtSrHGdB`P74sf zr^~;X9??H2?)8MlmG>#e&uIm$jR-WToNfrZyR?Rt*B>il(8B1 zHn=>3>u1{`cMA=~^DuITr}!_uEn&{7Q`vUZzjrEmeV>(*@7Tz*KYkjqCcQbe)V?D1 zjV$EO$0bx^eoZBS(>~ms=xT0W{L(PjL<*lHCH?N7=CW>)^{m=`#?B|AFNlt;tI@uw5x$LyiNI_UrsOOVNS0B^e~X0xVcokQB>^K zbB7zWa6cU7vuID7pEtZX$Ao|nH??n*IzLedfWrXt*KVypIuO6pII7vg0}N&c_!KwI zAfDL(#h}hSdyJ{G52VHXe;1sr(w@RxADJnSZ1Tjdv<=L)^BFD&@D8@+rec+!#}X+G9Yx+MKSk>x~2zy=6* zm7wymd-A&xU6vx_fK^<2T;GWrwS8OZUDsO9+Ga(WHcMEZvCY4tvcEg_e$wsmEQNAm zzIkK-CH$}_%>*OJV*NObOv;z)(E}snWIJX~fk%vf$EM@HL=}4rQ=fn7ew|qB6gEE_ z*6X%k*=%$_L~MFZVy9w)6~ODMJajf3tJkQdZ3z7%wO*5%CyZ$rjNiqT?3 zR#8j!47{$SxroCx(l-bq?aFIfKMl-1eJ=KbV`7!~@9}J;t+D)kHoj}BAipUiMn{$h zZoXJCHhQmP6cE8xy`=6M1y)CPRO7jSEw)O|uuh>|J+ki+_$9Y1>xYc|yy0mQs8GZpHbp#yzhZ^601L$fLxY z<4`MV;JBrUk&AJ>6USm-3~m*={qWaM0}J5o4CX`RgW(fj1{>~+hr3387!%T&rtqgdKY!5<+bq~dE2 zblZ;lob;OBwpREadg8CQ#HR-Z7Pypslt3_eG_k~I6mTJaJqa~UIY#P+%tpyVEDB*S znk$Cozn}Q!LihR0b;|(u&t*sP5kiEf8e%)YC#F?qdj3_k2VRn?ohrk75co{a)zHk- zTx=lSWJJjNtBO+G`GsUTesOcIJ&{fJm^6Qr@Z3phra(6?C@Z9mwFkSE{~G-? z>*2=9+hCUm^$+YhhiBFMf7E6IOu_Om(81YCi%R~Ev&rzWd4Lpm1ayo!o<3Cocrfu( zsA=GFAI)1up#b*848Vx83l3uiIGCz{6w${k>Xv${sJdB;_Y7;IX^s+8(3`9O0h86! z_g-jByk^G&L6k$RluPKbWLsx)xxyD)WL&`Rv<*Y-ba~;aBED|@fC_Bqjs5yw*z)1xc9e-`(&LZ(8?q=0;VTu$yMbVb}YTecR{*5YuuU(RoV?e-oX#P(G!* zO@c2Owi)6CJzHHi{k7=eVX3%9u&=;OL3OjrM;&wO zdrbBlizVQwD9nkZ4i#}h(aIZ%`zfp{Ex1kAwoCpXN|-i-R7PMoS3_X(3W&G8xbl^Z zNw5Kns5vJgaw~&L^$R9M$ANQM{y_r9$p380`E(AcGkCHT8Dfq;VJyu^EKqg@#&^Dv zO~h4B$6a(C4I^V9o(3I;jiN!uTI+T@G~Ar+t+(jq*>7_taF)f{IPJBrOYV0C2=9dq z)*4@$eWH@uwxi8f_y2q0^_{`X`KK$~9!`rna~p_fW`I^{ONAqYa9`DIN;CcAE5$E* zG7Ieor)>%kV>=9q9=u#kvElbq9E!@@%*ezErfU7@m6F>kD7eo11qvZmamUVATloVN zT;TvLNao^r)fQZyz;EI5%B~xOa{}0tTd>ATK7dBbD;?qq|F);&xr8f2F*QfYIpECvlfUq|O zs7jUcl$xF(2-GzJ-daiEZc|m^_JTpMrDr5x+ae#LqmjvC!PhlGmfx!=1Y@jP8^aQS z(1x_@MqeB?-rY~&k2f_!tM=Ms%jn{aQOO(-h+V$uUX8)vj(1Dmtm6_yCv&!Z#yFpg zE5x#cU&>_5BU*=w>&QJl_r6~}#zf_{wqwd#5YndY0uv-@_=c-qTFKzdGwxKJJ1D}q z)N5!kvw)*Kb#3H`@v?3fk^QEn1N+*6^L24rrq`F?qvNNLWm6SmZ|+j%Ew2~rKg?Q2 zQMQTF@bA$2EAx5JR#Eoc&(E)S^|-xc3vL3)%zQa`i2hW$xKNEHiC~h}Wyk3Blo)jE z4w`sn_R3v;SoHJr2x&KsI(uRQ*-&D)BVl9V&_^Hk8aFQb6><-(IjpOq^PGB71ydCn zdKIh6=kMOMiZ1!pGA_oIx3)>u?ZcN-jQl1V_?Bk)^^MODKN;hiO`uFXbHh$b4(=jU zkeiVZz3Le4W0HLz5Z}tpt&6@_X*$;1@Z7}18F`ugGvYybivn7(*XeItwvkNbYQ&VM z?zW@)BMDt}`=GA5d4s6UVj1^o`ljoFlb|a1}4Vo@SK*S#Z=eDqKq7yz+^Y6R*n|e znKR|!EXiaW-K^L?$@K*HoYd$DDPd=h4rGfAWhLTh>#KD3&X#8*>wkF7)hitKQ@43u z3Q=iZv=HxMXyb}LoI*#cW8Qg9RoRN|j~cF~F;&y*49Jx0<<2_AT$&LHFehE5dptVKUMHa3^(><_Udx~z7XZ7J|z z#2=X1H&bCIMRfg|%w9K@ag$p%K(Z_bl=$qo=c`j>0vh1Kc<16XyW<_#kWxU~N-N}a zDicsmG6v)$IAmmin7A_ultqVIrImxrZky3cj1v|Y`_x{W<1YZZ{A~CmAy0tjUT)rI zT-knF0-T*Epx(Ik=f$AH$Sd@$qnUPRoFr~Lmuy{?4ucQ;5tx3;u`@kYcay=hN8O;f z>%z<55A221DkclYLNY?OFZSCEF*B_p^!)y_n$fp|VzBKMe(QaJ7(jp*hLE3IH3rxD zLS{+vT_jblz`<@nZx2bqsi_Sz>kJ@w~gU-lW|rgJ7Y7z;3@ z>#=p~UtY_h+i+XO5wZ@Kd*|9$#z-*ISz#w!;%aeJzE6|C9>D4a(c^D@rd>hKI59G3 zUc5|hS9&RQAS^#gZNZS4Pa}6m6m+;<&vn){0;zGeFguB5ufvu2`J-|1w|y^#w86x^ zPDkkmTZ1QsMz+`k8{<}9{l-YC`eTDO!@Gf=Z5a%_<@9ojL6yLdP2ik%|GqZMIYnIz zH$w{C@(aRSbrgCl<0dc50{CKTd;+zLbMws4MXFMMYie~^2~mcOxE{{y>D5Lywq{ZH zwjBOCOBGrBzI@tId5VViDJh@IOKr7GI4(XP!6UhrGEYD3LK-Shu?#t!bdp;c1{UMx z>o3oCg=Xz%hDncp$tX-Wx?0>#u2I>WvKUXX&=1x~~Yg z92Eoo!1s_XE5utkSJ_f0(uZ3c+@~d&dfh{nLDO<$S#8es#;<0pb7>y!O_l!om2%^i zsC51ZV@w8)$1)+)6^!6|$006tp3HC_q7w`)a7i~`>)AGR)j-szOCrX$7Cy#9oYvyE z0(#t*j$UWn?IGe4}$(f9o zQeNx*Er)&Eq#{1+g~lSX-{K$M+tauY?^Ng_@O(u`48{ezyK zp5&1SHMO-z2bq_q0Q<6QBN}p(#KCAaA)Vlv_lk zeg)w;TW0j2L)ELpLPI0cJm^R-f)bPW*TP--yf11(gp;g3GU2di z2!hLx4I*pDOO3!53J3QhanM3E1|MG`uFWC)SMz+gdT!UrT5Xg4D`=1_X(d{&DH&M%<#H?Cm(<0 zG34$a2)aAwOngy{kiqijYowHLYbM9hm(OBnCDk3MuZ;dZ8?rxz6Y|GARDUOp`(Z!m zo#kG43{{wR*r)1pvs;pFkt`_HXQTI20sy?Pbjur)1wa-cTtv;ou+ zP6|3ndVbkBKqIh`G3Zdc+_ZTTKPB2cuG&SKWalKr5vmgX5NvFcPvI&Uyy> zoLrmJW&w)TOrMe1Q(PI(KWEr?HqE~qI;uTZmqJ=AB4M{lbL5a-u9pleS%VtE@-<|< zUOM_|>*_>zG$fb)LTyVbojN9ZE5U3UGXoX5Pkk+C@tQIRFuS_!Gfo~zy+ZNRN^Q*t zoM`mmCEH6bN#m2Lr9n8iL`IH_z3R$%6i+=E8sKfjD6$n|GVyfAhQ*P$IKIe?np=FU!FWD>Sb- z2-3p*AJ`!P@fM-mVSsc&5Fk!syZ9DR`CmKopUGAr?&;Mx8~?p5ZbNHQzOuTi3GEYl z0HJE6`6`5z7{p0a=a=PeHLsA0ojUD zU^baCVB6KZ?f)NpZygq8yR{Ev`-m-wfPeu?BNEb}lmpV;D$*q_4f-fb3ev6gz%WWT zk0Q;G14t_fNJ}?->qbTQe%yP%alGGOKaM#LYVLck`--*B^IYp%*P8jlXsdXq-YQ{)^ZD5DJ?Am6D1WU1tEX95;IlW_TM?>d3xC8My$;{|tPm|Z`Nn?fN zPBDO|peMV^u4Bt0nWkU5bZxd1uJ+bOEIrO3TuW3*m8s`sa&ipLonERLnWG=ajBrf9 zB$>zVMm_5dYPp-&&V<3o6i9dDuaiXUIIQcB<|K{><@8_f-()OVtO^ZIRMcu4c@TTs z)$^!JhDu|Yo6$<38~vK>ie*Sfi=C5<*5@Gn1yPm5lZ?~kjbB#mvuvA2THlsvWRHz{ z&ab)M3uTEtj0}KK>xk=+{*i)}6E0S5(>dtctN8?Eu^M%50wUKMw?y{DswXabfP!Q`mr!!i@H*4pd3s{ z`KRao)7Y!NYC{!Gh4l3FfsG?+9{^s%77s=(aJg;|RK|EvzY%u56=KD0QPXG=A&Zvu6=t>~hVzlR&~v zl?-K$;B&C5@X=!D_d9=$-fYWcbwhY=9$zbiU!9#PoFmgsvbo_U-z_;ZUwqRx_L`IC zcs9AsV9g)>Kq$&)$lM$bOgauaY)myL&o6Dzk=ZNApw_anrR130TWu-f3brotxypPi z&nX?h*sCu-*6O%Lj@|qtP~E1T!=7|f4P)E3%xf#PLP=M(faln7R$rPIcKlL9GS8wD zVV>_4cwEu9z$uEEzAJ8o%H`%U{(@UY6xR&LSTdf+ud6{4puO>8zPI9h z!(7BtlW;`d{ph3GT+;SOWVjPkj%<&a!Vp=R82FggFV9Ylsp`22vy-Z9Xmc|foqeep z5f&aFwdI=7e{9;2b2q_5MJ&HTl|L00sxOCG-psb>*Cr%kW*=0?sJ^)YKjDG;*}UC% zc`2f&&^GOoR78R&rQ=Ol7X0!22EFEa<|PZtxG>iEyDtVIs3KjqT)|>9nbXm3(%5;* zsb+J4q^!v-uU9$14Tc9gKNB%dh`0jN!4~7x;K)bGzx?shYT4GBpq5Rus65BoOw95+ zNT023DmqN4u6)b*7`IIa1gsLTMJwkWV(~ zt5@vyQ<^S-GAm(+6~p#@>q7#9gKxmB9ymgF zPwadv+=lIt1em}DD3oRdL9Nv`1QuizN*v>#f1Xh^#lsK(LGa58O<)2v$Z%$$f(Pgh zhvU4V?-|w`kdC9CdGDDfb0~GHQkwGW0@e+KybV}KA?O0O&7vf!5d0yodgkTT0z4@m zDou^`IZd}Mbm(BgP>-Y2GSKtA(t25)Hr-}N&>2PY#p5g3t>p5Y!HB);;a| zS)))SsyW-JmEEF`Ps_GV2?1-vxX5InU=o4grITU&KzR^;a=1B3Dl#Y_;3eeqez?LPp$aw2tT!Uju=C7JP zE0s`4>ts9qqt^)Drgdai>gnkLnOY>BtW%GK(pFfB=2M188H>_cf4oiT)QLBBWa6Tt zbU>=2d2Fvnj_E;P5b6Jz!vqBEbPMziXlJT+WWD6|Sb0OSpxc}sD6Dn~J2-nVe75?h ze%z0MKqT9d$>i|4Y}NKN$RFK@N5TzaSTC}lS4fuTi0ApVZrH^oc%LVViYt0Gh6<;p z%WQJX^7QNDURgW$IFiQdowcC-?FQfeD$D!J{|S!oC)!zL1O(>}(>Cnhxmf6oY}C%& zA#lGE$3?jFKY}|#mOp!l;GO%xws-&b|37zCsQrBB!9D-)1Ap|!zwgr9b1Tlf*bXCw z`bIH%eJzMVT3>etOF{=4fr_?6Vn)F*S&l`2-}=coHNw5SL1a(@?gKWYbKAEgALH&w z&%ltj%ysc%yo82rOKU6cix0<#`c5b{_XSygU@)2Tx-n3|5+#4<&P(7E@lZ%m0ZI~a zl%@CS<02BXv$LU+LkJ^lk+=^aRL}zR+xy|56CEhk6vtff`D9{ZVyfHLCL%p3X=<9< z{hTDn#g52FX=UmAYC8-Ovt_(WPrv21ITyPC;$yhff*o97GTD^_K0r6P3Pgwcj5Z#* zgT2{CFFNlTfep>;wTrZy`0x_3$Vdmks-H*9E0kkW0O@gsW+Bt4^%5dZg1q+YQW5@L z#9%xT3Li?`x}^wqK8@Z%L9n#0&hD`~!P`B=j#{tTeFjS%Si1fmA zzm7KvOZz~DH-}-C#2LX#oBllJ#-<%I3VCD5WN{+<3l_tr=W`NyQJi7&z**bs$S@5rZ zi6>(>loc(7fNMo%UqRfT+sk$zrYg|!a*gtOSTgqsJk-UbbohLN`|QyYs0$atZJk6t3Yga) z)*%N}*EIX^8kx+k(8?sJu^H7|@N=rM6N7g+O-wxc$&)HWK8jBPal}`zUL9lC$i777 zw*F>yepG>VkPU>zyna`wiU}N)s?_YzwDv{tlv!6cYHNK&&=wvO4Wb@^Y6Xzii2#K_ z<#aE9d!R>&lA&YZ*;}5TxcJ!yHn5f~)tcua!35&|wF8379;adAjb{`|Lq#~^6{%~z z35a1}4wZ}-^KEh8wI^G*>S(GnRu!xVOclhrBTm&7)^}Q5oKRFLjPSh1HPSq)Mg?WMfytIZa2S_<_ScO@Oh4137 zWjfID5v;mTcmNF!g#|B6^=iP~Th>?R7KTD~(An9F2z!N^t{IT*lEwS;!A;@8*EZLt zBjs-1)7MA9EZbmQj%lYnti&`#Rg>D{)wWu5`;KB|-ak8f%tF|Kyu_GHZ{%&|6f%EV=icmwJiblA}BEM6|(rjmLqf{Ffgz_g9DMw;q#qfH0w;|K@mhazy^ro z3NXQj?sLJAC@Cu|C&m^`Tim_-YPcaf4Iat}svnNEBznW<=ya%em?R;n0Qi0Z>hr20 zfFG%M=>o+cx9JWAx7GWJLp!6wP7do?Ok6xtt~%`TJ6U>W=Jt1w2|=JsLc#&lWm~0) zGM}Xp{Ll;zv?e;Z7qEN`J)4zAu4yWiZEQ37V_;&!l$eOf5Ns9F`h;213|l&Vp0h`_ z9EO5x>+A7g2Q(5VD3+_eD)I}Tt#7NpeS`tXb35jD&UL<6A;<-ep@5?_J3d0Bmhg{}`4~9Mlor z7OB6JBq*zTvup(-35d8XxG^e&qk1U~$ND58v;&bYx0hg}z*;)+rAx`JsasHYRey<$ zJ6al{k_gGOg-$f7eturP_`#d0!f|F?6nEC$Bx|rn+2C}eou&%N_#Lwm9{%p#4JJS_ zU|B#AGf^plLZ$SKjCgP{uvy~@f`2}}dyK3gYQ$jxT6u~` znqttQ7rca$?|Nz(;cT0E7kzf;F@*lkC|IpeyNj;m40ZM!cP6ur*^cjt5VY`1+M<Z@*gVKEdtvCwyeKiAPeO1PE7pzmzrF)7&w9jexMOY2I0`+tm4(+41&uah>$a~9dk z{_~xH`S)ilwUgB z`f(?BF%iqt?i>`T=V?o~kKE!daDPLTEbYfN`r%n)R#1+HRdlF&s(+AUjAU1IVmdwD zkL!d6UvUxs712PN@`t^TeB)wpx$}_opvo<)Yc#09eylv|kI6v>dwJ)zKj~w4rk3iz z>g0))ew^$oL%#{W{FvcawLre`2o8G;kCbM@XsGho^2}~2bw(*wb}g6Mc;I7-WB26& zkunHmtXoXYJZPZJ>okS9&mkU_BUPz%$J#8bYZyk3xM)8fTjrohPSWH!>lsyiem0_^ zyl@!(Y57QW$NU_g1Kw=$r8p_}#~Z8~R!+qfzubz(4UP;C(;w$@B~K{ad|8W|CLe=u zF&~TK=s~8^XaI3v2B;ZYi^cuKiD@bQCDjgU?@Ve|cWRt~+oA2L~%TM+F4P zC1Q9Wf~{{;8OBX`?rJ{U!ZL%J1R2k#2X{F4LcQh;!0UBBcjUCODvuveP#AjTM>A>vkEC|k%A-7HaUjg9&6n~W)7?!QCi1Ng+ApAmg^S06e}3!f(PTqk_^?$an>N0LG1-z$ z9bY<<>!wvDXEx>-^<;{Q-gcwZc2Y+N$RcnM%-oXMmrag8+AQ7gLs_BcfRJ%#gbqTj z-LbXlvTM4kK@d%p&o^U+Cse)Z9-h_4TP#Yb&mt#XyLZFRm`Z8l#&~~%&wMB`#ryis zF(hp>Fo9LKGED0AIc!H7$gR~wR^d_vW2u0K;UgtbDAq^9?@V>^ z!q6-Nj?~mE3@A%WuMoxiDPyL!Jw1Emz0XuAqJA165->RJw)L3$70GOV*RZLWyF~gl zs8k7laVxi(f_36>9XOsKFfFoBY1E0nsF%5@*SzvIt!Me$bhS7SYHI2$CZ`S0f%CfC z&e-H0#zDv)1ubVo{s=q5>Ld1%J*^wM3y0}g@zlUn?X7KIW;)ScGHLZz)b@<`!mtkW4|o;OAs|eIQNqY zeH)pImP(;LorSgxlH_}i+ykv(tQ|v+{Ctj=R|7o3JtN(?UHQG{Ks7V7E&u%bfKPs9 zw(?VZScO^$$BrfYn?CkeW~KY%*XfoI5C9vPFpe$jGu_eFq=@RscB~13&?#}t(?VIq z2lo;keEs0Z;}9G?2EthcQ*7hq*hT{wBWwplUbh)I9H>{0&@KJL=k~%R&H-A+w*UAA zjXZOXiv;I0;a6f3l1NtfJ^DRa87HqqZUw~g#(v&gC zf8hWH+Vkh%!X@r?LxJU=uE64I9fcSB;3faRDTTNYoc;@(KAY~3CwJd}9qEsuxs}gz zEA?ki4=p$j*%fUsRw5!=Ufyn`Ey&(+L0|}z zBEK8H11&})u#AUscPLjx!Dsw_})Sdn4S3$S3*NOv6! zfL~Mc^FJUn!p<%iws;`(4^}H&j@*Qg5?*ZPv;RTYj_b_qo`l!`$pilv`y7xo1ScX` z8EeNEAdhi-sA*|s;i-`EhlxG;;Y~R_XEm@IWVV57DGZ4uNIyd+2|}fz^Z%N(s~cZH zZZbGiJvb9)`NCjZRNmXfwF8s!j2&vn@?dYm%|OVCG2wjs5ax;BS?+hGSvXBgOI8cC zApuCdJiz1-(ex5tfqK$fL0LHoi2}2ZLHT^$*|iNMG}QU0qgTRA;%vv&gC)@XimIwe z*0EIZVkdI;-2zn+B3t!m7LfcgXlSY^;jrDG@*pVSGxa3da?`;K@7vuYaFhdx7aSHt z&%@JYdV?QGj2MVnth(%M=6M>hbNGaPNt0$YZ9S(Le?oeC`oN%%j}N_B8%jpzT0EQB zw}8hdQA^HD*{H|0-dPC$BHa^$xYcM#9MCsagV0S^kv$gvh^S%AT7_Y65+~s>g~;xw zXFwP6%^#S6%plyE*I>31o-#D7Zn(1TXQYEeVg?v#8^pqf)uVV`vpW;~H)?-eCy(>;Yd9jq^cREv?SgZ`)7;}fOcniNw3#&A z%P<#)4PK->-h%z$-^|BvZ1uNW3I%?)D)={F@HPF-Hzh8>(`CUL4rc~ z&w2R$4L1XSYf*MC-wqxb=9+Rw!t0;fn~tSc(a^4G@)^ksV+yni=5`9aBz2XFP*H2T z7DPUHfsp`H0S4p8mG0CvLsm7P?uS7`Ms45~Vfg~wq`NJJrO8~2XYghnw|XY4@JLP9U&G%_y&-4}DT8e3$+n!VPFdc+ zdF5~Ya1Lcv)H~}~0)_-)x$x5O`MiBA%b6K{8}y?UdRdP?9d_Z?OHwTfbgk@zH957Z zc7NRa(Tnbty0BhN^AD1A|UowGBjoc|rp95z?z7^!?83f7VVz&V+eZ zC+t=tvdJLxQ$X;($la+0M_Z7+D?&*oO~z#?o%@f$>*`)W(nvJ{gSVHLJZNF`0@oT1 zW`_d|^z`WH=_SA#{DBs97#!AdSqO$RaWrTMLo+ioz5Lm(UPWgsUFPTS^=UZ6X0S^n zH)b$s#^%WsIlnBwQ$p%UQ%!`ELgxICBSvt=SqB5EDS$Y{IDWdX2!YviE&DX$-oObp zHtI)usa|KwMmJveYn2@&dV0^6g5>QYRw~60)?GyD^74ZmBd9=qN6uF%%*?btY9Aw{ zU2$;ZfCoId%3(64ZX1z*vz3K|T!x1=(hfrY5S;P`!A*ad@q!qDA{)qHihQF7Yzm0; ziE=15@<$lA_steKKkljH;4U_U6DUwAzu84b{e}yH)R!*F2kkk|uHUfxFH(9sM#WEe zIDhIC?Fe2J>CSb2qR*G57TjMx+8-S6OoJY;VbVnZ4K{tBThu79r`p&KcnV7YkI`HkUC@RbU|J}~w`ypSZkOZ!w+K*fdFn{Fk6Eatb< z1@X&Fugtl=x0%4b8obGmUkH9$!_?QWo1oKx+M4G9^!)Y?Fs(n3WpHF9!w#m#opy5l zfvuXjBF6b0|Bub}IB+1ur~HBzzqJqy=-;T+%J z@DGbeoYKGQzXId`d!9`w>$eZO)57fpjJQrvR}~>{|34jW?~R>=6vMNyzl9%c08Sb5 zfb{aZ5tamj5UYZnzNSX)uon~xWyKTy&7J*Yn|6NNP6`pqvIV>c;n5HO)A8Qs!T$v| z_Wg5zKi)qZ^_y&z2u!)>F~B+h7UV#B5X{PNgfXrY_BrYQuxAN`6WP=O8CO#^BDrl~wD*G#cSts$2hQ`TlV;YUqg6W}olKfTDO@C$8 zEB`y8wv%G#+TTK}z@WtR-oWu~G@2o!>B`ekS=WO}&Pg_?+lVhRt|^%epd2`Z%pL=~E;|tBJvd zZpA_`PD`FTE!FX?4*^&BPx-JN2BZKK8Q1+d#ZBhuQ}h-$v_pIJvp^=J`vO{RauT0n z)%nZVsB7~M#OT3pQ%=a-(FS^ACQ5!=56+*LwXw0u8F5Rg6iu;$Xfgz}Vc(E)_AX_T zQ>PRrSJKHE<_d>jQYQcOds2gG8H2AfHcV%mmGxi&+JONTxci^`q2IZRQmPunc&Lqlvg)5=tR7z&gOlnec)ROCsA2;^6c2&|&)P&5 z?n5TTYycTOy#uG3?X8azr5=S0Kar9dkYk@xLvKSuM^uN8ceWEG$%d$Xp6G_8dK~|`oTqZPf{At}p(RY<<8S4I9sNFU z4p>J!A4~q%vgr4VI6w!fkMKPwot!17kK^P7zkWfrc)w<=f+eqt(OZ-5U?*A?H4DZT zbTq33IiJvszWtAna~FFblLczvh^dtE2kYD@r@`G!D{G*L1`tIiWK+pB&0o)He69H_ zEV|pMCUSByY9HBAr-t1}y!j10o|MOA36(#~<~JyVIs$O&W*F;j6r{{3f+|NUo?Y2v z9Wuap`#h0Bxe1(I8<+s0t%x0I`gOJ?8#w;}fN@Rt!9*SL{_(@*lipd|ijgWp&B+qD z#%CTR%ntdMV<2^q@z+?^HxGFlHN79ke)}tq&d6`+3mrmJ!QuflM-)bok^?KhzoAKl zD_R=BS@<@0`~FAx_M3b`Tu9@{3&<7+sjy=_xO)=xo^M}5dw*q8JNNiaJ|cL~JlMqW z8$Wj3tN^!q(dRR2O{cOK>cqC39j68s$wY`zq$U-axQXrDR3Pr%wLUM2*ZcD1s1?e$F2k)==RyRR}x6_mp zv>S-Mz^+8R&n`&_SjpFgFu~G=&Su1Wm|#{LE_dl)YM^?A`E}a zPlUw?1jF_|3BJe*B2B;wBdGLzd=88yM=ZBPVZa0L<;q_n96u}e! z))_w)f?UV{j3G@0Vp(oKAs`dqQ34=q3#b3*2gtmmMgfAk7D=Fr|4nzLZ1h5BZ0GBaPe^+R^rPXb<{_SX&Ch9?kz zIyWl|mit-uz(ijE0lY=$63nlbPBYWh+nVHTx!Ktj{dGF;fX9_DJ~JaC(Ph)EE8N7o zx&*k@!+dhwsN{mya9g;Btt!9i`=EsIJASr=;3sz8oVsu z<}Z*9fnCQt|GnaMyz@URT>rR;&Sg^6t9Trm-+V2{+3~o&~DZ^CXuf*7`cU+PW1V^qtY`;g_`>>IF-s>-=&as%+Ik zk}hPU$gd0!URHF?lhy*flmudJoORp%sEAovipwXhAp{FKK=c9v0x6rH-+m99L$G7Y zT{xc2o4$*Hp@{m;twzmZ?Be>dw)}%ipo8Hrl)hMHS}T2Z3x64?f`lGc+14Yaj3kFZoiY#PGM^t-svEmC&iJT9vfN zI+tRVO-<8b*ND-!@0F7a+vk3hOZs~f>x%>UGjAzPgohc8Ebvi&y1P+NXbx41S+$$TF7+-Y|?LM8KJPEW;Wtvq3PW zPNC?O@Z;JIMg_vn5SnN~)kkWiJ7H(lgTR0Tn9LpyOH-x)8C^I3wVpI$Zv7Im))ncp z5|g-r`qCdWnZWlc(k7BvPWjQf)5guOMAfse2wP8`iF0GsjZh9DaG?MrAc@b}+Q_}44WrS7D= z4bQ^PR*3sR8nbc8^yxqHAVcM5AXNV_=iK!=g(>E$Zv*31-M<1?x#H(*tJ^_q>vyG+ zEz|3d1jq1m8nm2tV{!Wf5r4Zc=gMjN;Cz_IzpWKkh^mY(kPq72x%;_3H2ing-Ernr ztR3aYX_5=V*enf08~>!7LwbK-6aOQe+v1fqC&+^~5adQY3hqm{yn2P9dbcmTy~d*U?9l^~Kce_Tr#?XdNDnnw`8N&mZ+G~AIQLtZZ2P$%uz%1I zGDm6s_dl3`&27MVxoJk^wtn!8KO?IK1F8mD2QM`a&#mm%KNx4Zv)4UEEhCH4{AacY zIuwx6IPBjC&>;`HmMx@RhriJ?n+Y@|B|U zG109I3CUe{T9M3O7rXaC;EnIVT~nCo9b0W!mRWxUlVbbNBom&xXiy5-w_XdC8S==a z-mz@$>;8UYoiYzv`7V_ElrnK7sz|bBk+Wo6Wrw5phg5xA3@ACnq+YscJUhsIuOnMXYu3M~ zwzf2E(y5^XOI2;juMF?QI5|Tiz}A!b&EYpUXE@Vp zS4c2EF+PLJ^%)p#CkRWh<72XXQ(2dy61gB%r=s&KlDqkh*DI8K2YsfU2HlFzOZSi% zDq377$8nY$2*Y0xV5T#b%ZDY9A)xuoqCm#0LD7{)(l=miZj| zmLb37V*WnC;CoWXPU6mydN>=THV}?R`-jAozi0T#WjW{F%!jQHVu9?CJ)f1T4bCxr zJ0^Y`1<4X^Y6j7Il_5DxkFMR*nSF(Xo1c0s6ea6i)vcq)^K`z9)n7OFt%J3GqB>F>sCsfCB*(F?DJjGHGt;oqeP zrUNFuS&)8cso6@iQ+d27pd%cy)hx%q_6PRZ2~z!evsAhg^$4I@Y4i4czwQG2!LpEz zz=7;`6RPkCr8BGdc*odu@d^-efjBd44ZvN(3!g(LHb_aZ>(+I}lnIx)ZtX$_lj%(n zWy!=H7^6oO2W-0|Pa&;1is3OF&5;EEZ?4HER-p&^2&yeQo@MFEav0zaQ#}vztPYiO zg5QWCn@LbIILMce`jO+wOjJkM()Q6jvjfwu@0eTek1}0OU zkROOwfW2eQf$?5uq}+`;0RyR2OzamWi{_$@^#4SXa+K4Q*EbI3RAoF+#k}eUlheD> zpg2TCS@uRnr)DM^m(s~&HUCt-GCK%zogyQmqu#kdI%Q1Z>~)&FviCkrCVk>dz>6Zi zZ%l$Z=H=(7OeC4^iRZ|WWd9h2EKnNB&A50L77pmkyO-9n>V5?{pK<6WcQJ8G&SEm- zMm2;c2Pj7=)g;UBx|Vn1{9WdNlNVAR*f8qwJa`0b4}U>!>}y20dbdYfA_4M-21kud zQQ79TqVB{No+)lZ_7FQ3iRO{;RNEDONpa2yy4zBVo(UhW>l^fnN76FpGU@<)5cGM*$$Dsg*w;k)Ytjm^}ZsEN&{+OQ%D5P2ddnxs3Gj`Kl z%w2Ee>IzxTGe01J68$qOE?PEtpYe1H=g;d62h02qZRp#GQEuE3)H)t(3X_J{oh{YV0tYO2y(ITNQXbm(aA-3Uks~3gZ#FpFcD5G*C2R$ ztkYJFo^LyW@M5LWY+DW5tj-?PwF_9TwZ`evj$n;4R_N9Y!w#|OMS%_Zat= z{Jsy?r-kC_+zAxhD%(r!yzF(lBqT8-?;h>OY-`zgILupziq47N z$V7ivv&xiYT@PIzWjkcAhW@Fs_#9!na+UB@J%^){FWffHu!-^SBa$^j(OrX_$6Bc^ zn6-7<4v$IC?}g|o8ZvJpSjXs$J`3V6wS!d(-pDh7E$$I-Y;*XlZZW1NB#1P#HfPr8 zbE?&S>eat%6rItis8K}&6S5yurZj7M71kMOjS!-{m!;uU$bZKi`EKTky4 za#1iAD?ihbhC8#MsH}_*3_JKQUH4UUl1W zHL46*Fl&G++H3rWBl+EV?@Ranr;OSaI4tjl|=12|0r@&!@dS1rB_vAwyXeA>T+2YA}Jyf zRjpmFd37nQny%7$W%B&SJ$|RV7px}o^@>T=)RzQHZo_&i*&2*&E0y|O>@odLkf~j| ze-~SB(9{eC?%7S377i>=mq#UQB;n4s;DNLsU3)>@x-Mm#TQWw%ky z81U+P+^_n1%bI85 zmk3w*82_?2(y?nt5xvrd*9M=RhUFZ53cc}({h+VpJ z`JuZUdaYq+=);HayzV-hZPYw!)X4SYp2TIW4(IgVBIJa<4PL&+X+kSSxyPskGz0RC z6jqjaVkFVCE;S|%bF*^`xDK81hlI=r(QXRWWm}t0`*v5wrjuv7)p0VRKj%b`=(|G7 zh}U%Y^9@Kox~q|$y4=;}ioHEoNO>8*fgAB;3WwWV zbRNI{w#A`qwd#E*nm?BK^NNmwcE{k}?yWCNRa>rYi%uMh+8xsx9h(Lb9rjVBP{3oX zzif-nL26^%aeX*KydqcjM$wA`2Z4?ds-sq#&oy}aU*CDeT=?YzvdtMJCn+`-Isy89 zGsV}n^PE8t2c`}6J+x$@C+f_Y)Kj!LESTk)MjUj9DjrvPYxldk&6fJE6h1AUT3Mvv z#TP<0@fe5xgbY>Ztz#e1B_|-qNscYy?jen_3D~m5%(M|>?JN@>?vGeYgCl2maR98pC##PYnvq*p3 zivV#h$}^VVYJVjpCr37ug8xA@AyuW#vXIe&HjU2$iWeYyxbE19Hk8vcAW6qKNr`yaw8blNn!%`L51G;7 z^IM@NIiG_UR$B&Dp4}xHxz(CN_k!auxf~tbY|dtYntBee6oi;nsIo}8gx~rQGWf6% z4;!{J)Xlplqa1IG$hYN|tEm^w6Jz?r8Qh)`oeE9JCQml9+Io-PKv!=k2##}DSDv|X zIb~$?otb*bn_C*SYwu&(gmjaAtq1nRXN~I6o=fN~h zR0bzj^;J&nluGHAbLHt93}M!DsxNby+~n&7n5R!ox41W#;luhaA5eYdj}6o`b66nW z$hq%6+<(W%T^G>&I(JEK8|K}`z`KLNtMPwC*a)N1I-bc%Wm-dL%h^X>2B3#7?=~iR zHA9TI%--JLL3fccWv)P^fC}5fz(B};d-F5eO?Qm1wASI;c!7b6(b{OtDfiWbV?B&N z5ZsVUU=Ziss7pH0>0XkrXrd=${Vo|45^X5zi_nM*R zYCb*I$)oV#m~9ksM&6B8$Jd#y{;jvChT<%ND{_uO=sH#xA}o!7UtoH`b{NpQeBW)& z?8Z4*CZAmGeUh*J z$ER!8(T_4#-L!~LO;}P-_PmzwRzKR5Pj#%NB2-gz<|Z#T?PQvZlH#lN#&)Bccggc3 zd7JSYo*HAt9x8M>v&XFr#`5NLR9y4qBKU?lH?qrw3#igt3#GI-Zr^0#HVs~F|7&aN zf?jbfOU+B|@-=i;=Ps^2*L}UkD0Jj&JSNqb1{55}WX2a_d&-T&uga<@QQofVsdfHr zS>pPY&o_cyEzh_3mfyy-NpIwI?b;)gwzNueBi@`%mTn@a6|UYZUp_Zl&CnR}GzOn} zFM3?oJ1%C;dVcni%xFnUOyNeTz0t%_^w7pqe{jL*>p~rufUW~BXX%y(+qynWwO2QH zpe+(-Y%RwMBqUNc$BI5xh9;D2WPjW|j1j~u?Qy#*cFmtO!5pJYq_?=ILFD;}euEBW zlR~5hdSudmG$S%Yc4Uvn!cu*nZT{MEEqv*ns!+fDoRvnxpqZ++u36hsKbwifPcHOj z59dtksD{5JvYf}=O!892V6&y!i%4vAkQ zULWtDU08qS8ra^qej(2M21n^bK0m&#_Az_FuTNt~yS7w}oEL7k6`=mOOehyj!4R;v zA!zcp)jNB&+#<-0x;bBr=fw<7O_@|9PV1E!lgy@8!`3}ayZOP*!XsQI9~-2$oMcQE zb(X#yC{H%(YQ!ovws$(NS%j}<_9~6pOW$g$;*K|oQLj?@+To@Yyj8E0(~(n_uV8<8 z(_>b!Msb*@lB7Xa7CT6`n$eMrqQpF}D7T&zliO zf{*N0IhzZUvpQEKTE&+F(p-uI9ewcgC@6hWOY<@47!yjqQ{}JXYqq7D*7K)F z#8rnldEN?!&8S@we3o$o8yfSQoLTl9M=ja|RqW|7;tN#=8gAVmd?i;EYL&CNM3~*) zjVe#_Q_Q(|yIU~Z&aHTVAFJA)Mj3f$r_lYkVqSU7xSDbI63neB(bIieM+?@uZ>Ao) zD{xLW4Q5)N1%6og85yV1!_}x$*k$Wg!*>aHB>1w`$m{xpDDall#4G+1m_l?iYpG+Q zaekad^-Q8O#?A3rZq>2YJ^r^ksy9<5jH#-Q5d0}EJ2Gr%wyyH>BsM(ZkI+J*{=P(k zJeig&;x9SNoSfY`dX@u!O$2Y-i0&@aHW8d-Sh(EEF)SZC(0!S1^2sQfL+R(fVzmPO zEi2ZU87~V9zMfb^jW?3Q`!7fKdK3~iFCUuXs?vEup(JTLX;ge^d=&liuZu?G){e_8 zv6B3iM(={#imiCdXA+~Sj3Nc)9$i*mE#k9$eezL>`5xm__yV;Q+_WBwzmnF)5FOZc znaM6L=`mkH2kh ztQ2ikl&%nXk|tQuc{;*uYn8?N0XT-lNXyr&3e}yLB z^_b~oTh`L?1q{z$K|!>s=?PYdwQ5u!QxTUJL$B(5^->i!Q>yhUhON`a1YRLOdfus6WQN+ zVWIT;qqL&Y19&;ZN|onT0SUq@^oo~h+Vl((3C&yAlSjrqy7#AaISnkF)nN^;G9|KL zx^Zxyt+_s(N#183?3l)ge4{n0C@U!O_OHXVwn(efi)TudZ_f>F(F|NGQwzRv?#$Z~ zKa-wu%zkHn)p4#P!`eq9c$wRF5hQomvbFiTlpB#-+3r1;C7|xMSqqGy3P4Lw`Taojb}dckf~%Z__sg^^wxB)CpERZv##rYLb!vCXkoO(Olw?Y9)- z^orNt&d?MLuV*?tCpI=`Vv-{tH{BmhyT3M4>pzJOYrHD$w{#%3by#7McTdAD*^#7v zY`lc*UC-L+gsiUEGq;a$mnP&dt8+H-8pK`dVU^%dOTQ6?jj~wxLQS1s_brRMRg%l5 zy~j03KbOFOnthO=dhjMapW-~K4u@bMJo``>KvE}diTJli&Scq%*jH~~R2S23zi$G*;X<0eJfK3f>6 z=xD36D0;bDiavK6cyu~?1+-eH&!n>J(OGZaFyql2N*f?_{S0EPZ}ntDidy5+H3vSjvGnuVmfua&{ZnNGTc z$!EpyK*ukxHZ~Qcoy?IeqTib28*Y!;;Mq8Q{hVrBv7h(*ag1@5Rdn>HlC$g##o4?W-- z+0KKLVl>rKkavR+vz`}fyzwc9%xRB(_woH4e%?Ij8Lm%fbON^q_o;t1Pj&3OIy`@^ z+0jp-vX!*ZVqR!rA|NS7__E2AR833hcut?L-TpC#<&n+Sv{5b;nREXQCTGLUCkrwP z>i!;NY`TH_-;;o}#1y>RCi8lbVN3QUQDhQ4d%L@J?UGppt3318X-xmw77Y(~MNjLw zc`|$Fn&{Ljof`R;ra#`Y$V~L7FK9>xISvUat6qQf2W}a?!i5r^YJHdNmR2KtfEFVj zvEQ#$<^{9A$|t9-rVv?T(}xr~2(r@;UMzZIwA!;0;kLE+h~ZLV2!Ax4eTwVpxXjy) zxGua+)P2o4{DTdH`$wDpvX;mms;CNDQOh`FZ_!*g7mHtYM)|#uFgUpTdg`dHrdFHH zS;8{Py$!Pb+U>gtB1p<|`PLHJPbV3@^9cyn&c96i$tFuiMy}P;xM|Tjktbo@#e8&d zUsY%qy<5E_W@;bJl8L`b&Eno8MNXNHF&{|Yy+~CH_TwE5XR7LVSY6tXD6;ISaTR)$ zYNRRBz8uJ_;9vGy>kr}S_RoEn_e*D7HBcebd2u==NisQqP9ZqOd9u?Wmta9*(z+}` zM7N+2c^u=Mn@VE^fr}&bd4*+cwn`l{!A(jvW-_h?4H8Ou59qdpt|uNp=waL_g_=B- z#yqHuU}Mib!?!O?l%8{5U-IKx>9DS23$E&5)FZprGIz~fQTZ0t5lY$aV~3+&9{0tP z`71oa&lO2jEi%||8ErP~O*=Z6_H{B*eO#(7W%OcjJDv8-$b54?scz7iR$8J(?Ar;3 zk2c0!*V>q0np@$p)J>yY8k=&epmmnL`Xw zYsh0|IYEvRKkt-r3|Xa>tsB-@rNfEa&<`RL1P?!Ugc#@>q3kj*@jLzX(M{jzi&V~-#R0Y^1z()IZwB=f`p-HjMCvqPYB}}SYC9%xA8%LXKiZmdjVoj;W zpf%?{+#~DYPGj`JM`F;VZ|_3TxAY8-O?IJb{BjRVs;#DE>N%YQ=!CW4NDDt~E0s8n zD={U#B1$UD5xv5zaM|{(4l4R&;@vVY`h~q@BEBO@3He+(iXOAalzo?`8wH1?MdJOi zKoM>)o*YWJ)nt*pC^xj`&To;%S31@DS~{4_f5>pd$-H8TN)g-XBjkI7y;R!iY;d(( zitJ-?pZpsOZUzsPt7d{1bn=42(m&Ty3)8WRU)tw{NR$Vk=@(D@fxL?{L{+@P;JXPar+T&04(NngX?=>x= z^%+%`me6*#fX0WtS_ueb(_Tz#rX_v6NVmWj`nfNokpUC*Wy`|PYDhj$0y|^E>nEUr zCS@Zrv>w`E+2F3N2|dYMln};Mk>@YC@)U!|p5F8)`BHQ3P!Q*4pMuWkoTsUdJ-MtB zWR5z)-r*~A!zPJDja@-g64 z=`^V+V-R1FQ0!<3z7a<$z1G7*M@OT^DxNv-Fl4r1m6<)R>Z4h6xj#;}+cGFm+aKqA zlVvNg z5`Ii_?Thq#ZmIR(WF4_f3+ru785~E9a;Txx`juY(A$;T*s~LkocA5TK%X%bR&ggT= zM;}a2A2}~FnASc>t1})O_0n@QLWu^~nImr8j6y}Dw|Gwlv7OP$Xn0m-F`!bq;#!a4 zUy%=FODXy!G-=FzEm1Ks=3+tFa&b$J*N@EX=%>c~(vuy027IN)MVo}PT@58rPMcP0 z4>M*e`GB!X_jvx({64fEGG_E=-uBg9pCkU9x|hH(!>>%JR%O=zvY~AE4Pr|4JgwUS z!*#umRD(1|jQaD`$u+{@wIOw;RgI9lj)$AwXZ831emNeKkIg@eal9LzJHf2@X>+nx z^RXI%;}%B(%&fQI8(S;k}%P!TiUw3Jb*tJW_f32 z#&+PwB|G=Z-Y|4aZT}kkwCSX^9#zFqddr|>UbRb#Y(cD^@!S5)gt-GIuUjXMM0wnf zS!;b_bU*oqnd2t6S)W$QyIzg#d!v_#dG?!pc*f)hEwgstAES_hYh-EaVzE|wP>sPg z@~2684sd*p5Fi$m2j{sg-*wZMFIhG+riN>CZlW)JWZ0m#*EKF<+{|u&gOKcqe#8^4 z=!AFnv2E7V1;{O!SeRRrfPpzntq_>h&)D9jtKL&X#^L(>Y#3zPt_ru9)I zhg*aeFAAqTHg?`;8%2F2zbEk>&O7^~FXIp;eb8FT$oxdnW3RGxo(1l~q9+ENrGd;; zv??{HnZn)HZ7q;)jM~b~txMdsXKcoiI0c{?>A$WLLaQUs7dFV=!yzLJOO}?7F=#DI zs#f!g@Ub$vxNMEfDgJ7{yC0sYALmNbvDn8Q(kOCe$*QUN?+J%Bqv=&??C1W>va-*msfw;AqrO5iXS3`vJ@@H& zE`$G%z4r`jvTM_Y^>NfkRCrYo=}PYi2uh72y-Eq8qjW+OkP=!{9z>8Ly@PZ}2rcv$ z73n3k5C~1F5}NcHvTyKdGxN^ueeCc1v5%SIhjMU)gnQlhTI)K?InAxr4d%_vM<_*odb!$?o`KZ+8+^Oc9m4AF%oG+bnrRQ3?mg>&fm_IBc`nyC^O<5s z?Nk9;VUbkAG-eLGUAKY`k5?iBe&a|NVdmo-PcP(v8f)6 zdM8{M_o;5(dLS$KS+wcogm%QRCt_>&3F4O57#~Mm?rDZmvVHAxf|%v8O|GVC!6lh) z#SiJgy8IfX8R9l&oTUICD>eam$v?BDw31}>(q?9AVqC*t%+DaL$Tk9o6{=%00dWOK z+r*qp^nD@s+gPbzgYHi-(AsrORrBq>%^6|OC3(NjqmmTP722B_T1d`6SO*6$VRU23 z8q(DH^0r!689;B!f<$j_Ej>^(aS{8t^vO*uT(@us*g*Y&!~QfZwpLbp0A=FiQ%9F3 z915Jg_*;;%ok6%^YOW&HpA_(ajVNQgc%TtNPeCYwuoU_?Bg;#hMW8|D{cK*SLkZvC z{f5c8C*2T$&LQHKDmn|jX(w5@Nv@3}|IVrl1mq_7{5e!t}#4FeLRV?SB@M^FJZde~#?`WlXkRL}z)Wo2oen7Z=}t zx(3eH8g^i{!qv$qim9RZSbX`DpYIq2lJo-(X2{9f>UU*yatr$VJ?dYhpnl&|QLiH{4 z@EB{EL=|1Ofj<@3V_fJAb3`jdzp(0|2L5=5_RaA-@2<@4N+MGkXuo&zyxUgUuOUC( zIj?%W=mrj`0DhehRvsM_Y`4BTBeQXQ@WCdaPYWARp)19*2=R|U z%wtXxH-jG)5&Mzggrg1j=X5oZ}eit^I5;+dEpK;_I^-BjAb z2+4oE!FPH)?tB}bPAMLWWjeRL+^SXSzL4*;JNk+sY+bracv4v-IvojAb{*Q9y_)`Y z>xNgyg%u#0#weod!_xTASG^WP*O7C{Wr`Wj*#2HEydCt&Eu3ZRgRHQP!#bHUMDcr2 z>I~UM3gi#LnpLS$9lr?GU%g*P@~yqO(4q=A%fkg^qf!s|=MKKc()lS>IIl>G%KwXU z(!TS)cW-|$%HbaPvKVys20@#1yWT!a(%HDUdn3y-s6?dFr$h~?6BGLT{8IgxrPsaH zZeS%Q^-U7FOg#dN7jGd)Mn;He!D=YDH@^;Ji<{9$3i@kn32OLl&XSidgW|VlXf=;P z7zu5`O|_?&fPvvGwxmq}nvQM`(U!!;&4FP`>l|z>{TFE<+$k?08~>0g-@0}c^VR$C zJRX!q1w=*@rW=})H&k(6cWlU{VqOxm$^G=u=*u^*Ry}M!vzxCDNE^OGC29>8mNRoi zugH0g5FBxz&mr;Ab>yBP=>@h~7w6h+zBOMsSp1Y{^k8Njr<&L#zxgJYTUIkPT&rK> zat02i6z}kjaAVLy;|QdbHR7Fc(36NXwgmO1us}!{(rx!#MlWgPp>Oe^0|R0ozBa7Z zSYguD?QTI<6)?uDHF7g6RE+HK)GdZg*?paCF{;%VP+;@WO>jh+K(>=)4_T0N$KOzO zi@{(EWx@-s^5WD40TRHncO@WDf>KSLA3H{?bTVaO0ig%+Q(8@550Z?$rjIvy{I%Rm zYW%ie$E9da`mRb@=a%zfGA+oGJq=BMaldUIKsz@x7~$?cZ|Y-HrE>=u0Pp*@5HwL` zs+-2yNACWvP=>}B*+#~7dY-)6LLcpy%e=4JneH{$kyMqBq8*yQxA2CYiIBtPENcj< zk(dcYxWp4Gb#yh0LR~+_C70hbR_es!X3dM@D~x7RK9+Z$+(E%_@mEO42&#LV>2Wyz zMb~kzNXp?@COi>K?$GXqgK(BSd>)(rNRJI`hbsMm#H_GLPw0Y@(D%I0Ep@d3jo^*T z0A_%u|CS!e|2a9($nf|o1%4v;n|rQ3dAu++jb$;Y>lp3}XB@YQTkt(*aW2q-RCQ9L zA;m8`d3~rKC9t}8C9bZ6Lpdx4oovrlC4GWuM2;ox(*-xN8WJilOz+5*Q`SN+4u4$< zU-!IQeAXO$w{A6W<;;yB4W+)q?+batN4GG92^T{mzi?!y`eWlMT-vlsRQG=q_3-^c6gHg$NT$`t6XUZt;@{@ z5z}n+boY_-zEz`b_y;&~da#QJbdFa4dQ50&&Md}y{By>w0S3}dv78 zZlw*f3goQ)l>5DFhFa*6WuzhkU=^!HC@s#Hc97UoSTU4V?8=Ur7 zL1sOro%cONf6Sp(K%*H>=*^&QWc#l2yVi+CKXNB(y$ZT7R~SGC1oHaW2Gt(SxdGd| z!Fo4h@p~-aP}W57Li*(N$bP!)ep{MbQCvlyGI-2H=WCA5{H@W7nYHn9nj|Zc`k^0> zQ?^hm8^fbkB1u-0JEbNRi?jLB)G_3_I}#b754>m*0SmEP5yHz-uufd*HGVg|bWwchV zbdkGCO>}qRcSH<}rsB5Kh4+$T+K9L`WAjuQ@O2jLRz=gCcK3rl0Tsuunj zbrF{(Juec>gG4&=|5#&omnE?2njhG7{X!*ZNe3aNSBS2Ev`}vjey$UJT{7ct*FMYO z{^Uqb!qoR6pbbH6Py%fz`Xls-UiLZJ{MR7+;XcM~!$Cp`H35Xycm(x*Sz=RND>ef! ziK=LQu}x*FGLWd57WEpW;v)03veSrA^dWixjNLum7{9hAd7$embecA=5=lzw*sA5! z6>V$9{>+WO<;MECM%nS_!J(+yC z945>*USD4tCzy$4rNh6`HqkpMyz? zobS2_itmiNCgQS=AoUMjTM(~SUt@;Y>Cj6M6NpuvwVc`O8oalz5P=Mp(cls{Ah_au z;3lnhcnkF8s&!1#R&%lzEKRWQsZ!jUp=se*MTdUj~1 z%|#c><_TW=QMfSi*7?vmE|p=vSf1Y&Sb)KwkL>aZX^&O{1m9P-sOfwf?i><7&k~*| zn`(|q!m)aBitR1H+oey(S1q@oot@)4#HBGootrtsU;5Byn=26IHj&Y8EJ9~YUol(z>S1cMBQKeXZpj2oiCDAbd9VGWa7~NXvp_2o zdGlhT9=h?-0@XIpy`-VOkMH>-@3+@-=CzynmQLr{IKbe;-pn$Ss5kW@m+#x)WQjV< zs7DI-vOe99K@jxCu&g(zTdz;@9lt}lb(OHO1bZBr3Zw{xV~!6TNUL5L=kz3|+qYUfoLCeK=<$KAWD2`90oxpaVkG)7BP(w{E_JPyo*+ z;#vF{o_Fk0Gdt0z5_NhCijk@Nd@8obRfJSbjbv_@%%g|BLVH_=h$ zq`vG?kSkS~oIkNS{x zm~ku=Jn_n^H!iivJ(dj67a@<{FV{+Bfi>-;TQ^xIttwfcvqEP)*$0B*fB>yg(l(D&%JG+rg6tdOEue?RJ zO};14gYf}6os;Q%l4~?6RgMW#qq*^`rO`1u8%5^z6X6FvnC_w+A$XrakX)#v?^DCM zgHIP(QU!qsb`TkT(hOk2txMow0e-x&_<1>yN;c8osMiEuuiHYB_4sXCmA7!OtP#2> zG~A0xt9xT)wO>Vjm>|pn++s6GjD)Nu?v}&yNbI|A}eY0@7h zWym02wJIcdm+6V$v;Vqx)^Kv&&OOO=ct8X!&JtB?{cysgw#bVE+x5!6i<~8H`=oyC zwd$J-b6Wa~@KnoPoi_dI?pITG&w(6LCy=8~tvYnXtodd&@+GqP5oZ!^Ha$DLNDiIe zm=++$(&b#~9p4&oRXS=YUBlCGjX!4LMuN}9M%5CPjJdj1ni7vfl5#cU+7R%^fp<{; zA~L>uX*fDAxGi$r;a=Ns;VDzV%_#taFTU@s&qx9Z`@QKh$eFfC2f%a*@AppnAVw(;qwrn1&MYfnp3xug-L#@166 z#!;AM+_#Lpd^wam@(@y=Q>;3Q(jUD~qHSSW%h)%WdXmivQExh2LHN4EO7a@#fSxvx za;jfygo{mTv$_(5mIiXwj4%QIo`2@Zs!NPzcV5&i+}`ZnB6iIItyw1f0qR6Z1!gRK z*)k^P-MG2$C4if9X8o%R*WJ5Gdei1uz9BOdV4S7*4}g_K2LQjBvjsJxzHsWq{)mV7B~|>} zhr7KLFtbSRq-#y87VhkK>f^uMjTs6#!GdMfHv=!|+F#g+lH|H0o;-NyiK*31UiMs~Am+aFxWf8Lq#T_n! zl(N&@tTRqW;G@Rv3XG92<~b7Xt(Tp_I2>`=6fq|AVmo}>J)m+KJLxQxm;T0Q-|6B# zX?ooEub$!6V29l@WUr;D%7e2d z#@sqBGPnFW=x(R6c=nE>s|hk_Gx1sPdg>=`!H$i+{zczsgC)lol2knr9US(o1@S26 zptYspAHaJ?9)LGn%)o0@))<-%$8Q18ned|$hYH0R=V}CPef7xgkL(wog$FR>zLRl? z=vRtj$9M^SljBeM^JfFypzZm@D%V=L7{cy_UUSn`$?5fiH4|P&zZR}RbOyJik6tC$ zPG^Q-XXJ88ypVjv=BMWk^x-96&YRw?#mPt)eOtuKO4u58->nm5Xh{Gl|Buie>nBXx zi-wtA`US^xg`T_M*WGK* zF}W%=doRU`*UfGrMoi~xb+SK$U}olmQEUM+N?`NH$or#=+KRP(-Xx7^`x(tj-_UzQ zQUwyuH`H#NC2>C0AB=G}RF58(tk?{p=b&VP5Ir#p8f)@m<5R_)5S5)#1Ca})k9S=R z!w3v5uHjcU9yq11OZRZgX4D*AJe>7*^d&Y-u|$Es#qZkZcXO&#CpbW2)HQtrD#=?=&{o#KDuNTw{XsVe2P*+^j66` zI`aj~(5YvGifF_6MM%_qcSOI(D0fpBuzTnuJ4z*?3}P=JKJi^0{vsH&5+ZGLvu3wxw?1h}ivN3BKO46nbagU$<>8}>G? z^y`A_oCZHU?Vv{PVRQS|nOj+6w%OjSo&5RMoQt1X9mKuqmSp@74&klDn)}C z=QQoD(o?+GH|Y~}a{)4KbTw9hIi5wKys))hy#T&aaynHDA&CHjdFU5q4Kupvl+83^N zlA<9I#_=%jG$)`3wrF!Seru#+Ts19%ytwNFYk1sD{B$~h1IZ~S|0_6r$&vCip z#Z)6N_UPL)_X3lA8anKQ_zpexK|@S(eid((bNpIZY(whAlju~!@tzYA_NAD}B)i?f z(C;*bigs^y!#JMSEb&7ZstH1)Hv;rFc<7=L6A62RPty$Mk>kV)B8hZD)6+f70fKqMQX62QA z9a3mq=$;rCuZ54(Z3UVLj0o*9*0{DFAzZ!>%9ME8Qmg5XX|=%#RW-j5S#}TywK)wg z`56+veTAP66!-J>&5DuQ3mrqExsk_r`KK;b8!-joMp5NPd_y&TYYCWRY zqV5C-^w1C|jdXF`IFOp7fayJ}Ml5r&`Fs^lutM|KkW59~FBWz!@4XmIEMdu+OTK?P zC$slA?Czz9PhY;ZZygNKs94i0$zcWgnP!1=jYPO#`n14?OH;smzUBZ|CtwTF4Ed1E zVy`_Na@NB+sY88Zgn8w-^wG*YMu$i6jA-~^UfLiwRpx`gu^bV`hx{%{r;QbD10P1K zW#*H3$-&wRAVPlD4&_zrV&a#|B(Dau<~<`@?U3ovG%Tgn&t2or2@JFT17*X#zgUFY zWjk`vwTUQb^0?szVbw{4#w2!I^7D=tf<+(epK)|k))E_u{)gu(oqjFkx{JTre!7P! z(=X}dR=N&{gN?x`M+!a>!SnTgq1-v~8ifmqhAcmLvflbp8GvEjBwtZWFc3t7I%v&* z6bF&LyBo@LLh=k04$`%;X7GKcKr(cFV3|$*Ib;lh()8iB*?SF~Z?=d_)%FXz?vB0^ zNl(5eNitPXy?LhXh|A|s(s^}q4wHJM-GN&2ok zk+$f!ax3~?jv^A=(q;@`|-NHSsx?=nDzYRR5@8Us#)}MzHmT7W_|8> zh(15?XaI|k4*5tUvLlT}CbaM)rB~$~U=!gqWDT zP9f`#k&ZH@_s&#RNQyl8JaDqnL?tb>Y`u%!2VH!x6mxC6hHo2zf{>VvhkyI^UGfF= z#x^uOhkjczn>fyDFH+oRd{$v#OhVEW9J=e-4vLQj$d?ySN|^ZuhA)Z~w|0D}3s_Mt zX`T2mP%k^&5gDU1U7?va_Q68Of90l(*#d((r35BL5BtuPLQ7e-mB!mS@->GuZZZuj zd|2mnT1T1#btDcN{&@0}nS@qO)$LLj0;=77hxkLwR`$E&Sn@3WuD!c`+QBjVV!Hm- zJ#o9|zCoRxs|iA@@pul?n!9Z_?MvgtW1L_iQpXbs-q9c{thXKFOxyC=PM+|m%nqG6 z&m804NErloWv7`w&lIgOZeA+g0}Db8=Nni<0D6<(UL+?yfemqB zyo*D!V-Mzh`R@47>&^}FHf=fd()hJUN^b=sHyrK0Vb9KL|M=jSp%Mb1f_UM)qG8o- z{`qxJvX9BdM&@n5JRqZ`ltxKP0kVm7tLn{xm>U5ArI}|GsH8`mU?#D&zj;8}{S#8qb zy{@|R=*<0Ap#SHK{S9l=x)&--_!8_-@K_4{LJ1}cH^x_9r$Ao)3mNG*d#9zQt|f)5 z0Wnw4Z)E=LN%K(EjX&pFTvzQkqAm8>_6L@tE3?%SA=Jh|w9OF1~#daqB%EeD=)4&#Fqe+L?d*1cGaZaO|#`a4wD1yW=Is1A(y zxV*?a^k28?-vjbHnzURnpO z*Hr)|R{Q%W?6>sTqx}6;)nx!UB^!S{n5k-5y~778evc0XGwZIyt7#sR!$rI&J4N0|31h+o{ZiG+Ll z33ep@g2Dle-9q|rj?_xW03I^gbR3%Gj&QJyZ3BLJDBk*rJejX7!WK}a6sPYXDZ35T zznk5`AM)N$cg@Q-NV-HRcHdJ1!?Mv_z%na&e1gKxc4O@t1m`7_mv-}l2wGogD0d1i zl`46c1^DKDG=LC?3;6_4Bm&c$`ZLG+!)>`kWaaKqOM_*qmf+Bf+pbw4NdJu>E$_L9iZ#?mZGv$!A$h_%QAtRA#_rzZjbH}P41&Z2ywL^{zDjVv41p90=*?wybv7fas?-+>=?%wjug#ojo<>VgdIH5cG{bWA z4b}f;E9Ir3hE|=maPG8JMuGP957(aEp^A2)U1EDx0MmBu95;_@qYI@g|M|dx_YUdd zzr*CcL$(dB@eSFP*irVy9k&&z8_)hTZyVgue&V#(NJYP6JnR6>K3Ig|a&lBY#+ndz z{o=YgJ1SfO;Z=d2$TYOY>{{Evvhf8dseZrh{2!k-bngAU?PJD6Tbg>!B;bAHtS-dM z0PN=cZg3;QfhplI{8@Me<2;>Aq2 zRHtXYLD;|B<18iB@;J|O@TI!LQo9BD2Q{OL|%R=N8c#Wjo+qG9?6>UNrPacDR zbK&%6O75h|inlu#S|;WI)8I?kd2*Rn$ALa9%_d1*p&SRRw0!J|tUw2NFnacOYu=NZ zn^@GDO?$bXzHxe~%F*hG{d&(h%$l~LePuG$d1}o>z1YU`6$5wT1v7=lqp4Led}jIT zrVXmD#v@bAb>_g2Kl5RG(J+-Fjf{t$)6}wVV_Qa32yk5k1|}c_zjWP`*%*avnR7L= zQ1%_eBEPkXiLPJIH<|K4ZZ|%=3hyh)6AOTiGlh1`isp{6qOYr}TQS!2^S~Yr?(Vz8 zK(igwz*x;-Pw?tTlbgb3v<(sS2aP=V9lnbId%gLV=X!i6Q&pH{-hTC+x2ZbvkHivs zrGFhij`?6Co_!iP_w<^04Gtt-)Qqi|ZZlr-q#8=K*sO4v!-0#D=W6SJSm-<%Q zOA$)ryC-ck@7`K2^5?O9ov$8|=9D8Cj}>`$y(Bb=x{s8j zG#Z&S+~O0h1zkH2yTs!n55@Kj=R54Z@SUdDhtd~*0o0?}MDz5C$I+v#?sY1fYr#i` zj-WF)V}01Ch8h=Y%}rtoJ$;w55m6~MKvw?|ARMKRyo0>fx{*gh`RW$a(Si7~Xel1RSeTXQP z{UAR65y;>LK%4wN{|Y+Z0!xgT!6fpyO_cUh_p>wwj!-^NS*hD9;xJO0ThNJ+0^W(a zCi5dvt=urLTBWJ;^;&R)$oGr25ug*)$FC&lVKe31MD)iEJmG` zBnrS>@==<F%rWkKu7jD*ibp8~n28+5^(*Hzp3yZms&9%4l4 zB;J9rrU`_LAH5!I?%bj@a1#I9!O14nmZ9yN{ov(3T{t9r$*y=R#mx!x8qhuN3gM|3 ztcbgXY}62uq$hjZjXoay^;mo5Jh*vZ+@ ziOX1uDv>Ih&4~>Q9$N2wA6g}IJD44X8fXT)ZXbOvG0+)EU?X~4E5|E2=(?(eh@QQg zmPp_$G11VHqV_8`JVvY7vyyhfq=%LBEnmvm!~R@b00KPwUjZD5jB3}N1+N$)tW51& z$WUY6M|WRpeplqqs@}WN8JMb0$a?7!Ru8#9$XR)82Q8(?u*ARA1{r+Wvy?t}-r}Cw z)spO1U?dKitK25s)~8$eMlYTnzXd5a>7VOL@K_w+K$&A?rA*EM7{lCO{L&%s~}gzb#=lfj9or!KcoL%y$mXmKGJgSyu&Ol49|{o5j0~e}^7- z+(#Mo8UEc1f$qwuLk#@$v}2-udKuFt`^OJ}|Jyv8&C-2f-OdaPj>{qFA&=cbL6|}|4e)Q`G`6*cf382rXh?oM@>TY zMt3N~*+r&rxCRCK6GyaB6u$3X(`7oI=!oH*ba1-Zk}7q5Bv}7M^OHf7o4&mDk*1+@ z#jwWEx$Z9TxD!zK&EriX}D{_M?Cr$hc1J+FJ`5}=dU)>B=0Qs=q z+iWEMR5L~W;!dGaMgRu7*0;P~Cs#7|2OaQy@Yj`+;Yp!!A`76eaRpb-$R!Xxsd8PG zTZT3vG*CaWqOsv5YOR1c|AVj-q3}K-La4YYPw}Tv2;LfcIc~nEN4DT*()v>;e9@rb z0b=R!VVNEKOuCJ4xK(*SbjC;^waqWmRwd+e-BUNDueU+-V2Qt*pf~_ro`c#wj_80F zv0+{lO!Wn(>S?WxcWGnys!e7L7OCXFp!4l3pKMY(Nxr{7 z8zEB$Io`4gk0RkVf^PDkwTQaOSaRc0rQ}vVDgcjy!1|0bQ zrEkLAL?yBsjb$i64?gr`b!R*ra$q~&rkQvrVATwbBfK8*Do~*DvT;0nbgBv_S)Qtb zMRbZCZ;vLSqYEj8(e_13xM2~oi}NYjv3>1#B6(NUd+f?ULs<_G0`JjK_8e4O^=4i2 zK_ML1VqBoZVU3zhEVd+>jzMBd@_Ac8mAp5FIR!+e(qE{L@A5#JDJ6P1lR_B@`&Qx9 zdnlc15<3CT&wqeU!S{x>JY9yo++85C{i}wWDH>?t^z=%$AKqmUtyfg zUvlEWdYaY{x9eWbO>NH4VxmArHQ#bl;^NzHN5WXJ(Y z|E#)Zlho2OB8fkcX0=S!))#57WeDsTDtFXF!RUVW4))Ee6}KtbtjN#N)Vk~@MLJ4R zR^=Vv-hS7UA7I((boUJQl%VUtW1lu0AHO}iRNbH@r8|}4EQBx43tQ8$e7pglA81<8 zokFTJcp)Zqb229%_0&GvSbVQIEZ%-t^EgkeaNTJ0gGR^=Hc`GJ$ajyFY5vkIg`v#| zm5Y;f!yhC02doU3D#PjP_+;GYW@VGiOCa0tbj>xc(-Xiv=HsYWx}u_BUh-xi&RCxP zH8kK0SLKxgG=f`-S0!|N7`aLlvy;XM-rCd}!btD~s?aqRKuG8^E&1x-cvUozp{P1CH}kSGm*GUFPt#dQoVT zn<}9h_?lGSiA2}X70uDrfrVC@(gT0{*@z~!lQLw$=wGSl*3ukK@BKw}<90|j#LlHP+m9BdT90_D`fxOMc~ z1}xrgRcfd`{FApwB_F+00^dy7CY(NjzlAqG2flA|ji%6UMSc7P3l6l5IeM)PeT#8& z%RN*UVU8xJy=7cQ4DFWE_)X*i{tG*smGLP~yy^VVdEq@o-Skx`d^j$-)}mO))+?~r z3xoKYlYF?#qfr*xzm1+!jTf)s95r6*L_>3P?fK~Cn!p_{)(ue6!fuJJ~9SjBJVqo8-s zZ>5Ayqece>O9uI43Y8=1s~tP8g@-`(G5rls7RM?gO zRm-1+zO#-OY}-8Jej!_9ibWDv4&m6W7N7gMIDc2=u*<3v0{zh>?j*SptH`{R8ZqM| z;M}08cE#T15GHn1!$~7l)n4@5b-K$%FAQ}yKI7hDM3@{jY0UVDb7aqw1BQH6G@ytA zyput{^Pm%*?wdbc$MXp{QXbDqqS|Y6+IbYZHREgp5>f8$&s1HmMR}H!g!eV;E7lD0 zTVXjPnVm%!-P&m0jlEcF4eQ#W52p8%niI(<3#!bv&oiiIaH%;=z!KyQG zNs#~ds&4WF6&<&o{gZ9;<(zGxF{!y(@~A;AB+~{wWtY_L^5Y zn|nytltIa-LfiZ_Nq!f%62#a@!s46y-hh`WUp(f8tJnDrt11htvsHSpqq{jYVerws z4Oh$skg*A)+N|W^S^X%`GI-lv1vaG#a^Lx&8@L_5p@oVyfn@i_0DFZt6X}^j(+%fJ z$s+{X*t$}`V7+I~ti1jbzh}c=$U3jM{}24EBNffwcC@j~9Nm3039Xr7{jWefc8|GA z=VaS_g%eCN@E#7muG;Hk<|V(r)|7Y55^je*{<>8g-xkSBui<}JF*^-iC7zgoHf%6qe}x6q^{ zErC+B8TTy#xWNQJr2-|+ll)bWHBvlJM(O2_)1|@%R8iKFmAnj=5wfBt7?i$)JYrF# zA=zbw5~OToZc^dfpEf{6fXV1{HQsiu$UX)?#RK84WK$W{Qr!AzDcE77;^gc2(aN*) zP(J*+3uP~P?=y|t=>otSf0ZHk28%uWW|sYoqBrDm8hIbCAz~ z^TzqP3n#dqJYOHn?+xdwI?NO?Agd5Yqtu!!dseqc=5*!nR644z4Q##Cx~4Ge`w`Lk z*j;+XQAf2i$K}Xt^wpNU^&c8(X8S_uE!3G$+rq>@W-z`L=po?7jHN&>Wm4>GS}`Uo zbKgPpx4a9nR5=0sKi5}h=NO%S0`h)e;}3GTU}>8fTs3gY0W$c;HBHhzQhdTP+IgyA zz{64!+ZmPPjS9Qy5m57;RUNw~tU2i1`fG15k`B!Ay z(qMbMsoPZ4wwZ$|ROYMBQ#|we`68_3>~Y!SPYa%W|Ikv6xfI?oR8Y4QGhozF;S@|C z`U_!Z8_+QCU5kQ4f`|vUvNCKXd$TNRsxc}-^~OVS1^qh$5cq@BnneGti^Lp11!895 zQ43d&6)P+J@R5S52|#q-Z%SSYDw;@&sP5!UF^W|3*jgXj?7D9I3%z92@d_+h4b1U~ z=}3X-RSrn5n1TEncVwyq#~*A1D`{-I>zYS{2zys{rCawgGD=I4^z<4mDbDs(FoX%_cvX% zJmCsr2`^X)a*nBZlW_7o5 z^+xMiNb{3LanR!m6%;60rL$<=#0;_FF03^NLg@67PmnuuUS@Kts~OZryd`p%mTu}&NO@`m)$`$#w)QVN$T4m6AOk<}pe z>rE793vhbKoX9hfATDmDU0+e`y*Tz5wG|iNIRiG8n_>;$huh7^tOdrh<=;WX#z9S< ziZk0q=1tYt2W(}*lSz}f+a##0_%srWT?-)w37Evr*LwPRCWk&tyo$i1v!yQ?>!$AE+jxAW4;HU)@F-A>KZEV}`Uei-c0_(f9{>rr3h34^a zo;!X&FL6Vy!%jNma>3l4!>v8!4yAx}dU&ft@mjSy@Blp@EIaCXnUw)79a5*4WU&2D zHCfe(wtwn<7P?Ei@A`;V-PwbR%E9}fQmeOcPyUI(E(G!TD$#%KMtIX8d)Knp$LsAb zrwU}5-p%e!-~|B7Foj2b>o3S+*+$O4YXn^1odGEoi9W{&x$u%V9%GU*(;X${47Vb^ z_(RTb`U%XqWJ=GEyF5`YoAkjovaa|6?Q6alOv0<=k6RVD)4H5_!W%~T;riQRd!br+ zwjk{nTLn<9!Mu{6PS;CGWGK4|8;IN_{S8GVlND%4M>m*C_rV|;ODFjz zC8K+*nmx*Nq&VXlCxF>v@0wAfk(uO8afHeMHp(`E=<5_m6-K@lYAj)jVv^&03n7ZQ z#&}o=WAs{vqtAY}c6j=7tmsHqBiTvVcYy0&1yZM}#`s*mjZK^0@xq-d)ah&n=l>}> z|6}=7bXIS{I+$q2Id?y3IZ>Ar=MT@*Ge`+&>}|{Yh?J2sZ=TPC{E(;i-hG|QN#3%u zJbY{zlT!9C8>y$|0spl?=~H`jSDb6>J}6u*-h#%KF{S0{#+T2)Xg33+efRig_e|v$ z1NB=4jX-TC=k5`>g$QsUm%poM_RG-biv)4$DFmv}c+~#pDC2?$Z|eK#YeCI74MUrW zdxr9p3l8^?Jn?Toc{lmyQ)W2E@c9d9wm#m#+=yy6727Rl`)jEACguR$k)CFJ0MH$s z27{TTrUtplHM$X%CzJv-MU5g=z2~|1PY1LmR58^44+r$ZDE)MiIa6@j?@j;!?9>nD zwoAPVqvID`S$f`8HOxL(M=#T$K@o1H6_VU+h@oWWOV|y1GlcO#J(fBFtCkn@t53)H zOwmnF+>vR0=hSXNQH4=Y@Glfx>b#vs`{E8BK)x%Vy=tnPKOQx_`$p{O5hi(fZ_d?= zn^lD#zhHUkyqryCz+J@m!ffcFO$Jfs820W$doV})ChLjX?eeZ`v*OG9ovI8-bELz3 zgiz~iV2mwYVZHW8bJ1;nTMYb3Kh%81X1Ab+6QXU?E>-QjQ`Jikw{dg&_`$;*l65(O zPt4mqMVtwy$`LRb0ZQI_Qr4^a-ZXDjN4>@u0*Tk$u zc6bqT{jqg6JSNbd28E>xxRU&&^=nF&2!5Oymf-u{l58i>+>@9_;3vxWK1A z8_P<8sJ%xr(?>3YF7Y;AxsOs-a1bT)+q=zwPWAyKxaz;sOXR*CE!^m)8u6f%P+xTV z8LNWq`uD!-Vt*c_wQ-7%RPrppaF@w+>~4Y+FUzjO4^fqwYvCP5X@`w&$r=MjDdSq= z9gOrtt_ZXm9~RcC0WE`R{#H?4Ww;)Hw$h(Vs>b_rgcpBW%RDUVW?Gx{HUocnd&)Lq z4WraJ;hdCD$@!+DUQBSUDa3_a#mU<(t|^^(BR5B{l*YlvsB4`RSqVs#cb8Uf@{v0aT+E z_U}#9K@dbT{k?wxyn-es;vSug(EFy+JToQS3nkCMTK3pf+iOB6Gx;ga-G56gggtkI zB4t$SQfH{zJ#NNv7mvVH;QIV%fEh|cr>!+XG+W{l+aJ8ijrwclGz46z_l6uw{dS6< z!=fZ6%POvH_?gbQ6iW+QV?KGPF*@j*I>^-r;CS#`wvIZVswU|7Q#@D3@79yRoNPqc zd=1pxjc2RE9MDw|-<1yah9)!b$Yz|Zjp_FDvAd@Zf}z)QLkbai1iJJy(^$(Yft!ZWkC;F)uKb&qaoeSF zoj0if@?oE4!6LLhZ(zR!2wns#mN>g2wYcF{!~14V;L38IqV^j0KZt+@d0EI8$0XnL z5q}r$xk*R$l^o@XtdjfoikVOOiv~r^8>Of>xc(|z(CiwV)ZTfT7o8>!z6Ooff1c}o z+5lJs<|G!@tKUk`S5DoYinguOBWJW#%(TBu7I{}X<4^SFEBvzLF(@S<-oybo*9=iT z=umhWK4akPE&*5Z%p|{eJX>QoF=y;P;>AQ_FB;u4AWVt8nMcXXg@^{gcCJ{b{$rS-o>*ynJJ0Ii z(HKiwd^db2T(9O!R(L4S2AnG{Raw=`39o6ZZmQ*FH>(C9Y&jt?a=Nx}IW4@Tg~@q^ zAd(d!j$yqK&H0(QesHhcI$`{sk@e~65Ch?+xmYxJK}5zynvD0+A#aaXF4FM0c7R#! zo#L2_Ly-%#0WHzdO^n)Ye2>eejrf!f1Ww5TVULC3zgYv;M*pw|IIHkN1_vq6XE?-@ z9d(kG$^Kx_la+Dsx!K1}KaG01&th#ksQu;xV664`e#pgzie#uHi~CA52-B|_Tvvpd zec9_;sdE~4d44W@yTEw~N%#TZaab@loU4rHWa=d(mF)^~kgQ9x`Za6w2poaLgG#lP z$T4=OCyS;mOS5e%Jg!Fhy-rVrGq7rHcG3w6h$E9ozlmoYT)G}X5s)`}6)Ue`t>{nQ zre6*PAixa(XZ?xcl`kdD$&Qq~0j+?o4U;;LcWPGsKMSC*7dj;k*WyS>Qyoa|GO+Tc z9KV~6+(p(4k~*qdb5|mbXI(0~jxlf8fz#D8h^p2AIf&x&J| z<}InyGlj-gR%iw;5ngOPy^5YZo%EH4y2Vv&6K(;^+6sl>opROvrV)fQ22$7)r;d=g zdwUJVL~yL`^l@o?9pQXcS^~YT^95tvBgE1_H2Gu>+m!Fzb`2Mo7l2(o^(Su!MCX>7 zpVLxinnHIO85KqtH_|_N5)(XCp9q=!c@H?A#V()&_9s=9GxqghwosahA>_URQJ}mH zeJy)Eg5zoIfMiX5*r)$DCzAii zKK=jQK>yO3i+Ne6E9D!IF!ii`llbrik6$Tb3|m-w3~Z5Quc1}?hy}-;Qv&=e@&qK1e|S4(JAXB-Ldv$qkh}(-4wC346Sq4{hbo~SbmLQ zj%qYNF-#)*|5ta{8P!y}u5~;!9vREX5DQWS1f;7p>5lX!2n3`nD3LIL3K1a`%OD*j zNa!#s5E4qHON|bKgcgAiq^k);YUmwuz68{nbDaC*uKVMx%MaFKuf0Nc_Pg`F&-;|m zWWU>+VCk+&J~J~wCX*bYIWt|)J#1lSsw>dNQEL=;uRSKZ*`Y>*drNXqk~2jYiimW^ zN~V5!v#23e*jc(&^X9~)f>(|DamU#dHYA~0nN~I9hLKD6TbP^oIhklT|FWykwGsK$ zTTHk`d;1kcU?0ALzm3cL0e<Fc!56MycM?w|zuliZK?>&bYm?4Z^xD+F#0#qi`Oh3rcv*6dO|9vOMRKO#u2x)n`o6Bb zCxww)VF8^^96^bXbFYM?y2Kf2@1OK9(&1RQ6wpWg*&j@_O8Ms}#ht~;>E6vws1gd0 zRI{o7KLCjVP_fdM6vH`;rbO!GwpgOJ&?>BtA zAI)p0jwAU7hcqU@PEZb$rmN7>tW%fI9Bp?l9n_gn`RgXB$3AXmT=k*&rP4kmn-A`_*s+}87_oWrpJBQ1NL<>7T`dnSYD7q>} zIA*eaN@L1mEyl1|v%;SLk*IH5F-yETOS*1%v>sE>wf4-r&s|$KgfjTd*hd%=_FCBb zs#j_^_QrVw9j^VhSHH1tbv)EYF$A?Ho&V{PlaV=Gibf##9w4tZNy;c zU>k(d-3uc7YEm2o);>pkp=!+~%Ef-C5=?@fUfp$qGUIR*gU^ik%|_tl{!EEm#9MWs z1IF@v8l9v&$accT7<&hdwTO8vkGw|@3MAMiWG1fL{}Qj!g?$($;u@vD-vr+~wP);o zijE0CtF_pXr~WO}y1dU%$|y;3)1ziJE%IYydHwKqRS6BDkCWnrW_=&rBGBTgl!@aW zk=r=+rmVPSp?2ksD~kmYM13*9kif?M{4z=iMwZB|9~f?(*+M3+w89G&-Pcm@3zxi@ zNsWX0v7fUWqJ8{vj1t4ObVO^i8m)f>Jvu<;Fg6g<-7p)lRO;3g6_=YhVkI{sJraPru}=r;X47uuc73o)8xYSe zJs;(%Q#8c2f~L<@+pzg$h}6?%A4hX$j7|wG$h25GHmDHlv4WscpGOlUD$0#LRezt| zJWV5K7EUxM>n9t2^GI^@LHXm+a*00aiL8iXTIRYd7&f| z|4<19k)GNb0qRyV4yvKj!qq($LG7}HN~HV|4#Mp1zF;|)@ztrUu{!ZA`r*ZNuht0G zlZnF;k(UOfIx-FEYLTaI9^p2c&1hSbr}{wOoYAk%_mGPqKZDX6(md*|fLD#XwrIkb_G zdmgdTy&49KMPdwvWEinQl48apkSTXG!#Ux$8l33CZfGw}{tenf4czfy3$^u_(e}1k zA-NyNR+l1Z(slo6ty0758E>pm$`>>CiP{gVyaEo_ zv2MMc2$iD-VtN8;)gSho;H&*zir!e-ihVJ|Ui33q>WB#Xi?&9!vZ zV+b>)i{JPepHpe8n}Mq2D{A(`*dquExs!V3aLYdRtu5D`zwI4uLJ!>L`(hM5vTYQN zCNuhx;}CCexA#P>k8C&~@ke^j%Fuj|HX_q+nl~Z0%t7WW-BjgI3pw=8B+Ww2_#!kK zJ2jkGw&?$Kvoa4!5=rPCT5KxRK}o{zwCBeX%9?G;bi)qe;T=`yoc0`vhB@1nn}56g zrQjVic-siYYB>M*k8LyU3)SoSRzIK40@k+2{ zTl8NNo_fxI$(G9FWFZ=G#+RI>JTt|jvuli^KSi7Gm<9Gy_Bz1+^?$9{WxwcuS7Ovl zDUjw=jSBebWz@~#CWw8lzjcDNeFr<1aH{~pn|_H97ZW3@Tbu&mKSj^w=IxEug`O*4 zJ|{a2kw~1-{JyS??Z((T{_l$KZ&P@zbN|Z%uKpJ!<@1RzaZVC@zn1oc8UFxq*%FqY zmDsgMy1k^?ACDm;SN6ed&=Hb)B;+AjXxUKxWfK_htAjF?bbOP{>XH)!cvxpYzXfs$ z<}9vzA+`K+FJ9|YkwZ0xit3Q5*hg&NXSYj?Bk+AL+o4W>Z<7nXQr=Wqs$1CdZi{0a z#GAxkb=f5u=1=coNnlwtB>L5zwx7oH(ed?rf&toL5lBL!L@li+<$h!{M{JSq2tSD5 z1G!8EwT{R61?rLY*C$XA*(EcQka;yXIlgPF+Ujmw1JbwEQEDL{Dh|kol)%%ld zXovu%ZL{`{yVr!i6~>fF4ygWW_5?;Z`QuB6rC27=#lDvR^n6CTvlPzd4|Tz+MaCz~ zEaLovt}h~wGq!P$Wc>O_&t+AZGQdQEWmL(>;7@iK%O1Fob*Vq_3$6?~ntmKAq8{CR zZ$9_3Yq*1^b-oe<)eQ-eS6x_r10t*DW8y901#7#G1F{#h|E6iP&hd)Bf!J-ywmMkD9-cd~Ce1u}5W z9kS_7xZxk$)>ZP-u@U8&VFL1ic}}U_l)f_OuPka+Wn_)<4^}btYyAzTO8zE@8j+~e3aqfwEn67RAxY`##~Qhvxlhm#4EjTg z(Rl#`IwcZtpZfKg`Jzb z2$EPN%Bf`&?;}ApQlN59KB8bEw2kR%w~97a00~M!z>+=T0_eVA!CUIX(D)v<^g3kN zOixrJJ~L79gHyb6_=z~<{kmEhLDc4RtMp=(l4hlDq#$8$L-AjvVe z!UHYS)|ll?^iG5&8}3C=}!1$yL7-Q5D9hz1Rioj zmwHt-jH!XXV;jBik5RTVw`LU;aEw%1FS_=Q3FNjW0s59kp%6};#S7s+<;tVrwcy9i8D(X*Tgrh64Q|YBIHqW$9BPkyX#+wfU z?3-1^bJ0Ze*?n8TF6JHSxt;E_wY0RPoy9?zmU}@Rm+d;N3CjCbO1Cn>h!c-}Fov-{ z-+7UE()CUj+;XoZv4fn~9LYg9LYjn$3%leKAI_)DkIX%}d@j2(|5m~2v!2osD?U&L zs@oM!yo#FC?Sl$o$7Yh4ZOOac4Ib)@Y%*BozN7#0Hvrw4!(v`FEqPE#xpWE2#V#X8 znCqWOU8}Eho?@bLlPLkXrDb|;7)Uf9T%3b1-)zkz99Tg!R52`1htSY$8W{G{i3eAz zf2nYsZMr!=QCw&N4sx-81g%|(VB;W{8_@QhtC=?Ql`zIDVHFH|mi4NdG;1T>Z_qi- zNtU^JKE2SD;up79`e-&O;V;q$MJHwAx*V{t)_O}u8_l_W^US9ZJ&b!`iXIMeCA1;(>hzz+VEUJwsQ|oSC$!?Ls9y1)aunXIxA8Q_dGH0YCDda_85U0i1 z&+<7Vks(!9eBt^&7FZ(0vbhF=W9o;joB9(TKxBC-@`d?w@vgz8#>qhMxD zX=`}--keDl>(ewx^|{CtEA_eR&>5b)Z>QC^MIYD{}(F0uVP>Snn=ZXbO_%wfP?e&w3Q300RwI zB`v7A9qe9US+#+If{QujHpXlZU7R=|ejuUoX!Z~Lw9NT`>%LS=rXQmLLFxQp%E&RMz%zvynQ!Il~#+Lk`O5#&8e;aOEt1_aTp^Va;GW&)vTRQ z)*lF>)s|hjP-_+_Kv~`>6GTGJBn+w~bNL(}O@idgk~25P&eq>=@~+6p%1kJpGu<$!YHB9L&9j=Znc^dMsi*Cl)Yr%Qd&<-H&u*WtXmZ zs)>v)Mv2=iy4cOvm&$UJx}BadtbYL26bY({I}d?fxNCUN9?7NG4O8^*%Wl+I6gy%9 z{A-Ovfu_ZZ0iiim3@=B0oB^N^{mKkyaQrzG$W<4`2zZD{l@4qqN00i?N4>aRC-!0mR)h)==(WuJ#-dOKE@{H4#^e zUE8j|7XM~3*hN!bjRWH9Pm+d;g{3PD{>I!qtVhuPXmn0fG<&Kaojd9pa-SsM9Hby- zoH^tU9UvXG_T?H=71~Ff-vN;D#xs0?s;{LN!+*T+yegu!A=mg;=3Y z4P9Rsy-Y!j!iKLYugq=`_m-SkNm_pnCU(hS!vM>3v07srsXjrPuMVqlg^Feo!PJ-6 z57C0nA8Ng0VSgs4z!7Y`fKUXpkQl@)HS_V=d~>=&%f)%^!6Q+0?Zkiq1@K)s4cbap zA#-X&*Sz1?3iwuQ8t4_NE{6BI>yj^BNvQdFn%9xuG0`geD||IK(|@V&noKU`m(C0O zcoO}7Dz}~*d-bW94ooN^G-MVy7Qa6HjE@! zGlx;M#j_B5rPT5#I>rTw;N_r8E|N>z#qRrUHd1jTg_4=PYuD^x?~~Tsxp_+z382n> z87E7)BeW$)&ZZ1s;$D-V{*64N24+t2V<0SPZf)s{{P#jWhXElu#+V>HE5+E74x#{# z-`61P5m~*}O9fv;S0T?;i7e*);lbibHy7NMdz1JQzGOMU-I24;{g@&JY>Bn26(XTz z+-jgW1Lk%MyWx)KaXUeL`tUH2Gq_ddT|+*;K7(^f!sk?Dj{=lm+%N|kr+o7G>bF7S z>cV(&orKMVX_f-B5ZWHyGPZ@Cy&`yVWM{u9h^GY4S2VN*^p7nWX|b%?SD}YsqMYGO zH$CR?6PE!BU>1_>qqg*!R@>IXv|1!3Dn)zKv=u->k Tp(9bO3)R=YpjB}G^8J4SJ)mt0!ML`k;kpK|}1_ni1N=z9B20jP|2G$7v1GFUmE(ig7dgG!j zDFRb5MzjyTcxNFjFAM`y9gFm2^d5SR;3%c#0t18E^VjdqfWt3S7?{@rX)$3{PyM46 zug}=qF9YY?hr+0X?G!)AnSO=aq+}r37id{qr)PMn{Hc+vox%b9-nPEgUn(=O)=H_@ zNzu|~N|#M}4E?qK_UG5HpZK3%c*-c~8#Qv~Pq{V5F8y|RUCeioU3YxiW0M^|JF=3K z&yzVgkSb(Jv2jI)|1%BpY7!EP{htJ>94avuM~4g3P8(Iw)X`BpaZCP)jh&dBEUlnW z&q_)D`nd$2{6ERrjwgMzv8mC-uKe_4WVo)hxVU(hj3N~~U>Fax$ub#JSU{k)LJL!> z_~%b!Wn~3|OmPUQRK%zMG(bKtLHx=`B+Db=euHl!B__s{r~R7<;S6nEsvE;Z3i4A; zW~+5h`jalr(myJZUnrW}*_BhGW5kz!;(v@PVIDFoVwd^9b8*B4&971&6P zM)djT^#95$Sz4x5?>Bq!)-RYcbr$JUU+WZMu5Q1>5RAo|yyV%?Q~1*1Mi0DZV@*ej zDxC$J$-ndJr3nL8++R5X)=9>7O*H>+pQL@JOrLnjLFOQ31pBn;QjIt6h2&*roqrII z0iwSNj_Q07!E+5$zY} z;&N~MK|mE0b@gZK@Hjk6NvvhK}*ysYyVN z8Y?hRSghVs+%!`C-G>iGZ0S)e6(#D|MEH0c!_`3?Ch!(Ea0d%MYT8-l#8E3e>T&&@ z@CMqmE*zm_!+*FxH8x%arlxvq|LXEw%aWPyz0+H-Q{%-;^T8;vd+M2+G?j*ojH zu%!FV|98Mm-9fOy5epsTU|)rp81wF)%#Fjtu)I8qhzNw<{{FZ)#}Tlam>6<50SD!a zWoz}l10x4V6c~(W;u5_820OYGRn*xod?>BC_=wZ@vG)Epx=gR(dv~`iv!+s_9alP% zIfAxfFcOU^CWR^~p|f0BLG?@q47vX=OIVd_n!dhlxw!w_Z^S zkR@|8Iq!qpQKaRr>kTSjoXMz*q|LciiJ;^~*$`8GYeu(m`0#Hdzd}X>P)$*GaX8a& zBpx-xzEvW^Ef%w}tYU#tx#+auaLct|AgITQ?hgbK;W`FtR>o2gL(UrMRq~i@P!XI8 zSRKSL!Hp02+U0>tRVGZq#>Rk~%@^3!IOERfW2;KTg6HGoGxuEIkJtREb|IpyOtz6k z7e`^n3P(ZjQ7(b)feuYon$7i5Ch}g3_ba- zE5X9Nb#PD~o}-P)k^9lE@4lIN4mtt1jilbK$i;Ymyj!~BbtINlX7)<4gIjn{@or@| z^}pH8xv6o^or;RH53E~IC{NL7vDY?JxdxLM9I?4+d@x(Cn90SBPDIqbLE!{}K=3s9 z(XdVeH#lq-@JOfer&MZ~rrWY*jrswDXf8&478Q}>QBW4@?deIpa#^-%`M8qjt<<4U z3y0QEAUdDb(gIgJ`y}YX1Wm}zF0?2jgf$l93Udy3$;lm0gQuC?acQ1W(2mK;wUsON zX~Q;A6EZVxh<-{~*Ng_rE2s=NU06IQ%%O_$%#eY{g4xBr@;{m1>C2Wz3cCZ?v@n%l%mQr7bj2ie;kdgTAF9-qRi-_w^aR{|H-zSk`#@m15|AHq&fJ zcun`g2f}KagEjO%ncZ1N&sIFH-=kw}CQzPb>9ao|NKI9x-bTKj+Mp5!!xTzf5lzMJWY>Su z{Y+L5*2In@sSOHQdvUT0*o9jg+Y8(P_xpG0$leg-{rz>;5OV_r%~X>9Sr@)VuMHp_ zPVtjfSHHIi6&5DD+IQja>l1IiT_w7>ER7f5n2+!BTiVhi@9R?Rrz;okQww zu!zzsJDr{zTNlDuSyQ#M=JPTBFl{K0shtut$N6M@%7NsDqf4@|`o|w1yyV$@hhl&l zhUwtC5e$R&Q!cCP=xlzogj!j7dDHHRkCSuB=+tTZ&RIN<2`-FC(4o^IV?%s={Fo$Z zhoaN@{SFgv$ANwAknZQLn4$h18EoPDZ6Y(ToiUm7Yz6rUNBFWDa;aiLn^FzzeD4K9 zs!eA*%^W+Fn-D|#caI{4G(1_!@1}Zn2U*s1PcDaZV=YKd+{MkR8)7rV0X07>=eM8D z?Aq<9Rp7!BnvA&6mRF+rLtRbIrZ2(jGv9>AM+%j~$g~r`)SXeJ{4Y_IM-f>a)Y@Z7ie&91ikZeEsee za2bzH@tLh12bAb<_XQeBNA;$_FDn7}w>Fh$i#D&@kwP(B=yQ>|eg}jajm?`KJHZ~W z!@5*~|K2+cy7kY^r7S(%(3rmhfv-=AGSZ)5!q5h)4ZC!Sh@qmRNvA+_R$yXTqyL1QJXP3oz6<$iu@kHtQ4V6P$8EnwHcSha;F6H&!}Ru%LY4{)whj-+QH~c0C7RfD{l-A5st2CJ zd{CjFs$C-U#8NT_o^iFt``Z5-$#O^iYck_gyxFjiq)l=kk*%Rbk6i!UXyI=iAma++ z-d_Cp%A2N{dPZ~EP{#Lt>PI{#qC&5_{ybXOpyCWg6s#c%EQv3-VDgik=5R>DgW)}m z``IOlL-WdFJowoOZG2d2+lI!qO64w&GG_+5!r1bR*j8k2V_#Z`qrpC%TLnJ>pY} zj?#>`$v1%;2E7{0msea=Pljyny7#4ux*+wz?jo+GVmJKvcl7V(^+k3Ze*Tft6yq@a2LRS;@&HnUE zBJVrFX4A~q+*^hmel?PNEgQ9ssa)`-+}IeElI0gyQt~p^zpg91)!V3Ycr#qDseQq2 zyzsQ;F2IlW!^K2n&c7obnPExm+O6)JB)5d%4JBGM$uLNXdjfpU6L12wr`y+TW^MrG zPgYrYQ9h7(b6jrCoD%XT7#Q&zd#o=Xdyz!8=lBy7Y{Xf%nm14LK8R=I38rlL`C#I| zjmW%F%69R3IXvMFkW8b%=kP~_wmuMd5`ULZ(qDWWJ@Xx~!c4UVk!g(Or0jYqa<;ZbV1rYVuN(B>=-(>W1FO?hz^9Kh3pLyc3uSQZw1n4aVgk$1tp(Aig| z4zb`Nae;TqBeaBA^^h*1Y8RHX3Zxdz(xDQK(=L5vnQokhvEQFew71Jt86OY4x}(U) zt^YYL$c?^!6rSfIO2CEC?fs}9qoG-=%Wr>xIk-=3Pz{*GgVny;t}l!sdf9htUs2IE z<;YQSTH@KCj2iqRWLs~$6f0+!_}Vj zEg?C*ZDoOj>1n`ZULdg-nbOtiN~8qpAuT*%7h}AB)}l+?g;CGGmxfSA23pOjCQloj zTT%OHPH$3srwd7*Jy*42{@qcZpAvr~SDm@(5 zGvBD?Gin?+9wECLf?l%v`Xsyy7JCyL=3I8#0fFNk+7lHfEM7jlm%}d!h25^32`*I> z!B|cMQUEKi_w_{{uGLW!}DRN2pcD)zFnzJdGM9-eO zCQxXO&PTdcE+kPLBIEq2@tW~!e<6fxlweceFz*W{*99I=A|PYA*@7`{nLDB?4nTKIFAJRh2&Gg z`ck#nFFvRAMWJ*m$VHfcTsX!GB(Q~Hw7qu%{V>3|=QbI71>l)}{AEa{tXwws_>l)> z|Jj_&Y*E=%V-VD}Fk+h>*v3i3XCnI0r=iQ6*+g;ecL9DrY^?>j9c2#v@?Y^ZjM?Vz zv=7{vv6+iidJd9aY>isGwFqkBRx!vNA>Ozl(rSn@aL->SCTLUZxs zQzFHqdo}+H&$?JF-6>0T08ioFZw7;w5Y>)VIbSQba@p)f8lEI??v;UFS{h^SO4B7P z1AC%#-v#bH!q|+ynaPzi`IT;Fp~~%WKgymQp9o>xu>p+uL!~bqwQE^&iX9*8%k_rp zRfU?x#*J@&QBx5=!6Tw<7m`hK@cxcBm?Iu2cHv;(6&Od)@tk{ZP0$qCXFsRZ9YYp zy{N6Hx4vNVlfU(H4F};nJau`hkb>E9ka3} zB)k4q$!Ellx1+%Z#s_;bJULspT_L(ttZcu@!EIknTGZpLqqZw3sB>XzJt&snWC(6Y_vhv5qZLJ0Y^CXfqP|l-_?|v;=og_#+Fp>gA6 zE4W2g`lxka59Yl)@EfPC+G2V?%E8vwbX?U`;h8zdl}8X{Dpvk)^`A+>@G~*gYSg@r z>$`wudT#yeIWTp8nBe!0``t zIN@nysy-EI_nljFq(3NgJ;5!_ui$(MZmJ%_&LY_W(|S<%(n9O)NX9?O8TuwhdM@OkkIzFgx@_HQ}}=% z7xN%KHn|ucpu+k%4o>RRJ&xS}7&pA=%1;8`>>j6)e{!D6K3@W*Ht zggxttC@BrpP2y^AOqBHRV@CJ+hB--IZJn-9hC&B)B-r+n(BG6*L-Uq2b)i zl*HvnU&c&6|K6oE!uPkO);3i$G4^FWAKIaO+f#I_;Oa$o&hzq@!ph-%{f5V1cl8Q- zw@KU0=MO!;cNQeTo#zn{%d9hTdVK;qx*c&e33=Q-jki zQ?RC{=HNh%Z+K>=j`Yv2?WPxVVkt5tnq_Urz(d;4l)^x--WNkJVi$elo{rs-tx~t- zfhaw`8q+m7)8!h?qXP+TOnDhF4bxV8f*EzZFjQuVf21mE;FwO5&*{aEa{ zT!61hu-IXOv9f#;x%O#vKh}vNdY2NXJG=06YH)NAWBf*2asmdv=X4luz?JgoqDx(# zkil@A;02DSxA_WskPQduk6n!KR^Ldyc^UP_P&Hc4XLQj#J9buQFc^f>Nvt|Y$mNB( zc5(^|dUAQO(k*lvfcHg2t1=eecWLXJXKlLUXiFbV01BVjf24ly+T0%2I={qa(7b`Q z;XZ~%J$oGYkp_Gl!TPIMf}Yw~_c(%yd+X33JV}v2FXXwO-VGcoHMUfOA z0#JAZ=H0B@K$1&V+Clb@zt!hmL#|Bbw0Ccl7Fj8={GN6Eteb^Vu3s< zMjls%W_|hSa;~-uFppb@=^c9jf30gQSzN!difN{A_0>sFifgwtnf}k;?+qAhdpj28 zzeh8>0aiOUcmn)cQY!- z$HG(d`w}6#^6M{-rktm~H}VDb1l86fj1=}{Jlm2xjH|9ErU}Epd{mi3kxA68&TlTd zmWFrBZcdciqDnPtTz0vXRaEfU_DGhOmmOVPOa_1WNGU2>JjRswpJ?cP?bt>t7)VU` z12ywSE<6oLynTX=_AdNf{Np!L`rKs^TP_12Lo>T;#G2q4NYnUbBLT^9?6?OfVzs*$qo~3?xJ@ynxCBt zg@kHt(*=Htm@D5{p=vy}P#&^$_|-;%r&khaMe8RnkA50J z0sA}5g-pWDpYNf>V`X0!2HDL0aq36}WA-Mu!b$u{fsjB&$KR#$F!}jekS#@=^&{QP zuHaB(Gqrm@Ke`L$QWxTt?hQ&G0z)5-6YOUvi(m`=Bb6FeJQqszJ zn8`>~@n!$w7Tg1Qyf#0`WKS2^RIq2z9-bmKDVFv>P3Ds@&%DT&k0eS!RU3pET#@p% ze#3N<`;|uc1oh*NNLz(q#KB_XuL|xh5we*Z23h~FZ=I+9uq!$%nrqYh&V+9_Ime!w z`Gh2+o$!mK3`PE68Q$tCE~+{|9SOcg&fP^}JmWow>lmP(U%wZyI@*%(-kc*SQ;A1d zLTou(zu}nziCRv-?F_8%YL9D-{XO(qg;Zdupwrc5sQpk{)dUXl($49;_{{3FLNl4w zHjECYf)Q$aR|1SlbKoZjsc*HaKCGw5cUFd}ur!6O>(>Z5 zC*G)J(=h&Rbahg&$nGC5eF8}BZXO>aeU^~ubGXVD-K1{!55PHPdI((GRPL-r06j#T zx#sL>wga&PQvncc9!Hbi6W9G^5ECfVke;@;zMeU^Gd=&lPVVgI(qk&K z0}j0y{~i0%6zaxG1Gp~vbtYio-s%OOmdm)~NYs7^(jXij$C7k%2?1uu!&+{*fA_Pg zRKOhEPRYp`FUkoJQCFu9J|X(^gFh@G(Ir$-=rOIeHS)3US?1S)x=fygJWrxqXe`h_ zXLIwyO6I$4A$4s%*D7}tn{8Q{)iFBM;!il7LR&;l#3W@Vyy#FS?CeSnm$s)nBr>PdqF84#99_)~#3} zzkNn#+t5~En>U8jL@n3=b615%0MEsregI8lm#;ZKeT#<8LQlZGi?|8!Kn&Eai;Ga= z9QGY%F7vfhDF5<4Pr*($L2sJ^UD4d#>+Ncvu16^ecXHX$g``#_=}x;=PBl$WaDQ7~ z`qK_3PKT?(LJ|k3TAoQAAf3b3$&oR=x$o1+Fut>b2G9U`x)wV{4db%63-#A_L`MMV zq7RsupAT_SY*QY3qpT2Y$5@&0%2GK3Arbi!M^iYpOV2h!oS7l|h6|k1YJtiG8raP7 zNHE?~=pnQ>yW69|TPYGxHqjWGc}qIakg!=wTdqV-CWu6&OHbLXihdLpsrRO-;8mRT z6#%C~e1>56z7TchI@shMk zSUA*P<)tRB>w^#i(d0VI$?r2Wrc+Z)S5~@B?9xjMSI^|Yrw%QK)s!H==Nngqw~qNK z#F{Pd)=zcX8$aedUi8vA2Zjm`IKG~dxgw)=ujzJ1H0C3%b~t%dz5n6;{#G1PIq*$I z&t$1j>v@AiAH*B2@hX5y6VUJ^;KEc2xEfmM__hsaGilxVMO*a|_E`3E`a7v+-Cd8& za73bX7EijX`lBMipQXY-WqFwhC!jv==TCB|9MrtpmxMr68+n~klGSg|&Vl^+=ko>{ zmpvB+kZra0+N~{{^gY0S@43vehKO)B=iJv=(6Cu4{HDonklPS=R;gTHu|ctKEEgW& zBg=^ncoZo+iVQzv>JY954t@Jw9M{YgO2|i5b5Z_h&cltCBb0ga_6TULxHYyl_7dvb zBP@0&Jmoa(%A|I%8Uf$3GD7T5gC>X9lcZr$3swG$8zyqo1$}^f169=~c(=={J4e5y zjegj>+V9IAd=JAH@TT0#&KNlwk0rF{_&#VbplzIZ!Q#XDi$f3jIM|6Md22VLcC&RZ zAqknXe7hLI1W%(z;QHuYzkFJkvdQh`+1c6VNlU29gX@P#oB&Na*o&WOKI{h{3@*^@ z*ZE7lh~2_1Rt~Ye3|)mz@VMehr+xRAA4x=uE-%lI)%Tqq4Lt^Bwqeeey0#$mH$VIf zU?<}Fvg0ypUVm1$bWr67IW7NiJea9C!=nLTW2od13{{b>;N5iDTTW&2kFj(9nCv6X zD<=XXyvTclK!fWZfYE1L>F700vW>nswHkf-@#wy~wsa%BC`VL+ScBk!&Dd2F;h~zl z+E~rA$@$$Z?Sh(wV(F)hiTg4-gTrZ?^)DaXEv1-zr2o)%LXI?eiz#NXXxOBghjpvT zsBZXi0?u%1U-={Z_!YONsyI`~b7s-;zgoOVV;V;VIj5`pia>8p+!h^pjfO!>nbunx}&S1rL^+9Z`V1Slw^205^UF0;R?2!P0(;z&xZx( z9$S(^MD4rv{kd-ftx58D>S?mO`|_|~m^2fB2_Err8^WE8WOt5Pp4~Uf?#J0;*+*!;yQ+L6p23maxCHYv&&*&!{L3b@XZSesq%b#Gxh}jxHGy z0IaU4Wxig^8% z7V9+PU%?HuBGhW$6Tk+tT@F@mD}cOH911ftqw^GNk^E$zIhyWo8sUT3 zP}VPHsMra!o_b^pv>AgeTTpiYg7kmM#wyT+GY%hEiy#^U1QTK1b~Q2_DvZI0vUs}3>o4@i+~Yo?F{ z7qR(_iD@tO)wrIB$WlLtROAVoS9z}bQs1~Y2)M&{4R4+VqU zQ8w03bDZB9?i09MgiLMi=ZdAhaY6UXZUOZl?WCfi89ce&UUD7{Rr1(VPR6?B2@K4n z?#-vNI2`z;@F=|V;x|$x@xpz`5RQ=Lml!I0*hfnk*;ocz!xM`NvZf0l*l>PT@~H2m zvSIEh|D}u4Lt_iW{f-v~^_^QZd6_%vc?$zV;^A$t()xVR(o%@#3yT|S(W7AO+1;Q{ z@kyCiF+jbFrYCyGBPQ3NRH8AH$Pvv>vI7Ga!38Kj((eXiyWo+eTM7RmMId#k4I5Vb zoyexbuqvR=uoEnaKU=FdbgDrpkYyum1jM#6<4I$1d81w+AID5N0HP@V*;`Sm<;H^h zN;tqKQ1Tu)W_V*Iyxa0~Uw0rS|9BWc)di`DrRthX9sEFI+UGzU+h+^;oRR(jvM;D+ zPkCOlXE7nk=v=RT#o-(@dJfD3Kh%+r2u9v9?vBm;8e`@2rA^jN{c?~gn+V+GiPQb6 z==dos+)T6pfALUti)Z!*;*YGt8& z?YmijK5%mBi^X%R2z)jcEDCZkvb=2$STKz%W7nEj!-W4VEc_R>o|s@cn78TN8O@}nZCw@zjHRS&-`|&FTJB0H7M;n+{s3*G&fTk8*p_6% zvjy1LkvtD2<_iF5iw~d{@D~yqLILUc5BZx7q!b)LLr8;=o~(Y4B~TYyE(bM)9a%4w!XhMPq71WPXy=g2h9g zTK=by$$mmI1Bg3@T8mKY?4|nxIP2&*;7?9c7j6iT?#(Ixho3be^ zZDIV9?U_AGIsh~`rc~c3OpPkfee;Cl0~gT_)+irK=?REC4T&!q<9O znzOra2*~yuA{RHOn$5$Qqt9DN{@{d&ad}aEZX?9l*mh7q>cGNTj|WjH$JjlQ;eHS^ zI6*tIY77?ddg7hLbtHM2I-*X>h>6uuokz;9%s?KbsXzKi{PPKux^MLu+bp7vRg@=xOTWI4Xiu#wrI$Z26w{PDj^z*V)#ikM}92=IIf;SBJY` ze2)&w<6Ws)et`RCf^Ajj`Qz=hXhJ57n5wO#;y1&phj_<}UDYBww#u=|R3%5ezC^a4 zq_;o++YAk1`!h6TzR`Vuv``zlWPdmgh8tktKQF@fd)3U~u>UhJ3*0Tj7Mdtl!L_$t zn`~_E!fDrO&Q2^ecO`v+j|H+tOp5YhStoYaV;fYL=WA?!FDQ#>C@`w57I+w>B*B}& zsBB#+d-g|iOf%p*DjIBH&m&Fm&5MmHXtP@kDH0r8>Gc5AJ1&+}!2YB;x4fclzT2+4 z-5p<09o5lxJGk52#Q6+LaERC2s}9!{M-ZxA?@&p9-Vnj*xMiyxyALX-Iz3*ti%ft1 zqpI)cM@AT^m(w;2%udbZ)|U+qSb- ztvMAP9nJpAAy-iFpWWyCt?{*mC&_zTGB?qKsnUUR=q9;$(XI5)Vr70ErOA6|Bsc&+ zLAvig1TVDqH|+l)0-y-FJqVrzMItk*x|&8Y?>tySz5Pv>**<~3{wfqDHm5!@B9ywp zIK8haL`YlM2>!ksaJBv@xLfgKlJ^R^@`e}TBdq#oR#^}J^X}N}{tB3^)){98l3cNw zz#bhFUb84r7%xl0m+@&%opGpKhecB$UFh!07(rI)2YE9FIVr4;*CSEqgzNe!3cMhX zW{NvQECpcP-Uh$};t^Rp63?cPQgz~oEZ zMpW6uCh_vZNW?1{8m(hVDcoDjSYN^`$?Q&;^=rE9jXT0FumacrStGC(P52}Z)1a@l zXhRfl9`MyfXk;@|Q!&WbuH*#nD}Ih4vs_WE3(s%k=je=@C{b%7>0JgGmkl5k8zvx^ zPD!j#@j^PB-N5E8#&S;D+UG3FG|&Xal|dp^b_&|;6Mf);V+*?r9jQIrd=h`#FD;Nz zk*UoC_PM)C2FAun3=9m)%F2d@hAOV^?U(Ag(PztXp@^X2lycmcpWlZV;TMF2RwY!R__HGq*V@)%(82L#>O>v46#C?6at+sy@ zeL$L3UCDkle`Mo5(~$7NY{5Q@g(fw0Z`UswfAeNp57exTtc2I{2v$|t^Eqlbj0XR=4 zdUE80A$2zM*+)mV^$wNhbb1)^0pWmTcxS;^hY=W!(+d2|kJ=qwFtn|91 zo_l#f3Q0ARNz1UU4Q`6lc;v|Mkd-xo|GJ&t;wk86R!|?d(lR+s*Q%^j%sl-H)rI{a zrVDtYYR$jI(7(1gNLl#anwFLQXiTdK*it@{9|jc(_)B0E|6M4lWkAZcN>f;>Zhk4|3;18hc#pVg@0D&qzcmIOC0)^nu?~cum1&^ zCQ;FGvlrpw!de~sz}LEY^u_I>iEJtZMn@z2>`30(h+0m zlOGkat8q^XdArZFiC zAR#s}!}2$8L$UKwg`pT2P2L=wBL+PMe^Czl>j$mI2XhrM);Uch8?`2TNns}?Erw%H zM$DVcp`n`MnWAPUK8$=m@A|RzlV7UlzDL9DJ*fR>ymT01VqeJrcUps-d18M7*d-%A z1)!vwWXkWn)%A0BbRO^NYJ$;uB!@wS;&plLWX($it)x+*7+(U7@_0Z7ymR%xY3y%T ztr#Rj3EJ-9?4_dIyLdpUbNS!I_Mh|pa7hxpvZ|^&5hSCDq+a+xRmH?0Ic2|og+oF2 z(WB(#&gr~-8FchDa%kkvO{y6L{av{@=CxRJbLz=HdQ{@#eWqq+35khz$Pt4=aeuv< zzf%)e)`Gq@?Yb-7W*gg|F4(K>7q5wb8LHD zRr{O$|3oK1pI38Sz!X0E>n^tz4ps2~zPW$pblucPDVA_xKjIoZA+z3l-9xr_HLPnJ zYJ0|BPC@9#W@cu#n17G&-{&UtGGEvrM*L5>>F~xD7O|kVAu#f1e|@I=d$0bT4m7Hu za9yR7r&+6(o5NJi~@Kr7Kd&}_I4+h@eDW!ib z%3oQ?K@AgAJ-xIuZDAT>GUHe+cxl1N;na}mFze`;xT>L+-zKYLQ`t#KD}&*2JORyE z8ir05{=dcyy=eMgcEAa*(cf+MMHktti5G$kF)>qHwO2b244(;aXh5S;pv2GoTbKIR z5FkWl(J0PN(5Qt~2#h9uNRk?ylG*=<)R#$ucgEM!N~ZSzsG_Tziy5BqPqO--8PIH2E*IT=))$`qZRMEyCk!NnPpnWG@jpjy00#fiv4t{g8`<*>ExpD@i3+J( zYmg6`rDXdf0suB;WmS|xh9Oi)y%(BdC5rz=ycZg(AP7ueXD1(Ids|uaizV`qnxTnJ za9dkMo@6ZEKRfq+20qHt1j0bfDIM>^eD-;EaAR`*KruAZ(0<`km$i!JReE&I`}+Dm zrYd|;DYG*A$4sGQ&~000mqhD`f{pW0zxq2dU%guC3GlU)CQ#Q(?U)oQMcmcDBp@qi zzx(O>|EX-{{~taYEU2li?U|b!12d45f54S{x4%gB{q=d5 zaW&@=!J&gSHP-`WU~#cV+tZWXyqz!e?99A>_N7Y(5cn}z%}Qqh?Z1fK8RNqmZ&H`X zs@Y$R6MRV>w9M_yK_MAs{`#V+A8^U(zt$RPzv6uc&QpXjw6Kw74ATZLED~ru570B! zKPj?ee-BK0EqGhjJ-Kk?Xl|q*OeOObypf z!AzjMzYv~>b9VSn<9^E%C)CQyiM;8)n8@Q6%PC5`K}HY!hj7oJ)@%_zsH*| zP~?ax8t{8dCR{b#4Xoq%3Weor+506A+tND5-2@OQIyqVGK4{y3;T2821eIJ_5Bj~; z(y}l>`Ue$2ataLAUZAX-2sMwTrgFEqAG5eORW!Ev#ARd{+X9(2a5XM2E}}-0k+WLk z22Mym+ssEl)oi(jNWt`E=kzpo!G=5DC2;!Ce=A{eybvKdv>fNQ@gNY@kmCPo;Gew8 zWKd(Ss6pcMjQw*7e0F^RYMil?@oNxJDBQ-=;2ZX8Xc^@(7i5p}rfIiu31Zb0yt$#C zl0Bi*&~S@!bBnP%+~f8%n)zaX$o`{y3iI*Q-@Kvv5*xBNp9Bp=8I%Fax3hY_SGCCT z`G&^M1uBmLjK^H;M)+q(MLF-zQBxzLnb+JRPq2RNL-U;CVvf#1CDdr;Lv&G0BzffQ zDnF%SFB-&aH!W@fmR;RtVG9#*TZ=%AJ~nd|6*DiR4F;Ic>r(DVWm$L|o15Ktk~A2r zjdXBmB%QOf$uv2hDNw?NhO%8k@wFVb6LHCafL^Friv?crtm?1+MMUSZa@|8i5rRG* zSkQ{GQ9eX8G`lieuxRr{@0cH=GA7NQ#8sryp8 zlPk-Xr3La6Cpdis>=b0z@iKByV+NaY@m@o*_XmQ&`MM){RN!F-;Vbd6e3AtQzlUj! zxdX|JllhaSkoH?moekTXu9vI@i~ynCGWe->Ke)HB2UXUi%T;L(RuSdMNqg+&eSEJZjvi0& zMf@L&6d!;C6=4UnNCi%Lj@lCSxh7$mRwR=NPp!Tw{vF@)^To(@>L@ulkcB#6eEpuG zc(NZUqKs^8Q*=!2!1kYdAbJdm*weR9dYoqgaY3DYk?0HNikqbOhZ)R#`jn=xb%+x4}2yadA+DsZLN(2LW zX;`=&B6{M-@60Sj`L6dR!jFxndL$={B1mImpn++`-$xIkiOM)mM#UZ=)jsn^&cpSO z=#qlotOsLDjZGnN7VbxsWTd~QS<|m^qNcrw{gvQo`0m91%3(WPQW!OW8t2WJ zz?My9oejE1|x$T{`4cCm*c7%^__{ot(Y-l~y?Ag=B-XC3Z)Laao;Pt=(jfn+o z=G4kkRa8`%f`*JwfwD#!BO}w$P3E_TR5XN$0r1tMx3_yo$o;9`$QBm03U|K#koU>m z+1G%Qx3~{HH}lnu}Hc0Z{%@9r7xP!EG33^X3^2noX|!+Jv}d$r>8vwPH0*m zE?&=WF8WqY=?^nOdj6Db3KmJvP^tNkG%q10M)~YO+AGiP{!;<;sbOkyT~Qr%U)Mk8Pd z&Y1SqyF7gr>s8cMRZnVF(pMiwY4UZWnsAse3EpI|c6^eXAy#lWH9?MYa$IP*N{V|b zhJ=#2ie{3%aB_aKk%VWJD_Seh2U7&|F%e`bc%`M^Dl~=23s9m%KK-I)C)geD|Z z@#g>=Q$_-h9#UH2!5Kl*Is_|9rOVxlzFaBLFK3Z|{QJqtmG7 z-)&u0UA-|RJ&vL5yq1%&z@43SMO0sJ2KRUXPLwqcV4 z*7Vf}jUXhXK^Ha*H%XXjZP+v~_d3!ZQ9CK#c-f!96g{V?>k%w4I#0gG2oA?xwP6b?j0*Me@`=( zzU@SNf=-yr*^;TWe6P;oo@_=~UK~!A zG_|zOKVR{5cN4s+@>nA|A$G&PjcJa=xLxTx^MN~mW|O7+5t*Ep)+rhr#YA{p;qy?t z-s9D8k87$oDu(x8I!F@-f4u`0aFxxbbJ0NKeCQ{d*30zmQS6Gw-0pgA@KfC;98N%U zoPm1fk2GUcQebbrU4Say{wYHYC#x1us2dgH4@rIko@~R{#qVm^HJWXXsFkl40?h54 zsZH!1rXGdqaVf|2SJe~;)e%>y0{u1f**ll8op!L6$6is`%(1(_y<9xEn-s&TqQ-*X z(wD(aByAA)46fCFbz(O^-_S`+`+f5+oAGgq&~mDQv8(s2XIk;{p*7Xhx(j$Qd}^1v z@Vqbkl#NX3u(^P1Ui+5k@=$lD{Tx$qEUho>Qr~cBm4WE6K96CPCV+HJ;D)2JN#$vFEHuKBIeYy{DJewNZ!{8-GnglS$nT(^*7g zFzjM>YFxg9QCyyV^E#8`_4u5I2-v9(7_!v&wZUNq)_+~GXpIOz(5fe$3dk8%dClxO zWS6M5)FA2NM*ZQpUs7z7ehv1__OpA_qA{|QDe4vH6Yikz86n<6FAyROb&?Fx(WG;n zTR}zB`SrQQ)Yf=hw$t~ZptmNs0Kh$^Vt`+U7{BBR9_C0!dakeFYApYO>XEA4Qz!+p z&mnD|{x~IuPLSxEnmf}W1pWIv^jQD6!TftIO6{fTI?DJDpH4Li@(TM{ZT;z$p0ljJ zr1b>tZl+(IvxfR*NtcwS1Ka2YX2qd8+Rk0^TXS(ZbcmfIF|*Ih<>yay_#qJ7xw6Gc z-ddu1+ZDNy7r*7X1|ed8*AJf<$}nKzkjVgm$hOBD^@EOpS0EAbXq|(FG=n z&QV2XNLvH$#cEj#yc>*UYV-Et8}!grB%V-|hAST*GR4((6jX&qn9;Vjjb5^LW>CJ- zAR{D#%*;n8|$QJ?o1Y4^I^t#a9Q&-Q%6&-T9Hy*XMP z%JNucac`l=43ISiv$MKBjI*vTC5cuPv2RJju{D-SvO@pEp>SB5>F1`HAjzAUt0syh zY-UcwQB#YjUs=-skFBqOimF||M?nz*5s;EnYNVT?Q4s+trIBVx>245dC8Qff3F+>V z9EKV~y1QeB92l7Y@!tF0d%yeppS4^wEYCS};*ICs&))lqNz#380)rFk+qMsN9VI<3 zU&*~&Tn~*9(-hXwU&`w-&~Zs0lD>2(}87RADXwLWg@({c+d8xyZi^kSGWi@2Lhlhz3W}Yo@s`a+SesmjxEAYN z;Rha6+w?mF(JUC0R5IRsTMu=t5`;4eIcTEiwcCSGq{Cs)3N7gE_D3S!o@%Jr{zcIG z=XAZP3Gm>x4EI;8kjQa9Jr>f40!f^9y!35C~j!EwNMaL^nIRUxL5`e zinrKfmDzw@#~=lDyUhQ6rkqjCYfUaDd*7zwMQeFIFZ(WWS9a8` zK05DQZ3$n7Y#^>Sxe+T}F9xRHOD+>)vB;to{2w@U5g3W1Lo0h3v!)FD458L#Ex*|9 z6I32K`SyW4CzaijxI+7inuXo=6iClGhSCvv^3kR0nI%wSXPuEmtbx2(-%9pKjy?AE zHsSYLa(5eF0U=cL^$?)tyAG7PL1)x$prcn-7$9}*WhEf^!oF2X=DHj?zNAFo5}8G> zfY@;BkBX`n*8Z7$>p|YCkL|fcdzPT1;o!4^Cn8Pv_=b-B4QV#lW7mVDNj;r2DmJ@W z*+M8J-Cn_CQy3UdxMAN+!3LXILCf0AZh!bkfx_qUR5lDP-(d8GJ zS!V*<+uIhA*hf19+s&fRqFC&jH@|$(iOjZ+0$xS8MCa!za(vN%!XUD8eY~VI#t-Xi z%E2Lj1NGK!0~a&Zc&dVBV*_t>w6%o^}K z8Np~3vVBd?5(cR%p-q?UsvH*!&j;=AzK>P!yQnsmqtN=5@Uxv0u||0n30{WVFiB2F zEgiWzSb~~}UKHJ0rF3MeedQlVshgeZcYU6Xn;&>ka}bSk1mbvBdl!-LTe5&Sf7-NsBVd^~u& zbt*x{GRwl#`^M+HL^QGP`f=yZsekOjc!I@7Tl-I}i;bknoU0SlvpE%%(FT?tKcW0H z=!2NWbNznjkXhoZ!C4=VVke3zSh|QI$>BmAXaOBhwBVEYtcxC(?MFt-;$%Gw4CQnFn!&i_O<&Vh%CD4VDGu_Z~ zX0xbdL^qMw2(0F#loseXucB;ZMy*)6nxR=se`27xKkk-8l-l^pEY6L+)>9?#J5?Js zJR4_)GIn}*zi|0=#Ibi28U!Bsn|z)lBVD2ogPBIRXh}1?{5&Ob&Of26V{CRu6H8OG zN8{BRO>>K{up1lJ+--|kAx{2pCUm|}= zy6CfVMk6NH@Qe4OQIfz4X(X8pS69N4gVv~9_d8drTl_bXExj|&r5+-(ZFxb$G$j*~ z0072v0MwyB}8ArWpV=mBR(H`>Na_yt*0|Sy-9fY z+R{c8SM2?3;idS5&eSO%$Wb%;WrpQ*JHiQmM`>#@}cm zXlUTLJYgjFy(FHt7#ePxv=tT+S>0cU=qa&@l4+ITgjJcvl;`gReX2_T3~|>0dbvfE z{wsiR^%$|KcstwlYKVf{oyBoe<{%JYRfca$ns0}?8Mwvi!uSgNp z<4z(>D@wv~;(SKD#;03#X5sf9At6=WhCDK3oV8=QuLJ**GG!v~2?sL78* z7mvmM`^Lk1@Ay_bNFH)~L}TNgQA-1BEGU}jCR&Bu-;y94U1g)+7mA-$Ir!J9yw3OG zOOoJslko!+HATX9dw+-CDdH0nWE>qUDjF0W9eH(h{Lc%xUcLID9R4I}I+f5GWrnig zxNu=jQ_-F&j>!01gbe&qiUnjQ%&kBwP7I7?%`bHRer~5*!7{;9Q!|ul>uePjHQD7q zho^jWwx%>o8n2pp!1Gf~Wa>5ke==86?h?!eF)Jo=3JUFgGmov=*^7%y$^o$xyMmD1 zb{m7L#Q!f{*H9W95<*N(4FRz6s%bnh7;ICVz~jLAh@8x6=QnF*C0}IrF#t_XRFu4T zJ@?#ilsK~SlM-T~fNXL9cycZfnn>`i`-seR{Sj3sMF|f$V{IQJ+mlVtUc(N&T~@9T zehcNeq@?JY8Zu4I31GDxE5(7LU&nh2T+bVvzYWF21yt-7T4gJM6V9_g>BIUCJ(fiD zL$h%8^!Z$$MQxo*@jem>AXjmVy|_ey((69xUnJAFR z1^*^8^H0~cawRHPzbt1fxVfdBz#I^-NGNSpDF-Y3b2Rb)JvyN%RK?LzNAPQ`i1M39 zT0eskDi#{NVtGv2ovQmkknqIZj%pt51TqpJqbxTF5E=fq<(L=iN%(vLw*Ep*ZRB%x zlC`-$cArNST8dZ&=>)2xWQx<(Jn^8fVREPcpJV4*&|ega0^&99#NZcdwWorqCz;+D7s6=TUu5blC3*lK;sxe(32N0|W4Zf(CwW zfV!dlJW)9tSH?x|OQb9+p6BP|uwI$tvol_yzc?iSe5Ade+McKh)({hgp-+4-3d?N# z6LJFLF)Fz$^lxqxH+TRIizYl8{6C3lz&1};N5@!0s74;vcG-4}G3>rJGt)5skZkfd z;>4fd=oN(Mr#8RkZOG1fp+Kgv&h)S^PKr$v=YJA$z@B>86U&zc)7^<*QlT@5h(eI_$Lkw-69` zm20A^ng39tl_Lr7aR~`c1O-ZS0+4t2;P@cr?IraY)(3PE%plM# zB?++zH$Wth>Vi`Lp9C_O2=Us@JEEnX9Xp#+ASL@~Aq@-#W-=#(|NW_g6oof92#52f z)|ioEZ4|a{?Ts-3_QUD#Wbfv^cfVAO`ceRSFhi}DeL=YPH6g;GWY-RBL21^iQMGFpG>CB1sWb7 z>Wp#rH+`9k-B4UTYXLm*{!R4x*IPkRS2`B%i;hoe>vM6H3J}^44e8IqdgZ_&*{Qx< z8DOOuq3>tgEjDxBqoeWep9Ae88wyGpr*|<-r8)VmTP&AzPWbbUZaJPU57V7YMAF~C zHRj-t{Bd`rOqWQs_JeX5MGmdpnv4AJB1B}6NEXY+c?J{qMa>Vx#b@s?-aDQwIi{Z6 zP)IzUilKef{ZZFzq%@r34(_=LDeuP@b@Q*2+=zcWODYXyo8DLG5x7&sP~mx_6)<#@LNiwtck+JOg$nuPdZsakrYb>S zeu;ECI$-}z&(RkX2aG{blNm{y1v@Xy4ac2w;1~6qS{N)2E6eD;TjMQw#I=o7yqt2k zEtcX7397k#LAv}pMCV z0la-GQ@ABBKaojsTfk)PE1!%J<)0& zNge#V1p6{aDUlpEmUp0RJ<5mc$I-1u-SEYVqe<*Xze{CCch0qu$4-g^#gHi#pl zx|6}V_6b7vi%SeSAgWz2zBpra1I@0em1%Sn%U`Z4ZTOwivimJ)BfZ{S$ne(tTc@wI zK@MU|))ED98=BrFpMBO?pwB|GTn4U#$EdMqvbHy|n z)lo-3^tLy|{qLhy!>2!loG+1);~M$OJkodPJHM+)t@OrtKqw2RH%Ei{jrR6&EDp@B zViXnPGC-$~LzY~;*bU*BsK9E-QT?-Yw;_`QIN65}E|(P1bpeYOEzq+AB0e^bgmrr^ z6K|c+*C$`-oE5ax1H*3qbM#H2qH4p zE5nMq=J~?ymT+$6cWG_zuQ6(bWcq0=-68IaI6Cj@93yr90Hf3>Hart|lV=jST1u(@ z43^T-O2oPSwhSIfV7aBJsVa_Za$e~=sTuobvyQl70HCNC_@df`C-|_xW;ln)t3-kL z`8%g-UjK>kN&L4b34s8m+4s7^CCx7Cyu zTXR50ZWm^95#)9Rbs;Y$oZu@4*H~=_7qtZb8kiC zxz~FxuAvlk>xG0Sb0V}o;9IX6@a+(SxdfH9-9M|M>QBQ`P1k1pxI>2!U2XyI@zWZ!kQ!_J0_WsMqU0e2o zf&)4vaq{rG?w(su5`PmoxU#3j=Dzxxg)h`ForBFQpa0Cop#!R3AuBDO@pRWk)l+Tg zmS2ikG#PHT!EXtdv!bas^T(m%P-bg(`Zff)v()8B?nKNRFIUoG<(u{X*lFW^JY4?74H?EODA++{wSVXZGY8ThD0iF*s4>=H~J`j&>?03!GIl1?VXQOQXs4 zLB|+;*pQ^!K7nDzrW5Z6r>MVzBRLUjYU=rTvKR$bz=op)ZsFR3vS5GqbHUTZMThhS z5UE-L1eU?HnqM=Ql@IhK+)8oogvN7lZuw|=f7(-y@xpl$#p#&Ob7xU8>viHb`+%$W zsL1cglX^m%TT_)ukOoPCLx0j2EdBAEG1xOp@ON${NN#H`jySxUs8?e-B?Ps*Y^5FB6T(fF8&-^u1mj;z*F-m2gbkH3532?=v<`Fb*K60 zoEZN_Hmmr}Fy(i2<#d$^FLhzM$~u-pk{wflD#`0Xz>*AXf&_d9y*`_z*;PJm$vYo$ zoFQvBx}2`HW0$9 zMT$pQRVw%B($^eR6M0=^{)9|CW`9B{XPZ%(2G!NidW8Q7c-u~PUwc$-0RFYW;*1aP z54#;B38~U!F(!PhX^k=XXD8Bih5x4$QIM!6jpeIQr+n94wO)ba z|HQm&m(D=62Cy6}4(bF4(lA_YrMgN$GEArVTlrVODA0TX?XGh^`&c<$*uYBvuYuvO z&xU3$R$?Y@?xa6SCBR{kSA9eMJzHCeA>iAV3D{x(_onp~u>Ost4jua;YwvZkrL@|! z3{XuTH--1!0al13^^U^xji=x37sV_`zB9AL!KU_8?-!CPj^%Oo(TNEQ5AziB{;OGz z{)}0`U>^OEYD|u#111UU|ClN0?QKdcj?4$cBO`f*`proG40AWWJ?0IHfWvU{#7#>k z+&P1BvTi36^4E2#axvv_<*Q@~2^kUt$^D?9AcsBePrNP$fB=%9<;uY8{NM{fK+Dwz zmiP*7x*gwT@ShdGMHsGq_~*N;@7X->W&>X1vu9yJL9ZZN&A^$dB=-z)aBws~a6fxy z1h^w>moG^;IXSU)7j{lhr_|R=1FoVUoLW3DvY|goA9e7<#fQGVkZ#C5x3y@&+-k+# zP?P(iTNf}CU$e48o0?>6&M^t98OL3{Jq5M9>X07*Rrr^U8v~=n{FEMKK~gd&FYixV zbS&9_(Zifo8rzgI3dBm>xSTanKQy&Ex6yl52|Io`>Ocp7D6wZvb zCD5l37Z)$8@h{svMz6q$8y**W|JO*TrBzp?N!a%D=R+;6$;b0yCrIRSO1@!^QX2Ke z>7<|!YTQKfVo4&=?_BT-a{f+TT~1w{8zBCeU!8HLi^Q4Htjx{rjtEpgaMO`b9|GSk z<8ywZBzBe~3*qKdU6B`qLz_!aQ%QI1WhY<+rKjc!4d1_if1I_L^!?}0dlVED%2}m1 z^T9xTxE8P_`|R1XrDM31@yH61PW6`b+2LX+fG=c-y5`Okf|0ZK*0BD5!BRg1AeUcV zEdX(57Hn9UbCAaU6!>y$q6F~LcwcG0&&^?gCO+Q8&|6R54BSk$Jfa{Q%T;(3!}-3- zSC()QlZ~#GB$~zd>c;~I(Ciy zFNLWDuQ`zv?g%hSjDI^)YfICbZqZh#r;z;QNbhDI{B6a&ql&wdvjs^?R?tFxEP$h$+6?5d9-C$Os=(v34!KlOt|xcv3h5x zPt{F1ug41t|0uM?wZ?yqNLq2!RY`?;;ZG(eCKNN#;y|1W@0!&kyxxf=Mlp zad|gcXN(TeOl2yx($N!xcwa14ewScd9{R<*`qPyl%@2Qp7S;{*eT32bsrWv0Ue}MO zcmnGfKf}aL`wuE7d?dHh+8x-v$@3o}Un~;zfCr3o9Pz5zbPr$G(d4-fnEH4KG45_S zLn=70ly#grC7GKSNMDG$Yz_FHM;f2*Bs8P@j`yaUzEoGM0nFo=uMY8%X%kgIqV;>@ zDbshE{?wMFLeIc9mdP}?eLIF~KWrNt8_(Sm%+a`3mLuBZHZTa7nwmOXIEYgV6*Hba zCzx+KXAy7qB&m<1ck(CweWC2S0R z5qQAr-Ryg%Y2fcme!468ZPE6+f2OQ~1w01m^<6AY2-J;Q<3I=2(bhfYlBrJI(mky` z+;|U%PbCkm&Gyje#`bI-3jtMM+OL2-D$LKfXpb!x^23SUw0S-yi2%m#}`soxWdq{&JFZ#$5lFun`RXUS68qbWOqU;1u$wNHXS5wuQV|M;f z7aQ#K=RZFw+4j{E7NLeBSG=jG>)lulImP6sIDNN%fBTv%wf}_PVfWEs+{pPDCNZ=6 zxF0fGE4?-x9UkqTZMXkkczhdhY3J3n6^m-nk)or#qLjWm%axX0xGTIy(|O@Y0#d_d5tVymafNwSZVCyp325sd^dV9~wF{TW-@SiN)}G zz^HGZP)@rgB}W&;FV@KTKqQ8MdNR5Zq*=LMPfA=D1<^aXXLmTAa@P$s-GK4XF?T^( zi;1~Oj+dS-{r=npQd%FWAg#}LXZKNEacIqEta*^2h2!{{vOP{kynPB+cDTq^EjJv5T$m5MOnytOmZ;4j+@cuS0} zNYXtP|M-B=R&K63+I01s#?LbmRlZaB7?DIrub5r7MvF;Q$zmrg*0K$>acqezOR_W9 z?HtE~C=+WO8Fr~gdtfgqu6^C~_<;TqK|PaH8<{S5=}Zk(5LFimnZKoZDEdyQBe-_8 z!_k7_N@=M=K8{k#21{Re{HgP<*MkhJ(?!D=nPfTiIAG9;n2ip+#av=SpE* zLo$^yn%qR^n|yV+rChH1*yKZ zI>4hIOsjjsR!HHz+0wn-iRf`)c67wuo~ppNv$HF{vW?{RQ64Wic^kJoi0Hx@9UGf! z@dh=yADYgdaqi93wDf(ZXJuve@bDVRRd8=b)utZ$zuX$Glkn4-_1s-u2WY2V;nM!) z3oVS-9k(lB*Aa$iZ&58SvhEDjO>s50Vo+p2W;6onON%)E85s!6nAmR|ow5^2qme~+ zF)~_ie|>Q=yy@ZbO7;UMDqR1g2wItrPArj_@$Lw7C6%3ye>r>h$vh;_3U2v2x*?0$ zooH#J_jR(0o$;Z(LbKQ5bz#9DHQ3_23BJ}DFPf%ra$Z;)v*vsjFQsA^na!#c&m~3} z=Hm_cTs?h5it&~1xMwTzDgW+8Ts;EhCt=EfY@Kel6_LlCJ9vDaQ2(H$R&{Me@u%ov38vO2hx_ z%3^4~fp=6b=EPa?UntfZeX-sA<)7h(l@-=}w8Fo(rnhyr+Kor>GcYg^yA5M-{kbpA zZ}H>w9^}{Hh3IeZ zjQ_AI!sc zO^G?2d9#u=r!B%D{8`!kC}q#d=N-T`?|+4EZO1`jaRqC)HiqClyW8HDyF^xa`M-)p z+{MpWR9tEa$Q{lFGV8&g8)?kPLa-lBWwxt`LutvfcAF2c`w!o@sr*s1_M&VR`h(sN z)nn_hTO79~v5;Q>R^MorjOiBR;|+CPd!5L0Ty?z`0}X)p@SFy6mLD?STra{DeLeW9 z7Bl+PiXK3;CS%{4s4qe@&=&~DNbfDNYOeVz+CJEZ)29VW_jXIIS=-6~?! z4_IRUa%Rd(XHGE8n}=bOvhcg_zP-D+)?eVt?_qSQXfEyw!d#g%R^(rQl%w042x_Kv zrab#|O`;(M>`|*@2g(OL4?HU_qw=(_^@IlLdUJHDJRlRobQeqyn%?Kqrc?2k^DBEx z8cj*7d8`iVG#?GW@{>dUSp7=;%S+PVnY@i<CcRmZzaSG?suM6EKOYF~^X6zq|G3G8~sPdyf*w@X@f{6FOj#>)_Tk!5SG^HSY z8Cq!%*6pzJL+g)OEZn#o<8bo^S0cgrN5A58Y0mcthO^0fyb=kJG7DCoQ*mA2^w z_J^lQiav;$bDQ}$;u&I`y9j5eg*Ygig2tOAZGo~DD3Z9$jBe^LlExS*G!5y$U=vh6 z^7M3d+9JVu}Hwt_EPIf zgujrJ9>{YhEae-?OpswFTzU0E06Iw3i^zqOLM(T03119XA5&)foyrf1@rFv1rx`RS z;i>iT8>4+poSr->ZerHlq`Rzk0?5QZJxY}DIJF+Woto1ek>5Z1m(n5`Gm`ZC9%o)p zUMnUe368;fOM-?jJ)>sM@#;C&sB%U}Pfrg| z-#97x#Mc-`S?V5eLYdbp1k-}r@yoTQ39VKaqqX*5=V)a z6!)I!bzp}S9;>HfRdZo`-bA;ahaP!Nk?pTS<++hVV%&Vo3GUjLr_nZr^(~v;hlaN% zJFosB;@*4*ZO20%m!oy)6fNs4&Hd{m%3Aec^@++xw*C`(KIE+e;q`Hj^c<^2aIMOV z3Fk#ljN>&qa_7N%CwEfC#e5RwLPvBnM}0*mw;R>fwBA|T2RvMrkJCjj)^825#&Pr) z^E#+u`|R_H9BuYgZWT5Fwkqqdzu`$97(IyID3a;F_%Om}KDVcvh~+GTGky+b^#xh? zvp3w)c0mv%yFUnpYRUvp4?+h9$OQQz1eJ z(j+3|x;A(*OvMS#*}8YN%>5yv&N;YXH8(GB%15N~WP(6*gH`>}v4;zpt(`+^ zPD>}oZU@{bk=;i+sE^*?m_2hKjJJDNhqDaTYMK3g;H7a!4?dX5n-t^~LuSJZrW{~p zC_dKO+n*guFMD3s07)yp)!YI=NQgLzr||UZ`(kRIX+CqZ**nx4L=d+Nxcel+Mgjw0 zYPb2(x)ZeoK6O78v-b2E6;^0lYD^b#US_o@jUOHkIoWe$H$V1Vz`mQ3lCN{K>dwRz z?{{gabn{MJ0wt4~iDn=o`ohq)fs-cb6A&F0-CJ{r2yGA%Yfb#K0AQIX<{l{E0yxm>>= zrQze9aoFO2M~~<*uF4-jEKDw(Wo~4EBKE9`j`HNh^sZpvDxkIJU%s&$m~%NW+#p`f zf9P99FWZ_7`z?DlvYCe5v;M*O1;kg6$%wc*6bB6V7)+K-^B#oQvL=3DDm9bHD6hK3 zW$xEnQebKlJ^iB@X2Vr-^7W0T5R+{x>~|7KH_?hT1v%GNa1h}@L9%CpDynqSXn4fe z?>FhWq=&!flS;Bs?}O<7!YCv(qAFU(HlMlL8BBk?({@QRJr#$RZmYoLRE&)$rKNRt zL`!`G_@)5ITJrscq=*P}oScF5kDI30TudaFw~amiqxBeE8dxt*9BKCYJ1peqzUWln zlKTZOYW6EY(aoufMxJyUS&X5*eOxM|Sl@W+kf^WkjS1Z?_R67U9U_kwrm~tDdH19= zTkLhzTWHq{qqG)=27)1!m!qIP+3}qNHBYF{D7o8iB%>1)j~$GQL=x{i#B&}d z`B9UYNX`!7{p!y*y`P#|d8@Z>&WOwT<3Rd-c@B!*Si>qA17ah!SGoMXg_NXUJsTf~ zi_6zCk#COi^v0sq`r!O&xxW0Kt;L_uQGhE2uk9s2bCwGEamN?6Qp;Rw#;WO*%}ifB z3JNU)4}_I+rnvE*la9@7ZE#1&%SM?~pswM{CdG5WF&J3rh4Q+Lr;8g;6SYeE^$dFs zW?{H^dDjnfKgeshS5v`xYkNQ=Z4MRCZ$Od0TT26g)aRjj+JOS}@@!`W7 zl!GfCFS~6#aRgPB<3{MVb&PwkU*x9S$+8d#r2 zOZfZX{0fLmc{mm2$T`o8d-lWm`u;2={#0-_YG$l{R^3hjo9;SU+yc)~sfkp(=irCu zMUeZCp%_k^*~cmwx*$GB2ar$Xs$NbFRP|SP;9W8>Zw}Q9Gk=joCd8vPXmdX{Q6z^h zoxc+ek)mfHCz)o^PwV`%i_G_ZjMun)JK4O7DW|u>$qt9<e z6v^?)2iC987gq;Tiqgk@ALMQ-y6}UJwxEOA%4?wgP4E&_=?aFlf=al9Z>5J(`ic?P zs7+Tn*-l@&MSkblO=S!}cpRm#DLy-?;r01Tt&mWR&#K5vi%-o@1RFZ&zhypkDVbW& zdnn$^bc*#b?iVX^s;wMNNh^_lL8w71M4A=;$)V&*xldXlNqzxxUobV*?8Z z;_>|saH+y6;9LNx7FJd`<(ZNSWhXW3$q!bGM%+mxjK$$Y=qLec`lh`Wj!fRftr&Mc z(>>X)wT6+}$tTif&a(*~_Z>R)Dn7a?*y{!GH&E!Lfw>Ym25^M#bJ+7QzR)*ZT6@Fo^FTWVuZM=EbtDuZ(>6r0Bx?8XL^M0SpnU~20Uz0@5R3^r>EO?Vh&p59hb_9RsJkS39GC1o-b?5iaG++ZWuph3#Wvukr*B*!Rc<-`UKw?|+R3d|d4f4;m-z8g z|5NAUu`Y)Iow0oB#eRPRP4yS1%hd#qYlpi^a-4^{u=lOHq+fiC!vEp4Sa#NVy~Rh) z*%#DVmD1t?Rt77YAz~AJDCZy44nY>6iJSVTD3UW%+>zA=xVE_S!xThlWT2KqvPcz0 zWxl2?i+^)$?r{%sOk40BdcV8B^2f}p*u-MDJlS;`*Z9Auwbv$ORYHXay5CoSo<|v< zcp2lwC?`_y5=o5wc=;X1CTW-zrh65dGTg0N+r?^vGq#EOrNy0f1wJiESNuu)l2oN1 zQr8L}Va<6NTJOtbE=uZog)`&zNiE|>v8{$RQRjMSaBZ*MbM!+YCp-IbW8;gqoi=Cf zggu2UD+P{CtR~b4z@OD&T79Dw#^iFe%b{NxwB6z(f?Tz^(K04!DZXYENU01094B+4 z?b(Vpl+3I=FGe|Zx`zfnZ_4pp=MjCw6VnlqYHiL^U=LB=3ZVXI;h(oS@#sPEN|mtD zAjn4XXeq>BLPkpk%Yq?vV6Btee`(xrT{>M$V;1q-SzOGM52%30XkaCF?XfjauPqFz zW{%>2Dmj$g%h=Yzyn5*M??hv7Lw8Tl5waf+FwXTNWsc0u~QoA;WjKZUtO;T=CgnR?&!i ztj9ioRsQ~JYJ0=edvSF9TEQBs>MrS|B?reKKGSO_aidE;d7d}Y8F4$d0mUw zwPz6Biv@lX-CUIB?x;Mu;(Oa@o%*3(!&!7#uWQHbY$zjw%nr*i=N}pR5&`N(W`}$O ze0OEr$n_49ZlLn*1l9w)<=#7oWA86#m~EDgKJ#t>C2!l;4$FpwDK^L-%fB7+tEDYj zAySNf%YZ%(n|G}5KwEE8{3FkgpG4rigQBsQn!;X;9d*i|@P*yvT{{|jk`fKvvh4e{ zneSxi-B$T35*8PmF8#s@Atlcw7Gxp=EkUH(L2C<8pm6TKKkkz zTx7Ayr(qE;v3Pv#1JAy|u}(aE>Xt5L7+D{j^ij;#*vj(1{?@>+ zKMr4Co4N2-(-cBZ{fO|-5m0NYJ%6Vw@viPTt8G#79C^7yLy{x~!-ki!)ZOv_Pqsug zUpWH?vr1*X`SSVx_U{5x*{B@KA{)LGMRCMM8&8^q=K;#U3IZjEkYahAMHtWMp95vo z+tV>=uoQla2ql{)1l0m9tsO^jx}oRU8T6uHmk@m&01V%44>BsE20gFCPg#rdsV4_~ zgAns4toeH51u40E?jd8d9=nO5whLc30Am*awq+90cqyd?V?Qrz za(HR2gp+4yT)*5AyFU?D($QqnAt;f}OuuXmbI=lu->(JZf~_ur;m9fL-M$`a&PDHc zJLf)06G{EvxfSTfD~~U_9>@%Kyr~QBya7xrI=7^jeZF?b!c8wn0k6HgM8|eBYcR1_ z=&SSHsK@N7!zuhSLBYY(*VmEareU+{68r1R~8ePKIRKP0jrcUPjjr2P8M^=!k5An2Msw{{7z%tEvw|WFsCJn9f zgnL!}X2N1gH1mD=#rhzNP5+nM2?W$|{tILB`SGL^?jFQa8kq{A3#0Lw^xSY~-S@7Q z3*H`@PU~scJ*^)AFGNbpzvkD{ z`8Ie=7-wUhe})L%ZH@8WT60Tp(T#hP^hqRo$~&f2#2-$36%~IiA=0}ck(k1!5hv`! zcs0EJn@$Kcd*G8IeK{=nBs4JXOg(N`wP|NTwqa(6dPPFuj(6LCs64P3{HoJ+ONM*T zpFbBfpTj)N5Dl&}A3V3YIJNM@_=0R_lDB4Rs3}gHl5b&$I4u2=BuDS!MbWE(C1qMr zLFYM)u)Qh6!L4LjSuTQe#`9jG2k#Aw?zTm_JQE%up7o?9^Xc#&MVv^w<@_EUzD3tA zvAvhozr24{l2}uaG$VOT|5iZ`hn0eMKJd@^U(_AAYz@Z%@l&nceD9y)!m6XU?3xjp zJrQ(JP`~8bygMf!RiPRDj-Tu*P*;wL=;qWOu&g@jBw9oOrcG7$i*!J-ciY+8AG&qV z>`-I-0MfF$vC%hSt4k|~wnL*a?G;a0~50PBrmYi)6?s3F4L$aK5ziGDV0CPyw5nY{3{~d7d$)L znT=mP)&ztH70@+Uor6qAg7`U_AAPa<0a8Qe&2==%ya4cLolxs|dXgprettLPt`_i2 zGZa$gVyUyv(`TVg?#&Fm3Vz-HJu?0eH%5-}ErVSD@LLL0w~#mYD0uVGQ`%S74mHVE zxmJ0wG()9uokVjq&n4y~zfYEq`r}Z~govfxO|`E}3DuNp}+Z zY*rbNun2qyI!rk`UQPjEkPxj=)VhAmomk;rw~lD@y&`80NY8&PPP~>{1acl6pQQTo zKXkiSIWdBk404lU0D*TgU}@=L$4fElqO_0fe%ZWwKHCnL`VYfGD;lYg_x4`>%qptT z{)^B2ug@-H!qj_wmP-$n%`F`H#Nxhi(-{@p>Fuwkh}+&(E2ZoFh=0Z7agxB$IXyP&>E{TU1sNXOX+D3j8=P%I~G^msLs#}GrwpmAx$i&;=`M32RAUgZo zws{9sl?2y=7~8(Dvs3c$zq}TtJ3d{Oq}o&NyA8Kofkv2Xqvh^G4dg&=V>EMF%EVZ{a`napF&XI+3a{ruk>|{_x^2@dmQM< z)3#i#YLXaLIy&=8l}rJ0v0{CrCsb6Ri0;wnKFvPD+1Im{=Sk`Ny+uzlW?lY?V#Zx65pBQ-XIzI?&g(b4HK z!B?WP?^2bQ=LJ$Bn?9J?V+r2Ev4|%vUfq1leewh}JV9T-zC|LBr&?|C4Si6o04Xh< zm1_fNkB-3T1`zw|c^WA?LnGG;!zYQU$0jda2$$SPm0vF1iKCjE{!w|c^;*-vF7x`i z-D@^h(3kABM^Lp`k;E8$E?&iSALeV(WZ_l|{H6!%E56GKiptLn3%e=Wem!Tvjbe%w zaJ$aza{SfVh8^(KmvW|#QwO)U9J6KhjS~T$Q+nxc??kl!)1y?ZlsXI_tMr7%pBhgh z@Y$RB_EO&z4?`ESc?tH#QaOcqo{cvP{+s-w!NFSb!9hXDgIJY%r#TIBTX+Icq+@Ag z!;XX8>TGUa;u#m05czD*VZ-lW#zo%0ns0%+o?b*;TpZ9*y6lvdmE9uYYzyd$8Y{@+ zdDl;kx1l_t`J0xjYh6KzxO@2c7TsXOa@SdN2r2%%cNBc)C)%+@v}-@27grT&7c5I= zpuCPQ;>(h@-=0NB#JAYY)~6EUBH3oUFe$j-opo-|O?!78tQ6LQ=N*(T!)>7oX(#Ez zf&JHKhz0g6hp^>20mcW%neM1Viz~KFmJetGl8&h3WBjtJyl=%km+$kU2^hBH{HuzK z3ly?obHs;(H$<3zWOILtlQV$~H3gz)r;@^2DrB}Sy4@86;?QfXT0zOYCjnUfbQtLE znL9YVyY1Up=wq0FoZ|`((e>i>+U6!TxI(wdEr1EcO!b9!V|Q1f>DyVg)mV=gVvLi@M&Yr$1!5^2-9gsi*+2B%N1NumMnO^6~QnL@iIZ*t`g^2`d;(Q8jJDVW)cL zrxLLffA6JE$Y{c9DMPdKt4P?Bb@?Y(XZ!18aLH1&+Ru#Qw;@}O?*v9@MOQXQLYlka zI@LD#ccy^JbN#S$PsiG*xvDeyt~zI+P(wo%V39 z6&vz8di{LS9RaH(qL#qJdBSarFXdkwB*T3ZR|lqt3YuUg1ykuJSc!eL&YSO7`f)YJ zTrXkk6ekZ8wY4!zsy!GQo{6k&e~P0eKG&T!LGI z1QI+1x1fUz?yd>$I%x3V8YH+o1PC&?yUQRmz}uYrKkuIW?z&I*S}bN@rg!h|>gwvM zufD1UKW;0G=+}_9WMtGD3uV>jvx9-t87M0iXKWc3IUrYTiQUq$yqGXDw#nfsdxIBQ z3PGB;K=G>cse9L>>T&_cftfy04=x8kIhg0M*rIFk{zv9w#$B|w7XM)PmQb&-UFf1Ru4FZiG&xgf#7D@wJ@21NQF z;z8zK`(1Z|T3e&RH2|s{0tBl5xd-Ql@B^hrH%ZYc#;QRqcivVXoa3VHX98r`_Y5i^%m(o5sMqyBsi+%U6a$S z#(T^L_+8p1w#m{uZ)}`b$Me{m*-5+F9!Ug;InoMM6J)Rn>_aO8)&eIi-%9iU`c{g< ztk3$=0x2eA!)o9K6*XsPdS3=|Fd0XnA2J(5l@;@+X?ByHk^OO~c%&fiVh*;~>c_p# z=e*TxpQUFB?|N>Q#+misN+KN}bHtTG|6yb7Pci+F&}g0lH|%`VM#BJOztx&mR`Y7b z^UX@aD1Ig8evWF>e4Enk9MRofj_;T8R)HyqOM$G|ifLi<1!L@ZAGg|+pY#_-gs%Mu zA;+}GMka1vF}FvG>rq9zjc;S)V#B-tp7l==?u`CGkapn(;fv$WsA6cHO}UgVVB=s= zI-&tWu;~+~U-JVWw-6}&`?ozqu5u)agN==SdUht@F$J5bv6y@g7<{Lvq=sdfxYx7~ z#NB^gMp|U(Q;EDZP02^!ao!-fC&-nXYZ8KU%~?W8Y$D zZxIm`1l9OY8Vq21Sd*n_f-@~GM>4)v(}Paz%Cu-{wrCj{hj0GoP_h@TY|uj4*p#0hdS$S#HArhk*pxm+>?N$z-R-Or2KR~1$B(%98k3r_5*_)LdD)D^TCq2&u+mAylnY zcJE%`o->SBwa!X|@`*l<{O3!iCsTA6#+7WZAji&(&l+U9P{`ImalIpZ6y*x){eHwbDEp?l5RQ1&~g z#>#9zH?Gq$dSM<`znL$i<1|~aKv+hbM7d9&L}&QHKYLE+Un4m8d?fKUsYhnUjD=I~ zmk}2By!r;`Rx8WhsOKRCbaJNt(0#G327YMrNzq6uFNSY;#V@soIBYa#{MLRC)u7bp?b!ldR1E69_TPhTxxY?wgIL` zpwJCmVpEV%MC0IOWP`D4iG#W}+GI6K*isNAi4aJUv%;d};E5V6bi7+ACc%ij|Q7_281x z5K}ubbSrCG?WEf>ilg4*q?G-nyGpg`TFKJ{B9Ng?>6Ln!RJs~wQmk>)BRenhr}ZN| zL=wp{rH^P(?Ics1neT!^Fra|YYvAF1Hwx8h$Nhp_Nkdf&;^OXX%k|K^tVVb8fYtG$ z7i0ad*1w!-s;S=qFdkiZZlg3|6GtW{wV+odh~Giqw#vcNUgMsGUKOG2iCzQQBxuPe zTjL&jtneZIlg+p~b+@Gi_~E!8x9dvt0Pn&H9c=b=ORF2sF4j?BOJMUT9BvFPU~#v9 zmZWB-vLH&r8^xDYYPd7Or{Y8;PVCb9&}{Q?I65oSUpkC5O^OB;q^&7xF;=Smxto?H zH?A_JB3gmaD&_Mgp{TbtFV(%8%yzW)51p8{pfJV}LzvP1Mjq&{Q|z$uYZ&X4!K>0t zco%b1%@@(?qx#raYo9pEkRhH+o*8biR>WG1_O?+;FXYGACD&z$y6a&`FN9Z+bdZ5k zGNPsKT!bZgbia{NQzQufG|6tz>&$HzGVQimDb1Rh12;ZQ=MJ-6EjON>zds#sGCzN0 z8^y2^DSh4R|L_?Bxkw&OVMbRRr=0^~r2`OA%r|boWKl|ATAQv%VFzh=JzBm26JZ zX5E6bHI$R~%DJa*0`>3?v>`{I<>Q?|uL}DxZnrg_XO&TBlv#qvkoY>1+z1d-6hU4# z-%IKcf#d+6aC;=v#$QV*qRsw&G~S@J)AQ$w$j8$VY<1zX=FRs=&(WX1VtIwMJZouP zW2WLXmmkwREp|Y^)Qn7Y{`C0E@j{dXyswO(YOxKwb${Ks(bYPWC*pKc&wUa0st)_; z?c$N;^~!W7ze{FUvrj|SN17mR6j%V^eI+LMx!hpJ2yXl~}&ySXK*toAMrgZ`1?~Wgb_)Yio~cup3~V zce}ihb3bvv_7S2GIi&> zL&mGq&4&iu85Ua8J`0Cz>-1H@2M5Z$({-i39CCf<(nM~viL6Ve*SV|%M&q6JLI*an%H#4rO3YY z!Fx`I?NCpPYEslUJAm2s=BK*m=}0T2@k&+nZkH&mK{HP z$vTqb_UO`G+FNiigdDE4@?$rbhiBY4_n-#s?EGY`#O191onv(2{_8s0S)daCpL6b=UGVcGr za{Wk5p9pB1ypOI{E!JwvodFdNDDe#cWKve97;okelZ``uN|t+T3?Pi%HhVj znvSqoe+Xtg|IO#wEbw)}GW_d$!G zp@|1G*?Q|}ODE2}x!F!DH+I!#h;g+XKo$~>Ew$#N##{=SoNR4nr#k3&7) zI~^#^{aku(S|Q@HHsJM(pJ7{zy_+0XtHd`iY`$z@qg2*oF|B?F^1#oIX?-?~of*z3 zQ%9S6Hv#9>a9Zmyjo8xewpp!0rs!}0_QGg?iCl)e1+}8c&uE~G*WJx@Yjmc*TM6_a zC?^d#^)XIqOh;p}eQA%SSg*BK+|LbiwHQdHE2^k-00X(qVmT{_+q_d zpjUql?XlcQ;$Yhg!nw?@=!RXVySwEJIa2QE4=!TuRU!hvYq4F1N_715prOAa-NIT{ zQwhW>9mm80Zd&U1-!#|^R7N&M1+IAa;{2jT!w;Tdq{@J``xfqa%BNCf{yI^7@*xa) zNm%WdR_gsedhlD+db_4iwFYdXoSSMhCWxxQp}tR+(*)RaZ)lNwfq?t6;^QaM{Mh?tt(6NEBuqAG4}@&fD?b# zBL(Tl>BqN(*Q#o({rY#P)q2-yT{`+StBl+Sm4Mw*9vA%MSBMM+kUz?`wE}sO^g`v+ zrw$2+LqUZa`Of~J6kn|# zxc%W{I&{Cq>WLy9Ob1c}g2ce6ip1Yo zzr6qH*UOH^qh|B5{M}ml9OgI_DMP`QpiGxX7vl2EGg=9~CIgDQ$hm?>z`%Ix0}3V%6bM8Gq- z8;&ye8jf*Ej*Jky489MFnFtY(USkth!+SnqObUBQ3T&9(~qySJu8SiuitjT9ygJ zslyO@w_4=lx47`(kYVC z->|URl#rk~x*oC#aFhoOmB<-Y zc4CRZ`Kb<>yI#b$EhTymWHWBrUEZ@Ak9p{G=Cq0#m#yXbeCAW>vZ$r(d(=UEd0vdL zn#C{`zNW^$u&+(KE|^9wqfBbMn9wun3B>KfYK|nCV53Hr5vi%PkVU0vYcl7qFA|G} z1K3`HM^mFT&r}z6dV7oNcMw3jK9@lM&egVt)oxD!fcrMWJHVIeQ=?vA- zBWgKOT7P2--HIJkrF1^&+S&sv5Jo*k_Q}T$q91Pc*Zh)(T!g;_G2hRP*XwhHpd6-l zB3}-#z>3$<*k*@%M}^zY#1abZJUigU*sCJ8SfkCSykYm;VR}!ci&)mGQj)|FA&6sb z*Uf}FO~il?ggj%k*2Jc=DLaB9*2VtE-a+2z$sg8pmc{;F8&>M4zRgX)%+MMeg6A@s zydpe;uA*xY0(y&DzpfAIWuY3s6D%{_Q@hKXhPl_|a+4GYKQ$v1uP(L4VwUXiun}8U zg!dpUuc&fUZELpx$Hb-+v=56(2~(}7&#^I1Hn&}5T`iL~R6=AVpzX3Qi=DD!bTK>o zie^WyJ(xQZKiG{Auag<`hu4ckjsDD5`3U#A^b0Ig^e@}t6GJziWO`R1hdG8MM4eu` zxJ2&|_V*P=9siMV;pQ5T8=@#b>%!j~AQkB?&ZJj1e!iA%hhOj1;e_OQxeeCSN|Jo{ zg{thA3pKX9{L2nc|1Og#E>H;VU{<`QK#)*|ZhMv-$df%BG+&PvPG(QtG9o~(bxH0( zrK>!}5wf+}I#MRb@$}MQy&g>mtk)~c97UQ@QRp?aq_6dE_qC59qgaQEqG-p(g5q)e zv`09m<Bk@b``&X}$n#n|w_z1|V|K%A)}G(IW-UvT_6KM+R;0_xdIQMJ>wBre^O zJrU`BrFFXc%2TDy-HEc5DKDFjZeovY?pL8r3bQfu~Z!< zT3rgv{B^lM+_2_-%nmkc5|YCAym{HEVl~RRO8G)QS@EJ=x$biL-SN|OvpBU|kOOuo z!w`E^ye^7)1G=k>gn%>4u*M&7jU|zc{rI&5?gC#GcKVP2`Fu@~1(xF6kU`)t2D|P0 z%4{Y@aSy50qt6p(9(bgyLs{$i-|T&8++8}VulPOc7?dTfLl*#hZJQM74=l~96ICR= zE6ai`4c!DDtF`DM?=IGnsu?eXCZt3*c=TwZdff~E;5R_!&)_#N9f&Jq7V5V*;SEd! zUvSLnP>U7lAe>(^#2eJ`=c2r8VZZVN0*4R4%X2$H6 z^?glmggFlcLPEGfV}A&Ed2?5~M9--eF|DxQ9v)6Z&XSVGcD4WWv^yRTI6tv;#>TR_ zteX!27qEcOzrJ?$o`GYR%ZJNbXE@49SM6^Ll@jO_o_J9ihQ$1h_}~4$+wS2d5o{hVfkdT}-s^x{C&PJ=3GA zkA+`W4OiGFx85QlI1LmUCff(Fs}P3$bypemhe$(m{vA$?Y2p788o&%A`G?ORutzo? zFd=_meQx4^RS^8wL~Nn`ldLj0IF0cE?(+9#pYflSL;tJcKDX?LWm(-LjvKT2{olRA zI^pnGK3EHii#uJE%ynaCV_Pv+d*;^Q*29DzY6&=>UzLUQUH2^3e=|%Cu6YUT;qB%D zyx=dU0VlnYjSja(g(MC@O!N5hV>B}|q_;OGjsR8@V5Z^VCBUtem7w!~;(|df1g8T+ z@jXnqF{a(d_C14xsqvlt{~vEq85oZXfNkQ z0KTR-oKlmafZ7pz|`aS@jGwTVx(#5ze@CfApfYadcmh}Fj-`?y?86m zpnuQU)YKG_%J)(oAufbVYPz01=;ot2dar=o010Lp0i7h9*r3=VEofP?t&OXf^zOENla?b+(qUhhNk2Lpq5Qr9u@o#Y<`+2t>W@N1p?B53#5Ditk0ul9znSUo&|9e+nZ~9ySthrJxJLT3e zXw$|+sX&%ppwJxgn`6Ag`UC48Jx)IbgYq$GcXw8t zkThtWPo~s0y#(7v)2g;e3=L&L^qeRX}K4W4*YHB%u*I;M#TIXlc3;s=!f zO4!x=r~2vAbNcvX2S+DmpTkwjv-{q|-F>XwhTP*4(L-j#+S6aiBjjRL@cp|l;MgE} zVWCa7KT+G8aP$E7=CqY0y^&+t96J$*XN=`9ivWf2_qF;1=p?|__^b`v zQq7KTgTpE%$**8Z9IA6={ z;T}`eB$(L?-Q;;6D?f7Sh%MK!y(Ssb2%!pnIr3>}(Oq$9ZGDO_o`hGA`N*;)S)7R- zy`qlX?;fGR<>i4OmlL${aYg&t86C-W>=G{}4m+X?5V*s&jF>wk?B;^;RYh|pB)Cr? zPlKN3lTi0Z+?bvmVrD>hJ*Zr?7sa{swpfyxdn~>q7#r^PJM%F|z_dk04~uN-;v?4oFFXwX1!KWHU)r3gwR|R<=oN zDTO0#){#0E>}Tqo#JUL&Wckl0-ov(%L>Q$t8h?5!;D7`#b|bI1?e8vEKGs^#bxm2N zUL9QOf@fQT;xo9llw(ATWLGzdV`vpgpDfwAkma#jxZ)V*0p$(1fM6(zrL<0 z$A8SvD#~(m4A1kZhjjb_iiv)^e&5BlUiIO8N2#x{q{rt7v)`DD({pAcydM0xW|u6N0@+>C05{13YOB zcL=pET|uq0Mp-vbc`ukZJdG7~Bq~eQczSusyr4)Rd)AwU!5K&-N-}^44lf1VAO|bFn9iksUB>fC=L|JZ z-O-g5o(-E;r;_WkgLU!bJOs^m&*jOTcTj&xOP$@Mh5^(qD;?XE`!fyc^Yi3JDoxGJ z4Ld!r!AmU>lS@99CDuq|a%s-=6yxe={Wr9Usse@N1N@i=?4SW2&I&8Eu$F)oKE?bk zXhhRxPaXNARhtxvR$p%8eT|Vu{Uf^3YHWPQC^{A&k@DsfRuYV@d=k3~J4&09XGx-Q z4YZ=c_+s8&L3`N#`c!xf5p*mbJfp3*_)j-R``t6Vb56Nk>i5~oqS#F5)NM{KY~1Pt zvDS;2S5Fk-psEB+;^6d(a`8-c|S?kGtUQ_xa>lqn}=tcOvWc^i1Pa1 zW?~uL&5k4$nLf~AqKirbMwUJ{vY+xyJ25pfc`wS+(bD!PQI+UK#1`no&)T5aHZFaxl` zv@iBUttQV+6!WTXd|Wv0=X8Wd)&j0BAa+Bn>ECBkbdPfGUKr)&Rs5Hv@mib3*IA-P z-5YUg9|)aT<4}rNn;e$(OR7escQ*i|BZ}SJ)HA~AJ3BKwiYZ|yPnxo-)!F;A0h`s- z<$7yauRm>$3REmrT;W`xggH~spa0A-p$QThi8QpFul&s zZXU9;e^b}fQuqt0)c_>=D@AD2_NT_YmfkuhC*+vJ^mG}PWhvm3dH{F(R{C31aJ!HL zy1thSG5=5ZyvW zVzyippdo`BR@xn%uK^eeithcHDo+O%MEGWmUYg=%07yS zI_ru*>`9!Q8A1ddei^CpaIN%HyF9DkMBCJxq=+ifW%2T60D5nH=dt&}A?&5W=HvW8 z(z+kT8s8#Gq&uQDjHH@htA(UVbieJ@=pi=z+Iu0feW)g*9I$jUlkkYPCx*k2LpNMC z;^VDgjM$5A-nq)skNVCdXZo@848d20iX8o&Rgg7uPpXUW#LPY#KFRgZq6eq=1`Q`^ zqt5Qw3xTlW(2%)Z&$ozPBQ6Ijh+Mq%vqrIu(KKLKK<#+mB8PHU$xvZC2Z?kuzC~{} zojB8@DDvrA(DIlU7dNQu5mm+Er4DMi$&l2y;ng7Aji->gB&fn;Wh%Mc{z-t!U(Sw` ziq$KVyPJOAv9t6%@<19WK~4PTRmQu3Rr6`KXwhc&)lISjCC5#SOcuEB>ia>@*?#HK z(Y2kYQ&C@KT@o3*o9-0vE^ekj4-wg)JLu^hD=q>hRtL_=LD$(nr%QE-$BV`2t~VR> z;2-tdC#*Is58#}10Z)yt9D{mc`sAiZLG~^hTE9c~f zT<+s7dR!vwxf-&?xyQF8>G6q;@WhPxa_g3PhkU(^DE?)T4v`yqP+fBg`Y{lQrg8>= z8h#(ql)btH(IoM#vv}&|ewinq%1f|8V<@4_rdx$vYsmU2$4u0fs|gIlSmAl8mJZ?C=As!h zlrFMWXOTi>(Ufq(0Xs|$Z0fUWs@5u!x?=-o7=6+1Tg;5lC+sd~3d1iy-E17xIN$fo z$2zHYnv7I89p5B1U7i*Xr3zx`BlU1Pw10X0Xcp6S#lIJVXVhS>`yly7y`MhN z#`{gHQE2cv97rv2rpwTcSqN%!H8KhwqCz)nj9U4=L-@7P14A&sYn@(7JiIL^C z6DgpgnSf>ZWO==xC9&z2>47Y6T$X)plgx(p4PE%}Xb$U^lTi!`!8E|$ty({r?i+Ci z52rZ1WPs_UV(tL_}^-sw%f6#7KdT^TdLVne89+b|JTg7!Br@-o>dm|04t3E`4_ilh}~n zQXMW1e;lr>{wf|MBSRXFn7-L*XA%qN%55rc$XV3=F(%RiU<_ z#$>VDA%uO7W_|PNP_x$yT)LA9MGtB)2cO6|j*FfuJ3!pAx{Bw#KX0wv;&ODf4~3^n zL17fyui4mun%m!g<-A*uG8AD)xT6YZ?}!n$4FwATq9IP6MOSIy@odvNCs}L5wJy?p z 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 >G748njSvC=oxk)Mj5Kw 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

\ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/additional_content/concepts_az.md b/i18n/it/docusaurus-plugin-content-docs/current/additional_content/concepts_az.md index 7755b046..c85124d0 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/additional_content/concepts_az.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/additional_content/concepts_az.md @@ -4,15 +4,15 @@ title: Concetti - Zone di disponibilità ## Zone di disponibilità -Ogni sito fisico all'interno di una regione dispone di una o più sale dedicate per le nostre infrastrutture. Queste sale sono esclusivamente utilizzate da Cloud Temple. +Ogni sito fisico all'interno di una regione dispone di una o più sale private per le nostre infrastrutture. Queste sale sono ad uso esclusivo di Cloud Temple. -__Ogni sala fisica corrisponde a una zona di disponibilità (AZ / Availability Zone)__ ed è completamente autonoma dal punto di vista elettrico, di raffreddamento, calcolo, archiviazione e rete. +__Ogni sala fisica corrisponde a una zona di disponibilità (AZ / Availability Zone)__ ed è completamente autonoma per quanto riguarda elettricità, raffreddamento, calcolo, storage e rete. La scelta di una zona di disponibilità implica quindi la scelta di un sito fisico e di una regione. -La Console seleziona automaticamente le zone di disponibilità su siti fisici diversi, in modo da distribuire la tua infrastruttura sul massimo numero di siti fisici. +La Console propone automaticamente zone di disponibilità su siti fisici distinti al fine di distribuire la tua infrastruttura sul massimo numero di siti fisici. -*__Nota: Se desideri un'allocazione specifica per un contesto particolare (più AZ sullo stesso sito fisico), è necessario inviare una richiesta di supporto.__* +*__Nota : Se desideri una configurazione specifica per un contesto particolare (plusieurs AZ sur le même site physique), è necessario inviare una richiesta di supporto.__* -| Riferimento del comando | Unità | SKU | +| Riferimento ordine | Unità | SKU | |--------------------------------------------------------------|-----------------|---------------------------| -| TENANT - *(REGION)* - Attivazione di una zona di disponibilità | 1 AZ per tenant | csp:*(REGION)*:iaas:az:v1 | +| TENANT - *(REGION)* - Attivazione di una zona di disponibilità | 1 AZ per tenant | csp:*(REGION)*:iaas:az:v1 | \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/additional_content/concepts_regional.md b/i18n/it/docusaurus-plugin-content-docs/current/additional_content/concepts_regional.md index edba547c..a366eab9 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/additional_content/concepts_regional.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/additional_content/concepts_regional.md @@ -1,6 +1,4 @@ - --- - title: Concetti - Regioni --- @@ -8,18 +6,18 @@ import iaasAz001 from '@site/docs/additional_content/images/iaas_az_001.png'; ## Regioni -L'infrastruttura Cloud Temple è prevista per garantire la continuità operativa delle tue applicazioni e delle tue piattaforme. -All'interno di una regione, puoi godere di una continuità di rete di livello 2. +L'infrastruttura Cloud Temple è progettata per garantire la continuità operativa delle vostre applicazioni e delle vostre piattaforme. +All'interno di una regione, è garantita una continuità di rete di livello 2. -In questo modo, è possibile definire un'architettura tecnica sulla regione Parigi, utilizzando 3 siti fisici per permettere l'implementazione di una piattaforma ad alta disponibilità con quorum. +Di conseguenza, è possibile definire un'architettura tecnica nella regione Parigi, utilizzando 3 siti fisici per consentire l'implementazione di una piattaforma in alta disponibilità con quorum. -Nel gennaio 2024, la piattaforma IaaS Cloud Temple dispone delle seguenti regioni: +A gennaio 2024, la piattaforma IaaS Cloud Temple dispone delle seguenti regioni: - Regione FR1 (Parigi) ### Regione FR1 -La regione FR1 è basata su tre siti fisici nella regione parigina: +La regione FR1 si basa su tre siti fisici nella regione parigina: - FR1 - AZ05 (PAR7S) - FR1 - AZ06 (TH3S) @@ -27,8 +25,8 @@ La regione FR1 è basata su tre siti fisici nella regione parigina: -Ogni sito si trova a più di 30 km a volo d'uccello dagli altri. In media, si deve prevedere una distanza ottica di 80 km tra ogni sito. La latenza garantita tra i siti è inferiore a 4 ms. +Ogni sito si trova a più di 30 km in linea d'aria dagli altri. In media, la distanza ottica tra ogni sito è di circa 80 km. La latenza garantita tra i siti è inferiore a 4 ms. -### Estensioni regionali +### Espansioni regionali -L'apertura di nuove regioni è principalmente associata alle opportunità di mercato. Nel gennaio 2024, l'apertura di una regione in Europa meridionale e di una regione in Europa settentrionale sono in studio. +L'apertura di nuove regioni è principalmente associata alle opportunità di mercato. A gennaio 2024, l'apertura di una regione nel Sud Europa e di una regione nel Nord Europa sono in fase di studio. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/bastion/bastion.md b/i18n/it/docusaurus-plugin-content-docs/current/bastion/bastion.md index 4c9be256..6c913144 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/bastion/bastion.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/bastion/bastion.md @@ -2,26 +2,28 @@ title: Panoramica --- -Il **Tempio Bastione Cloud** è un servizio sicuro e gestito che semplifica la gestione delle tue infrastrutture tramite connessioni RDP o SSH. +# Bastion -Accessibile dalla console Cloud Temple, garantisce una gestione centrale al contempo che protegge i tuoi dispositivi da qualsiasi esposizione a Internet. +Il **Bastion Cloud Temple** è un servizio sicuro e gestito che semplifica l'amministrazione delle vostre infrastrutture tramite connessioni RDP o SSH. -Con la sua prospettiva orientata alla sicurezza e le sue funzionalità avanzate come l'Infrastructure as Code, il Bastione soddisfa i bisogni degli ambienti Cloud, ibridi e on-premises. +Accessibile dalla console Cloud Temple, garantisce una gestione centralizzata proteggendo al contempo le vostre apparecchiature da qualsiasi esposizione a Internet. + +Grazie al suo approccio orientato alla sicurezza e alle funzionalità avanzate come l'Infrastructure as Code, il Bastion soddisfa le esigenze di ambienti Cloud, ibridi e on-premises.

Concetti

-

Esplora le basi e i principi essenziali per comprendere e dominare la nostra infrastruttura.

- Esplora i concetti → +

Scopri le basi e i principi essenziali per comprendere e padroneggiare la nostra infrastruttura.

+ Esplora i concetti →
-

Quick Start

+

Avvio rapido

Inizia rapidamente con le nostre risorse seguendo istruzioni chiare e semplici.

- Inizia il Quick Start → + Avvia il Quickstart →
-
+

Tutorial

Impara passo dopo passo a configurare e utilizzare i nostri servizi con guide dettagliate.

- Scopri i tutorial → + Scopri i tutorial →
-
+
\ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/bastion/concepts.md b/i18n/it/docusaurus-plugin-content-docs/current/bastion/concepts.md index 6d4e0d18..82b8f66d 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/bastion/concepts.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/bastion/concepts.md @@ -1,38 +1,40 @@ --- title: Concetti --- -import bastion from '@site/docs/bastion/images/bastion.svg' +import bastion from '@site/docs/bastion/images/bastion.png' -## Cos'è il Bastion Cloud Temple? +## Che cos'è il Bastion Cloud Temple ? -Il Bastion Cloud Temple è un servizio gestito che fornisce una connessione RDP o SSH sicura dalla console Cloud Temple alle vostre infrastrutture fisiche e virtuali, indipendentemente dal fatto che siano situate nel Cloud di fiducia, in un Cloud pubblico o on-premise. La soluzione Bastion consente di gestire i vostri dispositivi senza esporli direttamente a Internet. +Il Bastion Cloud Temple è un servizio gestito che fornisce una connettività RDP o SSH sicura dalla console +Cloud Temple verso le vostre infrastrutture fisiche e virtuali, che si trovino sul Cloud di fiducia, su un +Cloud pubblico o on-premise. La soluzione Bastion consente di amministrare le vostre apparecchiature senza esporle a Internet. -## Vantaggi +## I vantaggi -| Vantaggio | | -|------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| Gestione centralizzata | Il Bastion Cloud Temple è accessibile direttamente dalla Console. | -| Sicurezza | I dispositivi gestiti tramite il Bastion non sono esposti a Internet, proteggendoli così da analisi dei loro porte da parte di utenti malintenzionati. | -| Infrastructure as Code | Le API consentono di gestire completamente il Bastion Cloud Temple "as Code" (creazione di sessione, connessione, modifica e cancellazione di sessione). | +| Vantaggio | Descrizione | +|------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| Gestione centralizzata | Il Bastion Cloud Temple è accessibile direttamente dalla Console. | +| Sicurezza | Le apparecchiature gestite tramite il Bastion non sono esposte a Internet, il che le protegge in particolare dall'analisi delle loro porte da parte di utenti malintenzionati. | +| Infrastructure as Code | Le API consentono di gestire il Bastion Cloud Temple interamente "as Code" (creazione di sessione, connessione, modifica e eliminazione di sessione). | -## References (SKU) +## Riferimenti (SKU) -| Reference | Unit | SKU | -|------------------------------------|:--------:|:-----------------------:| -| ADMINISTRATION - Bastion SSH & RDP | 1 Session | cmp:bastion:session:std | +| Riferimento | Unità | SKU | +|------------------------------------|:---------:|:-----------------------:| +| AMMINISTRAZIONE - Bastion SSH & RDP | 1 Sessione | cmp:bastion:session:std | -### Bastion Appliance +### L'Appliance Bastion -The Bastion Appliance is a virtual machine deployed close to your equipment. This appliance enables a secure, direct flow from the Console platform to the equipment to be managed, which is located in the same virtual network. +L'Appliance Bastion è una macchina virtuale distribuita in prossimità dei vostri dispositivi. Questa Appliance consente di far transitare un flusso sicuro e diretto dalla piattaforma Console verso i dispositivi da amministrare, situati nella stessa rete virtuale. -The traffic is encrypted and encapsulated within a VPN tunnel. The solution does not require opening a connection from the Internet to your infrastructure. It is sufficient that the appliance has access to the public IP address of the Console Bastion module on port 443. +Il flusso è cifrato e incapsulato in un tunnel VPN. La soluzione non richiede l'apertura di un flusso da Internet verso le vostre infrastrutture. È sufficiente che l'Appliance abbia accesso all'IP pubblico del modulo Console Bastion sulla porta 443. -A single appliance can be used to quickly connect to a piece of equipment. For each connection, the desired protocol, the machine's IP address, and your credentials must be specified. To avoid entering these details for every connection, it is possible to create sessions associated with equipment that is regularly managed. +Un'Appliance può essere utilizzata per effettuare una connessione rapida verso un dispositivo. Ad ogni connessione, è necessario specificare il protocollo desiderato, l'indirizzo IP della macchina e le proprie credenziali. Per evitare di inserire queste informazioni ad ogni connessione, è possibile creare sessioni associate a dispositivi da amministrare regolarmente. -### Sessioni +### Le Sessioni -Una sessione è una configurazione di connessione a un dispositivo tramite un Bastion. Consiste nel definire il dispositivo da gestire e l'Appliance da utilizzare per instradare il flusso, consentendo così di connettersi più rapidamente a tale dispositivo. +Una sessione è una configurazione di connessione a un dispositivo tramite un Bastion. Consiste nel definire un dispositivo da amministrare e l’Appliance da utilizzare per far transitare il traffico, consentendo così di connettersi più rapidamente a tale dispositivo. -Questa soluzione è adatta nel caso di connessioni regolari a un dispositivo da gestire. Le informazioni essenziali vengono conservate, richiedendo solo le tue credenziali durante la connessione. +Questa soluzione è adatta nel caso di connessioni regolari a un dispositivo da amministrare. Le informazioni essenziali vengono memorizzate, sono richieste solo le tue credenziali al momento della connessione. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/bastion/quickstart.md b/i18n/it/docusaurus-plugin-content-docs/current/bastion/quickstart.md index 169b5a8d..49f42ea6 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/bastion/quickstart.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/bastion/quickstart.md @@ -1,5 +1,5 @@ --- -title: Guida di avvio +title: Guida introduttiva --- import shivaSupport from '@site/docs/bastion/images/shiva_support.png' import creerSession from '@site/docs/bastion/images/creer_session.png' @@ -8,77 +8,77 @@ import creerSession3 from '@site/docs/bastion/images/creer_session3.png' import ouvrirSession from '@site/docs/bastion/images/ouvrir_session.png' import ouvrirSession2 from '@site/docs/bastion/images/ouvrir_session2.png' -Questa guida di avvio ti mostra come richiedere la creazione di un'Appliance e come registrare una nuova sessione e connetterti a essa. +Questa guida introduttiva illustra come richiedere la creazione di un'Appliance e come registrare una nuova sessione e connettersi ad essa. ## Prerequisiti -1. Aver sottoscritto l'offerta Cloud Temple (sottoscrizione Appliance Bastion). -2. Gli apparati da gestire devono essere accessibili dal network in cui è distribuita l'Appliance Bastion. -3. Disporre dei diritti sul modulo Bastion. -4. Nel caso di distribuzione dell'Appliance on-premise, i flussi corrispondenti devono essere aperti. +1. Avere sottoscritto il prodotto Cloud Temple (sottoscrizione Appliance Bastion). +2. I dispositivi da amministrare devono essere accessibili dalla rete in cui è stata distribuita l'Appliance Bastion. +3. Avere i permessi sul modulo Bastion. +4. Nel caso di distribuzione on-premise dell'Appliance, i flussi corrispondenti devono essere aperti. -## I flussi necessari per il funzionamento dell'appliance Bastion +## I flussi necessari per il funzionamento del prodotto Bastion -Sono necessari diversi flussi per il corretto funzionamento dell'appliance Bastion. +Diversi flussi sono necessari per il corretto funzionamento dell'Appliance Bastion. -### Gateway bastion +### Il gateway bastione -| Source | Destination | Protocollo | -|--------------------------|---------------------------------------------|------------| -| Appliance bastion client | 91.223.207.71 (botg.shiva.cloud-temple.com) | UDP/4242 | +| Sorgente | Destinazione | Protocollo | +|----------------------------|----------------------------------------------|------------| +| Appliance bastione client | 91.223.207.71 (botg.shiva.cloud-temple.com) | UDP/4242 | -### RDP Administration Flow +### Flusso di amministrazione RDP -| Source | Destination | Protocol | -|--------------------------|-----------------------------|----------| -| Client bastion appliance | Instances to administer | TCP/3389 | +| Origine | Destinazione | Protocollo | +|--------------------------|-----------------------------|------------| +| Appliance bastion client | Le istanze da amministrare | TCP/3389 | -### SSH Administration Flow +### Flusso di amministrazione SSH -| Source | Destination | Protocol | -|--------------------------|-----------------------------|----------| -| Client bastion appliance | Instances to administer | TCP/22 | +| Sorgente | Destinazione | Protocollo | +|----------------------------|------------------------------|------------| +| Appliance bastion client | Le istanze da amministrare | TCP/22 | ## Richiedere la creazione di un'Appliance -Prima di poter distribuire un'Appliance, è necessario richiedere una sottoscrizione a un'Appliance tramite una richiesta al supporto. -Il supporto è accessibile dalla Console tramite l'icona del salvagente nella barra in alto a destra della finestra. +Prima di poter distribuire un'Appliance, è necessario presentare una richiesta di sottoscrizione per un'Appliance tramite una richiesta al supporto. +Il supporto è accessibile nella Console tramite l'icona a forma di salvagente nella barra in alto a destra della finestra. ## Registrare un dispositivo -Per accedere regolarmente a un dispositivo da gestire, è più conveniente creare una sessione, che richiederà solo il tuo nome utente e la tua password a ogni connessione. +Per accedere regolarmente a un dispositivo da amministrare, è più opportuno creare una sessione, che richiederà solo il nome utente e la password ad ogni connessione. -Per fare ciò, vai alla scheda « Dispositivi » nel menu « Bastion», quindi fai clic sul pulsante « Nuovo dispositivo ». +Per farlo, vai alla scheda « Dispositivi » del menu « Bastion », quindi fai clic sul pulsante « Nuovo dispositivo ». -Compila quindi le informazioni necessarie per la creazione del tuo dispositivo: +Compila quindi le informazioni necessarie per la creazione del tuo dispositivo : - - Nome del dispositivo; - - Descrizione; - - Appliance associata; - - Tipo di protocollo (SSH o RDP); - - Indirizzo IP dell'host; - - Configurazione del tastierino. + - Nome del dispositivo ; + - Descrizione ; + - Appliance associata ; + - Tipo di protocollo (SSH o RDP) ; + - Indirizzo IP dell'host ; + - Configurazione della tastiera. -Dovrebbe apparire una notifica in alto a destra della pagina che indica la creazione del dispositivo. La sessione verrà quindi aggiunta all'elenco dei tuoi dispositivi. +Dovrebbe apparire una notifica che conferma la creazione del dispositivo in alto a destra della pagina. La sessione viene quindi aggiunta all'elenco dei tuoi dispositivi. -Per creare un nuovo dispositivo, puoi anche passare alla scheda « Appliance » e fare clic sull'azione della barra dell'Appliance a cui desideri associare un dispositivo. +Per creare un nuovo dispositivo, puoi anche passare alla scheda « Appliances » facendo clic sulla barra delle azioni dell'Appliance a cui desideri associare un dispositivo. ## Connettersi a un dispositivo -Recati nell’opzione « Dispositivi » nell’area « Bastione ». Clicca sull’area delle azioni del dispositivo che desideri aprire e premi il pulsante « Apri ». +Vai alla scheda « Dispositivi » della scheda « Bastione ». Fai clic sulla barra delle azioni del dispositivo che desideri aprire e clicca sul pulsante « Apri ». -Ad ogni connessione al dispositivo, è necessario inserire soltanto le proprie credenziali di autenticazione. +Ad ogni connessione al dispositivo, è necessario inserire solo le proprie informazioni di autenticazione. -Dopo aver inserito le proprie credenziali, verrà visualizzata una notifica che conferma l’inizio della connessione al dispositivo e si aprirà la console verso la tua macchina virtuale. +Dopo aver immesso le credenziali, viene visualizzata una notifica che conferma l'avvio della connessione al dispositivo e si apre la console verso la tua macchina virtuale. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/bastion/tutorials.md b/i18n/it/docusaurus-plugin-content-docs/current/bastion/tutorials.md index ba2f66de..6cb3efc5 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/bastion/tutorials.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/bastion/tutorials.md @@ -18,97 +18,97 @@ Questi tutorial ti aiutano a distribuire e gestire un Bastion Cloud Temple dalla ## Prerequisiti -1. Aver sottoscritto l'offerta Cloud Temple (sottoscrizione Appliance Bastion). -2. Gli equipaggiamenti da gestire devono essere accessibili dal network in cui è distribuita l'Appliance Bastion. -3. Disporre dei diritti sul modulo Bastion. -4. Nel caso di distribuzione dell'Appliance on-premise, i flussi corrispondenti devono essere aperti. +1. Avere sottoscritto il prodotto Cloud Temple (souscription Appliance Bastion). +2. Le apparecchiature da amministrare devono essere accessibili dalla rete in cui è distribuita l'Appliance Bastion. +3. Avere le autorizzazioni sul modulo Bastion. +4. Nel caso di un'installazione on-premise dell'Appliance, i flussi corrispondenti devono essere aperti. ## Interfaccia -Dopo esserti collegato al portale web Console, vai nella scheda "Bastion" nel menu a sinistra. +Una volta connessi al portale web Console, accedere alla scheda "Bastion" nel menu a sinistra. -La scheda "Dispositivi" ti permette di visualizzare l'elenco dei tuoi dispositivi. Un dispositivo corrisponde a una configurazione di connessione tramite un'Appliance Bastion. Per ogni dispositivo, sono indicati il nome, i tag, la descrizione, l'Appliance associata, il tipo di connessione (SSH o RDP), l'IP dell'host e infine la configurazione della tastiera. +La scheda « Dispositivi » consente di visualizzare l'elenco dei propri dispositivi. Un dispositivo corrisponde a una configurazione di connessione tramite un'Appliance Bastion. Per ogni dispositivo sono indicati il nome, i tag, la descrizione, l'Appliance associata, il tipo di connessione (SSH o RDP), l'IP dell'host e, infine, la configurazione della tastiera. -Puoi filtrare l'elenco dei tuoi dispositivi in base ai tag assegnati e un motore di ricerca ti permette di cercare una sessione in base al nome. +È possibile filtrare l'elenco dei dispositivi in base ai tag assegnati e un motore di ricerca consente di cercare una sessione tramite il suo nome. -La scheda "Appliances" ti fornisce l'elenco delle tue Appliances Bastion. Per ogni appliance, sono indicati il nome e la descrizione. +La scheda « Appliances » fornisce l'elenco delle proprie Appliance Bastion. Per ogni Appliance sono indicati il nome e la descrizione. -Un motore di ricerca è disponibile per consentirti di cercare un'appliance in base al nome. +È disponibile un motore di ricerca per consentire di cercare un'Appliance tramite il suo nome. -## Deploy an Appliance +## Distribuire un'Appliance -Before deploying an Appliance, you must submit a subscription request for an Appliance via a support request. +Prima di poter distribuire un'Appliance, è necessario presentare una richiesta di sottoscrizione per un'Appliance tramite una richiesta al supporto. -## Aprire un flusso verso un dispositivo +## Aprire una connessione verso un dispositivo -Nella scheda « Appliances », fare clic sulla barra delle azioni dell'Appliance che si desidera aprire. Successivamente, fare clic sul pulsante « Apri ». +Nella scheda « Appliance », fai clic sulla barra delle azioni dell'Appliance che desideri aprire. Fai quindi clic sul pulsante « Apri ». -Compilare quindi le informazioni necessarie per la connessione: +Compila quindi le informazioni necessarie per la connessione: - Scelta del protocollo (SSH o RDP); - - Indirizzo IP dell'host da gestire; + - Indirizzo IP dell'host da amministrare; - Credenziali di accesso; - Configurazione della tastiera. -Fare quindi clic su « Connetti » per aprire l'Appliance. Si aprirà quindi la console della macchina virtuale da gestire. +Fai quindi clic su « Connetti » per aprire l'Appliance. La console della macchina virtuale da amministrare si aprirà. ## Registrare un dispositivo -Per accedere regolarmente a un dispositivo da gestire, è più conveniente creare una configurazione del dispositivo, che richiederà solo il tuo nome utente e la tua password a ogni connessione. +Per accedere regolarmente a un dispositivo da amministrare, è più opportuno creare una configurazione del dispositivo, che richiederà solo il nome utente e la password ad ogni connessione. -Per fare ciò, vai alla scheda « Dispositivi » del menu « Bastion», quindi fai clic sul pulsante « Nuovo dispositivo ». +Per farlo, andare nella scheda « Dispositivi » del menu « Bastion », quindi fare clic sul pulsante « Nuovo dispositivo ». -Compila quindi le informazioni necessarie per la creazione del tuo dispositivo: +Compilare quindi le informazioni necessarie per la creazione del dispositivo: - - Nome del dispositivo; - - Descrizione; - - Appliance associata; - - Tipo di protocollo (SSH o RDP); - - Indirizzo IP dell'host; - - Lingua del tastierino. + - Nome del dispositivo ; + - Descrizione ; + - Appliance associata ; + - Tipo di protocollo (SSH o RDP) ; + - Indirizzo IP dell'host ; + - Lingua della tastiera. -Dovrebbe apparire una notifica in alto a destra della pagina che indica la creazione della tua configurazione del dispositivo. La configurazione verrà quindi aggiunta all'elenco dei tuoi dispositivi. +Dovrebbe apparire una notifica che indica la creazione della configurazione del dispositivo in alto a destra nella pagina. La configurazione viene quindi aggiunta all'elenco dei dispositivi. -Per creare una nuova connessione, puoi anche passare alla scheda « Appliance » e fare clic sulla barra delle azioni dell'Appliance a cui desideri associare una configurazione del dispositivo. +Per creare una nuova connessione, è possibile anche accedere alla scheda « Appliances » facendo clic sulla barra delle azioni dell'Appliance a cui si desidera associare una configurazione del dispositivo. ## Connettersi a un dispositivo -Recati nell'angolo « Dispositivi » dell'angolo « Bastione ». Clicca sulla barra delle azioni del dispositivo che desideri aprire e premi il pulsante « Apri ». +Vai alla scheda « Dispositivi » della scheda « Bastione ». Clicca sulla barra delle azioni del dispositivo che desideri aprire e clicca sul pulsante « Apri ». -Ad ogni connessione al dispositivo, è necessario inserire soltanto le proprie credenziali di autenticazione. +Ogni volta che ti connetti al dispositivo, devi inserire solo le tue informazioni di autenticazione. -Dopo aver inserito le proprie credenziali, viene visualizzata una notifica che conferma l'avvio della sessione e si apre la console verso la tua macchina virtuale. +Dopo aver inserito le tue credenziali, appare una notifica che conferma l'avvio della sessione e si apre la console verso la tua macchina virtuale. -## Modificare una configurazione dell'equipaggiamento +## Modificare la configurazione del dispositivo -Recati nella scheda « Equipaggiamento » della sezione « Bastion », fai clic sulla barra delle azioni dell'equipaggiamento che desideri modificare e premi il pulsante « Modifica ». +Vai alla scheda « Dispositivi » della sezione « Bastion », fai clic sulla barra delle azioni del dispositivo che desideri modificare e fai clic sul pulsante « Modifica ». -Puoi quindi modificare il nome dell'equipaggiamento, la descrizione, l'Appliance associata, il protocollo (SSH o RDP), l'indirizzo IP dell'host o la lingua del tastierino. +Successivamente, puoi modificare il nome del dispositivo, la descrizione, l'Appliance associata, il protocollo (SSH o RDP), l'indirizzo IP dell'host o la lingua della tastiera. -## Eliminare una configurazione dell'equipaggiamento +## Eliminare una configurazione del dispositivo -Vai alla scheda « Equipaggiamenti » nella sezione « Bastion », fai clic sulla barra delle azioni dell'equipaggiamento che desideri eliminare e premi il pulsante « Elimina ». +Vai alla scheda « Dispositivi » della sezione « Bastion », clicca sulla barra delle azioni del dispositivo che desideri eliminare e clicca sul pulsante « Elimina ». - + \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/changelog.md b/i18n/it/docusaurus-plugin-content-docs/current/changelog.md index 505875d3..5c5e5910 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/changelog.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/changelog.md @@ -1,165 +1,178 @@ --- -title: Registro delle Modifiche +title: Tracciamento delle Modifiche sidebar_position: 2 --- -# Registro delle Modifiche +# Tracciamento delle Modifiche -### 17 aprile 2026: VM Instances — Documentazione illustrata e tutorial +### 4 maggio 2026 : Patch di sicurezza — immagine Docker (CVE Alpine) -- **VM Instances — Aggiornamento documentazione**: Revisione completa e illustrazione della documentazione VM Instances. La guida introduttiva (`quickstart.md`) copre ora l'intero percorso utente illustrato: accesso alla sezione, lista delle VM, procedura guidata di creazione in 9 passaggi (famiglia di istanza, zona di disponibilità, template OS, flavor, nome/backup, Cloud Init, dischi, rete, riepilogo) e gestione di 4 schede (Informazioni, Dischi, Rete, Snapshot). -- **VM Instances — Tutorial**: Creazione di 3 tutorial dedicati in una cartella `tutorials/`: (1) **Creare la prima VM** (procedura guidata completa illustrata + Cloud Init + disco aggiuntivo), (2) **Gestire i dischi** (aggiungere un disco dalla console + partizionamento Linux), (3) **Creare e gestire gli snapshot** (creare, ripristinare, eliminare + buone pratiche e confronto snapshot/backup). La navigazione laterale viene aggiornata con 3 voci individuali nella categoria Tutorial. +- **Sicurezza (Docker)** : Aggiunta di `apk upgrade --no-cache` nello stage finale `nginx:stable-alpine` dei Dockerfile di produzione (`Dockerfile` e `Dockerfile.prebuilt`). Questo aggiornamento corregge tutte le CVE Critical e High rilevate da Harbor/Trivy sull'immagine `3.24.3`, relative ai pacchetti Alpine congelati: `libcrypto3`, `libssl3`, `libxml2`, `libxslt`, `libexpat`, `libpng`, `zlib`, `c-ares`, `musl`, `xz-libs`, `busybox`, `curl`. Il prossimo build produrrà un'immagine con tutti questi pacchetti alla loro ultima versione corretta. -### 17 aprile 2026: Traduzione di Private Backbone e armonizzazione terminologica +### 30 Aprile 2026 : Specifiche sulle prestazioni di storage -- **Private Backbone**: Traduzione completa della documentazione del servizio Private Backbone in inglese, tedesco, spagnolo e italiano. -- **Terminologia**: Armonizzazione del vocabolario nella documentazione francese — sostituzione sistematica di "offre" e "service" con "produit" per allinearsi alla terminologia commerciale di Cloud Temple. +- **Storage (IaaS VMware, OpenSource, Bare Metal)** : Aggiunta di limiti assoluti di IOPS e di larghezza di banda massima per tutte le classi di storage. Queste informazioni consentono di dimensionare meglio gli ambienti in base alle esigenze di prestazioni. -### 16 aprile 2026: Riorganizzazione della navigazione, documenti contrattuali e aggiornamenti +### 24 Aprile 2026 : Arricchimento della documentazione di backup IaaS OpenSource -- **Navigazione — Compute**: VM Instances (preview), IaaS OpenSource e IaaS VMware raggruppati sotto un'unica categoria **Compute** nella navigazione (PR #277). -- **Navigazione — Network**: VPC (preview) e Private Backbone raggruppati sotto un'unica categoria **Network** nella navigazione. -- **Documenti contrattuali**: Ristrutturazione completa della documentazione contrattuale — creazione di una pagina hub `/contracts` (condizioni generali, condizioni particolari, accordi di servizio SecNumCloud, SLA VM Instances) e di una pagina hub `/shared-responsibility` (matrici RACI per servizio: IaaS, S3, PaaS, Kubernetes, LLMaaS, Rete). Il menu laterale contrattuale è sostituito da una colonna dedicata **Contractual** nel footer. Traduzioni disponibili in EN/DE/ES/IT. -- **VM Instances**: Aggiornamento del contratto sul livello di servizio (SLA) dal 99,9 % al 99,95 %. -- **IaaS OpenSource**: Nota sul periodo massimo di conservazione dei backup (24 mesi massimo, migrazione a Glacier prevista per Q1 2027). +- **IaaS OpenSource (Backup)** : Arricchimento della sezione backup con precisazioni sull'architettura tecnica (backup incrementale, impatto del Thick provisioning sullo storage), la sicurezza (crittografia AES-256, isolamento di rete), il monitoraggio e i vincoli di pianificazione. Traduzioni disponibili EN/DE/ES/IT. -### 15 aprile 2026: Nuova documentazione VM instances (Cloud Public) +### 20 Aprile 2026 : Aggiornamento del dimensionamento Database gestito -- **VM instances**: Pubblicazione della documentazione iniziale del servizio VM instances (in anteprima), la nuova offerta di macchine virtuali condivise di Cloud Temple. La documentazione copre la panoramica del servizio, i concetti tecnici (classi di servizio Development/General Purpose/Performance, flavor predefiniti e personalizzati, storage, rete VPC, backup) e una guida introduttiva completa. Il servizio è organizzato sotto una nuova categoria **Cloud Public** nella navigazione. +- **MariaDB & PostgreSQL gestiti** : Aggiornamento dei modelli di dimensionamento massimi disponibili per i servizi di database gestiti. +### 17 Aprile 2026 : Istanze VM — documentazione illustrata, tutorial e traduzioni -### 15 aprile 2026: Miglioramento della documentazione IaaS VMware — metriche del cluster +- **Istanze VM — Arricchimento documentale** : Rifacimento completo e illustrazione della documentazione Istanze VM. La guida di avvio rapido (`quickstart.md`) copre ora l'intero percorso utente illustrato: accesso alla sezione, elenco delle VM, procedura guidata di creazione in 9 passaggi (famiglia di istanze, zona di disponibilità, template OS, modello, nome/backup, Cloud Init, dischi, rete, riepilogo) e gestione delle 4 schede (Informazioni, Dischi, Rete, Snapshot). +- **Istanze VM — Tutorial** : Creazione di 3 tutorial dedicati in una cartella `tutorials/`: (1) **Creare la propria prima VM** (procedura guidata completa illustrata + Cloud Init + disco aggiuntivo), (2) **Gestire i dischi** (aggiunta dalla console + partizionamento Linux), (3) **Creare e gestire gli snapshot** (creazione, ripristino, eliminazione + best practice e confronto snapshot/backup). La barra di navigazione laterale viene aggiornata con 3 voci individuali nella categoria Tutorial. -- **IaaS VMware**: Aggiunta documentazione dettagliata sulle metriche visualizzate nella vista di un cluster VMware dalla Console Cloud Temple. Copre i tre grafici di memoria del cluster: **Memoria allocata** (quantità totale di memoria assegnata alle VM), **Memoria consumata** (memoria fisica attivamente utilizzata dalle VM) e **Allocazione nel caso peggiore** (proiezione del consumo massimo simultaneo), con una descrizione precisa di ciò che rappresenta ogni indicatore per anticipare le esigenze di risorse. +### 17 Aprile 2026 : Documenti contrattuali, traduzioni e armonizzazione terminologica -### 15 aprile 2026: Documentazione Managed MariaDB, Managed PostgreSQL e correzioni multilingua +- **Documenti contrattuali — Ristrutturazione** : La pagina `contracts.md` è riorganizzata con la gerarchia dei documenti contrattuali in alto nella pagina, inclusa la lista di priorità dei 6 documenti (CGVU, Convenzione SecNumCloud, Convenzione specifica ¹, PAS ², CPU, DPA) e un riquadro di precisazioni contrattuali. -- **Managed MariaDB**: Prima pubblicazione della documentazione del servizio Managed MariaDB (anteprima): panoramica del servizio, concetti tecnici (architetture StandAlone e Distributed), guida rapida. -- **Managed PostgreSQL**: Prima pubblicazione della documentazione del servizio Managed PostgreSQL (anteprima): panoramica del servizio, concetti tecnici, guida rapida. -- **Correzioni multilingua (immagini)**: Correzione dei riferimenti alle immagini nelle traduzioni delle sezioni Managed Kubernetes e Managed MariaDB per tutte le lingue (EN, DE, ES, IT) — conversione dei percorsi relativi `./images/` in percorsi assoluti `@site/docs/...` per una corretta visualizzazione in tutte le lingue. -- **Correzione link interrotti**: Risoluzione di diversi link interrotti: riferimenti alle licenze LLMaaS, link alla console nel tutorial rclone (OSS), link IAM nella documentazione di rete (EN), link relativi nella sezione Terraform (EN). +### 16 aprile 2026 : Riprogettazione della navigazione, documenti contrattuali e aggiornamenti -### 15 aprile 2026: Nuovo modulo Gestore dei costi +- **Navigazione — Compute** : Raggruppamento di VM Instances (preview), IaaS OpenSource e IaaS VMware in un'unica categoria **Compute** nella navigazione (PR #277). +- **Navigazione — Network** : Raggruppamento di VPC (preview) e Private Backbone in un'unica categoria **Network** nella navigazione. +- **Documenti contrattuali** : Ristrutturazione completa della documentazione contrattuale — creazione di una pagina hub `/contracts` (condizioni generali, condizioni particolari, convenzioni di servizio SecNumCloud, SLA VM instances) e di una pagina hub `/shared-responsibility` (matrici RACI per servizio: IaaS, S3, PaaS, Kubernetes, LLMaaS, Rete). Il menu laterale contrattuale è sostituito da una colonna dedicata **Contrattuale** nel footer. Traduzioni disponibili EN/DE/ES/IT. +- **VM Instances** : Aggiornamento dell'impegno di livello di servizio (SLA) dal 99,9 % al 99,95 %. +- **IaaS OpenSource** : Aggiunta di una nota sulla durata massima di conservazione dei backup (massimo 24 mesi, migrazione verso Glacier prevista nel T1 2027). -- **Console (Gestore dei costi)**: Aggiunta la documentazione completa del nuovo modulo di monitoraggio del consumo accessibile dalla Console Cloud Temple. Copre il dashboard, il consumo globale (con proiezione di fine mese), la ripartizione per prodotto e servizio, i dettagli di fatturazione riga per riga e il catalogo dei prezzi. +### 15 Aprile 2026 : Nuova documentazione VM instances (Cloud Public) -### 26 marzo 2026: Aggiornamento dell'elenco dei sub-responsabili (DPA) +- **VM instances** : Pubblicazione della documentazione iniziale del servizio VM instances (in anteprima), nuova offerta di macchine virtuali condivise di Cloud Temple. La documentazione copre la panoramica del servizio, i concetti tecnici (classi di servizio Development/General Purpose/Performance, modelli predefiniti e personalizzati, storage, rete VPC, backup), nonché una guida introduttiva completa. Il servizio è organizzato in una nuova categoria **Cloud Public** nella navigazione. -- **Contrattuale**: Aggiornamento dell'Accordo sul Trattamento dei Dati (DPA) - revisione dell'elenco dei sub-responsabili (rimozione di Microsoft Azure e Amazon Web Services, modifica dell'attività per Iron Mountain) e aggiunta della data di autorizzazione. Propagazione delle modifiche in inglese, tedesco, spagnolo e italiano. +### 15 Aprile 2026 : Miglioramento della documentazione IaaS VMware — metriche del cluster +- **IaaS VMware** : Aggiunta di una documentazione dettagliata sulle metriche visualizzate nella vista di un cluster VMware dalla Console Cloud Temple. Copre i tre grafici della memoria del cluster: **Memoria allocata** (quantità totale allocata alle VM), **Memoria consumata** (memoria fisica effettivamente utilizzata dalle VM) e **Allocazione nel caso peggiore** (proiezione del consumo massimo simultaneo), con la descrizione precisa di ciò che ciascun indicatore rappresenta per anticipare le esigenze di risorse. -### 19 marzo 2026: Miglioramenti alla documentazione IaaS e Terraform +### 15 Aprile 2026 : Documentazione Managed MariaDB, Managed PostgreSQL e correzioni multilingue -- **IaaS OpenSource**: Aggiunta una guida completa per la creazione di una macchina virtuale. Il tutorial copre i tre metodi di distribuzione disponibili (modello, importazione XVA, Marketplace) con istruzioni dettagliate e raccomandazioni sulle migliori pratiche. -- **IaaS VMware**: Aggiunta una pagina indice che elenca tutti i tutorial disponibili per facilitare la navigazione e la scoperta delle guide. -- **Terraform**: Nuova sezione che spiega come ricevere automaticamente le notifiche delle nuove versioni del Provider Terraform tramite GitHub. +- **Managed MariaDB** : Pubblicazione della documentazione iniziale del servizio Managed MariaDB (en preview) : presentazione del servizio, concetti tecnici (architectures StandAlone et Distributed), guida introduttiva. +- **Managed PostgreSQL** : Pubblicazione della documentazione iniziale del servizio Managed PostgreSQL (en preview) : presentazione del servizio, concetti tecnici, guida introduttiva. +- **Corrections multilingues (images)** : Correzione dei riferimenti alle immagini nelle traduzioni delle sezioni Managed Kubernetes e Managed MariaDB per tutte le lingue (EN, DE, ES, IT) — conversione dei percorsi relativi `./images/` in percorsi assoluti `@site/docs/...` per garantire un rendering corretto in tutte le lingue. +- **Corrections liens brisés** : Risoluzione di diversi link interrotti nella documentazione : riferimenti alle licenze LLMaaS, link alla console nel tutorial rclone (OSS), link IAM nella documentazione di rete (EN), link relativi nella sezione Terraform (EN). -### 19 marzo 2026: Aggiornamento DPA e conformità HDS +### 15 Aprile 2026 : Nuovo modulo Gestore dei costi -- **Contractuel** : Mise à jour de l'Annexe Contractuelle sur les Données à Caractère Personnel (DPA) vers la version 1.0. Intégration des dernières exigences de la certification HDS (Hébergeur de Données de Santé) et actualisation de la liste des sous-traitants autorisés. Traduction complète en anglais, allemand, espagnol et italien. +- **Console (Gestore dei costi)** : Aggiunta della documentazione completa del nuovo modulo di monitoraggio dei consumi accessibile dalla Console Cloud Temple. Include la dashboard, il consumo globale (con proiezione a fine mese), la ripartizione per prodotto e per servizio, i dettagli di fatturazione riga per riga e il catalogo dei prezzi. -### 21 Février 2026 : Amélioration du référencement SEO +### 26 Marzo 2026 : Aggiornamento dell'elenco dei subappaltatori (DPA) -- **SEO** : Correction de l'URL de production (`https://docs.cloud-temple.com`) et du chemin de base (`/`) dans la configuration Docusaurus, garantissant des URLs canoniques correctes pour l'indexation Google. -- **Sitemap** : Activation de la génération automatique du sitemap (`/sitemap.xml`) pour améliorer le crawling et l'indexation par les moteurs de recherche. -- **Robots.txt** : Ajout d'un fichier `robots.txt` autorisant le crawling complet du site et pointant vers le sitemap. +- **Contrattuale** : Aggiornamento dell'Allegato Contrattuale sui Dati Personali (DPA) - revisione dell'elenco dei subappaltatori (retrait de Microsoft Azure et Amazon Web Services, modification de l'activité pour Iron Mountain) e aggiunta della data di autorizzazione. -### 21 Février 2026 : Concepts avancés réseau et améliorations multilingues +### 19 marzo 2026 : Miglioramenti alla documentazione IaaS e Terraform -- **Réseau (Internet)** : Nouvelle page de **concepts avancés** documentant les communautés BGP et le contrôle de la Local Preference sur le backbone Internet Cloud Temple (AS33930). Inclut un guide de configuration avec exemple Bird. -- **LLMaaS** : Mise à jour du catalogue de modèles et ajout du cycle de vie des modèles. Ajout des modèles LTS (Long Term Support). -- **Console (Sécurité)** : Amélioration de la qualité des traductions des alertes de sécurité (anglais, allemand, espagnol, italien). -- **Multilingue** : Traduction de la nouvelle page concepts avancés réseau vers les 4 langues (en, de, es, it) et amélioration globale de la qualité des traductions existantes. -- **IaaS Bare Metal** : Ajout de précisions sur le volume BFS (Boot from SAN) dans le guide de démarrage : le Volume 1 est dédié à l'installation de l'OS, non partageable au sein d'une même AZ, avec recommandation de stocker les données sur un volume LUN additionnel. -- **Stockage Objet (OSS)** : Ajout d'une page **FAQ** couvrant l'accès S3, les whitelists IP, les liens pré-signés et les scénarios d'usage recommandés. +- **IaaS OpenSource** : Aggiunta di una guida completa per creare una macchina virtuale. Il tutorial copre i tre metodi di distribuzione disponibili (modello, importazione XVA, Marketplace) con istruzioni passo passo e raccomandazioni sulle migliori pratiche. +- **IaaS VMware** : Aggiunta di una pagina che raccoglie tutti i tutorial disponibili per facilitare la navigazione e la scoperta delle guide. +- **Terraform** : Nuova sezione che spiega come ricevere automaticamente le notifiche delle nuove versioni del Provider Terraform tramite GitHub. -### 10 Février 2026 : Mise à jour des tarifs LLMaaS +### 19 Marzo 2026 : Aggiornamento DPA e conformità HDS -- **LLMaaS** : Mise à jour globale des tarifs de l'API (Input : 1,9€/M, Output : 8€/M, Raisonneur : 8€/M) dans l'ensemble de la documentation technique et commerciale. +- **Contrattuale** : Aggiornamento dell'Allegato Contrattuale sui Dati Personali (DPA) alla versione 1.0. Integrazione degli ultimi requisiti della certificazione HDS (Hosting di Dati Sanitari) e aggiornamento dell'elenco dei sub-fornitori autorizzati. Traduzione completa in inglese, tedesco, spagnolo e italiano. -### 5 Février 2026 : Précisions sur les engagements de service (SLA) +### 21 Febbraio 2026 : Miglioramento del SEO -- **Managed Kubernetes** : Mise à jour complète et finalisation des engagements de niveau de service (SLA) pour l'offre Managed Kubernetes. +- **SEO** : Correzione dell'URL di produzione (`https://docs.cloud-temple.com`) e del percorso di base (`/`) nella configurazione di Docusaurus, garantendo URL canonici corretti per l'indicizzazione su Google. +- **Sitemap** : Abilitazione della generazione automatica della sitemap (`/sitemap.xml`) per migliorare il crawling e l'indicizzazione da parte dei motori di ricerca. +- **Robots.txt** : Aggiunta di un file `robots.txt` che consente il crawling completo del sito e punta alla sitemap. -### 21 Janvier 2026 : Améliorations et traductions de sécurité +### 21 Febbraio 2026 : Concetti di rete avanzati e miglioramenti multilingue -- **Console Management** : Mise à jour des traductions internationales (anglais, allemand, espagnol, italien) pour les alertes de sécurité dans la console de gestion. +- **Rete (Internet)** : Nuova pagina di **concetti avanzati** che documenta le comunità BGP e il controllo della Local Preference sul backbone Internet Cloud Temple (AS33930). Include una guida alla configurazione con esempio Bird. +- **LLMaaS** : Aggiornamento del catalogo dei modelli e aggiunta del ciclo di vita dei modelli. Aggiunta dei modelli LTS (Long Term Support). +- **Console (Sicurezza)** : Miglioramento della qualità delle traduzioni degli avvisi di sicurezza (inglese, tedesco, spagnolo, italiano). +- **Multilingue** : Traduzione della nuova pagina concetti avanzati di rete nelle 4 lingue (en, de, es, it) e miglioramento globale della qualità delle traduzioni esistenti. +- **IaaS Bare Metal** : Aggiunta di maggiori dettagli sul volume BFS (Boot from SAN) nella guida di avvio : il Volume 1 è dedicato all'installazione del SO, non condivisibile all'interno della stessa AZ, con raccomandazione di memorizzare i dati su un volume LUN aggiuntivo. +- **Storage Oggetti (OSS)** : Aggiunta di una pagina **FAQ** che copre l'accesso S3, le whitelist IP, i link pre-firmati e gli scenari di utilizzo consigliati. -### 19 Janvier 2026 : Extension Managed Kubernetes et VPC +### 10 Febbraio 2026 : Aggiornamento delle tariffe LLMaaS -- **Managed Kubernetes** : Ajout du support pour les nœuds **Bare Metal** et les **GPUs** (NVIDIA). -- **Managed Kubernetes** : Nouveau tutoriel sur l'utilisation des GPUs dans un cluster Kubernetes. -- **Managed Kubernetes** : Remplacement de KubeCost par un guide plus récent sur **OpenCost**. -- **Network (VPC)** : Documentation complète du service Virtual Private Cloud (VPC), incluant les concepts de haute disponibilité (HA), les guides de démarrage et les tutoriels. -- **Multilingue** : Traduction intégrale du service VPC et des nouveaux contenus Kubernetes vers l'anglais, l'allemand, l'espagnol et l'italien. +- **LLMaaS** : Aggiornamento globale delle tariffe dell'API (Input : 1,9€/M, Output : 8€/M, Raisonneur : 8€/M) in tutta la documentazione tecnica e commerciale. -### 15 Décembre 2025 : Stabilisation et corrections multilingues +### 5 Febbraio 2026 : Chiarimenti sugli impegni di servizio (SLA) -- **Multilingue (Terraform, LLMaaS, Harbor)** : Correction majeure des traductions en Espagnol, Italien et Allemand. Résolution des problèmes de syntaxe MDX (blocs de code vides, balises non échappées) qui empêchaient la compilation du site. -- **Multilingue (Images)** : Rétablissement des chemins d'images corrects dans les versions italienne et allemande pour les sections Bastion et IaaS VMware. -- **Build** : Validation du déploiement pour l'ensemble des 5 langues supportées. +- **Managed Kubernetes** : Aggiornamento completo e finalizzazione degli impegni di livello di servizio (SLA) per l'offerta Managed Kubernetes. -### 11 Décembre 2025 : Nouveautés Managed Kubernetes +### 21 gennaio 2026 : Miglioramenti e traduzioni di sicurezza -- **Managed Kubernetes** : Ajout d'un nouveau tutoriel sur l'utilisation de **Gateway API** pour la gestion avancée du trafic. -- **Managed Kubernetes** : Mise à jour de la documentation sur la gestion des quotas (Ceph) et optimisation des outils de gestion des coûts (OpenCost). +- **Console Management** : Aggiornamento delle traduzioni internazionali (inglese, tedesco, spagnolo, italiano) per gli avvisi di sicurezza nella console di gestione. -### 22 Novembre 2025 : Nouveautés LLMaaS et améliorations globales +### 19 Gennaio 2026 : Estensione Managed Kubernetes e VPC -- **LLMaaS (OCR)** : Ajout d'une documentation complète pour **DeepSeek-OCR**, notre nouveau modèle spécialisé dans l'analyse de documents (PDF, images), capable d'extraire du texte structuré, des tableaux et des formules mathématiques. -- **Multilingue** : Résolution de problèmes d'accessibilité sur les versions italienne et allemande de la documentation. -- **Qualité** : Correction de l'affichage des blocs de code dans les tutoriels LLMaaS et rétablissement des images manquantes dans le guide de démarrage IaaS VMware (version italienne). +- **Managed Kubernetes** : Aggiunta del supporto per i nodi **Bare Metal** e le **GPU** (NVIDIA). +- **Managed Kubernetes** : Nuova guida sull'utilizzo delle GPU in un cluster Kubernetes. +- **Managed Kubernetes** : Sostituzione di KubeCost con una guida più recente su **OpenCost**. +- **Network (VPC)** : Documentazione completa del servizio Virtual Private Cloud (VPC), inclusi i concetti di alta disponibilità (HA), le guide di avvio e i tutorial. +- **Multilingue** : Traduzione completa del servizio VPC e dei nuovi contenuti Kubernetes in inglese, tedesco, spagnolo e italiano. -### 20 Novembre 2025 : Mise à jour majeure PaaS OpenShift +### 15 Dicembre 2025 : Stabilizzazione e correzioni multilingue -- **PaaS OpenShift (PR #194)** : Refonte et mise à jour complète de la documentation OpenShift, incluant de nouvelles captures d'écran et une traduction intégrale en anglais, espagnol, allemand et italien pour accompagner notre expansion internationale. +- **Multilingue (Terraform, LLMaaS, Harbor)** : Correzione importante delle traduzioni in spagnolo, italiano e tedesco. Risoluzione dei problemi di sintassi MDX (blocchi di codice vuoti, tag non sfuggiti) che impedivano la compilazione del sito. +- **Multilingue (Immagini)** : Ripristino dei percorsi delle immagini corretti nelle versioni italiana e tedesca per le sezioni Bastion e IaaS VMware. +- **Build** : Validazione del deployment per tutte le 5 lingue supportate. -### 3 Novembre 2025 : Amélioration des tutoriels Kubernetes +### 11 Dicembre 2025: Novità Managed Kubernetes -- **Managed Kubernetes** : Ajout d'un nouveau tutoriel sur le déploiement continu avec **ArgoCD** et l'approche GitOps. -- **Managed Kubernetes** : Revue et améioration des tutoriels existants. Les guides sur le déploiement, le réseau, la gestion des permissions (Capsule) et la sauvegarde (Kasten) ont été enrichis pour mieux adresser les questions de sécurité, de gouvernance et de coût, en réponse aux attentes des profils RSSI et Acheteur. +- **Managed Kubernetes**: Aggiunta di un nuovo tutorial sull'utilizzo di **Gateway API** per la gestione avanzata del traffico. +- **Managed Kubernetes**: Aggiornamento della documentazione sulla gestione delle quote (Ceph) e ottimizzazione degli strumenti di gestione dei costi (OpenCost). -### 28 Octobre 2025 : Nouvelle documentation Managed Kubernetes et améliorations diverses +### 22 Novembre 2025 : Novità LLMaaS e miglioramenti globali -- **Managed Kubernetes (PR #193 & améliorations)**: Ajout d'une documentation complète pour le nouveau service Managed Kubernetes. La section inclut une presentazione del service, i concetti tecnici, un guide di démarrage, un primo tutoriel, e la matrice di responsabilités (RACI). Le contenu a été enrichi pour mieux répondre aux attentes des différents profils d'utilisateurs. -- **Stockage Objet (PR #190, #189)**: Ajout de deux nouveaux tutoriels pour le service de Stockage Objet : un sur la gestion des accès aux buckets S3 et un autre sur l'utilisation de Restic pour les sauvegardes. -- **Contractuel (PR #191)**: Correction et mise à jour du document "Data Processing Agreement" (DPA). +- **LLMaaS (OCR)** : Aggiunta di una documentazione completa per **DeepSeek-OCR**, il nostro nuovo modello specializzato nell'analisi dei documenti (PDF, immagini), in grado di estrarre testo strutturato, tabelle e formule matematiche. +- **Multilingue** : Risoluzione di problemi di accessibilità nelle versioni italiana e tedesca della documentazione. +- **Qualità** : Correzione della visualizzazione dei blocchi di codice nei tutorial LLMaaS e ripristino delle immagini mancanti nella guida di avvio IaaS VMware (versione italiana). -### 18 Octobre 2025 : Maintenance et nouvelles documentations +### 20 novembre 2025 : Aggiornamento maggiore PaaS OpenShift -- **LLMaaS** : Ajout d'une nouvelle question à la FAQ pour présenter la page de statut publique ([llmaas.status.cloud-temple.app](https://llmaas.status.cloud-temple.app/)), permettant de suivre en temps réel la disponibilité et les performances de chaque modèle. -- **Contractuel** : Mise à jour majeure du Data Processing Agreement (DPA v2) pour refléter les dernières exigences légales et de conformité. -- **Console** : Amélioration et clarification de la documentation concernant la gestion des commandes. -- **Marketplace** : Ajout d'un tutoriel détaillé sur la personnalisation des images de machines virtuelles (VM) pour créer des templates réutilisables. -- **LLMaaS** : Ajout d'un guide pour configurer l'extension VSCode CLINE afin d'utiliser les modèles de langage de Cloud Temple directement depuis l'éditeur. -- **Stockage Objet (OSS)** : Ajout de précisions sur la politique de cycle de vie (Lifecycle) pour la suppression des données. -- **Stockage Objet (OSS)** : Ajout d'un guide de dépannage pour les erreurs de checksum (`XAmzContentSHA256Mismatch`) avec AWS CLI et Terraform. -- **LLMaaS** : Mise à jour de la liste des modèles disponibles et retraduction de plus de 50 documents pour assurer la cohérence. +- **PaaS OpenShift (PR #194)** : Ristrutturazione e aggiornamento completo della documentazione OpenShift, che include nuovi screenshot e una traduzione integrale in inglese, spagnolo, tedesco e italiano per supportare la nostra espansione internazionale. -### 14 Août 2025 : Améliorations et corrections +### 3 Novembre 2025 : Miglioramento dei tutorial Kubernetes -- **LLMaaS** : Mise à jour et clarification des réponses de la FAQ pour mieux adresser les questions techniques et stratégiques. Ajout de la FAQ à la navigation. -- **Général** : Correction de several liens de navigation internes à travers la documentation pour une expérience plus fluide. +- **Managed Kubernetes** : Aggiunta di un nuovo tutorial sul deployment continuo con **ArgoCD** e l'approccio GitOps. +- **Managed Kubernetes** : Revisione e miglioramento dei tutorial esistenti. Le guide sul deployment, sulla rete, sulla gestione dei permessi (Capsule) e sul backup (Kasten) sono state arricchite per affrontare meglio le tematiche di sicurezza, governance e costi, in risposta alle aspettative dei profili CISO e Acquirente. -### Juillet 2025 : Nouveautés et mises à jour majeures +### 28 Ottobre 2025 : Nuova documentazione per Managed Kubernetes e miglioramenti vari -- **Stockage Objet (OSS)** : - - Refonte complète de la section tutoriels avec des guides dédiés pour des outils populaires : AWS CLI, Minio Client (`mc mirror`), Cloudberry Explorer, et le SDK Python Boto3. - - Ajout de précisions sur les concepts de comptes de stockage et le verrouillage d'objets (Object Lock). +- **Managed Kubernetes (PR #193 & améliorations)**: Aggiunta di una documentazione completa per il nuovo servizio Managed Kubernetes. La sezione include una presentazione del servizio, i concetti tecnici, una guida di avvio, un primo tutorial e la matrice di responsabilità (RACI). Il contenuto è stato arricchito per rispondere meglio alle aspettative dei diversi profili di utenti. +- **Archiviazione Oggetti (PR #190, #189)**: Aggiunta di due nuovi tutorial per il servizio di Archiviazione Oggetti: uno sulla gestione degli accessi ai bucket S3 e un altro sull'utilizzo di Restic per i backup. +- **Contrattuale (PR #191)**: Correzione e aggiornamento del documento "Data Processing Agreement" (DPA). + +### 18 Ottobre 2025 : Manutenzione e nuove documentazioni + +- **LLMaaS** : Aggiunta di una nuova domanda alla FAQ per presentare la pagina di stato pubblica ([llmaas.status.cloud-temple.app](https://llmaas.status.cloud-temple.app/)), che consente di monitorare in tempo reale la disponibilità e le prestazioni di ciascun modello. +- **Contrattuale** : Aggiornamento significativo del Data Processing Agreement (DPA v2) per riflettere gli ultimi requisiti legali e di conformità. +- **Console** : Miglioramento e chiarimento della documentazione relativa alla gestione degli ordini. +- **Marketplace** : Aggiunta di un tutorial dettagliato sulla personalizzazione delle immagini delle macchine virtuali (VM) per creare template riutilizzabili. +- **LLMaaS** : Aggiunta di una guida per configurare l'estensione VSCode CLINE per utilizzare i modelli linguistici di Cloud Temple direttamente dall'editor. +- **Archiviazione Oggetti (OSS)** : Aggiunta di precisazioni sulla politica del ciclo di vita (Lifecycle) per l'eliminazione dei dati. +- **Archiviazione Oggetti (OSS)** : Aggiunta di una guida alla risoluzione dei problemi per gli errori di checksum (`XAmzContentSHA256Mismatch`) con AWS CLI e Terraform. +- **LLMaaS** : Aggiornamento dell'elenco dei modelli disponibili e ritraduzione di oltre 50 documenti per garantire la coerenza. + +### 14 Agosto 2025 : Miglioramenti e correzioni + +- **LLMaaS** : Aggiornamento e chiarimento delle risposte della FAQ per rispondere meglio alle domande tecniche e strategiche. Aggiunta della FAQ alla navigazione. +- **Generale** : Correzione di diversi link di navigazione interni in tutta la documentazione per un'esperienza più fluida. + +### Luglio 2025 : Novità e aggiornamenti principali + +- **Archiviazione Oggetti (OSS)** : + - Rifacimento completo della sezione tutorial con guide dedicate per strumenti popolari : AWS CLI, Minio Client (`mc mirror`), Cloudberry Explorer e il SDK Python Boto3. + - Aggiunta di precisazioni sui concetti di account di archiviazione e blocco degli oggetti (Object Lock). - **IaaS OpenSource** : - - Ajout d'une documentation détaillée sur la gestion de la Haute Disponibilité (HA) pour les pools de ressources et les machines virtuelles. + - Aggiunta di una documentazione dettagliata sulla gestione dell'Alta Disponibilità (HA) per i pool di risorse e le macchine virtuali. - **Console** : - - Mise à jour de la page des alertes de sécurité avec les dernières vulnérabilités. -- **Réseau** : - - Ajout de nouvelles captures d'écran pour illustrer la configuration de la connectivité IPv6. - -### 29 Juin 2025 : finalisation de la documentation LLMaaS - -- Validation de la suite de tests complète. -- Correction et validation des pipelines RAG with FAISS et Qdrant. -- Enrichissement des tutoriels avec des explications techniques plus détaillées. -- Ajout d'une section sur la sécurité des prompts et le cycle de vie des modèles dans les concepts. -- Amélioration de la page d'explication du RAG avec schémas et détails sur les modèles d'embedding. -- Mise à jour de la documentation de l'API, du guide de démarrage et de la présentation du service. -- Ajout du princing pour l'endpoint Transcription Audio. -- Ajout du planning prévisionnel de cycle de vie des modeles. -- Ajout de la matrice de responsabilité pour l'offre LLMaaS. + - Aggiornamento della pagina degli avvisi di sicurezza con le ultime vulnerabilità. +- **Rete** : + - Aggiunta di nuovi screenshot per illustrare la configurazione della connettività IPv6. + +### 29 Giugno 2025 : finalizzazione della documentazione LLMaaS + +- Validazione della suite di test completa. +- Correzione e validazione dei pipeline RAG con FAISS e Qdrant. +- Arricchimento dei tutorial con spiegazioni tecniche più dettagliate. +- Aggiunta di una sezione sulla sicurezza dei prompt e sul ciclo di vita dei modelli nei concetti. +- Miglioramento della pagina di spiegazione del RAG con diagrammi e dettagli sui modelli di embedding. +- Aggiornamento della documentazione dell'API, della guida introduttiva e della presentazione del servizio. +- Aggiunta del pricing per l'endpoint di trascrizione audio. +- Aggiunta del piano previsionale del ciclo di vita dei modelli. +- Aggiunta della matrice di responsabilità per l'offerta LLMaaS. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/compute_overview.md b/i18n/it/docusaurus-plugin-content-docs/current/compute_overview.md index 857e1d16..e915ac37 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/compute_overview.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/compute_overview.md @@ -1,21 +1,21 @@ --- -title: Compute +title: Calcolo displayed_sidebar: docSidebar --- -# Compute +# Calcolo -I servizi Compute di Cloud Temple consentono di distribuire e gestire macchine virtuali su un'infrastruttura sovrana e sicura. Scegli la tecnologia più adatta alle tue esigenze: istanze cloud condivise, infrastruttura open source o virtualizzazione VMware. +I servizi Compute di Cloud Temple ti consentono di distribuire e gestire macchine virtuali su un'infrastruttura sovrana e sicura. Scegli la tecnologia più adatta alle tue esigenze: istanze cloud condivise, infrastruttura open source o virtualizzazione VMware.
-

VM Instances Preview

-

Istanze cloud condivise, distribuite in pochi minuti dal Marketplace. Ideale per workload flessibili.

- Scopri VM Instances → +

Istanze VM Anteprima

+

Istanze cloud condivise, distribuite in pochi minuti dal Marketplace. Ideali per carichi di lavoro flessibili.

+ Scopri Istanze VM →

IaaS OpenSource

-

Infrastruttura virtualizzata open source (OpenStack). Controllo totale su VM, reti e storage su una base certificata SecNumCloud.

+

Infrastruttura virtualizzata open source (OpenStack). Controllo totale su VM, reti e archiviazione su una base SecNumCloud.

Scopri IaaS OpenSource →
@@ -23,4 +23,4 @@ I servizi Compute di Cloud Temple consentono di distribuire e gestire macchine v

Infrastruttura VMware gestita. Compatibile con il tuo ambiente vSphere esistente, con le garanzie di un cloud sovrano qualificato.

Scopri IaaS VMware →
-
+
\ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/console/api.md b/i18n/it/docusaurus-plugin-content-docs/current/console/api.md index ca4948e2..f81ab663 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/console/api.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/console/api.md @@ -13,171 +13,170 @@ import ShivaApi004 from '@site/docs/console/images/shiva_api_004.png' ## Introduzione -L'API Cloud Temple consente di creare e gestire tutte le risorse cloud in modo programmatico. Tutto ciò che è possibile fare tramite la console Cloud Temple può essere eseguito anche tramite l'API, dalla creazione di macchine virtuali alla configurazione della gestione delle identità e degli accessi. +L'API Cloud Temple consente di creare e gestire tutte le tue risorse cloud in modo programmatico. Tutto ciò che è possibile fare tramite la console Cloud Temple può essere realizzato anche tramite l'API, dalla creazione di macchine virtuali alla configurazione della gestione delle identità e degli accessi. -Questa documentazione vi guida nell'utilizzo dell'API Cloud Temple, dall'autenticazione alle best practice, inclusa la gestione del ciclo di vita degli endpoint. +Questa documentazione ti guida nell'utilizzo dell'API Cloud Temple, dall'autenticazione alle best practice, passando per la gestione del ciclo di vita degli endpoint. -## Avvio rapido: La vostra prima richiesta API +## Quickstart : La tua prima richiesta API :::info[Riepilogo - 3 passaggi per iniziare] -1. 🔑 **Generare il PAT** dalla console -2. 🚀 **Testare con curl** su `/iam/v2/roles` -3. ✅ **Analizzare la risposta** JSON +1. 🔑 **Genera il tuo PAT** dalla console +2. 🚀 **Testa con curl** su `/iam/v2/roles` +3. ✅ **Analizza la risposta** JSON ::: ### Prerequisiti -Prima di iniziare, è necessario disporre di un account Cloud Temple con le autorizzazioni appropriate per generare chiavi API. +Prima di iniziare, devi disporre di un account Cloud Temple con le autorizzazioni appropriate per generare le chiavi API. ### Passaggi -1. **Generare la chiave API**: Accedere alla [console Cloud Temple](https://shiva.cloud-temple.com/login) e generare il Personal Access Token (vedere la sezione [Chiavi API](#chiavi-api-personal-access-token) di seguito). +1. **Genera la tua chiave API** : Accedi alla [console Cloud Temple](https://shiva.cloud-temple.com/login) e genera il tuo Personal Access Token (vedi sezione [Chiavi API](#clés-api-personal-access-token) di seguito). -2. **Testare la prima richiesta**: Eseguire il seguente comando curl, sostituendo `` con il proprio token: +2. **Testa la tua prima richiesta** : Esegui il seguente comando curl sostituendo `` con il tuo token : ```bash curl -X GET \ - -H "Authorization: Bearer " \ + -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ "https://shiva.cloud-temple.com/api/iam/v2/roles" ``` -3. **Analizzare la risposta**: Si riceverà l'elenco dei ruoli IAM disponibili nel tenant, consentendo di comprendere i permessi esistenti. +3. **Analizza la risposta** : Riceverai l'elenco dei ruoli IAM disponibili nel tuo tenant, che ti permetterà di comprendere le autorizzazioni esistenti. ## Autenticazione ### Chiavi API (Personal Access Token) -La __chiave API__ consente di autenticarsi durante le richieste API. La generazione di una chiave API, nota anche come __Personal Access Token (PAT)__, è un modo sicuro per connettersi alle API della console senza utilizzare un'interfaccia grafica. Ciascuno di questi token è collegato a un tenant e all'utente che lo ha creato. +La __chiave API__ consente di autenticarsi quando si desidera effettuare richieste all'API. La generazione di una chiave API, nota anche come __Token di accesso personale (PAT)__, è un metodo sicuro per connettersi alla Console API senza utilizzare un'interfaccia grafica. Ciascuno di questi token è associato a un tenant e all'utente che lo ha creato. -La creazione di questo token avviene dal proprio account. È possibile generare più chiavi e configurare i permessi per ciascuna entro i limiti dei propri diritti. +La creazione di questo token viene effettuata dal proprio account. È possibile generare più chiavi e configurare per ciascuna le autorizzazioni, nei limiti dei propri diritti. #### Creare una chiave API -Per creare una chiave API, è sufficiente __fare clic sul proprio profilo__: +Per creare una chiave API, basta __cliccare sul tuo profilo__ : -Nel menu del profilo, fare clic su __'Personal Access Token'__ +Nel menu del profilo, clicca su __'Get di accesso personale'__ -Si vedranno quindi tutte le chiavi API create per questo utente in questo tenant. Fare clic su __'Nuovo token di accesso personale'__ +A schermo vengono visualizzate tutte le chiavi API create per questo utente in questo tenant. Clicca su __'Nuovo get di accesso personale'__ -È quindi necessario: +Devi quindi: -- Specificare il nome di questo nuovo token, -- Impostare una data di scadenza (validità massima 12 mesi), -- Scegliere i permessi associati al token. +- Indicare il nome di questo nuovo get, +- Indicare una data di scadenza (massimo 12 mesi di validità), +- Scegliere le autorizzazioni associate al get. -I dettagli del token verranno quindi visualizzati. __Attenzione: non sarà più possibile accedere a questi dettagli in seguito.__ +Vengono quindi visualizzati i dettagli relativi al tuo get. __Attenzione, non è più possibile recuperarlo.__ -Se non si registrano queste informazioni, sarà necessario eliminare e ricreare il token. +Se non annoti queste informazioni, dovrai eliminare e ricreare il get. -Per motivi di sicurezza, si consiglia di creare più token, ciascuno con uno scopo specifico (un token per applicazione o processo aziendale) anziché creare un token con tutti i permessi. +Per motivi di sicurezza, si consiglia di creare più token, ciascuno con uno scopo specifico (un token per ogni applicazione o processo aziendale) anziché creare un unico token con tutte le autorizzazioni. -Si vedrà quindi il token appena creato e la sua data di scadenza futura. +Vedrai quindi il nuovo get creato e la sua futura data di scadenza. :::info[Ciclo di vita del token di autenticazione] -Quando si utilizza il __Personal Access Token (PAT)__ per autenticarsi con l'API, si riceve in cambio un token di accesso. È importante notare che questo token di accesso è un __JSON Web Token (JWT)__ con una durata limitata. +Quando utilizzi il tuo __Personal Access Token (PAT)__ per autenticarti presso l'API, ricevi in risposta un token di accesso. È importante notare che questo token di accesso è un __JSON Web Token (JWT)__ con una durata di vita limitata. -- __Durata__: Ogni token JWT è valido per __5 minuti__. -- __Verifica__: È possibile verificare la data di emissione (`iat`) e la data di scadenza (`exp`) del token decodificandolo. Strumenti online come [jwt.io](https://jwt.io) rendono questa operazione semplice. +- __Durata di vita__ : Ogni token JWT è valido per una durata di __5 minuti__. +- __Verifica__ : Puoi verificare la data di emissione (`iat`) e la data di scadenza (`exp`) del tuo token decodificandolo. Strumenti online come [jwt.io](https://jwt.io) ti permettono di farlo facilmente. -Una volta scaduto il token, sarà necessario ri-autenticarsi con il PAT per ottenerne uno nuovo. Pertanto, si consiglia di gestire questo ciclo di vita nei propri script e applicazioni pianificando il rinnovo automatico del token. +Una volta scaduto il token, dovrai riautenticarti con il tuo PAT per ottenerne uno nuovo. Si consiglia quindi di gestire questo ciclo di vita nei tuoi script e applicazioni prevedendo un rinnovo automatico del token. ::: ## Accesso al portale API -La documentazione OpenAPI 3.0 (Swagger) per le API della console Cloud Temple è disponibile direttamente nell'applicazione: +La documentazione OpenAPI 3.0 (Swagger) delle API della console Cloud Temple è disponibile direttamente nell'applicazione: -L'accesso all'API richiede l'autenticazione. Una volta autenticati, tutte le operazioni devono includere l'intestazione __'Authorization'__ con il token di accesso bearer ottenuto durante la fase di autenticazione. +L'accesso alle API richiede l'autenticazione. Una volta autenticati, tutte le operazioni devono includere l'header __'Authorization'__ con il bearer access token ottenuto durante la fase di autenticazione. -Gli URL degli endpoint sono forniti direttamente in __Swagger__ (nell'oggetto "Servers" di ogni pagina API). +L'URL dei punti di accesso è indicata direttamente in __Swagger__ (nell'oggetto "Servers" di ciascuna pagina API). ### Esplorare la documentazione interattiva Il portale API consente di: -- Visualizzare tutti gli endpoint disponibili per modulo -- Testare le richieste direttamente dall'interfaccia -- Vedere i modelli di dati (schemi) per ogni risorsa -- Visualizzare i codici di risposta possibili per ogni endpoint +- Consultare tutti gli endpoint disponibili per modulo +- Testare direttamente le richieste dall'interfaccia +- Visualizzare i modelli di dati (schemi) per ogni risorsa +- Consultare i codici di risposta possibili per ogni endpoint ## Struttura degli endpoint -### Formato URL +### Formato degli URL Gli URL dell'API Cloud Temple seguono una struttura coerente: ``` -https://shiva.cloud-temple.com/api/{module}/v{version}/{resource} +https://shiva.cloud-temple.com/api/{module}/v{version}/{ressource} ``` Dove: -- `{module}`: Il modulo interessato (compute, iam, network, backup, ecc.) -- `{version}`: La versione dell'API (v1, v2, ecc.) -- `{resource}`: La risorsa da manipolare (virtual-machines, users, networks, ecc.) +- `{module}` : Il modulo interessato (compute, iam, network, backup, ecc.) +- `{version}` : La versione dell'API (v1, v2, ecc.) +- `{ressource}` : La risorsa da gestire (virtual-machines, users, networks, ecc.) ### Esempi di endpoint - ``` -# Macchine virtuali (Compute) +# Machines virtuelles (Compute) GET https://shiva.cloud-temple.com/api/compute/v1/virtual-machines POST https://shiva.cloud-temple.com/api/compute/v1/virtual-machines GET https://shiva.cloud-temple.com/api/compute/v1/virtual-machines/{id} PATCH https://shiva.cloud-temple.com/api/compute/v1/virtual-machines/{id} DELETE https://shiva.cloud-temple.com/api/compute/v1/virtual-machines/{id} -# Identità e accesso (IAM) +# Identité et accès (IAM) GET https://shiva.cloud-temple.com/api/iam/v1/users POST https://shiva.cloud-temple.com/api/iam/v1/users GET https://shiva.cloud-temple.com/api/iam/v1/users/{id} -# Reti +# Réseaux GET https://shiva.cloud-temple.com/api/network/v1/virtual-networks POST https://shiva.cloud-temple.com/api/network/v1/virtual-networks ``` -### Organizzazione per moduli +### Organizzazione per modulo L'API Cloud Temple è organizzata in moduli funzionali: -| Modulo | Descrizione | URL base | +| Modulo | Descrizione | URL di base | |--------|-------------|----------| | Console Cloud Temple | Funzionalità generali | `/api/v1/` | -| Identità (IAM) | Gestione utenti e accessi | `/iam/v1/` | -| VMware IaaS | Risorse di virtualizzazione VMware | `/compute/v1/` | +| Identità (IAM) | Gestione di utenti e accessi | `/iam/v1/` | +| IaaS VMware | Risorse di virtualizzazione VMware | `/compute/v1/` | | OpenIaaS | Risorse Xen Orchestra | `/openiaas/v1/` | | S3 | Archiviazione oggetti | `/s3/v1/` | | OpenShift | Piattaforma PaaS | `/openshift/v1/` | | Bastion | Appliance bastion SSH/RDP | `/bastion/v1/` | -| Rete | Gestione rete livello 2 e 3 | `/network/v1/` | -| Housing | Colocation e housing | `/housing/v1/` | -| Marketplace | Catalogo soluzioni | `/marketplace/v1/` | -| Supporto | Ticket e supporto | `/support/v1/` | -| Notifica | Sistema di notifiche | `/notification/v1/` | +| Réseau | Gestione di rete livello 2 e 3 | `/network/v1/` | +| Hébergement | Colocazione e housing | `/housing/v1/` | +| Marketplace | Catalogo di soluzioni | `/marketplace/v1/` | +| Support | Ticket e assistenza | `/support/v1/` | +| Notification | Sistema di notifiche | `/notification/v1/` | | LLMaaS | Intelligenza artificiale | `/llmaas/v1/` | -## Attività +## Le attività -Il tracciamento delle richieste di tipo scrittura (POST, PUT, PATCH, DELETE) è gestito tramite la gestione delle attività. Ogni richiesta di questo tipo genera automaticamente un'attività associata. Un codice di stato HTTP 201 conferma la creazione riuscita dell'attività. L'identificatore univoco di questa attività viene restituito nelle intestazioni di risposta sotto la chiave 'Location'. +Il monitoraggio delle richieste di tipo scrittura (POST, PUT, PATCH, DELETE) è gestito tramite la gestione delle attività. Ogni richiesta di questo tipo genera automaticamente un'attività associata. Un codice di stato HTTP 201 conferma la creazione riuscita dell'attività. L'identificativo univoco di questa attività viene restituito nelle intestazioni della risposta, sotto la chiave 'Location'. -Una volta recuperato l'identificatore, è possibile accedere ai dettagli dell'attività utilizzando l'API del modulo Activity: +Una volta recuperato l'identificativo, è possibile accedere ai dettagli dell'attività utilizzando l'API del modulo Activity : -Il contenuto dell'attività include tutte le informazioni essenziali per identificare l'operazione, la data di esecuzione e lo stato di avanzamento. Ecco il modello di attività: +Il contenuto dell'attività include tutte le informazioni essenziali per identificare l'operazione, la sua data di esecuzione, nonché il suo stato di avanzamento. Ecco il modello di un'attività : ```json { @@ -199,11 +198,11 @@ Il contenuto dell'attività include tutte le informazioni essenziali per identif } ``` -### Stati dell'attività +### Stati di un'attività -L'oggetto __state__ può assumere forme diverse a seconda dello stato dell'attività: +L'oggetto __state__ può assumere diverse forme a seconda dello stato dell'attività, vale a dire: -#### waiting +#### in attesa Stato prima che l'operazione sia iniziata: @@ -211,7 +210,7 @@ Stato prima che l'operazione sia iniziata: waiting: {} ``` -#### running +#### esecuzione Stato quando l'operazione è in corso: @@ -225,7 +224,7 @@ running: { #### failed -Stato se l'operazione è fallita: +Stato se l'operazione è fallita : ```json failed: { @@ -235,9 +234,9 @@ failed: { } ``` -#### completed +#### completato -Stato se l'operazione è completata: +Stato quando l'operazione è terminata : ```json completed: { @@ -247,58 +246,58 @@ completed: { } ``` -:::info[Identificatore risorsa creata] -L'identificatore (UUIDv4) della risorsa creata è disponibile nel risultato dell'attività una volta completata. +:::info[Identifiant de la ressource créée] +L'identificativo (UUIDv4) della risorsa creata è disponibile nel risultato dell'attività una volta completata. ::: ## Limiti API -### Perché i limiti? +### Perché dei limiti? -La console Cloud Temple definisce __limiti sul volume di richieste__ che un utente può effettuare all'API in un periodo specificato. L'implementazione di questi limiti di velocità è una misura comune nella gestione delle API, adottata per diversi motivi essenziali: +La console Cloud Temple definisce __dei limiti sul volume delle richieste__ che un utente può inviare all'API in un determinato periodo di tempo. L'istituzione di questi limiti di frequenza è una pratica comune nella gestione delle API, adottata per diversi motivi essenziali : -- __Prevenzione degli abusi__: Questi limiti aiutano a salvaguardare l'integrità dell'API prevenendo l'uso abusivo o negligente che potrebbe compromettere il funzionamento. -- __Garanzia della qualità del servizio__: Regolando l'accesso all'API, assicuriamo una distribuzione equa delle risorse, consentendo a tutti gli utenti di beneficiare di un'esperienza stabile e performante. +- __Prevenzione degli abusi__ : Questi limiti contribuiscono a preservare l'integrità dell'API impedendo utilizzi abusivi o impropri che potrebbero comprometterne il funzionamento. +- __Garanzia della qualità del servizio__ : Regolando l'accesso all'API, garantiamo una distribuzione equa delle risorse, consentendo così a tutti gli utenti di beneficiare di un'esperienza stabile e performante. -Si prenda ad esempio uno script mal progettato o inefficiente che tenta chiamate API ripetute, rischiando la saturazione delle risorse e il degrado delle prestazioni. Stabilendo soglie di richiesta, preveniamo queste situazioni e manteniamo __un servizio fluido e ininterrotto__ per tutti i nostri clienti. +Prendiamo ad esempio uno script mal progettato o inefficiente che tenta chiamate ripetute all'API, rischiando di saturare le risorse e degradare le prestazioni. Stabilendo dei limiti di richieste, preveniamo queste situazioni e assicuriamo il mantenimento di __un servizio fluido e senza interruzioni__ per l'intera nostra clientela. -### Quali sono i limiti di velocità per l'API della console Cloud Temple? +### Quali sono i limiti di rate per l'API della console Cloud Temple ? -Applichiamo restrizioni quantitative sulle interazioni degli utenti con la console per ogni prodotto. +Applichiamo restrizioni quantitative sulle interazioni degli utenti con la console per ciascun prodotto. -I limiti sono definiti in __richieste al secondo (r/s) e per IP sorgente__. Oltre la soglia limite, il sistema risponderà con un codice di errore HTTP 429, indicando che il limite di richieste autorizzate è stato superato. +I limiti sono definiti in __richieste al secondo (r/s) e per IP di origine__. Oltre la soglia limite, il sistema risponderà con un codice di errore HTTP 429, indicando che il limite di richieste consentite è stato superato. -Ecco i limiti definiti: +Ecco i limiti definiti : | Prodotto | Soglia limite | |---|---| | Console Cloud Temple | 25 r/s | | Identità (IAM) | 25 r/s | -| VMware IaaS | 25 r/s | +| IaaS VMware | 25 r/s | | OpenIaaS | 25 r/s | | S3 | 25 r/s | | OpenShift | 25 r/s | | Bastion | 25 r/s | | Rete | 25 r/s | -| Housing | 25 r/s | +| Hosting | 25 r/s | | Marketplace | 25 r/s | | Supporto | 25 r/s | -| Notifica | 25 r/s | +| Notifiche | 25 r/s | | LLMaaS | 25 r/s | -### Percorsi specifici +### Endpoint specifici -Alcuni endpoint API specifici, in particolare quelli relativi all'autenticazione o ad azioni sensibili, hanno limiti più restrittivi per migliorare la sicurezza e garantire la stabilità. +Alcuni endpoint API specifici, in particolare quelli legati all'autenticazione o ad azioni sensibili, presentano limiti più restrittivi per rafforzare la sicurezza e garantire la stabilità. -| Percorso | Soglia limite | +| Endpoint | Soglia limite | |---|---| | Autenticazione (IAM) | 5 r/s | -| IaaS - Archiviazione (Datastores) | 20 r/s | -| Marketplace (Contatto) | 1 r/min - 5 r/h | +| IaaS - Storage (Datastores) | 20 r/s | +| Marketplace (Contact) | 1 r/min - 5 r/h | ### Come funzionano i limiti di velocità? -Se il numero di richieste inviate a un endpoint API supera il limite autorizzato, l'endpoint risponderà con __un codice di risposta HTTP 429__. Questo codice indica che l'utente ha superato il numero consentito di richieste. Quando ciò si verifica, l'endpoint API fornirà anche un oggetto JSON come risposta, contenente informazioni dettagliate sulla limitazione applicata: +Se il numero di richieste inviate a un endpoint API supera il limite consentito, l'endpoint risponderà restituendo __un codice di risposta HTTP 429__. Questo codice indica che l'utente ha superato il numero di richieste consentite. Quando ciò accade, l'endpoint fornirà inoltre un oggetto JSON come risposta, che conterrà informazioni dettagliate sulla limitazione applicata: ```json { @@ -313,100 +312,98 @@ Se il numero di richieste inviate a un endpoint API supera il limite autorizzato Si consiglia di limitare il numero di chiamate API effettuate dalla propria automazione per rimanere al di sotto del limite di velocità impostato per l'endpoint. -Questa situazione si verifica spesso quando vengono eseguite più richieste in parallelo utilizzando più processi o thread. +Questa situazione si verifica spesso quando più richieste vengono eseguite in parallelo, utilizzando più processi o thread. -Esistono diversi modi per migliorare l'efficienza della propria automazione, incluso l'utilizzo di meccanismi di __caching__ e l'implementazione __di un sistema di retry con backoff esponenziale__. Questo metodo comporta una breve pausa quando viene rilevato un errore di limite di velocità, quindi un nuovo tentativo della richiesta. Se la richiesta fallisce di nuovo, la durata della pausa viene aumentata gradualmente fino a quando la richiesta ha successo o fino a quando viene raggiunto un numero massimo di tentativi. +Esistono diversi modi per migliorare l'efficienza della propria automazione, tra cui l'utilizzo di meccanismi di __caching__ e l'implementazione di __un sistema di ritentativo con attenuazione progressiva__. Questo metodo consiste nell'effettuare una breve pausa quando si verifica un errore di limite di velocità, per poi ritentare la richiesta. Se la richiesta fallisce nuovamente, la durata della pausa viene aumentata progressivamente fino al successo della richiesta o fino al raggiungimento di un numero massimo di tentativi. -Questo approccio presenta molti vantaggi: +Questo approccio presenta numerosi vantaggi: -- __Il backoff esponenziale__ garantisce che i tentativi iniziali vengano effettuati rapidamente fornendo ritardi più lunghi in caso di fallimenti ripetuti. -- L'aggiunta di __variazione casuale__ alla pausa aiuta a prevenire che tutti i tentativi si verifichino simultaneamente. +- __L'attenuazione progressiva__ garantisce che i primi tentativi vengano eseguiti rapidamente, prevedendo al contempo ritardi più lunghi in caso di fallimenti ripetuti. +- L'aggiunta di __una variazione casuale__ alla pausa contribuisce a evitare che tutti i tentativi vengano eseguiti contemporaneamente. -È importante notare che __le richieste non riuscite non influiscono sul limite di velocità__. Tuttavia, reinviare continuamente una richiesta potrebbe non essere una soluzione praticabile a lungo termine, poiché questo comportamento potrebbe cambiare in futuro. Pertanto, si consiglia di non fare affidamento esclusivamente su questo meccanismo. +È importante notare che __le richieste non andate a buon fine non influiscono sul vostro limite di velocità__. Tuttavia, continuare a inviare una richiesta potrebbe non rappresentare una soluzione sostenibile a lungo termine, poiché tale comportamento potrebbe essere modificato in futuro. Si consiglia pertanto di non fare affidamento esclusivamente su questo meccanismo. -Le librerie Python __[Backoff](https://pypi.org/project/backoff/)__ e __[Tenacity](https://pypi.org/project/tenacity/)__ sono buoni punti di partenza per implementare strategie di mitigazione. +Le librerie Python __[Backoff](https://pypi.org/project/backoff/)__ e __[Tenacity](https://pypi.org/project/tenacity/)__ rappresentano un buon punto di partenza per implementare strategie di attenuazione. -## Ciclo di vita e obsolescenza degli endpoint +## Ciclo di vita e deprecazione degli endpoint -### Politica di obsolescenza +### Politica di deprecazione -Cloud Temple si impegna a mantenere la compatibilità dell'API nel tempo. Tuttavia, quando è necessario evolvere l'API (nuove funzionalità, ottimizzazioni, correzioni di sicurezza), alcuni endpoint possono diventare obsoleti e poi essere rimossi. +Cloud Temple si impegna a mantenere la compatibilità della propria API nel tempo. Tuttavia, quando è necessario evolvere l'API (nuove funzionalità, ottimizzazioni, correzioni di sicurezza), alcuni endpoint possono essere deprecati e successivamente rimossi. -#### Regola minima di 3 mesi +#### Regola dei 3 mesi minimi -Quando un endpoint viene contrassegnato come obsoleto: +Quando un endpoint è contrassegnato come deprecato : -1. **Annuncio ufficiale**: L'obsolescenza viene annunciata nelle note di rilascio della console -2. **Periodo di transizione**: L'endpoint rimane **accessibile e funzionale per almeno 3 mesi** dopo l'annuncio -3. **Data di rimozione**: Viene comunicata una data specifica di rimozione definitiva al momento dell'annuncio -4. **Alternativa documentata**: Il nuovo endpoint sostitutivo è documentato e disponibile +1. **Annuncio ufficiale** : La deprecazione viene annunciata nelle note di versione della console +2. **Periodo di transizione** : L'endpoint rimane **accessibile e funzionante per almeno 3 mesi** dopo l'annuncio +3. **Data di rimozione** : Viene comunicata una data precisa per la rimozione definitiva fin dall'annuncio +4. **Alternativa documentata** : Il nuovo endpoint di sostituzione è documentato e disponibile -Questa regola di 3 mesi offre il tempo necessario per adattare il codice e migrare ai nuovi endpoint. +Questa regola dei 3 mesi vi lascia il tempo necessario per adattare il codice e migrare verso i nuovi endpoint. -### Come identificare un endpoint obsoleto? +### Come identificare un endpoint deprecato? #### Nel portale API (Swagger) -Gli endpoint obsoleti appaiono barrati nella documentazione Swagger: - +Gli endpoint deprecati appaiono barrati nella documentazione Swagger : -~~POST /v1/vecchio/endpoint~~ +~~POST /v1/ancien/endpoint~~ -La descrizione dell'endpoint include: -- La data di annuncio dell'obsolescenza -- La data di rimozione pianificata -- L'endpoint sostitutivo raccomandato +La descrizione dell'endpoint include : +- La data di annuncio della deprecazione +- La data di rimozione prevista +- L'endpoint di sostituzione consigliato -### Best practice per gestire le obsolescenze +### Buone pratiche per gestire le deprecazioni -1. **Monitorare le funzionalità obsolete**: Consultare regolarmente le funzionalità obsolete nella console per essere informati delle prossime obsolescenze. +1. **Monitora le funzionalità deprecate** : Consulta regolarmente le funzionalità deprecate nella console per essere informato sulle deprecazioni imminenti. -2. **Pianificare le migrazioni**: Non appena viene annunciata un'obsolescenza, pianificare la migrazione del codice al nuovo endpoint entro 3 mesi. +2. **Pianifica le tue migrazioni** : Non appena viene annunciata una deprecazione, pianifica la migrazione del tuo codice verso il nuovo endpoint entro 3 mesi. -3. **Testare i nuovi endpoint**: Testare i nuovi endpoint non appena sono disponibili, anche durante il periodo di transizione. +3. **Testa i nuovi endpoint** : Testa i nuovi endpoint non appena sono disponibili, anche durante il periodo di transizione. -4. **Documentare le dipendenze**: Mantenere un elenco degli endpoint utilizzati dall'applicazione per facilitare le migrazioni future. +4. **Documenta le tue dipendenze** : Mantieni un elenco degli endpoint utilizzati dalla tua applicazione per facilitare le migrazioni future. -## Best practice +## Buone pratiche ### Sicurezza dei token :::danger[Regole di sicurezza essenziali] - 🚫 Non esporre mai i propri token nel codice versionato (Git, ecc.) - 🔐 Utilizzare variabili di ambiente per memorizzare i token -- 🎯 Creare token con permessi minimi (principio del privilegio minimo) -- 🔄 Rinnovare regolarmente i token (massimo 12 mesi) +- 🎯 Creare token con permessi minimi (principio del minimo privilegio) +- 🔄 Rinnovare regolarmente i propri token (massimo 12 mesi) - ⚠️ Revocare immediatamente qualsiasi token compromesso ::: ### Gestione degli errori -Gestire sempre gli errori HTTP nel proprio codice. Prestare particolare attenzione ai seguenti codici: +Gestisci sempre gli errori HTTP nel codice. Presta particolare attenzione ai seguenti codici : | Codice | Descrizione | Azione consigliata | |------|-------------|-------------------| -| **401** Unauthorized | Token scaduto o non valido | Ri-autenticarsi con il PAT | -| **403** Forbidden | Permessi insufficienti | Verificare i diritti del token | -| **429** Too Many Requests | Limite di velocità raggiunto | Attendere prima di riprovare (backoff) | -| **500/503** Server Error | Errore server temporaneo | Riprovare più tardi | +| **401** Non autorizzato | Token scaduto o non valido | Rieautenticarsi con il PAT | +| **403** Vietato | Autorizzazioni insufficienti | Verificare i permessi del token | +| **429** Troppe richieste | Limite di frequenza raggiunto | Attendere prima di riprovare (backoff) | +| **500/503** Errore server | Errore server temporaneo | Riprovare più tardi | ### Ottimizzazione delle chiamate API - -- Utilizzare la paginazione per elenchi di grandi dimensioni -- Memorizzare in cache i dati che cambiano raramente -- Utilizzare filtri per limitare i dati restituiti +- Utilizzare la paginazione per gli elenchi di grandi dimensioni +- Memorizzare nella cache i dati che cambiano raramente +- Utilizzare i filtri per limitare i dati restituiti - Raggruppare le operazioni quando possibile -- Monitorare lo stato delle attività asincrone invece di polling intensivo +- Monitorare lo stato delle attività asincrone invece di effettuare un polling intensivo ### Retry con backoff esponenziale -Per gestire errori temporanei o limitazione della velocità (HTTP 429), implementare una strategia di retry con backoff esponenziale: +Per gestire gli errori temporanei o il rate limiting (HTTP 429), implementa una strategia di retry con backoff esponenziale: :::tip[Strategia di retry consigliata] -- ⏱️ **Attesa progressiva**: 1s, 2s, 4s, 8s... -- 🎲 **Variazione casuale**: Evita che tutti i client riprovino simultaneamente -- 🔄 **Limite di tentativi**: Massimo 3-5 tentativi -- 📚 **Librerie Python**: [Backoff](https://pypi.org/project/backoff/) o [Tenacity](https://pypi.org/project/tenacity/) -::: +- ⏱️ **Attesa progressiva** : 1s, 2s, 4s, 8s... +- 🎲 **Variazione casuale** : Evita che tutti i client riprovino simultaneamente +- 🔄 **Limite di tentativi** : Massimo 3-5 tentativi +- 📚 **Librerie Python** : [Backoff](https://pypi.org/project/backoff/) o [Tenacity](https://pypi.org/project/tenacity/) +::: \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/console/billing/concepts.md b/i18n/it/docusaurus-plugin-content-docs/current/console/billing/concepts.md index 9aaea8b5..7811283a 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/console/billing/concepts.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/console/billing/concepts.md @@ -3,106 +3,83 @@ title: Gestore dei costi --- import billingDashboardPreview from '@site/docs/console/billing/images/billing_dashboard_preview.png' -import billingDashboardTotal from '@site/docs/console/billing/images/billing_dashboard_consumption_total.png' -import billingDashboardPerProduct from '@site/docs/console/billing/images/billing_dashboard_consumption_per_product.png' -import billingDashboardPerService from '@site/docs/console/billing/images/billing_dashboard_consumption_per_service.png' +import billingDashboardConsumptionTotal from '@site/docs/console/billing/images/billing_dashboard_consumption_total.png' +import billingDashboardConsumptionPerProduct from '@site/docs/console/billing/images/billing_dashboard_consumption_per_product.png' +import billingDashboardConsumptionPerService from '@site/docs/console/billing/images/billing_dashboard_consumption_per_service.png' import billingConsumptionDetails from '@site/docs/console/billing/images/billing_consumption_details.png' import billingPricesList from '@site/docs/console/billing/images/billing_prices_list.png' -Il **Gestore dei costi** è accessibile dal menu principale della Console Cloud Temple. Offre una visione completa e trasparente del consumo delle risorse cloud, consentendo di gestire le proprie spese in autonomia. +## Panoramica -:::info -L'accesso al Gestore dei costi richiede i diritti appropriati sul proprio tenant. Contattare il proprio responsabile commerciale per ulteriori informazioni e per conoscere le condizioni di accesso al servizio. -::: - -## Dashboard - -La dashboard del Gestore dei costi è la pagina iniziale del modulo. Fornisce una vista riassuntiva di tutto il consumo per il periodo selezionato. +Il **Gestore dei costi** è il modulo della Console Cloud Temple dedicato alla **visibilità dei vostri consumi**. Vi consente di monitorare in tempo reale l'utilizzo delle vostre risorse cloud all'interno di un tenant e di avere una visione chiara delle vostre spese. -Dashboard del Gestore dei costi +Questo modulo risponde a un'esigenza fondamentale: **comprendere cosa consumate, quando lo consumate e a quale costo**, senza dover navigare in tabelle complesse o fatture dettagliate. -Da questa dashboard è possibile: - -- **Selezionare un periodo** di analisi (mese corrente, mese precedente o un intervallo di date personalizzato), -- **Navigare tra le diverse schede** per affinare l'analisi del consumo, -- **Esportare i dati di consumo** per integrarli negli strumenti di reporting interni. - -## Consumo globale +:::info +Il Gestore dei costi mostra il **consumo effettivo** delle vostre risorse sul tenant selezionato. I dati vengono aggiornati regolarmente per riflettere il vostro utilizzo corrente. +::: -La scheda **Consumo globale** mostra l'importo totale consumato nel periodo selezionato. È il punto di partenza per comprendere l'andamento generale delle spese cloud. +## Dashboard principale -Consumo globale del periodo +La pagina iniziale del Gestore dei costi offre una sintesi visiva dei tuoi consumi. All'apertura, hai a disposizione una panoramica che ti consente di identificare rapidamente le tendenze dei consumi e le voci più rilevanti. -Questo grafico consente di visualizzare: + -- L'**importo totale** consumato nel periodo, -- L'**evoluzione temporale** del consumo (giorno per giorno o mese per mese in base alla granularità scelta), -- Eventuali **picchi di consumo** per identificare rapidamente anomalie o aumenti del carico. +La dashboard è organizzata attorno a diverse sezioni complementari, accessibili tramite le schede disponibili nella parte superiore della pagina. -:::info -**Lettura del grafico per il mese corrente** +## Consumo totale -Per il mese corrente, il grafico distingue due zone visive: +La scheda **Consumo totale** offre una vista aggregata di tutti i tuoi consumi nel periodo selezionato. Questo grafico ti permette di osservare l'andamento delle tue spese nel tempo e di identificare eventuali picchi o tendenze. -- La parte **blu (piena)** rappresenta il **consumo reale fino ad oggi**, ovvero le risorse effettivamente consumate dall'inizio del mese, -- La parte **arancione (tratteggiata)** rappresenta la **previsione** stimata fino alla fine del mese, calcolata sulla base del ritmo di consumo attuale. + -Questa proiezione consente di anticipare il budget di fine mese in tempo reale. -::: +Puoi regolare il **periodo di visualizzazione** per affinare la tua analisi: giorno, settimana, mese o intervallo personalizzato. La curva del consumo totale è di immediata lettura e non richiede competenze tecniche particolari. ## Consumo per prodotto -La scheda **Consumo per prodotto** consente di identificare la ripartizione delle spese in base ai prodotti Cloud Temple sottoscritti. - -Ripartizione del consumo per prodotto - -Ogni prodotto (IaaS, Storage, Rete, ecc.) è presentato con: +La scheda **Consumo per prodotto** suddivide il tuo consumo in base alle principali famiglie di servizi Cloud Temple a cui hai sottoscritto: compute, storage, rete, ecc. -- La sua **quota relativa** nel consumo totale, -- Il suo **importo assoluto** per il periodo, -- La **tendenza** rispetto al periodo precedente. + -Questa vista è particolarmente utile per identificare quali prodotti rappresentano le voci di spesa più importanti e orientare le decisioni di ottimizzazione. +Questa vista è particolarmente utile per **identificare le voci di spesa più significative** e orientare le decisioni di ottimizzazione. Ogni prodotto è rappresentato con la propria quota relativa nel consumo complessivo, facilitando la lettura e il confronto. ## Consumo per servizio -La scheda **Consumo per servizio** affina l'analisi suddividendo il consumo a livello dei singoli servizi all'interno di ciascun prodotto. +La scheda **Consumo per servizio** offre un livello di dettaglio aggiuntivo suddividendo il consumo per **servizio specifico** all'interno di ciascun prodotto. -Ripartizione del consumo per servizio + -Questa vista dettagliata consente di: +Questo livello di granularità consente di approfondire l'analisi: è possibile ad esempio distinguere il consumo delle macchine virtuali, dello storage a blocchi, degli snapshot o della banda di rete, e così identificare con precisione le risorse che generano i costi maggiori. -- Identificare con precisione **quali servizi** contribuiscono maggiormente alla fatturazione, -- Confrontare il consumo di servizi simili, -- Rilevare servizi sottoutilizzati o sovradimensionati per **ottimizzare il footprint cloud**. +## Dettaglio dei consumi -## Dettagli di consumo +La vista **Dettaglio dei consumi** presenta una tabella esaustiva che elenca tutte le risorse consumate nel periodo. Ogni riga corrisponde a una risorsa identificabile (macchina virtuale, volume di archiviazione, indirizzo IP pubblico, ecc.) con il relativo livello di consumo. -La sezione **Dettagli di consumo** elenca tutte le singole righe di fatturazione per il periodo selezionato. È la vista più granulare del Gestore dei costi. + -Dettagli delle righe di consumo +Questo dettaglio è prezioso per i team che desiderano effettuare una **ripartizione analitica** dei propri costi o per identificare risorse potenzialmente inutilizzate che potrebbero essere disattivate per ottimizzare le spese. -Per ogni riga di consumo si trovano: +## Griglia tariffaria -- Il **nome della risorsa** consumata, -- La **quantità** consumata e l'**unità di misura** associata (ore, GB, richieste, ecc.), -- Il **prezzo unitario** applicato, -- L'**importo totale** per questa riga nel periodo. +La scheda **Griglia tariffaria** (o **Elenco prezzi**) elenca tutti i prezzi unitari applicabili alle risorse disponibili nel tuo tenant. Si tratta del catalogo dei prezzi in vigore che ti consente di prevedere il costo di nuove risorse prima della loro implementazione. -Questa vista è indispensabile per effettuare una riconciliazione contabile precisa o per analizzare in dettaglio l'utilizzo di risorse specifiche. + -## Catalogo dei prezzi +Ogni voce della griglia indica: -Il **Catalogo dei prezzi** raccoglie i prezzi unitari di tutte le risorse e i servizi disponibili nel tenant Cloud Temple. +- Il **tipo di risorsa** interessata +- L'**unità di fatturazione** (all'ora, per GB, per unità, ecc.) +- Il **prezzo unitario** applicabile -Catalogo dei prezzi unitari +:::tip +La griglia tariffaria è il tuo riferimento per **simulare il costo** di un'infrastruttura prima di ordinarla. Combina queste informazioni con i dati di consumo per individuare le leve di ottimizzazione. +::: -Questo catalogo consente di: +## Buone pratiche -- **Anticipare il costo** di una nuova risorsa prima di ordinarla, -- Effettuare **simulazioni di budget** per i propri progetti cloud, -- Confrontare i prezzi tra diversi livelli o configurazioni di risorse. +Per sfruttare al meglio il Gestore dei costi, ecco alcune raccomandazioni: -:::tip -I prezzi mostrati nel catalogo sono le tariffe contrattuali applicabili al proprio tenant. Possono differire dalle tariffe pubbliche in base al contratto Cloud Temple. -::: +- **Consultare regolarmente** i consumi per rilevare rapidamente eventuali scostamenti di budget. +- **Confrontare i periodi** : lo strumento consente di analizzare l'andamento mese per mese per identificare le tendenze. +- **Utilizzare la vista per servizio** per identificare risorse sottoutilizzate o dimenticate (snapshot obsoleti, volumi scollegati, ecc.). +- **Confrontare con la griglia tariffaria** per valutare l'impatto finanziario di qualsiasi modifica all'infrastruttura prima di attuarla. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/console/console.md b/i18n/it/docusaurus-plugin-content-docs/current/console/console.md index 1e36f073..bc1656de 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/console/console.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/console/console.md @@ -4,9 +4,9 @@ title: Panoramica ## La Console Cloud Temple -La console Cloud Temple è la piattaforma di gestione cloud (**Cloud Management Platform**) integrata di Cloud Temple. Rappresenta il punto centrale per gestire l'intera gamma delle risorse cloud, offrendoti un'interfaccia unica e performante. +La console Cloud Temple è la piattaforma di gestione cloud (**Cloud Management Platform**) integrata di Cloud Temple. Rappresenta il punto centrale per gestire tutte le tue risorse cloud, offrendoti un'interfaccia unica e performante. -Grazie alla **Console**, puoi monitorare ed utilizzare le tue infrastrutture cloud con grande semplicità. Ecco un'anteprima delle sue funzionalità principali: +Grazie alla **Console**, puoi supervisionare e gestire le tue infrastrutture cloud con grande semplicità. Ecco una panoramica delle sue funzionalità principali:
@@ -22,19 +22,79 @@ Grazie alla **Console**, puoi monitorare ed utilizzare le tue infrastrutture clo
-

Deploy dell'infrastruttura

-

Ordina e monitora il deployment di nuove risorse.

+

Distribuzione dell'infrastruttura

+

Richiedi e monitora il deployment di nuove risorse.

Scopri i menu →

Metriche

-

Ordina e monitora il deployment di nuove risorse.

+

Richiedi e monitora il deployment di nuove risorse.

Scopri i menu →
+

Gestore dei costi

-

Monitorate e analizzate il consumo delle risorse cloud per prodotto e per servizio.

+

Monitora e analizza il tuo consumo di risorse cloud per prodotto e per servizio.

Accedi al modulo →
+ +### Gestione dei prodotti e servizi Cloud Temple + +La console vi consente di gestire in modo efficiente i server virtuali, lo storage, le reti e i servizi Cloud da un'interfaccia centralizzata. + +### Monitoraggio e reporting + +Ottieni una visione completa delle tue risorse grazie a strumenti di monitoraggio e reporting integrati, per assicurarti che i tuoi ambienti funzionino in modo ottimale. + +### Automazione e orchestrazione + +Con la sua **API potente**, la console semplifica l'automazione delle attività ripetitive e l'orchestrazione di workflow complessi. Distribuisci, gestisci e scala le tue risorse in pochi clic o tramite script personalizzati. + +### Sicurezza e conformità + +La console integra funzionalità avanzate per: + +- Gestire le identità e gli accessi, +- Filtrare gli accessi per soddisfare i requisiti normativi, +- Rafforzare le tue politiche di sicurezza. + +### Assistenza tecnica e supporto clienti + +La console offre un accesso diretto alle tue pratiche di assistenza tecnica. Hai a disposizione: + +- Un supporto clienti dedicato per risolvere i tuoi problemi tecnici, +- Un'assistenza per la configurazione iniziale dei tuoi servizi. + +### Servizi professionali + +Hai bisogno di competenze specifiche? Approfitta del supporto dei nostri ingegneri per: + +- Consulenza personalizzata, +- Supporto per l'implementazione di architetture cloud, +- Formazione per i tuoi team. + +Il portale Cloud Temple **'Console'** è **la piattaforma di gestione cloud** (Cloud Management Plateform) integrata di **Cloud Temple**. + +La Console Cloud Temple ti consente di gestire le risorse cloud come server virtuali, storage, reti e servizi applicativi. +Si tratta di un'interfaccia di gestione centralizzata che ti consente di progettare e gestire la tua infrastruttura cloud. + +La Console Cloud Temple consente in particolare ai tuoi team di: + +- **La gestione dei tuoi prodotti e servizi** Cloud Temple, +- **Il monitoraggio e la reportistica** sul funzionamento delle tue risorse cloud, +- **L'automazione e l'orchestrazione** : la Console, grazie alla sua API, consente di automatizzare attività ripetitive e orchestrare workflow complessi per distribuire, gestire e scalare le tue risorse cloud, +- **Sicurezza e conformità** : la Console consente il controllo delle identità e il filtraggio degli accessi per garantire la conformità normativa e il rispetto delle tue policy di sicurezza, +- **Integrazione dei framework di adozione Cloud** (Cloud Adoption Framework) : grazie alle sue funzionalità di ibridazione, puoi garantire la continuità operativa con i provider cloud di terze parti (Microsoft Azure e Amazon AWS) a partire da un'unica interfaccia, facilitando l'integrazione e la gestione dei tuoi ambienti applicativi multi-cloud. +- **L'accesso e il monitoraggio dei ticket di assistenza tecnica** : è disponibile anche un'assistenza tecnica dedicata. Ciò include il supporto clienti per la risoluzione dei problemi tecnici, nonché l'assistenza per la configurazione iniziale. +- **La possibilità di sottoscrivere servizi professionali** : per gestire in modo efficiente i tuoi ambienti Cloud, i tuoi team possono beneficiare dell'assistenza dei nostri ingegneri per consulenza, supporto nell'implementazione di architetture o formazione. + +## Accesso alle funzionalità utente tramite l'API + +L'accesso a tutte le funzionalità della Console è possibile tramite l'API Console. +È possibile ottenere i dettagli dei verbi e delle configurazioni tramite **'Profilo'** e **'API'** + +## Provider Terraform + +Cloud Temple mette a disposizione un [provider Terraform](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest) per gestire *"as code"* la vostra piattaforma Cloud. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/console/console_quickstart.md b/i18n/it/docusaurus-plugin-content-docs/current/console/console_quickstart.md index a5a4437f..05d1826d 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/console/console_quickstart.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/console/console_quickstart.md @@ -16,139 +16,137 @@ import shivaSupportCriticities from '@site/docs/console/images/shiva_incident_cr ## Prerequisiti -- Aver sottoscritto un'offerta Cloud Temple. Per sottoscrivere facilmente, puoi [contattarci](https://www.cloud-temple.com/contactez-nous/) o via email all'indirizzo __contact@cloud-temple.com__. +- Avere sottoscritto un prodotto Cloud Temple. Per la semplice sottoscrizione, puoi [contattarci](https://www.cloud-temple.com/contactez-nous/) o via email all'indirizzo __contact@cloud-temple.com__. - Avere accesso alla Console -- Aver dichiarato il proprio indirizzo IPv4 pubblico nella zona di fiducia Cloud Temple (l'accesso alla Console è limitato agli indirizzi di fiducia identificati) +- Avere la propria IPv4 pubblica dichiarata nella zona di fiducia di Cloud Temple (l'accesso alla Console è limitato agli indirizzi fidati identificati) -## Accesso al tuo tenant Cloud Temple +## Connessione al tuo tenant Cloud Temple -La Console è accessibile tramite l'URL seguente: [Console](https://shiva.cloud-temple.com) oppure dall'URL diretta che ti è stata inviata via email. +La Console è accessibile tramite l'URL riportato di seguito: [Console](https://shiva.cloud-temple.com) oppure direttamente dall'URL che ti è stato comunicato via email. -La prima pagina ti permette di selezionare l'[organizzazione](iam/concepts.md#organizzazioni) in cui è stato creato il tuo utente. -Dopo aver inserito l'azienda, fai clic su __'Accedi'__. +La prima pagina ti consente di selezionare [l'organizzazione](iam/concepts.md#organisations) in cui è stato creato il tuo utente. +Una volta inserita l'azienda, fai clic su __'Accedi'__. -Successivamente verrai reindirizzato a una pagina in cui ti verrà chiesto di autenticarti. -Una volta effettuato l'accesso, arriverai a questa pagina. +Verrai quindi reindirizzato a una pagina che ti richiede di autenticarti. +Una volta effettuato l'accesso, verrai portato a questa pagina. -Qui troverai l'insieme delle metriche relative ai prodotti sottoscritti nel tuo ambito. In caso di problemi relativi ai tuoi prodotti VMware e/o OpenIaaS, verranno visualizzate delle avvisi, la cui colorazione indica il loro livello di gravità. +Troverai tutte le metriche relative ai prodotti sottoscritti nel tuo perimetro. In caso di problemi con i tuoi prodotti VMware e/o OpenIaaS, verranno visualizzati degli allarmi; il colore è legato alla loro gravità. ## Gestione della lingua -La console è disponibile in __francese__, __inglese__. È possibile cambiare la lingua di utilizzo tramite l'icona __lingua__ situata in alto a destra dello schermo. +La console è disponibile in __francese__, __inglese__. È possibile modificare la lingua di lavoro utilizzando l'icona __lingua__ situata in alto a destra dello schermo. -Il cambio di lingua per un utente deve essere effettuato nel suo __'Profilo'__, in alto a destra dello schermo, nei __'Impostazioni utente'__. +La modifica della lingua di un utente deve essere effettuata nel suo __'Profilo'__, in alto a destra dello schermo, nelle __'Impostazioni utente'__. -La configurazione viene effettuata per ogni tenant [Tenant](iam/concepts.md#tenant). +La configurazione è impostata per ogni tenant [Tenant](iam/concepts.md#tenant). -## Accesso al support tecnico +## Accesso al supporto tecnico -In qualsiasi momento, è possibile contattare __l'équipe di supporto Cloud Temple__ tramite __l'icona 'boa'__ situata in alto a destra dello schermo. +In qualsiasi momento, puoi contattare __il team di supporto Cloud Temple__ tramite __l'icona 'salvagente'__ situata in alto a destra dello schermo. -Verrai guidato durante tutto il processo di richiesta di supporto. +Sarai guidato durante l'intero processo di richiesta di supporto. -La prima fase consiste nell'identificare il tipo di richiesta di supporto: +La prima fase è l'identificazione del tipo di richiesta di supporto : -- Richiedere un consiglio sull'utilizzo di un prodotto (fuori dal contesto di un incidente), -- Richiedere assistenza relativa al tuo account cliente, +- Richiedere un consiglio sull'utilizzo di un prodotto (fuori da incidenti), +- Richiedere assistenza relativa al proprio account cliente, - Segnalare un incidente o richiedere supporto tecnico. -- Richiedere l'assistenza di un servizio professionale (messaggio a disposizione di un ingegnere Cloud Temple per un problema specifico). +- Richiedere l'assistenza di un servizio professionale (messa a disposizione di un ingegnere Cloud Temple su una problematica). -Successivamente, potrai fornire ulteriori dettagli e allegare file (immagini o log, ad esempio). +Successivamente, hai la possibilità di fornire ulteriori dettagli e allegare file (immagini o log, ad esempio). -Il committente può inoltre specificare un livello di criticità (P1 a P5) nella descrizione del ticket, nel caso di un incidente di sicurezza, come indicato di seguito: +Il richiedente può inoltre specificare un livello di criticità (P1-P5) nella descrizione del ticket, in caso di incidente di sicurezza, come: -__CRITICO (P1)__: +__CRITICA (P1)__: -- Sospetta fuga di dati sensibili -- Rilevamento di un accesso non autorizzato ai tuoi dati -- Compromissione delle tue credenziali di amministrazione -- Inutilizzabilità totale dei tuoi servizi critici +- Sospetta fuoriuscita di dati sensibili +- Rilevamento di un accesso non autorizzato ai propri dati +- Compromissione delle credenziali di amministrazione +- Indisponibilità totale dei servizi critici - Comportamenti anomali su dati sensibili - Violazione di dati personali -__ALTO (P2)__: +__ALTA (P2)h__: - Malfunzionamento degli accessi utente -- Anomalia nel cifratura dei tuoi dati -- Perdita di accesso a funzionalità critiche +- Anomalia nella crittografia dei propri dati +- Perdita di accesso ad alcune funzionalità critiche - Incoerenza nei dati -- Lentezze significative che impattano l'attività +- Rallentamenti significativi che impattano l'attività -__MEDIO (P3)__: +__MEDIA (P3)__: - Problema di prestazioni localizzato - Incidente su una funzione non critica - Errore di configurazione con impatto limitato - Difficoltà di accesso occasionale -__BASSO (P4)__: +__BASSA (P4)__: - Richiesta di indagine - Anomalia senza impatto diretto -- Domanda di conformità -- Bisogno di chiarimenti tecnici +- Questioni di conformità +- Necessità di chiarimenti tecnici -__OPERATIVO (P5)__: +__SERVIZIO OPERATIVO (P5)__: -- Servizio operativo senza rischio immediato +- Servizio operativo senza rischi immediati -Una volta inviata la tua richiesta, è possibile recuperare le tue richieste tramite __l'icona 'boa'__ situata in alto a destra dello schermo: +Una volta inviata la richiesta, è possibile recuperare le proprie richieste tramite __l'icona 'salvagente'__ situata in alto a destra dello schermo : ## Accesso alle funzionalità utente tramite l'interfaccia web -Tutte le funzionalità accessibili all'utente (in base ai suoi diritti) si trovano a sinistra dello schermo, nella barra verde. -Le funzionalità sono raggruppate per modulo. Questi includono principalmente: +L'insieme delle funzionalità accessibili al tuo utente (in base ai suoi permessi) si trova a sinistra dello schermo, nella barra verde. +Le funzionalità sono raggruppate per modulo. Questo raggruppamento include principalmente: -- L'__inventario__ delle proprie risorse, -- Il __tracciamento delle operazioni__, -- Il __pilotaggio delle risorse IaaS__ (Calcolo, archiviazione, rete, ...), -- Il __pilotaggio delle risorse OpenIaaS__ (Calcolo, archiviazione, rete, ...), -- L'accesso ai __servizi aggiuntivi__ (Bastion, monitoraggio, ...), -- L'__amministrazione della propria organizzazione__ (Gestione dei tenant, dei diritti, ...). +- L'__inventario__ delle tue risorse, +- Il __tracciamento delle operazioni__, +- La __gestione delle risorse IaaS__ (Calcolo, storage, rete, ...) +- La __gestione delle risorse OpenIaaS__ (Calcolo, storage, rete, ...) +- L'accesso ai __servizi accessori__ (Bastion, monitoraggio, ...) +- L'__amministrazione della tua organizzazione__ (Gestione dei tenant, dei permessi, ...) -L'attivazione di un modulo per un utente dipende dai diritti dell'utente. Ad esempio, il modulo __'Ordine'__ non sarà disponibile se l'utente non dispone del diritto __'ORDER'__. - -Di seguito una presentazione dei diversi moduli disponibili. Nuovi moduli vengono regolarmente aggiunti alla console: +L'attivazione di un modulo per un utente dipende dai permessi dell'utente. Ad esempio, il modulo __'Ordine'__ non sarà disponibile se l'utente non dispone del permesso __'ORDER'__. +Di seguito è presentata una panoramica dei diversi moduli disponibili. Nuovi moduli vengono aggiunti alla console regolarmente:
-- __Dashboard__: consente di ottenere rapidamente una panoramica sul __totale delle risorse di calcolo e archiviazione__, sulle statistiche della __protezione dei dati__ e su una __sintesi dei ticket di supporto__, -- __Inventario__: consente di visualizzare l'insieme delle proprie risorse di tipo __'macchine virtuali'__. Se vengono utilizzati i __tag__, permette di visualizzare le risorse raggruppate per __tag__ (ad esempio, vista aziendale, vista applicativa, ...), -- __Infogestione__: fornisce l'accesso al tracciamento delle proprie __richieste di supporto__ e alla __metodologia dei servizi__, -- __IaaS__: consente il __pilotaggio delle infrastrutture IaaS VMware__ (macchine virtuali, cluster, iperhost, replicazioni, backup, ...), -- __OpenIaaS__: consente il __pilotaggio delle risorse Xen Orchestra__ (macchine virtuali, backup, ...), -- __OpenShift__: consente il pilotaggio dell'**architettura PaaS RedHat OpenShift** e la gestione dei container nelle 3 zone di disponibilità della piattaforma. -- __Bastion__: permette il deployment e il pilotaggio di appliance bastion SSH/RDP nei propri reti, -- __Rete__: consente il pilotaggio delle __reti di livello 2 e 3__, delle __IP pubbliche__ e dei propri __circuiti telecomunicazioni__, -- __Colocation__: offre la visualizzazione degli apparati ubicati nelle zone di __collocazione condivisa o dedicata__, -- __Ordine__: permette l'ordine di risorse e il tracciamento dei deployment, -- __Amministrazione__: raggruppa le funzionalità di amministrazione degli utenti e dei tenant, nonché l'accesso alla registrazione globale. +- __Dashboard__ : consente di avere rapidamente una panoramica sul __totale delle risorse di calcolo e storage__, le statistiche del __backup__ e una __sintesi dei ticket di supporto__, +- __Inventario__ : consente di visualizzare l'insieme delle tue risorse di tipo __'macchine virtuali'__. Se vengono utilizzati i __tag__, permette di avere una visualizzazione per __tag__ (ad esempio, vista aziendale, vista applicativa, ...), +- __Infogestione__ : consente di accedere al monitoraggio delle tue __richieste di assistenza__ e alla __metriche dei servizi__, +- __IaaS__ : consente la __gestione delle infrastrutture IaaS VMware__ (Macchine virtuali, cluster, hypervisor, repliche, backup, ...), +- __OpenIaaS__ : consente la __gestione delle risorse Xen Orchestra__ (Macchine virtuali, backup, ...), +- __OpenShift__ : consente la gestione della tua **architettura PaaS RedHat OpenShift** e la gestione dei tuoi container nelle 3 zone di disponibilità della piattaforma. +- __Bastion__ : Consente di distribuire e gestire appliance bastion SSH/RDP nelle tue reti, +- __Rete__ : consente la gestione delle __reti di livello 2 e 3__, degli __indirizzi IP pubblici__ e dei tuoi __circuiti telecom__, +- __Colocation__ : Offre una vista sulle apparecchiature situate in zona di __collocazione condivisa o dedicata__, +- __Ordine__ : Consente l'ordine di risorse e il monitoraggio dei deployment, +- __Amministrazione__ : Riunisce le funzioni di amministrazione degli utenti e dei tenant, nonché l'accesso alla registrazione globale.
+Le etichette __'NEW'__ indicano che il prodotto in questione è stato provisionato ma non è ancora qualificato __offerta SecNumCloud__, mentre __'BETA'__ indicano che il prodotto in questione è stato provisionato ed è appena stato qualificato __offerta SecNumCloud__. -I pictogrammi __'NEW'__ indicano che il prodotto in questione è stato provisioningato ma non è ancora qualificato come __offerta SecNumCloud__, mentre __'BETA'__ indica che il prodotto è stato provisioningato ed è stato recentemente qualificato come __offerta SecNumCloud__. - -__Registrazione - Tracciamento delle attività__ +__Registrazione - Monitoraggio delle Attività__ ===================================== -La pagina delle attività è pensata per fornire una visibilità completa su tutte le operazioni di lettura e scrittura eseguite all'interno della console, garantendo così una tracciabilità e una sicurezza maggiori. Essa mette in evidenza i due principali tab: Recenti e Archiviati. +La pagina delle attività è destinata a fornire una visibilità completa su tutte le operazioni di lettura e scrittura eseguite all'interno della console, garantendo così una maggiore tracciabilità e sicurezza. Evidenzia le due schede principali: Recenti e Archiviati. @@ -181,28 +179,28 @@ La pagina delle attività è pensata per fornire una visibilità completa su tut ### __Utilizzo__ -- __Accesso:__ autorizzazione `activity_read` -- __Navigazione:__ +- __Accesso :__ autorizzazione `activity_read` +- __Navigazione :__ - Seleziona la scheda "Recenti" per le operazioni in tempo reale. - Scegli "Archiviati" per consultare la cronologia. - Utilizza le funzionalità di ricerca e filtraggio per individuare operazioni specifiche. #### __Nota di Conformità__ -In conformità con la qualifica SecNumCloud, il periodo di conservazione degli eventi della console Cloud Temple è di almeno __6 mesi__, garantendo così il rispetto dei requisiti di sicurezza e tracciabilità. +In conformità alla qualifica SecNumCloud, la conservazione degli eventi della console Cloud Temple ha una durata minima di __6 mesi__, garantendo così il rispetto dei requisiti di sicurezza e tracciabilità. -## Consulta degli ultimi aggiornamenti +## Consultazione degli ultimi aggiornamenti -Fai clic sull'icona __'Novità'__ nell'angolo in basso a sinistra della barra verde. Troverai il dettaglio delle modifiche apportate in ciascuna versione della console Cloud Temple. +Clicca in basso a sinistra sul banner verde sull'icona __'Novità'__. Troverai i dettagli delle modifiche per ogni versione della console Cloud Temple. -## Accesso alle funzionalità utente tramite l'API +## Accesso alle funzionalità utente tramite API -L'accesso a tutte le funzionalità della Console è possibile tramite l'API Console. È possibile ottenere ulteriori dettagli sui verbi e sulle configurazioni tramite __'Profilo'__ e __'API'__: +L'accesso a tutte le funzionalità della Console è possibile tramite l'API Console. È possibile consultare i dettagli dei metodi e delle configurazioni tramite __'Profilo'__ e __'API'__ : ## Provider Terraform -Cloud Temple mette a vostra disposizione un [provider Terraform](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest) per gestire la vostra piattaforma Cloud in modalità *"as code"*. +Cloud Temple mette a disposizione un [provider Terraform](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest) per gestire *"as code"* la vostra piattaforma Cloud. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/console/iam/concepts.md b/i18n/it/docusaurus-plugin-content-docs/current/console/iam/concepts.md index b89bfd18..d1547dac 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/console/iam/concepts.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/console/iam/concepts.md @@ -19,20 +19,20 @@ import shivaTenantRessources_01 from '@site/docs/console/iam/images/shiva_tenant ## Utenti -I conti di accesso alla Console vengono creati dal conto principale del committente su invito (indipendentemente dal repository di autenticazione utilizzato). -Le credenziali sono globali per la tua [Organizzazione](#organizzazioni). +Gli account di accesso alla Console vengono creati dall'account master del committente su invito (indipendentemente dalla directory di autenticazione). +Le credenziali sono globali per la tua [Organizzazione](#organisations). -*__Nota:__ [La federazione di identità viene gestita a livello di organizzazione](#authentication-mechanisms)* +*__Nota:__ [La federazione delle identità viene gestita a livello di organizzazione](#mécanismes-dauthentification)* ### Creazione di un account utente nella tua organizzazione -La creazione di un account utente nella tua organizzazione avviene tramite invito. Per invitare un utente a un'[Organizzazione](#organizzazioni), vai nel menu __'Amministrazione'__ a sinistra dello schermo, nella barra verde, quindi nel sottomenu __'Utenti'__. +La creazione di un account utente nella tua organizzazione avviene tramite invito. Per invitare un utente in una [Organizzazione](#organisations), vai al menu __'Amministrazione'__ a sinistra dello schermo sulla barra verde e poi nel sottomenu __'Utenti'__. Fai clic sul pulsante __'Nuovo Utente'__ dalla pagina degli utenti. -Indica quindi l'indirizzo email dell'utente. +Indica quindi l'indirizzo email dell'utente @@ -42,302 +42,312 @@ L'utente riceverà quindi un'email di verifica. Una volta completata la verifica, l'utente potrà accedere alla console. -### Assegnazione dei permessi a un utente +### Assegnazione delle autorizzazioni a un utente -La gestione dei diritti utente avviene dalla pagina utente. +La gestione dei diritti utente viene effettuata dalla pagina utente. -Per impostazione predefinita, un utente non ha diritti. È quindi necessario che l'amministratore che ha inviato l'invito gli assegni i diritti necessari per la sua attività. Basta fare clic sul menu __'Azioni'__ dell'utente e scegliere l'opzione __'Modifica'__. +Per impostazione predefinita, un utente non dispone di diritti. È quindi necessario che l'amministratore che ha inviato l'invito gli conceda i diritti necessari per la sua attività. Basta fare clic sul menu __'Azioni'__ dell'utente e selezionare l'opzione __'Modifica'__. -Viene quindi visualizzato il menu per l'attivazione dei diritti: +Appare quindi il menu di attivazione dei diritti: -La configurazione dei permessi deve essere effettuata per ogni [Tenant](#tenant) dell'[Organizzazione](#organizzazioni). +La configurazione delle autorizzazioni deve essere eseguita per ogni [Tenant](#tenant) dell'[Organizzazione](#organizzazioni). -L'elenco dei permessi e la loro definizione è disponibile [qui]. +L'elenco delle autorizzazioni e le relative definizioni sono accessibili [qui](#permissions). -### Re-registration of a user +### Reiscrizione di un utente -When a user has been provisioned but has not validated their registration within the expiration period of the email sent by the Console, they can no longer confirm their registration. It is then possible to resend a link so that they can renew their initial registration. +Quando un utente è stato provisionato ma non ha convalidato la propria iscrizione entro la scadenza dell'email inviata dalla Console, non può più confermare la propria iscrizione. -To re-register a user, go to the __'User'__ tab in the Administration panel, located at the bottom-left of the screen. +È quindi possibile inviargli nuovamente un link affinché rinnovi la propria prima iscrizione. -Select the user you wish to re-register, then click the action button at the end of the row and choose __'Re-registration'__. +La reiscrizione di un utente deve essere eseguita nella scheda __'Utente'__ del pannello Amministrazione, in basso a sinistra dello schermo. -__Warning__: Make sure you are the one initiating the re-registration request for your user account. Please report any requests that do not originate from you via a support ticket. +Selezionare l'utente che si desidera reiscrivere, quindi fare clic sul pulsante di azione a destra della riga e selezionare __'Reiscrizione'__. + +__Attenzione__: Assicurarsi di essere l'effettivo richiedente della reiscrizione del proprio account utente. Segnalare tramite un ticket di supporto tutte le richieste che non provengono da voi. ### Aggiornare il proprio profilo -Questa azione è disponibile solo per account locali (non SSO). +Questa azione è disponibile solo per un account locale (non SSO). -Seleziona __'Profilo'__ in alto a destra dello schermo, quindi __'Impostazioni utente'__ e seleziona l'azione __'Aggiorna il tuo profilo'__. +Seleziona nel tuo __'Profilo'__, in alto a destra dello schermo, quindi __'Impostazioni utente'__ e seleziona l'azione __'Aggiorna il tuo profilo'__. -Successivamente, recati nella tua casella di posta e clicca sul link generato dalla Console. Segui semplicemente i passaggi per aggiornare il tuo profilo. +Vai quindi alla tua casella di posta e fai clic sul link generato dalla Console. Segui semplicemente i passaggi per aggiornare il tuo profilo. -__Attenzione__: Assicurati di essere tu stesso l'originatore della richiesta di aggiornamento del profilo. Ti preghiamo di segnalare qualsiasi richiesta non proveniente da te tramite un ticket di supporto. +__Avviso__: Verifica di essere tu a richiedere l'aggiornamento del profilo. Segnala tramite un ticket di supporto tutte le richieste che non provengono da te. -### Reset password +### Reimpostazione della password -This action is available only for local accounts (non-SSO). +Questa azione è disponibile solo per un account locale (non SSO). -Go to your __'Profile'__, located in the top right corner of the screen, then select __'User Settings'__ and choose the __'Reset password'__ action. +Seleziona nel tuo __'Profilo'__, in alto a destra dello schermo, quindi __'Impostazioni utente'__ e seleziona l'azione __'Reimposta password'__. -Next, go to your email inbox and click on the link generated by the Console. Simply follow the steps to update your password. +Quindi, accedi alla tua casella di posta e fai clic sul link generato dalla Console. Segui semplicemente i passaggi per aggiornare la tua password. -__Warning__: Make sure you are the one who initiated the password reset request. Please report any requests that do not come from you via a support ticket. +__Avviso__: Assicurati di essere tu a richiedere la reimpostazione della password. Segnala eventuali richieste non effettuate da te tramite un ticket di supporto. -### Reset of Two-Factor Authentication +### Reimpostazione dell'autenticazione a due fattori -This action is available only for local accounts (non-SSO). +Questa azione è disponibile solo per un account locale (non SSO). -Go to your __'Profile'__, located in the top right corner of the screen, then select __'User Settings'__ and choose the __'Reset MFA'__ action. +Seleziona nel tuo __'Profilo'__, in alto a destra dello schermo, quindi __'Impostazioni utente'__ e seleziona l'azione __'Reimposta MFA'__. -Next, go to your email inbox and click on the link generated by the Console. Simply follow the steps to update your two-factor authentication. +Quindi, accedi alla tua casella di posta elettronica e fai clic sul link generato dalla Console. Segui semplicemente i passaggi per aggiornare la tua autenticazione a due fattori. -__Warning__: Make sure you are the one initiating the request to reset your two-factor authentication. Please report any requests that do not originate from you via a support ticket. +__Attenzione__: Assicurati di essere tu a richiedere la reimpostazione della tua autenticazione a due fattori. Segnala tramite un ticket di supporto qualsiasi richiesta che non proviene da te. ### Eliminazione di un utente -L'eliminazione di un utente deve essere effettuata nell'area __'Utente'__ del pannello Amministrazione, in basso a sinistra dello schermo. +L'eliminazione di un utente deve essere eseguita nella scheda __'Utente'__ del pannello Amministrazione, in basso a sinistra dello schermo. -Seleziona l'utente che desideri eliminare, quindi fai clic sul pulsante di azione in fondo alla riga e seleziona __'Elimina'__. +Seleziona l'utente che desideri eliminare, quindi fai clic sul pulsante di azione alla fine della riga e su __'Elimina'__. -Nota: Non puoi eliminare te stesso e non puoi eliminare un utente __'Proprietario'__. +Nota: Non è possibile eliminare se stessi e non è possibile eliminare un utente __'Proprietario'__. ### Disconnettersi -La disconnessione di un utente deve essere effettuata nel suo __'Profilo'__, in alto a destra dello schermo, quindi __'Disconnetti'__. +La disconnessione di un utente deve essere eseguita nel suo __'Profilo'__, in alto a destra dello schermo, quindi __'Disconnetti'__. -Una disconnessione automatica avviene al termine della scadenza del token di sessione (JWT Token). +Una disconnessione automatica viene eseguita alla scadenza del token di sessione (JWT Token). -### Cambiare la lingua di un utente +### Modificare la lingua di un utente La modifica della lingua di un utente deve essere effettuata nel suo __'Profilo'__, in alto a destra dello schermo, nelle __'Impostazioni utente'__. -La configurazione viene effettuata per ogni tenant [Tenant](#tenant). +La configurazione è impostata per ogni tenant [Tenant](#tenant). -### Iscrizione alle notifiche tematiche +### Sottoscrizione alle notifiche tematiche -La gestione degli abbonamenti consente di ricevere email relative alle tematiche attivate, che vengono inviate automaticamente in caso di verificarsi di eventi corrispondenti. +La gestione delle sottoscrizioni consente di ricevere le e-mail relative alle tematiche attivate, che verranno inviate automaticamente al verificarsi di eventi corrispondenti. -È accessibile dal profilo utente, nella scheda "I miei abbonamenti": +È accessibile nel profilo utente, nella scheda "Le mie sottoscrizioni" : -Ad esempio, in caso di incidente, verranno generate notifiche via email specifiche per questa tematica. + Ad esempio, in caso di incidente, verranno generate notifiche e-mail specifiche per questa tematica. -L'elenco delle tematiche disponibili può evolversi e arricchirsi progressivamente per adattarsi alle esigenze e ai cambiamenti nel nostro ambiente operativo. +L'elenco delle tematiche disponibili è soggetto a evoluzione e ad un progressivo arricchimento per adattarsi alle esigenze e ai cambiamenti nel nostro ambiente operativo. -## Permissions +## Permessi -The Console allows for fine-grained management of user rights within an organization, with segregation by tenant. -Initially, it is the primary account of the sponsor that enables the initial configuration of accounts and associated permissions. -Subsequently, the __'iam_write'__ permission allows an account to manage the permissions of other users. +La Console consente una gestione granulare dei diritti degli utenti di un'organizzazione, con una segregazione per tenant. +Inizialmente, è l'account principale del committente a consentire la configurazione iniziale degli account e dei permessi associati. +Successivamente, il permesso __'iam_write'__ consente a un account di gestire i permessi degli altri utenti. ### Permessi disponibili per gli utenti della tua organizzazione -Quando un utente viene creato, non dispone di alcuna autorizzazione predefinita. Ogni permesso viene assegnato individualmente e funziona in modo autonomo, senza sovrapposizioni con altri permessi. Essi si applicano in combinazione, il che significa che un utente deve disporre di tutti i permessi necessari per eseguire un'azione specifica. +Quando un utente viene creato, non dispone di alcun permesso di default. Ogni permesso viene assegnato individualmente e funziona in modo unitario, senza sovrapposizioni con altri permessi. Si applicano congiuntamente, il che significa che un utente deve disporre di tutti i permessi richiesti per eseguire un'azione specifica. -I seguenti permessi sono configurabili per ogni utente e per ogni tenant della tua organizzazione: +I seguenti permessi sono configurabili per ogni utente e per ogni tenant della tua organizzazione : -- Permessi di tipo “read”: consentono unicamente la consultazione delle risorse, senza possibilità di modifica. -- Permessi di tipo “write”: autorizzano la modifica delle configurazioni. -- Permessi di tipo “management”: autorizzano la gestione avanzata delle risorse. -- Permessi di tipo “console_access”: autorizzano le connessioni di tipo PMAD sulle risorse. -- Permessi di tipo “virtual_machine_power”: autorizzano la gestione dell'alimentazione di una macchina virtuale. +- Permessi di tipo “read” : consentono esclusivamente la consultazione delle risorse senza possibilità di modifica. +- Permessi di tipo “write” : autorizzano la modifica delle configurazioni. +- Permessi di tipo “management” : autorizzano la gestione avanzata delle risorse. +- Permessi di tipo “console_access” : autorizzano le connessioni di tipo PMAD sulle risorse. +- Permessi di tipo “virtual_machine_power” : autorizzano la gestione dell'alimentazione di una macchina virtuale. -- __Questi sono permessi, non ruoli.__ Di conseguenza, è necessario disporre sia del permesso READ che WRITE per modificare una configurazione. +- __Questi sono permessi, non ruoli.__ A tal fine, è necessario disporre del permesso READ e WRITE per modificare una configurazione. Ultimo aggiornamento: 20/04/2026 -| Nome del permesso | Descrizione del permesso | -| ------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | -| activity_read | Consultazione dei log e delle attività | -| activity_write | Gestione dei log e delle attività | -| backup_iaas_opensource_read | Offerta OpenIaaS - Gestione delle risorse di tipo backup - consultazione | -| backup_iaas_opensource_write | Offerta OpenIaaS - Gestione delle risorse di tipo backup - modifica | -| backup_iaas_spp_read | Offerta Vmware - Gestione delle risorse di tipo backup - consultazione | -| backup_iaas_spp_write | Offerta Vmware - Gestione delle risorse di tipo backup - modifica | -| bastion_read | Consultazione delle risorse di tipo bastion | -| bastion_write | Gestione delle risorse (appliance, sessioni, ecc.) di tipo Bastion | -| bastion_console_access | Autorizzazione all'accesso alla console (ssh/rdp) di una risorsa protetta da un'appliance Bastion | -| compute_iaas_opensource_console_access | Offerta OpenIaaS - Apertura della console di una macchina virtuale | -| compute_iaas_opensource_infrastructure_read | Offerta OpenIaaS - Consultazione di dati avanzati sulle risorse Xen Orchestra | -| compute_iaas_opensource_infrastructure_write | Offerta OpenIaaS - Gestione avanzata delle risorse Xen Orchestra | -| compute_iaas_opensource_read | Offerta OpenIaaS - Consultazione delle risorse di tipo Macchine Virtuali | -| compute_iaas_opensource_management | Offerta OpenIaaS - Gestione delle risorse di tipo Macchine Virtuali | -| compute_iaas_opensource_virtual_machine_power | Offerta OpenIaaS - Gestione dell'alimentazione di una macchina virtuale | -| compute_iaas_opensource_replication_recover | Offerta OpenIaaS - Gestione della replica | -| compute_iaas_vmware_console_access | Offerta Vmware - Apertura della console di una macchina virtuale | -| compute_iaas_vmware_infrastructure_read | Offerta Vmware - Consultazione di dati avanzati sulle risorse VMware (regole affinità/anti-affinità, configurazione DRS, ecc.) | -| compute_iaas_vmware_infrastructure_write | Offerta Vmware - Gestione avanzata delle risorse VMware | -| compute_iaas_vmware_read | Offerta Vmware - Consultazione delle risorse di tipo Macchine Virtuali | -| compute_iaas_vmware_management | Offerta Vmware - Gestione delle risorse di tipo Macchine Virtuali (consente il cifratura di una macchina virtuale) | -| compute_iaas_vmware_virtual_machine_power | Offerta Vmware - Gestione dell'alimentazione di una macchina virtuale | -| baremetal_management | Offerta Bare Metal - Gestione delle risorse di tipo Bare Metal | -| baremetal_read | Offerta Bare Metal - Consultazione delle risorse di tipo Bare Metal | -| baremetal_console_access | Offerta Bare Metal - Apertura della console di un Bare Metal | -| console_public_access_read | Consultazione degli indirizzi IP autorizzati ad accedere alla console | -| console_public_access_write | Aggiunta di indirizzi IP autorizzati ad accedere alla console | -| documentation_read | Consultazione delle risorse di documentazione su Confluence | -| housing_read | Consultazione delle risorse di tipo colocation | -| iam_offline_access | Creazione e cancellazione di Access Token Personali (PAT) | -| iam_read | Consultazione dei diritti utente | -| iam_write | Gestione dei diritti utente | -| intervention_read | Consultazione dei cambiamenti e delle implementazioni pianificate sulla piattaforma | -| inventory_read | Consultazione delle risorse di tipo Inventario | -| inventory_write | Gestione delle risorse di tipo Inventario | -| monitoring_read | Consultazione del monitoraggio | -| monitoring_write | Gestione del monitoraggio | -| metric_read | Consultazione dei dati di salute sulle macchine virtuali e host | -| network_read | Consultazione delle risorse di rete | -| network_write | Gestione delle risorse di rete | -| order_read | Consultazione degli ordini infrastrutturali | -| order_write | Creazione di un ordine infrastrutturale | -| object-storage_iam_management | Permette di gestire i conti di archiviazione sul prodotto S3 | -| object-storage_read | Permette di visualizzare i bucket e le configurazioni dei bucket | -| object-storage_write | Permette di modificare i bucket e le configurazioni dei bucket | -| openshift_management | Permette di connettersi alle piattaforme OpenShift (limitato al tenant) | -| support_management | Consultazione di tutti i ticket support del tenant | -| support_read | Consultazione dei propri ticket support del tenant | -| support_write | Creazione di un ticket support sul tenant | -| tag_read | Consultazione dei tag, esclusi i tag RTMS | -| tag_write | Gestione dei tag, esclusi i tag RTMS | -| ticket_comment_read | Consultazione dei commenti | -| ticket_comment_write | Gestione dei commenti | -| ticket_read | Consultazione dei ticket | -| ticket_write | Gestione dei ticket | -| incident_management | Gestione degli incidenti | -| incident_read | Consultazione degli incidenti | +| Nome del permesso | Descrizione del permesso | +| --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | +| activity_read | Consultazione dei log e delle attività | +| activity_write | Gestione dei log e delle attività | +| backup_iaas_opensource_read | Offerta OpenIaaS - Gestione delle risorse di tipo backup - consultazione | +| backup_iaas_opensource_write | Offerta OpenIaaS - Gestione delle risorse di tipo backup - modifica | +| backup_iaas_spp_read | Offerta Vmware - Gestione delle risorse di tipo backup - consultazione | +| backup_iaas_spp_write | Offerta Vmware - Gestione delle risorse di tipo backup - modifica | +| bastion_read | Consultazione delle risorse di tipo bastion | +| bastion_write | Gestione delle risorse (appliances, sessions,...) di tipo Bastion | +| bastion_console_access | Autorizzazione all'accesso alla console (ssh/rdp) di una risorsa protetta da un'appliance Bastion | +| compute_iaas_opensource_console_access | Offerta OpenIaaS - Apertura della console di una macchina virtuale | +| compute_iaas_opensource_infrastructure_read | Offerta OpenIaaS - Consultazione di dati avanzati delle risorse Xen Orchestra | +| compute_iaas_opensource_infrastructure_write | Offerta OpenIaaS - Gestione avanzata delle risorse Xen Orchestra | +| compute_iaas_opensource_read | Offerta OpenIaaS - Consultazione delle risorse di tipo Macchine Virtuali | +| compute_iaas_opensource_management | Offerta OpenIaaS - Gestione delle risorse di tipo Macchine Virtuali | +| compute_iaas_opensource_virtual_machine_power | Offerta OpenIaaS - Gestione dell'alimentazione di una macchina virtuale | +| compute_iaas_opensource_replication_recover | Offerta OpenIaaS - Gestione della replicazione | +| compute_iaas_vmware_console_access | Offerta Vmware - Apertura della console di una macchina virtuale | +| compute_iaas_vmware_infrastructure_read | Offerta Vmware - Consultazione di dati avanzati delle risorse VMware (règles affinité/anti-affinité, configuration drs, etc) | +| compute_iaas_vmware_infrastructure_write | Offerta Vmware - Gestione avanzata delle risorse VMware | +| compute_iaas_vmware_read | Offerta Vmware - Consultazione delle risorse di tipo Macchine Virtuali | +| compute_iaas_vmware_management | Offerta Vmware - Gestione delle risorse di tipo Macchine Virtuali (permet le chiffrement d'une machine virtuelle) | +| compute_iaas_vmware_virtual_machine_power | Offerta Vmware - Gestione dell'alimentazione di una macchina virtuale | +| baremetal_management | Offerta Bare Metal - Gestione delle risorse di tipo Bare Metal | +| baremetal_read | Offerta Bare Metal - Consultazione delle risorse di tipo Bare Metal | +| baremetal_console_access | Offerta Bare Metal - Apertura della console di un Bare Metal | +| console_public_access_read | Consultazione degli IP autorizzati ad accedere alla console | +| console_public_access_write | Aggiunta di IP autorizzati ad accedere alla console | +| documentation_read | Consultazione delle risorse documentali di Confluence | +| housing_read | Consultazione delle risorse di tipo colocation | +| iam_offline_access | Creazione e rimozione di Access Token Personnels (PAT) | +| iam_read | Consultazione dei diritti utente | +| iam_write | Gestione dei diritti utente | +| intervention_read | Consultazione delle modifiche e dei rilasci in produzione previsti sulla piattaforma | +| inventory_read | Consultazione delle risorse di tipo Inventario | +| inventory_write | Gestione delle risorse di tipo Inventario | +| monitoring_read | Consultazione del monitoring | +| monitoring_write | Gestione del monitoring | +| metric_read | Consultazione dei dati di salute sulle macchine virtuali e sugli host | +| network_read | Consultazione delle risorse di rete | +| network_write | Gestione delle risorse di rete | +| order_read | Consultazione degli ordini infrastrutturali | +| order_write | Creazione di ordini infrastrutturali | +| object-storage_iam_management | Consente di gestire gli account di storage sul prodotto S3 | +| object-storage_read | Consente di visualizzare i bucket e le relative configurazioni | +| object-storage_write | Consente di modificare i bucket e le relative configurazioni | +| openshift_management | Consente di connettersi alle piattaforme OpenShift (scopé au tenant) | +| support_management | Consultazione di tutti i ticket di supporto del tenant | +| support_read | Consultazione dei propri ticket di supporto del tenant | +| support_write | Creazione di un ticket di supporto sul tenant | +| tag_read | Consultazione dei tag, esclusi i tag RTMS | +| tag_write | Gestione dei tag, esclusi i tag RTMS | +| ticket_comment_read | Consultazione dei commenti | +| ticket_comment_write | Gestione dei commenti | +| ticket_read | Consultazione dei ticket | +| ticket_write | Gestione dei ticket | +| incident_management | Gestione degli incidenti | +| incident_read | Consultazione degli incidenti | +| billing_read | Consultazione dei dashboard dei consumi | +| vpc_read | Offerta VPC - Consultazione delle risorse di rete di tipo VPC | +| vpc_write | Offerta VPC - Gestione delle risorse di rete di tipo VPC | +| public_cloud_vm_instances_management | Offerta VM Instances - Gestione delle macchine virtuali | +| public_cloud_vm_instances_read | Offerta VM Instances - Consultazione delle macchine virtuali | +| public_cloud_vm_instances_console_access | Offerta VM Instances - Apertura della console delle macchine virtuali | ## Organizzazioni -L'organizzazione è associata al tuo __conto sponsorizzatore__ e al __contratto Cloud Temple__ associato. Rappresenta la tua entità (azienda, dipartimento, team, ...) che detiene il rapporto contrattuale tra Cloud Temple e te. +L'organizzazione è collegata al vostro __account sponsor__ e al __contratto Cloud Temple associato__. Rappresenta la vostra entità (società, dipartimento, team, ...) titolare del rapporto contrattuale tra Cloud Temple e voi. ### Principio di un'organizzazione L'organizzazione ha quattro ruoli principali: -- Rappresenta __l'entità contrattuale__ per quanto riguarda i aspetti di tracciamento e fatturazione, -- Definisce __la configurazione globale del meccanismo di autenticazione__: l'autenticazione può essere locale a livello di Console oppure remota tramite un servizio di federazione dell'identità, -- Gestisce l'insieme di __tutti gli account utente__, -- __Federizza i tenant__ (Produzione, Preproduzione, Sviluppo, Applicazione 1, Applicazione 2, ...) che definisci per i tuoi requisiti architetturali Cloud. +- Rappresenta __l'entità contrattuale__ per gli aspetti di monitoraggio e fatturazione, +- Definisce __la configurazione globale del meccanismo di autenticazione__: l'autenticazione può essere locale a livello di Console o remota tramite un servizio di federazione delle identità, +- Gestisce l'insieme dei __account utente__, +- __Raggruppa i tenant__ (Produzione, Preproduzione, Dev, Applicazione 1, Applicazione 2, ...) che definisci per le esigenze della tua architettura Cloud. -I ruoli (diritti/permessi) degli utenti sono configurabili per ciascun tenant definito nella tua organizzazione. Ad esempio, un account può essere autorizzato a richiedere risorse in un tenant, ma non in un altro. +I ruoli (diritti/permessi) degli utenti sono configurabili per ogni tenant definito nella tua organizzazione. Ad esempio, un account può essere autorizzato a richiedere risorse in un tenant, ma non in un altro. -### Authentication mechanisms +### Meccanismi di autenticazione -The Console allows you to configure the __authentication mechanism at the organization level__. You can use the Console's built-in local authentication directory, or connect your organization to one of your external authentication directories. +La Console consente, a livello di organizzazione, __la configurazione del meccanismo di autenticazione__. È possibile +utilizzare il repository di autenticazione locale della Console oppure collegare la propria organizzazione a uno dei +propri repository di autenticazione. -The following external authentication directories are supported: +I seguenti repository esterni sono supportati: -- OpenID Connect-compatible directories, -- SAML-compatible directories, -- Microsoft ADFS -- Microsoft EntraID (Microsoft Azure Active Directory) +- Repository compatibili con __OpenID Connect__, +- Repository compatibili con __SAML__, +- __Microsoft ADFS__ +- __Microsoft EntraID__ (Microsoft Azure Active Directory) - Amazon AWS Cognito - Okta - Auth0 -- Keycloak +- KeyCloak -:::info[Important] -An email address is required for all accounts originating from an identity federation. Accounts created without an email address will not be able to log in and may be automatically deleted. +:::info[Importante] +È richiesto un indirizzo e-mail per tutti gli account derivanti da una federazione di identità. Gli account creati senza indirizzo e-mail non potranno effettuare l'accesso e potrebbero essere eliminati automaticamente. ::: ## Tenant -Il tenant è un __raggruppamento di risorse all'interno di un'organizzazione__. Un'[Organizzazione](#organizzazioni) ha almeno un tenant (chiamato __tenant predefinito__, che può essere rinominato). Di solito, vengono utilizzati più tenant per suddividere responsabilità o ambiti tecnici. +Il tenant è un __raggruppamento di risorse all'interno di un'organizzazione__. Una [Organizzazione](#organisations) ha almeno un tenant (chiamato __tenant predefinito__, rinominabile). In genere, più tenant vengono utilizzati per segmentare le responsabilità o i perimetri tecnici. Ad esempio: - Un tenant __Produzione__ - Un tenant __Preproduzione__ - Un tenant __Test__ -- Un tenant __Qualifica__ +- Un tenant __Validazione__ -È tuttavia possibile organizzare le cose in base a una __visione applicativa__ o in base alla __criticità__: +È inoltre possibile organizzare le risorse con una __vista applicativa__ o per __criticità__: - Un tenant __Applicazione 1__ o __Criticità 1__ - Un tenant __Applicazione 2__ o __Criticità 2__ - ... -Le risorse tecniche richieste sono assegnate a un tenant specifico e non sono condivise con gli altri tenant. Ad esempio, un cluster di hypervisor e i relativi reti L2 sono disponibili solo in un tenant. +Le risorse tecniche ordinate sono assegnate a un tenant specifico e non sono condivise con gli altri tenant. Ad esempio, un cluster di iper-visor e le relative reti L2 sono disponibili solo in un tenant. Per quanto riguarda le reti, è possibile richiedere reti __'cross tenant'__ per garantire la continuità di rete tra i tenant. -Le autorizzazioni degli utenti devono essere definite in ciascun tenant. Pertanto, ogni organizzazione deve riflettere attentamente sui tenant desiderati. Questo aspetto viene generalmente affrontato durante il workshop di avvio, al momento della creazione dell'organizzazione. +I permessi degli utenti devono essere definiti in ogni tenant. Pertanto, ogni organizzazione deve valutare attentamente i tenant desiderati. Questo aspetto viene generalmente affrontato durante la sessione di inizializzazione, al momento della creazione dell'organizzazione. -È possibile evolvere l'architettura aggiungendo o rimuovendo tenant. +È possibile far evolvere l'architettura aggiungendo o rimuovendo tenant. -Un tenant non può essere vuoto. Deve essere necessariamente inizializzato con un insieme minimo di risorse: +Un tenant non può essere vuoto. Deve essere necessariamente inizializzato con un minimo di risorse: - Una zona di disponibilità (AZ, ovvero un datacenter fisico), - Un cluster di calcolo, - Uno spazio di archiviazione, - Un VLAN di rete. -| Riferimento al comando | Unità | SKU | +| Riferimento ordine | Unità | SKU | |--------------------------------------------------------------|----------|-------------------------| -| TENANT - *(REGIONE)* - Attivazione di un tenant | 1 tenant | csp:tenant:v1 | -| TENANT - *(REGIONE)* - Attivazione di una zona di disponibilità | 1 tenant | csp:(regione):iaas:az:v1 | +| TENANT - *(REGION)* - Attivazione di un tenant | 1 tenant | csp:tenant:v1 | +| TENANT - *(REGION)* - Attivazione di una zona di disponibilità | 1 tenant | csp:(region):iaas:az:v1 | -### Management dei proprietari su un tenant +### Gestione dei proprietari su un tenant -Ogni tenant ha almeno un proprietario, garantendo così una responsabilità chiara e una gestione efficace delle risorse associate. Inoltre, è possibile dichiarare più proprietari per uno stesso tenant, consentendo una collaborazione e una decisione condivisa. Di seguito sono riportate informazioni importanti da considerare durante la gestione di tali proprietari. +Ogni tenant dispone di almeno un proprietario, garantendo così una responsabilità chiara e una gestione efficace delle risorse associate. Inoltre, è possibile assegnare più proprietari allo stesso tenant, consentendo una collaborazione e una presa di decisioni condivisa. Di seguito, troverai informazioni importanti da considerare durante la gestione di questi proprietari. -#### Important information about owner management +#### Informazioni importanti sulla gestione dei proprietari -#### 1. Number of owners +#### 1. Numero di proprietari -- There is no technical limit on the number of owners that can be defined for the tenant. +- Non esiste un limite tecnico al numero di proprietari che possono essere definiti sul tenant. -- The management interface (UI) issues a warning when there are more than 3 owners, to encourage limiting the number of owners for security reasons and optimal access management. +- L'interfaccia di gestione (IHM) emette un avviso quando sono presenti più di 3 proprietari, al fine di incoraggiare a limitare il numero di proprietari per motivi di sicurezza e per una gestione ottimale degli accessi. #### 2. Aggiunta di un nuovo proprietario -- Durante l'aggiunta di un nuovo proprietario, l'aggiornamento dei suoi permessi potrebbe richiedere un tempo di attesa fino a 60 minuti. +- Durante l'aggiunta di un nuovo proprietario, l'aggiornamento delle sue autorizzazioni potrebbe richiedere fino a 60 minuti. -- Questo intervallo di propagazione è normale e garantisce che i diritti di accesso vengano correttamente applicati a tutti i servizi e le risorse associati. +- Questo tempo di propagazione è normale e garantisce che i diritti di accesso vengano applicati correttamente a tutti i servizi e alle risorse associati. -#### 2. Permissions di un proprietario +#### 2. Permessi di un proprietario -- Un proprietario riceverà tutte le autorizzazioni correlate ai prodotti abilitati nel suo tenant. +- Al proprietario verranno assegnati tutti i permessi relativi ai prodotti attivati sul suo tenant. -- Non è possibile modificare le autorizzazioni di un proprietario. +- Non è possibile modificare i permessi di un proprietario. #### 3. Rimozione di un proprietario - Per rimuovere un proprietario dal tenant, l'utente deve inviare una richiesta al supporto. -- Questa procedura garantisce che le modifiche ai diritti di accesso vengano effettuate in modo sicuro e conforme alle migliori pratiche di gestione degli accessi. +- Questa procedura garantisce che le modifiche ai diritti di accesso vengano effettuate in modo sicuro e in conformità alle best practice per la gestione degli accessi. -### Access authorization to a tenant: Allowed IPs +### Autorizzazione all'accesso a un tenant: IP autorizzati -Access to the cloud management console is strictly limited to previously authorized IP addresses, in compliance with the SecNumCloud certification requirements. This restriction ensures a heightened level of security by allowing access only from specified IP ranges, thereby minimizing the risk of unauthorized access and protecting the cloud infrastructure according to the highest security standards. +L'accesso alla console di gestione cloud è strettamente limitato agli indirizzi IP precedentemente autorizzati, in conformità con i requisiti della certificazione SecNumCloud. Questa restrizione garantisce un livello di sicurezza rafforzato consentendo l'accesso solo agli utenti provenienti da intervalli di IP specificati, minimizzando così i rischi di accesso non autorizzato e proteggendo l'infrastruttura cloud secondo gli standard di sicurezza più elevati. -Note: *The removal of an authorized IP address must be requested via support directly from the Cloud Temple console.* +Nota: *La rimozione di un IP autorizzato avviene tramite una richiesta di supporto nella console Cloud Temple.* -### Utilizzo delle risorse all'interno di un tenant +### Consumo di risorse all'interno di un tenant -È possibile visualizzare le risorse cloud utilizzate all'interno di un tenant, offrendo così una visione dettagliata dell'utilizzo dei diversi servizi distribuiti. Questa funzionalità consente agli utenti di monitorare in tempo reale il consumo delle proprie risorse, di identificare i servizi più utilizzati e di ottimizzare l'utilizzo in base alle esigenze. +È possibile visualizzare le risorse cloud consumate all'interno di un tenant, offrendo così una vista dettagliata dell'utilizzo dei diversi servizi distribuiti. Questa funzionalità consente agli utenti di monitorare in tempo reale il consumo delle proprie risorse, identificare i servizi più sollecitati e ottimizzarne l'utilizzo in base alle esigenze. -Nel menu della console, fare clic su "Report di consumo" e selezionare il periodo di tempo desiderato. Potrai quindi visualizzare in dettaglio il consumo delle risorse cloud nel periodo specificato, consentendoti di analizzare l'utilizzo dei servizi e ottimizzare la gestione di conseguenza: +Nel menu della console, fare clic su "Report di consumo" e selezionare il periodo di tempo desiderato. In questo modo sarà possibile visualizzare nel dettaglio il consumo delle risorse cloud nel periodo definito, consentendo di analizzare l'utilizzo dei servizi e ottimizzare di conseguenza la propria gestione: - + \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/console/iam/iam.md b/i18n/it/docusaurus-plugin-content-docs/current/console/iam/iam.md index 0fef9b58..4b9e5abb 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/console/iam/iam.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/console/iam/iam.md @@ -1,11 +1,11 @@ --- -title: Identity Access Management +title: Panoramica --- # Identity Access Management Il modulo IAM (Identity Access Management) della console Cloud Temple offre una soluzione completa per la gestione delle identità e degli accessi. -Permette di amministrare account locali supportando al contempo un'ibridazione con configurazioni esterne, compatibili con i protocolli standard di mercato come OIDC e SAML, per rispondere alle esigenze di flessibilità e sicurezza degli ambienti moderni. +Consente di amministrare account locali supportando al contempo un'integrazione ibrida con configurazioni esterne, compatibili con i protocolli standard di mercato come OIDC e SAML, per soddisfare le esigenze di flessibilità e sicurezza degli ambienti moderni.
@@ -19,8 +19,8 @@ Permette di amministrare account locali supportando al contempo un'ibridazione c Avvia il Quickstart →
-

Tutorials

+

Tutorial

Impara passo dopo passo a configurare e utilizzare i nostri servizi con guide dettagliate.

Scopri i tutorial →
-
+
\ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/console/iam/tutorials/sso_jumpcloud.md b/i18n/it/docusaurus-plugin-content-docs/current/console/iam/tutorials/sso_jumpcloud.md index eacb6e47..588e0888 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/console/iam/tutorials/sso_jumpcloud.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/console/iam/tutorials/sso_jumpcloud.md @@ -2,72 +2,71 @@ title: Esempio di federazione dell'identità con JumpCloud tags: - iam - - tutorial + - tutorials - onboarding --- - import ssoJumpcloud001 from '@site/docs/console/iam/tutorials/images/sso_jumpcloud_001.png'; import ssoJumpcloud002 from '@site/docs/console/iam/tutorials/images/sso_jumpcloud_002.png'; -Questo tutorial guida attraverso la configurazione dell'autenticazione unica (SSO) tra JumpCloud e la console Cloud Temple utilizzando il protocollo OpenID Connect (OIDC). +Questo tutorial guida alla configurazione dell'autenticazione unica (SSO) tra JumpCloud e la console Cloud Temple utilizzando il protocollo OpenID Connect (OIDC). -Per ulteriori informazioni dettagliate direttamente da JumpCloud, consulta la loro documentazione ufficiale sul SSO OIDC: [SSO con OIDC](https://jumpcloud.com/support/sso-with-oidc). +Per ulteriori informazioni dettagliate direttamente da JumpCloud, consulta la documentazione ufficiale sul SSO OIDC: [SSO with OIDC](https://jumpcloud.com/support/sso-with-oidc). ## Prerequisiti -Prima di iniziare, assicurati di aver raccolto tutte le informazioni necessarie da parte di Cloud Temple, in primo luogo l'URL di reindirizzamento specifica per la tua istanza Keycloak. +Prima di iniziare, assicurati di aver ottenuto le informazioni necessarie da Cloud Temple, in particolare l'URI di reindirizzamento specifico per la tua istanza Keycloak. -## Configurazione di un'applicazione OIDC in JumpCloud +## Configurazione in JumpCloud -Seguire queste istruzioni per configurare una nuova applicazione OIDC nella console di amministrazione JumpCloud: +Segui questi passaggi per configurare una nuova applicazione OIDC nella tua console di amministrazione JumpCloud: -1. **Creare una nuova applicazione:** - * Naviga nella sezione delle applicazioni di JumpCloud. - * Clicca su "Aggiungi" o "Crea nuova applicazione". - * Seleziona l'opzione per un'integrazione di applicazione personalizzata ("Integrazione di applicazione personalizzata"). +1. **Crea una nuova applicazione:** + * Naviga alla sezione delle applicazioni in JumpCloud. + * Fai clic su "Aggiungi" o "Crea una nuova applicazione". + * Scegli l'opzione per un'integrazione di applicazione personalizzata ("Custom Application Integration"). -2. **Configurare SSO OIDC:** - * Scegli "Gestione Single Sign-On (SSO)". - * Seleziona "Configura SSO con OIDC". +2. **Configura il SSO OIDC:** + * Seleziona "Manage Single Sign-On (SSO)". + * Scegli "Configure SSO with OIDC". Configurazione SSO OIDC JumpCloud -3. **Inserire le URI di reindirizzamento:** - * Nel campo appropriato (spesso chiamato "URI di reindirizzamento" o "Callback URL"), inserisci l'URI fornita da Cloud Temple. Seguirà generalmente questo formato: +3. **Inserire gli URI di reindirizzamento:** + * Nel campo appropriato (spesso denominato "Redirect URIs" o "Callback URLs"), inserisci l'URI fornita da Cloud Temple. Seguirà generalmente questo formato: ``` https://keycloak-shiva.cloud-temple.com/auth/realms//broker//endpoint ``` - * Sostituisci `` con gli identificativi specifici della tua azienda forniti da Cloud Temple. + *Sostituisci `` con le credenziali specifiche della tua azienda fornite da Cloud Temple.* -4. **Scegliere il tipo di autenticazione del client:** - * Seleziona `Client Secret Post` come "Tipo di autenticazione del client". +4. **Scegliere il tipo di autenticazione client:** + * Seleziona `Client Secret Post` come "Client Authentication Type". 5. **Inserire l'URL di accesso:** - * Nel campo "URL di accesso", inserisci l'URL che utilizzi per accedere alla tua console Cloud Temple. Ad esempio: + * Nel campo "Login URL", inserisci l'URL che utilizzi per accedere alla tua console Cloud Temple. Ad esempio: ``` https://.shiva.cloud-temple.com ``` - * Sostituisci `` con l'identificatore unico della tua istanza Cloud Temple. + *Sostituisci `` con l'identificativo univoco della tua istanza Cloud Temple.* -6. **Configurare il mappaggio degli attributi:** - * Nella sezione "Mappatura degli attributi" (o equivalente), assicurati che gli attributi seguenti siano selezionati per essere inviati a Cloud Temple: +6. **Configurare la mappatura degli attributi:** + * Nella sezione "Attribute Mapping" (o equivalente), assicurati che i seguenti attributi siano selezionati per essere inviati a Cloud Temple: * `Email` * `Profile` (può includere nome, cognome, ecc.) - Mappatura degli attributi JumpCloud + Mappatura Attributi JumpCloud -7. **Assegnare i gruppi:** - * Assegna i gruppi di utenti JumpCloud che dovrebbero avere accesso alla console Cloud Temple tramite questa applicazione SSO. +7. **Assegnare gruppi:** + * Assegna i gruppi di utenti JumpCloud che devono avere accesso alla console Cloud Temple tramite questa applicazione SSO. 8. **Attivare l'applicazione:** - * Clicca su "Attiva" o "Salva" per completare la configurazione dell'applicazione. + * Fai clic su "Activate" o "Save" per completare la configurazione dell'applicazione. -9. **Fornire gli identificativi a Cloud Temple:** +9. **Fornire le credenziali a Cloud Temple:** * Dopo l'attivazione, JumpCloud ti fornirà un **Client ID** e un **Client Secret**. - * Comunica queste informazioni di maniera sicura al tuo contatto Cloud Temple per completare la configurazione della federazione da parte di Keycloak. + * Comunica queste due informazioni in modo sicuro al tuo referente Cloud Temple per completare la configurazione della federazione lato Keycloak. -Una volta che Cloud-Temple avrà configurato la federazione utilizzando gli identificativi forniti, i tuoi utenti assegnati potranno connettersi alla console Cloud Temple utilizzando le loro credenziali JumpCloud. +Una volta che Cloud-Temple avrà configurato la federazione con le credenziali fornite, i tuoi utenti assegnati potranno accedere alla console Cloud Temple utilizzando le proprie credenziali JumpCloud. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/console/metrics/concepts.md b/i18n/it/docusaurus-plugin-content-docs/current/console/metrics/concepts.md index f2829162..2a97488c 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/console/metrics/concepts.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/console/metrics/concepts.md @@ -1,5 +1,5 @@ --- -title: Metrologia +title: Metriche --- import metricsHypervisorsCo2 from '@site/docs/console/metrics/images/metrics_hypervisors_co2.png' import shivaHome from '@site/docs/console/metrics/images/shiva_home.png' @@ -27,109 +27,111 @@ import grafanaDatasourceAlerting from '@site/docs/console/metrics/images/grafana import grafanaDatasourceWorking from '@site/docs/console/metrics/images/grafana_datasource_working.png' import grafanaDashboards_001 from '@site/docs/console/metrics/images/grafana_dashboards_001.png' -La maggior parte dei clienti __Cloud Temple__ dispone di strumenti di visualizzazione, monitoraggio e metrologia per il tracciamento delle proprie operazioni. +La maggior parte dei clienti __Cloud Temple__ dispone di strumenti di visualizzazione, monitoraggio e metriche per il tracciamento delle proprie operazioni. -La filosofia della Console è consentire l'accesso ai dati in modo da integrarsi in questi strumenti tramite un proxy Prometheus integrato. +La filosofia della Console consiste nel consentire l'accesso ai dati per integrarsi in questa suite di strumenti tramite un proxy Prometheus integrato. -Questo proxy ti permette di interrogare e manipolare i dati da uno strumento di visualizzazione come [Grafana](https://grafana.com). +Questo proxy consente di interrogare e manipolare i dati da uno strumento di visualizzazione come [Grafana](https://grafana.com). -È tuttavia possibile visualizzare alcune metriche di prestazioni delle proprie risorse Cloud nell'interfaccia web della Console. +È comunque possibile visualizzare alcuni dati sulle prestazioni delle proprie risorse Cloud nell'interfaccia web della Console. -*__Nota:__ La filosofia __Cloud Temple__ non è quella di integrare esclusivamente grafici nell'interfaccia web, ma anche di offrire il massimo delle informazioni accessibili tramite l'API* +*__Nota :__ La filosofia di __Cloud Temple__ non si limita a integrare grafici nell'interfaccia web, ma mira anche a offrire il massimo delle informazioni accessibili tramite API.* -## Dashboards integrati nell'interfaccia web +## Dashboard integrate nell'interfaccia web -*__Nota:__ Per accedere a questi dashboards, è necessario disporre del permesso __'metric_read'__* +*__Nota :__ Per accedere a queste dashboard, è necessario disporre dell'autorizzazione __'metric_read'__* -### Panoramica generale +### Panoramica -La pagina iniziale della Console mostra il dashboard principale, che presenta l'insieme delle metriche utili a monitorare lo stato di ciascun prodotto a cui hai sottoscritto nel tuo ambito. In caso di problemi relativi ai tuoi prodotti VMware e/o OpenIaaS, verranno visualizzate delle avvisi, la cui colorazione indica il loro livello di gravità. +La pagina iniziale della Console visualizza la dashboard principale, presentando l'insieme delle metriche che consentono di avere uno stato di ciascun prodotto a cui si è sottoscritto nel proprio perimetro. In caso di problemi sui prodotti VMware e/o OpenIaaS, verranno visualizzate delle alert, il cui colore è legato alla loro importanza. -Questi avvisi sono cliccabili e reindirizzano alla pagina del prodotto corrispondente. +Queste alert sono cliccabili e reindirizzano alla pagina del prodotto interessato. -### Metriche VMware - Panoramica generale +### Metriche VMware - Panoramica -Nel menu __'VMware'__, è disponibile un dashboard specifico nel sottomenu __'Metriche'__. Esso raggruppa 4 schede: +Nel menu __'VMware'__, è disponibile una dashboard specifica nel sottomenu __'Metriche'__. Raggruppa 4 schede: #### Panoramica -Su questa scheda sono presenti alcune delle metriche già visualizzate nel dashboard generale trattato all'inizio del capitolo. +In questa scheda si trovano alcune delle metriche già presenti nel dashboard globale trattato all'inizio di questo capitolo. #### Calcolo -Su questa scheda sono disponibili il numero di __AZ__, di __Cluster__, di __ESX__, l'__emissione di carbonio__, la __stima del consumo__, nonché 7 grafici che forniscono una visione molto visiva del vostro ambiente VMware. La stima del consumo in kWh viene calcolata sulla base della media dei rilevamenti relativi al periodo selezionato, rapportata a un'ora. +In questa scheda sono riportati il numero di __AZ__, di __Clusters__, di __ESXs__, l'__emissione di carbonio__, la __stima dei consumi__, nonché 7 grafici +che offrono una panoramica molto visuale del vostro ambiente VMware. La stima dei consumi in kw/h è calcolata sulla media dei rilevamenti che coprono il periodo selezionato, rapportata a un'ora. -Potete scegliere l'intervallo di date da includere, nonché il tipo di raggruppamento dei dati (per impostazione predefinita, i dati sono raggruppati per l'intero ambito). Ad esempio, selezionando __Host__: +È possibile scegliere l'intervallo di date da coprire, nonché il tipo di raggruppamento dei dati (per impostazione predefinita, i dati sono raggruppati per l'intero perimetro). Ad esempio, selezionando __Host__: -Passando il mouse sopra ciascun grafico, vengono visualizzati i nomi delle risorse e i relativi valori. Cliccando sui grafici stessi, viene aperta una piccola tooltip che permette di consultare più facilmente i dettagli relativi alla data selezionata: +Al passaggio del mouse su ciascuno dei grafici, vengono visualizzati i dettagli dei nomi delle risorse e i relativi valori. Al clic su questi stessi grafici, si apre un piccolo tooltip che vi permette di consultare più facilmente i dettagli corrispondenti alla data selezionata: #### Archiviazione -Come nell'ottica "Calcolo", vengono visualizzate diverse informazioni: il numero di __AZ__, di __datastore clusters__, di __datastores__, nonché due grafici. Lo stesso principio di filtraggio si applica, ma qui è possibile raggruppare per __Cluster SDRS__ e __Datastore__. +Allo stesso modo della scheda "Calcolo", sono presenti diverse informazioni: il numero di __AZ__, di __cluster di datastore__, di __datastore__ nonché 2 grafici. Si applica lo stesso principio di filtraggio, ma in questo caso è possibile raggruppare per __Cluster SDRS__ e __Datastore__. #### Macchine virtuali -Qui qui si trova una panoramica generale sulla salute delle macchine virtuali. +Qui è disponibile una visione globale dello stato di salute delle macchine virtuali. -Questa sintesi fornisce, nell'intervallo di tempo selezionato: +Questa sintesi fornisce, per l'intervallo di tempo selezionato: -- il numero di CPU e la __media di utilizzo CPU__, -- la quantità di RAM in GB e la __media di utilizzo della memoria__, -- le medie della __latenza di accesso allo storage__ in lettura e scrittura, -- la media del valore __'CPU Ready'__ della macchina virtuale (che corrisponde al tempo medio di attesa della disponibilità di un core fisico da parte della macchina virtuale). +- il numero di CPU e la __media di utilizzo della CPU__, +- il numero di Go di memoria e la __media di utilizzo della memoria__, +- le medie di __latenza di accesso allo storage__ in lettura e in scrittura, +- la __'CPU Ready'__ media della macchina virtuale (che corrisponde al tempo medio di attesa per la disponibilità di un core fisico da parte della macchina virtuale). -Per ogni VM, è possibile accedere all'archivio delle prestazioni facendo clic sull'icona verde __'Storico'__ nella colonna Azioni: +Per ogni VM, è possibile accedere alla cronologia delle prestazioni facendo clic sull'icona verde __'Cronologia'__ della macchina virtuale nella colonna Azioni: -Si accede così alla pagina di visualizzazione grafica dei dati storici, che include una vista __ambientale delle prestazioni__: +Si accede così alla pagina di visualizzazione grafica dei dati storici, che include una vista __prestazioni ambientali__: -### VMware Metrics - View by resource +### Metriche VMware - Vista per risorsa -It is also possible to view some metrics related to VMware, this time more specifically for a given __Host__ or __Datastore__. +È possibile consultare anche una parte delle metriche relative a VMware, ma questa volta in modo più mirato per un __Host__ o un __Datastore__ specifico. #### Host -Nella vista di un Host, è possibile consultare, per un periodo specifico, il __consumo energetico__ e la stima delle __emissioni di carbonio__. +Nella vista di un Host, è possibile consultare, per un determinato periodo, il __consumo energetico__ e la stima delle __emissioni di carbonio__. #### Datastore -Nella vista di un Datastore, è possibile consultare per un periodo specifico le __IOPS__. +Nella vista di un Datastore, è possibile consultare gli __IOPS__ per un periodo determinato. -### OpenIaaS Metrics +### Metriche OpenIaaS -In the __'OpenIaaS'__ menu, a dedicated dashboard is available in the __'Metrics'__ submenu. It includes 3 tabs: +Nel menu __'OpenIaaS'__, è disponibile una dashboard specifica nel sottomenu __'Metriche'__. Raggruppa 3 schede : #### Panoramica -Su questa scheda sono presenti alcune delle metriche già visualizzate nel dashboard generale trattato all'inizio di questo capitolo. +In questa scheda sono riportate alcune delle metriche già presenti nel dashboard globale trattato all'inizio di questo capitolo. #### Calcolo -Su questa scheda è possibile visualizzare il numero di __AZ__, di __Cluster__, di __Host__, nonché 5 grafici che forniscono una panoramica molto visiva del vostro ambiente OpenIaaS. +In questa scheda sono riportati il numero di __AZ__, __Clusters__, __Hosts__, nonché 5 grafici +che offrono una panoramica molto visuale del tuo ambiente OpenIaaS. -È possibile selezionare l'intervallo di date da coprire, nonché il tipo di raggruppamento dei dati (per impostazione predefinita, i dati sono raggruppati per l'intero ambito). Ad esempio, scegliendo __Host__: +È possibile scegliere l'intervallo di date da considerare, nonché il tipo di raggruppamento dei dati (per impostazione predefinita, i dati sono raggruppati per l'intero perimetro). Ad esempio, selezionando __Host__: @@ -137,7 +139,7 @@ Su questa scheda è possibile visualizzare il numero di __AZ__, di __Cluster__, #### Archiviazione -Allo stesso modo dell'ottica "Calcolo", vengono visualizzate diverse informazioni: il numero di __AZ__, di __Cluster__, di __Datastore__ e un grafico. Lo stesso principio di filtraggio si applica, ma qui è possibile raggruppare per __Block Storage__. +Allo stesso modo della scheda "Calcolo", sono disponibili diverse informazioni: il numero di __AZ__, __Cluster__, __Datastore__ nonché un grafico. Si applica lo stesso principio di filtraggio, ma in questo caso è possibile raggruppare per __Block Storage__. @@ -145,14 +147,14 @@ Allo stesso modo dell'ottica "Calcolo", vengono visualizzate diverse informazion Integrazione della Console con Grafana -La Console di Cloud Temple può essere utilizzata come datasource per la tua infrastruttura [Grafana](https://grafana.com/). +La Console di Cloud Temple può essere utilizzata come origine dati per la tua infrastruttura [Grafana](https://grafana.com/). -La console è compatibile con Prometheus, il che permette di aggiungerla in Grafana come datasource di tipo Prometheus. Potrai così: +La console è compatibile con Prometheus, il che consente di aggiungerla a Grafana come origine dati di tipo Prometheus. Potrai così: -- Visualizzare l'insieme delle tue metriche. -- Creare dashboard personalizzati adatti alle tue esigenze. +- Visualizzare tutte le tue metriche. +- Creare i tuoi dashboard personalizzati in base alle tue esigenze. -Cloud Temple mette inoltre a disposizione una [collezione di dashboard](https://github.com/Cloud-Temple/console-grafana-iaas) pronti all'uso, che puoi utilizzare come base o adattare in base ai tuoi casi d'uso. +Cloud Temple mette inoltre a disposizione una [raccolta di dashboard](https://github.com/Cloud-Temple/console-grafana-iaas) pronte all'uso, che puoi utilizzare come base o adattare in base ai tuoi casi d'uso. @@ -160,45 +162,46 @@ Cloud Temple mette inoltre a disposizione una [collezione di dashboard](https:// -### Configurare la Console come datasource in Grafana +### Configurare la Console come origine dati in Grafana -L'obiettivo è arricchire l'osservabilità dell'infrastruttura Cloud tramite la metrica Cloud Temple. +L'obiettivo è arricchire l'osservabilità della vostra infrastruttura Cloud tramite la telemetria Cloud Temple. #### Prerequisiti - Un'istanza Grafana con accesso alle API della Console. -- Un accesso amministrativo all'istanza Grafana per poter configurare i *datasources*. -- Un personal access token con almeno il permesso `metrics_read`. +- Un accesso di amministrazione sull'istanza Grafana per poter configurare le *datasource*. +- Un token di accesso personale con almeno l'autorizzazione `metrics_read`. -#### Configuration +#### Configurazione -Nella __configurazione__ di Grafana, passare alla scheda "__datasources__" e fare clic su "__Add datasource__". +Nella __configurazione__ di Grafana, andare alla scheda "__datasources__" e fare clic su "__Add datasource__". -Nell'URL, specificare l'__URL dell'API Console Metrics__ senza la versione e che termina con "__/prometheus__" +Nell'__URL__, fornire l'__URL dell'API Console Metrics__ senza la versione e che termina con "__/prometheus__" (esempio: [https://shiva.cloud-temple.com/api/metric/prometheus](https://shiva.cloud-temple.com/api/metric/prometheus)) -Nella sezione "__Autenticazione__", abilitare l'opzione __Basic Auth__. +Nell'__autenticazione__, attivare l'opzione __Basic Auth__. -Nella sezione "__Basic Auth Details__", configurare __username__ e __password__ utilizzando rispettivamente gli __id__ e __secret__ di un __Token di accesso personale__ con il permesso __metrics_read__. +Nella sezione "__Basic Auth Details__", configurare il __username__ e la __password__ utilizzando +rispettivamente l'__id__ e il __secret__ di un __Token di accesso personale__ con il permesso __metrics_read__. -Nella sezione "__Alerting__", impostare la proprietà __HTTP Method__ su __GET__. +Nella sezione "__Alerting__", configurare la proprietà __HTTP Method__ su __GET__. #### Risultato -Per confermare che la configurazione sia corretta e funzionante, premi il pulsante "__Salva e testa__". +Per confermare che la configurazione sia corretta e funzionante, clicca sul pulsante "__Save & test__". -Dovresti vedere apparire una barra informativa che ti comunica che la configurazione è andata a buon fine. +Dovresti visualizzare un banner che ti informa che la configurazione è stata completata con successo. -Trovate qui un insieme completo di esempi di configurazione per Grafana: [https://github.com/Cloud-Temple/console-grafana-iaas](https://github.com/Cloud-Temple/console-grafana-iaas) +Troverai una serie completa di esempi di configurazione per Grafana qui: [https://github.com/Cloud-Temple/console-grafana-iaas](https://github.com/Cloud-Temple/console-grafana-iaas) - + \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/console/orders.md b/i18n/it/docusaurus-plugin-content-docs/current/console/orders.md index 108697a7..822b8410 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/console/orders.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/console/orders.md @@ -1,5 +1,5 @@ --- -title: Distribuire risorse +title: Distribuire le risorse --- import shivaOrdersList from '@site/docs/console/images/shiva_orders_list.png' import shivaOrderNotif_001 from '@site/docs/console/images/shiva_order_notif_001.png' @@ -30,243 +30,243 @@ import shivaOrdersIaasCpoolMemory from '@site/docs/console/images/shiva_orders_i ## Concetto -Il monitoraggio del deployment delle nuove risorse è gestito nel menu __'Ordini'__ accessibile nella barra verde a sinistra dello schermo. +Il monitoraggio del deployment di nuove risorse avviene nel menu __'Comandi'__ accessibile nella barra verde a sinistra dello schermo. -Consente di visualizzare le risorse Cloud ordinate, in fase di deployment e eventuali errori all'interno di un [Tenant](iam/concepts.md#tenant) della propria [Organizzazione](iam/concepts.md#organizzazioni). +Consente di visualizzare le risorse Cloud ordinate, in fase di deployment e gli eventuali errori all'interno di un [Tenant](iam/concepts.md#tenant) della tua [Organisation](iam/concepts.md#organisations). -*__Nota: Al momento, non è ancora possibile visualizzare un quadro generale a livello di organizzazione di tutte le risorse distribuite nei diversi tenant.__ Questo aspetto sarà affrontato in futuro con l'implementazione di un portale dedicato al committente (nel senso di firmatario) e al controllo della propria organizzazione.* +*__Nota : al momento, non è ancora possibile visualizzare globalmente, a livello di organizzazione, l'insieme delle risorse deployate nei diversi tenant.__ Questo argomento verrà trattato in seguito con l'implementazione di un portale dedicato al committente (nel senso di firmatario) e alla gestione della propria organizzazione.* -Il deployment delle risorse o la loro rimozione avviene all'interno di ciascun prodotto nei menu __'IaaS'__ e __'Rete'__ a sinistra nello schermo nella barra verde. +Il deployment delle risorse o la loro rimozione avvengono in ciascun prodotto nei menu __'IaaS'__ e __'Rete'__ a sinistra dello schermo nella barra verde. -È inoltre possibile visualizzare direttamente le consegne nelle notifiche della console Cloud Temple: +È inoltre possibile visualizzare direttamente le consegne a livello di notifiche della console Cloud Temple : -Dalla pagina degli ordini, è possibile visualizzare lo stato di avanzamento di una consegna e, eventualmente, interagire con l'équipe fornendo commenti o ulteriori informazioni: +Dalla pagina dei comandi, è possibile visualizzare lo stato di avanzamento di una consegna e, eventualmente, interagire con il team fornendo commenti o precisazioni : -__Nota__: __Non è possibile avviare più ordini contemporaneamente per lo stesso tipo di risorsa. È quindi necessario attendere il completamento dell'ordine in corso prima di poterne avviare un altro.__ Ciò garantisce una gestione efficiente e ordinata delle risorse all'interno del proprio ambiente. +__Nota__ : __non è possibile avviare più comandi dello stesso tipo di risorsa simultaneamente. Dovrai quindi attendere che il comando in corso venga elaborato e completato prima di poterne eseguire uno nuovo. Ciò garantisce una gestione efficiente e ordinata delle risorse all'interno del tuo ambiente.__ -## Richiedere una nuova zona di disponibilità +## Ordinare una nuova zona di disponibilità -È possibile aggiungere una nuova zona di disponibilità accedendo al menu "__Ordine__". Questa opzione ti permette di espandere le tue risorse e di migliorare la disponibilità e la resilienza delle tue applicazioni in pochi clic soltanto: +È possibile aggiungere una nuova zona di disponibilità accedendo al menu "__Ordine__". Questa opzione consente di estendere le proprie risorse e migliorare la disponibilità e la resilienza delle applicazioni con pochi semplici clic: -Inizia selezionando la posizione desiderata, scegliendo prima la regione geografica, quindi la zona di disponibilità (AZ) corrispondente tra quelle disponibili. Questa fase permette di adattare il deployment delle tue risorse in base alla localizzazione e ai requisiti della tua infrastruttura: +Si inizia selezionando la posizione desiderata, scegliendo prima la regione geografica e poi la zona di disponibilità (AZ) corrispondente tra quelle disponibili. Questa fase consente di adattare il deployment delle risorse in base alla posizione e ai requisiti della propria infrastruttura: -Successivamente, procedi alla selezione del tipo di cluster di hypervisor desiderato, scegliendo quello che meglio risponde alle esigenze di prestazioni e gestione della tua infrastruttura cloud: +Successivamente, procedere alla selezione del tipo di cluster di hypervisor desiderato, scegliendo quello che soddisfa al meglio le esigenze di prestazioni e gestione della propria infrastruttura cloud: -Seleziona quindi il numero di hypervisor nonché la quantità di memoria desiderata, in modo da adattare le risorse al carico di lavoro e alle esigenze specifiche del tuo ambiente cloud: +Selezionare quindi il numero di hypervisor e la quantità di memoria desiderata, al fine di adattare le risorse al carico di lavoro e ai requisiti specifici dell'ambiente cloud: -Seleziona quindi il numero di datastore da provisioning nel cluster e i loro tipi. È importante notare che il numero massimo di datastore consentito è 10, con un minimo di 2 datastore richiesti. Ogni tipo di datastore diverso comporterà la creazione di un datastoreCluster aggiuntivo. Ad esempio, se scegli 2 datastore di tipo "live" e 1 datastore di tipo "mass", si formeranno 2 datastoreClusters distinti: +Selezionare quindi il numero di datastore da provisionare nel cluster e i relativi tipi. È importante notare che il numero massimo di datastore autorizzato è 10, con un minimo di 2 datastore richiesti. Ogni tipo di datastore diverso comporterà la creazione di un datastoreCluster aggiuntivo. Ad esempio, se si scelgono 2 datastore di tipo "live" e 1 datastore di tipo "mass", ciò comporterà la formazione di 2 datastoreClusters distinti: -Definisci la dimensione di archiviazione necessaria per il backup, assicurandoti di prevedere una capacità equivalente a quella del tuo archiviazione di produzione. Tieni conto di un tasso di compressione medio di 2 per ottimizzare lo spazio di backup e garantire una protezione efficace dei tuoi dati: +Definire la dimensione di storage necessaria per il backup, assicurandosi di prevedere una capacità equivalente a quella dello storage di produzione. Tenere conto di un tasso di compressione medio di 2 per ottimizzare lo spazio di backup e garantire una protezione efficace dei dati: -Seleziona i network da propagare in base alle tue esigenze. Hai inoltre la possibilità di abilitare l'opzione "Accesso Internet" se necessario, definendo il numero di indirizzi IP desiderati, con una scelta compresa tra 1 e un massimo di 8: +Selezionare le reti da propagare in base alle proprie esigenze. È inoltre possibile attivare l'opzione "Accesso internet" se necessario, definendo il numero di indirizzi IP desiderati, con una scelta compresa tra 1 e un massimo di 8: -Otterrai quindi un riepilogo delle opzioni selezionate prima di confermare il tuo ordine. +Si ottiene quindi un riepilogo delle opzioni selezionate prima di confermare l'ordine. -## Richiedere risorse di archiviazione aggiuntive +## Richiesta di risorse di archiviazione aggiuntive -La logica di allocazione dello storage in modalità blocco sui cluster di calcolo si basa sulla tecnologia __IBM SVC (San Volume Controller)__ e __IBM FlashSystem__. Lo storage è organizzato in __LUN da almeno 500 GiB__, presentate secondo la tecnologia utilizzata: +La logica di allocazione dello storage in modalità a blocchi sui cluster di calcolo si basa sulla tecnologia __IBM SVC (San Volume Controller)__ e __IBM FlashSystem__. Lo storage è organizzato in __LUN da almeno 500 GiB__, presentate a seconda della tecnologia utilizzata : -- Per __VMware__: in forma di __datastore__ raggruppati in __cluster SDRS (Storage Distributed Resource Scheduler)__ -- Per __Bare Metal__: in forma di __volumi__ -- Per __Open IaaS__: in forma di __Storage Repository (SR)__ +- Per __VMware__ : sotto forma di __datastore__ raggruppati in __cluster SDRS (Storage Distributed Resource Scheduler)__ +- Per __Bare Metal__ : sotto forma di __volumi__ +- Per __Open IaaS__ : sotto forma di __Storage Repository (SR)__ -Ogni datastore eredita una __classe di prestazioni__ definita in IOPS/To (da 500 a 15000 IOPS/To per il FLASH, senza garanzia per il MASS STORAGE). Il limite di IOPS viene applicato __a livello di datastore__ (e non per VM), il che significa che tutte le macchine virtuali condividendo lo stesso datastore condividono il quota di IOPS assegnata. +Ogni datastore eredita una __classe di prestazioni__ definita in IOPS/TiB (da 500 a 15000 IOPS/TiB per il FLASH, o senza garanzia per il MASS STORAGE). La limitazione degli IOPS viene applicata __a livello di datastore__ (e non per VM), il che significa che tutte le macchine virtuali che condividono lo stesso datastore condividono la quota di IOPS assegnata. -__Punti chiave da ricordare__: +__Punti chiave da ricordare__ : -- __Dimensione minima__: 500 GiB per LUN -- __Prestazioni__: proporzionali al volume allocato (es: 2 TiB nella classe Standard = 3000 IOPS massimi) -- __Organizzazione__: i datastore dello stesso tipo vengono automaticamente raggruppati in cluster di datastore -- __Disponibilità__: 99,99% misurata mensilmente, incluse le finestre di manutenzione -- __Spazio necessario__: prevedere sempre lo 10% di spazio libero per i snapshot di backup e l'equivalente della somma della RAM delle VM per i file .VSWP +- __Dimensione minima__ : 500 GiB per LUN +- __Prestazioni__ : Proporzionali al volume assegnato, __entro il limite di un tetto fisico assoluto per LUN__ (es: 2 TiB in classe Standard = 3000 IOPS, ma una LUN da 10 TiB avrà un massimo di 30 000 IOPS). Questo tetto varia in base alla classe (10 000 IOPS / 512 MB/s per la classe Essenziale, e 30 000 IOPS / 1024 MB/s per le classi superiori). +- __Organizzazione__ : I datastore dello stesso tipo vengono automaticamente raggruppati in cluster di datastore +- __Disponibilità__ : 99,99% misurato mensilmente, finestre di manutenzione incluse +- __Spazio necessario__ : Prevedere sempre il 10% di spazio libero per gli snapshot di backup e l'equivalente della somma delle RAM delle VM per i file .VSWP -### Deploy a new compute cluster +### Distribuire un nuovo cluster di calcolo -Place a request for a hypervisor cluster by selecting the options that best suit your virtualization requirements. Define key characteristics such as the number of hypervisors, cluster type, amount of memory, and required computing resources: +Procedi all'ordine di un cluster di hypervisor selezionando le opzioni adatte alle tue esigenze di virtualizzazione. Definisci le caratteristiche chiave come il numero di hypervisor, il tipo di cluster, la quantità di memoria, nonché le risorse di calcolo richieste: -Select the availability zone: +Seleziona la zona di disponibilità: -Choose the compute blade type: +Scegli il tipo di blade di calcolo: -You can then select existing networks to propagate, or create new ones directly at this stage, depending on your infrastructure needs. Note that the total number of configurable networks is limited to a maximum of 20: +Hai successivamente la possibilità di selezionare reti già esistenti e di propagarle, oppure di crearne di nuove direttamente in questa fase, in base alle esigenze della tua infrastruttura. Tieni presente che il numero totale di reti configurabili è limitato a un massimo di 20: -You will then receive a summary of the selected options before validating your order, after which you can view your ongoing order: +Otterrai successivamente un riepilogo delle opzioni selezionate prima di confermare il tuo ordine e potrai successivamente visualizzare il tuo ordine in corso: -### Distribuire un nuovo cluster di archiviazione +### Distribuire un nuovo cluster di storage -Nel menu "__comando__", effettua l'ordine di un __nuovo cluster di archiviazione__ per il tuo ambiente selezionando le opzioni che corrispondono ai tuoi requisiti in termini di capacità, prestazioni e ridondanza. Seleziona la posizione: +Nel menu "__ordine__", procedere all'ordine di un __nuovo cluster di storage__ per il proprio ambiente selezionando le opzioni che corrispondono alle proprie esigenze in termini di capacità, prestazioni e ridondanza. Selezionare la posizione: -Definisci il numero di datastores da provisioning all'interno del cluster, nonché il loro tipo, rispettando i seguenti limiti: un minimo di 2 datastores e un massimo di 10 possono essere configurati. Scegli i tipi di datastore che meglio rispondono ai tuoi bisogni in termini di prestazioni, capacità e utilizzo, al fine di ottimizzare l'archiviazione del tuo ambiente: +Definire il numero di datastore da provisionare nel cluster e il relativo tipo, rispettando i seguenti limiti: è possibile configurare un minimo di 2 datastore e un massimo di 10. Scegliere i tipi di datastore che soddisfano meglio le proprie esigenze in termini di prestazioni, capacità e utilizzo, al fine di ottimizzare lo storage dell'ambiente: -Seleziona il tipo di archiviazione desiderato tra le diverse opzioni disponibili: +Selezionare il tipo di storage desiderato tra le diverse opzioni disponibili: -Successivamente, accederai a un riepilogo completo delle opzioni selezionate, che ti permetterà di verificare tutti i parametri prima di confermare definitivamente il tuo ordine: +Si accede quindi a un riepilogo completo delle opzioni selezionate, che consente di verificare tutti i parametri prima di confermare definitivamente l'ordine: -### Deploy a new datastore within a VMware SDRS cluster +### Distribuire un nuovo datastore all'interno di un cluster SDRS VMware -In this example, we will add block storage for a VMware infrastructure. -To add an additional datastore to your SDRS cluster, go to the __'Infrastructure'__ submenu, then __'VMware'__. -Select the desired VMware stack and availability zone, then navigate to the __'Storage'__ submenu. +In questo esempio, aggiungeremo storage a blocchi per un'infrastruttura VMware. +Per aggiungere un datastore aggiuntivo nel tuo cluster di storage SDRS, vai nel sottomenu __'Infrastruttura'__ e poi __'VMWare'__. +Seleziona quindi lo stack vmware e la zona di disponibilità. Vai quindi nel sottomenu __'Storage'__. -Choose the SDRS cluster that matches the performance characteristics you require, and click the __'Add a datastore'__ button located in the table listing the datastores. +Seleziona il cluster SDRS corrispondente alle caratteristiche di prestazioni desiderate e fai clic sul pulsante __'Aggiungi datastore'__ che si trova nella tabella +con l'elenco dei datastore. -__Note__: +__nota__ : -- *The minimum size of an activatable LUN on a cluster is __500 GiB__.* -- *Datastore performance ranges from an average of 500 iops/TiB to 15,000 iops/TiB on average. __This is a software-based limit enforced at the storage controller level__.* -- *The disk volume billing for your organization is the sum of all LUNs across the availability zones used.* -- *The __'order'__ and __'compute'__ permissions are required on the account to perform this action.* +- *La dimensione della più piccola LUN attivabile su un cluster è di __500 GiB__.* +- *Le prestazioni di un datastore vanno da 500 IOPS/TiB in media fino a 15000 IOPS/TiB in media. __Si tratta di una limitazione software realizzata a livello dei controller di storage__, soggetta a un limite hardware assoluto di 30 000 IOPS e 1024 MB/s massimo per LUN.* +- *Il calcolo del volume di disco consumato dalla tua organizzazione è la somma di tutte le LUN su tutte le AZ utilizzate*.* +- *I permessi __'order'__ e __'compute'__ sono necessari all'account per eseguire questa azione.* -### Richiedere nuovi reti +### Ordinare nuove reti -La tecnologia di rete utilizzata sull'infrastruttura Cloud Temple si basa su [VPLS](https://fr.wikipedia.org/wiki/Virtual_Private_LAN_Service). Ti permet di beneficiare di __reti di livello 2 con continuità tra le tue zone di disponibilità all'interno di una regione__. +La tecnologia di rete utilizzata sull'infrastruttura Cloud Temple si basa su [VPLS](https://fr.wikipedia.org/wiki/Virtual_Private_LAN_Service). Consente di disporre di __reti di livello 2 in continuità tra le proprie zone di disponibilità all'interno di una regione__. +È inoltre possibile condividere le reti tra i propri tenant e terminarle in una zona di hosting. +In linea di massima, è possibile immaginare una rete Cloud Temple come un vlan 802.1q disponibile in ogni punto del proprio tenant. -È inoltre possibile condividere reti tra i tuoi tenant e terminarle in una zona di hosting. -In termini basilari, puoi immaginare una rete Cloud Temple come un VLAN 802.1q disponibile in ogni punto del tuo tenant. +Le reti sulla piattaforma Cloud Temple sono di __livello 2 (VLAN)__ basate sulla tecnologia __VPLS (Virtual Private LAN Service)__. Questa tecnologia consente di disporre di una __continuità di rete tra le proprie zone di disponibilità__ all'interno di una regione, con prestazioni garantite: -Le reti sulla piattaforma Cloud Temple sono di __livello 2 (VLAN)__ basate sulla tecnologia __VPLS (Virtual Private LAN Service)__ . Questa tecnologia ti consente di godere di una __continuità di rete tra le tue zone di disponibilità__ all'interno di una regione, con prestazioni garantite: +- __Latenza intra-AZ__ : < 3 ms +- __Latenza inter-AZ__ : < 5 ms -- __Latenza intra-AZ__ : < 3 ms -- __Latenza inter-AZ__ : < 5 ms +__Flessibilità delle reti__ : -__Flessibilità delle reti__: +- Una rete può essere __condivisa tra più cluster__ della stessa zona di disponibilità +- Una rete può essere __propagata tra più zone di disponibilità__ della stessa regione +- Una rete può essere __condivisa tra diversi tenant__ della propria organizzazione +- Una rete può essere __terminata in una zona di hosting__ per le proprie apparecchiature fisiche +- __Limite__ : Massimo 20 reti per ordine. È possibile effettuare più ordini consecutivi per estendere questo numero in base alle proprie esigenze -- Una rete può essere __condivisa tra diversi cluster__ della stessa zona di disponibilità -- Una rete può essere __propagata tra diverse zone di disponibilità__ della stessa regione -- Una rete può essere __condivisa tra diversi tenant__ della tua organizzazione -- Una rete può essere __terminata in una zona di hosting__ per i tuoi dispositivi fisici -- __Limite__ : massimo 20 reti per richiesta. Puoi effettuare più richieste consecutive per superare questo limite in base alle tue esigenze - -La richiesta di una nuova rete e le decisioni relative alla condivisione tra i tuoi tenant vengono effettuate nel menu __'Rete'__ della barra verde a sinistra dello schermo. Le reti verranno prima create, quindi verrà generata una richiesta separata per la propagazione. Puoi monitorare lo stato delle richieste in corso accedendo all'opzione "Richiesta" nel menu, oppure facendo clic sui label informativi che ti reindirizzano alle richieste attive o in elaborazione. +L'ordine di una nuova rete e le decisioni di condivisione tra i propri tenant vengono eseguite nel menu __'Rete'__ della barra verde a sinistra dello schermo. Le reti verranno prima create, quindi verrà generato un ordine separato per propagarle. È possibile monitorare l'avanzamento degli ordini in corso accedendo alla scheda "Ordine" nel menu, oppure facendo clic sulle etichette informative che reindirizzano agli ordini attivi o in fase di elaborazione. -È inoltre possibile propagare reti già esistenti o separare le due fasi, iniziando con la creazione della rete e procedendo successivamente con la propagazione in base alle tue esigenze. L'opzione di propagazione si trova nelle opzioni della rete selezionata: +È inoltre possibile propagare reti già esistenti o separare le due fasi, iniziando con la creazione della rete e procedendo alla propagazione in un secondo momento in base alle proprie esigenze. L'opzione di propagazione si trova nelle opzioni della rete selezionata : -Fai clic sull'opzione "Propagare" per una rete già esistente, quindi seleziona la destinazione di propagazione desiderata. Questa fase ti permette di definire l'ubicazione o le risorse su cui la rete deve essere propagata: +Fare clic sull'opzione "Propaga" per una rete già esistente, quindi selezionare la destinazione di propagazione desiderata. Questa fase consente di definire la posizione o le risorse su cui propagare la rete : ### Disattivazione di una rete -Una rete può essere disattivata se necessario. Questa opzione consente di sospendere temporaneamente l'accesso o l'utilizzo della rete senza eliminarla definitivamente, offrendo così flessibilità nella gestione dell'infrastruttura in base alle proprie esigenze. +Una rete può essere disattivata anche se necessario. Questa opzione consente di mettere temporaneamente in pausa l'accesso o l'utilizzo della rete senza eliminarla definitivamente, offrendo così flessibilità nella gestione della tua infrastruttura in base alle tue esigenze. -L'opzione di disattivazione si trova nelle opzioni della rete selezionata. +L'opzione di disattivazione si trova nelle opzioni della rete selezionata. ' ## Aggiungere ulteriori hypervisor a un cluster di calcolo -Un __cluster di calcolo__ è un raggruppamento di hypervisor che devono rispettare le seguenti regole: +Un __cluster di calcolo__ è un gruppo di hypervisor che devono rispettare le seguenti regole: ### Per i cluster VMware ESXi -__Regole di omogeneità__: +__Regole di omogeneità__ : -- Tutti gli host di un cluster devono essere dello __stesso tipo di lamina__ (ECO, STANDARD, ADVANCE, PERFORMANCE, ecc.) +- Tutti gli host di un cluster devono essere dello __stesso tipo di blade__ (ECO, STANDARD, ADVANCE, PERFORMANCE, ecc.) - Tutti gli host appartengono allo __stesso tenant e alla stessa zona di disponibilità__ -- __Limite__: massimo 32 hypervisor per cluster +- __Limite__ : Massimo 32 hypervisor per cluster -__Assegnazione della memoria__: +__Allocazione memoria__ : -- Ogni lamina viene consegnata con __tutta la memoria fisica attivata fin dall'inizio__ -- __Esempio__: un cluster di 3 lamine STANDARD v3 (384 GB fisici ciascuna) = 3 × 384 GB = 1152 GB disponibili -- __Raccomandazione__: non superare l'85% di utilizzo della memoria per lamina per evitare l'attivazione del meccanismo di compressione VMware e del ballooning +- Ogni blade viene fornita con __tutta la memoria fisica attivata__ fin dall'inizio +- __Esempio__ : Un cluster di 3 blade STANDARD v3 (384 Go fisiche ciascuna) = 3 × 384 Go = 1152 Go disponibili +- __Raccomandazione__ : Non superare l'85% di consumo di memoria per blade per evitare il meccanismo di compressione VMware e il ballooning -__Alta disponibilità__: +__Alta disponibilità__ : -- __Minimo raccomandato__: 2 hypervisor per cluster per beneficiare del SLA del 99,99% -- Attivare la funzionalità __VMware HA__ (High Availability) per il riavvio automatico delle VM in caso di guasto di un host +- __Minimo consigliato__ : 2 hypervisor per cluster per usufruire del SLA al 99,99% +- Abilitare la funzionalità __VMware HA__ (High Availability) per il riavvio automatico delle VM in caso di guasto di un host -L'aggiunta di hypervisor a un cluster di calcolo avviene nel menu __'IaaS'__ nella barra verde a sinistra dello schermo. -Nell'esempio seguente, aggiungeremo capacità di calcolo a un cluster di hypervisor basato sulla tecnologia VMware. +L'aggiunta di hypervisor a un cluster di calcolo avviene nel menu __'IaaS'__ nella barra verde a sinistra dello schermo. +Nell'esempio seguente, aggiungeremo capacità di calcolo a un cluster di hypervisor che utilizza la tecnologia VMware. -Vai al sottomenu __'Infrastruttura'__ poi __'VMWare'__. Seleziona quindi la stack VMware, la zona di disponibilità e il cluster di calcolo. -In questo esempio si tratta del __'clu001-ucs12'__. Clicca sul pulsante __'Aggiungi un host'__ situato nell'angolo in alto a destra della tabella con l'elenco degli host. +Vai nel sottomenu __'Infrastructure'__ quindi __'VMWare'__. Scegli quindi lo stack vmware, la zona di disponibilità e il cluster di calcolo. +In questo esempio, si tratta del __'clu001-ucs12'__. Clicca sul pulsante __'Aggiungi host'__ che si trova nella tabella con l'elenco degli host, in alto a destra. -__nota__: +__nota__ : -- *__La configurazione di un cluster deve essere omogenea*. Non è consentito combinare tipi diversi di hypervisor all'interno di un cluster. Tutte le lamine devono essere dello stesso tipo.* -- *I permessi __'order'__ e __'compute'__ sono necessari per il conto per eseguire questa azione.* +- *__La configurazione di un cluster deve essere omogenea__. Pertanto, non è consentito mescolare i tipi di hypervisor all'interno di un cluster. Tutte le blade devono essere dello stesso tipo.* +- *I permessi __'order'__ e __'compute'__ sono necessari all'account per eseguire questa azione.* ### Per i cluster Open IaaS -I cluster Open IaaS seguono regole simili in termini di omogeneità e alta disponibilità. La gestione delle risorse di calcolo avviene inoltre tramite il menu __'OpenIaaS'__ con gli stessi prerequisiti in termini di autorizzazioni di accesso. +I cluster Open IaaS seguono regole simili in termini di omogeneità e alta disponibilità. La gestione delle risorse di calcolo avviene inoltre tramite il menu __'OpenIaaS'__ con gli stessi prerequisiti in termini di diritti di accesso. -## Aggiungere risorse di memoria aggiuntive a un cluster di calcolo +## Aggiunta di risorse di memoria aggiuntive a un cluster di calcolo -L'allocazione della memoria nei cluster di calcolo funziona nel modo seguente: +L'allocazione della memoria sui cluster di calcolo funziona come segue : -__Principio di allocazione della memoria__: +__Principio di allocazione della memoria__ : -- Tutte le lame di calcolo vengono consegnate con la __memoria fisica massima installata__ -- Una __limitazione software__ viene applicata a livello del cluster VMware per corrispondere alla RAM fatturata -- Ogni lama dispone della __totalità della memoria fisica abilitata__ all'interno del cluster +- Tutte le lame di calcolo vengono fornite con il __massimo fisico di memoria__ installato +- Un __limite software__ viene applicato a livello del cluster VMware per corrispondere alla RAM fatturata +- Ogni lame dispone di __tutta la memoria fisica attivata__ all'interno del cluster -__Dimensionamento per cluster__: +__Dimensionamento per cluster__ : -- __Minimo__: numero di host × 128 GB di memoria -- __Massimo__: numero di host × quantità di memoria fisica per lama +- __Minimo__ : numero di host × 128 Go di memoria +- __Massimo__ : numero di host × quantità di memoria fisica della lame -__Esempio__: per un cluster di tre host del tipo `STANDARD v3` (384 GB fisici per lama) +__Esempio__ : Per un cluster di tre host di tipo `STANDARD v3` (384 Go fisici per lame) -- Memoria totale disponibile: 3 × 384 GB = 1152 GB +- Memoria totale disponibile : 3 × 384 Go = 1152 Go -__Raccomandazioni importanti__: +__Raccomandazioni importanti__ : -- Non superare il __85% di utilizzo medio della memoria per lama__ per evitare ballooning e compressione VMware +- Non superare __l'85% di consumo medio di memoria per lame__ per evitare il ballooning e la compressione VMware - Prevedere spazio su disco per i file di swap (.VSWP) creati all'avvio di ogni VM (dimensione = memoria della VM) -Per aggiungere memoria RAM a un cluster, è sufficiente accedere alla configurazione del cluster (come per l'aggiunta di un host di calcolo, come precedentemente illustrato) e fare clic su __'Modifica memoria'__. +Per aggiungere memoria RAM a un cluster, è sufficiente accedere alla configurazione del cluster (come per l'aggiunta di un host di calcolo come visto in precedenza) e fare clic su __'Modifica memoria'__. -__nota__: +__nota__ : -- *__Le macchine vengono consegnate con tutta la memoria fisica disponibile__. L'attivazione della risorsa memoria è solo un'abilitazione software a livello di cluster.* -- *Non è possibile modificare la quantità di memoria fisica di un tipo di lama. Tenere sempre presente la capacità massima di una lama durante la creazione di un cluster.* -- *Sono necessari i permessi __'order'__ e __'compute'__ sul conto per eseguire questa operazione.* +- *__Le macchine vengono fornite con tutta la memoria fisica__. Il sblocco della risorsa di memoria è solo un'attivazione software a livello di un cluster.* +- *Non è possibile modificare la quantità di memoria fisica di un tipo di lame. Tenere bene in considerazione la capacità massima di una lame durante la creazione di un cluster.* +- *I permessi __'order'__ e __'compute'__ sono necessari per l'account per eseguire questa azione.* \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/console/security/security_alarms.md b/i18n/it/docusaurus-plugin-content-docs/current/console/security/security_alarms.md index facf2199..efe4a68d 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/console/security/security_alarms.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/console/security/security_alarms.md @@ -2,47 +2,47 @@ title: Avvisi di sicurezza --- -Qui troverai gli avvisi di sicurezza relativi ai nostri servizi cloud. -Questa pagina viene aggiornata quotidianamente per tenere conto delle vulnerabilità recentemente identificate. +Consulta qui gli avvisi di sicurezza relativi ai nostri servizi cloud. +Questa pagina viene aggiornata quotidianamente per tenere conto delle vulnerabilità appena individuate. ## Vulnerabilità -| Data | Riferimento(i) | CVSS | Titolo | Descrizione | Servizio(i) | Gravità | Intervento | +| Data | Riferimento/i | CVSS | Titolo | Descrizione | Servizio/i | Severità | Gestione | |---------------------|-----------------|-------------|--------------|---------|-------------|----------------|-------------| -| 06/04/2026 | [DSA-2026-143](https://www.dell.com/support/kbdoc/en-us/000449325/dsa-2026-143-security-update-for-dell-objectscale-prior-to-4-1-0-3-and-4-2-0-0-insertion-of-sensitive-information-into-log-file-vulnerability) | 7.8 | **DSA-2026-143: Vulnerabilità in Dell ObjectScale (CVE-2026-28261)** | Una vulnerabilità (CVE-2026-28261) in Dell ObjectScale legata all'inserimento di informazioni sensibili nei file di log consente a un attaccante locale di esporre segreti ed elevare i propri privilegi per compromettere il sistema. | Object Storage | 🟡 Moderata | ✅ La risoluzione dei vostri ambienti ObjectScale è gestita da Cloud Temple. Non è necessaria alcuna azione da parte vostra. | -| 23/03/2026 | [XSA-480](https://docs.vates.tech/security/advisories/2026/vates-sa-2026-005/) | 7.8 | **Vulnerabilità XCP-NG (CVE-2026-23554)** | Una vulnerabilità (CVE-2026-23554) è stata identificata in XCP-ng 8.3, che interessa specificamente i sistemi basati su processori Intel x86, consentendo a una VM di compromettere l'host (escalation di privilegi o DoS). | IaaS OpenSource | 🟠 Importante | ✅ L'aggiornamento delle vostre istanze XCP-ng è pianificato non appena le patch saranno validate da Cloud Temple. Non è necessaria alcuna azione da parte vostra. | -| 29/01/2026 | [Bollettino del produttore](https://xcp-ng.org/blog/2026/01/29/january-2026-security-and-maintenance-updates-for-xcp-ng-8-3-lts/) | 2.9 - 8.5 | **Vulnerabilità XCP-NG** | Diverse vulnerabilità sono state scoperte in XCP-ng. La più importante consente un'escalation di privilegi da una VM verso il dom0. Altre falle consentono l'esecuzione di codice arbitrario tramite l'emulazione NVMe o fughe di dati riservati tra macchine virtuali. | IaaS OpenSource | 🟠 Importante | ✅ L'aggiornamento delle vostre istanze XCP-ng è pianificato non appena le patch saranno validate da Cloud Temple. Non è necessaria alcuna azione da parte vostra. | -| 23/01/2026 | [DSA-2026-047](https://www.dell.com/support/kbdoc/en-us/000415880/dsa-2026-047-security-update-for-dell-ecs-and-objectscale-multiple-vulnerabilities) | 4.4 - 8.8 | **DSA-2026-047: Vulnerabilità in Dell ObjectScale** | Molteplici vulnerabilità in Dell ObjectScale legate a credenziali predefinite e trasmissioni/archiviazione in chiaro consentono compromissioni locali o remote. | Object Storage | 🟠 Importante | ✅ La risoluzione dei vostri ambienti ObjectScale è gestita da Cloud Temple. Non è necessaria alcuna azione da parte vostra. | -| 23/12/2025 | [CVE-2025-14443](https://access.redhat.com/security/cve/CVE-2025-14443) | 8.5 | **Vulnerabilità in Red Hat OpenShift (CVE-2025-14443)** | Una vulnerabilità nel componente `openshift-apiserver` consente l'elevazione dei privilegi. L'exploitation richiede una previa autenticazione. | PaaS OpenShift | 🟠 Importante | ✅ L'aggiornamento delle istanze OpenShift è pianificato non appena i correttivi saranno validati da Cloud Temple. Non è richiesta alcuna azione da parte vostra.| -| 30/09/2025 | [VMSA-2025-0016](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/36150) | 8.5 | **VMSA-2025-0016: Vulnerabilità in VMware vCenter (CVE-2025-41250)** | Una vulnerabilità (CVE-2025-41250) consente a un utente malintenzionato autenticato di modificare le email di notifica delle attività pianificate. | IaaS By VMware | 🟠 Importante | ✅ L'aggiornamento delle istanze vCenter è pianificato non appena i correttivi saranno validati da Cloud Temple. Non è richiesta alcuna azione da parte vostra. L'aggiornamento è segnalato nelle notifiche della Console. | -| 30/09/2025 | [VMSA-2025-0015](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/36149) | 7.6 | **VMSA-2025-0015: Vulnerabilità in VMware Tools (Windows)** | Una vulnerabilità (CVE-2025-41246) che interessa VMware Tools per Windows consente l'elevazione dei privilegi (richiede un accesso locale autenticato). | IaaS By VMware | 🟡 Moderata | ⚠️ Vi raccomandiamo di aggiornare i VMware Tools sulle vostre macchine virtuali. Le versioni corrette di VM Tools sono incluse nei pacchetti ESXi messi a disposizione da Cloud Temple. | -| 07/08/2025 | [DSA-2025-154](https://www.dell.com/support/kbdoc/en-us/000262308/dsa-2025-154-security-update-for-dell-ecs-and-objectscale-use-of-hard-coded-ssh-cryptographic-key-vulnerability) | 8.4 | **DSA-2025-154 : Vulnerabilità in Dell ObjectScale (CVE-2025-26476)** | Una vulnerabilità (CVE-2025-26476) in Dell ObjectScale (< 4.0.0.0) relativa all'uso di chiavi SSH codificate consente l'accesso locale non autenticato. | Object Storage | 🟠 Importante | ✅ La risoluzione dei vostri ambienti ObjectScale è gestita da Cloud Temple. Non è richiesta alcuna azione da parte vostra. | -| 15/07/2025 | [VMSA-2025-0013](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/VMSA-2025-0013--VMware-ESXi--Workstation--Fusion--and-Tools-updates-address-multiple-vulnerabilities--CVE-2025-41236--CVE-2025-41237--CVE-2025-41238--CVE-2025-41239-/35877) | 9.3 | **VMSA-2025-0013 : Vulnerabilità importanti in VMware ESXi** | Diverse vulnerabilità importanti interessano VMware ESXi. Le correzioni sono fornite dal fornitore. | IaaS By VMware | 🟠 Importante | ⚠️ Raccomandiamo di aggiornare i vostri hypervisor. Le versioni ESXi corrette sono disponibili non appena vengono convalidate da Cloud Temple. Console indica gli ESXi che richiedono un aggiornamento. | -| 15/07/2025 | [VMSA-2025-0013](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/VMSA-2025-0013--VMware-ESXi--Workstation--Fusion--and-Tools-updates-address-multiple-vulnerabilities--CVE-2025-41236--CVE-2025-41237--CVE-2025-41238--CVE-2025-41239-/35877) | 7.1 | **VMSA-2025-0013 : Vulnerabilità in VMware Tools (CVE-2025-41239)** | Una vulnerabilità (CVE-2025-41239) in VMware Tools consente la divulgazione di informazioni sensibili tramite vSockets non inizializzati. Le correzioni sono fornite dal fornitore. | IaaS By VMware | 🟡 Moderata | ⚠️ Raccomandiamo di aggiornare VMware Tools sulle vostre macchine virtuali. Le versioni VM Tools corrette sono incluse nei pacchetti ESXi messi a disposizione da Cloud Temple. | -| 01/07/2025 | [XSA-470](https://xenbits.xen.org/xsa/advisory-470.html) | N/A | **Vulnerabilità XCP-NG dovuta a una gestione errata delle eccezioni**
[Bollettino dell'editore](https://xcp-ng.org/blog/2025/07/03/july-2025-security-and-maintenance-update-for-xcp-ng-8-2-lts/) | È stata scoperta una vulnerabilità in XCP-NG che consente a codice privilegiato, eseguito da una macchina virtuale, di causare un crash dell'hypervisor, provocando un'interruzione di servizio (DoS) dell'intero host. | IaaS OpenSource | 🟡 Moderata | ✅ L'aggiornamento delle vostre istanze XCP-ng è pianificato non appena le patch saranno convalidate da Cloud Temple. Nessuna azione da parte vostra è necessaria.| -| 23/05/2025 | [XSA-468](https://xenbits.xen.org/xsa/advisory-468.html) | 8.8-9.0 | **Vulnerabilità XCP-NG nei driver PV Windows (XSA-468)**
[Bollettino dell'editore](https://xcp-ng.org/blog/2025/05/27/xsa-468-windows-pv-driver-vulnerabilities/) | Diverse vulnerabilità (CVE-2025-27462, CVE-2025-27463, CVE-2025-27464) nei driver PV Windows consentono a utenti non privilegiati di ottenere privilegi di sistema all'interno delle VM Windows. | IaaS OpenSource | 🟠 Importante | ⚠️ Si consiglia di aggiornare i driver PV Windows delle proprie macchine virtuali alle versioni corrette indicate nel bollettino di sicurezza. ✅ L'aggiornamento delle proprie istanze XCP-ng è pianificato non appena le correzioni saranno validate da Cloud Temple. | -| 22/05/2025 | [XSA-469, INTEL-SA](https://xcp-ng.org/blog/2025/05/14/may-2025-security-update-for-xcp-ng-8-2-8-3/) | 4.9-6.5 | **Vulnerabilità XCP-NG nel microcodice Intel e Xen (XSA-469, INTEL-SA)**
[Bollettino dell'editore](https://xcp-ng.org/blog/2025/05/14/may-2025-security-update-for-xcp-ng-8-2-8-3/) | Sono state pubblicate correzioni di sicurezza per XCP-ng, che risolvono diverse vulnerabilità nel microcodice Intel e Xen. | IaaS OpenSource | 🟡 Moderata | ✅ L'aggiornamento delle proprie istanze XCP-ng è pianificato non appena le correzioni saranno validate da Cloud Temple. Nessuna azione è richiesta da parte vostra.| -| 21/05/2025 | [VMSA-2025-0010](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25717) | 4.3-6.8 | **VMSA-2025-0010: Molteplici vulnerabilità in VMware ESXi (CVE-2025-41226, CVE-2025-41227, CVE-2025-41228)** | Sono state segnalate diverse vulnerabilità in VMware ESXi: vulnerabilità di tipo denial-of-service delle operazioni guest (CVE-2025-41226), vulnerabilità di tipo denial-of-service (CVE-2025-41227), vulnerabilità di tipo Cross Site Scripting (XSS) (CVE-2025-41228). Patch correttive sono fornite dal fornitore. | IaaS By VMware | 🟡 Moderata | ⚠️ Si consiglia di aggiornare i vostri hypervisor. Le versioni corrette di ESXi sono disponibili al momento della validazione da parte di Cloud Temple. La Console indica gli ESXi che necessitano di aggiornamento. | -| 21/05/2025 | [VMSA-2025-0010](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25717) | 4.3-8.8 | **VMSA-2025-0010: Molteplici vulnerabilità in vCenter (CVE-2025-41225, CVE-2025-41228)** | Sono state segnalate diverse vulnerabilità in VMware vCenter: vulnerabilità di esecuzione di comandi autenticati in VMware vCenter Server (CVE-2025-41225), vulnerabilità di tipo Cross Site Scripting (XSS) (CVE-2025-41228). Patch correttive sono fornite dal fornitore. | IaaS By VMware | 🟠 Importante | ✅ L’aggiornamento delle vostre istanze vCenter è pianificato non appena le patch sono validate da Cloud Temple. Nessuna azione richiesta da parte vostra. | -| 14/05/2025 | [VMSA-2025-0007](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25683) | 6.1 | **VMSA-2025-0007: Vulnerabilità di gestione non sicura dei file in VMware Tools (CVE-2025-22247)** | È stata segnalata una vulnerabilità di gestione non sicura dei file in VMware Tools. Patch correttive sono fornite dal fornitore. | IaaS By VMware | 🟡 Moderata | ⚠️ Si consiglia di aggiornare VMware Tools sulle vostre macchine virtuali. | -| 25/03/2025 | [VMSA-2025-0005](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25518) | 7.8 | **VMSA-2025-0005: Vulnerabilità di bypass dell’autenticazione in VMware Tools per Windows (CVE-2025-22230)** | È stata segnalata una vulnerabilità di bypass dell’autenticazione in VMware Tools per Windows. Patch correttive sono fornite dal fornitore. | IaaS By VMware | 🟠 Importante | ⚠️ Si consiglia di aggiornare VMware Tools sulle vostre macchine virtuali. | -| 04/03/2025 | [VMSA-2025-0004](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25390) | 7.1-9.3 | **VMSA-2025-0004: Molteplici vulnerabilità in VMware ESXi (CVE-2025-22224, CVE-2025-22225, CVE-2025-22226)** | Sono state segnalate diverse vulnerabilità in VMware ESXi: vulnerabilità di overflow dell’heap VMCI (CVE-2025-22224) valutata come Critica da VMware, vulnerabilità di scrittura arbitraria in VMware ESXi (CVE-2025-22225), vulnerabilità di divulgazione di informazioni HGFS (CVE-2025-22226). Patch correttive sono fornite dal fornitore. | IaaS By VMware | 🟠 Importante | ⚠️ Si consiglia di aggiornare i vostri hypervisor. Le versioni corrette di ESXi sono disponibili al momento della validazione da parte di Cloud Temple. La Console indica gli ESXi che necessitano di aggiornamento. | +| 06/04/2026 | [DSA-2026-143](https://www.dell.com/support/kbdoc/en-us/000449325/dsa-2026-143-security-update-for-dell-objectscale-prior-to-4-1-0-3-and-4-2-0-0-insertion-of-sensitive-information-into-log-file-vulnerability) | 7.8 | **DSA-2026-143: Vulnerabilità in Dell ObjectScale (CVE-2026-28261)** | Una vulnerabilità (CVE-2026-28261) in Dell ObjectScale relativa all'inserimento di informazioni sensibili nei file di log consente a un attaccante locale di rivelare segreti e di elevare i propri privilegi per compromettere il sistema. | Object Storage | 🟡 Moderata | ✅ La risoluzione dei vostri ambienti ObjectScale è gestita da Cloud Temple. Non è necessaria alcuna azione da parte vostra. | +| 23/03/2026 | [XSA-480](https://docs.vates.tech/security/advisories/2026/vates-sa-2026-005/) | 7.8 | **Vulnerabilità XCP-NG (CVE-2026-23554)** | È stata identificata una vulnerabilità (CVE-2026-23554) in XCP-ng 8.3, che colpisce specificamente i sistemi basati su processori Intel x86, consentendo a una VM di compromettere l'host (elevazione dei privilegi o DoS). | IaaS OpenSource | 🟠 Importante | ✅ L'aggiornamento delle vostre istanze XCP-ng è pianificato non appena i patch verranno validati da Cloud Temple. Non è necessaria alcuna azione da parte vostra. | +| 29/01/2026 | [Comunicato del produttore](https://xcp-ng.org/blog/2026/01/29/january-2026-security-and-maintenance-updates-for-xcp-ng-8-3-lts/) | 2.9 - 8.5 | **Vulnerabilità XCP-NG** | Sono state scoperte diverse vulnerabilità in XCP-ng. La più grave consente un'elevazione dei privilegi da una VM verso dom0. Altre falle permettono l'esecuzione di codice arbitrario tramite emulazione NVMe o fughe di dati riservati tra macchine virtuali. | IaaS OpenSource | 🟠 Importante | ✅ L'aggiornamento delle vostre istanze XCP-ng è pianificato non appena i patch verranno validati da Cloud Temple. Non è necessaria alcuna azione da parte vostra. | +| 23/01/2026 | [DSA-2026-047](https://www.dell.com/support/kbdoc/en-us/000415880/dsa-2026-047-security-update-for-dell-ecs-and-objectscale-multiple-vulnerabilities) | 4.4 - 8.8 | **DSA-2026-047: Vulnerabilità in Dell ObjectScale** | Molteplici vulnerabilità in Dell ObjectScale relative a credenziali predefinite e trasmissioni/archiviazioni in chiaro consentono compromissioni locali o remote. | Object Storage | 🟠 Importante | ✅ La risoluzione dei vostri ambienti ObjectScale è gestita da Cloud Temple. Non è necessaria alcuna azione da parte vostra. | +| 23/12/2025 | [CVE-2025-14443](https://access.redhat.com/security/cve/CVE-2025-14443) | 8.5 | **Vulnerabilità in Red Hat OpenShift (CVE-2025-14443)** | Una vulnerabilità nel componente `openshift-apiserver` consente un'elevazione dei privilegi. Lo sfruttamento richiede un'autenticazione preventiva. | PaaS OpenShift | 🟠 Importante | ✅ L'aggiornamento delle vostre istanze OpenShift è pianificato non appena i patch verranno validati da Cloud Temple. Non è necessaria alcuna azione da parte vostra.| +| 30/09/2025 | [VMSA-2025-0016](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/36150) | 8.5 | **VMSA-2025-0016: Vulnerabilità in VMware vCenter (CVE-2025-41250)** | Una vulnerabilità (CVE-2025-41250) consente a un attaccante autenticato di modificare le email di notifica delle attività pianificate. | IaaS By VMware | 🟠 Importante | ✅ L'aggiornamento delle vostre istanze vCenter è pianificato non appena i patch verranno validati da Cloud Temple. Non è necessaria alcuna azione da parte vostra. L'aggiornamento è segnalato nelle notifiche di Console.. | +| 30/09/2025 | [VMSA-2025-0015](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/36149) | 7.6 | **VMSA-2025-0015: Vulnerabilità in VMware Tools (Windows)** | Una vulnerabilità (CVE-2025-41246) che interessa VMware Tools per Windows consente un'elevazione dei privilegi (richiede un accesso locale autenticato). | IaaS By VMware | 🟡 Moderata | ⚠️ Raccomandiamo di aggiornare VMware Tools sulle vostre macchine virtuali. Le versioni di VM Tools corrette sono contenute nei pacchetti ESXi messi a disposizione da Cloud Temple. | +| 07/08/2025 | [DSA-2025-154](https://www.dell.com/support/kbdoc/en-us/000262308/dsa-2025-154-security-update-for-dell-ecs-and-objectscale-use-of-hard-coded-ssh-cryptographic-key-vulnerability) | 8.4 | **DSA-2025-154: Vulnerabilità in Dell ObjectScale (CVE-2025-26476)** | Una vulnerabilità (CVE-2025-26476) in Dell ObjectScale (< 4.0.0.0) relativa all'uso di chiavi SSH fisse consente un accesso locale non autenticato. | Object Storage | 🟠 Importante | ✅ La risoluzione dei vostri ambienti ObjectScale è gestita da Cloud Temple. Non è necessaria alcuna azione da parte vostra. | +| 15/07/2025 | [VMSA-2025-0013](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/VMSA-2025-0013--VMware-ESXi--Workstation--Fusion--and-Tools-updates-address-multiple-vulnerabilities--CVE-2025-41236--CVE-2025-41237--CVE-2025-41238--CVE-2025-41239-/35877) | 9.3 | **VMSA-2025-0013: Vulnerabilità critiche in VMware ESXi** | Diverse vulnerabilità critiche interessano VMware ESXi. I patch sono forniti dal produttore. | IaaS By VMware | 🟠 Importante | ⚠️ Raccomandiamo di aggiornare i vostri hypervisor. Le versioni ESXi corrette sono disponibili non appena validate da Cloud Temple. Console indica gli ESXi che richiedono un aggiornamento. | +| 15/07/2025 | [VMSA-2025-0013](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/VMSA-2025-0013--VMware-ESXi--Workstation--Fusion--and-Tools-updates-address-multiple-vulnerabilities--CVE-2025-41236--CVE-2025-41237--CVE-2025-41238--CVE-2025-41239-/35877) | 7.1 | **VMSA-2025-0013: Vulnerabilità in VMware Tools (CVE-2025-41239)** | Una vulnerabilità (CVE-2025-41239) in VMware Tools consente la divulgazione di informazioni sensibili tramite vSockets non inizializzati. I patch sono forniti dal produttore. | IaaS By VMware | 🟡 Moderata | ⚠️ Raccomandiamo di aggiornare VMware Tools sulle vostre macchine virtuali. Le versioni di VM Tools corrette sono contenute nei pacchetti ESXi messi a disposizione da Cloud Temple. | +| 01/07/2025 | [XSA-470](https://xenbits.xen.org/xsa/advisory-470.html) | N/A | **Vulnerabilità XCP-NG tramite gestione errata delle eccezioni** [Comunicato del produttore](https://xcp-ng.org/blog/2025/07/03/july-2025-security-and-maintenance-update-for-xcp-ng-8-2-lts/) | È stata scoperta una vulnerabilità in XCP-NG, che consente a codice privilegiato eseguito da una macchina virtuale di causare un crash dell'hypervisor, provocando un denial of service (DoS) dell'intero host. | IaaS OpenSource | 🟡 Moderata | ✅ L'aggiornamento delle vostre istanze XCP-ng è pianificato non appena i patch verranno validati da Cloud Temple. Non è necessaria alcuna azione da parte vostra.| +| 23/05/2025 | [XSA-468](https://xenbits.xen.org/xsa/advisory-468.html) | 8.8-9.0 | **Vulnerabilità XCP-NG nei driver PV Windows (XSA-468)** [Comunicato del produttore](https://xcp-ng.org/blog/2025/05/27/xsa-468-windows-pv-driver-vulnerabilities/) | Diverse vulnerabilità (CVE-2025-27462, CVE-2025-27463, CVE-2025-27464) nei driver PV Windows consentono agli utenti non privilegiati di ottenere privilegi di sistema all'interno delle VM Windows. | IaaS OpenSource | 🟠 Importante | ⚠️ Raccomandiamo di aggiornare i driver PV Windows delle vostre macchine virtuali alle versioni corrette indicate nel comunicato di sicurezza. ✅ L'aggiornamento delle vostre istanze XCP-ng è pianificato non appena i patch verranno validati da Cloud Temple. | +| 22/05/2025 | [XSA-469, INTEL-SA](https://xcp-ng.org/blog/2025/05/14/may-2025-security-update-for-xcp-ng-8-2-8-3/) | 4.9-6.5 | **Vulnerabilità XCP-NG nel microcodice Intel e Xen (XSA-469, INTEL-SA)** [Comunicato del produttore](https://xcp-ng.org/blog/2025/05/14/may-2025-security-update-for-xcp-ng-8-2-8-3/) | Sono stati pubblicati patch di sicurezza per XCP-ng, che correggono diverse vulnerabilità nel microcodice Intel e Xen. | IaaS OpenSource | 🟡 Moderata | ✅ L'aggiornamento delle vostre istanze XCP-ng è pianificato non appena i patch verranno validati da Cloud Temple. Non è necessaria alcuna azione da parte vostra.| +| 21/05/2025 | [VMSA-2025-0010](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25717) | 4.3-6.8 | **VMSA-2025-0010: Multiple vulnerabilità in VMware ESXi (CVE-2025-41226, CVE-2025-41227, CVE-2025-41228)** | Sono state segnalate diverse vulnerabilità in VMware ESXi: Vulnerabilità da denial of service delle operazioni guest (CVE-2025-41226), Vulnerabilità da denial of service (CVE-2025-41227), Vulnerabilità di tipo Cross Site Scripting (XSS) (CVE-2025-41228). I patch sono forniti dal produttore. | IaaS By VMware | 🟡 Moderata | ⚠️ Raccomandiamo di aggiornare i vostri hypervisor. Le versioni ESXi corrette sono disponibili non appena validate da Cloud Temple. Console indica gli ESXi che richiedono un aggiornamento. | +| 21/05/2025 | [VMSA-2025-0010](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25717) | 4.3-8.8 | **VMSA-2025-0010: Multiple vulnerabilità in vCenter (CVE-2025-41225, CVE-2025-41228)** | Sono state segnalate diverse vulnerabilità in VMware vCenter: Vulnerabilità di esecuzione di comandi autenticata di VMware vCenter Server (CVE-2025-41225), Vulnerabilità di tipo Cross Site Scripting (XSS) (CVE-2025-41228). I patch sono forniti dal produttore. | IaaS By VMware | 🟠 Importante | ✅ L'aggiornamento delle vostre istanze vCenter è pianificato non appena i patch verranno validati da Cloud Temple. Non è necessaria alcuna azione da parte vostra. L'aggiornamento è segnalato nelle notifiche di Console.. | +| 14/05/2025 | [VMSA-2025-0007](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25683) | 6.1 | **VMSA-2025-0007: Vulnerabilità nella gestione non sicura dei file in VMware Tools (CVE-2025-22247)** | È stata segnalata una vulnerabilità nella gestione non sicura dei file in VMware Tools. I patch sono forniti dal produttore. | IaaS By VMware | 🟡 Moderata | ⚠️ Raccomandiamo di aggiornare VMware Tools sulle vostre macchine virtuali. Le versioni di VM Tools corrette sono contenute nei pacchetti ESXi messi a disposizione da Cloud Temple. | +| 25/03/2025 | [VMSA-2025-0005](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25518) | 7.8 | **VMSA-2025-0005: Vulnerabilità di bypass dell'autenticazione in VMware Tools per Windows (CVE-2025-22230)** | È stata segnalata una vulnerabilità di bypass dell'autenticazione in VMware Tools per Windows. I patch sono forniti dal produttore. | IaaS By VMware | 🟠 Importante | ⚠️ Raccomandiamo di aggiornare VMware Tools sulle vostre macchine virtuali. Le versioni di VM Tools corrette sono contenute nei pacchetti ESXi messi a disposizione da Cloud Temple | +| 04/03/2025 | [VMSA-2025-0004](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/25390) | 7.1-9.3 | **VMSA-2025-0004: Multiple vulnerabilità in VMware ESXi (CVE-2025-22224, CVE-2025-22225, CVE-2025-22226)** | Sono state segnalate diverse vulnerabilità in VMware ESXi: Vulnerabilità da heap overflow VMCI (CVE-2025-22224) valutata come Critica da VMware, Vulnerabilità di scrittura arbitraria in VMware ESXi (CVE-2025-22225), Vulnerabilità di divulgazione di informazioni HGFS (CVE-2025-22226). I patch sono forniti dal produttore. | IaaS By VMware | 🟠 Importante | ⚠️ Raccomandiamo di aggiornare i vostri hypervisor. Le versioni ESXi corrette sono disponibili non appena validate da Cloud Temple. Console indica gli ESXi che richiedono un aggiornamento. | ## Informazioni -- **Data** : Data di pubblicazione iniziale dell'alert di sicurezza Cloud Temple. -- **Riferimento(i)** : ID CVE, se disponibile. -- **CVSS** : Punteggio CVSS v3 di base come riportato dall'editore o dal CVE, non contestualizzato. La contestualizzazione è espressa dalla severità CT. Se l'alert riguarda più vulnerabilità, vengono indicati i punteggi CVSS minimo e massimo. -- **Titolo** : Titolo dell'alert, con riferimento all'editore se disponibile. -- **Descrizione** : Descrizione sintetica, con collegamento(i) a informazioni dettagliate. -- **Servizio(i)** : Servizio(i) Cloud Temple potenzialmente interessato(i). -- **Severità** : Livello di severità nel contesto dei servizi Cloud Temple (per la vulnerabilità più critica in caso di più vulnerabilità). Vengono presi in considerazione i criteri di sfruttamento nel contesto tecnico delle nostre infrastrutture e servizi Cloud. +- **Data** : Data di pubblicazione iniziale dell'allerta di sicurezza Cloud Temple. +- **Riferimento(i)** : ID CVE, in base alla disponibilità. +- **CVSS** : Punteggio CVSS v3 base così come riportato dall'editore o dal CVE, non contestualizzato. La contestualizzazione è espressa dalla severità CT. Se l'allerta riguarda più vulnerabilità, sono indicati i punteggi CVSS min e max. +- **Titolo** : Titolo dell'allerta, con riferimento all'editore se disponibile. +- **Descrizione** : Descrizione sintetica, con link verso informazioni dettagliate. +- **Servizio(i)** : Servizio(i) Cloud Temple potenzialmente interessati. +- **Severità** : Livello di severità nel contesto dei servizi Cloud Temple (per la vulnerabilità più critica in caso di vulnerabilità multiple). I criteri di sfruttamento sono presi in considerazione nel contesto tecnico delle nostre infrastrutture e servizi Cloud. | Livello | Descrizione | |--------|-------------| -| 🔴 **Critica** | Vulnerabilità CVSS 7+ che presenta un rischio significativo di sfruttamento (ampia esposizione, facilità di sfruttamento). È fortemente raccomandato applicare una correzione o mitigazione nel minor tempo possibile. | -| 🟠 **Importante** | Vulnerabilità CVSS 7+ che non presenta un rischio significativo di sfruttamento (esposizione limitata o vincoli allo sfruttamento). | +| 🔴 **Critica** | Vulnerabilità CVSS 7+ che presenta un rischio di sfruttamento significativo (elevata esposizione, facilità di sfruttamento). Si raccomanda fortemente una correzione o mitigazione il prima possibile.| +| 🟠 **Importante** | Vulnerabilità CVSS 7+ che non presenta un rischio di sfruttamento significativo (esposizione limitata o vincoli di sfruttamento) | | 🟡 **Moderata** | Vulnerabilità CVSS 4+ | | 🔵 **Bassa** | Vulnerabilità CVSS inferiore a 4, o non sfruttabile. | -- **Trattamento** : Informazioni e raccomandazioni nel contesto dei servizi Cloud Temple. ⚠️ indica che è necessaria un'azione da parte degli utenti per trattare la vulnerabilità. ✅ indica che il trattamento della vulnerabilità è gestito da Cloud Temple. +- **Gestione** : Informazioni e raccomandazioni nel contesto dei servizi Cloud Temple. ⚠️ indica che è necessaria un'azione da parte degli utenti per gestire la vulnerabilità. ✅ indica che la gestione della vulnerabilità è a carico di Cloud Temple. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/containers_overview.md b/i18n/it/docusaurus-plugin-content-docs/current/containers_overview.md index d5637400..190b55b7 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/containers_overview.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/containers_overview.md @@ -3,51 +3,55 @@ title: Panoramica delle offerte di containerizzazione sidebar_position: 10 # Posizione immediatamente prima di IaaS --- -# Containerization, accelerator of your digital transformation +# La containerizzazione, acceleratore della vostra trasformazione digitale -In the context of accelerated digital transformation, the ability to rapidly develop, deploy, and evolve applications has become a decisive competitive advantage. Containerization, orchestrated by platforms such as Kubernetes and OpenShift, addresses this challenge by delivering unmatched agility, portability, and operational efficiency. +In un contesto di trasformazione digitale accelerata, la capacità di sviluppare, distribuire ed evolvere rapidamente le applicazioni è diventata un vantaggio competitivo decisivo. La containerizzazione, orchestrata da piattaforme come Kubernetes e OpenShift, risponde a questa esigenza offrendo agilità, portabilità ed efficienza operativa senza pari. -However, the inherent complexity of these technologies can represent a barrier. That's why Cloud Temple has developed a range of managed, "as a Service" solutions that allow you to leverage the full power of containers while relieving you of the complexity of their management. Our offerings are designed to enable you to focus on your core business: application innovation, on a sovereign and trustworthy foundation. +Tuttavia, la complessità intrinseca di queste tecnologie può rappresentare un limite. È per questo che Cloud Temple ha sviluppato una gamma di soluzioni gestite e "as a Service" che vi permettono di sfruttare tutta la potenza dei container, liberandovi dalla complessità della loro gestione. Le nostre offerte sono progettate per consentirvi di concentrarvi sul vostro core business: l'innovazione applicativa, su una piattaforma sovrana e affidabile. -## Il nostro portafoglio di soluzioni: quale percorso per il tuo progetto? +## Il nostro portafoglio di soluzioni: quale percorso per il vostro progetto? -Questo tabella mette in evidenza i punti di forza e il posizionamento di ciascuna soluzione per una decisione rapida. +Questa tabella evidenzia i punti di forza e il posizionamento di ciascuna soluzione per una decisione rapida. -| Criterio | PaaS OpenShift | Managed Kubernetes | -| :---------------------------- | :---------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------- | -| **Posizionamento chiave** | **La fiducia senza compromessi**
_Piattaforma "as a Service", il percorso più veloce per modernizzare su una base certificata._ | **La flessibilità open source**
_Un Kubernetes puro, portabile e privo di sovrapposizioni su un'infrastruttura sovrana._ | -| **Livello di servizio** | as a Service | Gestito | +| Criterio | PaaS OpenShift | Kubernetes gestito | +| :--------------------------- | :---------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------- | +| **Posizionamento chiave** | **Fiducia senza compromessi**
_Piattaforma "as a Service", la via più rapida per modernizzare su una base certificata._ | **Flessibilità open source**
_Un Kubernetes puro, portabile e senza strati aggiuntivi su un'infrastruttura sovrana._ | +| **Livello di servizio** | as a Service | Gestito | | **Conformità e sicurezza** | **100% SecNumCloud** | Ospitato su infrastruttura SNC | -| **Pubblico target ideale** | Team di sviluppo, DevOps | Team DevOps, Esperti Kubernetes | -| **Punto di differenziazione** | Semplificazione e velocità di implementazione | Open source, portabile e priva di sovrapposizioni | +| **Target ideale** | Team di sviluppo, DevOps | Team DevOps, Esperti Kubernetes | +| **Punto di differenziazione** | Semplicità e rapidità di deployment | Open-source, portabile e senza strati aggiuntivi | -### Confronto dei componenti tecnologici +### Confronto dei componenti tecnici -Oltre al posizionamento, ogni offerta si basa su scelte tecnologiche distinte che rispondono a esigenze specifiche. La tabella seguente dettaglia i componenti software fondamentali che compongono ciascuna soluzione. +Oltre al posizionamento, ogni prodotto si basa su scelte tecnologiche distinte che rispondono a esigenze specifiche. La tabella seguente dettaglia i blocchi software fondamentali che compongono ciascuna soluzione. -| Componente Tecnologico | PaaS OpenShift | Kubernetes Gestito | +| Componente Tecnica | PaaS OpenShift | Managed Kubernetes | | :--------------------------- | :--------------------------------- | :-------------------------- | -| **Sistema Operativo di base** | Red Hat CoreOS (RHCOS) | Talos OS (immutabile) | +| **OS di Base** | Red Hat CoreOS (RHCOS) | Talos OS (immutabile) | | **Orchestratore** | Red Hat OpenShift | Kubernetes (CNCF) | -| **Archiviazione persistente** | OpenShift Data Foundation | Rook-Ceph | -| **Rete (CNI)** | OVN-Kubernetes | Cilium | +| **Archiviazione persistente** | OpenShift Data Foundation | Rook-Ceph | +| **Rete (CNI)** | OVN-Kubernetes | Cilium | | **Ingress / Bilanciamento del carico** | HAProxy / MetalLB | NGINX Ingress / MetalLB | -| **Sicurezza (Motore delle policy)** | Security Context Constraints (SCC) | PSA + Kyverno + Capsule | -| **Backup** | Veeam Kasten K10 (opzionale) | Veeam Kasten K10 (incluso) | -| **Automazione (GitOps)** | OpenShift Pipelines | ArgoCD | +| **Sicurezza (Motore di Policy)** | Security Context Constraints (SCC) | PSA + Kyverno + Capsule | +| **Backup** | Veeam Kasten K10 (opzionale) | Veeam Kasten K10 (incluso) | +| **Automazione (GitOps)** | OpenShift Pipelines | ArgoCD | | **Osservabilità** | Prometheus / Grafana | Prometheus / Grafana / Loki | +--- + ## Quale soluzione per il vostro progetto? -La scelta della piattaforma di containerizzazione è una decisione strategica. Ecco alcuni elementi chiave per orientarvi verso l'offerta più adatta al vostro contesto. +La scelta della piattaforma di containerizzazione è una decisione strutturante. Ecco alcuni punti di riferimento per orientarvi verso il prodotto più pertinente per il vostro contesto. * **Se la conformità normativa è la vostra priorità assoluta...** - ...e dovete operare in un settore altamente regolamentato (pubblico, sanitario, OIV) o qualificare la vostra stessa soluzione, l'**Offerta PaaS OpenShift** è la soluzione di riferimento che vi garantisce il massimo livello di affidabilità sul mercato. + ...e se dovete operare in un settore altamente regolamentato (pubblico, sanità, OIV) o qualificare la vostra soluzione, l'**Offerta PaaS OpenShift** è la soluzione di riferimento che vi garantisce il più alto livello di garanzia sul mercato. * **Se privilegiate l'open source, la modernità e la sicurezza "zero-trust"...** - ...e la vostra cultura aziendale è fortemente orientata verso l'open source, l'assenza di dipendenza da un fornitore e le metodologie di sicurezza di nuova generazione (sistemi immutabili, gestione tramite API), l'**Offerta Managed Kubernetes** è quella più allineata alla vostra visione. + e se la vostra cultura aziendale è fortemente orientata verso l'open source, l'assenza di dipendenza dall'editore e gli approcci di sicurezza di nuova generazione (sistemi immutabili, gestione tramite API), l'**Offerta Managed Kubernetes** è la più allineata con la vostra visione. -Il nostro ruolo di consulenza è quello di accompagnarvi in questa scelta. I nostri architetti sono a vostra disposizione per analizzare il vostro contesto e definire con voi la traiettoria ottimale. +Il nostro ruolo di consulenza è accompagnarvi in questa decisione. I nostri architetti sono a vostra disposizione per analizzare il vostro contesto e definire insieme a voi il percorso migliore. + +--- ## Esplora le nostre soluzioni @@ -74,7 +78,7 @@ Il nostro ruolo di consulenza è quello di accompagnarvi in questa scelta. I nos

- Esplora la nostra offerta Kubernetes pura, portabile e priva di sovrapposizioni, ospitata su un'infrastruttura sovrana. + Esplora il nostro prodotto Kubernetes puro, portatile e senza strati aggiuntivi, ospitato su un'infrastruttura sovrana.

@@ -82,4 +86,4 @@ Il nostro ruolo di consulenza è quello di accompagnarvi in questa scelta. I nos
- + \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/contractual/contracts.md b/i18n/it/docusaurus-plugin-content-docs/current/contractual/contracts.md index bcd01a47..a6cd578b 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/contractual/contracts.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/contractual/contracts.md @@ -8,66 +8,64 @@ import { ContractCard } from '@site/src/components/ContractCard'; ## Gerarchia dei documenti contrattuali -| | Riferimenti | +| | Riferimenti | | --------- | -------------------------- | | Riferimento | CT.AM.JUR.HDC 20250502_3.0 | -| Data | 17 aprile 2026 | +| Data | 17 aprile 2026. | La gerarchia dei documenti contrattuali è stabilita secondo un ordine di priorità definito: 1. [Condizioni Generali di Vendita e Utilizzo (CGVU)](/contractual/files/CT.AM.JUR.CGVU_Conditions%20Generales%20de%20Vente%20et%20d'Utilisation_v1.pdf) -2. [Convenzione di Servizio SecNumCloud](/contractual/files/CT.AM.JUR.ANX%20-Annexe_Convention%20de%20Services_SNC_v2.pdf) +2. [Accordo di Servizio SecNumCloud](/contractual/files/CT.AM.JUR.ANX%20-Annexe_Convention%20de%20Services_SNC_v2.pdf) 3. Accordo specifico particolare ¹ -4. Condizioni Particolari di Utilizzo (CPU) ² -5. [Accordo sul Trattamento dei Dati](/contractual/files/CT.AM.JANX%20-%20Annexe_DPA_v1.pdf) +4. Piano di Assicurazione della Sicurezza (PAS) ² +5. Condizioni Particolari di Utilizzo (CPU) +6. [Accordo sulla Protezione dei Dati](/contractual/files/CT.AM.JANX%20-%20Annexe_DPA_v1.pdf) -:::info[Note contrattuali] +:::info[Precisazioni contrattuali] -**¹** Accordo specifico, progettato per allinearsi alle particolarità del progetto. +**¹** Accordo specifico, concepito per allinearsi alle particolarità del progetto. **²** Documento non pubblico. ::: -_Nota: Le versioni tradotte in inglese, tedesco e spagnolo sono fornite esclusivamente per facilitare la comprensione dell'offerta._ +_Nota: Le versioni tradotte in inglese, italiano, tedesco e spagnolo sono fornite esclusivamente per facilitare la comprensione dell'offerta._ --- # Documenti Contrattuali -Qui trovi tutti i documenti contrattuali di Cloud Temple: condizioni generali, accordo di trattamento dei dati (DPA), processo d'ordine, condizioni particolari per servizio, accordi di servizio SecNumCloud e accordi sul livello di servizio. +Consultate qui tutti i documenti contrattuali Cloud Temple : condizioni generali, accordo sul trattamento dei dati (DPA), convenzioni di servizio SecNumCloud e accordi sul livello di servizio. --- -## Condizioni Generali +## Condizioni generali
--- -## Accordi di Servizio SecNumCloud +## Convenzioni di servizio SecNumCloud -Gli accordi di servizio definiscono il quadro contrattuale per la fornitura di servizi qualificati SecNumCloud: perimetro, impegni operativi, responsabilità e condizioni di servizio. +Le convenzioni di servizio definiscono il quadro contrattuale per la fornitura dei servizi qualificati SecNumCloud: perimetro, impegni operativi, responsabilità e condizioni di servizio.
@@ -82,8 +80,8 @@ Gli SLA definiscono gli impegni di disponibilità, i metodi di misurazione, le e
-
SLA VM Instances
-
Disponibilità garantita 99,95% — crediti di servizio ed esclusioni.
+
SLA Istanze VM
+
Disponibilità garantita al 99,95 % — crediti di servizio ed esclusioni.
Consulta il documento →
@@ -96,4 +94,4 @@ Gli SLA definiscono gli impegni di disponibilità, i metodi di misurazione, le e
Consulta il documento →
- + \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/contractual/iaas/raci.md b/i18n/it/docusaurus-plugin-content-docs/current/contractual/iaas/raci.md index 8ebe2bdd..7517b79a 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/contractual/iaas/raci.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/contractual/iaas/raci.md @@ -1,226 +1,226 @@ --- -title: Matrice de responsabilité IaaS +title: Matrice di responsabilità IaaS +displayed_sidebar: docSidebar --- -Voici le modèle **RACI** définissant la répartition des responsabilités entre le client et Cloud Temple pour l'utilisation des infrastructures IaaS de Cloud Temple. -## Définition des différents rôles +Ecco il modello **RACI** che definisce la ripartizione delle responsabilità tra il cliente e Cloud Temple per l'utilizzo delle infrastrutture IaaS di Cloud Temple. -Nous rappelons ici les différents rôles du RACI : +## Definizione dei diversi ruoli -| Rôle | Description | +Di seguito si ricordano i diversi ruoli del RACI : + +| Ruolo | Descrizione | |--------------|---------------------------------------------------------------------------------------| -| (R) Réalise | __R__éalise le processus | -| (A) Approuve | __A__pprouve la réalisation du processus | -| (C) Consulte | __C__onsulté pendant le processus | -| (I) Informé | __I__nformé des résultats du processus (via l'outillage, le portail ou la messagerie) | - -## Définition votre besoin - -| Activité | Rôle Client | Rôle Cloud Temple | -|------------------------------------------------------------------------------------------------|-------------|-------------------| -| Définir l'architecture globale de votre plateforme Cloud Temple | **RA** | **CI** | -| Définir le nombre de tenants et le nombre de zone de disponibilité pour chaque tenant | **RA** | **CI** | -| Définir votre stratégie globale de reprise ou de continuité d'activité | **RA** | **CI** | -| Dimensionner correctement votre plateforme Cloud Temple (calcul, stockage, réseau, backup,...) | **RA** | **CI** | -| Souscrire aux services avec les informations nécessaires | **RA** | **I** | - -## Mise en œuvre initiale de vos tenants Cloud Temple - -| Activité | Rôle Client | Rôle Cloud Temple | -|--------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer la mise en oeuvre des **datacenters physiques** | | **RA** | -| Assurer la mise en oeuvre des infrastructures **calcul** | **I** | **RA** | -| Assurer la mise en oeuvre des infrastructures **stockage** | **I** | **RA** | -| Assurer la mise en oeuvre de la connectivité au **réseau backbone(1)** | **I** | **RA** | -| Acquérir et maintenir les licences logiciels essentiels pour le fonctionnement de la plateforme Cloud Temple | | **RA** | -| Implémenter la configuration de base de vos tenants Cloud Temple | **CI** | **RA** | -| Implémenter la configuration initiale pour le service de sauvegarde | **CI** | **RA** | -| *S'ils sont souscrit :* implémenter la configuration réseau initiale pour les services Internet et Firewall | **CI** | **RA** | -| Offrir l'assistance requise pour la prise en main de vos environnements Cloud Temple | **I** | **RA** | -| Effectuer les ajustements de configuration finaux du service après sa livraison | **RA** | **C** | -| Configurer un référentiel d'authentification externe pour la console Cloud Temple | **RA** | **C** | -| Créer les utilisateurs de chaque tenant dans la console Cloud Temple et affecter les droits | **RA** | | -| Valider la conformité de la plateforme livrée avec le référentiel SecNumCloud | **I** | **RA** | -| Valider la conformité de la plateforme livrée avec les spécifications requises | **RA** | **CI** | - -*(1) Le réseau backbone constitue l'infrastructure centrale de Cloud Temple, offrant une colonne vertébrale sur laquelle -reposent les réseaux clients spécifiques, lesquels sont intégrés et pris en charge par cette infrastructure principale.* - -## Intégrer votre système d'information dans vos environnements Cloud Temple - -| Activité | Rôle Client | Rôle Cloud Temple | -|-------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Créer, installer, mettre à jour vos machines virtuelles | **RA** | | -| Installer et configurer les logiciels et middlewares sur vos machines virtuelles | **RA** | | -| Acheter et détenir les licences et les droits d'utilisation pour les systèmes d'exploitation de vos machines virtuelles | **RA** | | -| Configurer le réseau pour chacune vos machines virtuelles | **RA** | | -| S'assurer que chaque machine virtuelle est associée à un plan de sauvegarde cohérent | **RA** | **C** | -| S'assurer que chaque machine virtuelle est associée à un plan de reprise d'activité ou de continuité d'activité cohérent | **RA** | **C** | -| Implémenter une stratégie de protection antivirale sur vos machines virtuelles | **RA** | | -| Mettre en place une solution de métrologie et de surveillance sur vos machines virtuelles | **RA** | | -| Définir la politique de TAG de vos machines virtuelles | **RA** | | - -## Opérations récurrentes - -### Gestion des accès et des identités - -| Activité | Rôle Client | Rôle Cloud Temple | -|--------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer l'accessibilité du service Console Cloud Temple et de l'API associée | | **RA** | -| Assurer l'accessibilité du système d'information déployé sur vos machines virtuelles | **RA** | | -| Gérer les habilitations physiques et logiques des équipes Cloud Temple aux infrastructures SecNumCloud. | | **RA** | -| Administrer les accès et la politique de sécurité associée liés à l'interface de la console Cloud Temple et à son API | **RA** | | -| Administrer les accès et la politique de sécurité associée au système d'information hébergé au sein de vos tenants Cloud Temple | **RA** | | - -### maintien en condition opérationnelle et en condition de sécurité - -Les activités visant à maintenir en condition opérationnelle et sécuritaire pour les infrastructures et services -proposés par Cloud Temple, dans le cadre de son offre IaaS, sont réalisées dans l'objectif de conformité à la qualification SecNumCloud. - -| Activité | Rôle Client | Rôle Cloud Temple | -|-------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer le maintien en condition opérationnelle des infrastructures **datacenters physiques** | **I** | **RA** | -| Assurer le maintien en condition de sécurité des infrastructures **datacenters physiques** | **I** | **RA** | -| Assurer le maintien en condition opérationnelle des infrastructures **calcul** | **I** | **RA** | -| Assurer le maintien en condition de sécurité des infrastructures **calcul (2)** | **RA** | **CI** | -| Assurer le maintien en condition opérationnelle des infrastructures **stockage** | **I** | **RA** | -| Assurer le maintien en condition de sécurité des infrastructures **stockage** | **I** | **RA** | -| Assurer le maintien en condition opérationnelle des infrastructures **réseaux backbone** | **I** | **RA** | -| Assurer le maintien en condition de sécurité des infrastructures **réseaux backbone** | **I** | **RA** | -| Assurer le maintien en condition opérationnelle des machines virtuelles déployées dans les tenants client **(3)** | **RA** | | -| Assurer le maintien en condition de sécurité des machines virtuelles déployées dans les tenants client **(3)** | **RA** | | -| Assurer le maintien en condition opérationnelle des middleswares déployées dans les tenants client | **RA** | | -| Assurer le maintien en condition de sécurité des middleswares déployées dans les tenants client | **RA** | | - -*(2) Cloud Temple fournit régulièrement les versions les plus récentes du système d'exploitation pour vos hyperviseurs. -Néanmoins, étant donné que Cloud Temple n'est pas informé des spécificités de vos environnements de production et des exigences -liées à vos charges de travail, **la décision de procéder à la mise à jour du système d'exploitation de vos hyperviseurs, -entraînant ainsi un redémarrage, vous revient**. Cette opération peut être réalisée à travers la console Cloud Temple ou via l'API. -Des services professionnels sont disponibles si vous souhaitez que Cloud Temple prenne en charge certaines opérations.* - -*(3) Cloud Temple propose des packs de licences pour pare-feu (Fortinet, Stormshield) et répartiteurs de charge (HAProxy), et -travaille en collaboration avec vos équipes pour la configuration initiale lors de la phase de mise en œuvre. Toutefois, -la responsabilité du maintien en condition opérationnelle et sécuritaire repose sur vous durant la phase d'exploitation -courante. Des services professionnels sont disponibles si vous souhaitez que Cloud Temple prenne en charge certaines opérations.* - -### Gestion des changements, des incidents, des problèmes et des capacités +| (R) Esegue | __R__ealizza il processo | +| (A) Approva | __A__pprova la realizzazione del processo | +| (C) Consulta | __C__onsultato durante il processo | +| (I) Informato| __I__nformato sui risultati del processo (tramite strumenti, portale o messaggistica) | + +## Definizione delle tue esigenze + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +|------------------------------------------------------------------------------------------------|---------------|--------------------| +| Definire l'architettura globale della tua piattaforma Cloud Temple | **RA** | **CI** | +| Definire il numero di tenant e il numero di zone di disponibilità per ogni tenant | **RA** | **CI** | +| Definire la strategia globale di disaster recovery o continuità operativa | **RA** | **CI** | +| Dimensionare correttamente la tua piattaforma Cloud Temple (calcolo, archiviazione, rete, backup,...) | **RA** | **CI** | +| Sottoscrivere i servizi con le informazioni necessarie | **RA** | **I** | + +## Implementazione iniziale dei vostri tenant Cloud Temple + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +|--------------------------------------------------------------------------------------------------------------|---------------|--------------------| +| Garantire l'implementazione dei **datacenter fisici** | | **RA** | +| Garantire l'implementazione delle infrastrutture di **calcolo** | **I** | **RA** | +| Garantire l'implementazione delle infrastrutture di **archiviazione** | **I** | **RA** | +| Garantire l'implementazione della connettività alla **rete backbone(1)** | **I** | **RA** | +| Acquisire e mantenere le licenze software essenziali per il funzionamento della piattaforma Cloud Temple | | **RA** | +| Implementare la configurazione di base dei vostri tenant Cloud Temple | **CI** | **RA** | +| Implementare la configurazione iniziale per il servizio di backup | **CI** | **RA** | +| *Se sottoscritti:* implementare la configurazione di rete iniziale per i servizi Internet e Firewall | **CI** | **RA** | +| Fornire l'assistenza necessaria per l'avvio iniziale dei vostri ambienti Cloud Temple | **I** | **RA** | +| Effettuare le regolazioni di configurazione finali del servizio dopo la sua consegna | **RA** | **C** | +| Configurare un repository di autenticazione esterno per la console Cloud Temple | **RA** | **C** | +| Creare gli utenti di ogni tenant nella console Cloud Temple e assegnare i diritti | **RA** | | +| Validare la conformità della piattaforma consegnata con lo standard SecNumCloud | **I** | **RA** | +| Validare la conformità della piattaforma consegnata con le specifiche richieste | **RA** | **CI** | + +*(1) La rete backbone costituisce l'infrastruttura centrale di Cloud Temple, offrendo una spina dorsale su cui +si basano le reti client specifiche, le quali sono integrate e gestite da questa infrastruttura principale.* + +## Integrare il proprio sistema informativo negli ambienti Cloud Temple + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +|-------------------------------------------------------------------------------------------------------------------------------|---------------|--------------------| +| Creare, installare e aggiornare le proprie macchine virtuali | **RA** | | +| Installare e configurare software e middleware sulle proprie macchine virtuali | **RA** | | +| Acquistare e detenere le licenze e i diritti d'uso per i sistemi operativi delle proprie macchine virtuali | **RA** | | +| Configurare la rete per ciascuna delle proprie macchine virtuales | **RA** | | +| Assicurarsi che ogni macchina virtuale sia associata a un piano di backup coerente | **RA** | **C** | +| Assicurarsi che ogni macchina virtuale sia associata a un piano di disaster recovery o di continuità operativa coerente | **RA** | **C** | +| Implementare una strategia di protezione antivirus sulle proprie macchine virtuales | **RA** | | +| Implementare una soluzione di telemetria e monitoraggio sulle proprie macchine virtuales | **RA** | | +| Definire la politica di tagging delle proprie macchine virtuales | **RA** | | + +## Operazioni ricorrenti + +### Gestione degli accessi e delle identità + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +|--------------------------------------------------------------------------------------------------------------------------------------|---------------|--------------------| +| Garantire l'accessibilità del servizio Console Cloud Temple e dell'API associata | | **RA** | +| Garantire l'accessibilità del sistema informativo distribuito sulle vostre macchine virtuali | **RA** | | +| Gestire le autorizzazioni fisiche e logiche dei team Cloud Temple per le infrastrutture SecNumCloud. | | **RA** | +| Amministrare gli accessi e la politica di sicurezza associata relativi all'interfaccia della console Cloud Temple e alla sua API | **RA** | | +| Amministrare gli accessi e la politica di sicurezza associata al sistema informativo ospitato all'interno dei vostri tenant Cloud Temple | **RA** | | + +### mantenimento in condizioni operative e di sicurezza + +Le attività volte a mantenere operative e sicure le infrastrutture e i servizi offerti da Cloud Temple, nell'ambito della propria offerta IaaS, sono svolte con l'obiettivo di garantire la conformità alla qualifica SecNumCloud. + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +|-------------------------------------------------------------------------------------------------------------------|---------------|--------------------| +| Garantire il mantenimento operativo delle infrastrutture **datacenter fisici** | **I** | **RA** | +| Garantire il mantenimento in condizioni di sicurezza delle infrastrutture **datacenter fisici** | **I** | **RA** | +| Garantire il mantenimento operativo delle infrastrutture **di calcolo** | **I** | **RA** | +| Garantire il mantenimento in condizioni di sicurezza delle infrastrutture **di calcolo (2)** | **RA** | **CI** | +| Garantire il mantenimento operativo delle infrastrutture **di archiviazione** | **I** | **RA** | +| Garantire il mantenimento in condizioni di sicurezza delle infrastrutture **di archiviazione** | **I** | **RA** | +| Garantire il mantenimento operativo delle infrastrutture **di rete backbone** | **I** | **RA** | +| Garantire il mantenimento in condizioni di sicurezza delle infrastrutture **di rete backbone** | **I** | **RA** | +| Garantire il mantenimento operativo delle macchine virtuali distribuite nei tenant del cliente **(3)** | **RA** | | +| Garantire il mantenimento in condizioni di sicurezza delle macchine virtuali distribuite nei tenant del cliente **(3)** | **RA** | | +| Garantire il mantenimento operativo dei middleware distribuiti nei tenant del cliente | **RA** | | +| Garantire il mantenimento in condizioni di sicurezza dei middleware distribuiti nei tenant del cliente | **RA** | | + +*(2) Cloud Temple fornisce regolarmente le versioni più recenti del sistema operativo per i vostri hypervisor. +Tuttavia, poiché Cloud Temple non è a conoscenza delle specificità dei vostri ambienti di produzione e dei requisiti +legati ai vostri carichi di lavoro, **la decisione di procedere all'aggiornamento del sistema operativo dei vostri hypervisor, +che comporterà un riavvio, spetta a voi**. Questa operazione può essere eseguita tramite la console Cloud Temple o tramite l'API. +Sono disponibili servizi professionali se desiderate che Cloud Temple gestisca determinate operazioni.* + +*(3) Cloud Temple offre pacchetti di licenze per firewall (Fortinet, Stormshield) e bilanciatori di carico (HAProxy), e +collabora con i vostri team per la configurazione iniziale durante la fase di implementazione. Tuttavia, +la responsabilità del mantenimento operativo e in condizioni di sicurezza ricade su di voi durante la fase di gestione operativa +quotidiana. Sono disponibili servizi professionali se desiderate che Cloud Temple gestisca determinate operazioni.* + +### Gestione dei cambiamenti, degli incidenti, dei problemi e delle capacità | Activité | Rôle Client | Rôle Cloud Temple | |-----------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Gérer les incidents sur les infrastructures **datacenters physiques** | **I** | **RA** | -| Gérer les problèmes sur les infrastructures **datacenters physiques** | | **RA** | -| Gérer les capacités sur les infrastructures **datacenters physiques** | | **RA** | -| Gérer les incidents sur les infrastructures **calcul** | **I** | **RA** | -| Gérer les problèmes sur les infrastructures **calcul** | | **RA** | -| Gérer les capacités sur les infrastructures **calcul** | **RA** | **CI** | -| Gérer les incidents sur les infrastructures **stockage** | **I** | **RA** | -| Gérer les problèmes sur les infrastructures **stockage** | | **RA** | -| Gérer les capacités sur les infrastructures **stockage** | **RA** | **CI** | -| Gérer les incidents sur les infrastructures **réseau backbone** | **I** | **RA** | -| Gérer les problèmes sur les infrastructures **réseau backbone** | | **RA** | -| Gérer les capacités sur les infrastructures **réseau backbone** | | **RA** | -| Mettre en place une nouvelle machine virtuelle ou créer un nouvel environnement applicatif au sein d'un tenant client | **RA** | | -| Modifier la configuration des machines virtuelles déployées | **RA** | | -| Supprimer une machine virtuelle déployée | **RA** | | -| Prendre la décision d'ajouter, de modifier ou de retirer des ressources sur la plateforme Cloud Temple | **RA** | **CI** | -| Exécuter la décision de modification des ressources sur la plateforme Cloud Temple | **I** | **RA** | -| Appliquer les tags aux machines virtuelles conformément à la politique définie | **RA** | | - -### Gestion de la performance - -| Activité | Rôle Client | Rôle Cloud Temple | -|-------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer la surveillance du bon fonctionnement et de la fiabilité de tous les équipements impliqués dans la prestation du service qualifié SecNumCloud | **I** | **RA** | -| Assurer le suivi de la performance des ressources physiques de calcul, stockage et réseau mises à disposition de vos tenants **(4)** | **RI** | **A** | -| Superviser les performances des machines virtuelles soutenant vos environnements | **RA** | **I** | - -*(4) La plateforme Cloud Temple adopte une philosophie centrée sur **la fourniture d'infrastructures dédiées** pour les besoins de **calcul** (avec des lames physiques), de **stockage** (via des LUNs dédiées sur les SANs) -et de **réseau** (incluant des pare-feu et des répartiteurs de charge). Ces ressources dédiées sont mises à la disposition du client, dont l'utilisation -et la charge résultante dépendent directement de l'usage qu'il en fait. Il incombe donc au client de mettre en place et de gérer les systèmes de supervision -et de métrologie nécessaires pour assurer le suivi du fonctionnement optimal de son système d'information.* - -### Gestion de la sauvegarde et de la reprise d'activité sur la sauvegarde intégrée - -| Activité | Rôle Client | Rôle Cloud Temple | -|-------------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer le maintien en condition opérationnelle sur les infrastructures de **sauvegarde** intégrées à la plateforme Cloud Temple **(5)** | | **RA** | -| Assurer le maintien en condition de sécurité des infrastructures de **sauvegarde** intégrées à la plateforme Cloud Temple | **I** | **RA** | -| Gérer les incidents sur les infrastructures **sauvegarde** intégrées à la plateforme Cloud Temple | **I** | **RA** | -| Gérer les problèmes sur les infrastructures **sauvegarde** intégrées à la plateforme Cloud Temple | | **RA** | -| Gérer les capacités sur les infrastructures **sauvegarde** intégrées à la plateforme Cloud Temple | **AI** | **RC** | -| Assurer le maintien en condition opérationnelle sur la solution de sauvegarde choisie au sein de ses tenants par le client **(6)** | **RA** | | -| Assurer le maintien en condition de sécurité sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les incidents sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les problèmes sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les capacités sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | **CI** | -| Gérer le cycle des vies des politiques de sauvegarde | **RA** | | -| S'assurer que les politiques de sauvegarde sont cohérentes avec le cycle de vie de la donnée | **RA** | | -| S'assurer que les plans de continuité d'activité ou de reprise d'activité sont cohérents avec le cycle de vie de la donnée | **RA** | | -| Effectuer des tests périodiques pour évaluer l'efficacité de la stratégie de sauvegarde | **RA** | | -| Effectuer des tests périodiques pour évaluer l'efficacité de la stratégie de reprise d'activité ou de continuité d'activité | **RA** | **CI** | - -*(5) Au 1er janvier 2024, la solution de sauvegarde intégrée à la plateforme Cloud Temple est IBM Spectrum Protect Plus. -Cette solution est entièrement automatisée et peut être gérée via la console Cloud Temple ou l'API Cloud Temple.* - -### Gestion de la sauvegarde et de la reprise d'activité pour les plateformes tierces au sein d'un tenant client - -| Activité | Rôle Client | Rôle Cloud Temple | -|-------------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer le maintien en condition opérationnelle sur la solution de sauvegarde choisie au sein de ses tenants par le client **(6)** | **RA** | | -| Assurer le maintien en condition de sécurité sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les incidents sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les problèmes sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | | -| Gérer les capacités sur la solution de sauvegarde choisie au sein de ses tenants par le client | **RA** | **CI** | -| Gérer le cycle des vies des politiques de sauvegarde | **RA** | | -| S'assurer que les politiques de sauvegarde sont cohérentes avec le cycle de vie de la donnée | **RA** | | -| S'assurer que les plans de continuité d'activité ou de reprise d'activité sont cohérents avec le cycle de vie de la donnée | **RA** | | -| Effectuer des tests périodiques pour évaluer l'efficacité de la stratégie de sauvegarde | **RA** | | -| Effectuer des tests périodiques pour évaluer l'efficacité de la stratégie de reprise d'activité ou de continuité d'activité | **RA** | **CI** | - -*(6) Ceci concerne toute solution de sauvegarde supplémentaire mise en place dans les environnements du client et gérée par celui-ci. -Cloud Temple propose des services professionnels pour ceux qui souhaitent déléguer certaines opérations à Cloud Temple.* - -### Gestion de la documentation et du contrat - -| Activité | Rôle Client | Rôle Cloud Temple | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer la gestion commerciale et contractuelle du client, incluant l'établissement de devis, le traitement des commandes et la gestion de la facturation | **I** | **RA** | -| Assurer le suivi contractuel de la prestation, incluant la validation des devis, le suivi des livraisons et la surveillance de la facturation | **RA** | **I** | -| Assurer la maintenance et la disponibilité de l'inventaire des ressources fournies par Cloud Temple relative à l'offre SecNumCloud | **I** | **RA** | -| Assurer la maintenance et la mise à disposition de la documentation technique relative à l'offre SecNumCloud | **I** | **RA** | -| Assurer le suivi du cycle de vie des machines virtuelles déployées dans vos environnements Cloud Temple via votre CMDB (Configuration Management Database) | **RA** | | -| Maintenir à jour la politique d'accès à l'interface de la console Cloud Temple ou à l'API Cloud Temple | **RA** | | - -### Gestion des journaux - -| Activité | Rôle Client | Rôle Cloud Temple | -|--------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Conserver et mettre à disposition les journaux de la plateforme IaaS Cloud Temple **(7)** | | **RA** | -| Conserver et mettre à disposition les journaux du système d'information hébergé au sein de vos tenants Cloud Temple | **RA** | | - -*(7) Au premier janvier 2024, la durée de rétention des journaux de la plateforme est d'une année.* - -## Connectivité au réseau client (mpls, fibre dédiée, ipsec, ...) - -| Activité | Rôle Client | Rôle Cloud Temple | -|------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Souscrire à une connectivité réseau opérateur pour accéder à un datacenter physique Cloud Temple (8) | **RA** | **CI** | -| Gérer le plan d'adressage IP | **RA** | **I** | -| Gérer les incidents sur les liens réseaux opérateurs client | **RA** | | -| Gérer les problèmes sur les liens réseaux opérateurs client | **RA** | **CI** | -| Gérer les capacités sur les liens réseaux opérateurs client | **RA** | **CI** | - -*(8) Cloud Temple assume la responsabilité du réseau concernant son infrastructure backbone, ses points de collecte ainsi que -les points d'interconnexion datacenter, garantissant ainsi la connectivité entre ces points et son réseau backbone. -Dans l'offre d'hébergement en baie physique, Cloud Temple assume la responsabilité à partir de l'équipement situé en haut du rack, communément appelé "top of rack".* - -## Réversibilité - -| Activité | Rôle Client | Rôle Cloud Temple | -|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Planifier le projet de réversibilité et choisir les infrastructures cibles | **RA** | **I** | -| Mettre en oeuvre les opérations de transition, qu'elles impliquent une extraction manuelle, l'utilisation d'API ou toute autre méthode tierce compatible avec la plateforme Cloud Temple. | **RA** | **I** | -| Transférer les données tout en contrôlant les répercussions de la migration sur la qualité du service fourni par le système d'information du client. | **RA** | | -| Procéder au démantèlement des configurations du Cloud Privé et des options associées au client, à la suite de la résiliation du contrat. | **I** | **RA** | -| Réaliser l'effacement sécurisé des données sur les supports de stockage et fournir une attestation | **I** | **RA** | +| Gestire gli incidenti sulle infrastrutture **datacenter fisici** | **I** | **RA** | +| Gestire i problemi sulle infrastrutture **datacenter fisici** | | **RA** | +| Gestire le capacità sulle infrastrutture **datacenter fisici** | | **RA** | +| Gestire gli incidenti sulle infrastrutture **calcolo** | **I** | **RA** | +| Gestire i problemi sulle infrastrutture **calcolo** | | **RA** | +| Gestire le capacità sulle infrastrutture **calcolo** | **RA** | **CI** | +| Gestire gli incidenti sulle infrastrutture **storage** | **I** | **RA** | +| Gestire i problemi sulle infrastrutture **storage** | | **RA** | +| Gestire le capacità sulle infrastrutture **storage** | **RA** | **CI** | +| Gestire gli incidenti sulle infrastrutture **rete backbone** | **I** | **RA** | +| Gestire i problemi sulle infrastrutture **rete backbone** | | **RA** | +| Gestire le capacità sulle infrastrutture **rete backbone** | | **RA** | +| Implementare una nuova macchina virtuale o creare un nuovo ambiente applicativo all'interno di un tenant cliente | **RA** | | +| Modificare la configurazione delle macchine virtuali distribuite | **RA** | | +| Eliminare una macchina virtuale distribuita | **RA** | | +| Prendere la decisione di aggiungere, modificare o rimuovere risorse sulla piattaforma Cloud Temple | **RA** | **CI** | +| Eseguire la decisione di modifica delle risorse sulla piattaforma Cloud Temple | **I** | **RA** | +| Applicare i tag alle macchine virtuali conformemente alla politica definita | **RA** | | + +### Gestione delle prestazioni + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +|-------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|---------------------| +| Garantire il monitoraggio del corretto funzionamento e dell'affidabilità di tutte le apparecchiature coinvolte nella fornitura del servizio qualificato SecNumCloud | **I** | **RA** | +| Garantire il monitoraggio delle prestazioni delle risorse fisiche di calcolo, archiviazione e rete messe a disposizione dei vostri tenant **(4)** | **RI** | **A** | +| Supervisionare le prestazioni delle macchine virtuali che supportano i vostri ambienti | **RA** | **I** | + +*(4) La piattaforma Cloud Temple adotta una filosofia incentrata sulla **fornitura di infrastrutture dedicate** per le esigenze di **calcolo** (con lame fisiche), di **archiviazione** (tramite LUN dedicate sui SANs) +e di **rete** (inclusi firewall e bilanciatori di carico). Queste risorse dedicate sono messe a disposizione del cliente, il cui utilizzo +e il relativo carico dipendono direttamente dall'uso che ne viene fatto. Spetta quindi al cliente implementare e gestire i sistemi di supervisione +e di raccolta di metriche necessari per garantire il monitoraggio del funzionamento ottimale del proprio sistema informativo.* + +### Gestione del backup e del disaster recovery sul backup integrato + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +|-------------------------------------------------------------------------------------------------------------------------------------------|---------------|--------------------| +| Garantire il mantenimento operativo delle infrastrutture di **backup** integrate nella piattaforma Cloud Temple **(5)** | | **RA** | +| Garantire il mantenimento della sicurezza delle infrastrutture di **backup** integrate nella piattaforma Cloud Temple | **I** | **RA** | +| Gestire gli incidenti sulle infrastrutture di **backup** integrate nella piattaforma Cloud Temple | **I** | **RA** | +| Gestire i problemi sulle infrastrutture di **backup** integrate nella piattaforma Cloud Temple | | **RA** | +| Gestire le capacità sulle infrastrutture di **backup** integrate nella piattaforma Cloud Temple | **AI** | **RC** | +| Garantire il mantenimento operativo della soluzione di backup scelta dal cliente all'interno dei propri tenant **(6)** | **RA** | | +| Garantire il mantenimento della sicurezza della soluzione di backup scelta dal cliente all'interno dei propri tenant | **RA** | | +| Gestire gli incidenti sulla soluzione di backup scelta dal cliente all'interno dei propri tenant | **RA** | | +| Gestire i problemi sulla soluzione di backup scelta dal cliente all'interno dei propri tenant | **RA** | | +| Gestire le capacità sulla soluzione di backup scelta dal cliente all'interno dei propri tenant | **RA** | **CI** | +| Gestire il ciclo di vita delle politiche di backup | **RA** | | +| Verificare che le politiche di backup siano coerenti con il ciclo di vita dei dati | **RA** | | +| Verificare che i piani di continuità operativa o di disaster recovery siano coerenti con il ciclo di vita dei dati | **RA** | | +| Eseguire test periodici per valutare l'efficacia della strategia di backup | **RA** | | +| Eseguire test periodici per valutare l'efficacia della strategia di disaster recovery o di continuità operativa | **RA** | **CI** | + +*(5) Al 1° gennaio 2024, la soluzione di backup integrata nella piattaforma Cloud Temple è IBM Spectrum Protect Plus. +Questa soluzione è completamente automatizzata e può essere gestita tramite la console Cloud Temple o l'API Cloud Temple.* + +### Gestione del backup e della ripresa delle attività per le piattaforme di terze parti all'interno di un tenant del cliente + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +|-------------------------------------------------------------------------------------------------------------------------------------------|---------------|--------------------| +| Garantire il mantenimento operativo della soluzione di backup scelta dal cliente all'interno dei propri tenant **(6)** | **RA** | | +| Garantire il mantenimento della sicurezza della soluzione di backup scelta dal cliente all'interno dei propri tenant | **RA** | | +| Gestire gli incidenti sulla soluzione di backup scelta dal cliente all'interno dei propri tenant | **RA** | | +| Gestire i problemi sulla soluzione di backup scelta dal cliente all'interno dei propri tenant | **RA** | | +| Gestire le capacità sulla soluzione di backup scelta dal cliente all'interno dei propri tenant | **RA** | **CI** | +| Gestire il ciclo di vita delle politiche di backup | **RA** | | +| Verificare che le politiche di backup siano coerenti con il ciclo di vita dei dati | **RA** | | +| Verificare che i piani di continuità operativa o di ripresa delle attività siano coerenti con il ciclo di vita dei dati | **RA** | | +| Eseguire test periodici per valutare l'efficacia della strategia di backup | **RA** | | +| Eseguire test periodici per valutare l'efficacia della strategia di ripresa delle attività o di continuità operativa | **RA** | **CI** | + +*(6) Questo si riferisce a qualsiasi soluzione di backup aggiuntiva implementata negli ambienti del cliente e gestita da quest'ultimo. +Cloud Temple offre servizi professionali per chi desidera delegare alcune operazioni a Cloud Temple.* + +### Gestione della documentazione e del contratto + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|--------------------| +| Garantire la gestione commerciale e contrattuale del cliente, inclusa la preparazione dei preventivi, l'elaborazione degli ordini e la gestione della fatturazione | **I** | **RA** | +| Garantire il monitoraggio contrattuale della prestazione, inclusa la validazione dei preventivi, il tracciamento delle consegne e il controllo della fatturazione | **RA** | **I** | +| Garantire la manutenzione e la disponibilità dell'inventario delle risorse fornite da Cloud Temple relative all'offerta SecNumCloud | **I** | **RA** | +| Garantire la manutenzione e la messa a disposizione della documentazione tecnica relativa all'offerta SecNumCloud | **I** | **RA** | +| Garantire il monitoraggio del ciclo di vita delle macchine virtuali distribuite nei vostri ambienti Cloud Temple tramite la vostra CMDB (Configuration Management Database) | **RA** | | +| Mantenere aggiornata la politica di accesso all'interfaccia della console Cloud Temple o all'API Cloud Temple | **RA** | | + +### Gestione dei log + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +|--------------------------------------------------------------------------------------------------------------------------|---------------|--------------------| +| Conservare e mettere a disposizione i log della piattaforma IaaS Cloud Temple **(7)** | | **RA** | +| Conservare e mettere a disposizione i log del sistema informativo ospitato all'interno dei vostri tenant Cloud Temple | **RA** | | + +*(7) Al 1° gennaio 2024, la durata di conservazione dei log della piattaforma è di un anno.* + +## Connettività alla rete client (mpls, fibra dedicata, ipsec, ...) + +| Attività | Ruolo Client | Ruolo Cloud Temple | +|------------------------------------------------------------------------------------------------------|--------------|--------------------| +| Sottoscrivere una connettività di rete dell'operatore per accedere a un datacenter fisico Cloud Temple (8) | **RA** | **CI** | +| Gestire il piano di indirizzamento IP | **RA** | **I** | +| Gestire gli incidenti sui link di rete degli operatori client | **RA** | | +| Gestire i problemi sui link di rete degli operatori client | **RA** | **CI** | +| Gestire le capacità sui link di rete degli operatori client | **RA** | **CI** | + +*(8) Cloud Temple assume la responsabilità della rete relativa alla propria infrastruttura backbone, ai propri punti di raccolta nonché ai punti di interconnessione del datacenter, garantendo così la connettività tra questi punti e la propria rete backbone. +Nell'offerta di hosting in rack fisico, Cloud Temple assume la responsabilità a partire dall'attrezzatura situata nella parte superiore del rack, comunemente definita "top of rack".* + +## Reversibilità + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|--------------------| +| Pianificare il progetto di reversibilità e scegliere le infrastrutture di destinazione | **RA** | **I** | +| Eseguire le operazioni di transizione, che comportino un'estrazione manuale, l'utilizzo di API o qualsiasi altro metodo di terze parti compatibile con la piattaforma Cloud Temple. | **RA** | **I** | +| Trasferire i dati controllando al contempo le ripercussioni della migrazione sulla qualità del servizio fornito dal sistema informativo del cliente. | **RA** | | +| Procedere allo smantellamento delle configurazioni del Cloud Privato e delle opzioni associate al cliente, a seguito della risoluzione del contratto. | **I** | **RA** | +| Effettuare la cancellazione sicura dei dati sui supporti di archiviazione e fornire un attestato | **I** | **RA** | \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/contractual/iaas/raci_s3.md b/i18n/it/docusaurus-plugin-content-docs/current/contractual/iaas/raci_s3.md index 1db9a33f..1260fd50 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/contractual/iaas/raci_s3.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/contractual/iaas/raci_s3.md @@ -1,74 +1,77 @@ --- -title: Matrice de responsabilité IaaS - Stockage Objet S3 +title: Matrice di responsabilità IaaS - Archiviazione Oggetti S3 +slug: /contractual/storage/raci +displayed_sidebar: docSidebar --- -Voici le RACI du partage de responsabilité entre le client et Cloud Temple pour l'usage de la plateforme de Stockage Objets S3 Cloud Temple. -## Définition des différents rôles +Ecco il RACI relativo alla ripartizione delle responsabilità tra il cliente e Cloud Temple per l'utilizzo della piattaforma di Archiviazione Oggetti S3 Cloud Temple. -Nous rappelons ici les différents rôle du RACI : +## Definizione dei diversi ruoli -| Rôle | Description | +Ricordiamo qui i diversi ruoli del RACI : + +| Ruolo | Descrizione | |--------------|------------------------------------------| -| (R) Réalise | __R__éalise le processus | -| (A) Approuve | __A__pprouve la réalisation du processus | -| (C) Consulte | __C__onsulté pendant le processus | -| (I) Informé | __I__nformé des résultats du processus | - -## Définir votre besoin - -| Activité | Rôle Client | Rôle Cloud Temple | -|----------------------------------------------------------------------------------|-------------|-------------------| -| Valider que le produit Stockage Objet S3 est conforme au besoin de l'application | __RA__ | __CI__ | -| Souscrire au service avec les informations nécessaires | __RA__ | __I__ | - -## Mettre en oeuvre le service - -| Activité | Rôle Client | Rôle Cloud Temple | -|------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer le maintien en condition opérationnelle de la plateforme Stockage Objet S3 | __I__ | __RA__ | -| Assurer le maintien en condition de sécurité de la plateforme Stockage Objet S3 | __I__ | __RA__ | -| Créer les objets | __RA__ | | -| Créer les clefs d'accès et affecter les droits associés | __RA__ | | - -## Opérations récurrentes - -| Activité | Rôle Client | Rôle Cloud Temple | -|------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer le maintien en condition opérationnelle de la plateforme Stockage Objet S3 | __I__ | __RA__ | -| Assurer le maintien en condition de sécurité de la plateforme Stockage Objet S3 | __I__ | __RA__ | -| Assurer l'accessibilité du service Stockage Objet S3 | __I__ | __RA__ | -| Conserver et mettre à disposition les journaux de la plateforme Stockage Objet S3 | | __RA__ | -| Superviser le bon fonctionnement de la plateforme Stockage Objet S3 | __I__ | __RA__ | -| Suivre le cycle de vie des objets | __RA__ | | -| Suivre le cycle de vie des droits sur les objets | __RA__ | | -| Gérer la sécurité logique des objets | __RA__ | | -| Gérer les incidents sur le service Stockage objets S3 | __I__ | __RA__ | -| Gérer les problèmes sur le service Stockage objets S3 | __I__ | __RA__ | -| Gérer la capacité sur le service Stockage objets S3 | __I__ | __RA__ | -| Gérer les évolutions sur le service Stockage objets S3 | __I__ | __RA__ | - -## Gestion du chiffrement - -| Activité | Rôle Client | Rôle Cloud Temple | -|------------------------------------------------------------------------------------------|-------------|-------------------| -| Gérer le chiffrement des données avant déploiement sur le service Stockage Objet S3 | __RA__ | | -| Gérer le chiffrement sur l'espace de stockage alloué par le service Stockage objet S3 | __A__ | __R__ | - -## Continuité d'activité - -| Activité | Rôle Client | Rôle Cloud Temple | -|-------------------------------------------------------------------------------------------|-------------|-------------------| -| Assurer la continuité d'activité du service de stockage objets S3 | __I__ | __RA__ | -| Assurer la sauvegarde des données | __RA__ | | -| Réaliser des tests périodiques de restauration des données | __RA__ | | -| maintenir le plan de continuité d'activité et de reprise d'activité pour les applications | __RA__ | | - -## Réversibilité - -| Activité | Rôle Client | Rôle Cloud Temple | -|-------------------------------------------------------------------------------------------|-------------|-------------------| -| Mettre en oeuvre le projet de réversibilité (planification, outils, méthodes, cibles,...) | __RA__ | | -| Exporter les données depuis le service de Stockage Objets S3 | __RA__ | | -| Supprimer les données sur le service de Stockage Objets S3 | __RA__ | | -| Détruite les supports de stockage en fin de vie ou en erreur | | __RA__ | +| (R) Esegue | __R__ealizza il processo | +| (A) Approva | __A__pprova la realizzazione del processo | +| (C) Consulta | __C__onsultato durante il processo | +| (I) Informato | __I__nformato sui risultati del processo | + +## Definire il proprio fabbisogno + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +|----------------------------------------------------------------------------------|---------------|--------------------| +| Verificare che il prodotto Archiviazione Oggetti S3 sia conforme al fabbisogno dell'applicazione | __RA__ | __CI__ | +| Sottoscrivere il servizio con le informazioni necessarie | __RA__ | __I__ | + +## Implementare il servizio + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +|--------------------------------------------------------------------------------------|---------------|--------------------| +| Garantire il mantenimento in condizioni operative della piattaforma di Archiviazione Oggetti S3 | __I__ | __RA__ | +| Garantire il mantenimento in condizioni di sicurezza della piattaforma di Archiviazione Oggetti S3 | __I__ | __RA__ | +| Creare gli oggetti | __RA__ | | +| Creare le chiavi di accesso e assegnare i permessi associati | __RA__ | | + +## Operazioni ricorrenti + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +|------------------------------------------------------------------------------------|---------------|--------------------| +| Garantire il mantenimento operativo della piattaforma di Archiviazione Oggetti S3 | __I__ | __RA__ | +| Garantire il mantenimento della sicurezza della piattaforma di Archiviazione Oggetti S3 | __I__ | __RA__ | +| Garantire l'accessibilità del servizio di Archiviazione Oggetti S3 | __I__ | __RA__ | +| Conservare e rendere disponibili i log della piattaforma di Archiviazione Oggetti S3 | | __RA__ | +| Supervisionare il corretto funzionamento della piattaforma di Archiviazione Oggetti S3 | __I__ | __RA__ | +| Monitorare il ciclo di vita degli oggetti | __RA__ | | +| Monitorare il ciclo di vita dei diritti sugli oggetti | __RA__ | | +| Gestire la sicurezza logica degli oggetti | __RA__ | | +| Gestire gli incidenti sul servizio di Archiviazione Oggetti S3 | __I__ | __RA__ | +| Gestire i problemi sul servizio di Archiviazione Oggetti S3 | __I__ | __RA__ | +| Gestire la capacità del servizio di Archiviazione Oggetti S3 | __I__ | __RA__ | +| Gestire le evoluzioni del servizio di Archiviazione Oggetti S3 | __I__ | __RA__ | + +## Gestione della crittografia + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +|------------------------------------------------------------------------------------------|---------------|--------------------| +| Gestire la crittografia dei dati prima del caricamento sul servizio di Storage S3 | __RA__ | | +| Gestire la crittografia sullo spazio di storage allocato dal servizio di Storage S3 | __A__ | __R__ | + +## Continuità operativa + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +|-------------------------------------------------------------------------------------------|---------------|--------------------| +| Garantire la continuità operativa del servizio di storage oggetti S3 | __I__ | __RA__ | +| Garantire il backup dei dati | __RA__ | | +| Eseguire test periodici di ripristino dei dati | __RA__ | | +| mantenere il piano di continuità operativa e di disaster recovery per le applicazioni | __RA__ | | + +## Reversibilità + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +|-------------------------------------------------------------------------------------------|---------------|--------------------| +| Implementare il progetto di reversibilità (pianificazione, strumenti, metodi, obiettivi,...) | __RA__ | | +| Esportare i dati dal servizio di Archiviazione Oggetti S3 | __RA__ | | +| Eliminare i dati dal servizio di Archiviazione Oggetti S3 | __RA__ | | +| Distruggere i supporti di storage a fine vita o in caso di errore | | __RA__ | \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/contractual/kubernetes/raci.md b/i18n/it/docusaurus-plugin-content-docs/current/contractual/kubernetes/raci.md index e9307120..a97788ec 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/contractual/kubernetes/raci.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/contractual/kubernetes/raci.md @@ -1,5 +1,6 @@ --- -title: Matrice di Responsabilità (RACI) - Kubernetes Gestito +title: Matrice delle Responsabilità (RACI) - Kubernetes Gestito +displayed_sidebar: docSidebar --- ## RACI @@ -8,149 +9,149 @@ title: Matrice di Responsabilità (RACI) - Kubernetes Gestito | **Attività** | **Cliente** | **Cloud Temple** | | ------------------------------------------------------------------- | ----------- | ---------------- | -| Definire l'architettura generale del servizio Kubernetes | C | RA | -| Dimensionare il servizio Kubernetes (numero di nodi, risorse) | C | RA | -| Installare il servizio Kubernetes con una configurazione predefinita | I | RA | -| Configurare il servizio Kubernetes | C | RA | -| Configurare la rete di base del servizio Kubernetes | I | RA | -| Distribuire la configurazione iniziale per identità e accessi | C | RA | -| Definire la strategia di scalabilità e disponibilità elevata | C | RA | +| Definire l'architettura globale del servizio Kubernetes | C | RA | +| Dimensionare il servizio Kubernetes (numero di nodi, risorse) | C | RA | +| Installare il servizio Kubernetes con configurazione predefinita | I | RA | +| Configurazione del servizio Kubernetes | C | RA | +| Configurare la rete di base del servizio Kubernetes | I | RA | +| Implementazione della configurazione iniziale di identità e accessi | C | RA | +| Definire la strategia di scalabilità e alta disponibilità | C | RA | ### Gestione dei progetti e delle applicazioni aziendali | **Attività** | **Cliente** | **Cloud Temple** | -| -------------------------------------------------- | ----------- | ---------------- | -| Creare e gestire i progetti Kubernetes | RA | I* | -| Distribuire e gestire le applicazioni in Kubernetes | RA | I* | -| Configurare i pipeline CI/CD | RA | I* | -| Gestire le immagini dei contenitori e i registri | RA | I* | +| -------------------------------------------------- | ---------- | ---------------- | +| Creare e gestire i progetti Kubernetes | RA | I* | +| Distribuire e gestire le applicazioni in Kubernetes| RA | I* | +| Configurare le pipeline CI/CD | RA | I* | +| Gestire le immagini dei container e i registri | RA | I* | -*Queste responsabilità possono essere delegate a Cloud Temple tramite un contratto di infrastruttura aggiuntivo. +*Queste responsabilità possono essere delegate a Cloud Temple tramite un contratto di gestione complementare. ### Monitoraggio e prestazioni | **Attività** | **Cliente** | **Cloud Temple** | -| ----------------------------------------------- | ---------- | ---------------- | -| Monitorare le prestazioni del servizio Kubernetes | I | RA | -| Monitorare le prestazioni delle applicazioni | RA | | -| Gestire le allerte relative al servizio Kubernetes | I | RA | -| Gestire le allerte relative alle applicazioni | RA | | +| ----------------------------------------------- | ----------- | ---------------- | +| Monitorare le prestazioni del servizio Kubernetes | I | RA | +| Monitorare le prestazioni delle applicazioni | RA | | +| Gestire gli alert del servizio Kubernetes | I | RA | +| Gestire gli alert delle applicazioni | RA | | -### Manutenzione e aggiornamenti Infrastrutture +### Manutenzione e aggiornamenti delle infrastrutture | **Attività** | **Cliente** | **Cloud Temple** | -| ------------------------------------------------------ | ----------- | ---------------- | -| Aggiornare il servizio Kubernetes/OS | C | RA | -| Applicare i patch di sicurezza a Kubernetes | C | RA | -| Aggiornare le applicazioni distribuite (operatori*) | C | RA | +| ------------------------------------------------------ | ---------- | ---------------- | +| Aggiornare il servizio Kubernetes/OS | C | RA | +| Applicare le patch di sicurezza a Kubernetes | C | RA | +| Aggiornare le applicazioni distribuite (operatori*) | C | RA | -*Pacchetto operatore incluso nel Managed Kube - vedere capitoli: Pacchetti Helm gestiti +*Package operatore incluso su Managed Kube - vedere capitoli: Package Helm gestiti -### Security +### Sicurezza -| **Activity** | **Client** | **Cloud Temple** | +| **Attività** | **Client** | **Cloud Temple** | | -------------------------------------------------------------------------- | ---------- | ---------------- | -| Manage security for the Kubernetes service | RA | RA | -| Configure and manage pod security policies | RA | I* | -| Manage SSL/TLS certificates for the Kubernetes service | C | RA | -| Manage SSL/TLS certificates for applications | RA | I* | -| Implement and manage basic role-based access control (RBAC) | C | R | -| Implement and manage client role-based access control (RBAC) | RA | I* | +| Gestire la sicurezza del servizio Kubernetes | RA | RA | +| Configurare e gestire le politiche di sicurezza dei pod | RA | I* | +| Gestire i certificati SSL/TLS per il servizio Kubernetes | C | RA | +| Gestire i certificati SSL/TLS per le applicazioni | RA | I* | +| Implementare e gestire il controllo degli accessi basato sui ruoli di base (RBAC) | C | R | +| Implementare e gestire il controllo degli accessi basato sui ruoli client (RBAC) | RA | I* | -*These responsibilities may be delegated to Cloud Temple via a complementary managed services contract. +*Queste responsabilità possono essere delegate a Cloud Temple tramite un contratto di gestione complementare. -### Backup and Disaster Recovery +### Backup e disaster recovery -| **Activity** | **Client** | **Cloud Temple** | -| -------------------------------------------------------------------------- | ---------- | ---------------- | -| Define the backup strategy for the Kubernetes service | I | RA | -| Implement and manage backups for the Kubernetes service | I | RA | -| Define the backup strategy for applications | RA* | I* | -| Implement and manage backups for applications | RA* | I* | -| Test disaster recovery procedures for the Kubernetes service | CI | RA | -| Test disaster recovery procedures for applications | RA* | CI* | +| **Attività** | **Cliente** | **Cloud Temple** | +| -------------------------------------------------------------------------- | ----------- | ---------------- | +| Definire la strategia di backup per il servizio Kubernetes | I | RA | +| Implementare e gestire i backup del servizio Kubernetes | I | RA | +| Definire la strategia di backup per le applicazioni | RA* | I* | +| Implementare e gestire i backup delle applicazioni | RA* | I* | +| Testare le procedure di disaster recovery per il servizio Kubernetes | CI | RA | +| Testare le procedure di disaster recovery per le applicazioni | RA* | CI* | -*These responsibilities may be delegated to Cloud Temple via a complementary managed services contract. +*Queste responsabilità possono essere delegate a Cloud Temple tramite un contratto di gestione complementare. -### Support and troubleshooting +### Supporto e risoluzione dei problemi -| **Activity** | **Client** | **Cloud Temple** | -| --------------------------------------------------------- | ---------- | ---------------- | -| Provide level 1 support for infrastructure | I | RA | -| Provide level 2 and 3 support for infrastructure | I | RA | -| Resolve issues related to the Kubernetes service | C | RA | -| Resolve issues related to applications | RA | I | +| **Attività** | **Cliente** | **Cloud Temple** | +| --------------------------------------------------------- | ----------- | ---------------- | +| Fornire supporto di livello 1 per l'infrastruttura | I | RA | +| Fornire supporto di livello 2 e 3 per l'infrastruttura | I | RA | +| Risolvere i problemi relativi al servizio Kubernetes | C | RA | +| Risolvere i problemi relativi alle applicazioni | RA | I | -### Gestione delle capacità e evoluzione +### Gestione delle capacità e dell'evoluzione | **Attività** | **Cliente** | **Cloud Temple** | -| ------------------------------------------------------ | ----------- | ---------------- | -| Monitorare l'utilizzo delle risorse Kubernetes | C | RA | -| Pianificare l'evoluzione delle capacità del servizio | RA | C | -| Implementare i cambiamenti delle capacità | I | RA | -| Gestire l'evoluzione delle applicazioni e delle loro risorse | RA | I | +| ------------------------------------------------------ | ---------- | ---------------- | +| Monitorare l'utilizzo delle risorse Kubernetes | C | RA | +| Pianificare l'evoluzione delle capacità del servizio | RA | C | +| Implementare le modifiche alle capacità | I | RA | +| Gestire l'evoluzione delle applicazioni e delle loro risorse | RA | I | ### Documentazione e conformità | **Attività** | **Cliente** | **Cloud Temple** | -| ------------------------------------------------ | ----------- | ---------------- | -| Mantenere la documentazione del servizio Kubernetes | I | RA | -| Mantenere la documentazione delle applicazioni | RA | I | -| Garantire la conformità del servizio Kubernetes | I | RA | -| Garantire la conformità delle applicazioni | RA | I | -| Effettuare audit del servizio Kubernetes | I | RA | -| Effettuare audit delle applicazioni | RA | I | - -### Basic Kubernetes Operators/CRD Management - -| **Activity** | **Client** | **Cloud Temple** | -| ----------------------------------------------------------- | ---------- | ---------------- | -| Provisioning of default Operators catalog | CI | RA | -| Updating Operators | CI | RA | -| Monitoring Operators status | CI | RA | -| Troubleshooting Operator-related issues | CI | RA | -| Managing Operator permissions | CI | RA | -| Managing Operator resources (addition/removal) | CI | RA | -| Backing up Operator resources data | CI | RA | -| Monitoring Operator resources | CI | RA | -| Restoring Operator resources data | CI | RA | -| Security auditing of Operators | CI | RA | -| Operator support | CI | RA | -| License management for Operators | CI | RA | -| Management of specific support plans for Operators | CI | RA | - -*Operator package included in Managed Kube – see chapters: Managed Helm Packages - -### Management of Kubernetes applications/operators/CRDs (business) - -| **Activity** | **Client** | **Cloud Temple** | +| ------------------------------------------------ | ---------- | ---------------- | +| Mantenere la documentazione del servizio Kubernetes | I | RA | +| Mantenere la documentazione delle applicazioni | RA | I | +| Garantire la conformità del servizio Kubernetes | I | RA | +| Garantire la conformità delle applicazioni | RA | I | +| Eseguire audit del servizio Kubernetes | I | RA | +| Eseguire audit delle applicazioni | RA | I | + +### Gestione degli operatori/CRD Kubernetes di base + +| **Attività** | **Cliente** | **Cloud Temple** | +| ----------------------------------------------------------- | ----------- | ---------------- | +| Messa a disposizione del catalogo predefinito degli operatori | CI | RA | +| Aggiornamento degli operatori | CI | RA | +| Monitoraggio dello stato degli operatori | CI | RA | +| Risoluzione dei problemi legati agli operatori | CI | RA | +| Gestione dei permessi degli operatori | CI | RA | +| Gestione delle risorse degli operatori (aggiunta/rimozione) | CI | RA | +| Backup dei dati delle risorse degli operatori | CI | RA | +| Supervisione delle risorse degli operatori | CI | RA | +| Ripristino dei dati delle risorse degli operatori | CI | RA | +| Audit di sicurezza degli operatori | CI | RA | +| Supporto degli operatori | CI | RA | +| Gestione delle licenze degli operatori | CI | RA | +| Gestione dei piani di supporto specifici per gli operatori | CI | RA | + +*Package operatore incluso su Managed Kube - vedere capitoli: Package Helm gestiti + +### Gestione delle applicazioni/operatori/CRD Kubernetes (business) + +| **Attività** | **Cliente** | **Cloud Temple** | | ----------------------------------------------------------- | ---------- | ---------------- | -| Deployment of CRDs | RA* | I* | -| Update of Operators | RA | I | -| Monitoring of Operator status | RA | I | -| Troubleshooting issues related to Operators | RA | I | -| Management of Operator permissions | RA | I | -| Management of Operator resources (addition/removal) | RA | I | -| Backup of Operator resource data | RA | I | -| Monitoring of Operator resources | RA | I | -| Restoration of Operator resource data | RA | I | -| Security audit of Operators | RA | I | -| Support for Operators | RA | I | -| License management for Operators | RA | I | -| Management of specific support plans for Operators | RA | I | - -*These responsibilities may be delegated to Cloud Temple via a complementary managed services contract.* - -### Support applicativo +| Deploy dei CRDs | RA* | I* | +| Aggiornamento degli Operatori | RA | I | +| Monitoraggio dello stato degli Operatori | RA | I | +| Risoluzione dei problemi legati agli Operatori | RA | I | +| Gestione delle autorizzazioni degli Operatori | RA | I | +| Gestione delle risorse degli Operatori (aggiunta/rimozione) | RA | I | +| Backup dei dati delle risorse degli Operatori | RA | I | +| Supervisione delle risorse degli Operatori | RA | I | +| Ripristino dei dati delle risorse degli Operatori | RA | I | +| Audit di sicurezza degli Operatori | RA | I | +| Supporto degli Operatori | RA | I | +| Gestione delle licenze sugli operatori | RA | I | +| Gestione dei piani di supporto specifici sugli operatori | RA | I | + +*Queste responsabilità possono essere delegate a Cloud Temple tramite un contratto di gestione operativa complementare. + +### Supporto applicativo | **Attività** | **Cliente** | **Cloud Temple** | | ------------------------------------------- | ---------- | ---------------- | | Supporto applicativo (prestazione esterna) | RA | I | -Un support applicativo può inoltre essere fornito nell'ambito di una prestazione complementare. +Un supporto applicativo può inoltre essere fornito nell'ambito di una prestazione complementare. ### RACI (sintetico) -- Cloud Temple: responsabile e attore (RA) per la base Kubernetes, sicurezza del cluster, backup infrastruttura, monitoraggio. -- Cliente: responsabile e attore (RA) per i progetti applicativi, operatori aziendali, pipeline CI/CD, backup applicativi. -- Zona "grigia": adattamenti ed estensioni (IAM, operatori specifici, rafforzamento della conformità/sicurezza del cluster) - fatturati in modalità progetto. +- Cloud Temple: responsabile e attore (RA) della piattaforma Kubernetes, sicurezza del cluster, backup dell'infrastruttura, supervisione. +- Cliente: responsabile e attore (RA) dei progetti applicativi, operatori di business, pipeline CI/CD, backup applicativi. +- Zona "grigia": adattamenti ed estensioni (IAM, operatori specifici, hardening della conformità/sicurezza del cluster) - fatturati a progetto. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/contractual/llmaas/raci.md b/i18n/it/docusaurus-plugin-content-docs/current/contractual/llmaas/raci.md index dd89870c..bd9b9b03 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/contractual/llmaas/raci.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/contractual/llmaas/raci.md @@ -1,70 +1,72 @@ --- -title: Matrice de responsabilité - LLMaaS +title: Matrice di responsabilità - LLMaaS +displayed_sidebar: docSidebar --- -Voici le RACI du partage de responsabilité entre le client et Cloud Temple pour l'usage de la plateforme LLM as a Service (LLMaaS). -## Définition des différents rôles +Ecco il RACI della ripartizione delle responsabilità tra il cliente e Cloud Temple per l'utilizzo della piattaforma LLM as a Service (LLMaaS). -Nous rappelons ici les différents rôle du RACI : +## Definizione dei diversi ruoli -| Rôle | Description | +Ricordiamo qui i diversi ruoli del RACI : + +| Ruolo | Descrizione | | ------------ | ---------------------------------------- | -| (R) Réalise | __R__éalise le processus | -| (A) Approuve | __A__pprouve la réalisation du processus | -| (C) Consulte | __C__onsulté pendant le processus | -| (I) Informé | __I__nformé des résultats du processus | - -## Définir votre besoin - -| Activité | Rôle Client | Rôle Cloud Temple | -| --------------------------------------------------------------------- | ----------- | ----------------- | -| Valider que le service LLMaaS est conforme au besoin de l'application | __RA__ | __CI__ | -| Souscrire au service et sélectionner un tier de facturation | __RA__ | __I__ | - -## Mettre en oeuvre le service - -| Activité | Rôle Client | Rôle Cloud Temple | -| ---------------------------------------------------------------------------------- | ----------- | ----------------- | -| Assurer le maintien en condition opérationnelle de la plateforme LLMaaS (API, GPU) | __I__ | __RA__ | -| Assurer le maintien en condition de sécurité de la plateforme LLMaaS | __I__ | __RA__ | -| Gérer les clés d'accès API (création, rotation, révocation) | __RA__ | | -| Développer et maintenir le code de l'application cliente | __RA__ | | - -## Opérations récurrentes - -| Activité | Rôle Client | Rôle Cloud Temple | -| ---------------------------------------------------------------- | ----------- | ----------------- | -| Assurer la disponibilité de l'API LLMaaS | __I__ | __RA__ | -| Superviser le bon fonctionnement de la plateforme et des modèles | __I__ | __RA__ | -| Gérer les incidents sur la plateforme LLMaaS | __I__ | __RA__ | -| Gérer les problèmes sur la plateforme LLMaaS | __I__ | __RA__ | -| Gérer la capacité de l'infrastructure GPU | __I__ | __RA__ | -| Gérer les évolutions des modèles (ajout, dépréciation) | __C, I__ | __RA__ | -| Suivre la consommation et la facturation | __RA__ | __I__ | - -## Gestion de la sécurité - -| Activité | Rôle Client | Rôle Cloud Temple | -| --------------------------------------------------------------------------- | ----------- | ----------------- | -| Sécuriser l'infrastructure physique et la plateforme LLMaaS | __I__ | __RA__ | -| Gérer les accès et les permissions des utilisateurs finaux de l'application | __RA__ | | -| Sécuriser les données et les prompts envoyés à l'API | __RA__ | __C__ | -| Assurer la confidentialité des données traitées par les modèles | __R__ | __A__ | -| Gérer la conformité de l'application finale (RGPD, etc.) | __RA__ | __I__ | - -## Continuité d'activité - -| Activité | Rôle Client | Rôle Cloud Temple | -| --------------------------------------------------------------------- | ----------- | ----------------- | -| Assurer la continuité d'activité de la plateforme LLMaaS | __I__ | __RA__ | -| Assurer la sauvegarde des données de l'application cliente | __RA__ | | -| Maintenir le plan de continuité d'activité pour l'application cliente | __RA__ | | - -## Réversibilité - -| Activité | Rôle Client | Rôle Cloud Temple | -| --------------------------------------------------------------------------- | ----------- | ----------------- | -| Mettre en oeuvre le projet de réversibilité (planification, outils, cibles) | __RA__ | __C__ | -| Exporter les données et le code de l'application cliente | __RA__ | | -| Supprimer les clés d'API et les accès au service | __RA__ | | +| (R) Esegue | __R__alizza il processo | +| (A) Approva | __A__pprova l'esecuzione del processo | +| (C) Consulta | __C__onsultato durante il processo | +| (I) Informato| __I__nformato sui risultati del processo | + +## Definire le proprie esigenze + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +| --------------------------------------------------------------------- | ------------- | ------------------ | +| Verificare che il servizio LLMaaS sia conforme alle esigenze dell'applicazione | __RA__ | __CI__ | +| Sottoscrivere il servizio e selezionare un livello di fatturazione | __RA__ | __I__ | + +## Implementare il servizio + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +| ---------------------------------------------------------------------------------- | ------------- | ------------------ | +| Garantire il mantenimento in condizioni operative della piattaforma LLMaaS (API, GPU) | __I__ | __RA__ | +| Garantire il mantenimento in condizioni di sicurezza della piattaforma LLMaaS | __I__ | __RA__ | +| Gestire le chiavi di accesso API (creazione, rotazione, revoca) | __RA__ | | +| Sviluppare e mantenere il codice dell'applicazione client | __RA__ | | + +## Operazioni ricorrenti + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +| ---------------------------------------------------------------- | ------------- | ------------------ | +| Garantire la disponibilità dell'API LLMaaS | __I__ | __RA__ | +| Supervisionare il corretto funzionamento della piattaforma e dei modelli | __I__ | __RA__ | +| Gestire gli incidenti sulla piattaforma LLMaaS | __I__ | __RA__ | +| Gestire i problemi sulla piattaforma LLMaaS | __I__ | __RA__ | +| Gestire la capacità dell'infrastruttura GPU | __I__ | __RA__ | +| Gestire l'evoluzione dei modelli (aggiunta, deprecazione) | __C, I__ | __RA__ | +| Monitorare i consumi e la fatturazione | __RA__ | __I__ | + +## Gestione della sicurezza + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +| --------------------------------------------------------------------------- | ------------- | ------------------ | +| Proteggere l'infrastruttura fisica e la piattaforma LLMaaS | __I__ | __RA__ | +| Gestire gli accessi e i permessi degli utenti finali dell'applicazione | __RA__ | | +| Proteggere i dati e i prompt inviati all'API | __RA__ | __C__ | +| Garantire la riservatezza dei dati elaborati dai modelli | __R__ | __A__ | +| Gestire la conformità dell'applicazione finale (GDPR, ecc.) | __RA__ | __I__ | + +## Continuità operativa + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +| --------------------------------------------------------------------- | ------------- | ------------------ | +| Garantire la continuità operativa della piattaforma LLMaaS | __I__ | __RA__ | +| Garantire il backup dei dati dell'applicazione cliente | __RA__ | | +| Mantenere il piano di continuità operativa per l'applicazione cliente | __RA__ | | + +## Reversibilità + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +| --------------------------------------------------------------------------- | ------------- | ------------------ | +| Implementare il progetto di reversibilità (pianificazione, strumenti, obiettivi) | __RA__ | __C__ | +| Esportare i dati e il codice dell'applicazione cliente | __RA__ | | +| Eliminare le chiavi API e gli accessi al servizio | __RA__ | | \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/contractual/network/raci.md b/i18n/it/docusaurus-plugin-content-docs/current/contractual/network/raci.md index 26147c57..5eb89ef2 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/contractual/network/raci.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/contractual/network/raci.md @@ -1,16 +1,15 @@ --- -title: Matrice de responsabilité Réseau +title: Matrice di responsabilità di rete +displayed_sidebar: docSidebar --- -### Connectivité réseau client +### Connettività di rete client -| Activité | Rôle Client | Rôle Cloud Temple | -|------------------------------------------------------------------------------------------------------|-------------|-------------------| -| Souscrire à une connectivité réseau opérateur pour accéder à un datacenter physique Cloud Temple (6) | __RA__ | __CI__ | -| Gérer les incidents sur les liens réseaux opérateurs client | __RA__ | | -| Gérer les problèmes sur les liens réseaux opérateurs client | __RA__ | __I__ | -| Gérer les capacités sur les liens réseaux opérateurs client | __RA__ | __CI__ | +| Attività | Ruolo Client | Ruolo Cloud Temple | +|---|---|---| +| Sottoscrivere una connettività di rete operatore per accedere a un datacenter fisico Cloud Temple (6) | __RA__ | __CI__ | +| Gestire gli incidenti sui collegamenti di rete degli operatori client | __RA__ | | +| Gestire i problemi sui collegamenti di rete degli operatori client | __RA__ | __I__ | +| Gestire la capacità sui collegamenti di rete degli operatori client | __RA__ | __CI__ | -*(6) Cloud Temple assume la responsabilité du réseau concernant son infrastructure backbone, ses points de collecte ainsi que -les points d'interconnexion datacenter, garantissant ainsi la connectivité entre ces points et son réseau backbone. -Dans l'offre d'hébergement en baie physique, Cloud Temple assume la responsabilité à partir de l'équipement situé en haut du rack, communément appelé "top of rack".* +*(6) Cloud Temple assume la responsabilità della rete relativa alla propria infrastruttura backbone, ai punti di aggregazione nonché ai punti di interconnessione del datacenter, garantendo così la connettività tra tali punti e la propria infrastruttura backbone. Nell'offerta di hosting in rack fisico, Cloud Temple assume la responsabilità a partire dall'attrezzatura situata nella parte superiore del rack, comunemente definita "top of rack".* \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/contractual/network/raci_vpc.md b/i18n/it/docusaurus-plugin-content-docs/current/contractual/network/raci_vpc.md index 9486a8ae..64621f89 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/contractual/network/raci_vpc.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/contractual/network/raci_vpc.md @@ -1,188 +1,192 @@ --- -title: Modello di Responsabilità Condivisa — VPC +title: Modello di responsabilità condivisa — VPC slug: /contractual/network/raci-vpc --- -# Modello di Responsabilità Condivisa — VPC (Virtual Private Cloud) +# Modello di responsabilità condivisa — VPC (Virtual Private Cloud) -Questo modello **RACI** definisce la distribuzione delle responsabilità tra il cliente e Cloud Temple per il servizio **VPC (Virtual Private Cloud)**. +Ecco il modello **RACI** che definisce la ripartizione delle responsabilità tra il cliente e Cloud Temple per l'utilizzo del servizio **VPC (Virtual Private Cloud)**. -> **Particolarità del servizio VPC** -> Il VPC è un servizio di rete **completamente gestito da Cloud Temple**, che offre un'esperienza cloud-nativa: routing automatico, alta disponibilità integrata e gestione nativa di IPAM/DHCP. Cloud Temple garantisce il funzionamento e la disponibilità dell'infrastruttura di rete sottostante (router VPC, backbone inter-AZ, gateway esterno). Il cliente è responsabile della progettazione, della configurazione e della sicurezza del proprio spazio di rete: sottoreti, indirizzamento, politiche di filtraggio e interconnessioni. +> **Particolarità dell'offerta VPC** +> Il VPC è un servizio di rete **completamente gestito da Cloud Temple**, che offre un'esperienza cloud-native: instradamento automatico, alta disponibilità integrata e gestione IPAM/DHCP nativa. Cloud Temple garantisce il funzionamento e la disponibilità dell'infrastruttura di rete sottostante (router VPC, backbone inter-AZ, gateway esterno). Il cliente è responsabile della progettazione, della configurazione e della sicurezza del proprio spazio di rete: subnet, indirizzamento, politiche di filtraggio e interconnessioni. --- -## Definizione dei Ruoli +## Definizione dei ruoli -| Ruolo | Descrizione | -|------------------|---------------------------------------------------------------------------------------------------| -| (R) Responsabile | __R__ealizza il processo | -| (A) Approva | __A__pprova il completamento del processo | -| (C) Consultato | __C__onsultato durante il processo | -| (I) Informato | __I__nformato dei risultati del processo | +| Ruolo | Descrizione | +|----------------|---------------------------------------------------------------------------------------| +| (R) Esegue | __R__ealizza il processo | +| (A) Approva | __A__pprova la realizzazione del processo | +| (C) Consulta | __C__onsultato durante il processo | +| (I) Informato | __I__nformato sui risultati del processo (tramite strumenti, portale o messaggistica) | --- -## Infrastruttura di Rete Fisica e Backbone +## Infrastruttura di rete fisica e backbone -| Attività | Cliente | Cloud Temple | -|---------------------------------------------------------------------------------------------------------------|---------|--------------| -| Garantire l'implementazione e il mantenimento dell'**infrastruttura di rete fisica** | | **RA** | -| Garantire la connettività **inter-datacenter / inter-AZ** del backbone Cloud Temple | **I** | **RA** | -| Mantenere la **rete backbone** in condizione operativa | **I** | **RA** | -| Mantenere la **rete backbone** in condizione di sicurezza | **I** | **RA** | -| Gestire incidenti, problemi e capacità della rete backbone | **I** | **RA** | -| Acquisire e mantenere le **licenze** necessarie per il funzionamento dell'infrastruttura di rete | | **RA** | +Cloud Temple è interamente responsabile dell'infrastruttura fisica e del backbone di rete su cui si basa il VPC. + +| Attività | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|---------|--------------| +| Garantire l'implementazione e la manutenzione delle infrastrutture di rete **fisiche** (switch, router backbone) | | **RA** | +| Garantire la connettività **inter-datacenter / inter-AZ** del backbone Cloud Temple | **I** | **RA** | +| Garantire il mantenimento in condizioni operative del **backbone di rete** Cloud Temple | **I** | **RA** | +| Garantire il mantenimento in condizioni di sicurezza del **backbone di rete** Cloud Temple | **I** | **RA** | +| Gestire gli incidenti, i problemi e le capacità del backbone di rete | **I** | **RA** | +| Acquisire e mantenere le licenze essenziali per il funzionamento dell'infrastruttura di rete | | **RA** | --- -## Infrastruttura VPC (Router, Gateway e IPAM) +## Infrastruttura VPC (router, gateway & IPAM) + +Cloud Temple garantisce il funzionamento dei componenti core del VPC. Il cliente configura il proprio spazio di rete all'interno di questa infrastruttura. -| Attività | Cliente | Cloud Temple | -|---------------------------------------------------------------------------------------------------------------|---------|--------------| -| Mantenere il **Router VPC** in condizione operativa *(1)* | **I** | **RA** | -| Garantire l'**alta disponibilità** del Router VPC | **I** | **RA** | -| Mantenere il **Gateway Esterno (External Gateway)** in condizione operativa *(1)* | **I** | **RA** | -| Garantire l'**alta disponibilità** del Gateway Esterno | **I** | **RA** | -| Garantire il funzionamento del servizio **IPAM & DHCP** sottostante | **I** | **RA** | -| Gestire incidenti e problemi sui componenti core del VPC | **I** | **RA** | -| Aggiornare e mantenere in sicurezza i componenti core del VPC | **I** | **RA** | +| Attività | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|---------|--------------| +| Garantire il mantenimento in condizioni operative del **router VPC** *(1)* | **I** | **RA** | +| Garantire l'**alta disponibilità** del router VPC | **I** | **RA** | +| Garantire il mantenimento in condizioni operative del **Gateway Esterno (External Gateway)** *(1)* | **I** | **RA** | +| Garantire l'**alta disponibilità** del Gateway Esterno | **I** | **RA** | +| Garantire il funzionamento del servizio **IPAM & DHCP** sottostante | **I** | **RA** | +| Gestire gli incidenti e i problemi sui componenti core del VPC | **I** | **RA** | +| Aggiornare e mantenere in condizioni di sicurezza i componenti core del VPC | **I** | **RA** | -*(1) Il Router VPC e il Gateway Esterno sono componenti completamente gestiti da Cloud Temple. La loro disponibilità è garantita da Cloud Temple nel quadro del SLA del servizio VPC.* +*(1) Il router VPC e il Gateway Esterno sono componenti interamente gestiti da Cloud Temple. La loro disponibilità è garantita da Cloud Temple nell'ambito dello SLA del servizio VPC.* --- -## Provisioning e Configurazione del VPC +## Provisioning e configurazione del VPC + +Il cliente è responsabile della creazione e della configurazione del proprio VPC nonché delle risorse di rete che lo compongono. -| Attività | Cliente | Cloud Temple | -|---------------------------------------------------------------------------------------------------------------|---------|--------------| -| Creare, modificare ed eliminare un **VPC** | **RA** | **I** | -| Definire l'architettura di rete del VPC (numero di sottoreti, topologia) | **RA** | | -| Creare, modificare ed eliminare **reti private (Private Networks / VLAN)** nel VPC | **RA** | **I** | -| Definire il **piano di indirizzamento IP** (range CIDR) delle reti private | **RA** | **I** | -| Configurare i **pool DHCP** (range dinamici, DNS, gateway) | **RA** | **C** | -| Attivare e configurare il **Gateway Esterno** (accesso Internet, NAT, DNAT) *(2)* | **RA** | **C** | -| Gestire le **route statiche** all'interno del VPC | **RA** | | +| Attività | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|---------|--------------| +| Creare, modificare ed eliminare un **VPC** | **RA** | **I** | +| Definire l'architettura di rete del VPC (nombre de sous-réseaux, topologie) | **RA** | | +| Creare, modifier et supprimer des **reti private (Private Networks / VLANs)** nel VPC | **RA** | **I** | +| Definire il **piano di indirizzamento IP** (plages CIDR) delle reti private | **RA** | **I** | +| Configurare i **pool DHCP** (plages dynamiques, DNS, gateway) | **RA** | **C** | +| Attivare e configurare il **Gateway Esterno** (accès Internet, NAT, DNAT) *(2)* | **RA** | **C** | +| Gestire le **rotte statiche** all'interno del VPC | **RA** | | -*(2) L'attivazione del Gateway Esterno apre l'accesso Internet per il VPC. Il cliente è responsabile delle regole di filtraggio e del controllo del traffico associati.* +*(2) L'attivazione del Gateway Esterno apre l'accesso a Internet per il VPC. Il cliente è responsabile delle regole di filtraggio e del controllo del traffico associato.* --- -## IP Pubbliche ed Esposizione Internet +## IP pubblici & esposizione Internet -| Attività | Cliente | Cloud Temple | -|---------------------------------------------------------------------------------------------------------------|---------|--------------| -| Allocare il **pool di IP pubbliche** disponibili sulla piattaforma | **I** | **RA** | -| Ordinare e associare **IP pubbliche (IP flottanti)** al proprio VPC | **RA** | **I** | -| Configurare le regole **NAT / DNAT** per l'esposizione dei servizi | **RA** | | -| Gestire il ciclo di vita delle IP pubbliche (associazione, rilascio, spostamento) | **RA** | **I** | -| Garantire che i servizi esposti su Internet rispettino le politiche di sicurezza applicabili | **RA** | | +| Attività | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|---------|--------------| +| Assegnare il **pool di IP pubblici** disponibile sulla piattaforma | **I** | **RA** | +| Richiedere e associare **IP pubblici (IP fluttuanti)** al proprio VPC | **RA** | **I** | +| Configurare le regole **NAT / DNAT** per l'esposizione dei servizi | **RA** | | +| Gestire il ciclo di vita degli IP pubblici (associazione, rilascio, spostamento) | **RA** | **I** | +| Assicurarsi che i servizi esposti su Internet rispettino le politiche di sicurezza applicabili | **RA** | | --- -## Sicurezza di Rete +## Sicurezza di rete -| Attività | Cliente | Cloud Temple | -|---------------------------------------------------------------------------------------------------------------|---------|--------------| -| Garantire l'**isolamento di rete tra tenant** a livello di piattaforma *(3)* | | **RA** | -| Definire e configurare le **politiche di micro-segmentazione** (security group) *(4)* | **RA** | | -| Implementare il **filtraggio del traffico** in entrata/uscita (firewall applicativo, IDS/IPS) *(5)* | **RA** | | -| Gestire i **certificati TLS** e la terminazione SSL dei servizi esposti | **RA** | | -| Eseguire **test di penetrazione** sulle risorse ospitate nel VPC *(6)* | **RA** | **C** | -| Monitorare i **comportamenti anomali** sui flussi di rete del tenant | **RA** | | +| Attività | Client | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| Garantire l'**isolamento di rete inter-tenant** a livello di piattaforma *(3)* | | **RA** | +| Definire e configurare le **politiche di micro-segmentazione** (security groups) *(4)* | **RA** | | +| Implementare un **filtraggio dei flussi** in entrata/uscita (firewall applicativo, IDS/IPS) *(5)* | **RA** | | +| Gestire i **certificati TLS** e la terminazione SSL dei servizi esposti | **RA** | | +| Eseguire **test di intrusione** sulle risorse ospitate nel VPC *(6)* | **RA** | **C** | +| Monitorare i **comportamenti anomali** sui flussi di rete del tenant | **RA** | | -*(3) Cloud Temple garantisce l'isolamento rigoroso tra VPC appartenenti a tenant diversi.* -*(4) La micro-segmentazione (security group) sarà disponibile nel H1 2026.* -*(5) Il filtraggio del traffico applicativo nel VPC è responsabilità del cliente.* -*(6) I test di penetrazione devono essere dichiarati in anticipo a Cloud Temple.* - ---- +*(3) Cloud Temple garantisce l'isolamento rigoroso tra VPC appartenenti a tenant diversi. Nessun flusso può attraversare questa barriera senza un'azione esplicita del client.* +*(4) La micro-segmentazione (security groups) sarà disponibile nel S1 2026. Le politiche di filtraggio che si applicano prima di tale disponibilità devono essere implementate dal client tramite un'attrezzatura di sicurezza dedicata.* +*(5) Il filtraggio applicativo dei flussi all'interno del VPC è di responsabilità del client. Cloud Temple non effettua ispezione del contenuto dei flussi del tenant.* +*(6) I test di intrusione devono essere oggetto di una dichiarazione preventiva a Cloud Temple, conformemente alle condizioni generali di utilizzo.* -## Interconnessione con Reti Esterne +## Interconnessione con reti esterne -| Attività | Cliente | Cloud Temple | -|---------------------------------------------------------------------------------------------------------------|---------|--------------| -| Definire la **strategia di interconnessione** con ambienti on-premise o altri cloud | **RA** | **C** | -| Sottoscrivere e configurare un accesso **VPN site-to-site** *(disponibile H2 2026)* | **RA** | **C** | -| Sottoscrivere e configurare **Cloud Connect** (link dedicato) *(disponibile H2 2026)* | **RA** | **C** | -| Gestire i **BGP / route** associati alle interconnessioni operatore | **RA** | **CI** | -| Garantire la **sicurezza dei flussi** transitanti sulle interconnessioni | **RA** | | +| Attività | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|---------|--------------| +| Definire la strategia di **interconnessione** con ambienti on-premise o altri cloud | **RA** | **C** | +| Sottoscrivere e configurare un accesso **VPN site-to-site** *(disponibile S2 2026)* | **RA** | **C** | +| Sottoscrivere e configurare un accesso **Cloud Connect** (collegamento dedicato) *(disponibile S2 2026)* | **RA** | **CI** | +| Gestire i **BGP / route** associati alle interconnessioni dell'operatore | **RA** | **CI** | +| Garantire la **sicurezza dei flussi** in transito sulle interconnessioni | **RA** | | --- -## Connessione delle Risorse al VPC +## Connessione delle risorse al VPC -| Attività | Cliente | Cloud Temple | -|---------------------------------------------------------------------------------------------------------------|---------|--------------| -| Collegare **istanze VM** a una rete privata del VPC | **RA** | **I** | -| Collegare **risorse IaaS** (VM VMware, OpenIaaS) alle reti private del VPC | **RA** | **C** | -| Configurare le **interfacce di rete** delle risorse connesse al VPC | **RA** | | -| Garantire che le risorse connesse applichino **configurazioni di rete coerenti** (gateway, DNS) | **RA** | | +| Attività | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|---------|--------------| +| Collegare le **istanze VM** a una rete privata del VPC | **RA** | **I** | +| Collegare le **risorse IaaS** (VMs VMware, OpenIaaS) alle reti private del VPC | **RA** | **C** | +| Configurare le **interfacce di rete** delle risorse collegate al VPC | **RA** | | +| Verificare che le risorse collegate applichino **configurazioni di rete coerenti** (gateway, DNS) | **RA** | | --- -## Monitoraggio e Osservabilità di Rete +## Monitoraggio e osservabilità di rete -| Attività | Cliente | Cloud Temple | -|---------------------------------------------------------------------------------------------------------------|---------|--------------| -| Monitorare il funzionamento dei **componenti core del VPC** (router, gateway) | **I** | **RA** | -| Monitorare le **performance del backbone** di rete Cloud Temple | **I** | **RA** | -| Raccogliere e analizzare i **log di flusso di rete** (flow log) del VPC *(disponibile H1 2026)* | **RA** | **I** | -| Implementare la **supervisione dei flussi applicativi** nel VPC | **RA** | | -| Monitorare la **latenza e la larghezza di banda** dei flussi nel VPC | **RA** | **I** | +| Attività | Client | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| Monitorare il funzionamento dei **componenti core del VPC** (router, gateway) | **I** | **RA** | +| Monitorare le **prestazioni del backbone** di rete Cloud Temple | **I** | **RA** | +| Raccogliere e analizzare i **log di flusso di rete** (flow logs) del VPC *(disponibile S1 2026)* | **RA** | **I** | +| Implementare una **supervisione dei flussi** applicativi nel VPC | **RA** | | +| Monitorare la **latenza e la banda passante** dei flussi all'interno del VPC | **RA** | **I** | --- -## Gestione delle Modifiche e Capacità +## Gestione dei cambiamenti e delle capacità -| Attività | Cliente | Cloud Temple | -|---------------------------------------------------------------------------------------------------------------|---------|--------------| -| Decidere di aggiungere, modificare o rimuovere risorse di rete nel proprio VPC | **RA** | **CI** | -| Gestire capacità e scalabilità dell'infrastruttura di rete backbone | | **RA** | -| Pianificare e gestire la crescita del piano di indirizzamento IP nel VPC | **RA** | **C** | +| Attività | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|--------|--------------| +| Prendere la decisione di aggiungere, modificare o rimuovere risorse di rete nel proprio VPC | **RA** | **CI** | +| Gestire le capacità e la scalabilità dell'infrastruttura di rete backbone | | **RA** | +| Pianificare e gestire la crescita del piano di indirizzamento IP nel VPC | **RA** | **C** | --- -## Gestione degli Accessi e delle Identità +## Gestione degli accessi e delle identità -| Attività | Cliente | Cloud Temple | -|---------------------------------------------------------------------------------------------------------------|---------|--------------| -| Garantire l'accessibilità della **Console Cloud Temple** e dell'API di rete | | **RA** | -| Gestire le abilitazioni dei team Cloud Temple all'infrastruttura di rete | | **RA** | -| Amministrare i diritti di accesso al VPC nella Console Cloud Temple (IAM) | **RA** | | +| Attività | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|---------|--------------| +| Garantire l'accessibilità alla **Console Cloud Temple** e all'API di rete | | **RA** | +| Gestire le autorizzazioni dei team Cloud Temple per l'infrastruttura di rete | | **RA** | +| Amministrare i permessi di accesso al VPC nella Console Cloud Temple (IAM) | **RA** | | --- -## Log (Registri) +## Log -| Attività | Cliente | Cloud Temple | -|---------------------------------------------------------------------------------------------------------------|---------|--------------| -| Conservare e mettere a disposizione i **log della piattaforma VPC** *(7)* | | **RA** | -| Raccogliere e conservare i **log di flusso** e i log applicativi del tenant | **RA** | | +| Attività | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|---------|--------------| +| Conservare e rendere disponibili i **log della piattaforma VPC** *(7)* | | **RA** | +| Raccogliere e conservare i **log di flusso** e i log applicativi del tenant | **RA** | | -*(7) La durata di conservazione dei log della piattaforma VPC è specificata nell'accordo di servizio corrispondente.* +*(7) La durata di conservazione dei log della piattaforma VPC è specificata nel contratto di servizio corrispondente.* --- -## Documentazione e Contrattuale +## Documentazione & contrattualità -| Attività | Cliente | Cloud Temple | -|---------------------------------------------------------------------------------------------------------------|---------|--------------| -| Gestire gli aspetti commerciali e contrattuali | **I** | **RA** | -| Monitorare l'esecuzione contrattuale del servizio | **RA** | **I** | -| Mantenere e mettere a disposizione la documentazione tecnica del servizio VPC | **I** | **RA** | -| Documentare l'architettura di rete deployata nel tenant (schemi, CMDB) | **RA** | | +| Attività | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|---------|--------------| +| Gestire l'aspetto commerciale e contrattuale (devis, commandes, facturation) | **I** | **RA** | +| Gestire il monitoraggio contrattuale della prestazione | **RA** | **I** | +| Garantire la manutenzione e la disponibilità della documentazione tecnica del servizio VPC | **I** | **RA** | +| Documentare l'architettura di rete distribuita nel proprio tenant (schémas, CMDB) | **RA** | | --- ## Reversibilità -| Attività | Cliente | Cloud Temple | -|---------------------------------------------------------------------------------------------------------------|---------|--------------| -| Pianificare il progetto di reversibilità di rete e scegliere le architetture target | **RA** | **I** | -| Esportare la configurazione VPC e le risorse di rete tramite API o strumenti forniti | **RA** | **I** | -| Procedere allo smantellamento delle configurazioni VPC a seguito della risoluzione del contratto | **I** | **RA** | +| Attività | Cliente | Cloud Temple | +|-------------------------------------------------------------------------------------------------------------|---------|--------------| +| Pianificare il progetto di reversibilità di rete e selezionare le architetture target | **RA** | **I** | +| Esportare la configurazione del VPC e delle risorse di rete tramite API o gli strumenti messi a disposizione | **RA** | **I** | +| Procedere allo smantellamento delle configurazioni VPC in seguito alla cessazione | **I** | **RA** | --- -> *Sono disponibili servizi professionali se si desidera delegare a Cloud Temple alcune o tutte le responsabilità. Contattare il proprio account manager Cloud Temple.* +> *Sono disponibili servizi professionali qualora si desideri delegare tutte o parte delle responsabilità indicate come a carico del cliente. Contattare il proprio referente commerciale Cloud Temple.* \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/contractual/network/sla_vpc.md b/i18n/it/docusaurus-plugin-content-docs/current/contractual/network/sla_vpc.md index e41a9e82..5080c9c8 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/contractual/network/sla_vpc.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/contractual/network/sla_vpc.md @@ -8,94 +8,94 @@ displayed_sidebar: docSidebar | | | | :--- | :--- | -| **Ultimo aggiornamento** | 17 aprile 2026 | +| **Data dell'ultimo aggiornamento** | 17 aprile 2026 | -Il presente documento definisce gli Accordi sul Livello di Servizio (SLA) applicabili al prodotto **Virtual Private Cloud (VPC)** fornito da **Cloud Temple** (di seguito denominato «il Fornitore» o «Cloud Temple»). Integra le Condizioni Generali di Vendita e di Servizio di Cloud Temple e costituisce con esse un tutto inscindibile. +Il presente documento definisce gli Impegni sul Livello di Servizio (SLA) applicabili al prodotto **Virtual Private Cloud (VPC)** fornito da **Cloud Temple** (di seguito denominato « il Fornitore » o « Cloud Temple »). Integra le Condizioni Generali di Vendita e di Servizio di Cloud Temple e costituisce un tutto inscindibile con le stesse. --- ## 1. Definizioni -Nel quadro del presente SLA, i seguenti termini con iniziale maiuscola hanno il significato indicato di seguito: +Nel quadro del presente SLA, i seguenti termini con iniziale maiuscola hanno il significato riportato di seguito : -- **Tasso di Disponibilità Mensile**: La percentuale di tempo di corretto funzionamento garantita per il piano dati del servizio VPC durante un mese solare. -- **Servizio VPC**: L'insieme dei componenti gestiti da Cloud Temple che costituiscono il Virtual Private Cloud: router VPC, reti private (Private Networks) e gateway esterno (External Gateway) con le sue funzionalità NAT, DNAT e IP flottanti. -- **Piano Dati**: Il piano di trasporto di rete che garantisce il routing dei flussi tra le reti private dello stesso VPC nonché la connettività Internet tramite il gateway esterno. -- **Piano di Controllo**: Le API e le interfacce (Console Cloud Temple) che consentono la creazione, la modifica e l'eliminazione delle risorse VPC (reti, router, IP flottanti, regole di sicurezza). -- **Periodo di Indisponibilità**: Interruzione completa del routing tra le reti private dello stesso VPC, o perdita totale della connettività Internet tramite il gateway esterno attivato, rilevata dagli strumenti di monitoraggio di Cloud Temple. -- **Durata dell'Indisponibilità**: Tempo ininterrotto durante il quale si constata il Periodo di Indisponibilità. Per essere contabilizzata ai sensi del presente SLA, una Durata dell'Indisponibilità deve essere di almeno **cinque (5) minuti consecutivi**. +- **Tasso di Disponibilità Mensile** : La percentuale di tempo di funzionamento garantito per il piano dati del servizio VPC durante un mese civile. +- **Servizio VPC** : L'insieme dei componenti gestiti da Cloud Temple che costituiscono il Virtual Private Cloud : router VPC, reti private (Private Networks), e gateway esterno (External Gateway) con le relative funzionalità NAT, DNAT e IP fluttuanti. +- **Piano Dati** : Il piano di trasporto di rete che garantisce il routing dei flussi tra le reti private dello stesso VPC, nonché la connettività Internet tramite il gateway esterno. +- **Piano di Controllo** : Le API e le interfacce (Console Cloud Temple) che consentono la creazione, la modifica e l'eliminazione delle risorse VPC (reti, router, IP fluttuanti, regole di sicurezza). +- **Periodo di Indisponibilità** : Interruzione completa del routing tra le reti private dello stesso VPC, o perdita totale della connettività Internet tramite il gateway esterno quando è attivo, rilevata dagli strumenti di monitoraggio di Cloud Temple. +- **Durata di Indisponibilità** : Tempo ininterrotto durante il quale viene rilevato il Periodo di Indisponibilità. Per essere conteggiata ai fini del presente SLA, una Durata di Indisponibilità deve essere di almeno **cinque (5) minuti consecutivi**. --- ## 2. Impegni sul Livello di Servizio (SLA) -Cloud Temple si impegna ai seguenti livelli di disponibilità mensile: +Cloud Temple si impegna per i seguenti livelli di disponibilità mensili: | Componente | Tasso di Disponibilità Mensile garantito | | :--- | :---: | -| **Piano Dati VPC** (routing inter-rete, NAT, DNAT) | **99,99 %** | -| **Piano di Controllo VPC** (API, Console Cloud Temple) | **99,9 %** | +| **Piano dati VPC** (routing inter-rete, NAT, DNAT) | **99,99 %** | +| **Piano di controllo VPC** (API, Console Cloud Temple) | **99,9 %** | -Un Tasso di Disponibilità Mensile del **99,99 %** per il piano dati corrisponde a un massimo di **4,4 minuti** di indisponibilità autorizzata per mese solare. +Un Tasso di Disponibilità Mensile di **99,99 %** per il piano dati corrisponde a un massimo di **4,4 minuti** di tempo di inattività consentito per mese civile. -In caso di mancato rispetto di questi impegni, il Cliente potrà richiedere Crediti di Servizio alle condizioni definite all'Articolo 5. +In caso di mancato rispetto di tali impegni, il Cliente potrà richiedere Crediti di Servizio nelle condizioni definite all'Articolo 5. --- -## 3. Misurazione e perimetro della Disponibilità +## 3. Misura e ambito di disponibilità -La sorveglianza e il calcolo del Tasso di Disponibilità Mensile sono effettuati **esclusivamente dagli strumenti di monitoraggio dell'infrastruttura di Cloud Temple**. +Il monitoraggio e il calcolo del Tasso di Disponibilità Mensile vengono eseguiti **esclusivamente dagli strumenti di monitoraggio dell'infrastruttura di Cloud Temple**. -**Perimetro di responsabilità:** -Il presente SLA copre unicamente i componenti di rete **gestiti da Cloud Temple**: +**Ambito di responsabilità :** +Il presente SLA copre esclusivamente i componenti di rete **gestiti da Cloud Temple** : - Il router VPC e la tabella di routing interna. -- Le Reti Private (segmenti L2) e la loro disponibilità a livello del piano dati. -- Il Gateway Esterno (External Gateway), le sue funzionalità NAT, DNAT e gli IP flottanti associati. +- Le Private Networks (segmenti L2) e la loro disponibilità a livello di piano dati. +- Il gateway esterno (External Gateway), le sue funzionalità NAT, DNAT e gli indirizzi IP flottanti associati. :::info -Le risorse di calcolo (VM Instances, IaaS OpenSource, IaaS VMware) connesse al VPC sono soggette a SLA distinti e non sono coperte dal presente documento. +Le risorse di calcolo (Istanze VM, IaaS OpenSource, IaaS VMware) connesse al VPC sono oggetto di SLA distinti e non sono coperte dal presente documento. ::: --- -## 4. Esclusioni di Garanzia +## 4. Esclusioni dalla Garanzia -Il presente SLA non costituisce un impegno sugli elementi al di fuori del controllo diretto di Cloud Temple. **Non** sono considerate Periodi di Indisponibilità le interruzioni derivanti da: +Il presente SLA non costituisce un impegno per gli elementi al di fuori del controllo diretto di Cloud Temple. Non sono **considerati** Periodi di Inattività le interruzioni risultanti da : -1. **Configurazioni del Cliente**: Regole di filtraggio di rete (Security Groups, ACL) configurate dal Cliente che bloccano la connettività, conflitti di indirizzi IP, errata configurazione di sottoreti o route statiche. +1. **Configurazioni del Cliente** : Regole di filtraggio della rete (Security Groups, ACLs) configurate dal Cliente che bloccano la connettività, conflitti di indirizzamento IP, configurazione errata di sottoreti o route statiche. -2. **Guasti delle risorse collegate**: Guasti a livello del sistema operativo o delle applicazioni ospitate sulle istanze di calcolo (VM Instances, IaaS, Bare Metal) collegate al VPC. +2. **Guasti delle risorse connesse** : Guasti a livello del sistema operativo o delle applicazioni ospitate sulle istanze di calcolo (Istanze VM, IaaS, Bare Metal) connesse al VPC. -3. **Connettività Internet esterna**: Interruzioni di connettività oltre il punto di demarcazione di Cloud Temple (incidenti presso i provider di transito Internet, degradazioni dei collegamenti BGP upstream). +3. **Connettività Internet esterna** : Interruzioni della connettività che si verificano oltre il punto di demarcazione di Cloud Temple (incidenti presso gli operatori di transit Internet, degradazioni dei collegamenti BGP upstream). -4. **Manutenzione programmata**: Interventi di manutenzione sull'infrastruttura di rete di Cloud Temple che siano stati notificati preventivamente nell'ambito delle finestre di manutenzione previste dal contratto di supporto del Cliente. +4. **Manutenzione programmata** : Interventi di manutenzione sull'infrastruttura di rete di Cloud Temple oggetto di notifica preventiva nell'ambito delle finestre di manutenzione previste dal contratto di supporto del Cliente. -5. **Comportamento abusivo o violazione**: Sospensione del servizio VPC da parte di Cloud Temple a seguito di una violazione delle Condizioni Generali o dei requisiti di sicurezza. +5. **Comportamento abusivo o violazione** : Sospensione del servizio VPC da parte di Cloud Temple in seguito a una violazione delle Condizioni Generali o dei requisiti di sicurezza (es. : attività di rete malevola, mancato rispetto delle Condizioni di Utilizzo Accettabile). -6. **Forza maggiore**: Eventi al di fuori del ragionevole controllo di Cloud Temple. +6. **Forza maggiore** : Eventi al di fuori del controllo ragionevole di Cloud Temple (disastri naturali, atti di guerra, interruzioni nazionali dell'energia, ecc.). --- ## 5. Crediti di Servizio e Penali -### 5.1 Piano Dati VPC +### 5.1 Piano dati VPC -Se il Tasso di Disponibilità Mensile del 99,99 % non viene raggiunto per il piano dati, il Cliente ha diritto a un Credito di Servizio calcolato come percentuale dell'importo mensile fatturato per il servizio VPC: +Se il Tasso di Disponibilità Mensile del 99,99 % non viene raggiunto per il piano dati, il Cliente ha diritto a un Credito di Servizio calcolato in percentuale dell'importo mensile fatturato per il servizio VPC : -| Tasso di disponibilità mensile riscontrato | Credito di Servizio | +| Tasso di disponibilità mensile rilevato | Credito di Servizio | | :--- | :---: | -| Tra 99,00 % e 99,98 % | 10 % | -| Tra 95,00 % e 98,99 % | 25 % | +| Tra il 99,00 % e il 99,98 % | 10 % | +| Tra il 95,00 % e il 98,99 % | 25 % | | Inferiore al 95,00 % | 100 % | -### 5.2 Piano di Controllo VPC +### 5.2 Piano di controllo VPC -Se il Tasso di Disponibilità Mensile del 99,9 % non viene raggiunto per il piano di controllo, il Cliente ha diritto a un Credito di Servizio del **10 %** dell'importo mensile fatturato per il servizio VPC. +Se il Tasso di Disponibilità Mensile del 99,9 % non viene raggiunto per il piano di controllo, il Cliente ha diritto a un Credito di Servizio del **10 %** dell'importo mensile fatturato per il servizio VPC interessato. ### 5.3 Modalità di reclamo -Per ottenere un Credito di Servizio, il Cliente deve presentare una richiesta motivata aprendo un ticket presso il supporto di Cloud Temple entro **trenta (30) giorni solari** successivi al mese in cui si è verificato l'incidente. +Per ottenere un Credito di Servizio, il Cliente deve presentare una richiesta motivata aprendo un ticket presso il supporto Cloud Temple entro **trenta (30) giorni calendario** dal mese in cui si è verificato l'incidente. -La richiesta deve contenere: -- L'identificatore (UUID) del VPC interessato -- I timestamp precisi del Periodo di Indisponibilità riscontrato +La richiesta dovrà includere: +- L'identificativo (UUID) del VPC interessato +- I timestamp precisi del Periodo di Indisponibilità constatato \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/contractual/paas/mco_mcs.md b/i18n/it/docusaurus-plugin-content-docs/current/contractual/paas/mco_mcs.md index 79b2e20e..2ce702b8 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/contractual/paas/mco_mcs.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/contractual/paas/mco_mcs.md @@ -1,65 +1,74 @@ --- -title: MCO/MCS +title: MCO/MCS PaaS OpenShift +slug: /contractual/paas/mco-mcs +displayed_sidebar: docSidebar --- -**Politica di Mantenimento in Condizioni Operative (MCO) e di Mantenimento in Condizioni di Sicurezza (MCS) sul PaaS OpenShift SNC **Cloud Temple**** + +**Politica di Manutenzione in Condizioni Operative (MCO) e di Manutenzione in Condizioni di Sicurezza (MCS) sul PaaS OpenShift SNC **Cloud Temple**** ## Premessa Questa politica dettaglia le responsabilità e le raccomandazioni relative al Mantenimento in Condizioni Operative (MCO) e al Mantenimento in Condizioni di Sicurezza (MCS) dei vostri ambienti sul PaaS OpenShift SNC **Cloud Temple**. -## Maintenance in Operational Conditions (MCO) +--- + +## Manutenzione in Condizioni Operative (MCO) ### Gestione e aggiornamento dei cluster -**Responsabilità di Cloud Temple:** +**Responsabilità di **Cloud Temple** :** - Gestione completa dell'infrastruttura sottostante, inclusi i nodi master, gli aggiornamenti delle versioni OpenShift e la resilienza dei servizi critici distribuiti da **Cloud Temple**. -- Aggiornamenti minori/patch automatici senza interruzioni per i carichi di lavoro ospitati, salvo comunicazione contraria. -- Limitazione dei diritti e delle funzionalità secondo i vincoli SecNumCloud. -- Comunicazione degli aggiornamenti imminenti e delle rotture previste nei prossimi tre mesi tramite la [**Roadmap Cloud Temple**](https://github.com/orgs/Cloud-Temple/projects/2) +- Aggiornamenti minori/patch automatici senza interruzione per i carichi di lavoro ospitati, salvo diversa comunicazione. +- Limitazione dei diritti e delle funzionalità ai vincoli SecNumCloud. +- Comunicazione degli aggiornamenti in arrivo e degli aggiornamenti con modifiche incompatibili (breaking changes) per i prossimi tre mesi tramite la [**Roadmap Cloud Temple**](https://github.com/orgs/Cloud-Temple/projects/2) -**Responsabilità dell'utente:** +**Responsabilità dell'utente :** - Gestione dei carichi di lavoro distribuiti (applicazioni, strumenti CI/CD) e delle relative configurazioni. -- Test degli aggiornamenti dei carichi di lavoro su un ambiente di staging prima del rilascio in produzione. -- Garanzia della compatibilità dei carichi di lavoro con i componenti del cluster. +- Test degli aggiornamenti dei carichi di lavoro su un ambiente di staging prima del deployment in produzione. +- Verifica della compatibilità dei carichi di lavoro con i componenti del cluster. -**Raccomandazione:** +**Raccomandazione :** -- Pianificare i rilasci applicativi al di fuori delle finestre di manutenzione per evitare conflitti con gli aggiornamenti automatici del cluster. -- Seguire le comunicazioni **Cloud Temple** relative agli aggiornamenti principali per pianificare gli adeguamenti necessari. -- Monitorare gli aggiornamenti imminenti tramite la [**Roadmap prodotto**](https://github.com/orgs/Cloud-Temple/projects/2) -- Iscriversi alle notifiche [**incidenti**](../../console/status.md#gestione-delle-notifiche) +- Pianificare i deployment applicativi al di fuori delle finestre di manutenzione per evitare conflitti con gli aggiornamenti automatici del cluster. +- Seguire le comunicazioni di **Cloud Temple** relative agli aggiornamenti maggiori per pianificare le eventuali modifiche necessarie. +- Seguire gli aggiornamenti in arrivo tramite la [**Roadmap prodotto**](https://github.com/orgs/Cloud-Temple/projects/2) +- Iscriversi alle notifiche [**di incidenti**](../../console/status.md#gestion-des-notifications) -### Monitoraggio e supervisione +--- -**Responsabilità di Cloud Temple:** +### Supervisione e monitoraggio -- Monitoraggio e supervisione dell'infrastruttura e dei servizi sottostanti distribuiti da **Cloud Temple**. +**Responsabilità **Cloud Temple** :** -**Responsabilità dell'utente:** +- Supervisione e monitoraggio dell'infrastruttura e dei servizi sottostanti distribuiti da **Cloud Temple**. -- Monitoraggio e supervisione delle proprie carichi di lavoro. +**Responsabilità dell'utente :** -**Raccomandazione:** +- Supervisione e monitoraggio dei propri carichi di lavoro. -Utilizzare gli **strumenti nativi forniti:** +**Raccomandazione :** -- Analisi dei log di prestazioni e degli eventi tramite la console OpenShift. -- Configurazione di avvisi personalizzati basati sulle metriche del cluster e dei pod tramite l'interfaccia utente. +Utilizzare gli **strumenti nativi forniti :** -Impostare soglie critiche per gli avvisi: +- Analisi dei log di prestazioni ed eventi tramite la console OpenShift. +- Configurazione di avvisi personalizzati a partire dalle metriche del cluster e dei pod tramite l'interfaccia utente. + +Configurare soglie critiche di allerta : -- **CPU/Memoria** dei pod: ≥ 80 %. -- **Spazio disco sui volumi persistenti**: ≥ 85 %. -- **Errori di avvio dei pod**: più di X occorrenze in 10 minuti. +- **CPU/Memoria** dei pod : ≥ 80 %. +- **Spazio su disco nei volumi persistenti** : ≥ 85 %. +- **Fallimenti di avvio dei pod** : più di X occorrenze in 10 minuti. + +Automatizzare l'escalation degli avvisi verso i vostri strumenti di gestione per una risposta rapida. -Automatizzare l'escalation degli avvisi verso i propri strumenti di gestione per una risposta rapida. +--- ### Backup e ripristino -I componenti critici del cluster vengono salvati automaticamente da **Cloud Temple**. Le workload e i dati degli utenti richiedono una gestione dedicata. +I componenti critici del cluster vengono salvati automaticamente da **Cloud Temple**. I carichi di lavoro e i dati degli utenti richiedono una gestione dedicata. **Responsabilità di **Cloud Temple** :** @@ -68,136 +77,142 @@ I componenti critici del cluster vengono salvati automaticamente da **Cloud Temp **Responsabilità dell'utente :** -- Eseguire il backup dei dati critici delle workload utilizzando soluzioni come l'offerta **Kasten**, disponibile nel catalogo **Cloud Temple**. +- Eseguire il backup dei dati critici dei carichi di lavoro utilizzando soluzioni come l'offerta **Kasten** disponibile nel catalogo **Cloud Temple**. **Raccomandazione :** - Implementare politiche di backup regolari: - Backup automatici dei PV con Kasten. - - Backup giornaliero delle configurazioni Kubernetes, dei segreti e dei deployment YAML. -- Testare regolarmente i processi di ripristino per validare i RPO. + - Backup giornaliero delle configurazioni Kubernetes, dei secret e dei deployment YAML. +- Testare regolarmente i ripristini per convalidare i RPO. -## Maintenance in Safety Conditions (MCS) +--- -### Gestione dei segreti e delle configurazioni +## Manutenzione delle Condizioni di Sicurezza (MCS) -Utilizzo dei segreti OpenShift/Kubernetes e raccomandazione di integrare sistemi centralizzati di gestione dei segreti. +### Gestione dei segreti e delle configurazioni -**Responsabilità di Cloud Temple:** +Utilizzo dei segreti OpenShift/Kubernetes e raccomandazione di integrare sistemi di gestione centralizzata dei segreti. -- La gestione dei segreti e delle configurazioni dell'infrastruttura e dei servizi sottostanti all'offerta è di competenza di **Cloud Temple**. +**Responsabilità **Cloud Temple** :** -**Responsabilità dell'utente:** +- La gestione dei segreti e della configurazione dell'infrastruttura e dei servizi sottostanti all'offerta è di responsabilità di **Cloud Temple**. -- La gestione dei segreti e delle configurazioni dei carichi di lavoro del **Cliente** è di competenza del **Cliente**. +**Responsabilità dell'utente :** -**Raccomandazione:** +- La gestione dei segreti e della configurazione dei carichi di lavoro del **Cliente** è di responsabilità del **Cliente**. + +**Raccomandazione :** -- Non memorizzare i segreti in testo chiaro nei file YAML. +- Non memorizzare segreti in chiaro nei file YAML. - Utilizzare strumenti per crittografare le informazioni sensibili. -### Gestione degli accessi (IAM) +### Controllo degli accessi (IAM) -La revisione degli accessi viene effettuata tramite la Console e il modulo "User Management" della console OpenShift. +La revisione degli accessi avviene tramite la Console e il modulo "User Management" della console OpenShift. -Per ulteriori dettagli su questa funzionalità, fare riferimento al nostro [**guida**](../../console/iam/iam.md) e alla [**documentazione**](https://docs.redhat.com/en/documentation/openshift_container_platform/) dell'editore. +Per ulteriori dettagli su questa funzionalità, fare riferimento alla nostra [**guida**](../../console/iam/iam.md) e alla [**documentazione**](https://docs.redhat.com/en/documentation/openshift_container_platform/) del fornitore. -**Responsabilità di Cloud Temple:** +**Responsabilità **Cloud Temple** :** -- **Cloud Temple** è responsabile della gestione dei conti di servizio e di amministrazione. -- **Cloud Temple** è responsabile dell'integrazione con il sistema di identità **Cloud Temple** per la gestione degli accessi. -- **Cloud Temple** è responsabile della configurazione predefinita di **RBAC** e delle restrizioni sui diritti degli utenti iniziali. -- **Cloud Temple** è responsabile della fornitura e del mantenimento del sistema di **autenticazione a due fattori** per rafforzare gli accessi. - -**Responsabilità dell'utente:** +- **Cloud Temple** è responsabile della gestione degli account di servizio e di amministrazione. +- **Cloud Temple** è responsabile dell'integrazione con il sistema di identità **Cloud Temple** per gestire gli accessi. +- **Cloud Temple** è responsabile della configurazione predefinita di **RBAC** e delle restrizioni iniziali dei diritti degli utenti. +- **Cloud Temple** è responsabile della fornitura del sistema di **autenticazione a due fattori** e della sua manutenzione per rafforzare gli accessi. + +**Responsabilità dell'utente :** -- Il **Cliente** deve controllare regolarmente gli accessi dei propri utenti. -- Il **Cliente** è responsabile dell'assegnazione degli accessi ai propri utenti e del loro onboarding nel tenant. -- Il **Cliente** deve gestire i propri utenti nel rispetto delle limitazioni imposte dal sistema **Cloud Temple**. +- Il **Cliente** deve verificare regolarmente gli accessi dei propri utenti. +- Il **Cliente** è responsabile del conferimento degli accessi ai propri utenti e del loro onboarding nel tenant. +- Il **Cliente** deve gestire i propri utenti nel rispetto dei limiti imposti dal sistema **Cloud Temple**. ### Gestione delle vulnerabilità -Le vulnerabilità relative all'infrastruttura e ai servizi sottostanti all'offerta verranno comunicate nel modulo incidente. +Le vulnerabilità relative all'infrastruttura e ai servizi sottostanti all'offerta saranno comunicate nel modulo Incident. -**Responsabilità di Cloud Temple:** +**Responsabilità **Cloud Temple** :** -- **Cloud Temple** è responsabile della comunicazione delle vulnerabilità relative all'infrastruttura e ai servizi sottostanti all'offerta, a partire dalla loro rilevazione tramite il modulo [**incidente**](../../console/status.md) della Console. -- **Cloud Temple** è responsabile dell'applicazione dei patch su questo ambito. -- **Cloud Temple** è responsabile della messa a disposizione di strumenti per analizzare le vulnerabilità delle immagini Docker. Per impostazione predefinita, **Cloud Temple** implementa **[Quay]** per eseguire lo scanning automatico delle immagini Docker. +- **Cloud Temple** è responsabile della comunicazione delle vulnerabilità relative all'infrastruttura e ai servizi sottostanti all'offerta non appena rilevate, tramite il modulo [**incidenti**](../../console/status.md) della Console. +- **Cloud Temple** è responsabile dell'applicazione delle patch su questo perimetro. +- **Cloud Temple** è responsabile della fornitura di strumenti per analizzare le vulnerabilità delle immagini Docker. Per impostazione predefinita, **Cloud Temple** implementa **[Quay]** per eseguire lo scan automatico delle immagini Docker. -**Responsabilità dell'utente:** +**Responsabilità dell'utente :** -- Il **Cliente** è responsabile della rilevazione e correzione delle vulnerabilità presenti nei propri carichi di lavoro. -- Il **Cliente** è responsabile del aggiornamento dei propri carichi di lavoro per consentire l'applicazione dei patch di sicurezza nel minor tempo possibile. +- Il **Cliente** è responsabile del rilevamento e della correzione delle vulnerabilità nei propri workload. +- Il **Cliente** è responsabile dell'aggiornamento dei propri workload per consentire l'applicazione delle patch di sicurezza il prima possibile. -**Raccomandazione:** +**Raccomandazione :** - Utilizzare l'alerting del cluster fornito da **[Quay]** per analizzare le vulnerabilità e rilevare comportamenti anomali nelle immagini utilizzate dal **Cliente**. -- Iscriversi alle notifiche di [**incidenti**](../../console/status.md#gestione-delle-notifiche). +- Iscriversi alle notifiche di [**incidenti**](../../console/status.md#gestion-des-notifications). -### Encryption +### Crittografia -Guarantee of native encryption on the **Cloud Temple** infrastructure, with recommendations for workloads. +Garanzia di una crittografia nativa sull'infrastruttura **Cloud Temple**, con raccomandazioni per i carichi di lavoro. -**Cloud Temple Responsibility:** +**Responsabilità di **Cloud Temple** :** -- Redundancy mechanisms within the infrastructure. -- Automatic backups of cluster configurations. +- Meccanismi di ridondanza all'interno dell'infrastruttura. +- Backup automatici delle configurazioni del cluster. -**User Responsibility:** +**Responsabilità dell'utente :** -- Back up critical workload data using solutions such as the **Kasten** offering available in the **Cloud Temple** catalog. -- Ensure workloads use resilience mechanisms and adapt deployments to implement them. +- Eseguire il backup dei dati critici dei carichi di lavoro utilizzando soluzioni come l'offerta **Kasten** disponibile nel catalogo **Cloud Temple**. +- Assicurarsi che i carichi di lavoro utilizzino i meccanismi di resilienza e adattare i deployment per implementarli. -**Recommendation:** +**Raccomandazione :** -- Enable **TLS encryption** for all intra-pod communications. -- Enable **TLS encryption** for all communications between **Cloud Temple** PaaS and IaaS offerings. -- Ensure data-at-rest encryption via **Cloud Temple** storage solutions. +- Abilitare la **crittografia TLS** per tutte le comunicazioni intra-pod. +- Abilitare la **crittografia TLS** per tutte le comunicazioni tra le Offerte PaaS e IaaS **Cloud Temple**. +- Garantire la crittografia dei dati a riposo tramite le soluzioni di archiviazione **Cloud Temple**. -### Logging and Auditing +### Logging e audit -Automatic recording of critical cluster events. +Registrazione automatica degli eventi critici del cluster. -**Responsibility **Cloud Temple** :** +**Responsabilità **Cloud Temple** :** -- **Cloud Temple** is responsible for logging and auditing the infrastructure and underlying services supporting the offering. +- **Cloud Temple** è responsabile del logging e dell'audit dell'infrastruttura e dei servizi sottostanti all'offerta. -**User Responsibility:** +**Responsabilità dell'utente :** -- The **Customer** is responsible for logging and auditing their workloads. +- Il **Client** è responsabile del logging e dell'audit dei propri carichi di lavoro. + +**Raccomandazione :** -**Recommendation:** +- Configurare pipeline per centralizzare e analizzare i log dei propri carichi di lavoro : + - Utilizzare collector, per l'aggregazione dei log, con uno strumento di visualizzazione. + - Integrare i log nel proprio **SIEM** (raccomandato). -- Set up pipelines to centralize and analyze your workload logs: - - Use log collectors for aggregation, combined with a visualization tool. - - Integrate logs with your **SIEM** (recommended). +--- -## Gestione degli incidenti e PIANO DI CONTINUITÀ DELLE OPERAZIONI (PCA) +## Gestione degli incidenti e PRA (Piano di Continuità d'Attività) -**Responsabilità di Cloud Temple:** +**Responsabilità di **Cloud Temple** :** - **Cloud Temple** è responsabile dei meccanismi di ridondanza all'interno dell'infrastruttura. - **Cloud Temple** è responsabile dei backup automatici delle configurazioni del cluster. -- **Cloud Temple** è responsabile del ripristino delle attività dopo un incidente riguardante l'infrastruttura o i servizi sottostanti all'offerta. +- **Cloud Temple** è responsabile della ripresa delle attività dopo un incidente sull'infrastruttura o sui servizi sottostanti all'offerta. -**Responsabilità dell'utente:** +**Responsabilità dell'utente :** + +- Il **Cliente** è responsabile del backup dei dati critici dei carichi di lavoro utilizzando soluzioni come l'offerta **Kasten** disponibile nel catalogo **Cloud Temple**. +- Il **Cliente** deve assicurarsi che i carichi di lavoro utilizzino i meccanismi di resilienza e deve adattare i propri deployments per implementarli. +- Il **Cliente** è responsabile del PRA/PCA dei propri carichi di lavoro. -- Il **Cliente** è responsabile del backup dei dati critici delle carichi di lavoro utilizzando soluzioni come l'offerta **Kasten**, disponibile nel catalogo **Cloud Temple**. -- Il **Cliente** deve assicurarsi che le carichi di lavoro utilizzino i meccanismi di resilienza e adattare i propri deployment per implementarli. -- Il **Cliente** è responsabile del PRA/PCA delle proprie carichi di lavoro. +**Procedura "Ripresa dopo un disastro"** -**Procedura "Ripristino dopo evento catastrofico"** +- In caso di perdita completa dell'accesso a un cluster, il **Cliente** deve dichiarare un incidente al supporto **Cloud Temple** tramite il modulo di supporto della console. +Vedi la [**procedura di richiesta di supporto tecnico**](../../console/console_quickstart.md#accès-au-support-technique) -- In caso di perdita completa dell'accesso a un cluster, il **Cliente** deve segnalare un incidente al supporto **Cloud Temple** tramite il modulo di supporto della console. -Vedere la [**procedura per la richiesta di supporto tecnico**](../../console/console_quickstart.md) +--- ## Raccomandazioni generali -1. **Pianificare le risorse**: garantire una capacità del cluster sufficiente per i carichi di lavoro di picco. -2. **Convalidare le configurazioni**: testare le applicazioni in ambienti di staging prima del rilascio in produzione. -3. **Monitorare regolarmente**: utilizzare gli strumenti integrati per seguire l'uso delle risorse e rilevare i problemi il prima possibile. -4. **Stare aggiornati**: seguire la roadmap e le guide per evitare funzionalità obsoleti. -5. **Contattare il supporto**: per i problemi non risolti, contattare il supporto tramite la [**procedura di richiesta di supporto tecnico**](../../console/console_quickstart.md) o via email all'indirizzo [**contact**](mailto:contact@cloud-temple.com). +1. **Pianificare le risorse** : Garantire una capacità di cluster sufficiente per i carichi di lavoro di picco. +2. **Convalidare le configurazioni** : Testare le applicazioni in ambienti di staging prima del rilascio in produzione. +3. **Monitorare regolarmente** : Utilizzare gli strumenti integrati per monitorare l'utilizzo delle risorse e rilevare i problemi il prima possibile. +4. **Restare aggiornati** : Seguire la roadmap e le guide per evitare funzionalità obsolete. +5. **Contattare il supporto** : Per i problemi non risolti, contattare il supporto tramite la [**procedura di richiesta di supporto tecnico**](../../console/console_quickstart.md#accès-au-support-technique) o via email all'indirizzo [**contact**](mailto:contact@cloud-temple.com). -Per ulteriori dettagli sulle responsabilità, si prega di consultare la nostra [**matrice di responsabilità**](../../contractual/paas/raci.md). +Per consultare i dettagli sulle responsabilità, si prega di leggere la nostra [**matrice di responsabilità**](../../contractual/paas/raci.md). \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/contractual/paas/raci.md b/i18n/it/docusaurus-plugin-content-docs/current/contractual/paas/raci.md index d40c87ff..1754e65a 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/contractual/paas/raci.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/contractual/paas/raci.md @@ -1,146 +1,148 @@ --- -title: Matrice de responsabilité PaaS - OpenShift SecNumCloud +title: Matrice di responsabilità PaaS - OpenShift SecNumCloud +displayed_sidebar: docSidebar --- -Voici le modèle RACI définissant la répartition des responsabilités entre le client et Cloud Temple pour l'utilisation du PaaS OpenShift SecNumCloud. - -## Définition des différents rôles - -Nous rappelons ici les différents rôles du RACI : - -| Rôle | Description | -| ------------ | ------------------------------------------------------------------------------------- | -| (R) Réalise | __R__éalise le processus | -| (A) Approuve | __A__pprouve la réalisation du processus | -| (C) Consulte | __C__onsulté pendant le processus | -| (I) Informé | __I__nformé des résultats du processus (via l'outillage, le portail ou la messagerie) | - -## Mise en place initiale - -| Activité | Rôle Client | Rôle Cloud Temple | -| -------------------------------------------------------------------- | ----------- | ----------------- | -| Définir l'architecture globale de la plateforme OpenShift | C | RA | -| Dimensionner la plateforme OpenShift (nombre de nœuds, ressources) | C | RA | -| Installer et configurer la plateforme OpenShift | I | RA | -| Configurer le réseau de base de la plateforme OpenShift | I | RA | -| Mettre en place la gestion des identités et des accès pour OpenShift | C | RA | -| Définir la stratégie de mise à l'échelle et de haute disponibilité | C | RA | - -## Gestion des projets et des applications - -| Activité | Rôle Client | Rôle Cloud Temple | -| ------------------------------------------------- | ----------- | ----------------- | -| Créer et gérer les projets OpenShift | RA | C | -| Déployer et gérer les applications dans OpenShift | RA | C | -| Configurer les pipelines CI/CD | RA | C | -| Gérer les images de conteneurs et les registres | RA | C | - -## Maintenance et mises à jour - -| Activité | Rôle Client | Rôle Cloud Temple | -| ------------------------------------------------ | ----------- | ----------------- | -| Mettre à jour la plateforme OpenShift | I | RA | -| Appliquer les correctifs de sécurité à OpenShift | I | RA | -| Mettre à jour les applications déployées | RA | I | -| Gérer les mises à jour des images de conteneurs | RA | I | - -## Surveillance et performance - -| Activité | Rôle Client | Rôle Cloud Temple | -| ---------------------------------------------------- | ----------- | ----------------- | -| Surveiller la performance de la plateforme OpenShift | I | RA | -| Surveiller la performance des applications | RA | I | -| Gérer les alertes liées à la plateforme | I | RA | -| Gérer les alertes liées aux applications | RA | I | - -## Sécurité - -| Activité | Rôle Client | Rôle Cloud Temple | -| ------------------------------------------------------------------ | ----------- | ----------------- | -| Gérer la sécurité de la plateforme OpenShift | I | RA | -| Configurer et gérer les politiques de sécurité des pods | RA | C | -| Gérer les certificats SSL/TLS pour la plateforme | I | RA | -| Gérer les certificats SSL/TLS pour les applications | RA | C | -| Implémenter et gérer le contrôle d'accès basé sur les rôles (RBAC) | C | RA | - -## Sauvegarde et reprise après sinistre - -| Activité | Rôle Client | Rôle Cloud Temple | -| --------------------------------------------------------------------- | ----------- | ----------------- | -| Définir la stratégie de sauvegarde pour la plateforme OpenShift | C | RA | -| Mettre en œuvre et gérer les sauvegardes de la plateforme | I | RA | -| Définir la stratégie de sauvegarde pour les applications | RA | C | -| Mettre en œuvre et gérer les sauvegardes des applications | RA | I | -| Tester les procédures de reprise après sinistre pour la plateforme | I | RA | -| Tester les procédures de reprise après sinistre pour les applications | RA | C | - -## Support et résolution des problèmes - -| Activité | Rôle Client | Rôle Cloud Temple | -| ---------------------------------------------------------------- | ----------- | ----------------- | -| Fournir un support de niveau 1 pour la plateforme OpenShift | I | RA | -| Fournir un support de niveau 2 et 3 pour la plateforme OpenShift | I | RA | -| Résoudre les problèmes liés à la plateforme | I | RA | -| Résoudre les problèmes liés aux applications | RA | C | - -## Gestion des capacités et évolution - -| Activité | Rôle Client | Rôle Cloud Temple | + +Ecco il modello RACI che definisce la ripartizione delle responsabilità tra il cliente e Cloud Temple per l'utilizzo del PaaS OpenShift SecNumCloud. + +## Definizione dei diversi ruoli + +Ricordiamo qui i diversi ruoli del RACI : + +| Ruolo | Descrizione | +| -------------- | ------------------------------------------------------------------------------------- | +| (R) Realizza | __R__ealizza il processo | +| (A) Approva | __A__pprova la realizzazione del processo | +| (C) Consulta | __C__onsultato durante il processo | +| (I) Informato | __I__nformato sui risultati del processo (tramite strumenti, portale o messaggistica) | + +## Configurazione iniziale + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +| -------------------------------------------------------------------- | ------------- | ------------------ | +| Definire l'architettura globale della piattaforma OpenShift | C | RA | +| Dimensionare la piattaforma OpenShift (numero di nodi, risorse) | C | RA | +| Installare e configurare la piattaforma OpenShift | I | RA | +| Configurare la rete di base della piattaforma OpenShift | I | RA | +| Implementare la gestione delle identità e degli accessi per OpenShift | C | RA | +| Definire la strategia di scalabilità e alta disponibilità | C | RA | + +## Gestione dei progetti e delle applicazioni + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +| ------------------------------------------------- | ------------- | ------------------ | +| Creare e gestire i progetti OpenShift | RA | C | +| Deployare e gestire le applicazioni in OpenShift | RA | C | +| Configurare le pipeline CI/CD | RA | C | +| Gestire le immagini dei container e i registri | RA | C | + +## Manutenzione e aggiornamenti + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +| ------------------------------------------------ | ------------- | ------------------ | +| Aggiornare la piattaforma OpenShift | I | RA | +| Applicare le patch di sicurezza a OpenShift | I | RA | +| Aggiornare le applicazioni distribuite | RA | I | +| Gestire gli aggiornamenti delle immagini dei container | RA | I | + +## Monitoraggio e prestazioni + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +| ---------------------------------------------------- | ------------- | ------------------ | +| Monitorare le prestazioni della piattaforma OpenShift | I | RA | +| Monitorare le prestazioni delle applicazioni | RA | I | +| Gestire le allerte relative alla piattaforma | I | RA | +| Gestire le allerte relative alle applicazioni | RA | I | + +## Sicurezza + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +| ------------------------------------------------------------------ | ------------- | ------------------ | +| Gestire la sicurezza della piattaforma OpenShift | I | RA | +| Configurare e gestire le politiche di sicurezza dei pod | RA | C | +| Gestire i certificati SSL/TLS per la piattaforma | I | RA | +| Gestire i certificati SSL/TLS per le applicazioni | RA | C | +| Implementare e gestire il controllo degli accessi basato sui ruoli (RBAC) | C | RA | + +## Backup e disaster recovery + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +| --------------------------------------------------------------------- | ------------- | ------------------ | +| Definire la strategia di backup per la piattaforma OpenShift | C | RA | +| Implementare e gestire i backup della piattaforma | I | RA | +| Definire la strategia di backup per le applicazioni | RA | C | +| Implementare e gestire i backup delle applicazioni | RA | I | +| Testare le procedure di disaster recovery per la piattaforma | I | RA | +| Testare le procedure di disaster recovery per le applicazioni | RA | C | + +## Supporto e risoluzione dei problemi + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +| ---------------------------------------------------------------- | ------------- | ------------------ | +| Fornire supporto di livello 1 per la piattaforma OpenShift | I | RA | +| Fornire supporto di livello 2 e 3 per la piattaforma OpenShift | I | RA | +| Risolvere i problemi relativi alla piattaforma | I | RA | +| Risolvere i problemi relativi alle applicazioni | RA | C | + +## Gestione delle capacità e dell'evoluzione + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | | -------------------------------------------------------- | ----------- | ----------------- | -| Surveiller l'utilisation des ressources de la plateforme | I | RA | -| Planifier l'évolution des capacités de la plateforme | C | RA | -| Implémenter les changements de capacité | I | RA | -| Gérer l'évolution des applications et leurs ressources | RA | C | - -## Documentation et conformité - -| Activité | Rôle Client | Rôle Cloud Temple | -| ------------------------------------------------------------- | ----------- | ----------------- | -| Maintenir la documentation de la plateforme OpenShift | I | RA | -| Maintenir la documentation des applications | RA | I | -| Assurer la conformité de la plateforme aux normes de sécurité | I | RA | -| Assurer la conformité des applications aux normes de sécurité | RA | C | -| Réaliser des audits de la plateforme | I | RA | -| Réaliser des audits des applications | RA | C | - -### Gestion des opérateurs OpenShift - -Les **opérateurs OpenShift** sont des extensions de la plateforme qui automatisent la gestion d'applications ou de services complexes sur Kubernetes. - -Seuls les **Opérateurs** provenant des catalogues **Certifiés, Red Hat et MarketPlace** seront proposés sous réserve qu'ils soient **conformes aux exigences SecNumCloud** et qu'ils respectent les limitations de l'écosystème. - -L’installation, la surveillance et la gestion des mises à jour de ces opérateurs sont gérées par **Cloud Temple**, tandis que le **Client** est responsable de l'utilisation de ces opérateurs pour gérer ses charges de travail. - -| Activité | Rôle Client | Rôle Cloud Temple | -| --------------------------------------------------------------- | ----------- | ----------------- | -| Mise à disposition des opérateurs dans le catalogue | CI | RA | -| Configuration initiale des Opérateurs via la Marketplace | CI | RA | -| Mise à jour des Opérateurs | I | RA | -| Surveillance de l’état des Opérateurs | I | RA | -| Résolution des problèmes liés aux Opérateurs | CI | RA | -| Gestion des autorisations des Opérateurs | C | RA | -| Gestion des ressources des Opérateurs (ajout/suppression) | CI | RA | -| Sauvegarde des données des ressources des Opérateurs | CI | RA | -| Supervision et monitoring des ressources Opérateurs | CI | RA | -| Restauration des données des ressources des Opérateurs | CI | RA | -| Audit de sécurité des Opérateurs | I | RA | -| Support des Opérateurs Red Hat | I | RA | -| Support des Opérateurs Certifiés | I | RA | -| Support des Opérateurs MarketPlace | I | RA | -| Gestion des licences et contrats de licenses sur les opérateurs | RA | I | -| Gestion des plans de supports spécifiques sur les opérateurs | RA | I | - -> **Note importante** : -> Seuls les opérateurs **déclaré supportés** par Cloud Temple et conformes à **SecNumCloud** sont mis à disposition. Tout opérateur non certifié ou provenant d’une source externe ne sera pas pris en charge ni validé pour être utilisé dans les environnements. -> La gestion des **licences** et des **plans de supports spécifiques** sur les opérateurs issue du catalogue **MarketPlace Red Hat** ne sont pas de la responsabilité de **Cloud Temple**. La gestion du support de ces opérateurs est déléguée défacto au partenaire fournissant le service. +| Monitorare l'utilizzo delle risorse della piattaforma | I | RA | +| Pianificare l'evoluzione delle capacità della piattaforma | C | RA | +| Implementare le modifiche alle capacità | I | RA | +| Gestire l'evoluzione delle applicazioni e delle relative risorse | RA | C | + +## Documentazione e conformità + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +| ------------------------------------------------------------- | ------------- | ------------------ | +| Mantenere la documentazione della piattaforma OpenShift | I | RA | +| Mantenere la documentazione delle applicazioni | RA | I | +| Garantire la conformità della piattaforma agli standard di sicurezza | I | RA | +| Garantire la conformità delle applicazioni agli standard di sicurezza | RA | C | +| Eseguire audit della piattaforma | I | RA | +| Eseguire audit delle applicazioni | RA | C | + +### Gestione degli operatori OpenShift + +Gli **operatori OpenShift** sono estensioni della piattaforma che automatizzano la gestione di applicazioni o servizi complessi su Kubernetes. + +Solo gli **Operatori** provenienti dai cataloghi **Certificati, Red Hat e MarketPlace** saranno proposti, a condizione che siano **conformi ai requisiti SecNumCloud** e rispettino le limitazioni dell'ecosistema. + +L'installazione, il monitoraggio e la gestione degli aggiornamenti di questi operatori sono gestiti da **Cloud Temple**, mentre il **Cliente** è responsabile dell'utilizzo di questi operatori per gestire i propri carichi di lavoro. + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +| --------------------------------------------------------------- | ------------- | ------------------ | +| Messa a disposizione degli operatori nel catalogo | CI | RA | +| Configurazione iniziale degli Operatori tramite il Marketplace | CI | RA | +| Aggiornamento degli Operatori | I | RA | +| Monitoraggio dello stato degli Operatori | I | RA | +| Risoluzione dei problemi legati agli Operatori | CI | RA | +| Gestione delle autorizzazioni degli Operatori | C | RA | +| Gestione delle risorse degli Operatori (aggiunta/rimozione) | CI | RA | +| Backup dei dati delle risorse degli Operatori | CI | RA | +| Supervisione e monitoraggio delle risorse degli Operatori | CI | RA | +| Ripristino dei dati delle risorse degli Operatori | CI | RA | +| Audit di sicurezza degli Operatori | I | RA | +| Supporto degli Operatori Red Hat | I | RA | +| Supporto degli Operatori Certificati | I | RA | +| Supporto degli Operatori MarketPlace | I | RA | +| Gestione delle licenze e dei contratti di licenza sugli operatori| RA | I | +| Gestione dei piani di supporto specifici sugli operatori | RA | I | + +> **Nota importante** : +> Solo gli operatori **dichiarati supportati** da Cloud Temple e conformi a **SecNumCloud** sono messi a disposizione. Nessun operatore non certificato o proveniente da una fonte esterna sarà supportato né validato per l'utilizzo negli ambienti. +> La gestione delle **licenze** e dei **piani di supporto specifici** sugli operatori provenienti dal catalogo **MarketPlace Red Hat** non è di responsabilità di **Cloud Temple**. La gestione del supporto di questi operatori è delegata di fatto al partner che fornisce il servizio. --- -### Clarification sur l'assistance applicative +### Chiarimento sul supporto applicativo -**Assistance applicative (prestation complémentaire) :** +**Supporto applicativo (servizio aggiuntivo) :** -L'assistance applicative concernant le développement, la configuration, la gestion et la maintenance des applications **n'est pas sous la responsabilité de Cloud Temple**. Le périmètre se concentre uniquement sur la gestion de l'infrastructure OpenShift et des opérateurs. Le **support des charges de travail** (applications déployées) et des pipelines CI/CD sont de la responsabilité du client ou de tout prestataire tiers désigné pour cette tâche. +Il supporto applicativo relativo allo sviluppo, alla configurazione, alla gestione e alla manutenzione delle applicazioni **non è di responsabilità di Cloud Temple**. L'ambito si concentra esclusivamente sulla gestione dell'infrastruttura OpenShift e degli operatori. Il **supporto dei carichi di lavoro** (applicazioni distribuite) e delle pipeline CI/CD sono di responsabilità del cliente o di qualsiasi fornitore terzo designato per tale attività. -| Activité | Rôle Client | Rôle Cloud Temple | +| Attività | Ruolo Cliente | Ruolo Cloud Temple | | --- | --- | --- | -| Assistance applicative (prestation complémentaire) | RA | C | +| Supporto applicativo (servizio aggiuntivo) | RA | C | \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/contractual/paas/raci_ocp_std.md b/i18n/it/docusaurus-plugin-content-docs/current/contractual/paas/raci_ocp_std.md index 514809b5..bb818a06 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/contractual/paas/raci_ocp_std.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/contractual/paas/raci_ocp_std.md @@ -1,145 +1,148 @@ --- -title: Matrice de responsabilité - OpenShift Standard +title: Matrice di responsabilità - OpenShift Standard +slug: /contractual/paas/raci-ocp-standard +displayed_sidebar: docSidebar --- -Voici le modèle RACI définissant la répartition des responsabilités entre le client et Cloud Temple pour l'utilisation de l'offre **OpenShift Standard**. -### Définition des différents rôles +Di seguito il modello RACI che definisce la ripartizione delle responsabilità tra il cliente e Cloud Temple per l'utilizzo dell'offerta **OpenShift Standard**. -Nous rappelons ici les différents rôles du RACI : +### Definizione dei diversi ruoli -| Rôle | Description | +Di seguito ricordiamo i diversi ruoli del RACI: + +| Ruolo | Descrizione | | ------------ | ------------------------------------------------------------------------------------- | -| (R) Réalise | __R__éalise le processus | -| (A) Approuve | __A__pprouve la réalisation du processus | -| (C) Consulte | __C__onsulté pendant le processus | -| (I) Informé | __I__nformé des résultats du processus (via l'outillage, le portail ou la messagerie) | - -### Mise en place initiale - -| Activité | Rôle Client | Rôle Cloud Temple | -| ---------------------------------------------------------------------------------------- | ----------- | ----------------- | -| Définir l'architecture globale du service OpenShift | C | RA | -| Dimensionner le service OpenShift (nombre de nœuds, ressources) | C | RA | -| Installer le service OpenShift avec une configuration par défaut | I | RA | -| Configuration du service OpenShift | RA | C | -| Configurer le réseau de base du service OpenShift | I | RA | -| Déploiement de la configuration initiale des identités et des accès pour OpenShift | C | RA | -| Définir la stratégie de mise à l'échelle et de haute disponibilité sur l'infrastructure | C | RA | - -### Gestion des projets et des applications - -| Activité | Rôle Client | Rôle Cloud Temple | -| ------------------------------------------------- | ----------- | ----------------- | -| Créer et gérer les projets OpenShift | RA | C | -| Déployer et gérer les applications dans OpenShift | RA | C | -| Configurer les pipelines CI/CD | RA | C | -| Gérer les images de conteneurs et les registres | RA | C | - -### Maintenance et mises à jour - -| Activité | Rôle Client | Rôle Cloud Temple | -| ------------------------------------------------ | ----------- | ----------------- | -| Mettre à jour le service OpenShift | RA | I | -| Appliquer les correctifs de sécurité à OpenShift | RA | I | -| Mettre à jour les applications déployées | RA | I | -| Gérer les mises à jour des images de conteneurs | RA | I | - -### Surveillance et performance - -| Activité | Rôle Client | Rôle Cloud Temple | +| (R) Esegue | __E__segue il processo | +| (A) Approva | __A__pprova l'esecuzione del processo | +| (C) Consulta | __C__onsultato durante il processo | +| (I) Informato | __I__nformato sui risultati del processo (tramite strumenti, portale o posta elettronica) | + +### Configurazione iniziale + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +| ---------------------------------------------------------------------------------------- | ------------- | ------------------ | +| Definire l'architettura globale del servizio OpenShift | C | RA | +| Dimensionare il servizio OpenShift (numero di nodi, risorse) | C | RA | +| Installare il servizio OpenShift con configurazione predefinita | I | RA | +| Configurazione del servizio OpenShift | RA | C | +| Configurare la rete di base del servizio OpenShift | I | RA | +| Distribuzione della configurazione iniziale di identità e accessi per OpenShift | C | RA | +| Definire la strategia di scalabilità e alta disponibilità sull'infrastruttura | C | RA | + +### Gestione dei progetti e delle applicazioni + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +| ------------------------------------------------- | ------------- | ------------------ | +| Creare e gestire i progetti OpenShift | RA | C | +| Deployare e gestire le applicazioni in OpenShift | RA | C | +| Configurare le pipeline CI/CD | RA | C | +| Gestire le immagini container e i registri | RA | C | + +### Manutenzione e aggiornamenti + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +| ------------------------------------------------ | ------------- | ------------------ | +| Aggiornare il servizio OpenShift | RA | I | +| Applicare le patch di sicurezza a OpenShift | RA | I | +| Aggiornare le applicazioni distribuite | RA | I | +| Gestire gli aggiornamenti delle immagini dei container | RA | I | + +### Monitoraggio e prestazioni + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | | ---------------------------------------------------- | ----------- | ----------------- | -| Surveiller la performance du service OpenShift | RA | I | -| Surveiller la performance des applications | RA | I | -| Gérer les alertes liées au service OpenShift | RA | I | -| Gérer les alertes liées aux applications | RA | I | +| Monitorare le prestazioni del servizio OpenShift | RA | I | +| Monitorare le prestazioni delle applicazioni | RA | I | +| Gestire gli avvisi relativi al servizio OpenShift | RA | I | +| Gestire gli avvisi relativi alle applicazioni | RA | I | -### Sécurité +### Sicurezza -| Activité | Rôle Client | Rôle Cloud Temple | +| Attività | Ruolo Cliente | Ruolo Cloud Temple | | ------------------------------------------------------------------ | ----------- | ----------------- | -| Gérer la sécurité du service OpenShift | RA | I | -| Configurer et gérer les politiques de sécurité des pods | RA | C | -| Gérer les certificats SSL/TLS pour le service OpenShift | RA | I | -| Gérer les certificats SSL/TLS pour les applications | RA | C | -| Implémenter et gérer le contrôle d'accès basé sur les rôles (RBAC) | RA | I | - -### Sauvegarde et reprise après sinistre - -| Activité | Rôle Client | Rôle Cloud Temple | -| --------------------------------------------------------------------- | ----------- | ----------------- | -| Définir la stratégie de sauvegarde pour le service OpenShift | RA | CI | -| Mettre en œuvre et gérer les sauvegardes du service OpenShift | RA | CI | -| Définir la stratégie de sauvegarde pour les applications | RA | CI | -| Mettre en œuvre et gérer les sauvegardes des applications | RA | CI | -| Tester les procédures de reprise après sinistre pour le service | RA | CI | -| Tester les procédures de reprise après sinistre pour les applications | RA | CI | - -### Support et résolution des problèmes - -| Activité | Rôle Client | Rôle Cloud Temple | -| ---------------------------------------------------------------- | ----------- | ----------------- | -| Fournir un support de niveau 1 pour l'infrastructure | I | RA | -| Fournir un support de niveau 2 et 3 pour l'infrastructure | I | RA | -| Résoudre les problèmes liés au service OpenShift | RA | C | -| Résoudre les problèmes liés aux applications | RA | C | - -### Gestion des capacités et évolution - -| Activité | Rôle Client | Rôle Cloud Temple | -| ------------------------------------------------------------ | ----------- | ----------------- | -| Surveiller l'utilisation des ressources du service OpenShift | RA | C | -| Planifier l'évolution des capacités du service | RA | C | -| Implémenter les changements de capacité | I | RA | -| Gérer l'évolution des applications et leurs ressources | RA | C | - -### Documentation et conformité - -| Activité | Rôle Client | Rôle Cloud Temple | -| ----------------------------------------------------------------- | ----------- | ----------------- | -| Maintenir la documentation du service OpenShift | I | RA | -| Maintenir la documentation des applications | RA | I | -| Assurer la conformité du service OpenShift aux normes de sécurité | RA | C | -| Assurer la conformité des applications aux normes de sécurité | RA | C | -| Réaliser des audits du service OpenShift | RA | C | -| Réaliser des audits des applications | RA | C | - -### Gestion des opérateurs OpenShift - -Les **opérateurs OpenShift** sont des extensions du service qui automatisent la gestion d'applications ou de services complexes sur Kubernetes/OpenShift. - -Dans le cadre du service **OpenShift Standard**, aucune limitation sur les opérateurs n'est appliquée. Seul la mise à disposition de la fonctionnalité **OperatorHub** est assurée par **Cloud Temple**. Les opérateurs sont mis à disposition via le catalogue de la marketplace Red Hat. L’installation, la surveillance et la gestion des mises à jour de ces opérateurs sont gérés par le **Client**. -Le **Client** est responsable de l'utilisation de ces opérateurs pour gérer ses charges de travail. +| Gestire la sicurezza del servizio OpenShift | RA | I | +| Configurare e gestire le politiche di sicurezza dei pod | RA | C | +| Gestire i certificati SSL/TLS per il servizio OpenShift | RA | I | +| Gestire i certificati SSL/TLS per le applicazioni | RA | C | +| Implementare e gestire il controllo degli accessi basato sui ruoli (RBAC) | RA | I | + +### Backup e disaster recovery + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +| --------------------------------------------------------------------- | ------------- | ------------------ | +| Definire la strategia di backup per il servizio OpenShift | RA | CI | +| Implementare e gestire i backup del servizio OpenShift | RA | CI | +| Definire la strategia di backup per le applicazioni | RA | CI | +| Implementare e gestire i backup delle applicazioni | RA | CI | +| Testare le procedure di disaster recovery per il servizio | RA | CI | +| Testare le procedure di disaster recovery per le applicazioni | RA | CI | + +### Supporto e risoluzione dei problemi + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +| ---------------------------------------------------------------- | ------------- | ------------------ | +| Fornire supporto di livello 1 per l'infrastruttura | I | RA | +| Fornire supporto di livello 2 e 3 per l'infrastruttura | I | RA | +| Risolvere i problemi relativi al servizio OpenShift | RA | C | +| Risolvere i problemi relativi alle applicazioni | RA | C | + +### Gestione delle capacità e dell'evoluzione + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +| ------------------------------------------------------------ | ------------- | ------------------ | +| Monitorare l'utilizzo delle risorse del servizio OpenShift | RA | C | +| Pianificare l'evoluzione delle capacità del servizio | RA | C | +| Implementare le modifiche alla capacità | I | RA | +| Gestire l'evoluzione delle applicazioni e delle relative risorse | RA | C | + +### Documentazione e conformità + +| Attività | Ruolo Cliente | Ruolo Cloud Temple | +| ----------------------------------------------------------------- | ------------- | ------------------ | +| Mantenere la documentazione del servizio OpenShift | I | RA | +| Mantenere la documentazione delle applicazioni | RA | I | +| Garantire la conformità del servizio OpenShift alle norme di sicurezza | RA | C | +| Garantire la conformità delle applicazioni alle norme di sicurezza | RA | C | +| Effettuare audit del servizio OpenShift | RA | C | +| Effettuare audit delle applicazioni | RA | C | + +### Gestione degli operatori OpenShift + +Gli **operatori OpenShift** sono estensioni del servizio che automatizzano la gestione di applicazioni o servizi complessi su Kubernetes/OpenShift. + +Nel contesto del servizio **OpenShift Standard**, non viene applicato alcun limite sugli operatori. La sola messa a disposizione della funzionalità **OperatorHub** è garantita da **Cloud Temple**. Gli operatori sono resi disponibili tramite il catalogo del marketplace Red Hat. L'installazione, il monitoraggio e la gestione degli aggiornamenti di questi operatori sono gestiti dal **Cliente**. +Il **Cliente** è responsabile dell'utilizzo di questi operatori per gestire i propri carichi di lavoro. | Activité | Rôle Client | Rôle Cloud Temple | | ----------------------------------------------------------------- | ----------- | ----------------- | -| Mise à disposition du catalogue d'Opérateurs par défaut | CI | RA | -| Mise à jour des Opérateurs | RA | CI | -| Surveillance de l’état des Opérateurs | RA | CI | -| Résolution des problèmes liés aux Opérateurs | RA | CI | -| Gestion des autorisations des Opérateurs | RA | CI | -| Gestion des ressources des Opérateurs (ajout/suppression) | RA | CI | -| Sauvegarde des données des ressources des Opérateurs | RA | CI | -| Supervision et monitoring des ressources Opérateurs | RA | CI | -| Restauration des données des ressources des Opérateurs | RA | CI | -| Audit de sécurité des Opérateurs | RA | CI | -| Support des Opérateurs | RA | CI | -| Gestion des licences et contrats de licenses sur les opérateurs | RA | I | -| Gestion des plans de supports spécifiques sur les opérateurs | RA | I | - -> **Note importante** : +| Fornitura del catalogo predefinito degli operatori | CI | RA | +| Aggiornamento degli operatori | RA | CI | +| Monitoraggio dello stato degli operatori | RA | CI | +| Risoluzione dei problemi legati agli operatori | RA | CI | +| Gestione dei permessi degli operatori | RA | CI | +| Gestione delle risorse degli operatori (aggiunta/rimozione) | RA | CI | +| Backup dei dati delle risorse degli operatori | RA | CI | +| Supervisione e monitoraggio delle risorse degli operatori | RA | CI | +| Ripristino dei dati delle risorse degli operatori | RA | CI | +| Audit di sicurezza degli operatori | RA | CI | +| Supporto degli operatori | RA | CI | +| Gestione delle licenze e dei contratti di licenza sugli operatori | RA | I | +| Gestione dei piani di supporto specifici per gli operatori | RA | I | + +> **Nota importante** : > -> - Tout **dommage** entraîné par l'installation d'un **opérateur** ou issu d'une **opération du client** est de la responsabilité du **Client**. -> - La gestion des **licences** et des **plans de supports spécifiques** sur les opérateurs ne sont pas de la responsabilité de **Cloud Temple**. +> - Qualsiasi **danno** causato dall'installazione di un **operatore** o derivante da un'**operazione del cliente** è di responsabilità del **Cliente**. +> - La gestione delle **licenze** e dei **piani di supporto specifici** per gli operatori non è di responsabilità di **Cloud Temple**. --- -### Clarification sur l'assistance applicative +### Chiarimento sul supporto applicativo -**Assistance applicative (prestation complémentaire) :** +**Supporto applicativo (servizio aggiuntivo) :** -L'assistance applicative concernant le développement, la configuration, la gestion et la maintenance des applications **n'est pas sous la responsabilité de Cloud Temple**. Le périmètre se concentre uniquement sur la gestion de **l'infrastructure sous-jacente au service OpenShift**. Le **support des charges de travail**, **la gestion du cluster jusqu'au système d'exploitation**, **la gestion des opérateurs** et les **pipelines CI/CD** sont de la **responsabilité du client** ou de tout **prestataire tiers désigné** pour cette tâche. +Il supporto applicativo relativo allo sviluppo, alla configurazione, alla gestione e alla manutenzione delle applicazioni **non è di responsabilità di Cloud Temple**. L'ambito si concentra esclusivamente sulla gestione **dell'infrastruttura sottostante al servizio OpenShift**. Il **supporto dei carichi di lavoro**, **la gestione del cluster fino al sistema operativo**, **la gestione degli operatori** e le **pipeline CI/CD** sono di **responsabilità del cliente** o di qualsiasi **fornitore terzo designato** per questa attività. -| Activité | Rôle Client | Rôle Cloud Temple | +| Attività | Ruolo Cliente | Ruolo Cloud Temple | | -------------------------------------------------- | ----------- | ----------------- | -| Assistance applicative (prestation complémentaire) | RA | C | +| Supporto applicativo (servizio aggiuntivo) | RA | C | \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/contractual/shared-responsibility.md b/i18n/it/docusaurus-plugin-content-docs/current/contractual/shared-responsibility.md index dc8be811..08f90644 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/contractual/shared-responsibility.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/contractual/shared-responsibility.md @@ -7,7 +7,7 @@ displayed_sidebar: docSidebar # Modello di responsabilità condivisa -Cloud Temple opera secondo un modello di **responsabilità condivisa** tra fornitore e cliente. Queste matrici RACI (*Responsible, Accountable, Consulted, Informed*) definiscono con precisione chi fa cosa per ogni servizio. +Cloud Temple opera secondo un modello di **responsabilità condivisa** tra il fornitore e il cliente. Queste matrici RACI (*Responsible, Accountable, Consulted, Informed*) definiscono precisamente chi fa cosa per ogni servizio. --- @@ -16,19 +16,19 @@ Cloud Temple opera secondo un modello di **responsabilità condivisa** tra forni
RACI IaaS (VMware & Open IaaS)
-
Distribuzione delle responsabilità per i servizi di infrastruttura IaaS VMware e OpenStack.
+
Ripartizione delle responsabilità per i servizi di infrastruttura IaaS VMware e OpenStack.
Consulta il documento →
--- -## VM Instances +## Istanze VM
-
Modello di responsabilità — VM Instances
-
Distribuzione delle responsabilità per il servizio di macchine virtuali condivise VM instances.
+
Modello di responsabilità — Istanze VM
+
Ripartizione delle responsabilità per il servizio di istanze di macchine virtuali condivise VM instances.
Consulta il documento →
@@ -39,8 +39,8 @@ Cloud Temple opera secondo un modello di **responsabilità condivisa** tra forni
-
RACI Object Storage (S3)
-
Distribuzione delle responsabilità per il servizio di archiviazione oggetti compatibile S3.
+
RACI Archiviazione Oggetti (S3)
+
Ripartizione delle responsabilità per il servizio di archiviazione oggetti compatibile S3.
Consulta il documento →
@@ -52,29 +52,29 @@ Cloud Temple opera secondo un modello di **responsabilità condivisa** tra forni
RACI PaaS OpenShift
-
Distribuzione delle responsabilità per la piattaforma PaaS OpenShift gestita.
+
Ripartizione delle responsabilità per la piattaforma PaaS OpenShift gestita.
Consulta il documento →
RACI PaaS OCP Standard
-
Distribuzione delle responsabilità per l'offerta OpenShift Container Platform Standard.
+
Ripartizione delle responsabilità per l'offerta OpenShift Container Platform Standard.
Consulta il documento →
MCO / MCS PaaS OpenShift
-
Politica di mantenimento delle condizioni operative e di sicurezza della piattaforma PaaS.
+
Politica di mantenimento in condizioni operative e di sicurezza della piattaforma PaaS.
Consulta il documento →
--- -## Managed Kubernetes +## Kubernetes gestito
-
RACI Managed Kubernetes
-
Distribuzione delle responsabilità per il servizio Kubernetes gestito.
+
RACI Kubernetes gestito
+
Ripartizione delle responsabilità per il servizio Kubernetes gestito.
Consulta il documento →
@@ -86,7 +86,7 @@ Cloud Temple opera secondo un modello di **responsabilità condivisa** tra forni
RACI LLMaaS
-
Distribuzione delle responsabilità per il servizio LLM as a Service.
+
Ripartizione delle responsabilità per il servizio LLM as a Service.
Consulta il documento →
@@ -98,12 +98,12 @@ Cloud Temple opera secondo un modello di **responsabilità condivisa** tra forni
RACI Rete
-
Distribuzione delle responsabilità per i servizi di rete Cloud Temple.
+
Ripartizione delle responsabilità per i servizi di rete Cloud Temple.
Consulta il documento →
Modello di responsabilità — VPC
-
Distribuzione delle responsabilità per il servizio Virtual Private Cloud (VPC) gestito.
+
Ripartizione delle responsabilità per il servizio Virtual Private Cloud (VPC) gestito.
Consulta il documento →
-
+ \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/contractual/vm-instances/raci.md b/i18n/it/docusaurus-plugin-content-docs/current/contractual/vm-instances/raci.md index d55c6dea..da11545b 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/contractual/vm-instances/raci.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/contractual/vm-instances/raci.md @@ -1,233 +1,237 @@ --- -title: Modello di Responsabilità Condivisa — Istanze VM +title: Modello di responsabilità condivisa — Istanze VM slug: /contractual/vm-instances/raci --- -# Modello di Responsabilità Condivisa — Istanze VM +# Modello di responsabilità condivisa — Istanze VM -Questo modello **RACI** definisce la distribuzione delle responsabilità tra il cliente e Cloud Temple per il servizio **Istanze VM** (macchine virtuali condivise). +Ecco il modello **RACI** che definisce la ripartizione delle responsabilità tra il cliente e Cloud Temple per l'utilizzo del servizio **Istanze VM** (macchine virtuali condivise). -> **Particolarità del servizio Istanze VM** -> A differenza dell'offerta IaaS dedicata, il servizio Istanze VM si basa su un'infrastruttura di calcolo **condivisa e completamente gestita da Cloud Temple**. Cloud Temple gestisce completamente l'hypervisor, le immagini di sistema e il livello infrastrutturale. Il cliente conserva la piena responsabilità di tutto ciò che viene eseguito all'interno delle proprie istanze: sistema operativo guest, applicazioni, dati e sicurezza applicativa. +> **Particolarità dell'offerta Istanze VM** +> A differenza dell'offerta IaaS dedicata, il servizio Istanze VM si basa su un'infrastruttura di calcolo **condivisa e completamente gestita da Cloud Temple**. Cloud Temple gestisce integralmente l'hypervisor, le immagini di sistema e il livello infrastrutturale. Il cliente mantiene la piena responsabilità di ciò che viene eseguito all'interno delle proprie istanze: sistema operativo guest, applicazioni, dati e sicurezza applicativa. --- -## Definizione dei Ruoli +## Definizione dei ruoli -| Ruolo | Descrizione | -|------------------|---------------------------------------------------------------------------------------------------| -| (R) Responsabile | __R__ealizza il processo | -| (A) Approva | __A__pprova il completamento del processo | -| (C) Consultato | __C__onsultato durante il processo | -| (I) Informato | __I__nformato dei risultati del processo (tramite strumenti, portale o messaggistica) | +| Ruolo | Descrizione | +|----------------|---------------------------------------------------------------------------------------| +| (R) Esegue | __R__ealizza il processo | +| (A) Approva | __A__pprova la realizzazione del processo | +| (C) Consulta | __C__onsultato durante il processo | +| (I) Informato | __I__nformato sui risultati del processo (tramite strumenti, portale o messaggistica) | --- -## Infrastruttura Fisica & Hypervisor +## Infrastruttura fisica & hypervisor -Cloud Temple è completamente responsabile dello strato infrastrutturale e dell'hypervisor. Il cliente non ha accesso a questo livello. +Cloud Temple è interamente responsabile del livello di infrastruttura e di hypervisor. Il cliente non ha accesso a questo livello. -| Attività | Cliente | Cloud Temple | -|-------------------------------------------------------------------------------------------------------|---------|--------------| -| Garantire l'implementazione e il mantenimento dei **datacenter fisici** | | **RA** | -| Garantire l'implementazione e il mantenimento dell'infrastruttura di **calcolo condiviso** | **I** | **RA** | -| Garantire l'implementazione e il mantenimento dell'infrastruttura di **storage** | **I** | **RA** | -| Garantire l'implementazione e il mantenimento della connettività **rete backbone** | **I** | **RA** | -| Gestire, aggiornare e mantenere in sicurezza gli **hypervisor** *(1)* | **I** | **RA** | -| Garantire l'**alta disponibilità** della piattaforma hypervisor | **I** | **RA** | -| Gestire incidenti, problemi e capacità dei livelli infrastrutturali e hypervisor | **I** | **RA** | -| Acquisire e mantenere le **licenze** essenziali al funzionamento della piattaforma | | **RA** | +| Attività | Cliente | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|---------|--------------| +| Garantire l'implementazione e la manutenzione dei **datacenter fisici** | | **RA** | +| Garantire l'implementazione e la manutenzione delle infrastrutture di **calcolo condiviso** | **I** | **RA** | +| Garantire l'implementazione e la manutenzione delle infrastrutture di **storage** | **I** | **RA** | +| Garantire l'implementazione e la manutenzione della connettività **rete backbone** | **I** | **RA** | +| Gestire, aggiornare e mantenere in condizioni di sicurezza gli **hypervisor** *(1)* | **I** | **RA** | +| Garantire l'**alta disponibilità** della piattaforma di hypervisor | **I** | **RA** | +| Gestire incidenti, problemi e capacità dei livelli di infrastruttura e hypervisor | **I** | **RA** | +| Acquisire e mantenere le **licenze** essenziali per il funzionamento della piattaforma | | **RA** | -*(1) Gli hypervisor e il livello di virtualizzazione sono interamente sotto la responsabilità di Cloud Temple. Il cliente non ha accesso all'hypervisor né al livello di gestione sottostante.* +*(1) Gli hypervisor e il livello di virtualizzazione sono interamente sotto la responsabilità di Cloud Temple. Il cliente non dispone di alcun accesso all'hypervisor né al livello di gestione sottostante.* --- -## Immagini, Template e Catalogo +## Immagini, template e catalogo -| Attività | Cliente | Cloud Temple | -|-------------------------------------------------------------------------------------------------------|---------|--------------| -| Costruire, pubblicare e mantenere le **immagini ufficiali del catalogo** *(2)* | **I** | **RA** | -| Applicare patch di sicurezza e aggiornamenti alle **immagini del catalogo** | | **RA** | -| Validare la conformità e la sicurezza delle immagini pubblicate nel catalogo | | **RA** | -| **Derivare** un'immagine ufficiale del catalogo per creare un'immagine personalizzata *(3)* | **RA** | **I** | -| Garantire conformità, licenze e sicurezza di qualsiasi immagine personalizzata derivata | **RA** | | -| Mantenere e aggiornare le immagini personalizzate derivate (patch OS, strumenti integrati) | **RA** | | +| Attività | Cliente | Cloud Temple | +|----------------------------------------------------------------------------------------------------------------|---------|--------------| +| Creare, pubblicare e mantenere le **immagini ufficiali** del catalogo *(2)* | **I** | **RA** | +| Applicare patch di sicurezza e aggiornamenti alle **immagini del catalogo** | | **RA** | +| Validare la conformità e la sicurezza delle immagini pubblicate nel catalogo | | **RA** | +| **Derivare** un'immagine ufficiale del catalogo per creare un'immagine personalizzata *(3)* | **RA** | **I** | +| Garantire la conformità, le licenze e la sicurezza di qualsiasi immagine personalizzata derivata | **RA** | | +| Mantenere e aggiornare le immagini personalizzate derivate (patch OS, strumenti integrati) | **RA** | | -*(2) Le immagini ufficiali del catalogo (distribuzioni Linux, Windows Server, ecc.) sono costruite, mantenute e aggiornate da Cloud Temple. Il loro livello di sicurezza iniziale è responsabilità di Cloud Temple.* -*(3) Il cliente può derivare un'immagine ufficiale del catalogo per creare un'immagine personalizzata. Da quel momento, la **piena responsabilità** di tale immagine spetta al cliente: conformità, licenze, aggiornamenti di sicurezza, presenza e aggiornamento degli strumenti e hardening. Cloud Temple non si occupa del mantenimento delle immagini derivate.* +*(2) Le immagini ufficiali del catalogo (distribuzioni Linux, Windows Server, ecc.) vengono create, mantenute e aggiornate da Cloud Temple. Il relativo livello di sicurezza iniziale è sotto la responsabilità di Cloud Temple.* +*(3) Il cliente può derivare un'immagine ufficiale del catalogo per creare un'immagine personalizzata. Di conseguenza, **la piena responsabilità** di tale immagine ricade su di lui: conformità, licenze, aggiornamenti di sicurezza, presenza e aggiornamento dei tool e hardening. Cloud Temple non supporta la manutenzione di tali immagini derivate.* --- -## Provisioning e Ciclo di Vita delle Istanze +## Provisioning e ciclo di vita delle istanze -| Attività | Cliente | Cloud Temple | -|-------------------------------------------------------------------------------------------------------|---------|--------------| -| Creare, avviare, fermare ed eliminare **istanze VM** | **RA** | **I** | -| Scegliere il flavor e l'immagine di partenza dell'istanza | **RA** | | -| Ridimensionare un'istanza (cambio di flavor) *(4)* | **RA** | **I** | -| Gestire **metadati e tag** associati alle istanze | **RA** | | -| Gestire il **ciclo di vita** delle istanze (creazione, modifica, decommissioning) | **RA** | | -| Prendere la decisione di aggiungere o ridurre le risorse | **RA** | | +| Attività | Cliente | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|---------|--------------| +| Creare, avviare, arrestare ed eliminare le **istanze VM** | **RA** | **I** | +| Scegliere il profilo (flavor) e l'immagine di avvio dell'istanza | **RA** | | +| Ridimensionare un'istanza (cambio di profilo) *(4)* | **RA** | **I** | +| Gestire le **metadati e i tag** associati alle istanze | **RA** | | +| Gestire il **ciclo di vita** delle istanze (création, modification, décommissionnement) | **RA** | | +| Prendere la decisione di aggiungere o ridurre le risorse. | **RA** | | -*(4) Il ridimensionamento può richiedere il riavvio dell'istanza. La disponibilità dell'applicazione ospitata durante questa operazione è responsabilità del cliente.* +*(4) Il ridimensionamento potrebbe richiedere il riavvio dell'istanza. La disponibilità dell'applicazione ospitata durante questa operazione è di responsabilità del cliente.* --- -## Sistema Operativo Guest & Tools +## Sistema operativo guest (Guest OS) & tools Il cliente ha il pieno controllo e la piena responsabilità del sistema operativo all'interno delle proprie istanze. -:::warning[Condizione di Validità del SLA — Tools Obbligatorie] -Le **tools delle Istanze VM** (agenti di gestione dell'hypervisor) sono **preinstallate da Cloud Temple** al momento del deployment dell'istanza dal catalogo. Questi agenti sono indispensabili per il corretto funzionamento della piattaforma e per la misurazione della disponibilità. +:::warning[Condition de validité du SLA — Tools obligatoires] +I **tools per le istanze VM** (agents de gestion de l'hyperviseur) sono **preinstallati da Cloud Temple** durante il deployment dell'istanza dal catalogo. Questi agenti sono indispensabili per il corretto funzionamento della piattaforma e per il monitoraggio della disponibilità. -**Se il cliente disabilita o rimuove questi tools, il SLA è immediatamente nullo.** Cloud Temple non può più garantire né misurare la disponibilità dell'istanza senza questi agenti. La presenza e il corretto funzionamento dei tools sono sotto l'esclusiva responsabilità del cliente per tutta la durata di vita dell'istanza. +**Se il cliente disattiva o elimina questi tools, il SLA è immediatamente nullo.** Cloud Temple non può più garantire né misurare la disponibilità dell'istanza senza questi agenti. La presenza e il corretto funzionamento dei tools sono sotto la piena responsabilità del cliente durante l'esercizio. ::: -| Attività | Cliente | Cloud Temple | -|---------------------------------------------------------------------------------------------------------------|---------|--------------| -| **Preinstallare i tools** (agenti hypervisor, driver PV) al deployment dal catalogo *(5)* | | **RA** | -| Garantire che i **tools rimangano installati, abilitati e aggiornati** *(6)* | **RA** | | -| Applicare **patch e aggiornamenti di sicurezza** al sistema operativo guest | **RA** | | -| **Hardening** della configurazione del sistema operativo (CIS, linee guida ANSSI, ecc.) | **RA** | | -| Gestire **account utente, password e chiavi SSH** all'interno dell'istanza *(7)* | **RA** | | -| Installare e configurare **agenti di monitoraggio** (metriche OS, log di sistema) | **RA** | | -| Mantenere la **conformità normativa** applicabile a OS e dati ospitati | **RA** | | +| Attività | Cliente | Cloud Temple | +|-----------------------------------------------------------------------------------------------------------------|---------|--------------| +| **Preinstallare i tools** (agents hyperviseur, PV drivers) durante il deployment dal catalogo *(5)* | | **RA** | +| Assicurarsi che i **tools rimangano installati, attivati e aggiornati** per tutta la durata dell'istanza *(6)* | **RA** | | +| Applicare le **patch e gli aggiornamenti di sicurezza** del sistema operativo guest | **RA** | | +| **Hardening** della configurazione del sistema operativo (CIS, recommandations ANSSI, etc.) | **RA** | | +| Gestire gli **account utente, le password e le chiavi SSH** all'interno dell'istanza *(7)* | **RA** | | +| Installare e configurare gli **agenti di monitoraggio** (métriques OS, logs système) | **RA** | | +| Mantenere la **conformità normativa** applicabile agli OS e ai dati ospitati | **RA** | | -*(5) Cloud Temple fornisce un'immagine iniziale dal catalogo con i tools preinstallati. La responsabilità della configurazione, dell'hardening e degli aggiornamenti OS successivi spetta interamente al cliente dalla prima connessione all'istanza.* -*(6) La rimozione o disabilitazione dei tools da parte del cliente comporta la sospensione immediata degli impegni di livello di servizio (SLA) per l'istanza interessata. Cloud Temple non può essere ritenuto responsabile dei malfunzionamenti legati all'assenza di questi agenti.* -*(7) La sicurezza degli accessi all'istanza (solidità delle password, gestione delle chiavi SSH, principio del minimo privilegio) è interamente responsabilità del cliente. Cloud Temple non può essere ritenuto responsabile di una compromissione derivante da una configurazione di accesso insufficientemente sicura.* +*(5) Cloud Temple fornisce un'immagine iniziale allo stato di uscita dal catalogo con i tools preinstallati. La responsabilità della configurazione, dell'hardening e degli aggiornamenti successivi del sistema operativo ricade interamente sul cliente fin dalla prima connessione all'istanza.* +*(6) La rimozione o la disattivazione dei tools da parte del cliente comporta la sospensione immediata degli impegni di livello di servizio (SLA) per l'istanza interessata. Cloud Temple non può essere ritenuta responsabile dei malfunzionamenti legati all'assenza di questi agenti.* +*(7) La sicurezza degli accessi all'istanza (solidité des mots de passe, gestion des clés SSH, principe de moindre privilège) è sotto la piena responsabilità del cliente. Cloud Temple non può essere ritenuta responsabile di una compromissione derivante da una configurazione di accesso insufficientemente sicura.* --- -## Sicurezza delle Istanze ed Esposizione Internet +## Sicurezza delle istanze ed esposizione a Internet -:::danger[Responsabilità di Sicurezza del Cliente] -Cloud Temple garantisce solo l'**isolamento di rete tra tenant** a livello di piattaforma. La protezione di ciascuna istanza dalle minacce di rete (Internet, flussi interni) è **interamente responsabilità del cliente**. Un'istanza connessa a Internet senza filtro adeguato o con credenziali deboli espone il cliente a rischi di compromissione per i quali Cloud Temple non può essere ritenuto responsabile. +:::danger[Responsabilità di sicurezza del cliente] +Cloud Temple garantisce esclusivamente l'**isolamento inter-tenant** a livello di piattaforma. La protezione di ogni istanza contro le minacce di rete (Internet, flussi interni) è **interamente sotto la responsabilità del cliente**. Un'istanza connessa a Internet senza un filtraggio adeguato o con credenziali deboli espone il cliente a rischi di compromissione per i quali Cloud Temple non può essere ritenuta responsabile. ::: -| Attività | Cliente | Cloud Temple | -|---------------------------------------------------------------------------------------------------------------------|---------|--------------| -| Garantire l'**isolamento di rete tra tenant** a livello di piattaforma | | **RA** | -| **Proteggere le istanze esposte su Internet** (regole di filtro, security group, firewall) *(A)* | **RA** | | -| Garantire che nessun servizio sia esposto su Internet senza una **regola di filtro esplicita** | **RA** | | -| Implementare e mantenere un **firewall applicativo** (WAF, IDS/IPS) se richiesto dal livello di criticità | **RA** | | -| Configurare **password robuste e chiavi SSH sicure** su tutte le istanze *(B)* | **RA** | | -| Applicare il **principio del minimo privilegio** su account OS e accessi remoti (SSH, RDP) | **RA** | | -| Implementare una soluzione di **rilevamento e risposta agli incidenti** (EDR, SIEM) se richiesto | **RA** | | -| Eseguire **l'hardening della configurazione** di rete e OS delle istanze | **RA** | | -| Notificare Cloud Temple in caso di **sospetta compromissione** che interessi la piattaforma condivisa | **RA** | **C** | +| Attività | Cliente | Cloud Temple | +|-----------------------------------------------------------------------------------------------------------------------|---------|--------------| +| Garantire l'**isolamento di rete inter-tenant** a livello di piattaforma | | **RA** | +| **Proteggere le istanze esposte su Internet** (regole di filtraggio, gruppi di sicurezza, firewall) *(A)* | **RA** | | +| Assicurarsi che nessun servizio sia esposto su Internet senza **regola di filtraggio esplicita** | **RA** | | +| Implementare e mantenere un **firewall applicativo** (WAF, IDS/IPS) se richiesto dal livello di criticità | **RA** | | +| Configurare **password robuste e chiavi SSH sicure** su tutte le istanze *(B)* | **RA** | | +| Applicare il **principio del minimo privilegio** sugli account OS e sugli accessi remoti (SSH, RDP) | **RA** | | +| Implementare una soluzione di **rilevamento e risposta agli incidenti** (EDR, SIEM) se richiesto | **RA** | | +| Procedere all'**hardening della configurazione** di rete e OS delle istanze (disattivazione dei servizi non necessari) | **RA** | | +| Notificare Cloud Temple in caso di **sospetto di compromissione** che interessa la piattaforma condivisa | **RA** | **C** | -*(A) Qualsiasi istanza connessa a Internet tramite IP pubblica o regola NAT senza filtro adeguato lo è sotto l'esclusiva responsabilità del cliente. Cloud Temple non ispeziona né filtra il traffico in entrata o in uscita del tenant.* -*(B) L'uso di password deboli, chiavi SSH compromesse o accesso root non limitato costituisce una violazione delle best practice di sicurezza. Cloud Temple non può essere ritenuto responsabile di una compromissione derivante da una configurazione di accesso insufficientemente sicura da parte del cliente.* +*(A) Qualsiasi istanza connessa a Internet tramite un IP pubblico o una regola NAT senza un filtraggio adeguato lo è sotto la sola responsabilità del cliente. Cloud Temple non effettua ispezione né filtraggio dei flussi in uscita o in entrata del tenant.* +*(B) L'uso di password deboli, chiavi SSH compromesse o accesso root non limitato costituisce una violazione delle best practice di sicurezza. Cloud Temple non può essere ritenuta responsabile di una compromissione derivante da una configurazione di accesso insufficientemente sicura da parte del cliente.* --- -## Applicazioni e Middleware +## Applicazioni & middleware -| Attività | Cliente | Cloud Temple | -|-------------------------------------------------------------------------------------------------------|---------|--------------| -| Installare, configurare e mantenere **applicazioni** e **middleware** nelle istanze | **RA** | | -| Applicare **patch di sicurezza** ad applicazioni e middleware | **RA** | | -| Acquisire e detenere le **licenze software** per le applicazioni ospitate | **RA** | | -| Implementare una **strategia antivirus** sulle istanze | **RA** | | -| Gestire la **continuità applicativa** (load balancing, replica, clustering) | **RA** | | +| Attività | Cliente | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|---------|--------------| +| Installare, configurare e mantenere le **applicazioni** e i **middleware** nelle istanze | **RA** | | +| Applicare i **patch di sicurezza** delle applicazioni e dei middleware | **RA** | | +| Acquisire e detenere le **licenze software** delle applicazioni ospitate | **RA** | | +| Implementare una **strategia antivirus** sulle istanze | **RA** | | +| Gestire la **continuità applicativa** (load balancing, réplication, clustering) | **RA** | | --- -## Rete e Connettività +## Rete & connettività -| Attività | Cliente | Cloud Temple | -|-------------------------------------------------------------------------------------------------------|---------|--------------| -| Mantenere la **rete backbone** e l'infrastruttura di rete condivisa | **I** | **RA** | -| Configurare le **interfacce di rete** delle istanze | **RA** | | -| Gestire il **piano di indirizzamento IP** nel tenant | **RA** | **I** | -| Configurare e gestire i **security group** (regole di filtro) | **RA** | | -| Sottoscrivere e configurare l'**accesso Internet** (IP pubbliche, NAT) | **RA** | | -| Gestire incidenti sui link di rete **backbone** (livello Cloud Temple) | **I** | **RA** | +| Attività | Cliente | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|---------|--------------| +| Garantire il mantenimento della **rete backbone** e dell'infrastruttura di rete condivisa | **I** | **RA** | +| Configurare le **interfacce di rete** delle istanze | **RA** | | +| Gestire il **piano di indirizzamento IP** nel tenant | **RA** | **I** | +| Configurare e gestire i **gruppi di sicurezza** (security groups / regole di filtraggio) *(6)* | **RA** | | +| Sottoscrivere e configurare l'**accesso a Internet** (IP pubblici, NAT) | **RA** | | +| Gestire gli incidenti sui collegamenti di rete **backbone** (livello Cloud Temple) | **I** | **RA** | + +*(6) La configurazione delle regole di filtraggio di rete applicabili alle istanze è di responsabilità del cliente. Cloud Temple garantisce esclusivamente l'isolamento inter-tenant a livello di piattaforma.* --- -## Storage delle Istanze +## Archiviazione delle istanze + +| Attività | Cliente | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|---------|--------------| +| Garantire il mantenimento in condizioni operative dell'**infrastruttura di archiviazione** condivisa | **I** | **RA** | +| Garantire il mantenimento in condizioni di sicurezza dell'infrastruttura di archiviazione | **I** | **RA** | +| Creare, collegare e gestire i **volumi di archiviazione aggiuntivi** | **RA** | **I** | +| Garantire la **coerenza dei dati** archiviati nelle istanze | **RA** | | +| Definire e applicare una **politica di crittografia dei dati** all'interno delle istanze *(7)* | **RA** | | -| Attività | Cliente | Cloud Temple | -|-------------------------------------------------------------------------------------------------------|---------|--------------| -| Mantenere l'**infrastruttura di storage** condivisa in condizione operativa | **I** | **RA** | -| Mantenere l'infrastruttura di storage in condizione di sicurezza | **I** | **RA** | -| Creare, allegare e gestire **volumi di storage aggiuntivi** | **RA** | **I** | -| Garantire la **coerenza dei dati** memorizzati nelle istanze | **RA** | | -| Definire e applicare una **politica di cifratura dei dati** all'interno delle istanze | **RA** | | +*(7) La crittografia dei dati a riposo dell'infrastruttura di archiviazione sottostante è garantita da Cloud Temple. La crittografia applicativa dei dati (a livello di file system o database) è di responsabilità del cliente.* --- -## Backup e Snapshot +## Backup e snapshot -| Attività | Cliente | Cloud Temple | -|-------------------------------------------------------------------------------------------------------|---------|--------------| -| Mantenere l'**infrastruttura di backup** in condizione operativa | **I** | **RA** | -| **Attivare e configurare** la politica di backup associata a un'istanza | **RA** | | -| **Eseguire snapshot** puntuali di un'istanza | **RA** | | -| Verificare la **coerenza e la ripristinabilità** dei backup eseguiti | **RA** | | -| Eseguire **test di ripristino** periodici | **RA** | | -| Gestire la **capacità di storage** dedicata ai backup | | **RC** | -| Definire la **strategia di continuità o recovery** per le applicazioni ospitate | **RA** | | +| Attività | Client | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|--------|--------------| +| Garantire il mantenimento in condizioni operative dell'**infrastruttura di backup** | **I** | **RA** | +| **Attivare e configurare** la politica di backup associata a un'istanza | **RA** | | +| **Eseguire snapshot** puntuali di un'istanza | **RA** | | +| Verificare la **coerenza e la ripristinabilità** dei backup effettuati | **RA** | | +| Eseguire **test di ripristino** periodici | **RA** | | +| Gestire le **capacità di archiviazione** dedicate ai backup | | **RC** | +| Definire la **strategia di continuità o di ripristino di attività** per le applicazioni ospitate | **RA** | | --- -## Monitoraggio e Performance +## Monitoraggio & prestazioni -| Attività | Cliente | Cloud Temple | -|-------------------------------------------------------------------------------------------------------|---------|--------------| -| Monitorare il corretto funzionamento dell'**infrastruttura fisica e degli hypervisor** | **I** | **RA** | -| Monitorare le performance delle **risorse condivise** (calcolo, storage, rete) | **I** | **RA** | -| Monitorare le **performance delle istanze** (CPU, RAM, I/O disco, rete a livello guest) | **RA** | | -| Implementare una soluzione di **metriche e alerting** per le applicazioni ospitate | **RA** | | +| Attività | Cliente | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|---------|--------------| +| Monitorare il corretto funzionamento dell'**infrastruttura fisica e degli hypervisor** | **I** | **RA** | +| Monitorare le **prestazioni delle risorse condivise** (calcolo, storage, rete) | **I** | **RA** | +| Supervisionare le **prestazioni delle istanze** (CPU, RAM, disk I/O, rete a livello guest) | **RA** | | +| Implementare una soluzione di **metriche e allerta** per le applicazioni ospitate | **RA** | | --- -## Gestione degli Accessi e delle Identità +## Gestione degli accessi e delle identità -| Attività | Cliente | Cloud Temple | -|-------------------------------------------------------------------------------------------------------|---------|--------------| -| Garantire l'accessibilità della **Console Cloud Temple** e dell'API | | **RA** | -| Gestire le **abilitazioni** dei team Cloud Temple all'infrastruttura qualificata SecNumCloud | | **RA** | -| Amministrare gli accessi alla **Console Cloud Temple** (utenti, ruoli, IAM) | **RA** | | -| Gestire gli accessi **all'interno delle istanze** (account OS, chiavi SSH, bastion) | **RA** | | -| Configurare un **directory di autenticazione esterno** (SSO, LDAP) per la Console | **RA** | **C** | +| Attività | Cliente | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|---------|--------------| +| Garantire l'accessibilità alla **Console Cloud Temple** e all'API | | **RA** | +| Gestire le **autorizzazioni** dei team Cloud Temple per l'infrastruttura certificata SecNumCloud | | **RA** | +| Amministrare gli accessi alla **Console Cloud Temple** (utenti, ruoli, IAM) | **RA** | | +| Gestire gli accessi **all'interno delle istanze** (account OS, chiavi SSH, bastion) | **RA** | | +| Configurare un **repository di autenticazione esterno** (SSO, LDAP) per la Console | **RA** | **C** | --- -## Log (Registri) +## Log -| Attività | Cliente | Cloud Temple | -|-------------------------------------------------------------------------------------------------------|---------|--------------| -| Conservare e mettere a disposizione i **log della piattaforma** Istanze VM *(8)* | | **RA** | -| Raccogliere, conservare e analizzare i **log di sistema e applicativi** delle istanze | **RA** | | +| Attività | Cliente | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|---------|--------------| +| Conservare e rendere disponibili i **log della piattaforma** VM instances *(8)* | | **RA** | +| Raccogliere, conservare e analizzare i **log di sistema e applicativi** delle istanze | **RA** | | -*(8) La durata di conservazione dei log della piattaforma è specificata nell'accordo di servizio Istanze VM.* +*(8) La durata di conservazione dei log della piattaforma è specificata nel contratto di servizio VM instances.* --- -## Documentazione e Contrattuale +## Documentazione e contrattualistica -| Attività | Cliente | Cloud Temple | -|-------------------------------------------------------------------------------------------------------|---------|--------------| -| Gestire gli aspetti commerciali e contrattuali (preventivi, ordini, fatturazione) | **I** | **RA** | -| Monitorare l'esecuzione contrattuale del servizio (consegne, fatturazione) | **RA** | **I** | -| Mantenere e mettere a disposizione la documentazione tecnica del servizio | **I** | **RA** | -| Mantenere aggiornata la **CMDB** relativa alle istanze deployate nel tenant | **RA** | | -| Mantenere aggiornata la politica di accesso alla Console e all'API | **RA** | | +| Attività | Cliente | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|---------|--------------| +| Gestire l'aspetto commerciale e contrattuale (preventivi, ordini, fatturazione) | **I** | **RA** | +| Gestire il monitoraggio contrattuale della prestazione (consegne, fatturazione) | **RA** | **I** | +| Garantire la manutenzione e la disponibilità della documentazione tecnica del servizio | **I** | **RA** | +| Aggiornare la **CMDB** relativa alle istanze distribuite nel proprio tenant | **RA** | | +| Mantenere aggiornata la politica di accesso alla Console e all'API | **RA** | | --- ## Reversibilità -| Attività | Cliente | Cloud Temple | -|-------------------------------------------------------------------------------------------------------|---------|--------------| -| Pianificare il progetto di reversibilità e scegliere le infrastrutture target | **RA** | **I** | -| Esportare dati e immagini delle istanze tramite API o strumenti forniti | **RA** | **I** | -| Procedere allo smantellamento delle configurazioni a seguito della risoluzione del contratto | **I** | **RA** | -| Eseguire la cancellazione sicura dei dati sui supporti di storage e fornire attestazione | **I** | **RA** | +| Attività | Cliente | Cloud Temple | +|--------------------------------------------------------------------------------------------------------|---------|--------------| +| Pianificare il progetto di reversibilità e scegliere le infrastrutture di destinazione | **RA** | **I** | +| Esportare i dati e le immagini delle istanze tramite l'API o gli strumenti messi a disposizione | **RA** | **I** | +| Procedere allo smantellamento delle configurazioni in seguito alla risoluzione | **I** | **RA** | +| Effettuare la cancellazione sicura dei dati sui supporti di archiviazione e fornire un attestato | **I** | **RA** | --- -> *Sono disponibili servizi professionali se si desidera delegare a Cloud Temple alcune o tutte le responsabilità elencate come obblighi del cliente. Contattare il proprio account manager Cloud Temple.* +> *Sono disponibili servizi professionali se si desidera delegare tutto o parte delle responsabilità elencate come a carico del cliente. Contattare il proprio referente commerciale Cloud Temple.* \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/contractual/vm-instances/sla_vm-instances.md b/i18n/it/docusaurus-plugin-content-docs/current/contractual/vm-instances/sla_vm-instances.md index 216ab473..f94007d5 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/contractual/vm-instances/sla_vm-instances.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/contractual/vm-instances/sla_vm-instances.md @@ -1,81 +1,90 @@ --- -title: SLA Istanze VM +title: SLA delle istanze VM slug: /contractual/vm-instances/sla +displayed_sidebar: docSidebar --- # Accordo sul Livello di Servizio (SLA) – Istanze VM | | | | :--- | :--- | -| **Ultimo aggiornamento** | 15 aprile 2026 | +| **Data dell'ultimo aggiornamento** | 15 aprile 2026 | -Questo documento definisce gli Impegni di Livello di Servizio (SLA) applicabili al prodotto **Istanze VM** fornito da **Cloud Temple**. Integra le Condizioni Generali di Vendita e di Servizio di Cloud Temple e costituisce con esse un tutto inscindibile. +Il presente documento definisce gli Impegni sul Livello di Servizio (SLA) applicabili al prodotto **Istanze VM** fornito da **Cloud Temple** (ci-après dénommé « le Fournisseur » ou « Cloud Temple »). Integra le Condizioni Generali di Vendita e di Servizio di Cloud Temple e costituisce un tutto indissolubile con le stesse. --- ## 1. Definizioni -- **Tasso di Disponibilità Mensile**: La percentuale di tempo di funzionamento garantita per un'Istanza VM nel corso di un mese calendario. -- **Istanza VM**: Il server privato virtuale provisionato su richiesta del Cliente sull'infrastruttura cloud di Cloud Temple, basato su risorse di calcolo e storage condivise ad alte prestazioni. -- **Periodo di Indisponibilità**: Perdita totale di accesso e connettività esterna all'Istanza VM, misurata esclusivamente a livello dell'infrastruttura sottostante di Cloud Temple. -- **Durata di Indisponibilità**: Tempo ininterrotto durante il quale viene constatato il Periodo di Indisponibilità. Per essere contabilizzata ai sensi di questo SLA, una Durata di Indisponibilità deve essere di almeno **quattro (4) minuti consecutivi**. +Nel contesto del presente SLA, i seguenti termini con iniziale maiuscola hanno il significato riportato di seguito: + +- **Tasso di Disponibilità Mensile** : La percentuale di tempo di funzionamento garantito per un'istanza VM durante un mese civile. +- **Istanza VM** : Il server privato virtuale provisionato su richiesta dal Cliente sull'infrastruttura cloud di Cloud Temple, basato su risorse di calcolo e archiviazione condivise ad alte prestazioni. +- **Periodo di Indisponibilità** : Perdita totale di accesso e connettività esterna all'Istanza VM, misurata esclusivamente a livello dell'infrastruttura sottostante di Cloud Temple (stato dell'istanza segnalato come inattivo, arrestato o in errore dall'ipervisore Cloud Temple). +- **Durata di Indisponibilità** : Tempo ininterrotto durante il quale si verifica il Periodo di Indisponibilità. Per essere conteggiata ai sensi del presente SLA, una Durata di Indisponibilità deve essere di almeno **quattro (4) minuti consecutivi**. --- -## 2. Impegni di Livello di Servizio (SLA) +## 2. Impegni sul Livello di Servizio (SLA) -Cloud Temple si impegna a garantire un Tasso di Disponibilità Mensile del **99,95%** per ogni Istanza VM attiva fatturata al Cliente. +Cloud Temple si impegna a garantire un Tasso di Disponibilità Mensile di **99,95 %** per ogni Istanza VM attiva fatturata al Cliente. -Questo tasso equivale a un massimo di **21,9 minuti** di Durata di Indisponibilità autorizzata per mese calendario. In caso di mancato rispetto, il Cliente potrà richiedere Crediti di Servizio nelle condizioni definite all'Articolo 5. +Questo tasso equivale a un massimo di **21,9 minuti** di Durata di Indisponibilità autorizzata per mese civile. In caso di mancato rispetto di tale impegno, il Cliente potrà richiedere Crediti di Servizio nelle condizioni definite all'Articolo 5. --- -## 3. Misurazione e Perimetro della Disponibilità +## 3. Misura e perimetro della Disponibilità -Il monitoraggio e il calcolo del Tasso di Disponibilità Mensile vengono effettuati **esclusivamente dagli strumenti di monitoraggio dell'infrastruttura di Cloud Temple**. +Il monitoraggio e il calcolo del Tasso di Disponibilità Mensile sono effettuati **esclusivamente dagli strumenti di monitoraggio dell'infrastruttura di Cloud Temple**, verificando lo stato dell'istanza a livello dello strato di virtualizzazione. -**Perimetro di responsabilità:** -Il presente SLA copre solo il funzionamento delle risorse di calcolo (CPU, RAM) allocate sull'infrastruttura hardware di Cloud Temple. +**Perimetro di responsabilità :** +Il presente SLA copre esclusivamente il funzionamento delle risorse di calcolo (Compute : CPU, RAM) allocate sull'infrastruttura hardware di Cloud Temple. :::info -La connettività di rete (VPC, routing) o lo storage persistente sono oggetto di documenti SLA separati. +La connettività di rete (VPC, routing) o lo storage persistente sono oggetto di documenti SLA distinti e non sono coperti dal presente impegno. ::: -**Principio di esclusione per stato UP:** -Non appena l'Istanza VM viene vista come "UP" o "RUNNING" dalla piattaforma Cloud Temple, l'impegno SLA è considerato rispettato. +**Principio di esclusione per lo stato UP :** +Non appena l'istanza VM è visualizzata come « UP » o « RUNNING » dalla piattaforma Cloud Temple, l'impegno SLA è considerato rispettato, indipendentemente dall'accessibilità dello strato applicativo del Cliente. --- ## 4. Esclusioni dalla Garanzia -1. **Guasti del Sistema Operativo o software**: Crash del guest OS, sovraccarico di CPU o RAM causato dai processi del Cliente, corruzione del filesystem interno. +Il presente SLA non costituisce un impegno sulla disponibilità degli elementi che sono sotto il controllo esclusivo del Cliente. Di conseguenza, non sono **considerati** Periodi di Indisponibilità le interruzioni, le perdite di accesso o i guasti derivanti da: + +1. **Guasti del Sistema Operativo (OS) o software**: Crash dell'OS guest (es. *Kernel Panic*, *Blue Screen of Death*), sovraccarico della CPU o della RAM causato dai processi del Cliente, o corruzione del sistema di file interno. -2. **Configurazioni del Cliente**: Regole firewall che bloccano gli accessi, errori di configurazione di rete all'interno dell'OS. +2. **Configurazioni del Cliente**: Regole del firewall di rete o locale (iptables, firewalld) che bloccano gli accessi, errori di configurazione di rete all'interno dell'OS tramite Cloud-init o in fase post-deployment. -3. **Guasti applicativi**: Arresto o crash di un servizio ospitato sull'Istanza VM. +3. **Guasti applicativi**: Arresto o crash di un servizio ospitato sulla VM Instance (server web, database, container, ecc.). -4. **Manutenzione programmata**: Interventi con notifica preventiva nelle finestre di manutenzione previste. +4. **Manutenzione programmata**: Interventi hardware o software sull'infrastruttura fisica di Cloud Temple che sono stati oggetto di notifica preventiva nell'ambito delle finestre di manutenzione previste dal contratto di supporto. -5. **Assenza o disabilitazione dei tools VM**: Gli agenti di gestione dell'hypervisor (*tools*) preinstallati da Cloud Temple su ogni istanza sono indispensabili per la misurazione e la garanzia della disponibilità. Se questi tools sono stati disabilitati, rimossi o resi non funzionali dal cliente, Cloud Temple non è più in grado di monitorare l'istanza né di constatare obiettivamente un periodo di indisponibilità. Il SLA è **immediatamente sospeso** per la durata in cui i tools sono assenti o non operativi. La presenza e il corretto funzionamento dei tools sono sotto l'esclusiva responsabilità del cliente per tutta la durata di vita dell'istanza. +5. **Assenza o disattivazione dei tools VM**: Gli agent di gestione dell'ipervisors (*tools*) preinstallati da Cloud Temple su ogni istanza sono indispensabili per la misurazione e la garanzia della disponibilità. Se questi tools sono stati disattivati, rimossi o resi non funzionanti dal cliente, Cloud Temple non è più in grado di garantire il monitoraggio dell'istanza né di accertare oggettivamente un periodo di indisponibilità. Il SLA è **immediatamente sospeso** per la durata in cui i tools sono assenti o non operativi. La presenza e il corretto funzionamento dei tools sono sotto la piena responsabilità del cliente per tutta la durata di vita dell'istanza. -6. **Comportamento abusivo o violazione**: Sospensione dell'Istanza VM da parte di Cloud Temple a seguito di una violazione delle Condizioni Generali. +6. **Comportamento abusivo o violazione**: Sospensione della VM Instance da parte di Cloud Temple in seguito a una violazione delle Condizioni Generali o dei requisiti di sicurezza (es. compromissione, mancato rispetto delle regole del Marketplace Cloud Temple). -7. **Forza maggiore**: Eventi al di fuori del ragionevole controllo di Cloud Temple. +7. **Forza maggiore**: Eventi al di fuori del controllo ragionevole di Cloud Temple. --- -## 5. Crediti di Servizio e Penali +## 5. Crediti di Servizio e Penalità + +Se il Tasso di Disponibilità Mensile del 99,95 % non viene raggiunto per una determinata VM Instance, il Cliente ha diritto a un risarcimento sotto forma di Credito di Servizio. + +Il Credito di Servizio è calcolato in percentuale dell'importo mensile fatturato per la VM Instance interessata: -| Tasso di disponibilità mensile constatato | Credito di Servizio | +| Tasso di disponibilità mensile rilevato | Credito di Servizio | | :--- | :---: | -| Tra 99,00% e 99,94% | 10% | -| Tra 95,00% e 98,99% | 25% | -| Inferiore al 95,00% | 100% | +| Tra il 99,00 % e il 99,94 % | 10 % | +| Tra il 95,00 % e il 98,99 % | 25 % | +| Inferiore al 95,00 % | 100 % | -### 5.1 Modalità di Reclamo +### 5.1 Modalità di reclamo -Il Cliente deve presentare una richiesta motivata aprendo un ticket presso il supporto Cloud Temple entro **trenta (30) giorni di calendario** successivi al mese in cui si è verificato l'incidente. +Per ottenere un Credito di Servizio, il Cliente deve presentare una richiesta motivata aprendo un ticket presso il supporto Cloud Temple entro **trenta (30) giorni calendario** dal mese in cui l'incidente si è verificato. -La richiesta deve includere: -- L'UUID dell'Istanza VM interessata -- I timestamp precisi del Periodo di Indisponibilità osservato +La richiesta dovrà includere: +- L'identificativo (UUID) della VM Instance interessata +- I timestamp precisi del Periodo di Indisponibilità riscontrato \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/databases_overview.md b/i18n/it/docusaurus-plugin-content-docs/current/databases_overview.md index 9a743f9e..b34f51c1 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/databases_overview.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/databases_overview.md @@ -1,21 +1,21 @@ --- -title: Databases +title: Database displayed_sidebar: docSidebar --- -# Databases +# Database -I database gestiti di Cloud Temple ti liberano dalla gestione operativa (backup, aggiornamenti, alta disponibilità) rimanendo ospitati su un'infrastruttura sovrana qualificata SecNumCloud. +I database gestiti di Cloud Temple vi liberano dalla gestione operativa (backup, aggiornamenti, alta disponibilità) restando ospitati su un'infrastruttura sovrana qualificata SecNumCloud.
-

MariaDB Gestito Preview

-

Motore MariaDB su Kubernetes con backup automatici, alta disponibilità multi-AZ e cifratura at-rest.

+

MariaDB Gestito Anteprima

+

Motore MariaDB su Kubernetes con backup automatici, alta disponibilità multi-AZ e crittografia at-rest.

Scopri MariaDB Gestito →
-

PostgreSQL Gestito Preview

+

PostgreSQL Gestito Anteprima

Motore PostgreSQL su Kubernetes con Point-in-Time Recovery, backup logico e distribuzione StandAlone o Distributed.

Scopri PostgreSQL Gestito →
-
+ \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/faq.md b/i18n/it/docusaurus-plugin-content-docs/current/faq.md index 02cd4cfd..d9885e54 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/faq.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/faq.md @@ -1,12 +1,12 @@ --- -title: FAQs +title: Domande frequenti sidebar_position: 1 hide_table_of_contents: true --- # Domande Frequenti -Di seguito trovi le domande frequenti sui prodotti e servizi Cloud Temple. +Di seguito trovate le domande più frequenti sui prodotti e servizi Cloud Temple. --- @@ -17,7 +17,7 @@ Di seguito trovi le domande frequenti sui prodotti e servizi Cloud Temple.
-
LLMaaS — Large Language Models
+
LLMaaS — Modelli Linguistici di Grande Dimensione
Domande sull'utilizzo dei modelli linguistici, i formati API, le licenze e i casi d'uso.
Consulta la FAQ →
@@ -26,14 +26,14 @@ Di seguito trovi le domande frequenti sui prodotti e servizi Cloud Temple. --- -## Storage +## Archiviazione
-
Object Storage
+
Archiviazione oggetti
Domande sulla gestione dei bucket, i diritti di accesso, i protocolli compatibili e i limiti del servizio.
Consulta la FAQ →
@@ -42,6 +42,6 @@ Di seguito trovi le domande frequenti sui prodotti e servizi Cloud Temple. ::::tip[Non trovi la risposta?] -Consulta la [documentazione prodotto](/home) o contatta il supporto Cloud Temple tramite la [console](https://console.cloud-temple.com). +Consulta la [documentazione del prodotto](/home) o contatta il supporto Cloud Temple tramite la [console](https://console.cloud-temple.com). -:::: +:::: \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/home.md b/i18n/it/docusaurus-plugin-content-docs/current/home.md index 462a0cf9..a03c25a4 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/home.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/home.md @@ -1,5 +1,6 @@ --- tags: + - home - home - onboarding displayed_sidebar: docSidebar @@ -9,7 +10,7 @@ hide_table_of_contents: true
-## Per Iniziare +## Primi passi -## Pagine Popolari +## Pagine popolari +
\ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/housing/housing.md b/i18n/it/docusaurus-plugin-content-docs/current/housing/housing.md index caa55450..5ca49279 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/housing/housing.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/housing/housing.md @@ -4,24 +4,24 @@ title: Panoramica # Housing Cloud Temple -L'**Housing Cloud Temple** offre una soluzione di hosting fisico per le vostre infrastrutture IT in zone di disponibilità affidabili e sicure. Progettata per soddisfare le esigenze aziendali, questa offerta vi permette di ospitare le vostre apparecchiature in rack condivisi o dedicati, garantendo al contempo una connettività di rete ad alte prestazioni e servizi professionali di assistenza in datacenter. +Il **Housing Cloud Temple** offre una soluzione di hosting fisico per le tue infrastrutture IT in zone di disponibilità affidabili e sicure. Progettato per rispondere alle esigenze aziendali, questo prodotto consente di ospitare le tue apparecchiature in rack condivisi o dedicati, garantendo al contempo una connettività di rete performante e servizi professionali di assistenza in datacenter. -Con opzioni flessibili e un alto livello di sicurezza, l'Housing Cloud Temple garantisce la continuità e l'affidabilità delle vostre operazioni, che si tratti di ospitare appliance, server o di beneficiare di servizi complementari per ottimizzare la vostra infrastruttura. +Grazie a opzioni flessibili e a un elevato livello di sicurezza, Housing Cloud Temple garantisce la continuità e l'affidabilità delle tue operazioni, che si tratti di ospitare appliance, server o di usufruire di servizi complementari per ottimizzare la tua infrastruttura.

Concetti

-

Scoprite le basi e i principi essenziali per comprendere e padroneggiare la nostra infrastruttura.

- Esplorare i concetti → +

Scopri le basi e i principi essenziali per comprendere e padroneggiare la nostra infrastruttura.

+ Esplora i concetti →
-

Avvio rapido

-

Iniziate rapidamente con le nostre risorse seguendo istruzioni chiare e semplici.

- Avviare la guida rapida → +

Quickstart

+

Inizia rapidamente con le nostre risorse seguendo istruzioni chiare e semplici.

+ Avvia il Quickstart →

Tutorial

-

Imparate passo dopo passo a configurare e utilizzare i nostri servizi con guide dettagliate.

- Scoprire i tutorial → +

Impara passo dopo passo a configurare e utilizzare i nostri servizi con guide dettagliate.

+ Scopri i tutorial →
-
+
\ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/housing/quickstart.md b/i18n/it/docusaurus-plugin-content-docs/current/housing/quickstart.md index dafbf851..a247210b 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/housing/quickstart.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/housing/quickstart.md @@ -2,40 +2,39 @@ title: Guida rapida --- +Questa guida **Quickstart Housing** ti accompagna per iniziare rapidamente con il prodotto di hosting fisico Cloud Temple. Copre i passaggi essenziali per effettuare una richiesta di hosting, configurare le apparecchiature e usufruire dei servizi aggiuntivi. -Questa **Guida rapida Housing** vi aiuta a iniziare rapidamente con l'offerta di hosting fisico di Cloud Temple. Copre i passaggi essenziali per effettuare una richiesta di hosting, configurare le vostre apparecchiature e beneficiare dei servizi complementari. +## Passo 1: Richiesta di hosting -## Fase 1: Effettuare una richiesta di hosting +1. Accedi alla console Cloud Temple. +2. Apri una pratica di servizio fornendo: + - Nome della tua organizzazione. + - Coordinate di un contatto (email e telefono). + - Tipo di hosting desiderato (condiviso in 'U' o dedicato per rack). + - Quantità e caratteristiche delle apparecchiature (dimensioni, peso, consumo, ecc.). -1. Accedete alla console Cloud Temple. -2. Aprite un ticket di servizio fornendo: - - Nome della vostra organizzazione. - - Dati di contatto (email e telefono). - - Tipo di hosting desiderato (condiviso a 'U' o dedicato a rack). - - Quantità e caratteristiche delle apparecchiature (dimensioni, peso, consumo energetico, ecc.). +## Fase 2 : Preparare le apparecchiature -## Fase 2: Preparare le vostre apparecchiature - -- Verificate che le vostre apparecchiature rispettino i vincoli tecnici: - - Dimensioni in unità rack (U). +- Verificare che le apparecchiature rispettino i vincoli tecnici : + - Dimensioni in unità di rack (U). - Peso massimo per 'U' (25kg per condiviso, fino a 1000kg per un rack dedicato). - - Consumo energetico (da 150W a 3Kw a seconda dell'opzione sottoscritta). + - Consumo elettrico (150W a 3kW in base all'opzione sottoscritta). ## Fase 3: Configurare la connettività di rete -1. Selezionate il tipo di porta richiesto: - - Rame 1Gbps. - - Fibra 1Gbps o 10Gbps. -2. Aggiungete opzioni di connettività Meet Me Room se necessario per l'integrazione con l'operatore. +1. Seleziona il tipo di porta richiesto: + - Rame 1 Gbps. + - Fibra 1 Gbps o 10 Gbps. +2. Aggiungi opzioni di connettività nella Meet Me Room, se necessario, per l'integrazione con l'operatore. -## Fase 4: Attivare i servizi Hands & Eyes +## Passo 4 : Abilitare i servizi Hands & Eyes -Se necessario, richiedete assistenza tecnica per: +Se necessario, richiedere un'assistenza tecnica per : -- Installare le vostre apparecchiature. +- Installare le apparecchiature. - Configurare il cablaggio. -- Eseguire azioni specifiche (riavvio, foto, ecc.). +- Eseguire azioni puntuali (riavvio, foto, ecc.). ## Fase 5: Validare l'installazione -Una volta installate le vostre apparecchiature, verificate la loro connettività e il corretto funzionamento direttamente tramite la console Cloud Temple o in coordinamento con il supporto. +Una volta installati i dispositivi, verificate la loro connettività e il corretto funzionamento direttamente tramite la console Cloud Temple o in coordinamento con il supporto. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/housing/tutorials.md b/i18n/it/docusaurus-plugin-content-docs/current/housing/tutorials.md index 761b8f87..604939b4 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/housing/tutorials.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/housing/tutorials.md @@ -1,11 +1,13 @@ + + --- title: Tutorial --- -These tutorials help you deploy and manage a Cloud Temple Bastion from the Console portal. +Questi tutorial ti aiutano a distribuire e gestire un Bastion Cloud Temple dal portale Console.
-

Tutorials

-

No tutorials are currently available, but we are working on them actively. Please check back soon for more information!

- Go to the Home Page → -
+

Tutorial

+

Al momento non sono disponibili tutorial, ma ci stiamo lavorando attivamente. Torna presto per ulteriori informazioni!

+ Vai alla pagina Home → + \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/iaas_bare-metal/concepts.md b/i18n/it/docusaurus-plugin-content-docs/current/iaas_bare-metal/concepts.md index 88e14834..9a5882d8 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/iaas_bare-metal/concepts.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/iaas_bare-metal/concepts.md @@ -2,117 +2,134 @@ title: Concetti --- -L'offerta **Bare Metal** di Cloud Temple propone server fisici dedicati associati a un archivio di tipo blocco distribuito. -Questa soluzione offre una personalizzazione totale per i clienti che desiderano gestire autonomamente i propri ambienti software, sia per installare un sistema Linux, Windows o un hypervisor. -## Un'infrastruttura hardware flessibile +L'offerta **Bare Metal** di Cloud Temple propone server fisici dedicati associati a storage block distribuito. +Questa soluzione offre una personalizzazione totale per i clienti che desiderano gestire i propri ambienti software, sia per installare un sistema Linux, Windows o un hypervisor. -L'offerta Bare Metal si basa su un'architettura progettata per rispondere ai bisogni delle carichi di lavoro critici. +--- + +## Un'infrastruttura fisica e flessibile + +L'offerta Bare Metal si basa su un'architettura progettata per soddisfare le esigenze dei carichi di lavoro critici. ### Componenti principali -- **Server Cisco UCS** : Performanti e affidabili, queste unità di calcolo costituiscono la base dell'offerta. -- **Archiviazione IBM Spectrum Virtualize** : Un archivio a blocchi distribuito, che offre resilienza e prestazioni elevate. +- **Server Cisco UCS** : Ad alte prestazioni e affidabili, queste lame di calcolo costituiscono la base dell'offerta. +- **Storage IBM Spectrum Virtualize** : Storage a blocchi distribuito, che offre resilienza e elevate prestazioni. ### Architettura -Il modello di archiviazione distribuita offre una separazione tra calcolo (server Bare Metal) e archiviazione (blocco distribuito), permettendo: +Il modello di storage distribuito offre una separazione tra il calcolo (server Bare Metal) e lo storage (blocco distribuito), consentendo: -- Flessibilità nel mappare i volumi di archiviazione su più server Bare Metal in base alle esigenze. -- Personalizzazione ottimale delle configurazioni di calcolo e archiviazione. -- Maggiore resilienza grazie all'utilizzo di **Distributed RAID 6**. +- Una flessibilità per mappare i volumi di storage su più server Bare Metal in base alle esigenze. +- Una personalizzazione ottimale delle configurazioni di calcolo e storage. +- Una maggiore resilienza grazie all'uso di **Distributed RAID 6**. + +--- ## Regioni e zone di disponibilità -Il prodotto Bare Metal viene distribuito in una zona di disponibilità. +Il prodotto Bare Metal è distribuito in una zona di disponibilità. Una [zona di disponibilità](../additional_content/concepts_az.md) fa parte di una [regione](../additional_content/concepts_regional.md). -Questo tipo di distribuzione consente di scegliere la posizione dei server Bare Metal e di distribuirli su diverse zone di disponibilità (AZ). -Ciò offre una migliore distribuzione del carico, massimizza la ridondanza e semplifica la messa in atto di un piano di ripresa d'attività (DRP) in caso di incidente. +Questo tipo di distribuzione consente di scegliere la posizione dei server Bare Metal e di ripartirli su diverse zone di disponibilità (AZ). +Ciò offre una migliore distribuzione del carico, massimizza la ridondanza e facilita l'implementazione di un piano di disaster recovery (DRP) in caso di incidente. + +--- -## Classi di schede di calcolo +## Classi di lame di calcolo -Le schede di calcolo disponibili per l'offerta Bare Metal offrono una gamma di prestazioni per soddisfare diversi requisiti: +Le lame di calcolo disponibili per l'offerta Bare Metal offrono una gamma di prestazioni per soddisfare diverse esigenze: -| Riferimento | RAM **(1)** | Frequenza **(2)** | Numero di core / thread | Connettività **(3)** | GPU **(4)** | -|------------------------|-------------|------------------------------------------|---------------------------|----------------------|----------------------| -| **ECO** | 384 GB | 2,20/3,0 GHz (Silver 4114 o equivalente) | 20 / 40 thread | 2 × 10 Gbit/s | - | -| **STANDARD** | 384 GB | 2,40/3,4 GHz (Silver 4314 o equivalente) | 32 / 64 thread | 2 × 25 Gbit/s | - | -| **ADVANCE** | 768 GB | 2,80/3,5 GHz (Gold 6342 o equivalente) | 48 / 96 thread | 2 × 25 Gbit/s | - | -| **PERFORMANCE 1** | 384 GB | 3,20/3,6 GHz (Xeon E-53I5Y o equivalente) | 16 / 32 thread | 2 × 25 Gbit/s | - | -| **PERFORMANCE 2** | 768 GB | 3,00/3,6 GHz (Gold 6354 o equivalente) | 36 / 72 thread | 2 × 25 Gbit/s | - | -| **PERFORMANCE 3** | 1536 GB | 2,60/3,5 GHz (Gold 6348 o equivalente) | 56 / 112 thread | 2 × 25 Gbit/s | - | -| **PERFORMANCE 4** | 512 GB | 2,50/4,1 GHz (Intel 6426Y o equivalente) | 32 / 64 thread | 2 × 25 Gbit/s | 2 x NVIDIA L40S 48GB | +| Riferimento | RAM **(1)** | Frequenza **(2)** | Numero di core / thread | Connettività **(3)** | GPU **(4)** | +|-----------------------|--------------|-------------------------------------------|---------------------------|----------------------|----------------------| +| **ECO** | 384 Go | 2.20/3.0 GHz (Silver 4114 o equivalente) | 20 / 40 thread | 2 X 10 Gbit/s | - | +| **STANDARD** | 384 Go | 2.40/3.4 GHz (Silver 4314 o equivalente) | 32 / 64 thread | 2 X 25 Gbit/s | - | +| **ADVANCE** | 768 Go | 2.80/3.5 GHz (Gold 6342 o equivalente) | 48 / 96 thread | 2 X 25 Gbit/s | - | +| **PERFORMANCE 1** | 384 Go | 3.20/3.6 GHz (Xeon E-53I5Y o equivalente) | 16 / 32 thread | 2 X 25 Gbit/s | - | +| **PERFORMANCE 2** | 768 Go | 3.00/3.6 GHz (Gold 6354 o equivalente) | 36 / 72 thread | 2 X 25 Gbit/s | - | +| **PERFORMANCE 3** | 1536 Go | 2.60/3.5 GHz (Gold 6348 o equivalente) | 56 / 112 thread | 2 X 25 Gbit/s | - | +| **PERFORMANCE 4** | 512 Go | 2.50/4.1 GHz (Intel 6426Y o equivalente) | 32 / 64 thread | 2 X 25 Gbit/s | 2 x NVIDIA L40S 48Go | -### Notes +### Note - **(1)** La quantità di memoria è quella fisicamente disponibile sulle lame e non può essere modificata. - **(2)** Le frequenze indicate corrispondono alla frequenza base minima e alla frequenza turbo. -- **(3)** La connettività fisica è condivisa per l'accesso alla rete e l'accesso allo storage a blocchi, grazie a un'architettura convergente Cisco UCS. -- **(4)** I GPU disponibili evolvono in base alle ultime tecnologie. Al 1º maggio 2024, l'offerta include GPU NVIDIA LOVELACE L40S. +- **(3)** La connettività fisica è condivisa per l'accesso di rete e l'accesso allo storage block, grazie a un'architettura convergente Cisco UCS. +- **(4)** I GPU disponibili evolvono in base alle ultime tecnologie. Al 1° maggio 2024, il prodotto include GPU NVIDIA LOVELACE L40S. -La disponibilità dell'infrastruttura è garantita al 99,9%, misurata mensilmente, incluse le finestre di manutenzione. Ogni richiesta relativa allo SLA deve essere segnalata tramite un ticket incidente. +La disponibilità dell'infrastruttura è garantita al 99.9%, misurata mensilmente, inclusi i periodi di manutenzione. Tutte le richieste relative al SLA devono essere segnalate tramite un ticket di incidente. -## Classi di archiviazione in modalità blocco +--- + +## Classi di storage a blocchi -L'archiviazione in blocco distribuita, basata su **IBM Spectrum Virtualize**, offre una gamma di prestazioni adatta a diversi scenari di utilizzo: +Lo storage a blocchi distribuito, basato su **IBM Spectrum Virtualize**, offre una gamma di prestazioni adattate a diversi casi d'uso : -| Riferimento | IOPS/To | Limite massimo IOPS / LUN | Larghezza di banda max / LUN | Uso principale | -|-----------------------------------|-------------------------|----------------------------------------| -| **FLASH - Essenziale** | 500 | Carichi di lavoro leggeri | -| FLASH - Standard - 1500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:medium:v1 | -| FLASH - Premium - 3000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:premium:v1 | -| FLASH - Enterprise - 7500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:enterprise:v1 | -| FLASH - Ultra - 15000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:ultra:v1 | -| **MASS STORAGE - Archiviazione** | Non applicabile | Archiviazione economica | +| Riferimento | IOPS/To | Limite IOPS max / Volume | Banda passante max / Volume | Utilizzo principale | +|-----------------------------------|----------------|---------------------------|-----------------------------|----------------------------------------| +| **FLASH - Essenziale** | 500 | 10 000 IOPS | 512 Mo/s | Carichi di lavoro leggeri | +| **FLASH - Standard** | 1500 | 30 000 IOPS | 1024 Mo/s | Carichi di lavoro standard | +| **FLASH - Premium** | 3000 | 30 000 IOPS | 1024 Mo/s | Carichi intensivi | +| **FLASH - Enterprise** | 7500 | 30 000 IOPS | 1024 Mo/s | Carichi critici | +| **FLASH - Ultra** | 15000 | 30 000 IOPS | 1024 Mo/s | Carichi ultra-intensivi | +| **MASS STORAGE - Archiviazione** | Non applicabile | Non garantito | Non garantito | Storage economico per l'archiviazione | ### Caratteristiche -- **Tecnologia**: Flash NVMe con **RAID distribuito 6** per una maggiore resilienza. -- **Disponibilità**: 99,99%, misurata mensilmente. -- **Restrizioni**: Nessuna limitazione sulle letture o scritture. Nessuna compressione o deduplicazione automatica, garantendo l'utilizzo integrale dei volumi riservati. +- **Prestazioni** : Le prestazioni effettive crescono linearmente in base al volume allocato (secondo il rapporto IOPS/TB), **entro il limite hardware assoluto definito sopra**. (Ad esempio, un volume da 10 TB di classe Ultra sarà fisicamente limitato a 30.000 IOPS e 1024 MB/s). +- **Tecnologia** : Flash NVMe con **Distributed RAID 6** per una maggiore resilienza. +- **Disponibilità** : 99,99%, misurata mensilmente. +- **Restrizioni** : Nessuna limitazione su letture o scritture. Nessuna compressione o deduplicazione automatica, garantendo l'utilizzo completo dei volumi riservati. -### Sicurezza e Crittografia del Storage a Blocchi +### Sicurezza e Cifratura dello Storage a Blocchi -Per garantire la riservatezza dei tuoi dati in stato di riposo, l'intera infrastruttura di storage a blocchi è dotata di un robusto cifratura hardware. +Per garantire la riservatezza dei vostri dati a riposo, l'intera nostra infrastruttura di storage a blocchi integra una robusta cifratura hardware. -- **Tipo di Crittografia**: I dati vengono crittografati direttamente sui dischi (`Data At Rest`) utilizzando l'algoritmo **XTS-AES 256**. -- **Conformità**: Questo metodo di crittografia è conforme allo standard **FIPS 140-2**, garantendo un elevato livello di sicurezza verificato. -- **Funzionamento**: La crittografia viene applicata al momento della scrittura dei dati sul supporto di archiviazione fisico. +- **Tipo di Cifratura** : I dati sono cifrati direttamente sui dischi (`Data At Rest`) utilizzando l'algoritmo **XTS-AES 256**. +- **Conformità** : Questo metodo di cifratura è conforme alla norma **FIPS 140-2**, garantendo un elevato livello di sicurezza convalidato. +- **Funzionamento** : La cifratura viene applicata al momento della scrittura dei dati sul supporto di storage fisico. -:::warning[Osservazione sulla replica] -È importante sottolineare che questa crittografia protegge i dati archiviati sui dischi. Non è attiva "on-the-fly", il che significa che i dati non vengono crittografati durante le operazioni di replica dello storage tra le zone di disponibilità. La sicurezza dei trasferimenti è garantita tramite canali di comunicazione dedicati e protetti. +:::warning[Punto di attenzione sulla replicazione] +È importante notare che questa cifratura protegge i dati memorizzati sui dischi. Non è attiva "on-the-fly", il che significa che i dati non vengono cifrati durante le operazioni di replicazione dello storage tra le zone di disponibilità. La sicurezza dei trasferimenti è garantita da canali di comunicazione dedicati e sicuri. ::: -## Accesso alla console Bare Metal +--- -L'accesso ai server Bare Metal avviene direttamente dalla **console Cloud Temple**. Questa funzionalità offre un controllo totale sul ciclo di vita dei server, inclusi: +## Accesso Console Bare Metal -- **Accesso KVM**: un'interfaccia diretta per gestire i server, come se foste fisicamente sul sito. -- **Gestione delle operazioni quotidiane**: possibilità di eseguire azioni come la gestione dell'alimentazione, il riavvio o il **mapping di ISO** per l'installazione di un sistema operativo. +L'accesso ai server Bare Metal avviene direttamente dalla **console Cloud Temple**. Questa funzionalità offre un controllo totale sul ciclo di vita dei server, includendo: -Questo livello di accesso garantisce una massima flessibilità rispettando al contempo i vincoli di sicurezza. +- **Accesso KVM**: Un'interfaccia diretta per gestire i server, come se si fosse fisicamente in loco. +- **Gestione delle operazioni comuni**: Possibilità di eseguire azioni come la gestione dell'alimentazione, i riavvii o ancora l'**associazione ISO** per l'installazione di un sistema operativo. -## Networking connectivity of Bare Metal servers +Questo livello di accesso garantisce una flessibilità massima nel rispetto dei vincoli di sicurezza. -Bare Metal servers feature advanced networking capabilities. +--- + +## Connettività di rete dei server Bare Metal + +I server Bare Metal dispongono di funzionalità di rete avanzate. ### VLAN di livello 2 -È possibile configurare dei **VLAN di tipo livello 2** sulle interfacce di rete dei server Bare Metal. Gli utenti possono: +È possibile configurare **VLAN di tipo livello 2** sulle interfacce di rete dei server Bare Metal. +Gli utenti possono: -- **Abilitare il tagging VLAN** per associare uno o più VLAN a una stessa interfaccia. +- **Abilitare il tagging VLAN** per associare uno o più VLAN a una singola interfaccia. - **Propagare i VLAN** direttamente sulle interfacce di rete dei server. ### Aggregazione delle interfacce di rete -Ogni server è dotato di **due interfacce di rete**. Queste interfacce possono essere utilizzate in modo indipendente o combinate per ottenere prestazioni migliori e ridondanza: +Ogni server è dotato di **due interfacce di rete**. Queste interfacce possono essere utilizzate in modo indipendente o combinate per garantire prestazioni e ridondanza migliori: ### Prestazioni di rete -Le prestazioni delle interfacce di rete sono direttamente correlate alla classe di blade scelta. Esempio: +Le prestazioni delle interfacce di rete sono direttamente correlate alla classe della lama scelta. Esempio: -- Le blade **ECO** offrono una connettività di 2 x 10 Gbit/s. -- Le blade **STANDARD** e successive dispongono di una connettività di 2 x 25 Gbit/s. +- Le lame **ECO** offrono una connettività di 2 x 10 Gbit/s. +- Le lame **STANDARD** e superiori dispongono di una connettività di 2 x 25 Gbit/s. Queste opzioni di rete garantiscono una connettività affidabile, flessibile e adatta a una varietà di carichi di lavoro professionali. + +--- \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/iaas_bare-metal/iaas_bare-metal.md b/i18n/it/docusaurus-plugin-content-docs/current/iaas_bare-metal/iaas_bare-metal.md index 9d4f2798..abbdc9bf 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/iaas_bare-metal/iaas_bare-metal.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/iaas_bare-metal/iaas_bare-metal.md @@ -2,39 +2,41 @@ title: Panoramica --- -L'offerta __Bare Metal__ di Cloud Temple propone server dedicati, completamente personalizzabili, per rispondere alle esigenze dei clienti in cerca di totale autonomia sulla propria infrastruttura. +# Bare metal -Progettata attorno a tecnologie all'avanguardia - Cisco UCS per il calcolo e IBM Spectrum Virtualize/FlashSystem per lo storage - questa soluzione garantisce prestazioni ottimali e un'affidabilità esemplare. +Il prodotto __Bare Metal__ di Cloud Temple offre server dedicati, completamente personalizzabili, per soddisfare le esigenze dei clienti alla ricerca di un'autonomia totale sulla propria infrastruttura. -Con __Bare Metal__, beneficiate di hardware esclusivo, senza condivisione, permettendovi di installare e gestire l'ambiente software di vostra scelta: hypervisor, Linux, Windows o altri. +Progettata attorno alle tecnologie all'avanguardia Cisco UCS per il calcolo e IBM Spectrum Virtualize/FlashSystem per lo storage, questa soluzione garantisce prestazioni ottimali e un'affidabilità esemplare. -L'accesso diretto ai vostri server avviene tramite la console Cloud Temple, offrendo una gestione semplificata e un controllo immediato. Che stiate cercando un'infrastruttura per le vostre applicazioni critiche o risorse hardware per i vostri progetti specifici, l'offerta Bare Metal vi assicura flessibilità, controllo totale e prestazioni ineguagliabili. +Con __Bare Metal__, si dispone di hardware esclusivo, non condiviso, che consente di installare e gestire l'ambiente software di propria scelta: hypervisor, Linux, Windows o altri. + +L'accesso diretto ai server avviene tramite la console Cloud Temple, offrendo una gestione semplificata e un'utilizzo immediato. Che si cerchi un'infrastruttura per applicazioni critiche o risorse hardware per progetti specifici, il prodotto Bare Metal garantisce flessibilità, controllo totale e prestazioni senza pari.

Concetti

-

Scoprite le basi e i principi essenziali per comprendere e padroneggiare la nostra infrastruttura.

- Esplorare i concetti → +

Scopri le basi e i principi essenziali per comprendere e padroneggiare la nostra infrastruttura.

+ Esplora i concetti →

Avvio rapido

-

Iniziate rapidamente con le nostre risorse seguendo istruzioni chiare e semplici.

- Avviare la guida rapida → +

Inizia rapidamente con le nostre risorse seguendo istruzioni chiare e semplici.

+ Avvia la guida rapida →

Tutorial

-

Imparate passo dopo passo a configurare e utilizzare i nostri servizi con guide dettagliate.

- Scoprire i tutorial → +

Impara passo dopo passo a configurare e utilizzare i nostri servizi con guide dettagliate.

+ Scopri i tutorial →
## Piattaforme di acquisto + \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/iaas_bare-metal/quickstart.md b/i18n/it/docusaurus-plugin-content-docs/current/iaas_bare-metal/quickstart.md index ce314888..9e060c30 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/iaas_bare-metal/quickstart.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/iaas_bare-metal/quickstart.md @@ -8,26 +8,30 @@ import shivaBareMetalStoragelist from '@site/docs/iaas_bare-metal/images/shiva_b # Guida rapida per l'offerta Bare Metal -Questa pagina ti guida attraverso i passaggi iniziali per utilizzare l'offerta **Bare Metal** dalla console Cloud Temple. Segui queste istruzioni per esplorare i menu e le funzionalità disponibili. +Questa pagina illustra i passaggi iniziali per utilizzare l'offerta **Bare Metal** dalla console Cloud Temple. Segui queste istruzioni per scoprire i menu e le funzionalità disponibili. --- ## Prerequisiti -Prima di iniziare, assicurati dei seguenti punti: +Prima di iniziare, verifica i seguenti punti: -1. **Sottoscrizione attivata**: La tua organizzazione deve aver sottoscritto l'offerta Bare Metal. -2. **Permessi utente**: Il tuo account utente deve disporre dei diritti necessari per accedere e gestire le risorse Bare Metal. +1. **Sottoscrizione attiva** : La tua organizzazione deve aver sottoscritto l'offerta Bare Metal. +2. **Permessi utente** : Il tuo account utente deve disporre dei permessi necessari per accedere e gestire le risorse Bare Metal. + +--- ## Accesso all'interfaccia Bare Metal -Dopo l'attivazione della sottoscrizione e la configurazione dei permessi, un nuovo menu denominato **Bare Metal** appare nella console Cloud Temple. Questo menu contiene due sottomenu principali: **Bare Metal** e **Volumes**. +Una volta attivata la sottoscrizione e configurate le autorizzazioni, un nuovo menu denominato **Bare Metal** appare nella console Cloud Temple. Questo menu contiene due sottomenu principali: **Bare Metal** e **Volumes**. +--- + ### 1. Sottomenu **Bare Metal** -Il sottomenu **Bare Metal** presenta un tabella che elenca tutte le istanze Bare Metal disponibili. Tale tabella include le informazioni principali per ciascuna istanza: +Il sottomenu **Bare Metal** visualizza una tabella che elenca tutte le istanze Bare Metal disponibili. Questa tabella include le informazioni principali per ogni istanza: - **Nome del Bare Metal** - **Stato** @@ -38,35 +42,39 @@ Il sottomenu **Bare Metal** presenta un tabella che elenca tutte le istanze Bare #### Funzionalità principali -- **Pulsante Azione**: consente di accedere direttamente alla console di amministrazione del Bare Metal. -- **Nome cliccabile**: facendo clic sul nome di un'istanza Bare Metal, viene aperta una nuova pagina con i **dettagli completi** dell'istanza: - - Informazioni sul hardware (RAM, CPU, GPU, ecc.). +- **Pulsante Azione** : Consente di accedere direttamente alla console di amministrazione del Bare Metal. +- **Nome cliccabile** : Facendo clic sul nome di un'istanza Bare Metal, viene visualizzata una nuova pagina con i **dettagli completi** dell'istanza : + - Informazioni sull'hardware (RAM, CPU, GPU, ecc.). - Configurazione di rete (indirizzi IP associati). - Informazioni di connettività per la gestione. -### 2. Sottomenu **Volumi** +--- + +### 2. Sottomenu **Volumes** -Il sottomenu **Volumi** visualizza una tabella che elenca tutti i volumi di archiviazione associati alla tua sottoscrizione Bare Metal. Per ciascun volume sono disponibili le seguenti informazioni: +Il sottomenu **Volumes** visualizza una tabella che elenca tutti i volumi di archiviazione associati alla tua sottoscrizione Bare Metal. Per ogni volume, sono disponibili le seguenti informazioni: - **Nome del volume** - **Capacità** -- **Classe di prestazioni** (IOPS per To) +- **Classe di prestazioni** (IOPS per TB) - **Stato** (Disponibile, In fase di distribuzione, ecc.) -:::info[Volume BFS (Avvio da SAN)] -Il **Volume 1** è il volume **BFS (Avvio da SAN)** e deve essere utilizzato per installare il sistema operativo. +:::info[Volume BFS (Boot from SAN)] +Il **Volume 1** è il volume **BFS (Boot from SAN)** e deve essere utilizzato per installare il sistema operativo. -**Importante:** Questo volume non può essere condiviso con altri server Bare Metal della stessa zona di disponibilità (AZ). +**Importante:** Questo volume non è condivisibile con gli altri Bare Metal della stessa zona di disponibilità (AZ). ::: -:::tip[Buona pratica] -Preferisci installare il sistema operativo sul volume **BFS**, e memorizza i tuoi dati su un volume **LUN** aggiuntivo. Questa separazione semplifica la manutenzione, i backup e la reinstallazione del sistema, se necessario. +:::tip[Best practice] +Si consiglia di installare l'OS sul volume **BFS** e di archiviare i dati su un volume **LUN** aggiuntivo. Questa separazione facilita la manutenzione, i backup e la reinstallazione del sistema, se necessario. ::: #### Funzionalità principali -- **Gestione dei volumi**: Da questo pannello è possibile mappare i volumi alle proprie istanze Bare Metal. +- **Gestione dei volumi** : Da questa dashboard, puoi mappare i volumi alle tue istanze Bare Metal. + +--- \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/iaas_bare-metal/tutorials.md b/i18n/it/docusaurus-plugin-content-docs/current/iaas_bare-metal/tutorials.md index 183f6771..1493a5dd 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/iaas_bare-metal/tutorials.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/iaas_bare-metal/tutorials.md @@ -1,9 +1,11 @@ + + --- title: Tutorial ---

Tutorial

-

Al momento non sono disponibili tutorial, ma ci stiamo lavorando attivamente. Tornate presto per saperne di più!

- Vai alla pagina iniziale → -
+

Nessun tutorial è attualmente disponibile, ma ci stiamo lavorando attivamente. Tornerete presto per saperne di più!

+ Vai alla homepage → + \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md b/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md index db450dc6..76405a48 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md @@ -2,133 +2,139 @@ title: Concetti --- -L'offerta __IaaS (Infrastructure as a Service)__ di Cloud Temple è progettata per soddisfare i bisogni critici di continuità operativa e ripresa d'attività, con un'enfasi particolare sui settori esigenti come l'industria, la banca e l'assicurazione. Basata su tecnologie all'avanguardia, questa infrastruttura garantisce un'alta disponibilità e un'ottimizzazione delle prestazioni per i tuoi carichi di lavoro critici. +L'offerta __IaaS (Infrastructure As A Service)__ di Cloud Temple è progettata per rispondere alle esigenze critiche di continuità e ripresa dell'attività, con un'attenzione particolare ai settori esigenti come l'industria, il settore bancario e quello assicurativo. Basata su tecnologie all'avanguardia, questa infrastruttura garantisce una disponibilità massima e prestazioni ottimali per i vostri carichi di lavoro critici. -## Una piattaforma tecnologica di fiducia +## Una piattaforma tecnologica affidabile La piattaforma IaaS di Cloud Temple si basa su partner tecnologici di fama internazionale: - Calcolo: __CISCO UCS__. -- Archiviazione: __IBM Spectrum Virtualize__, __IBM FlashSystem__ per l'archiviazione a blocchi, e __DELL ECS__ per l'archiviazione oggetti. +- Archiviazione: __IBM Spectrum Virtualize__, __IBM FlashSystem__ per lo storage a blocchi e __DELL ECS__ per lo storage a oggetti. - Rete: __JUNIPER__. -- Virtualizzazione: __Stack Opensource__, che offre una base affidabile ed esauriente per gestire i vostri ambienti cloud. +- Virtualizzazione: __Stack Opensource__, che offre una base affidabile e collaudata per gestire i vostri ambienti cloud. Questa architettura si basa sul modello __VersaStack__, un'alleanza tra Cisco e IBM, che garantisce un'ampia compatibilità con i principali produttori di software. -## A dedicated and automated infrastructure +## Un'infrastruttura dedicata e automatizzata -Although fully automated through APIs and a Terraform provider, Cloud Temple's IaaS offering provides a unique infrastructure: +Sebbene completamente automatizzata grazie a API e un provider Terraform, il prodotto IaaS di Cloud Temple offre un'infrastruttura unica: -- __Dedicated resources__: Compute blades, storage volumes, and software stacks (virtualization, backup, firewalling, etc.) are never shared among clients. -- __Maximum predictability__: You control virtualization rates, storage IOPS load, and benefit from clear, consumption-based monthly billing. +- __Risorse dedicate__ : I blade di calcolo, i volumi di archiviazione e gli stack software (virtualizzazione, backup, firewalling, ecc.) non sono mai condivisi tra i clienti. +- __Massima prevedibilità__ : Hai il controllo sui tassi di virtualizzazione, sul carico IOPS dell'archiviazione e benefici di una fatturazione chiara, a consumo mensile. -The platform is certified __SecNumCloud__ by the [ANSSI](https://www.ssi.gouv.fr/), ensuring a high level of automation and security. +La piattaforma è certificata __SecNumCloud__ da [ANSSI](https://www.ssi.gouv.fr/), garantendo un elevato livello di automazione e sicurezza. -## Funzionalità principali +## Principali funzionalità - Risorse di calcolo (CPU, RAM) dedicate e su richiesta. -- Archiviazione su richiesta (diverse classi disponibili). -- Risorse di rete (Internet, reti private). -- Backup incrociati con conservazione configurabile. -- Replica asincrona per l'archiviazione o le macchine virtuali. +- Storage su richiesta (plusieurs classes disponibles). +- Risorse di rete (Internet, réseaux privés). +- Backup incrociati con retention configurabile. +- Replicazione asincrona per lo storage o le macchine virtuali. - Gestione tramite la [Console](../console/console.md) o in modalità Infrastructure as Code grazie alle API e al provider Terraform. ## Vantaggi -| Vantaggio | Descrizione | -|---------------------|------------------------------------------------------------------------------------------------------------------------------------------------| -| Sicurezza digitale | Memorizzazione dei dati in Francia e conformità al GDPR. | -| Sicurezza | Piattaforma altamente sicura, certificata __SecNumCloud__, __HDS__ (Ospitalità dei Dati Sanitari), __ISO 27001__ e __ISAE 3402 tipo II__. | -| Alta disponibilità | Tasso di disponibilità della piattaforma del 99,99%, misurato mensilmente, incluse le finestre di manutenzione. | -| Resilienza | Implementazione di piani di continuità o ripresa dell'attività secondo le esigenze. | -| Automazione | Piattaforma completamente automatizzata progettata per integrarsi in un programma di trasformazione digitale. | -| Su richiesta | Risorse disponibili su richiesta. | +| Vantaggio | Descrizione | +|----------------------|------------------------------------------------------------------------------------------------------------------------------------------------| +| Fiducia digitale | Hosting dei dati in Francia e conformità al GDPR. | +| Sicurezza | Piattaforma altamente sicura, certificata __SecNumCloud__, __HDS__ (Hosting dei Dati Sanitari), __ISO 27001__ e __ISAE 3402 tipo II__. | +| Alta disponibilità | Tasso di disponibilità della piattaforma del 99,99%, misurato mensilmente, finestre di manutenzione incluse. | +| Resilienza | Implementazione di piani di continuità operativa o di ripristino delle attività in base alle esigenze. | +| Automazione | Piattaforma completamente automatizzata progettata per integrarsi in un programma di trasformazione digitale. | +| Su richiesta | Risorse disponibili su richiesta. | ## Regioni e zone di disponibilità -Il prodotto OpenIaaS è distribuito in una zona di disponibilità. +Il prodotto OpenIaaS è distribuito in una zona di disponibilità. Una zona di disponibilità fa parte di una regione. -Questo tipo di distribuzione consente di scegliere la localizzazione dei cluster e di distribuirli su diverse zone di disponibilità (AZ). -Fornisce una migliore distribuzione del carico, massimizza la ridondanza e semplifica la messa in atto di un piano di ripresa d'attività (DRP) in caso di incidente. +Questo tipo di distribuzione consente di scegliere la posizione dei cluster e di poterli distribuire su diverse zone di disponibilità (AZ). +Ciò offre una migliore distribuzione del carico, massimizza la ridondanza e facilita l'implementazione di un piano di ripristino di attività (DRP) in caso di incidente. -## Classi di schede di calcolo +--- -Le schede di calcolo disponibili per l'offerta Bare Metal offrono una gamma di prestazioni per soddisfare diversi requisiti: +## Classi di blade di calcolo -| Riferimento | RAM __(1)__ | Frequenza __(2)__ | Numero di core / thread | Connettività __(3)__ | GPU __(4)__ | -|------------------------|--------------|-------------------------------------------|---------------------------|----------------------|----------------------| -| __ECO__ | 384 GB | 2,20/3,0 GHz (Silver 4114 o equivalente) | 20 / 40 thread | 2 × 10 Gbit/s | - | -| __STANDARD__ | 384 GB | 2,40/3,4 GHz (Silver 4314 o equivalente) | 32 / 64 thread | 2 × 25 Gbit/s | - | -| __ADVANCE__ | 768 GB | 2,80/3,5 GHz (Gold 6342 o equivalente) | 48 / 96 thread | 2 × 25 Gbit/s | - | -| __PERFORMANCE 1__ | 384 GB | 3,20/3,6 GHz (Xeon E-53I5Y o equivalente) | 16 / 32 thread | 2 × 25 Gbit/s | - | -| __PERFORMANCE 2__ | 768 GB | 3,00/3,6 GHz (Gold 6354 o equivalente) | 36 / 72 thread | 2 × 25 Gbit/s | - | -| __PERFORMANCE 3__ | 1536 GB | 2,60/3,5 GHz (Gold 6348 o equivalente) | 56 / 112 thread | 2 × 25 Gbit/s | - | -| __PERFORMANCE 4__ | 512 GB | 2,50/4,1 GHz (Intel 6426Y o equivalente) | 32 / 64 thread | 2 × 25 Gbit/s | 2 x NVIDIA L40S 48GB | +I blade di calcolo disponibili per l'offerta Bare Metal offrono una gamma di prestazioni per soddisfare diverse esigenze: -### Note +| Riferimento | RAM __(1)__ | Frequenza __(2)__ | Numero di core / thread | Connettività __(3)__ | GPU __(4)__ | +|-----------------------|--------------|-------------------------------------------|---------------------------|----------------------|----------------------| +| __ECO__ | 384 Go | 2.20/3.0 GHz (Silver 4114 o equivalente) | 20 / 40 thread | 2 X 10 Gbit/s | - | +| __STANDARD__ | 384 Go | 2.40/3.4 GHz (Silver 4314 o equivalente) | 32 / 64 thread | 2 X 25 Gbit/s | - | +| __ADVANCE__ | 768 Go | 2.80/3.5 GHz (Gold 6342 o equivalente) | 48 / 96 thread | 2 X 25 Gbit/s | - | +| __PERFORMANCE 1__ | 384 Go | 3.20/3.6 GHz (Xeon E-53I5Y o equivalente) | 16 / 32 thread | 2 X 25 Gbit/s | - | +| __PERFORMANCE 2__ | 768 Go | 3.00/3.6 GHz (Gold 6354 o equivalente) | 36 / 72 thread | 2 X 25 Gbit/s | - | +| __PERFORMANCE 3__ | 1536 Go | 2.60/3.5 GHz (Gold 6348 o equivalente) | 56 / 112 thread | 2 X 25 Gbit/s | - | +| __PERFORMANCE 4__ | 512 Go | 2.50/4.1 GHz (Intel 6426Y o equivalente) | 32 / 64 thread | 2 X 25 Gbit/s | 2 x NVIDIA L40S 48Go | +### Note - __(1)__ La quantità di memoria è quella fisicamente disponibile sulle lame e non può essere modificata. - __(2)__ Le frequenze indicate corrispondono alla frequenza base minima e alla frequenza turbo. -- __(3)__ La connettività fisica è condivisa per l'accesso alla rete e l'accesso allo storage a blocchi, grazie a un'architettura convergente Cisco UCS. -- __(4)__ I GPU disponibili evolvono in base alle ultime tecnologie. Al 1° maggio 2024, l'offerta include GPU NVIDIA LOVELACE L40S. -- __(5)__ L'alta disponibilità su un cluster è disponibile esclusivamente a partire da 2 nodi. +- __(3)__ La connettività fisica è condivisa per l'accesso di rete e l'accesso allo storage block, grazie a un'architettura convergente Cisco UCS. +- __(4)__ I GPU disponibili evolvono in base alle ultime tecnologie. Al 1° maggio 2024, il prodotto include GPU NVIDIA LOVELACE L40S. +- __(5)__ L'alta disponibilità su un cluster è disponibile solo a partire da 2 nodi. -La disponibilità dell'infrastruttura è garantita al 99,9%, misurata mensilmente, incluse le finestre di manutenzione. Ogni richiesta relativa allo SLA deve essere segnalata tramite un ticket incidente. +La disponibilità dell'infrastruttura è garantita al 99,9%, misurata mensilmente, finestre di manutenzione incluse. Qualsiasi richiesta relativa al SLA deve essere segnalata tramite un ticket di incidente. -## Classi di archiviazione in modalità blocco +--- -L'archiviazione in blocco distribuita, basata su __IBM Spectrum Virtualize__, offre una gamma di prestazioni adatta a diversi scenari di utilizzo: +## Classi di storage in modalità block -| Riferimento | IOPS/To | Limite massimo IOPS / LUN | Larghezza di banda max / LUN | Uso principale | -|-----------------------------------|-------------------------|----------------------------------------| -| __FLASH - Essenziale__ | 500 | Carichi di lavoro leggeri | -| FLASH - Standard - 1500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:medium:v1 | -| FLASH - Premium - 3000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:premium:v1 | -| FLASH - Enterprise - 7500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:enterprise:v1 | -| FLASH - Ultra - 15000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:ultra:v1 | -| __MASS STORAGE - Archiviazione__ | Non applicabile | Archiviazione economica | +Lo storage block distribuito, basato su __IBM Spectrum Virtualize__, offre una gamma di prestazioni adattate a diversi casi d'uso: + +| Riferimento | IOPS/To | Limite IOPS max / Volume | Larghezza di banda max / Volume | Utilizzo principale | +|-----------------------------------|----------------|---------------------------|---------------------------------|--------------------------------------------| +| **FLASH - Essenziale** | 500 | 10 000 IOPS | 512 MB/s | Carichi di lavoro leggeri | +| **FLASH - Standard** | 1500 | 30 000 IOPS | 1024 MB/s | Carichi di lavoro standard | +| **FLASH - Premium** | 3000 | 30 000 IOPS | 1024 MB/s | Carichi intensivi | +| **FLASH - Enterprise** | 7500 | 30 000 IOPS | 1024 MB/s | Carichi critici | +| **FLASH - Ultra** | 15000 | 30 000 IOPS | 1024 MB/s | Carichi ultra-intensivi | +| **MASS STORAGE - Archiviazione** | Non applicabile | Non garantito | Non garantito | Storage economico per l'archiviazione | ### Caratteristiche -- __Tecnologia__: Flash NVMe con __RAID distribuito 6__ per una maggiore resilienza. -- __Disponibilità__: 99,99%, misurata mensilmente. -- __Restrizioni__: Nessuna limitazione sulle letture o scritture. Nessuna compressione o deduplicazione automatica, garantendo l'utilizzo integrale dei volumi riservati. +- **Prestazioni** : Le prestazioni effettive crescono linearmente in base al volume allocato (secondo il rapporto IOPS/TB), **entro il limite massimo hardware assoluto definito sopra**. (Ad esempio, un volume da 10 TB di classe Ultra sarà fisicamente limitato a 30.000 IOPS e 1024 MB/s). +- __Tecnologia__ : Flash NVMe con __RAID 6 distribuito__ per una maggiore resilienza. +- __Disponibilità__ : 99,99%, misurata mensilmente. +- __Limitazioni__ : Nessuna limitazione sulle letture o scritture. Nessuna compressione o deduplicazione automatica, garantendo l'utilizzo integrale dei volumi riservati. -### Sicurezza e Crittografia del Storage a Blocchi +### Sicurezza e Cifratura dell'Archiviazione a Blocchi -Per garantire la riservatezza dei tuoi dati in stato di riposo, l'intera infrastruttura di storage a blocchi è dotata di un robusto crittografia hardware. +Per garantire la riservatezza dei vostri dati a riposo, l'intera nostra infrastruttura di archiviazione a blocchi integra una robusta cifratura hardware. -- __Tipo di Crittografia__: I dati vengono crittografati direttamente sui dischi (`Data At Rest`) utilizzando l'algoritmo __XTS-AES 256__. -- __Conformità__: Questo metodo di crittografia è conforme allo standard __FIPS 140-2__, garantendo un elevato livello di sicurezza certificato. -- __Funzionamento__: La crittografia viene applicata al momento della scrittura dei dati sul supporto di archiviazione fisico. +- __Tipo di Cifratura__ : I dati sono cifrati direttamente sui dischi (`Data At Rest`) utilizzando l'algoritmo __XTS-AES 256__. +- __Conformità__ : Questo metodo di cifratura è conforme alla norma __FIPS 1-40-2__, garantendo un elevato livello di sicurezza convalidato. +- __Funzionamento__ : La cifratura viene applicata al momento della scrittura dei dati sul supporto di archiviazione fisico. -:::warning[Osservazione sulla replica] -È importante sottolineare che questa crittografia protegge i dati memorizzati sui dischi. Non è attiva "on-the-fly", il che significa che i dati non vengono crittografati durante le operazioni di replica dello storage tra le zone di disponibilità. La sicurezza dei trasferimenti è garantita tramite canali di comunicazione dedicati e protetti. +:::warning[Point d'attention sur la réplication] +È importante notare che questa cifratura protegge i dati archiviati sui dischi. Non è attiva "on-the-fly", il che significa che i dati non vengono cifrati durante le operazioni di replicazione dell'archiviazione tra le zone di disponibilità. La sicurezza dei trasferimenti è garantita da canali di comunicazione dedicati e sicuri. ::: -## Reti +--- + +## Le reti -Il prodotto OpenIaaS è compatibile con [reti private](../network/private_network) e [accesso a Internet](../network/internet). +Il prodotto OpenIaaS è compatibile con [le reti private](../network/private_network) e [l'accesso a Internet](../network/internet). -Da configurazione di una macchina virtuale sono disponibili due tipi di rete. +Due tipi di reti sono disponibili dalla configurazione di una macchina virtuale. -### VLAN networks +### Le reti di tipo VLAN -VLAN-type networks must be deployed at a rate of one VLAN per network interface card. If you wish to use multiple networks, simply create multiple network interface cards. +Le reti di tipo VLAN devono essere configurate con un VLAN per scheda di rete. Se si desidera utilizzare più reti, è sufficiente creare più schede di rete. -A limitation exists regarding the maximum number of network interfaces that can be created on a VM, which is 7. +Esiste un limite al numero massimo di schede che possono essere create su una VM, fissato a 7. -### VLAN Trunk +### Il VLAN TRUNK -Nel caso in cui sia necessario propagare più di 7 VLAN, è necessario utilizzare il VLAN Trunk. -Il VLAN Trunk consente il passaggio di tutti i propri VLAN su un'unica scheda. La configurazione degli ID dei VLAN deve essere effettuata tramite interfacce virtuali di tipo VLAN dall'OS della VM. Gli ID dei VLAN sono gli stessi presenti e visibili dalla console. +Nel caso in cui sia necessario propagare più di 7 VLAN, è necessario utilizzare il VLAN Trunk. +Il VLAN Trunk consente il passaggio di tutte le VLAN su una singola scheda. La configurazione degli ID VLAN deve essere effettuata tramite interfacce virtuali di tipo VLAN dall'OS della VM. Gli ID VLAN sono gli stessi presenti e visibili dalla console. -## Backup delle macchine virtuali +## Backup di macchine virtuali -L'offerta OpenIaaS include un'__architettura nativa e non disattivabile per il backup distribuito__, elemento obbligatorio nell'ambito della qualifica SecNumCloud francese. +L'offerta OpenIaaS integra __un'architettura di backup distribuita nativa e non disattivabile__, elemento obbligatorio nel quadro della qualifica francese SecNumCloud. -I backup vengono archiviati sul [Storage Oggetti qualificato SecNumCloud](../storage/oss), garantendo una protezione ottimale in caso di guasto grave del datacenter di produzione. Questo approccio permette il ripristino dei dati su un datacenter secondario, anche in caso di incidenti critici come incendi. +I backup sono archiviati su [Archiviazione Oggetti qualificata SecNumCloud](../storage/oss), garantendo una protezione ottimale in caso di guasto maggiore del datacenter di produzione. Questo approccio consente di ripristinare i dati su un datacenter secondario, anche in caso di incidente critico come un incendio. ### Servizi di protezione dei dati disponibili @@ -136,14 +142,14 @@ I backup vengono archiviati sul [Storage Oggetti qualificato SecNumCloud](../sto |---|---| | **Backup incrementale (Agentless)** | Backup senza agente tramite i meccanismi nativi dell'ipervisore, verso un repository S3 remoto. | | **Backup dei metadati** | Protezione delle configurazioni del pool di virtualizzazione e dell'orchestratore di backup — indispensabile per il Disaster Recovery. | -| **Ripristino granulare** | Ripristino a livello di VM completa, disco virtuale individuale o singolo file. | -| **Offloading S3 Multi-AZ** | Esternalizzazione verso lo storage a oggetti S3 di Cloud Temple replicato tra zone di disponibilità. | +| **Ripristino granulare** | Ripristino possibile a livello di VM completa, disco virtuale singolo o file unitario. | +| **Offloading S3 Multi-AZ** | Trasferimento verso lo storage oggetto S3 Cloud Temple replicato tra zone di disponibilità. | -Le velocità di backup e ripristino dipendono dal tasso di modifica negli ambienti. La politica di backup è completamente configurabile tramite [la Console Cloud Temple](../console/console.md) per ogni macchina virtuale. +Le velocità di backup e ripristino dipendono dal tasso di cambiamento negli ambienti. La politica di backup è completamente configurabile dalla [Console Cloud Temple](../console/console.md) per ogni macchina virtuale. -| Riferimento | Unità | Limite massimo IOPS / LUN | Larghezza di banda max / LUN | SKU | -|---|---|---| -| BACKUP - Accesso al servizio | 1 VM | csp:(region):openiaas:backup:vm:v1 | +| Riferimento | Unità | SKU | +| ---------------------------------------------| ----- | ------------------------------ | +| BACKUP - Accesso al servizio | 1 VM | csp:(region):openiaas:backup:vm:v1 | --- @@ -151,121 +157,131 @@ Le velocità di backup e ripristino dipendono dal tasso di modifica negli ambien #### Panoramica -L'architettura si basa su una separazione rigorosa tra il **piano di controllo** (orchestratore di backup) e il **piano dei dati** (storage S3 remoto): l'orchestratore è ospitato nel cluster di gestione di Cloud Temple (separato e inaccessibile al cliente), mentre i dati di backup sono archiviati in un repository S3 remoto, fisicamente separato dall'infrastruttura di produzione. I dati transitano cifrati tra i due componenti tramite HTTPS/TLS 1.3. +L'architettura si basa su una netta separazione tra il **piano di controllo** e il **piano dati**: l'orchestratore di backup è ospitato nel cluster di gestione di Cloud Temple (distinto e inaccessibile al cliente), mentre i dati di backup sono archiviati su un archivio S3 remoto, fisicamente separato dall'infrastruttura di produzione. I dati transitano cifrati tra i due componenti. #### Orchestratore di backup -L'orchestratore è distribuito nel cluster di gestione di Cloud Temple, **direttamente inaccessibile al cliente**. Coordina tutti i job di backup e gestisce la cifratura. +L'orchestratore è distribuito nel cluster di management di Cloud Temple, **inaccessibile direttamente al cliente**. Orchestra tutti i job di backup e gestisce la crittografia. -- **Politiche standard**: le politiche di backup vengono applicate per impostazione predefinita a ogni tenant. -- **Politiche personalizzate**: il cliente può richiedere frequenze o periodi di conservazione specifici tramite un ticket di supporto nella console di Cloud Temple. +- **Politiche standard** : le politiche di backup vengono applicate per impostazione predefinita a ogni tenant. +- **Politiche personalizzate** : il cliente può richiedere frequenze o retention specifiche tramite un ticket di supporto nella console Cloud Temple. -#### Storage S3 remoto +#### Archiviazione remota S3 -I backup vengono inviati allo [Storage Oggetti qualificato SecNumCloud](../storage/oss) di Cloud Temple, con replica Multi-AZ per garantire la resilienza in caso di perdita di un intero sito fisico. +I backup vengono inviati all'[Archiviazione Oggetti qualificata SecNumCloud](../storage/oss) di Cloud Temple, con replicazione Multi-AZ per garantire la resilienza in caso di perdita di un intero sito fisico. --- -### Meccanismo di backup: Backup Incrementale +### Meccanismo di backup: Incremental Backup -Il servizio utilizza una modalità di backup **incrementale**. Questa modalità punta a un **Backup Repository** (lo storage S3 remoto) e non esporta mai un backup completo dopo il primo: vengono trasferiti solo i **blocchi di dati modificati** a ogni ciclo. +Il servizio utilizza una modalità di backup **incrementale**. Questa modalità indirizza un **Backup Repository** (l'archiviazione S3 remota) e non esporta mai un backup completo dopo il primo: vengono trasferiti solo i **blocchi di dati modificati** ad ogni ciclo. -:::info[Backup incrementale vs Replica] -Il **backup incrementale** punta a un repository S3 remoto ed è ottimizzato per la **protezione a lungo termine**. Non deve essere confuso con la **replica** (Disaster Recovery a caldo) che punta a un Storage Repository locale — questa modalità è coperta dalla funzionalità di [replica delle macchine virtuali](#replica-delle-macchine-virtuali). +:::info[Backup incrementale vs Replicazione] +Il **backup incrementale** punta a un archivio S3 remoto ed è ottimizzato per la **protezione a lungo termine**. Non deve essere confusa con la **replicazione** (Disaster Recovery in caldo) che punta a un Storage Repository locale — questa modalità è coperta dalla funzionalità di [replicazione di macchine virtuali](#réplication-de-machines-virtuelles). ::: #### Ciclo di vita tecnico di un backup incrementale -**1. Creazione dello snapshot locale (Sorgente)** +Ecco le fasi successive attivate ad ogni esecuzione di un job di backup: -All'avvio del job, l'orchestratore richiede all'ipervisore di creare uno snapshot della VM. Questo snapshot serve come punto di confronto per calcolare il delta rispetto allo snapshot di riferimento precedente. +**1. Creazione dello snapshot locale (Source)** + +All'avvio del job, l'orchestratore richiede all'iperviseur di creare uno snapshot della VM. Questo snapshot funge da punto di riferimento per calcolare il delta rispetto allo snapshot di riferimento precedente. **2. Esportazione differenziale tramite Changed Block Tracking (CBT)** -L'orchestratore confronta il nuovo snapshot con lo snapshot di riferimento precedente usando i metadati CBT. Vengono estratti solo i blocchi di dati cambiati dall'ultimo backup. +L'orchestratore confronta il nuovo snapshot con lo snapshot di riferimento precedente tramite le metadati CBT. Vengono estratti solo i blocchi di dati modificati dall'ultimo backup — non l'intero disco. -**3. Cifratura e trasferimento verso S3** +**3. Crittografia e trasferimento verso S3** -I blocchi modificati vengono **cifrati al volo dall'orchestratore** e poi inviati tramite HTTPS/TLS 1.3 al bucket S3 remoto. +I blocchi modificati vengono **crittografati al volo dall'orchestratore** e inviati tramite HTTPS/TLS 1.3 al bucket S3 remoto. **4. Rotazione degli snapshot (Coalesce)** -Una volta validato il trasferimento, il vecchio snapshot di riferimento viene eliminato e il nuovo snapshot diventa il riferimento per il ciclo successivo. L'ipervisore avvia quindi un processo di **coalesce** (fusione). +Una volta validato il trasferimento, lo snapshot di riferimento precedente viene eliminato e il nuovo snapshot diventa il riferimento per il ciclo successivo. L'iperviseur attiva quindi un processo di **coalesce** (fusion) per reintegrare i dati del vecchio delta nella catena di dischi virtuali. :::warning[Impatto I/O del Coalesce] -L'operazione di coalesce è **intensiva in I/O** sullo storage di produzione. Viene attivata automaticamente dopo ogni backup riuscito. Si raccomanda di pianificare le finestre di backup durante i periodi di basso carico applicativo. +L'operazione di coalesce è **intensiva in I/O** sullo storage di produzione. Viene attivata automaticamente dopo ogni backup riuscito. Si consiglia di pianificare le finestre di backup durante i periodi di basso carico applicativo. ::: -**5. Gestione della conservazione su S3 (Merge) e Key Backup Interval** +**5. Gestione della retention su S3 (Merge) e Key Backup Interval** + +Sullo storage S3, l'orchestratore gestisce la rotazione dei backup tramite **fusione** (*merge*) dei vecchi delta nel backup completo più vecchio conservato in base alla politica di retention. -Sullo storage S3, l'orchestratore gestisce la rotazione dei backup fondendo i vecchi delta. Un backup completo viene **forzato periodicamente** (tipicamente ogni 20 incrementi — *Key Backup Interval*). +Per garantire l'integrità della catena di backup, un backup completo viene **forzato periodicamente** (tipicamente ogni 20 incrementi — *Key Backup Interval*). Questo crea un nuovo punto di partenza pulito e limita l'impatto di un'eventuale corruzione di un anello della catena. --- ### Impatto sul dimensionamento dello storage di produzione :::warning[Punto di attenzione critico — Storage a blocchi (Thick provisioning)] -L'offerta OpenIaaS si basa su storage a blocchi ad alte prestazioni (Fibre Channel / LVM). Gli snapshot vengono provisionati in modalità **Thick**: ogni snapshot consuma sul Storage Repository (SR) la **dimensione nominale completa del disco della VM**, non solo il delta reale. +L'offerta OpenIaaS si basa su storage a blocchi ad alte prestazioni (Fibre Channel / LVM). Gli snapshot utilizzati dal backup incrementale sono provisionati in modalità **Thick** : ogni snapshot consuma sul Storage Repository (SR) la **dimensione nominale completa del disco della VM**, e non solo il delta reale. -**Esempio di consumo per una VM con un disco da 50 GB:** +**Esempio di consumo per una VM con un disco da 50 Go :** | Elemento | Consumo sul SR | |---|---| -| Disco VM attivo | 50 GB | -| Snapshot di riferimento permanente | 50 GB | -| Snapshot temporaneo durante l'esportazione | 50 GB | -| **Totale richiesto durante la finestra di backup** | **fino a 150 GB** | +| Disco VM attivo | 50 Go | +| Snapshot di riferimento permanente (per il calcolo del delta) | 50 Go | +| Snapshot temporaneo creato durante l'export | 50 Go | +| **Totale richiesto durante la finestra di backup** | **fino a 150 Go** | -**Regola di dimensionamento raccomandata**: prevedere **almeno il 50% di spazio libero** sullo storage di produzione. +**Regola di dimensionamento consigliata** : prevedere **al minimo il 50% di spazio libero** sullo storage di produzione rispetto al volume totale delle VM backuppate, per supportare questo sovraccarico intrinseco allo storage a blocchi ad alte prestazioni. ::: --- -### Sicurezza e cifratura dei backup +### Sicurezza e crittografia dei backup + +#### Crittografia in transito -#### Cifratura in transito +Tutte le comunicazioni tra l'orchestratore di backup e lo storage S3 sono crittografate tramite **HTTPS / TLS 1.3**. -Tutte le comunicazioni tra l'orchestratore di backup e lo storage S3 sono cifrate tramite **HTTPS / TLS 1.3**. +#### Crittografia a riposo (At Rest) e gestione delle chiavi -#### Cifratura a riposo e gestione delle chiavi +La crittografia viene applicata dall'orchestratore di backup, **prima** dell'invio dei dati verso S3. | Parametro | Valore | |---|---| | **Algoritmo** | AES-256 o ChaCha20-Poly1305 | -| **Generazione della chiave** | Automatica al momento del deployment dell'orchestratore di backup | -| **Archiviazione della chiave** | Vault centralizzato di Cloud Temple (mai esposto nell'interfaccia cliente) | -| **Resilienza** | In caso di perdita dell'orchestratore, la chiave viene reiniettata dal Vault | +| **Generazione della chiave** | Automatica al deployment dell'orchestratore di backup | +| **Archiviazione della chiave** | Vault centralizzato Cloud Temple (mai esposto nell'interfaccia client) | +| **Resilienza** | In caso di perdita dell'orchestratore, la chiave viene reiniettata dal Vault per ripristinare il servizio | #### Isolamento di rete (architettura SecNumCloud) -- **Separazione fisica**: le reti *Cliente*, *Amministrazione* e *Backup* si basano su backbone fisici distinti e contesti di routing (VRF) separati. -- **Impossibilità di infezione laterale**: una VM compromessa non può raggiungere lo storage S3 né l'orchestratore di backup. +L'infrastruttura di backup è progettata per essere **completamente isolata** rispetto agli ambienti client : + +- **Separazione fisica** : le reti *Client*, *Amministrazione* e *Backup* si basano su backbone fisici distinti e contesti di routing (VRF) separati. +- **Impossibilità di infezione laterale** : una VM compromessa non può raggiungere lo storage S3 né l'orchestratore di backup — non esiste alcun percorso di rete tra di essi. S3 non viene mai « montato » nella VM. #### Amministrazione sicura +L'amministrazione della piattaforma di backup è **riservata ai team Backup di Cloud Temple** ed è soggetta ai requisiti SecNumCloud: + | Controllo | Misura | |---|---| -| **Bastion di accesso** | Passaggio obbligatorio attraverso un bastion di amministrazione interno protetto (Ubuntu Hardened) | -| **Postazione di lavoro** | Accesso solo da laptop di amministrazione dedicati e protetti | -| **Autenticazione** | MFA obbligatorio tramite una directory LDAP di amministrazione dedicata | +| **Bastion di accesso** | Passaggio obbligatorio tramite un bastion di amministrazione interno hardeningizzato (Ubuntu Hardened) | +| **Postazione di lavoro** | Accesso consentito esclusivamente da laptop di amministrazione dedicati e sicuri | +| **Autenticazione** | MFA obbligatoria tramite un annuario LDAP di amministrazione dedicato (distinto dal LDAP per ufficio) | --- ### Monitoraggio e audit -- **Log di backup**: visibili dal cliente direttamente nella Console Cloud Temple — stato (successo/errore), volumetria, timestamp. -- **Log di accesso degli amministratori**: gli accessi all'infrastruttura di backup vengono registrati e **verificati mensilmente**. -- **Test di intrusione (PASSI)**: pentest regolari da fornitori qualificati PASSI. -- **Sicurezza fisica**: tutti i dispositivi ospitati nelle zone SecNumCloud (gabbie fisiche dedicate con controllo accessi biometrico). +- **Log di backup** : visibili dal cliente direttamente nella Console Cloud Temple — stato (successo/errore), volumetria, timestamp. +- **Log di accesso amministratore** : gli accessi alle infrastrutture di backup (orchestratore, S3) sono registrati e **sottoposti ad audit mensilmente** per rilevare eventuali anomalie. +- **Test di intrusione (Pentest PASSI)** : l'infrastruttura è oggetto di pentest regolari da parte di fornitori qualificati PASSI nell'ambito del mantenimento della qualifica SecNumCloud. +- **Sicurezza fisica** : tutte le apparecchiature sono ospitate nelle zone SecNumCloud (gabbie fisiche dedicate con controllo accessi biometrico) dei datacenter Cloud Temple. --- ### Compatibilità e casi particolari -:::warning[VM con scritture su disco continue] -Alcune macchine virtuali non sono compatibili con questa tecnologia di backup quando i loro **carichi di scrittura su disco sono costanti** (database attivi, log transazionali, ecc.). L'ipervisore non riesce a finalizzare lo snapshot senza congelare la VM, il che può durare diverse ore. +:::warning[VMs con scritture disco continue] +Alcune macchine virtuali non sono compatibili con questa tecnologia di backup quando i loro **carichi di scrittura su disco sono costanti** (database attivi, log transazionali, ecc.). L'iperviseur non può quindi completare l'istantanea senza congelare la VM, operazione che può durare diverse ore. -Per questi carichi di lavoro, si raccomanda di **completare o sostituire il backup dell'ipervisore con un backup applicativo**: dump del database (pg_dump, mysqldump…), backup tramite agente o esportazione nativa dell'applicazione. +Per questi carichi di lavoro, consigliamo di **completare o sostituire il backup a livello di iperviseur con un backup applicativo**: dump del database (pg_dump, mysqldump...), backup tramite agent, o esportazione nativa dell'applicazione. ::: --- @@ -276,200 +292,202 @@ La creazione di una politica di backup è un'operazione di amministrazione esegu La richiesta deve specificare: -- Il nome della propria Organizzazione -- I dati di contatto (email e telefono) per completare la configurazione +- Il nome della vostra Organizzazione +- I dati di contatto (email et téléphone) di un referente per completare la configurazione - Il nome del tenant - Il nome della politica di backup -- Caratteristiche desiderate: frequenza, conservazione (x giorni, y settimane, z mesi…) +- Le caratteristiche desiderate: frequenza, conservazione (x jours, y semaines, z mois…) #### Vincoli di pianificazione | Vincolo | Valore | |---|---| | **Intervallo minimo tra due esecuzioni** | 24 ore | -| **Conservazione massima** | 24 mesi | -| **Esecuzioni simultanee per politica** | 1 alla volta | +| **Ritenzione massima** | 24 mesi | +| **Esecuzioni simultanee per policy** | 1 sola alla volta | -:::warning[Una politica può essere eseguita solo una volta alla volta] -Ogni politica di backup è a **istanza singola**: può essere attiva una sola esecuzione alla volta. +:::warning[Una policy può essere eseguita una sola volta alla volta] +Ogni policy di backup è **mono-istanza** : una sola esecuzione può essere attiva contemporaneamente. -**Conseguenza pratica**: se si aggiungono molte macchine virtuali a una politica esistente e il backup del giorno precedente non è ancora terminato quando scatta il trigger pianificato successivo, **il nuovo ciclo non partirà** — verrà saltato fino alla prossima occorrenza. +**Conseguenza pratica** : se si aggiungono molte macchine virtuali a una policy esistente e il backup della notte precedente non è ancora terminato al momento dell'avvio pianificato, **il nuovo ciclo non partirà** — verrà ignorato fino alla prossima occorrenza. -Per evitarlo: controllare i tempi di esecuzione nei log della Console, regolare la frequenza o la dimensione della politica, oppure distribuire le VM su più politiche con orari sfalsati. +Per evitare questo scenario : +- verificare le **durate di esecuzione** dei propri job dai log della Console Cloud Temple, +- regolare la **frequenza** o le **dimensioni della policy** se i backup si sovrappongono regolarmente alla finestra successiva, +- valutare di **distribuire le VM su più policy** con orari sfalsati per i grandi perimetri. ::: -:::info[Conservazione a lungo termine — disponibilità futura] -**La conservazione massima è attualmente di 24 mesi.** Una conservazione a lungo termine (fino a 10 anni) sarà integrata con il lancio del nostro prodotto **Glacier**, previsto per il **primo trimestre 2027**, come sottoscrizione complementare. +:::info[Ritenzione a lungo termine — disponibilità futura] +**La ritenzione massima è attualmente di 24 mesi.** Una ritenzione a lungo termine (fino a 10 anni) sarà integrata con il lancio del nostro prodotto **Glacier**, previsto per il **primo trimestre 2027**, sotto forma di abbonamento aggiuntivo. -Per durate di conservazione così lunghe, raccomandiamo di salvare **esclusivamente file piatti** e **dump di database**. Il ripristino di un server completo dopo 10 anni comporta rischi significativi di obsolescenza. +Per durate di ritenzione così lunghe, consigliamo di eseguire il backup **esclusivamente di file piatti** (file grezzi, documenti statici) nonché di **dump di database**. Il ripristino di un server completo dopo 10 anni comporta infatti rischi significativi : molti servizi o dipendenze potrebbero essere diventati obsoleti o incompatibili con l'ambiente attuale. -**Alternativa disponibile ora**: il servizio di **backup tramite agente**, disponibile come sottoscrizione complementare. Contattate il supporto per ulteriori informazioni. +**Alternativa disponibile da subito** : il servizio di **backup tramite agent**, disponibile in abbonamento aggiuntivo. Contattare il supporto per ulteriori informazioni. ::: -## Macchine virtuali +## Le macchine virtuali ### Gestione delle risorse vCPU -Le modifiche alle risorse vCPU vengono effettuate a freddo (macchina spenta). La piattaforma supporta fino a 254 vCPU per macchina virtuale (limite teorico), con test conclusivi effettuati su VM Linux dotate di 128 vCPU. +Le modifiche alle risorse vCPU vengono effettuate a freddo (macchina spenta). La piattaforma supporta fino a 254 vCPU per macchina virtuale (limite teorico), con test positivi eseguiti su VM Linux dotate di 128 vCPU. -È importante notare che il supporto del sistema operativo ospite rappresenta un fattore determinante nell'allocazione delle risorse. Un'allocazione che supera i limiti supportati dal sistema operativo può causare problemi significativi di prestazioni. +È importante notare che il supporto del sistema operativo guest costituisce un fattore determinante durante l'allocazione delle risorse. Un'allocazione che supera i limiti supportati dal sistema operativo può causare problemi di prestazioni significativi. ### Gestione delle risorse di memoria -Le modifiche alla memoria vengono effettuate anche a freddo. I limiti sono i seguenti: +Le modifiche alla memoria avvengono anche a freddo. I limiti sono i seguenti: -- 1,5 TiB con supporto per i snapshot della memoria -- 8 TiB senza supporto per i snapshot della memoria -- 16 TiB (limite teorico senza supporto di sicurezza, meno la RAM allocata a Xen e al dominio di controllo) +- 1,5 TiB con supporto per gli snapshot di memoria +- 8 TiB senza supporto per gli snapshot di memoria +- 16 TiB (limite teorico senza supporto di sicurezza, meno la RAM assegnata a Xen e al dominio di controllo) -La memoria effettivamente utilizzabile può essere limitata dal sistema operativo ospite. Superare i limiti supportati dall'OS ospite può causare una riduzione delle prestazioni. +La memoria effettivamente utilizzabile può essere limitata dal sistema operativo guest. Superare i limiti supportati dall'OS guest può causare un calo delle prestazioni. ### Gestione dei dischi -- La dimensione massima di un disco è di 2 To +- La dimensione massima di un disco è di 2 TB - I dischi utilizzano il formato VHD standard -- Il numero massimo di dischi virtuali per macchina virtuale, inclusi i lettori CD-ROM, è di 24 +- Il numero massimo di dischi virtuali per macchina virtuale, inclusi i lettori CD-ROM, è 24 -Non è possibile ridimensionare i dischi una volta creati. Per aumentare la capacità di archiviazione, è necessario creare un nuovo disco. +Non è possibile ridimensionare i dischi una volta creati. Per estendere la capacità di archiviazione, è necessario creare un nuovo disco. ### Strumenti per le macchine virtuali -Questi strumenti sono utilizzati per garantire un funzionamento ottimale delle macchine virtuali. Quando si desidera eseguire un'azione e uno di questi strumenti è necessario, un messaggio verrà visualizzato sulla console Cloud Temple. - -Per installare questi strumenti, è possibile consultare i siti ufficiali di Xen Server per ottenere una procedura precisa in base al proprio sistema operativo. +Questi strumenti sono utilizzati per garantire un funzionamento ottimale delle macchine virtuali. Quando si desidera eseguire un'azione e uno di questi strumenti è necessario, verrà visualizzato un messaggio sulla console Cloud Temple. +Per installare questi strumenti, è possibile consultare i siti ufficiali di Xen Server per ottenere una procedura dettagliata in base al proprio sistema operativo. #### Management Agent -Il Management Agent è un componente installato in ogni macchina virtuale. Permet all'ipervisore di gestire meglio la macchina grazie all'accesso a maggiori informazioni e consente di eseguire alcune azioni in modo più pulito. +Il Management Agent è un componente installato in ogni macchina virtuale. Consente all'iperviseur di gestire meglio la macchina disponendo di maggiori informazioni e permette di eseguire determinate operazioni in modo più efficiente. -#### PV Drivers (Drivers di paravirtualizzazione) +#### Driver PV (Driver di paravirtualizzazione) -I driver PV sono driver installati nella macchina virtuale per migliorarne le prestazioni. -Senza questi driver, la macchina funziona, ma in modo più lento. Inoltre, consentono alcune operazioni avanzate. -I driver PV sono installati nativamente nella maggior parte dei kernel Linux attuali. +I driver PV sono driver installati nella macchina virtuale per migliorarne le prestazioni. +Senza questi driver, la macchina funziona, ma più lentamente. Inoltre, consentono alcune operazioni avanzate. +I driver PV sono installati nativamente sulla maggior parte dei kernel Linux attuali. -#### Tools +#### Strumenti I Tools sono un insieme di componenti software che migliorano l'integrazione della macchina virtuale con l'infrastruttura di virtualizzazione. -## Catalogs +## Cataloghi -The catalog allows you to manage three essential types of items: +Il catalogo consente di gestire tre tipi di elementi essenziali: -- Disk images (ISO) -- Configuration templates -- Pre-installed virtual machine templates +- Le immagini disco (ISO) +- I template di configurazione +- I template preinstallati di macchine virtuali -In the detailed view of a virtual machine template, you can review crucial information such as location, number of disks, and number of network adapters. +Nella vista dettagliata di un template di macchina virtuale, è possibile consultare informazioni cruciali come la posizione, il numero di dischi o il numero di adattatori di rete. -When the number of virtual disks is shown as 0, this indicates a configuration template without a preinstalled operating system, allowing you to deploy your own customized environment. +Quando il numero di dischi virtuali è indicato come 0, ciò significa che si tratta di un template di configurazione senza sistema operativo preinstallato, consentendoti così di distribuire il tuo ambiente personalizzato. ## Replicazione delle macchine virtuali -La __replicazione delle macchine virtuali__ di Cloud Temple garantisce la protezione e la continuità dei tuoi dati critici grazie a una copia automatica dei tuoi ambienti verso un'area di disponibilità diversa. Questa funzionalità, integrata nativamente nell'offerta IaaS Open Source, soddisfa i requisiti più rigorosi in termini di continuità operativa e ripresa da disastro. +La __replicazione delle macchine virtuali__ di Cloud Temple garantisce la protezione e la continuità dei tuoi dati critici grazie a una copia automatizzata dei tuoi ambienti verso una zona di disponibilità separata. Questa funzionalità, integrata nativamente nel prodotto IaaS Open Source, soddisfa i requisiti più rigorosi di continuità operativa e disaster recovery. -### Protezione automatizzata e sicura +### Una protezione automatizzata e sicura -La replica Cloud Temple si basa su un'infrastruttura __qualificata SecNumCloud__, garantendo: +La replicazione Cloud Temple si basa su un'infrastruttura __qualificata SecNumCloud__, garantendo: -- __Replica asincrona__: Copia continua delle tue macchine virtuali senza impatto sulle prestazioni di produzione -- __Separazione geografica__: Archiviazione dei replica in un'area di disponibilità diversa da quella di origine -- __Automazione completa__: Processo completamente automatizzato tramite la [Console Cloud Temple](../console/console.md) -- __Conformità normativa__: Rispetto dei requisiti di backup e continuità operativa +- __Replicazione asincrona__ : Copia continua delle tue macchine virtuali senza impatto sulle prestazioni di produzione +- __Separazione geografica__ : Archiviazione delle repliche in una zona di disponibilità diversa da quella di origine +- __Automazione completa__ : Processo interamente automatizzato tramite la [Console Cloud Temple](../console/console.md) +- __Conformità normativa__ : Rispetto dei requisiti di backup e continuità operativa -### Vantaggi della replica +### Vantaggi della replicazione -| Vantaggio | Descrizione | +| Vantaggio | Descrizione | |-------------------------|------------------------------------------------------------------------------------------------------------------------------------------------| -| Continuità operativa | Protezione dei tuoi servizi critici in caso di incidente grave sul sito principale. | -| Protezione geografica | Replica verso un'area di disponibilità diversa, protetta da eventi localizzati. | -| Flessibilità temporale | Scelta dell'intervallo di replica in base alle tue esigenze: da 1 minuto a 24 ore. | -| Semplificazione della gestione | Configurazione e monitoraggio completamente integrati nella Console Cloud Temple. | -| Conformità SecNumCloud | Infrastruttura qualificata che garantisce il massimo livello di sicurezza per i tuoi dati sensibili. | +| Continuità operativa | Protezione dei servizi critici in caso di incidente maggiore sul sito principale. | +| Protezione geografica | Replicazione verso una zona di disponibilità distinta, che protegge da disastri localizzati. | +| Flessibilità temporale | Scelta dell'intervallo di replicazione in base alle proprie esigenze: da 1 minuto a 24 ore. | +| Semplicità di gestione | Configurazione e monitoraggio completamente integrati nella Console Cloud Temple. | +| Conformità SecNumCloud | Infrastruttura qualificata che garantisce il più alto livello di sicurezza per i dati sensibili. | ### Configurazione della replica -#### Politiche di replica +#### Politiche di replicazione -La creazione di una politica di replica definisce i parametri di protezione delle tue macchine virtuali: +La creazione di una politica di replicazione definisce i parametri di protezione delle tue macchine virtuali: -- __Destinazione__: selezione dell'archiviazione di destinazione nella zona di disponibilità di replica -- __Frequenza__: intervallo di replica adatto ai tuoi requisiti di recupero (RPO) -- __Ritenzione__: numero di punti di recupero conservati +- __Destinazione__ : Selezione dell'archiviazione di destinazione nella zona di disponibilità di replicazione +- __Frequenza__ : Intervallo di replicazione adattato alle tue esigenze di recupero (RPO) +- __Ritenzione__ : Numero di punti di recupero conservati #### Intervalli disponibili -| Intervallo | Utilizzo consigliato | RPO (massima perdita di dati) | +| Intervallo | Utilizzo consigliato | RPO (Perdita massima di dati) | |-------------------------|--------------------------------------------|-----------------------------| -| __1 a 59 minuti__ | Applicazioni critiche in tempo reale | < 1 ora | -| __1 a 24 ore__ | Applicazioni aziendali e ambienti standard | < 24 ore | +| __1-59 minuti__ | Applicazioni critiche in tempo reale | < 1 ora | +| __1-24 ore__ | Applicazioni aziendali e ambienti standard | < 24 ore | #### Associazione delle macchine virtuali -Dopo aver creato la politica, puoi associare le tue macchine virtuali da proteggere: +Una volta creata la policy, è possibile associare le macchine virtuali da proteggere : -- __Selezione semplice__: scelta delle VM dall'interfaccia della Console -- __Convalida automatica__: verifica della compatibilità e dei prerequisiti -- __Attivazione immediata__: avvio automatico della replica dopo la configurazione +- __Selezione semplice__ : Scelta delle VMs dall'interfaccia della Console +- __Validazione automatica__ : Verifica della compatibilità e dei prerequisiti +- __Attivazione immediata__ : Avvio automatico della replica dopo la configurazione -### Gestione dei replica +### Gestione delle repliche -#### Visualizzazione delle politiche +#### Vista delle politiche La Console Cloud Temple offre una visualizzazione centralizzata delle tue politiche di replica con: -- Nome e frequenza di ogni politica +- Nome e frequenza di ciascuna politica - Zona di disponibilità di destinazione -- Pool e archiviazione associati +- Pool e storage associati - Azioni di gestione disponibili -#### Replica View +#### Vista delle repliche -The replica table allows you to visualize: +La tabella delle repliche consente di visualizzare: -- Names of replicated virtual machines -- Source and target locations -- Associated replication policy -- Export of data in CSV format +- Nome delle macchine virtuali replicate +- Posizione di origine e destinazione +- Politica di replica associata +- Esportazione dei dati in formato CSV -### Best practices +### Buone pratiche -#### Raccomandazioni per tipo di carico +#### Raccomandazioni per tipo di carico di lavoro -- __Applicazioni critiche__: replica ogni 1-30 minuti per minimizzare la perdita di dati -- __Applicazioni aziendali__: replica oraria o bi-oraria in base alle esigenze -- __Ambienti di sviluppo__: replica giornaliera generalmente sufficiente +- __Applicazioni critiche__ : Replicazione ogni 1-30 minuti per minimizzare la perdita di dati +- __Applicazioni aziendali__ : Replicazione oraria o ogni due ore in base alle esigenze +- __Ambienti di sviluppo__ : Replicazione giornaliera generalmente sufficiente #### Pianificazione delle politiche -- Creare politiche distinte in base alla criticità delle applicazioni -- Assegnare nomi chiari alle politiche per facilitarne la gestione -- Verificare regolarmente lo stato dei replica dalla console -- Documentare la strategia di replica per i team +- Create politiche distinte in base alla criticità delle vostre applicazioni +- Assegnate nomi chiari alle politiche per facilitarne la gestione +- Verificate regolarmente lo stato delle vostre repliche dalla console +- Documentate la vostra strategia di replica per i vostri team -__Importante nota:__ +__Nota importante :__ -*La replica non sostituisce una strategia completa di backup. Rappresenta un elemento essenziale per garantire la continuità operativa in caso di incidente grave sul sito principale.* +*La replica non sostituisce una strategia di backup completa. Costituisce un complemento essenziale per garantire la continuità operativa in caso di incidente maggiore sul vostro sito principale.* ## Alta disponibilità -L'alta disponibilità consente di garantire la continuità del servizio delle macchine virtuali (VM) in caso di guasto di un host fisico all'interno di un pool OpenIaaS. -Con l'alta disponibilità (HA), ogni host del pool invia regolarmente segnali di stato ai suoi peer tramite lo storage condiviso (Block Storage Heartbeat). In caso di assenza prolungata di risposta, l'host viene considerato guasto. +L'alta disponibilità consente di garantire la continuità del servizio delle macchine virtuali (VM) in caso di guasto di un host fisico all'interno di un pool OpenIaaS. +Con l'alta disponibilità (HA), ogni host nel pool invia regolarmente segnali di vita ai propri peer tramite lo storage condiviso (Block Storage Heartbeat). In caso di assenza prolungata di risposta, l'host è considerato guasto. -Un Block Storage designato come heartbeat significa che verrà utilizzato come base per autenticare gli host che non risponderanno più. +Un Block Storage designato come heartbeat significa che fungerà da base per verificare gli host che non rispondono più. -Per configurare correttamente l'alta disponibilità in un pool OpenIaaS, è indispensabile disporre di __almeno due host__ connessi. +Affinché l'alta disponibilità sia configurata correttamente in un pool OpenIaaS, è indispensabile disporre di __almeno due host__ connessi. -Ogni VM deve essere configurata con un livello di priorità di riavvio in caso di alta disponibilità: +Ogni VM deve essere configurata con un livello di priorità di riavvio in alta disponibilità: -#### Disabled +#### Disabilitato - High availability is not configured. In the event of host failure, the virtual machine will not be restarted. + L'alta disponibilità non è configurata. In caso di guasto dell'host, la macchina virtuale non verrà riavviata. -#### Restart +#### Riavvio -In case of host failure, the virtual machine will be automatically restarted as soon as resources become available in the pool. Virtual machines configured in "restart" mode are prioritized over those configured in "best-effort" mode. + In caso di guasto dell'host, la macchina virtuale verrà riavviata automaticamente non appena saranno disponibili risorse nel pool. Le macchine virtuali configurate in modalità "riavvio" vengono gestite con priorità, prima di quelle configurate in modalità "best-effort". -#### Best-effort +#### Best-Effort -In caso di guasto dell'host, la macchina virtuale verrà riavviata automaticamente solo se delle risorse rimangono disponibili dopo il trattamento di tutte le macchine virtuali configurate in modalità "restart". La modalità "Best-effort" effettua un solo tentativo, quindi, se le risorse sono insufficienti, la macchina virtuale non verrà riavviata. + In caso di guasto dell'host, la macchina virtuale verrà riavviata automaticamente solo se rimangono risorse disponibili dopo l'elaborazione di tutte le macchine virtuali configurate in modalità "restart". La modalità "Best-effort" effettua un solo tentativo, quindi se le risorse sono insufficienti, la macchina virtuale non verrà riavviata. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/iaas_opensource.md b/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/iaas_opensource.md index af0b8457..adbf623e 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/iaas_opensource.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/iaas_opensource.md @@ -2,24 +2,24 @@ title: Panoramica --- -Il prodotto IaaS Open Source di Cloud Temple: un'alleanza unica tra prestazioni, sicurezza e trasparenza. +L'**offerta IaaS OpenSource di Cloud Temple** : un'alleanza unica tra prestazioni, sicurezza e trasparenza. -Quest'offerta garantisce un controllo totale dei vostri ambienti critici, assicurando allo stesso tempo sicurezza, continuità e conformità normativa. -Con risorse scalabili e una gestione automatizzata, beneficiate di un'infrastruttura performante e adatta alle vostre esigenze. Adottate la potenza dell'Open Source con l'affidabilità e il supporto di Cloud Temple. +Questo prodotto garantisce un controllo totale dei vostri ambienti critici, assicurando al contempo sicurezza, continuità e conformità normativa. +Grazie a risorse scalabili e a una gestione automatizzata, beneficerete di un'infrastruttura performante e adatta alle vostre esigenze. Adottate la potenza dell'Open Source con l'affidabilità e il supporto di Cloud Temple.

Concetti

-

Scoprite le basi e i principi essenziali per comprendere e padroneggiare la nostra infrastruttura.

+

Scoprite le basi e i principi essenziali per comprendere e gestire la nostra infrastruttura.

Esplora i concetti →
-

Quickstart

+

Avvio Rapido

Iniziate rapidamente con le nostre risorse seguendo istruzioni chiare e semplici.

Avvia il Quickstart →
-
-

Tutorials

+
+

Tutorial

Imparate passo dopo passo a configurare e utilizzare i nostri servizi con guide dettagliate.

Scopri i tutorial →
@@ -28,7 +28,7 @@ Con risorse scalabili e una gestione automatizzata, beneficiate di un'infrastrut ## Piattaforme di acquisto
-

Siete un operatore del settore pubblico? L'offerta IaaS Cloud Temple è accessibile via:

+

Sei un operatore del settore pubblico? Il prodotto IaaS Cloud Temple è accessibile tramite:

@@ -40,15 +40,15 @@ Con risorse scalabili e una gestione automatizzata, beneficiate di un'infrastrut
- Ulteriori informazioni → + Scopri di più → -
+
\ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/quickstart.md b/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/quickstart.md index 5f90406d..18d9e130 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/quickstart.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/quickstart.md @@ -22,206 +22,207 @@ import openIaasVmConsoleClipboard from '@site/docs/iaas_opensource/images/open_i ### Gestione delle macchine virtuali -L'interfaccia di gestione delle macchine virtuali è disponibile nella Console nel menu __'OpenIaaS'__ situato sulla barra verde a sinistra dello schermo. +L'interfaccia di gestione delle tue macchine virtuali è disponibile nella Console nel menu __'OpenIaaS'__ situato nella barra verde a sinistra dello schermo. ### Elenco delle macchine virtuali -Nella sezione __'Macchine virtuali'__, puoi accedere all'elenco delle tue macchine virtuali ospitate sul tuo Cloud di fiducia. +Nella sezione __'Macchine virtuali'__, ha accesso all'elenco delle sue macchine virtuali ospitate sul suo Cloud attendibile. -Per ogni macchina virtuale, hai accesso alle seguenti informazioni: +Ha accesso alle seguenti informazioni, per ogni macchina virtuale: -- Il nome. -- Lo stato (spenta, accesa). -- La zona di disponibilità (AZ). -- Il sistema operativo. +- Il suo nome. +- Il suo stato (spento, acceso). +- La sua zona di disponibilità (AZ). +- Il suo sistema operativo. - La quantità di CPU virtuali (vCPU). - La quantità di memoria virtuale (vRAM). ### Azioni sulle macchine virtuali -Le seguenti azioni sono disponibili da questa interfaccia: +Le seguenti azioni sono possibili da questa interfaccia: - Aggiornare l'elenco delle macchine virtuali. - Filtrare l'elenco. -- Cerca una macchina virtuale in base al nome. +- Cercare una macchina virtuale per nome. - Creare una nuova macchina virtuale. -Quando fai clic sulla freccia verde a destra della lista per una macchina virtuale, accedi a tutte le informazioni relative a tale macchina. +Quando si fa clic sulla freccia a discesa verde sulla destra dell'elenco per una macchina virtuale, si accede a tutte le informazioni relative a essa. -Un banner rapido consente di eseguire le seguenti azioni: +Una barra rapida consente di eseguire le seguenti azioni: - Accendere la macchina virtuale. -- Spegnere la macchina virtuale. -- Riavviare la macchina virtuale. +- Spegnerla. +- Riavviarla. - Aprire la console. - Montare un ISO. - Smontare un ISO. -- Convertire la macchina virtuale in un template. -- Spostare la macchina virtuale. -- Rinominare la macchina virtuale. -- Eliminare la macchina virtuale. +- Convertire la macchina virtuale in modello. +- Spostarla. +- Rinominarla. +- Eliminarla. -Nella scheda '__Generali__', trovi informazioni dettagliate sulla tua macchina virtuale, come la posizione fisica (AZ, Pool, Host), la RAM, il CPU, gli indirizzi IP e altri dati. +Nella scheda di informazione '__Generali__', si trovano informazioni dettagliate relative alla propria macchina virtuale, come la posizione fisica (AZ, Pool, Host), la RAM, la CPU, gli indirizzi IP e altro. -Una scheda '__Avanzate__' permette di consultare informazioni più specifiche: +Una scheda '__Avanzate__' consente di consultare informazioni più specifiche: - UUID della macchina virtuale - Guest tools -- Sistema operativo ospite -- Lettore DVD +- Sistema operativo guest +- Unità DVD -Nonché di modificare alcune opzioni, come: +Nonché modificare alcune opzioni quali: - Ordine di avvio -- Secure Boot +- Secure boot - Avvio automatico (impossibile se non è associata alcuna politica di backup alla VM) ### Console di una macchina virtuale -La console di una macchina virtuale è accessibile dalla lista delle macchine virtuali facendo clic sull'icona __'Console'__: +La console di una macchina virtuale è accessibile dall'elenco delle macchine virtuali facendo clic sull'icona __'Console'__ : -Si apre un nuovo tab del browser, che mostra la console della tua macchina virtuale, basata su un client VNC: +Si apre una nuova scheda del browser e viene visualizzata la console della tua macchina, basata su un client VNC : -Nel menu VNC è possibile: +Nel menu VNC è possibile : - richiedere l'invio di tasti particolari, -- forzare un mapping della tastiera (nel caso in cui la macchina virtuale abbia una disposizione della tastiera diversa da quella del tuo browser web), -- aprire un campo di testo trasmissibile alla macchina. Questo metodo sostituisce il vecchio appunti non funzionante, -- passare alla modalità schermo intero, -- modificare la dimensione della finestra (scaling). +- forzare la mappatura della tastiera (nel caso in cui la tua macchina virtuale non abbia la stessa disposizione della tastiera del tuo browser web), +- aprire un campo di testo da inviare alla macchina. Questo metodo sostituisce il vecchio sistema di appunti non funzionante, +- passare alla modalità a schermo intero, +- modificare le dimensioni della finestra (ridimensionamento). -#### Keyboard layout support +#### Supporto layout tastiera -The input entered in the console depends on the keyboard language of your web browser, the keyboard language of the virtual machine, and whether the 'enforce keyboard' option on the left side of the screen is enabled or not. -Here is a summary of the possible scenarios: +La digitazione eseguita nella console dipende dalla lingua della tastiera del browser web, dalla lingua della tastiera della macchina virtuale e dall'attivazione o meno dell'opzione 'enforce keyboard' a sinistra dello schermo. +Di seguito una sintesi delle possibili situazioni: -| Physical machine keyboard language (input) | Virtual machine keyboard language | 'Enforce keyboard' option selected | Result (output) | -| ------------------------------------------ | --------------------------------- | ---------------------------------- | ---------------------- | -| French | French | No | ✅ | -| French | French | Yes | Not recommended | -| French | English | No | English | -| French | English | Yes | ✅ | -| English | French | No | French | -| English | French | Yes | ✅ | -| English | English | No | ✅ | -| English | English | Yes | Not recommended | +| Lingua tastiera macchina fisica (input) | Lingua tastiera macchina virtuale | Opzione 'enforce keyboard' selezionata | Risultato (output) | +| ------------------------------------------------- | ----------------------------------------- | -------------------------------------- | ------------------------ | +| Francese | Francese | No | ✅ | +| Francese | Francese | Sì | Non consigliato | +| Francese | Inglese | No | Inglese | +| Francese | Inglese | Sì | ✅ | +| Inglese | Francese | No | Francese | +| Inglese | Francese | Sì | ✅ | +| Inglese | Inglese | No | ✅ | +| Inglese | Inglese | Sì | Non consigliato | -__Note__: +__Nota__ : -- If certain characters do not appear during manual input, you can try using the clipboard. +- Se alcuni caratteri non vengono immessi manualmente, puoi provare tramite gli appunti. #### Funzionamento degli appunti -Questa funzionalità ti permette di inviare una stringa di caratteri completa alla tua macchina virtuale. È importante notare che il pulsante "enforce keyboard" influisce sul modo in cui questa stringa di caratteri verrà trasmessa alla tua macchina virtuale. Se durante l'inserimento nella console riscontri che l'opzione "enforce keyboard" è necessaria, assicurati di attivarla prima di utilizzare la funzione degli appunti. -Questa funzionalità può essere utilizzata per inviare una password, un comando o il contenuto di un file di configurazione, ad esempio: +Questa funzionalità ti permette di inviare una stringa di caratteri completa alla tua macchina virtuale. È importante notare che il tasto "enforce keyboard" influenza il modo in cui questa stringa di caratteri +verrà trasmessa alla tua macchina virtuale. Se durante la digitazione nella console riscontri che l'opzione "enforce keyboard" è necessaria, ricordati di attivarla prima di utilizzare gli appunti. +Questa funzionalità può essere utilizzata per l'invio di una password, di un comando o del contenuto di un file di configurazione, ad esempio: -Al clic sul pulsante "Incolla", il contenuto del campo di testo viene inviato alla tua macchina virtuale. +Al clic sul pulsante "Paste", il contenuto del tuo campo di testo viene inviato alla tua macchina virtuale. -## Replica +## Replicazione -### Accesso alla gestione della replica +### Accesso alla gestione della replicazione -L'interfaccia di gestione della replica è disponibile nella Console nel menu __'OpenIaaS'__ > __'Replica'__, situato nella barra verde a sinistra dello schermo. +L'interfaccia di gestione della replicazione è disponibile nella Console nel menu __'OpenIaaS'__ > __'Replicazione'__ situato nella barra verde a sinistra dello schermo. -### Creazione di una politica di replica +### Creazione di una politica di replicazione -Nella sezione __'Replica'__, è possibile creare politiche che definiscono i parametri di protezione delle proprie macchine virtuali. +Nella sezione __'Replicazione'__, è possibile creare politiche che definiscono i parametri di protezione delle macchine virtuali. -Per creare una nuova politica, fare clic sul pulsante __'Aggiungi una politica'__. Si aprirà un modulo con le seguenti fasi: +Per creare una nuova politica, fai clic sul pulsante __'Aggiungi politica'__. Si apre un modulo con i passaggi seguenti: -#### Step 1: General Information +#### Passo 1 : Informazioni generali -- __Name__ : Provide an explicit name for your policy -- __Frequency__ : Select the replication interval (1-59 minutes or 1-24 hours) +- __Nome__ : Assegna un nome esplicito alla tua politica +- __Frequenza__ : Seleziona l'intervallo di replica (1-59 minuti o 1-24 ore) -#### Step 2: Storage Selection +#### Fase 2: Selezione dello storage -- __Availability Zone__: Select the destination zone -- __Pool__: Choose the resource pool -- __Block Storage__: Select the destination storage +- __Zona di disponibilità__ : Seleziona la zona di destinazione +- __Pool__ : Scegli il pool di risorse +- __Block Storage__ : Seleziona lo storage di destinazione -#### Passo 3: Convalida +#### Fase 3: Validazione -Verifica le impostazioni e fai clic su __'Aggiungi'__ per creare la politica. +Verificare i parametri e fare clic su __'Aggiungi'__ per creare la policy. ### Associazione di una VM alla replica -Per proteggere una macchina virtuale, accedi ai dettagli della tua VM dalla lista delle macchine virtuali. +Per proteggere una macchina virtuale, accedi ai dettagli della tua VM dall'elenco delle macchine virtuali. -Nella vista dettagliata della VM, troverai una sezione __'Replica'__: +Nella vista dettagliata della VM, troverai una sezione __'Replica'__ : -Passaggi per associare una VM alla replica: +I passaggi per associare una VM alla replica : -1. Clicca su __'Configura una politica'__ -2. Seleziona la politica di replica desiderata dall'elenco a discesa +1. Clicca su __'Configura una policy'__ +2. Seleziona la policy di replica desiderata dall'elenco a discesa 3. Conferma la tua scelta -La replica verrà avviata automaticamente dopo la conferma. +La replica viene avviata automaticamente dopo la conferma. -### Gestione delle politiche e dei replica +### Gestione delle politiche e repliche -#### Visualizzazione delle politiche +#### Vista delle politiche -L'opzione __'Politiche'__ ti permette di visualizzare tutte le tue politiche di replica: +La scheda __'Politiche'__ consente di visualizzare tutte le proprie politiche di replicazione: -Per ogni politica hai accesso alle seguenti informazioni: +Sono disponibili le seguenti informazioni per ogni politica: -- Il nome della politica -- La frequenza di replica +- Il nome +- La frequenza di replicazione - La zona di disponibilità di destinazione - Il pool associato - Lo storage a blocchi utilizzato Le azioni disponibili includono: -- Visualizzare i dettagli di ciascuna politica -- Modificare i parametri +- Visualizzare i dettagli di ogni politica +- Modificare le impostazioni - Eliminare una politica non utilizzata -#### Vista dei repliche +#### Vista delle repliche -Il tab __'Repliche'__ mostra tutte le macchine virtuali in corso di replica: +La scheda __'Repliche'__ visualizza tutte le macchine virtuali in fase di replica: È possibile visualizzare: - Il nome delle macchine virtuali replicate -- Il percorso di origine e destinazione +- La posizione di origine e destinazione - La politica di replica associata Le azioni disponibili includono: -- Esportazione dei dati nel formato CSV -- Consultazione dei dettagli di replica -- Gestione delle repliche per politica +- Esportazione dei dati in formato CSV +- Visualizzazione dei dettagli di replica +- Gestione delle repliche per politica \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/create_vm.md b/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/create_vm.md index 9d25c412..7861297f 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/create_vm.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/create_vm.md @@ -1,217 +1,217 @@ --- -title: Créer une machine virtuelle +title: Creare una macchina virtuale --- -Ce tutoriel vous guide à travers les différentes méthodes de création d'une machine virtuelle dans votre environnement OpenIaaS. +Questo tutorial ti guida attraverso i diversi metodi di creazione di una macchina virtuale nel tuo ambiente OpenIaaS. -## Introduction +## Introduzione -La Console Cloud Temple vous propose **trois méthodes** pour créer une machine virtuelle OpenIaaS : +La Console Cloud Temple propone **tre metodi** per creare una macchina virtuale OpenIaaS : -1. **Depuis un Modèle** : Déploiement rapide à partir d'un modèle préconfiguré -2. **Import XVA** : Import d'une machine virtuelle depuis un fichier XVA -3. **Depuis le Marketplace** : Déploiement d'une image certifiée du catalogue Cloud Temple +1. **Da un Modello** : Distribuzione rapida da un modello preconfigurato +2. **Import XVA** : Importazione di una macchina virtuale da un file XVA +3. **Dal Marketplace** : Distribuzione di un'immagine certificata dal catalogo Cloud Temple -## Prérequis +## Prerequisiti -- Disposer d'un environnement OpenIaaS configuré -- Avoir les permissions nécessaires pour créer des machines virtuelles -- Pour le mode XVA : disposer d'un fichier XVA valide -- Pour le mode Marketplace : avoir accès au catalogue Marketplace +- Disporre di un ambiente OpenIaaS configurato +- Avere le autorizzazioni necessarie per creare macchine virtuali +- Per la modalità XVA: disporre di un file XVA valido +- Per la modalità Marketplace: avere accesso al catalogo Marketplace -## Accès à la création +## Accesso alla creazione -Depuis le menu **OpenIaaS** > **Machines Virtuelles**, cliquez sur le bouton **Nouvelle machine virtuelle**. +Dal menu **OpenIaaS** > **Macchine Virtuali**, fai clic sul pulsante **Nuova macchina virtuale**. -Une fenêtre s'ouvre vous présentant les trois méthodes de déploiement disponibles. Sélectionnez la méthode souhaitée pour continuer. +Si apre una finestra che mostra i tre metodi di distribuzione disponibili. Seleziona il metodo desiderato per continuare. --- -## Méthode 1 : Déploiement depuis un Modèle +## Metodo 1: Distribuzione da un modello -Cette méthode permet de créer rapidement une machine virtuelle à partir d'un modèle préconfiguré. +Questo metodo consente di creare rapidamente una macchina virtuale a partire da un modello preconfigurato. -### Étape 1 : Sélection du Pool et du Modèle +### Fase 1: Selezione del Pool e del Modello -Sélectionnez d'abord le **Pool** (zone de disponibilité) où vous souhaitez déployer votre machine virtuelle, puis choisissez le **Modèle** à utiliser comme base. +Seleziona innanzitutto il **Pool** (zone de disponibilité) in cui desideri distribuire la tua macchina virtuale, quindi scegli il **Modello** da utilizzare come base. -### Étape 2 : Informations générales +### Passo 2: Informazioni generali -Configurez les paramètres de base de votre machine virtuelle : +Configura i parametri di base della tua macchina virtuale: -- **Nom** : Nom unique de la machine virtuelle (caractères alphanumériques, tirets, underscores, points et espaces autorisés) -- **CPU** : Nombre de cœurs virtuels (minimum 1) -- **RAM** : Quantité de mémoire avec sélection de l'unité (Mo, Go, To) +- **Nome** : Nome univoco della macchina virtuale (caratteri alfanumerici, trattini, underscore, punti e spazi consentiti) +- **CPU** : Numero di core virtuali (minimo 1) +- **RAM** : Quantità di memoria con selezione dell'unità (MB, GB, TB) -### Étape 3 : Cloud Init (optionnel) +### Fase 3 : Cloud Init (opzionale) -Cloud Init permet d'automatiser la configuration initiale de votre machine virtuelle au premier démarrage. +Cloud Init consente di automatizzare la configurazione iniziale della tua macchina virtuale al primo avvio. -Vous pouvez configurer : +Puoi configurare: -- **Cloud Config** : Configuration générale (hostname, utilisateurs, packages, etc.) -- **Network Config** : Configuration réseau au format Netplan v2 -- **Destroy After Boot** : Option pour supprimer la configuration Cloud Init après le premier démarrage +- **Cloud Config** : Configurazione generale (hostname, utenti, pacchetti, ecc.) +- **Network Config** : Configurazione di rete in formato Netplan v2 +- **Destroy After Boot** : Opzione per eliminare la configurazione Cloud Init dopo il primo avvio :::info -Cette étape est entièrement optionnelle. Si vous n'avez pas besoin de Cloud Init, laissez les champs par défaut et passez à l'étape suivante. +Questo passaggio è completamente opzionale. Se non hai bisogno di Cloud Init, lascia i campi predefiniti e passa al passaggio successivo. ::: -### Étape 4 : Configuration des disques +### Fase 4 : Configurazione dei dischi -Gérez les disques virtuels de votre machine virtuelle. Les disques du modèle sont automatiquement ajoutés et ne peuvent pas être supprimés. +Gestisci i dischi virtuali della tua macchina virtuale. I dischi del modello vengono aggiunti automaticamente e non possono essere eliminati. -Pour chaque disque, configurez : +Per ogni disco, configura : -- **Nom** : Nom unique du disque -- **Capacité** : Taille du disque avec sélection de l'unité (Mo, Go, To) -- **Block Storage** : Stockage de destination +- **Nome** : Nome univoco del disco +- **Capacità** : Dimensione del disco con selezione dell'unità (MB, GB, TB) +- **Block Storage** : Archiviazione di destinazione -Vous pouvez ajouter jusqu'à 24 disques virtuels au total. Cliquez sur **Ajouter un disque** pour créer un nouveau disque. +È possibile aggiungere fino a 24 dischi virtuali in totale. Fai clic su **Aggiungi un disco** per creare un nuovo disco. :::warning -Si vous configurez Cloud Init, au moins un disque est obligatoire pour stocker la configuration. +Se configuri Cloud Init, è obbligatorio almeno un disco per memorizzare la configurazione. ::: -### Étape 5 : Configuration des adaptateurs réseau +### Passo 5: Configurazione degli adattatori di rete -Configurez les interfaces réseau de votre machine virtuelle (maximum 7 adaptateurs). +Configura le interfacce di rete della tua macchina virtuale (massimo 7 adattatori). -Pour chaque adaptateur réseau : +Per ogni adattatore di rete : -- **Réseau** : Sélectionnez le réseau virtuel (avec indication VPC ou Private Backbone) -- **Adresse MAC** : Optionnelle, générée automatiquement si non spécifiée +- **Rete** : Seleziona la rete virtuale (con indicazione VPC o Private Backbone) +- **Indirizzo MAC** : Opzionale, generato automaticamente se non specificato :::info[VPC] -La configuration des réseaux VPC n'est disponible que depuis l'onglet Réseau de la machine virtuelle une fois l'opération terminée. La configuration depuis ce formulaire sera disponible prochainement. +La configurazione delle reti VPC è disponibile solo dalla scheda Rete della macchina virtuale una volta terminata l'operazione. La configurazione da questo modulo sarà disponibile a breve. ::: -Cliquez sur **Ajouter un adaptateur réseau** pour créer une nouvelle interface. +Fai clic su **Aggiungi adattatore di rete** per creare una nuova interfaccia. -### Étape 6 : Haute disponibilité +### Passaggio 6 : Alta disponibilità -Configurez le niveau de haute disponibilité de votre machine virtuelle. +Configura il livello di alta disponibilità della tua macchina virtuale. :::tip -Pour plus d'informations sur la configuration de la haute disponibilité et les différents modes disponibles, consultez le guide dédié : [Gestion de la haute disponibilité d'une machine virtuelle](./high_availability/manage_vm) +Per ulteriori informazioni sulla configurazione dell'alta disponibilità e sulle diverse modalità disponibili, consulta la guida dedicata: [Gestione dell'alta disponibilità di una macchina virtuale](./high_availability/manage_vm) ::: -### Étape 7 : Résumé et validation +### Fase 7: Riepilogo e convalida -Vérifiez l'ensemble de votre configuration avant de créer la machine virtuelle. +Verificare l'intera configurazione prima di creare la macchina virtuale. -Le résumé affiche tous les paramètres configurés : +Il riepilogo visualizza tutti i parametri configurati: -- Informations générales (nom, CPU, RAM) -- Modèle sélectionné -- Cloud Init (si configuré) -- Disques -- Adaptateurs réseau -- Haute disponibilité +- Informazioni generali (nome, CPU, RAM) +- Modello selezionato +- Cloud Init (se configurato) +- Dischi +- Adattatori di rete +- Alta disponibilità -Cliquez sur **Créer** pour lancer le déploiement de votre machine virtuelle. +Fare clic su **Crea** per avviare la distribuzione della macchina virtuale. --- -## Méthode 2 : Import depuis un fichier XVA +## Metodo 2: Importazione da un file XVA -Cette méthode permet d'importer une machine virtuelle depuis un fichier au format XVA (XenServer Virtual Appliance). +Questo metodo consente di importare una macchina virtuale da un file in formato XVA (XenServer Virtual Appliance). -### Présentation du format XVA +### Presentazione del formato XVA -Le format XVA est le format d'export/import natif de XCP-ng et XenServer. Il contient une machine virtuelle complète avec ses disques et sa configuration. +Il formato XVA è il formato di esportazione/importazione nativo di XCP-ng e XenServer. Contiene una macchina virtuale completa con i suoi dischi e la sua configurazione. -### Étape 1 : Nom de la machine virtuelle +### Passo 1: Nome della macchina virtuale -Définissez le nom de votre machine virtuelle. +Definisci il nome della tua macchina virtuale. -Le nom doit respecter les mêmes règles que pour le déploiement depuis un modèle (caractères alphanumériques, tirets, underscores, points et espaces). +Il nome deve rispettare le stesse regole previste per la distribuzione da un modello (caratteri alfanumerici, trattini, underscore, punti e spazi). -### Étape 2 : Upload du fichier XVA +### Fase 2: Caricamento del file XVA -Importez votre fichier XVA depuis votre ordinateur. +Carica il tuo file XVA dal tuo computer. :::info -Le fichier doit avoir l'extension `.xva`. Les noms de fichiers ne doivent contenir que des caractères alphanumériques, tirets, underscores et points (pas d'espaces). +Il file deve avere l'estensione `.xva`. I nomi dei file devono contenere solo caratteri alfanumerici, trattini, underscore e punti (senza spazi). ::: -Glissez-déposez votre fichier dans la zone prévue ou cliquez pour sélectionner le fichier depuis votre explorateur. +Trascina e rilascia il file nell'area prevista o fai clic per selezionare il file dal tuo esploratore. -### Étape 3 : Sélection du stockage +### Fase 3: Selezione dello storage -Choisissez le stockage de destination pour votre machine virtuelle importée. +Scegliere lo storage di destinazione per la macchina virtuale importata. -Sélectionnez un Block Storage dans l'arborescence. Le système vérifie automatiquement que l'espace disponible est suffisant pour accueillir votre fichier XVA. +Selezionare un Block Storage nella struttura ad albero. Il sistema verifica automaticamente che lo spazio disponibile sia sufficiente per ospitare il file XVA. -### Étape 4 : Résumé et validation +### Fase 4: Riepilogo e convalida -Vérifiez les informations avant de lancer l'import. +Verificare le informazioni prima di avviare l'importazione. -Le résumé affiche : +Il riepilogo visualizza: -- Le nom de la VM -- Le type de déploiement (XVA) -- Le fichier XVA et sa taille -- Le stockage de destination +- Il nome della VM +- Il tipo di distribuzione (XVA) +- Il file XVA e le relative dimensioni +- Lo storage di destinazione -Cliquez sur **Créer** pour lancer l'import de votre machine virtuelle. +Fare clic su **Crea** per avviare l'importazione della macchina virtuale. -### À propos de l'option skip_set_template +### Informazioni sull'opzione skip_set_template -Lors de l'import d'un fichier XVA, l'option `skip_set_template` détermine si le résultat de l'import sera une machine virtuelle directement utilisable ou un modèle. Cette option est notamment utilisée avec des outils d'automatisation comme Packer. Plus d'informations : [documentation XCP-ng](https://xcp-ng.org/blog/2024/02/22/using-packer-with-xcp-ng/). +Durante l'importazione di un file XVA, l'opzione `skip_set_template` determina se il risultato dell'importazione sarà una macchina virtuale direttamente utilizzabile o un modello. Questa opzione è utilizzata in particolare con strumenti di automazione come Packer. Maggiori informazioni: [documentazione XCP-ng](https://xcp-ng.org/blog/2024/02/22/using-packer-with-xcp-ng/). --- -## Méthode 3 : Déploiement depuis le Marketplace +## Metodo 3: Distribuzione dal Marketplace -Le Marketplace Cloud Temple propose des images de machines virtuelles certifiées et prêtes à l'emploi. +Il Marketplace Cloud Temple offre immagini di macchine virtuali certificate e pronte all'uso. -### Sélection d'une image Marketplace +### Selezione di un'immagine del Marketplace -Parcourez le catalogue des images disponibles pour OpenIaaS. +Esplora il catalogo delle immagini disponibili per OpenIaaS. -Seules les images compatibles avec la plateforme OpenIaaS sont affichées. +Vengono visualizzate solo le immagini compatibili con la piattaforma OpenIaaS. -### Configuration de la machine virtuelle +### Configurazione della macchina virtuale -La configuration depuis le Marketplace suit un processus similaire au déploiement depuis un modèle, avec quelques spécificités : +La configurazione dal Marketplace segue un processo simile alla distribuzione da un modello, con alcune specificità: -- Les caractéristiques système (OS, CPU, RAM) sont prédéfinies par l'image Marketplace -- Vous pouvez personnaliser le nom de la VM -- Cloud Init est disponible pour la configuration initiale -- Le mapping réseau permet d'associer les interfaces réseau de l'image à vos réseaux +- Le caratteristiche di sistema (OS, CPU, RAM) sono predefinite dall'immagine del Marketplace +- È possibile personalizzare il nome della VM +- Cloud Init è disponibile per la configurazione iniziale +- La mappatura di rete consente di associare le interfacce di rete dell'immagine alle tue reti :::tip -Pour un guide détaillé du déploiement Marketplace, consultez le tutoriel dédié : [Déployer une image sur OpenIaaS](../../marketplace/tutorials/deploy_openiaas) +Per una guida dettagliata alla distribuzione sul Marketplace, consulta il tutorial dedicato: [Distribuire un'immagine su OpenIaaS](../../marketplace/tutorials/deploy_openiaas) ::: --- -## Bonnes pratiques +## Buone pratiche -### Choix de la méthode de déploiement +### Scelta del metodo di distribuzione -- **Modèle** : Idéal pour des déploiements standards et répétitifs au sein de votre organisation -- **XVA** : Recommandé pour migrer des VMs existantes ou utiliser des images personnalisées -- **Marketplace** : Parfait pour démarrer rapidement avec des images certifiées et maintenues +- **Modello** : Ideale per distribuzioni standard e ripetitive all'interno della tua organizzazione +- **XVA** : Consigliato per migrare VM esistenti o utilizzare immagini personalizzate +- **Marketplace** : Perfetto per iniziare rapidamente con immagini certificate e mantenute -### Configuration des ressources +### Configurazione delle risorse -- **CPU et RAM** : Dimensionnez selon les besoins réels de votre charge de travail -- **Disques** : Prévoyez une marge de croissance pour éviter les redimensionnements futurs +- **CPU e RAM** : Dimensionare in base alle esigenze reali del carico di lavoro +- **Dischi** : Prevedere un margine di crescita per evitare ridimensionamenti futuri -### Haute disponibilité +### Alta disponibilità -- Activez le mode **Restart** pour les applications critiques -- Utilisez **Best-Effort** pour les environnements moins critiques +- Abilita la modalità **Restart** per le applicazioni critiche +- Utilizza **Best-Effort** per gli ambienti meno critici ### Cloud Init -- Utilisez Cloud Init pour standardiser la configuration de vos VMs -- Documentez vos configurations Cloud Init pour faciliter leur réutilisation -- Testez vos configurations sur des VMs de test avant déploiement en production +- Utilizza Cloud Init per standardizzare la configurazione delle tue VM +- Documenta le configurazioni Cloud Init per facilitarne il riutilizzo +- Testa le configurazioni su VM di test prima del deployment in produzione -### Sécurité +### Sicurezza -- Utilisez des noms explicites pour faciliter l'identification et la gestion -- Planifiez une stratégie de sauvegarde dès la création de la VM +- Utilizzare nomi espliciti per facilitare l'identificazione e la gestione +- Pianificare una strategia di backup fin dalla creazione della VM \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/high_availability/manage_vm.md b/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/high_availability/manage_vm.md index b3c9da13..d1462304 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/high_availability/manage_vm.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/tutorials/high_availability/manage_vm.md @@ -1,3 +1,5 @@ + + --- title: Gestione di una macchina virtuale --- @@ -8,17 +10,17 @@ import open_iaas_vm_ha_filter from '@site/docs/iaas_opensource/tutorials/images/ import open_iaas_vm_ha_errors from '@site/docs/iaas_opensource/tutorials/images/open_iaas_vm_ha_errors.png' import open_iaas_vm_ha_warning from '@site/docs/iaas_opensource/tutorials/images/open_iaas_vm_ha_warning.png' -Oltre alla gestione del pool, le macchine virtuali devono essere inoltre configurate. -Per visualizzare la configurazione della macchina virtuale, è sufficiente andare nelle opzioni avanzate: +Oltre alla gestione del pool, le macchine virtuali devono anche essere configurate. +Per visualizzare la configurazione della macchina virtuale, basta andare nelle opzioni avanzate : -Per modificare questa configurazione: +Per modificare questa configurazione : -Per visualizzare l'insieme di tutte le macchine virtuali senza configurazione alta disponibilità: +Per visualizzare l'insieme delle macchine virtuali senza configurazione di alta disponibilità: -Per visualizzare l'insieme di tutte le macchine virtuali che possono impedire l'attivazione dell'alta disponibilità sul pool: +Per visualizzare l'insieme delle macchine virtuali che potrebbero impedire l'attivazione dell'alta disponibilità sul pool: - + \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/concepts.md b/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/concepts.md index ee7e7ca2..1fcd156e 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/concepts.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/concepts.md @@ -2,505 +2,534 @@ title: Concetti --- -L'offerta __IaaS (Infrastructure as a Service)__ di Cloud Temple è progettata per soddisfare i bisogni critici di continuità operativa e ripresa d'attività, con un'enfasi particolare sui settori esigenti come l'industria, la banca e l'assicurazione. Basata su tecnologie all'avanguardia, questa infrastruttura garantisce un'alta disponibilità e un'ottimizzazione delle prestazioni per i tuoi carichi di lavoro critici. +L'offerta __IaaS (Infrastructure As A Service)__ di Cloud Temple è progettata per rispondere alle esigenze critiche di continuità e ripresa dell'attività, con un'attenzione particolare ai settori esigenti come l'industria, il settore bancario e quello assicurativo. Basata su tecnologie all'avanguardia, questa infrastruttura garantisce una disponibilità massima e prestazioni ottimali per i vostri carichi di lavoro critici. ## Una piattaforma tecnologica di fiducia -La piattaforma IaaS di Cloud Temple si basa su partner tecnologici di fama internazionale: +La piattaforma IaaS di Cloud Temple si basa su partner tecnologici di fama internazionale : -- Calcolo: __CISCO UCS__. -- Archiviazione: __IBM Spectrum Virtualize__, __IBM FlashSystem__ per l'archiviazione a blocchi. -- Rete: __JUNIPER__. -- Virtualizzazione: __VMware__, che offre una base affidabile ed esauriente per gestire i vostri ambienti cloud. +- Calcolo : __CISCO UCS__. +- Archiviazione : __IBM Spectrum Virtualize__, __IBM FlashSystem__ per l'archiviazione a blocchi. +- Rete : __JUNIPER__. +- Virtualizzazione : __VMware__, che offre una base affidabile e collaudata per gestire i tuoi ambienti cloud. - Backup: __IBM Spectrum Protect Plus__, per l'orchestrazione e l'archiviazione dei backup. -Questa architettura si basa sul modello __VersaStack__, un'alleanza tra Cisco e IBM, che garantisce un'ampia compatibilità con i principali produttori di software. +Questa architettura si basa sul modello __VersaStack__, un'alleanza tra Cisco e IBM, che garantisce una compatibilità estesa con i principali fornitori di software. -## A dedicated and automated infrastructure +## Un'infrastruttura dedicata e automatizzata -Although fully automated through APIs and a Terraform provider, Cloud Temple's IaaS offering provides a unique infrastructure: +Sebbene completamente automatizzata grazie a API e un provider Terraform, il prodotto IaaS di Cloud Temple offre un'infrastruttura unica : -- __Dedicated resources__: Compute blades, storage volumes, and software stacks (virtualization, backup, firewalling, etc.) are never shared between clients. -- __Maximum predictability__: You have full control over virtualization rates, I/O pressure on storage, and benefit from clear, consumption-based monthly billing. +- __Risorse dedicate__ : I blade di calcolo, i volumi di archiviazione e gli stack software (virtualisation, sauvegarde, firewalling, etc.) non sono mai condivisi tra i clienti. +- __Massima prevedibilité__ : Controlli i tassi di virtualizzazione, il carico di IOPS sull'archiviazione e benefici di una fatturazione chiara, basata sul consumo mensile. -The platform is certified __SecNumCloud__ by the [ANSSI](https://www.ssi.gouv.fr/), ensuring a high level of automation and security. +La piattaforma è certificata __SecNumCloud__ da [ANSSI](https://www.ssi.gouv.fr/), garantendo un elevato livello di automazione e sicurezza. -## Funzionalità principali +## Principali funzionalità - Risorse di calcolo (CPU, RAM) dedicate e su richiesta. -- Archiviazione su richiesta (diverse classi disponibili). -- Risorse di rete (Internet, reti private). -- Backup incrociati con conservazione configurabile. -- Replica asincrona per l'archiviazione o le macchine virtuali. +- Storage su richiesta (plusieurs classes disponibles). +- Risorse di rete (Internet, réseaux privés). +- Backup incrociati con retention configurabile. +- Replicazione asincrona per lo storage o le macchine virtuali. - Gestione tramite la [Console](../console/console.md) o in modalità Infrastructure as Code grazie alle API e al provider Terraform. ## Vantaggi -| Vantaggio | Descrizione | +| Vantaggio | Descrizione | |---------------------|------------------------------------------------------------------------------------------------------------------------------------------------| -| Sicurezza digitale | Memorizzazione dei dati in Francia e conformità al GDPR. | -| Sicurezza | Piattaforma altamente sicura, certificata __SecNumCloud__, __HDS__ (Ospitalità dei Dati Sanitari), __ISO 27001__ e __ISAE 3402 tipo II__. | -| Alta disponibilità | Tasso di disponibilità della piattaforma del 99,99%, misurato mensilmente, incluse le finestre di manutenzione. | -| Resilienza | Implementazione di piani di continuità o ripresa dell'attività in base alle esigenze. | +| Fiducia digitale | Hosting dei dati in Francia e conformità al GDPR. | +| Sicurezza | Piattaforma altamente sicura, certificata __SecNumCloud__, __HDS__ (Hosting dei Dati Sanitari), __ISO 27001__ e __ISAE 3402 tipo II__. | +| Alta disponibilità | Tasso di disponibilità della piattaforma del 99,99%, misurato mensilmente, finestre di manutenzione incluse. | +| Resilienza | Implementazione di piani di continuità operativa o di ripristino di attività in base alle esigenze. | | Automazione | Piattaforma completamente automatizzata progettata per integrarsi in un programma di trasformazione digitale. | -| Su richiesta | Risorse disponibili su richiesta. | +| On demand | Risorse disponibili su richiesta. | ## Regioni e zone di disponibilità -Il prodotto IaaS VMware viene distribuito in una zona di disponibilità. +Il prodotto IaaS VMware è distribuito in una zona di disponibilità. Una [zona di disponibilità](../additional_content/concepts_az.md) fa parte di una [regione](../additional_content/concepts_regional.md). -Questo tipo di distribuzione consente di scegliere la posizione dei cluster e di distribuirli su diverse zone di disponibilità (AZ). -Fornisce una migliore distribuzione del carico, massimizza la ridondanza e semplifica la messa in atto di un piano di ripresa d'attività (DRP) in caso di incidente. +Questo tipo di distribuzione consente di scegliere la posizione dei cluster e di distribuirli su diverse zone di disponibilità (AZ). +Ciò offre una migliore distribuzione del carico, massimizza la ridondanza e facilita l'implementazione di un piano di disaster recovery (DRP) in caso di incidente. + +--- ## Calcolo -Le lame fornite da Cloud Temple sono di tipo __CISCO UCS B200__ o __CISCO UCS X210c__. Sono completamente gestite da Cloud Temple (firmware, versione del sistema operativo, ecc.) tramite la console Cloud Temple. +Le lame fornite da Cloud Temple sono di tipo __CISCO UCS B200__ o __CISCO UCS X210c__. Sono interamente gestite da Cloud Temple (firmware, versione del SO, ...) tramite la console Cloud Temple. -Sono disponibili diverse categorie di lame di calcolo nel catalogo per supportare i tuoi carichi di lavoro (virtualizzazione, containerizzazione, ecc.). Queste presentano caratteristiche e prestazioni differenti per rispondere al meglio alle tue esigenze. Il catalogo delle lame di calcolo viene aggiornato regolarmente. +Diverse categorie di lame di calcolo sono disponibili nel catalogo per supportare i vostri carichi di lavoro (Virtualizzazione, Containerizzazione, ...). Queste presentano caratteristiche e prestazioni diverse per rispondere al meglio alle vostre esigenze. Il catalogo delle lame di calcolo viene aggiornato regolarmente. -Nel contesto dell'utilizzo con un'offerta di virtualizzazione, un cluster di hypervisor è composto esclusivamente da lame di calcolo dello stesso tipo (non è possibile combinare lame di tipi diversi all'interno dello stesso cluster). +Nel contesto dell'utilizzo con un'offerta di virtualizzazione, un cluster di iper-visor è composto esclusivamente da lame di calcolo dello stesso tipo (non è possibile miscelare lame di tipi diversi nello stesso cluster). -| Riferimento | RAM __(1)__ | Frequenza __(2)__ | Numero di core / thread | Connettività __(3)__ | GPU __(4)__ | SKU per l'offerta Vmware | -| ----------------------- | ------------ | ----------------------------------------- | ----------------------- | -------------------- | -------------------- | ------------------------------- | -| Lame ECO v3 | 384 GB | 2,20/3,0 GHz (Silver 4114 o equivalente) | 20 / 40 thread | 2 x 10 Gbit/s | | csp:fr1:iaas:vmware:eco:v3 | -| Lame STANDARD v3 | 384 GB | 2,40/3,4 GHz (Silver 4314 o equivalente) | 32 / 64 thread | 2 x 25 Gbit/s | | csp:fr1:iaas:vmware:standard:v3 | -| Lame ADVANCE v3 | 768 GB | 2,80/3,5 GHz (Gold 6342 o equivalente) | 48 / 96 thread | 2 x 25 Gbit/s | | csp:fr1:iaas:vmware:advance:v3 | -| Lame PERFORMANCE 1 v3 | 384 GB | 3,20/3,6 GHz (Xeon E-53I5Y o equivalente) | 16 / 32 thread | 2 x 25 Gbit/s | | csp:fr1:iaas:vmware:perf1:v3 | -| Lame PERFORMANCE 2 v3 | 768 GB | 3,00/3,6 GHz (Gold 6354 o equivalente) | 36 / 72 thread | 2 x 25 Gbit/s | | csp:fr1:iaas:vmware:perf2:v3 | -| Lame PERFORMANCE 3 v3 | 1536 GB | 2,60/3,5 GHz (Gold 6348 o equivalente) | 56 / 112 thread | 2 x 25 Gbit/s | | csp:fr1:iaas:vmware:perf3:v3 | -| Lame PERFORMANCE 4 v3 | 512 GB | 2,50/4,1 GHz (Intel 6426Y o equivalente) | 32 / 64 thread | 2 x 25 Gbit/s | 2 x NVIDIA L40S 48 GB | csp:fr1:iaas:vmware:perf4:v3 | +| Riferimento | RAM __(1)__ | Frequenza __(2)__ | Numero di core / thread | Connettività __(3)__ | GPU __(4)__ | SKU per l'offerta VMware | +| ----------------------- | ------------ | ----------------------------------------- | ----------------------- | -------------------- | -------------------- | -------------------------------- | +| Lame ECO v3 | 384 Go | 2.20/3.0 GHz (Silver 4114 o equivalente) | 20 / 40 thread | 2 X 10 Gbit/s | | csp:fr1:iaas:vmware:eco:v3 | +| Lame STANDARD v3 | 384 Go | 2.40/3.4 GHz (Silver 4314 o equivalente) | 32 / 64 thread | 2 X 25 Gbit/s | | csp:fr1:iaas:vmware:standard:v3 | +| Lame ADVANCE v3 | 768 Go | 2.80/3.5 GHz (Gold 6342 o equivalente) | 48 / 96 thread | 2 X 25 Gbit/s | | csp:fr1:iaas:vmware:advance:v3 | +| Lame PERFORMANCE 1 v3 | 384 Go | 3.20/3.6 GHz (Xeon E-53I5Y o equivalente) | 16 / 32 thread | 2 X 25 Gbit/s | | csp:fr1:iaas:vmware:perf1:v3 | +| Lame PERFORMANCE 2 v3 | 768 Go | 3.00/3.6 GHz (Gold 6354 o equivalente) | 36 / 72 thread | 2 X 25 Gbit/s | | csp:fr1:iaas:vmware:perf2:v3 | +| Lame PERFORMANCE 3 v3 | 1536 Go | 2.60/3.5 GHz (Gold 6348 o equivalente) | 56 / 112 thread | 2 X 25 Gbit/s | | csp:fr1:iaas:vmware:perf3:v3 | +| Lame PERFORMANCE 4 v3 | 512 Go | 2.50/4.1 GHz (Intel 6426Y o equivalente) | 32 / 64 thread | 2 X 25 Gbit/s | 2 x NVIDIA L40S 48 Go| csp:fr1:iaas:vmware:perf4:v3 | -__Note__: +__Note__ : - __(1)__ La quantità di memoria fornita è quella fisicamente disponibile sulle lame. Non è possibile modificare la quantità fisica di memoria di una lama. -- __(2)__ Frequenza base minima / frequenza turbo, espressa in GHz. Per impostazione predefinita, i processori sono configurati per prestazioni massime a livello di BIOS. +- __(2)__ Frequenza base minima / frequenza turbo, espressa in GHz. Per impostazione predefinita, i processori sono configurati per le prestazioni massime a livello di BIOS. -- __(3)__ La connettività fisica è condivisa per l'accesso alla rete e all'archiviazione a blocchi, poiché la piattaforma Cisco è convergente. +- __(3)__ La connettività fisica è condivisa per l'accesso di rete e l'accesso allo storage a blocchi, poiché la piattaforma CISCO è convergente. -- __(4)__ L'offerta di GPU disponibile evolve costantemente. Al 1° maggio 2024, l'offerta si basa sui GPU NVIDIA LOVELACE L40S. Per impostazione predefinita, la lama PERF4 viene fornita con 2 schede L40S da 48 GB di RAM. Contatta il supporto per ulteriori informazioni se necessario. +- __(4)__ L'offerta GPU effettivamente disponibile è in continua evoluzione. Al 1° maggio 2024, l'offerta si basa sui GPU NVIDIA LOVELACE L40S. Per impostazione predefinita, la lama PERF4 viene fornita con 2 schede L40S da 48 Go di RAM. Contattare il supporto per maggiori dettagli se necessario. -La disponibilità dell'offerta di calcolo è del 99,99%, calcolata mensilmente, inclusa la finestra di manutenzione. L'eligibilità in caso di mancato rispetto del SLA è soggetta alla creazione di un ticket incidente. È inoltre necessario disporre di almeno due host per cluster e attivare la funzionalità __High Availability__ (HA). -Questa funzionalità permette al tuo ambiente di riavviare automaticamente le macchine virtuali sul secondo hypervisor. Nel caso in cui una zona di disponibilità contenga un solo hypervisor, il riavvio automatico non è possibile. +La disponibilità dell'offerta di calcolo è del 99,99%, calcolata mensilmente, finestra di manutenzione inclusa. L'idoneità in caso di mancato rispetto del SLA è soggetta alla creazione di un ticket di incidente. È inoltre necessario disporre di almeno due host per cluster e attivare la funzionalità __High Availability__ (HA). Questa funzionalità consente alla propria architettura di riavviare automaticamente le macchine virtuali sul secondo iper-visor. Nel caso in cui una zona di disponibilità contenga un solo iper-visor, il riavvio automatico non è possibile. ## Rete -Il servizio di rete sulla piattaforma IaaS di Cloud Temple si basa su un'infrastruttura di rete basata sulla tecnologia VPLS, offrendo una segmentazione flessibile e performante per soddisfare i bisogni dei clienti in termini di connettività e isolamento di rete. +Il servizio di rete sulla piattaforma IaaS di Cloud Temple si basa su un'infrastruttura di rete basata sulla tecnologia VPLS, che offre una segmentazione flessibile e ad alte prestazioni per soddisfare le esigenze dei clienti in termini di connettività e isolamento di rete. ### VLAN di livello 2 -I VLAN messi a disposizione nell'offerta IaaS sono di tipo __livello 2__, offrendo un'isolamento di rete completo e una configurazione adattabile in base alle esigenze. +I VLAN disponibili nel prodotto IaaS sono di tipo __livello 2__, offrendo un isolamento di rete completo e una configurazione adattabile in base alle esigenze. #### Concetti principali - __Condivisione tra cluster e zone di disponibilità (AZ)__ : - - I VLAN possono essere condivisi tra diverse AZ e diversi cluster appartenenti allo stesso tenant. -- __Propagazione tra tenant__ : - - I VLAN possono essere propagati tra più tenant appartenenti alla stessa organizzazione, facilitando le comunicazioni interne. + - I VLAN possono essere condivisi tra le diverse AZ e i diversi cluster appartenenti allo stesso tenant. +- __Propagazione inter-tenant__ : + - I VLAN possono essere propagati tra diversi tenant appartenenti alla stessa organizzazione, facilitando le comunicazioni interne. + +--- ### Prestazioni di rete L'infrastruttura di rete garantisce una latenza ridotta per prestazioni ottimali: -- __Latenza intra-AZ__: Inferiore a __3 ms__. -- __Latenza inter-AZ__: Inferiore a __5 ms__. +- __Latenza intra-AZ__ : Inferiore a __3 ms__. +- __Latenza inter-AZ__ : Inferiore a __5 ms__. + +--- ### Punti chiave -1. __Flessibilità__ : I VLAN possono essere configurati per adattarsi a ambienti multi-cluster e multi-tenant. -2. __Alta prestazione__ : Una latenza minima garantisce una comunicazione rapida ed efficiente tra le zone di disponibilità. -3. __Isolamento e sicurezza__ : I VLAN a livello 2 offrono una segmentazione di rete rigorosa per proteggere dati e flussi. +1. __Flessibilità__: I VLAN possono essere configurati per adattarsi ad ambienti multi-cluster e multi-tenant. +2. __Prestazioni elevate__: Una latenza minima garantisce una comunicazione rapida ed efficiente tra le zone di disponibilità. +3. __Isolamento e sicurezza__: I VLAN di livello 2 offrono una segmentazione di rete rigorosa per proteggere i dati e i flussi. + +--- -## Bloccaggio +## Storage a blocchi -Cloud Temple offre diverse classi di archiviazione basate sulla tecnologia [IBM FlashSystem](https://www.ibm.com/flashsystem/) +Cloud Temple offre diverse classi di storage basate sulla tecnologia [IBM FlashSystem](https://www.ibm.com/flashsystem/) e [IBM SVC](https://www.ibm.com/products/san-volume-controller). -La tecnologia __IBM SVC__ permet di fornire il livello di prestazioni richiesto per gli ambienti dei nostri clienti grazie alla grande quantità di cache in memoria integrata nei controller e alla possibilità di distribuire l'insieme delle IOPS di un server su diversi SAN. +La tecnologia __IBM SVC__ consente di erogare il livello di prestazioni richiesto per gli ambienti dei nostri clienti grazie all'ampia +quantità di cache di memoria integrata nei controller e alla possibilità di distribuire tutti gli IOPS +di un server su più SAN. -Viene inoltre utilizzata per abilitare la replica dei tuoi LUN di archiviazione in modalità blocco tra le zone di disponibilità o semplificare gli interventi sulle baie di archiviazione. +Viene inoltre utilizzata per consentire la replicazione dei vostri LUN di storage in modalità blocco tra +le zone di disponibilità o facilitare le operazioni sulle baie di storage. -L'archiviazione è principalmente di tipo FLASH NVMe dedicato a carichi di lavoro professionali. -I dischi vengono utilizzati dalle baie di archiviazione in modalità [__'Distributed Raid 6'__](https://www.ibm.com/docs/en/flashsystem-5x00/8.6.x?topic=configurations-distributed-raid-array-properties). +Lo storage è principalmente di tipo FLASH NVME dedicato a carichi di lavoro professionali. +I dischi sono utilizzati dalle baie di storage in [__'Distributed Raid 6'__](https://www.ibm.com/docs/en/flashsystem-5x00/8.6.x?topic=configurations-distributed-raid-array-properties). -### Sicurezza e Crittografia del Storage Blocco +### Sicurezza e Cifratura dell'Archiviazione a Blocchi -Per garantire la riservatezza dei tuoi dati in stato di riposo, l'intera infrastruttura di storage blocco è dotata di un robusto crittografia hardware. +Per garantire la riservatezza dei vostri dati a riposo, l'intera infrastruttura di archiviazione a blocchi integra una robusta cifratura hardware. -- __Tipo di Crittografia__: I dati vengono crittografati direttamente sui dischi (`Data At Rest`) utilizzando l'algoritmo __XTS-AES 256__. -- __Conformità__: Questo metodo di crittografia è conforme allo standard __FIPS 140-2__, garantendo un elevato livello di sicurezza certificato. -- __Funzionamento__: La crittografia viene applicata al momento della scrittura dei dati sul supporto di archiviazione fisico. +- __Tipo di Cifratura__ : I dati sono cifrati direttamente sui dischi (`Data At Rest`) utilizzando l'algoritmo __XTS-AES 256__. +- __Conformità__ : Questo metodo di cifratura è conforme allo standard __FIPS 140-2__, garantendo un elevato livello di sicurezza validato. +- __Funzionamento__ : La cifratura viene applicata al momento della scrittura dei dati sul supporto di archiviazione fisico. -:::warning[Osservazione sulla replica] -È importante sottolineare che questa crittografia protegge i dati archiviati sui dischi. Non è attiva "on-the-fly", il che significa che i dati non vengono crittografati durante le operazioni di replica dello storage tra le zone di disponibilità. La sicurezza dei trasferimenti è garantita tramite canali di comunicazione dedicati e protetti. +:::warning[Attenzione sulla replicazione] +È importante notare che questa cifratura protegge i dati memorizzati sui dischi. Non è attiva "on-the-fly", il che significa che i dati non vengono cifrati durante le operazioni di replicazione dell'archiviazione tra le zone di disponibilità. La sicurezza dei trasferimenti è garantita da canali di comunicazione dedicati e sicuri. ::: -La classe di storage __'Mass Storage'__ offre dischi meccanici per esigenze di archiviazione in un contesto di efficienza economica. Sono disponibili diversi livelli di prestazioni: +La classe di archiviazione __'Mass Storage'__ propone dischi meccanici per le esigenze di archiviazione in un contesto di efficienza economica. Sono disponibili diversi livelli di prestazioni: -| Riferimento | Unità | Limite massimo IOPS / LUN | Larghezza di banda max / LUN | SKU | -|-----------------------------------|-------|----------------------------------------------| -| FLASH - Essenziale - 500 IOPS/To | 1 Gio | csp:(region):iaas:storage:bloc:live:v1 | -| FLASH - Standard - 1500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:medium:v1 | -| FLASH - Premium - 3000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:premium:v1 | -| FLASH - Enterprise - 7500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:enterprise:v1 | -| FLASH - Ultra - 15000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:ultra:v1 | -| MASS STORAGE - Archiviazione | 1 Tio | csp:(region):iaas:storage:bloc:mass:v1 | +| Riferimento | Unità | Limite IOPS max / LUN | Banda passante max / LUN | SKU | +|-----------------------------------|-------|------------------------|--------------------------|----------------------------------------------| +| FLASH - Essenziale - 500 IOPS/To | 1 Gio | 10 000 IOPS | 512 Mo/s | csp:(region):iaas:storage:bloc:live:v1 | +| FLASH - Standard - 1500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:medium:v1 | +| FLASH - Premium - 3000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:premium:v1 | +| FLASH - Enterprise - 7500 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:enterprise:v1 | +| FLASH - Ultra - 15000 IOPS/To | 1 Gio | 30 000 IOPS | 1024 Mo/s | csp:(region):iaas:storage:bloc:ultra:v1 | +| MASS STORAGE - Archivio | 1 Tio | Non garantito | Non garantito | csp:(region):iaas:storage:bloc:mass:v1 | *__Nota__ :* -- *Le prestazioni effettive per una classe di storage sono legate al volume effettivamente ordinato, secondo la metrica "IOPS/To", intesa come "limite di IOPS per Tera allocato",* +- *Le prestazioni effettive di una LUN (Datastore) crescono in modo lineare in funzione del volume allocato (secondo il suo rapporto IOPS/To), __entro il limite hardware assoluto definito sopra__.* -> *Così, un volume da 0,5 To nella classe di prestazioni 'Standard' avrà un limite di IOPS fissato a 750 IOPS,* -> *Allo stesso modo, un volume da 10 To nella classe di prestazioni 'Ultra' avrà un limite di IOPS pari a 150000 IOPS,* +> *Ad esempio, un volume di 0,5 To nella classe 'Standard' beneficerà di 750 IOPS.* +> *D'altra parte, un volume di 10 To nella classe 'Ultra' (teoricamente 150 000 IOPS) sarà limitato dal limite fisico assoluto e si stabilizzerà a 30 000 IOPS e 1024 Mo/s.* -- *Il limite di IOPS è applicato al volume, quindi alla nozione di Datastore in un ambiente VMware,* -- *La disponibilità dello storage è del 99,99% misurata mensilmente, inclusa la finestra di manutenzione,* -- *Non ci sono restrizioni o limiti su lettura o scrittura,* -- *Non c'è alcuna fatturazione basata sugli IOPS,* -- *Non c'è alcun impegno di prestazioni per la classe __'Mass Storage'__,* -- *La dimensione minima di una LUN di storage è di 500 Gio,* -- *Nel caso di utilizzo di un meccanismo di replica dello storage, le prestazioni devono essere identiche nelle due zone di disponibilità,* -- *Non viene implementato alcun meccanismo di ottimizzazione "intelligente" come compressione o deduplicazione: quando prenoti 10 Tio di storage, hai fisicamente 10 Tio di storage utilizzabile implementati sulle macchine IBM.* -- *Le LUN di storage sono dedicate all'ambiente cliente.* +- *Queste limitazioni (IOPS e banda passante) si applicano a livello di volume di archiviazione, ovvero a livello di Datastore per un ambiente VMware,* +- *La disponibilità dell'archiviazione è del 99,99% misurato mensilmente, manutenzione inclusa,* +- *Non ci sono restrizioni o quote sulla lettura o scrittura,* +- *Non c'è fatturazione basata sugli IOPS,* +- *Non c'è impegno di prestazioni per la classe __'Mass Storage'__,* +- *La dimensione minima di una LUN di archiviazione è di 500 Gio,* +- *Durante l'uso di un meccanismo di replicazione dell'archiviazione, le prestazioni devono essere identiche su entrambe le zone di disponibilità,* +- *Nessun meccanismo di ottimizzazione "intelligente" di tipo compressione o deduplicazione è implementato: quando riservi 10 Tio di archiviazione, hai fisicamente 10 Tio di archiviazione utile implementata sulle macchine IBM.* +- *Le LUN di archiviazione sono dedicate all'ambiente cliente.* ### Utilizzo nell'ambito dell'offerta di calcolo VMware -Nel contesto dell'utilizzo dello storage in modalità blocco sotto forma di datastore nell'offerta di calcolo VMware di Cloud Temple, __è necessario considerare diverse importanti caratteristiche__: +Nell'ambito dell'utilizzo dello storage in modalità block come datastore nell'offerta di calcolo VMware di Cloud Temple, __è necessario considerare diversi aspetti importanti__ : -1. __File di swap (.VSWP) durante l'avvio delle macchine virtuali__: Quando una macchina virtuale viene avviata, crea un file .VSWP della dimensione della sua memoria sul disco. Di conseguenza, per poter avviare le tue macchine virtuali, devi sempre disporre in ogni datastore di uno spazio libero pari alla somma delle dimensioni della memoria delle tue macchine virtuali. Ad esempio, se il tuo datastore dispone di 1 Tio di storage blocco e desideri avviare 10 macchine virtuali da 64 Gio di memoria ciascuna, saranno necessari 640 Gio di spazio su disco. Senza tale spazio disponibile, l'avvio delle macchine virtuali sarà limitato dalla capacità disponibile per la creazione dei file di swap. +1. __File di swap (.VSWP) durante l'avvio delle macchine virtuali__ : Quando una macchina virtuale viene avviata, crea un file .VSWP di dimensioni pari alla sua memoria sul disco. Di conseguenza, per poter avviare le tue macchine virtuali, devi sempre avere a disposizione nel tuo datastore uno spazio libero equivalente alla somma delle dimensioni di memoria delle tue macchine virtuali. Ad esempio, se il tuo datastore dispone di 1 Tio di storage block e desideri avviare 10 macchine virtuali da 64 Gio di memoria ciascuna, saranno necessari 640 Gio di spazio su disco. Senza questo spazio, l'avvio delle macchine sarà limitato dalla capacità disponibile per creare i file di swap. -2. __Spazio libero per i snapshot di backup__: Il servizio di backup utilizza snapshot istantanei. È quindi fondamentale mantenere sempre uno spazio libero sufficiente per consentire la creazione di uno snapshot durante il backup di una macchina virtuale. La dimensione dello snapshot dipende dall'entità delle scritture effettuate dalla macchina virtuale e dal tempo necessario per eseguire il backup. In generale, si raccomanda di mantenere almeno il 10 % dello spazio libero per tale operazione. +2. __Spazio libero per gli snapshot di backup__ : Il servizio di backup utilizza gli istantanei (snapshots). Di conseguenza, devi sempre avere a disposizione spazio libero sufficiente per consentire la creazione di un istantaneo durante il backup di una macchina virtuale. La dimensione dell'istantaneo dipende dal volume di scrittura della macchina virtuale e dal tempo necessario per eseguire il backup. In linea di massima, si consiglia di mantenere almeno il 10 % di spazio libero per questa operazione. -3. __Gestione dei dischi dinamici__: Presta attenzione all'utilizzo dei dischi dinamici. Se non controlli correttamente la loro crescita, la mancanza di spazio fisico può causare, nel migliore dei casi, un blocco (freeze) della macchina virtuale, e nel peggiore un arresto anomalo con corruzione dei dati. È essenziale monitorare attentamente lo spazio disponibile sui tuoi datastores quando utilizzi questo tipo di disco. +3. __Gestione dei dischi dinamici__ : Fai attenzione all'utilizzo dei dischi dinamici. Se non ne controlli la crescita, una mancanza di spazio fisico può causare un congelamento (freeze) della macchina virtuale nel caso migliore, o un arresto anomalo con corruzione nel caso peggiore. È fondamentale monitorare attentamente lo spazio disponibile sui tuoi datastore quando utilizzi questo tipo di disco. -Una gestione proattiva dello spazio su disco è fondamentale per garantire il corretto funzionamento delle tue macchine virtuali e l'affidabilità dei backup. Assicurati sempre di disporre dello spazio necessario per i file di swap, i snapshot e la crescita dei dischi dinamici. +Una gestione proattiva dello spazio su disco è essenziale per garantire il corretto funzionamento delle tue macchine virtuali e l'affidabilità dei backup. Assicurati di avere sempre a disposizione lo spazio necessario per i file di swap, gli snapshot e la crescita dei dischi dinamici. -## Backup Storage +## Archiviazione in modalità backup -Il storage dedicato al backup delle macchine virtuali viene automaticamente provisioning dalla piattaforma entro i limiti del quota ordinata. +L'archiviazione dedicata al backup delle tue macchine virtuali viene provisionata automaticamente dalla piattaforma entro i limiti della quota ordinata. -| Reference | Unit | SKU | -|--------------------------|------|------------------------------------------| -| MASS STORAGE - Archivage | 1 Tio | Non garanti | Non garanti | csp:(region):iaas:storage:bloc:mass:v1 | +| Riferimento | Unità | SKU | +|--------------------------|-------|------------------------------------------| +| MASS STORAGE - Archivio | 1 Tio | csp:(region):iaas:storage:bloc:backup:v1 | -### Replication dello storage in modalità blocco +### Replicazione dello storage a blocchi #### Principi -Per consentire l'implementazione dei vostri piani di ripresa dell'attività, quando non è possibile mantenere una situazione di continuità operativa tramite meccanismi applicativi e la replica delle macchine virtuali non è adatta, Cloud Temple propone __meccanismi di replica del storage in modalità blocco tra le zone di disponibilità di una regione__. +Per consentire l'attuazione dei vostri piani di ripresa dell'attività, quando non è possibile garantire la +continuità operativa mediante meccanismi applicativi e la replicazione delle macchine virtuali +non risulta adatta, Cloud Temple propone __meccanismi di replicazione dello storage in modalità block tra le zone di disponibilità di una regione__. -Questi meccanismi di replica vengono applicati ai LUN di storage dei vostri ambienti, in aggiunta alle operazioni di backup. La scelta dell'utilizzo di un meccanismo di replica su un ambiente __dipende da numerosi fattori, tra cui la criticità, la perdita di dati tollerata o le prestazioni richieste per l'applicazione__. +Questi meccanismi di replicazione vengono applicati ai LUN di storage dei vostri ambienti, in aggiunta ai backup. +La scelta di utilizzare un meccanismo di replicazione su un ambiente __dipende da numerosi fattori, tra cui la sua criticità, la perdita di dati tollerata o ancora le prestazioni richieste__ per l'applicazione. -Cloud Temple offre due tipi di meccanismi, implementati in una configurazione attivo/passivo: +Cloud Temple propone due tipi di meccanismi implementati in una configurazione attivo/passivo: -- La replica __asincrona__ (o __'Global Mirror'__): *La funzione __'Global Mirror'__ fornisce un processo di copia asincrona. Quando un host scrive sul volume primario, la conferma del completamento dell'operazione di I/O viene ricevuta prima che l'operazione di scrittura sia completata sulla copia sul volume secondario. In caso di attivazione di un failover, l'applicazione deve recuperare e applicare tutte le aggiornamenti non confermati sul volume secondario. Se le operazioni di I/O sul volume primario vengono sospese per un breve periodo, il volume secondario può diventare una copia esatta del volume primario. Questa funzione è comparabile a un processo di backup continuo in cui gli ultimi aggiornamenti sono sempre in ritardo. Quando si utilizza Global Mirror a scopo di ripresa da disastro, è necessario riflettere sulla modalità con cui gestire questi aggiornamenti mancanti.* +- La replicazione __asincrona__ (o __'Global Mirror'__) : *La funzione __'Global Mirror'__ fornisce un processo di copia asincrona. +Quando un host scrive sul volume primario, la conferma del completamento dell'I/O viene ricevuta prima che l'operazione +di scrittura venga completata per la copia sul volume secondario. Se viene avviata un'operazione di failover, l'applicazione +deve recuperare e applicare tutti gli aggiornamenti che non sono stati confermati sul volume secondario. +Se le operazioni di I/O sul volume primario vengono sospese per un breve periodo, +il volume secondario può diventare una copia esatta del volume primario. Questa funzione è paragonabile a un processo +di backup continuo in cui gli ultimi aggiornamenti sono sempre mancanti. +Quando si utilizza Global Mirror per la ripresa dopo disastro, è necessario valutare come gestire tali aggiornamenti mancanti.* -- La replica __sincrona__ (o __'Metro Mirror'__): *La funzione __'Metro Mirror'__ è un tipo di copia remota che crea una copia sincrona dei dati da un volume primario a un volume secondario. Con copie sincrone, gli host applicativi scrivono sul volume primario, ma non ricevono la conferma del completamento dell'operazione di scrittura finché i dati non sono stati scritti anche sul volume secondario. Ciò garantisce che entrambi i volumi contengano dati identici al termine dell'operazione di copia. Dopo il completamento dell'operazione di copia iniziale, la funzione Metro Mirror mantiene costantemente una copia completamente sincronizzata dei dati sorgente sul sito di destinazione. __A partire dal 1° gennaio 2024, la funzione 'Metro Mirror' non è più in commercio.__* +- La replicazione __sincrona__ (o __'Metro Mirror'__) : *La funzione __'Metro Mirror'__ è un tipo di copia remota che crea una copia sincrona +dei dati da un volume primario a un volume secondario. Con le copie sincrone, le applicazioni host scrivono sul volume primario, ma non ricevono conferma +che l'operazione di scrittura sia completata finché i dati non sono stati scritti sul volume secondario. Ciò garantisce che entrambi i volumi contengano dati identici al termine +dell'operazione di copia. Dopo il completamento dell'operazione di copia iniziale, la funzione Metro Mirror +mantiene costantemente una copia completamente sincronizzata dei dati sorgente sul sito di destinazione. __Dal 1° gennaio 2024, la funzione 'Metro Mirror' non è più commercializzata.__* -Si definisce quindi un sito detto "attivo" o "principale" e un sito "passivo" o "standby". -Il piano di ripresa dell'attività viene attivato in caso di disastro o nell'ambito di una richiesta di test del PRA. -Il sito passivo assume quindi il controllo al posto del sito attivo. +Si definisce quindi un sito definito "attivo" o "primario" e un sito "passivo" o "standby". +Il piano di ripresa dell'attività viene attivato in caso di disastro o nell'ambito di una richiesta di test del PRA. +Il sito passivo assume quindi il controllo del sito attivo. -#### Replica asincrona +#### Replicazione asincrona -Quando i carichi di lavoro richiedono tempi di ripresa operativa brevi e non è accettabile o adeguato utilizzare meccanismi di replica applicativa o di macchine virtuali, è possibile replicare una LUN di storage SAN tra due zone di disponibilità all'interno della stessa regione. +Quando i vostri carichi di lavoro richiedono tempi di ripristino delle attività brevi e non è accettabile o appropriato utilizzare meccanismi di tipo replicazione applicativa / replicazione di macchine virtuali, è possibile replicare una LUN di storage SAN tra due zone di disponibilità della stessa regione. -Questo servizio consente di ottenere un __RPO di 15 minuti__ e un __RTO inferiore a 4 ore__. Permette una ripresa molto più rapida rispetto all'implementazione di un ripristino da backup. +Questo prodotto consente di ottenere un __RPO di 15 min__ e un __RTO inferiore a 4 ore__. Consente di ripartire molto più rapidamente rispetto all'implementazione di un ripristino del backup. -In un volume di storage in replica asincrona (__Global Mirror__), i controller di virtualizzazione SAN delle due zone di disponibilità collaborano per eseguire le operazioni di scrittura sui due siti. Il sito principale non attende l'acknowledgement di scrittura dal sito secondario. +In un volume di storage in replicazione asincrona (__Global Mirror__), i controller di virtualizzazione SAN delle due zone di disponibilità lavorano congiuntamente per eseguire le operazioni di scrittura su entrambi i siti. Il sito principale non attende la conferma di scrittura del sito secondario. -Le fasi di un'operazione di scrittura sono le seguenti: +Le fasi di un'operazione di scrittura sono le seguenti : -1. Un hypervisor desidera eseguire __un'operazione di scrittura su un volume Global-Mirror__: invia la richiesta al controller SAN della propria zona di disponibilità, +1. Un hypervisor desidera eseguire __un'operazione di scrittura su un volume Global-Mirror__ : invia la propria richiesta al controller SAN della propria zona di disponibilità, 2. Il controller SAN locale richiede al controller SAN della zona remota di eseguire l'operazione di scrittura, -3. Il controller SAN locale non attende l'acknowledgement del SAN remoto e procede quindi con la scrittura localmente, -4. Invia __l'acknowledgement__ all'hypervisor che ha emesso la richiesta, -5. __Gli hypervisor del sito remoto non accedono direttamente alla LUN Global Mirror__: è necessaria una richiesta di servizio. +3. il controller SAN locale non attende la conferma dal SAN remoto ed esegue quindi la scrittura localmente, +4. Invia la __conferma__ all'hypervisor che ha emesso la richiesta, +5. __Gli hypervisor del sito remoto non accedono direttamente alla LUN Global Mirror__ : È necessaria una richiesta di servizio. | SLA | Descrizione | |-----------|---------------------------------------------------------------------------------------------------------------------------------------------------| -| RPO 15 min | In caso di incidente nel datacenter principale, la quantità massima di dati persi corrisponde al massimo alle ultime 15 minuti di scrittura | -| RTO < 4 h | In caso di incidente nel datacenter principale, la ripresa operativa è garantita entro 4 ore, in base alla complessità degli ambienti. | +| RPO 15mn | In caso di disastro nel datacenter principale, la quantità massima di dati perduti corrisponde al massimo agli ultimi 15 minuti di scrittura | +| RTO < 4H | In caso di disastro nel datacenter principale, il ripristino delle attività è garantito entro 4 ore in base alla complessità degli ambienti. | -In caso di attivazione del PRA, l'equipe di Cloud Temple esegue un'operazione di presentazione della LUN __'Global Mirror'__ agli hypervisor remoti, in modo che possano accedere ai dati. La messa in opera di questa soluzione richiede quindi di aver riservato sul sito 'standby' la risorsa di calcolo e la RAM necessarie per riprendere l'attività in caso di incidente. +In caso di attivazione del PRA, il team di Cloud Temple esegue un'operazione di presentazione della LUN __'Global Mirror'__ agli hypervisor remoti affinché possano accedere ai dati. L'implementazione di questa soluzione richiede quindi di aver riservato sul sito 'standby' risorse di calcolo e RAM per riprendere l'attività in caso di disastro. -L'uso di questa tecnologia richiede inoltre il doppio dello spazio su disco: è necessario disporre esattamente dello stesso spazio sul sito remoto rispetto al sito locale. +L'utilizzo di questa tecnologia richiede inoltre il raddoppio dello spazio su disco : è necessario disporre esattamente dello stesso spazio sul sito remoto rispetto a quello locale. -L'uso di questo meccanismo può influire sulle prestazioni dell'applicazione fino al 10%. __Sono compatibili solo le classi di storage 500 IOPS/To, 1500 IOPS/To e 3000 IOPS/To.__ +L'utilizzo di questo meccanismo può impattare le prestazioni dell'applicazione fino al 10 %. __Solo le classi di storage 500 Iops/To, 1500 Iops/To e 3000 Iops/TO sono compatibili.__ -| Riferimento | Unità | Limite massimo IOPS / LUN | Larghezza di banda max / LUN | SKU | +| Riferimento | Unità | SKU | |------------------------------------|--------|---------------------------------------------------| -| STORAGE - Global Replication SAN | 1 TiB | csp:(region):iaas:storage:licence:globalmirror:v1 | +| STORAGE - Global Replication SAN | 1 Tio | csp:(region):iaas:storage:licence:globalmirror:v1 | *__Nota__* : -- *Essendo un servizio asincrono, in caso di incidente è possibile che alcune operazioni su disco non siano state scritte sul sito remoto. Potrebbe quindi esserci un rischio sulla coerenza dei dati, mitigato nell'analisi dei rischi del piano di ripresa d'attività.* -- *La replica del storage in modalità blocco avviene in modo trasparente per le macchine virtuali e le applicazioni,* -- *Per questo motivo è importante privilegiare scenari di replica applicativa o, in alternativa, la replica di macchine virtuali,* -- *Il calcolo e la memoria sul sito di ripresa possono essere ridotti per ottimizzare i costi, se una situazione degradata è accettabile per l'attività aziendale durante l'attivazione del piano di ripresa d'attività.* +- *Poiché l'offerta è asincrona, in caso di disastro è possibile che alcune operazioni su disco non siano state scritte sul sito remoto. Può quindi esistere un rischio per la coerenza dei dati, mitigato nell'analisi dei rischi del piano di ripristino delle attività.* +- *La replicazione dello storage in modalità block avviene in modo trasparente per le macchine virtuali e le applicazioni,* +- *A tal fine, è importante privilegiare gli scenari di replicazione applicativa o eventualmente di replicazione di macchine virtuali,* +- *Il calcolo e la memoria, sul sito di ripristino, possono essere ridotti per ottimizzare i costi se una situazione degradata è accettabile per il business durante l'attivazione del piano di ripristino delle attività.* ## Virtualizzazione VMware -L'offerta di virtualizzazione VMware Cloud Temple qualificata SecNumCloud si basa sulla tecnologia __VMware Vsphere__. +L'offerta di virtualizzazione VMware Cloud Temple qualificata SecNumCloud si basa sulla tecnologia __VMware vSphere__. -La piattaforma è gestita automaticamente da Cloud Temple (mantenimento delle condizioni di sicurezza, mantenimento in condizioni operative, ...). -È controllabile tramite l'interfaccia grafica della Console oppure tramite le API associate. +La piattaforma è gestita automaticamente da Cloud Temple (mantenimento delle condizioni di sicurezza, mantenimento in condizione operativa, ...). +È gestibile tramite l'interfaccia grafica della Console o tramite le API associate. -*__Nota__*: *Per ragioni di sicurezza legate alla qualifica SecNumCloud, -__non è possibile per il committente accedere direttamente alla piattaforma di virtualizzazione VMware__ (nessun accesso diretto al vCenter, ad esempio). +*__Nota__* : *Per motivi di sicurezza legati alla qualifica SecNumCloud, +__non è possibile per il committente accedere direttamente alla piattaforma di virtualizzazione VMware__ (nessun accesso diretto a vCenter in particolare). Infatti, la qualifica SecNumCloud impone __una totale segregazione__ tra le interfacce di gestione degli asset tecnici e l'interfaccia del committente (la Console).* -- I prodotti implementati sono VMware ESXi, VMware Vcenter e VMware Replication. -- *La rete dell'offerta di virtualizzazione non utilizza la tecnologia VMware NSX, ma è gestita in modo fisico tramite la tecnologia Juniper e il protocollo VPLS.* -- *Il storage non utilizza la tecnologia VMware vSan, ma esclusivamente SAN IBM in fiber channel 32G.* -- *Non viene implementata alcuna forma di ottimizzazione nascosta (compressione, deduplicazione, ...).* +- I prodotti implementati sono VMware ESXi, VMware vCenter e VMware Replication. +- *La rete dell'offerta di virtualizzazione non utilizza la tecnologia VMware NSX, ma è gestita a livello hardware dalla tecnologia Juniper e dal protocollo VPLS.* +- *L'archiviazione non utilizza la tecnologia VMware vSAN, ma esclusivamente SAN IBM in fibra channel a 32G.* +- *Nessuna forma di ottimizzazione nascosta è implementata (compressione, deduplicazione, ...).* -### Definizione di un cluster di blade di calcolo ('Cpool') +### Definizione di un cluster di lame di calcolo ('Cpool') Il __'Cpool'__ è un raggruppamento di hypervisor VMware ESXi, noto anche come *'cluster ESX'*. -Gli host presenti in un __'Cpool'* appartengono tutti allo stesso tenant e alla stessa zona di disponibilità (AZ). Devono necessariamente avere la stessa classe: -__non è possibile combinare modelli diversi di blade di calcolo all'interno dello stesso cluster__. +Gli host presenti in un __'Cpool'__ appartengono tutti __allo stesso tenant e alla stessa zona di disponibilità__ (AZ). Devono necessariamente avere la stessa classe: +__non è possibile combinare modelli diversi di lame di calcolo all'interno dello stesso cluster__. -Poiché tutte le blade di calcolo vengono fornite con la quantità massima fisica di memoria, viene applicata a livello software una limitazione dell'uso della RAM all'interno del cluster, in modo da garantire che corrisponda alla RAM fatturata. +Poiché tutte le lame di calcolo vengono fornite con la memoria fisica massima, viene applicata a livello di cluster una limitazione software dell'utilizzo della RAM per garantire che corrisponda alla RAM fatturata. -Per impostazione predefinita, ogni blade dispone di 128 GB di memoria abilitata all'interno del __'Cpool'*. +Per impostazione predefinita, ogni lama dispone di 128 Go di memoria abilitata all'interno del __'Cpool'__. -Un __'Cpool'* può contenere al massimo 32 hypervisor. Oltre tale limite, sarà necessario creare un secondo cluster. +Un __'Cpool'__ può contenere al massimo 32 hypervisor. Oltre questo limite, sarà necessario creare un secondo cluster. -Il storage può essere condiviso tra i __'Cpool'__. +Lo storage può essere condiviso tra i __'Cpool'__. -### Memory Allocation for a 'Cpool' +### Allocazione di Memoria per un 'Cpool' -Memory reservation is configurable per cluster. You can reduce or increase the amount of RAM to match your cluster-wide requirements. +La riserva di RAM è configurabile per cluster. È possibile ridurre o aumentare la quantità di RAM per adattarla alle proprie esigenze a livello di cluster. -__Be careful not to exceed an average memory usage of 85% per compute node__. -Indeed, VMware's technology uses a compression-based optimization method that can significantly impact the performance of your workloads and complicate diagnostics. -Similarly, excessive memory pressure on your compute nodes will force the hypervisor to offload part of its memory to disk to meet the needs of virtual machines. +__Attenzione a non superare una media del 85 % di consumo di memoria per blade di calcolo__. +In effetti, la tecnologia VMware utilizzerà un metodo di ottimizzazione basato sulla compressione che può impattare fortemente le prestazioni dei carichi di lavoro e complicare la diagnostica. +Allo stesso modo, una pressione di memoria eccessiva sui blade di calcolo costringerà l'hypervisor a scaricare parte della propria memoria su disco per soddisfare le esigenze delle macchine virtuali. -This situation, known as __'Ballooning'__, severely impacts the performance of all virtual machines located on the affected datastore. -__Diagnosis becomes complicated in this context__, as your monitoring tools will detect issues at the CPU level rather than at the memory or storage level. -Also keep in mind that the first action the hypervisor performs when starting a virtual machine is to create a __memory swap file (.vswap)__ on disk, with a size equal to the virtual machine's memory allocation. You must __take this into account when sizing your storage__. +Questo caso, definito __'Ballooning'__, impatta fortemente tutte le prestazioni delle macchine virtuali situate sullo storage (datastore) interessato. +__La diagnostica risulta complicata in questo contesto__, poiché il monitoraggio registrerà impatti a livello di CPU e non di memoria o storage. +Si tenga inoltre presente che la prima operazione eseguita dall'hypervisor all'avvio di una macchina virtuale è la creazione di __un file di swap di memoria__ (.vswap) su +disco, delle dimensioni della memoria della macchina virtuale interessata. È necessario __tenerne conto nel dimensionamento del proprio storage__. -Each compute node is delivered with 128 GB of memory enabled at the __'Cpool'__ level, although it physically has access to all allocated memory. +Ogni blade di calcolo viene fornito con 128Go di memoria attivata via software a livello di __'Cpool'__, ma dispone fisicamente di tutta la memoria allocabile. -For example, in a cluster of three hosts of type ```vmware:standard:v2```, the RAM reservation at activation of the __'Cpool'__ will be 3 x 128 GB = 384 GB of RAM. -You can extend it up to a maximum of 3 x 384 GB = 1152 GB of memory. +Ad esempio, per un cluster di tre host di tipo ```vmware:standard:v2```, la riserva di RAM all'attivazione del _*'Cpool'* sarà di 3 x 128Go = 384 Go di RAM. +È possibile estenderla al massimo a 3 x 384Go = 1152Go di memoria. - Minimum memory for a 'Cpool' = number of hosts × 128 GB of memory - Maximum memory for a 'Cpool' = number of hosts × physical memory capacity of each compute node + Memoria minima di un 'Cpool' = numero di host X 128Go di memoria + Memoria massima di un 'Cpool' = numero di host X la quantità di memoria fisica del blade di calcolo -### Cloud Temple Virtual Machine Catalogs +### Cataloghi di macchine virtuali Cloud Temple -Cloud Temple provides you with a catalog of `Templates` regularly enriched and updated by our teams. -To date, it includes dozens of `Templates` and images ready to be deployed on your virtual machines. +Cloud Temple mette a disposizione un catalogo di `Templates` regolarmente arricchito e aggiornato dai nostri team. +Comprende attualmente diverse decine di `Templates` e immagini da montare sulle vostre macchine virtuali. ### Aggiornamento degli Hypervisor -Cloud Temple rilascia regolarmente nuovi aggiornamenti per gli hypervisor al fine di applicare i patch di sicurezza. -Tuttavia, l'aggiornamento degli hypervisor rimane di tua responsabilità, poiché non abbiamo visibilità sulle tue esigenze aziendali. +Cloud Temple fornisce regolarmente build per gli hypervisor al fine di garantire l'applicazione delle patch di sicurezza. +Tuttavia, l'aggiornamento degli hypervisor rimane sotto la vostra responsabilità, poiché non abbiamo visibilità sui vostri vincoli aziendali. -Il processo di aggiornamento è completamente automatizzato. Per garantire la continuità del servizio, è richiesto un minimo di due hypervisor per cluster durante l'aggiornamento. Assicurati di disporre delle autorizzazioni necessarie per eseguire queste operazioni. +Il processo di aggiornamento è completamente automatizzato. Per garantire la continuità del servizio, è richiesto un minimo di due hypervisor per cluster durante l'aggiornamento. Assicuratevi di disporre delle autorizzazioni necessarie per eseguire queste operazioni. -### Gestione dell'affinità delle macchine virtuali +### Gestione dell'affinità delle tue macchine virtuali -Le __regole di affinità e anti-affinità__ consentono di controllare la posizione delle macchine virtuali sugli iperhost. +Le __regole di affinità e anti-affinità__ consentono di controllare la posizione delle macchine virtuali sui tuoi ipervisors. Possono essere utilizzate per gestire l'utilizzo delle risorse del tuo __'Cpool'__. -Ad esempio, possono aiutare a bilanciare il carico tra i server o a isolare carichi di lavoro intensivi in termini di risorse. +Ad esempio, possono aiutare a bilanciare il carico di lavoro tra i server o a isolare i carichi di lavoro ad alto consumo di risorse. In un __'Cpool'__ VMware, queste regole sono spesso utilizzate per gestire il comportamento delle macchine virtuali con vMotion. -vMotion permette di spostare macchine virtuali da un host all'altro senza interruzioni del servizio. +vMotion consente di spostare le macchine virtuali da un host all'altro senza interruzione del servizio. -Puoi configurare tramite la gestione delle regole: +Puoi configurare tramite la gestione delle regole : -- __Regole di affinità__: queste regole garantiscono che alcune macchine virtuali vengano eseguite sullo stesso host fisico. - Vengono utilizzate per migliorare le prestazioni mantenendo insieme le macchine virtuali che comunicano frequentemente, - riducendo così la latenza di rete. Le regole di affinità sono utili in scenari in cui le prestazioni sono critiche, - come nel caso di database o applicazioni che richiedono una comunicazione rapida tra i server. +- __Regole di affinità__: Queste regole assicurano che determinate macchine virtuali vengano eseguite sullo stesso host fisico. +Vengono utilizzate per migliorare le prestazioni mantenendo le macchine virtuali che comunicano frequentemente +tra loro sullo stesso server per ridurre la latenza di rete. Le regole di affinità sono utili in scenari +in cui le prestazioni sono critiche, come nel caso di database o applicazioni che richiedono una comunicazione rapida tra i server. -- __Regole di anti-affinità__: al contrario, queste regole garantiscono che alcune macchine virtuali non vengano eseguite - sullo stesso host fisico. Sono importanti per la disponibilità e la resilienza, ad esempio, - per evitare che tutte le macchine critiche vengano colpite in caso di guasto di un singolo server. - Le regole di anti-affinità sono fondamentali per le applicazioni che richiedono un'alta disponibilità, - come negli ambienti di produzione dove la tolleranza ai guasti è una priorità. - Ad esempio, non desideri che i tuoi due server Active Directory si trovino sullo stesso iperhost. +- __Regole di anti-affinità__: Al contrario, queste regole garantiscono che determinate macchine virtuali non vengano eseguite +sullo stesso host fisico. Sono importanti per la disponibilità e la resilienza, ad esempio, +per evitare che macchine critiche vengano tutte interessate in caso di guasto di un singolo server. +Le regole di anti-affinità sono cruciali per le applicazioni che richiedono un'alta disponibilità, +come negli ambienti di produzione dove la tolleranza ai guasti è una priorità. +Ad esempio, non desideri che i tuoi due Active Directory si trovino sullo stesso ipervisor. Durante la creazione di una regola, definisci il tipo di regola (affinità / anti-affinità), il nome della regola, -lo stato di attivazione (__'Statut'__) e le macchine coinvolte nel tuo cluster di iperhost. +il suo stato di attivazione (__'Stato'__) e le macchine interessate del tuo cluster di ipervisors. -*Nota: le regole di affinità/anti-affinità proposte nella console sono regole che riguardano le macchine virtuali tra loro (non regole tra iperhost e macchine virtuali).* +*Nota: le regole di affinità/anti-affinità proposte nella console sono regole relative alle macchine virtuali tra loro (nessuna regola tra ipervisors e macchine virtuali).* -### Replicazione asincrona delle macchine virtuali nell'ambiente VMware +### Replica asincrona delle tue macchine virtuali in ambiente VMware -La replicazione asincrona delle macchine virtuali è un meccanismo che consiste nel trasferire, a intervalli regolari, le operazioni di scrittura dallo hypervisor sorgente al sito di standby. +La replica asincrona delle tue macchine virtuali è un meccanismo che consiste nell'inviare a livello dell'iperviseur di origine le operazioni di scrittura sul sito standby a intervalli di tempo regolari. -Dopo una copia iniziale calda di tutto il storage attivo sul sito di standby, vengono trasferite solo le scritture a intervalli regolari sul sito in standby. -L'intervallo dipende dal volume di scrittura (da ogni ora a ogni 24 ore). +Dopo una copia iniziale a caldo dell'intero storage attivo sul sito standby, solo le scritture vengono inviate a intervalli regolari sul sito in standby. +Questo intervallo dipende dal volume di scrittura (da ogni ora a ogni 24 ore). -La replicazione delle macchine virtuali si basa sul meccanismo di snapshot istantanei dello hypervisor. A questo titolo, -questa soluzione presenta gli stessi inconvenienti, in particolare la sensibilità al volume di scrittura della macchina virtuale, -dato che il processo di snapshot istantaneo è un meccanismo ricorsivo per la chiusura dello snapshot. +La replica delle macchine virtuali si basa sul meccanismo di snapshot dell'iperviseur. A questo titolo, +questa soluzione presenta gli stessi inconvenienti, in particolare la sensibilità al volume di scritture della macchina virtuale, +il processo di snapshot essendo un meccanismo ricorsivo per la finalizzazione dello snapshot. -Un esempio tipico di macchina che non supporta il meccanismo di replicazione delle macchine virtuali è un -server FTP che riceve flussi in tempo reale da telecamere di sorveglianza. __La macchina è costantemente in scrittura e non sarà -in grado di chiudere uno snapshot istantaneo senza sospendere il sistema operativo per un periodo significativo -(alcune decine di minuti)__. Se lo hypervisor non riesce a chiudere lo snapshot istantaneo, eseguirà esattamente questo comportamento, -senza possibilità di intervento, a meno di corrompere la macchina virtuale. +L'esempio tipico di macchina che non supporta il meccanismo di replica delle macchine virtuali è un +server FTP che riceve i flussi in tempo reale delle telecamere di sorveglianza. __La macchina passa il suo tempo a scrivere e non sarà +in grado di finalizzare uno snapshot senza mettere in pausa il sistema operativo per un periodo di tempo significativo +(decine di minuti)__. Se l'iperviseur non riesce a finalizzare lo snapshot, farà esattamente questo, +senza possibilità di intervenire se non corrompendo la macchina virtuale. | SLA | Descrizione | |-----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------| -| RPO da 1H a 24H | In caso di incidente nel datacenter principale, la quantità massima di dati persi corrisponde a quelli dell'ultimo trasferimento delle scritture sul sito di standby. | -| RTO < 15 min | Operazione di avvio della macchina virtuale arrestata sul sito remoto | +| RPO da 1H a 24H | In caso di disastro nel datacenter principale, la quantità massima di dati persa è quella dell'ultimo invio delle scritture sul sito standby. | +| RTO < 15mn | Operazione di avvio della macchina virtuale arrestata sul sito remoto | -In caso di necessità, oppure in caso di guasto su una macchina del sito principale, la macchina specchio sul sito di standby viene attivata. -Il ripristino dell'attività richiede che sul sito di standby sia stato riservato calcolo e RAM in standby. È -necessario disporre dello stesso spazio di storage sul sito passivo rispetto al sito attivo. +In caso di necessità, o in caso di guasto su una macchina del sito principale, la macchina mirror sul sito standby viene attivata. +Il ripristino dell'attività richiede di aver riservato sul sito standby risorse di calcolo e RAM in standby. È +necessario disporre dello stesso spazio di storage sul sito passivo che sul sito attivo. -| Riferimento | Unità | Limite massimo IOPS / LUN | Larghezza di banda max / LUN | SKU | +| Riferimento | Unità | SKU | |-----------------------------------|-------|-------------------------------------------------| -| PRA - Replication VMware inter-AZ | 1 vm | csp:(region):iaas:vmware:licence:replication:v1 | +| PRA - Replica VMware inter-AZ | 1 vm | csp:(region):iaas:vmware:licence:replication:v1 | -*__Nota__ : Il calcolo del RPO minimo deve essere definito in base al tasso di modifica sulla macchina virtuale.* +*__Nota__ : Il calcolo del RPO minimo deve essere definito in base al tasso di cambiamento sulla macchina virtuale.* -## Backup delle macchine virtuali +## Backup di macchine virtuali -Cloud Temple offre un'__architettura nativa e non rimovibile per il backup incrociato__ (obbligatoria per la certificazione secnumcloud francese). +Cloud Temple propone __un'architettura di backup incrociato nativa e non disattivabile__ (è obbligatoria nella qualifica secnumcloud francese). -I backup vengono memorizzati in un'area di disponibilità e in un datacenter fisico diverso da quello che ospita la macchina virtuale. Essi sono crittografati tramite un algoritmo a chiave simmetrica AES a 256 bit (modalità cipher `xts-plain64`) per garantire la riservatezza dei dati. +I backup sono archiviati in una zona di disponibilità e su un datacenter fisico diverso da quello che ospita la macchina virtuale. Sono crittografati tramite un algoritmo a chiave simmetrica AES a 256 bit (cipher mode `xts-plain64`) per garantire la riservatezza dei dati. -Ciò permette di proteggersi in caso di guasto grave nel datacenter di produzione e di ripristinare su un datacenter secondario (ad esempio in caso di incendio). +Ciò consente di proteggersi in caso di guasto grave nel datacenter di produzione e di ripristinare su un datacenter secondario (incendio per esempio). -Questa soluzione include: +Questa soluzione comprende : -- Backup remoto in tempo reale di tutti i dischi, -- Presentazione e avvio immediato di una macchina virtuale dall'infrastruttura di storage di massa e ricarico in tempo reale sui SAN di produzione, -- Ripristino parziale di file dal backup, -- Una retention limitata esclusivamente dall'allocazione di spazio di storage di massa. +- Il backup fuori sede in hot backup di tutti i dischi, +- La presentazione e l'avvio istantaneo di una macchina virtuale dall'infrastruttura di mass storage e il caricamento in hot backup sui SAN di produzione, +- Il ripristino parziale di file dal backup, +- Una retention limitata esclusivamente dall'allocazione dello spazio di storage di massa. -L'infrastruttura di backup si basa sulla soluzione *IBM Spectrum Protect Plus*, una soluzione senza agente, semplice da usare, che permette l'automazione dei processi di backup oltre a un'ottimizzazione dello spazio di storage di massa. +Questa infrastruttura di backup si basa sulla soluzione *IBM Spectrum Protect Plus*, una soluzione ad architettura senza agente, +semplice da usare e che consente l'automazione dei processi di backup oltre a un'ottimizzazione dello spazio di mass storage. -Le velocità di backup e ripristino dipendono dal tasso di cambiamento negli ambienti. La politica di backup è configurabile tramite [la Console Cloud Temple](../console/console.md) per ogni macchina virtuale. +Le velocità di backup e ripristino dipendono dal tasso di cambiamento negli ambienti. +La politica di backup è configurabile tramite [la Console Cloud Temple](../console/console.md) per ogni macchina virtuale. *__Nota:__* -*__Alcune macchine virtuali non sono compatibili con questa tecnologia di backup__, che utilizza i meccanismi di snapshot istantanei dell'ipervisore. Si tratta tipicamente di macchine con carichi di scrittura costanti sul disco. L'ipervisore non riesce a chiudere lo snapshot istantaneo, il che obbliga a bloccare la macchina virtuale per completare l'operazione di chiusura. Questo blocco può durare diverse ore e non è interrompibile.* +*__Alcune macchine virtuali non sono compatibili con questa tecnologia di backup__ che utilizza i meccanismi di snapshot dell'ipervisors. +Si tratta tipicamente di macchine i cui carichi di scrittura su disco sono costanti. Non è possibile per l'ipervisors chiudere lo snapshot, il che +obbliga a mettere in freeze la macchina virtuale per poter completare l'operazione di chiusura. Questo freeze può durare diverse ore e non può essere interrotto.* -*La soluzione consiste quindi nell'escludere il disco soggetto a scritture continue e nel salvare i dati tramite un'altra metodologia.* +*La soluzione consiste quindi nell'escludere il disco che è soggetto a scritture permanenti e nel backup dei dati tramite un altro metodo.* -| Riferimento | Unità | Limite massimo IOPS / LUN | Larghezza di banda max / LUN | SKU | +| Riferimento | Unità | SKU | | ------------------------------------------------------- | ----- | ------------------------------ | -| SAUVEGARDE - Accesso al servizio IBM Spectrum Protect Plus | 1 VM | csp:(region):iaas:backup:vm:v1 | +| BACKUP - Accesso al servizio IBM Spectrum Protect Plus | 1 VM | csp:(region):iaas:backup:vm:v1 | -#### Create a backup policy +#### Creare una politica di backup -To create a new backup policy, you must submit a request to support. Support is accessible via the buoy icon in the top-right corner of the window. +Per aggiungere una nuova politica di backup, è necessario inviare una richiesta al supporto. Il supporto è accessibile tramite l'icona del salvagente in alto a destra della finestra. -Creating a new backup policy is done through a __service request__ specifying: +La creazione di una nuova politica di backup viene effettuata tramite __una richiesta di servizio__ che indica: - Your Organization's name - A contact name, email address, and phone number to finalize the configuration - The tenant name - The backup policy name - The retention characteristics (x days, y weeks, z months, ...) + Il nome della Vostra Organizzazione + Il nome di un contatto con la sua email e numero di telefono per finalizzare la configurazione + Il nome del tenant + Il nome della politica di backup + Le caratteristiche (x giorni, y settimane, z mesi, ...) -## Advanced Data Protection (HSM/KMS) +## Protezione avanzata dei dati (HSM/KMS) -Cloud Temple offers a __advanced virtual machine encryption__ solution based on Hardware Security Modules (HSM) and a Key Management Service (KMS). This feature enhances the protection of sensitive data through centralized and secure key management, seamlessly integrated into the SecNumCloud environment. +Cloud Temple propone una soluzione di __crittografia avanzata delle macchine virtuali__ basata su moduli di sicurezza hardware (HSM) e un servizio di gestione delle chiavi (KMS). Questa funzionalità consente di rafforzare la protezione dei dati sensibili grazie a una gestione centralizzata e sicura delle chiavi di crittografia, direttamente integrata nell'ambiente SecNumCloud. ### Architettura tecnica -La soluzione si basa su un'infrastruttura di sicurezza robusta composta da: +La soluzione si basa su un'infrastruttura di sicurezza robusta composta da : -- __HSM (Hardware Security Module)__ : moduli __Thales Luna S790__ certificati __FIPS 140-3 livello 3__ +- __HSM (Hardware Security Module)__ : Moduli __Thales Luna S790__ certificati __FIPS 140-3 livello 3__ - __KMS (Key Management System)__ : __Thales CipherTrust Manager__ per la gestione centralizzata delle chiavi -- __Integrazione VMware__ : comunicazione tramite il protocollo __KMIP__ (Key Management Interoperability Protocol) +- __Integrazione VMware__ : Comunicazione tramite il protocollo __KMIP__ (Key Management Interoperability Protocol) -#### High Availability Deployment +#### Distribuzione ad alta disponibilità -The HSM infrastructure is deployed across __three availability zones__ in the FR1 region: +L'infrastruttura HSM è distribuita su __tre zone di disponibilità__ della regione FR1 : - PAR7S -- TH3S +- TH3S - AZ07 -This distribution ensures maximum __high availability__ and __resilience__ of the encryption service. +Questa distribuzione garantisce una __alta disponibilità__ e una __resilienza__ massima del servizio di crittografia. ### Funzionamento e gerarchia delle chiavi Il sistema utilizza una __gerarchia di chiavi crittografiche__ per garantire la sicurezza dei dati: | Livello | Tipo di chiave | Descrizione | Posizione | -|--------|----------------|-------------|-----------| -| 1 | __Root of Trust (RoT)__ | Chiave principale gestita da KMS | HSM Luna | -| 2 | __Domain Key (DK)__ | Chiave di dominio per cliente (isolamento multi-tenant) | HSM Luna | -| 3 | __Key Encryption Key (KEK)__ | Chiave di cifratura per VM | CipherTrust Manager | -| 4 | __Data Encryption Key (DEK)__ | Chiave di dati per VM | VMware ESXi | +|--------|-------------|-------------|--------------| +| 1 | __Radice della fiducia (RoT)__ | Chiave principale per KMS | HSM Luna | +| 2 | __Chiave di dominio (DK)__ | Chiave di dominio per cliente (isolamento multi-tenant) | HSM Luna | +| 3 | __Chiave di crittografia delle chiavi (KEK)__ | Chiave di cifratura per VM | CipherTrust Manager | +| 4 | __Chiave di crittografia dei dati (DEK)__ | Chiave di dati per VM | VMware ESXi | #### Processo di crittografia -1. __Generazione__: VMware ESXi genera una DEK unica per ogni macchina virtuale -2. __Protezione__: La DEK viene crittografata dalla KEK archiviata in CipherTrust Manager -3. __Sicurezza__: La KEK è a sua volta protetta dalla gerarchia delle chiavi HSM -4. __Archiviazione__: La DEK crittografata viene archiviata insieme ai file di configurazione della VM +1. __Generazione__ : VMware ESXi genera una DEK univoca per ogni macchina virtuale +2. __Protezione__ : La DEK viene crittografata dalla KEK archiviata in CipherTrust Manager +3. __Sicurezza__ : La KEK è a sua volta protetta dalla gerarchia di chiavi HSM +4. __Archiviazione__ : La DEK crittografata viene archiviata insieme ai file di configurazione della VM ### Sicurezza e conformità #### Certificazioni -- __FIPS 140-3 livello 3__ : Certificazione di livello più elevato per i HSM -- __Common Criteria EAL4+__ : Valutazione di sicurezza avanzata +- __FIPS 140-3 livello 3__ : Certificazione di più alto livello per HSM +- __Criteri Comuni EAL4+__ : Valutazione della sicurezza avanzata - __SecNumCloud__ : Qualifica ANSSI integrata nell'ambiente Cloud Temple -#### Multi-tenant isolation +#### Isolamento multi-tenant -- __Cryptographic separation__: Each client has an isolated KMS domain -- __Dedicated keys__: A specific Domain Key per client -- __Audit and traceability__: Full logging of actions per domain +- __Separazione crittografica__ : Ogni client dispone di un dominio KMS isolato +- __Chiavi dedicate__ : Una Domain Key specifica per client +- __Audit e tracciabilità__ : Registrazione completa delle azioni per dominio ### Attivazione e utilizzo -Il cifratura delle macchine virtuali può essere attivata __con un solo clic__ dalla [Console](../console/console.md). +La crittografia delle macchine virtuali si attiva __con un solo clic__ dalla [Console](../console/console.md). -Per una procedura dettagliata con schermate, consulta il [tutorial sul cifratura delle macchine virtuali](tutorials/vm_encryption.md). +Per una procedura dettagliata con screenshot, consulta il [tutorial sulla crittografia delle macchine virtuali](tutorials/vm_encryption.md). #### Prerequisiti -- __Fornitore di chiave configurato__: deve essere abilitato un fornitore HSM/KMS sulla vStack -- __Macchina virtuale spenta__: la VM deve essere arrestata prima del cifratura -- __Nessuna replica attiva__: la VM non deve essere in replica (incompatibile con Global Mirror) -- __Nessun snapshot__: non deve esserci alcun snapshot presente -- __Sottoscrizione al servizio__: è necessaria la sottoscrizione al servizio di protezione avanzata +- __Fornitore di chiavi configurato__ : Un fornitore HSM/KMS deve essere attivato sulla vStack +- __Macchina virtuale spenta__ : La VM deve essere arrestata prima della crittografia +- __Nessuna replica attiva__ : La VM non deve essere replicata (incompatibile con Global Mirror) +- __Nessuno snapshot__ : Non devono essere presenti snapshot +- __Sottoscrizione al servizio__ : Il servizio di protezione avanzata deve essere sottoscritto -*__Nota__: per ulteriori dettagli sui prerequisiti e sulla procedura completa, fare riferimento alla [guida al cifratura delle VM](tutorials/vm_encryption.md).* +*__Nota__ : Per ulteriori dettagli sui prerequisiti e sulla procedura completa, fare riferimento alla [guida alla crittografia delle VM](tutorials/vm_encryption.md).* ### Limitazioni e considerazioni -#### Compatibility +#### Compatibilità -- __Global Mirror__ : Encrypted virtual machines are __not compatible__ with Global Mirror replication -- __Restore__ : Backups of encrypted VMs retain their cryptographic protection -- __Export__ : Exporting encrypted VMs requires specific procedures +- __Global Mirror__ : Le macchine virtuali crittografate non sono __compatibili__ con la replica Global Mirror +- __Ripristino__ : I backup di VM crittografate mantengono la protezione crittografica +- __Esportazione__ : L'esportazione di VM crittografate richiede procedure specifiche #### Prestazioni -- __Impatto minimo__: Il crittografia hardware garantisce prestazioni ottimali -- __Trasparenza__: Nessun impatto sul funzionamento delle applicazioni +- __Impatto minimo__ : La crittografia hardware garantisce prestazioni ottimali +- __Trasparenza__ : Nessun impatto sul funzionamento delle applicazioni -### Use cases consigliati +### Casi d'uso consigliati Questa soluzione di protezione avanzata è particolarmente adatta per: -- __Dati sensibili__: informazioni personali, dati finanziari, segreti industriali -- __Conformità normativa__: requisiti RGPD, HIPAA, PCI-DSS, ISO 27001, PDIS -- __Settori critici__: banche, assicurazioni, sanità, difesa -- __Sovranità digitale__: protezione contro accessi non autorizzati, anche in caso di compromissione +- __Dati sensibili__ : Informazioni personali, dati finanziari, segreti industriali +- __Conformità normativa__ : Requisiti GDPR, HIPAA, PCI-DSS, ISO 27001, PDIS +- __Settori critici__ : Banca, assicurazione, sanità, difesa +- __Sovranità digitale__ : Protezione contro accessi non autorizzati, anche in caso di compromissione -| Riferimento | Unità | Limite massimo IOPS / LUN | Larghezza di banda max / LUN | SKU | -|-------------|-------|-----| +| Riferimento | Unità | SKU | +|-----------|-------|-----| | PROTEZIONE AVANZATA - Crittografia VM tramite HSM/KMS | 1 VM | csp:(region):iaas:vmware:encryption:hsm:v1 | *__Nota__ :* -- *Il servizio richiede un abbonamento specifico e non è incluso nell'offerta IaaS standard* -- *La gestione delle chiavi rimane interamente sotto il controllo di Cloud Temple nell'ambiente SecNumCloud* -- *Le chiavi di crittografia non lasciano mai l'infrastruttura francese e sovrana* +- *Il servizio richiede una sottoscrizione specifica e non è incluso nel prodotto IaaS standard* +- *La gestione delle chiavi rimane interamente sotto il controllo di Cloud Temple nell'ambiente SecNumCloud* +- *Le chiavi di crittografia non lasciano mai l'infrastruttura francese e sovrana* \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/iaas_vmware.md b/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/iaas_vmware.md index 80095eca..0cf41730 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/iaas_vmware.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/iaas_vmware.md @@ -2,22 +2,24 @@ title: Panoramica --- -L'offerta **IaaS Cloud Temple**, alimentata da VMware, è progettata per soddisfare le esigenze critiche delle aziende in termini di prestazioni, sicurezza e continuità operativa. Con risorse dedicate, un'infrastruttura qualificata **SecNumCloud**, e opzioni completamente automatizzate, questa soluzione garantisce un'affidabilità ottimale per i tuoi carichi di lavoro sensibili. +# IaaS VMware + +L'**offerta IaaS VMware** è progettata per soddisfare le esigenze critiche delle aziende in termini di prestazioni, sicurezza e continuità operativa. Con risorse dedicate, un'infrastruttura qualificata **SecNumCloud** e opzioni completamente automatizzate, questo servizio garantisce un'affidabilità ottimale per i tuoi carichi di lavoro sensibili.

Concetti

-

Scopri le basi e i principi essenziali per comprendere e padroneggiare la nostra infrastruttura.

+

Scopri le basi e i principi fondamentali per comprendere e gestire la nostra infrastruttura.

Esplora i concetti →
-

Quickstart

+

Avvio rapido

Inizia rapidamente con le nostre risorse seguendo istruzioni chiare e semplici.

Avvia il Quickstart →
-

Tutorials

-

Impara passo dopo passo a configurare e utilizzare i nostri servizi con guide dettagliate.

+

Tutorial

+

Impara passo dopo passo a configurare e utilizzare i nostri servizi grazie a guide dettagliate.

Scopri i tutorial →
@@ -25,7 +27,7 @@ L'offerta **IaaS Cloud Temple**, alimentata da VMware, è progettata per soddisf ## Piattaforme di acquisto
-

Sei un'azienda del settore pubblico? L'offerta IaaS Cloud Temple è accessibile tramite:

+

Sei un operatore del settore pubblico? Il prodotto IaaS Cloud Temple è accessibile tramite:

@@ -40,7 +42,7 @@ L'offerta **IaaS Cloud Temple**, alimentata da VMware, è progettata per soddisf

- Il mercato CAIH per il settore medico + Il mercato CAIH per il settore sanitario

@@ -48,4 +50,4 @@ L'offerta **IaaS Cloud Temple**, alimentata da VMware, è progettata per soddisf Scopri di più → -
+
\ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/quickstart.md b/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/quickstart.md index 560cb164..dc44fae7 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/quickstart.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/quickstart.md @@ -34,7 +34,7 @@ import shivaCpool_007 from '@site/docs/iaas_vmware/images/shiva_cpool_007.png' import shivaCpool_008Build from '@site/docs/iaas_vmware/images/shiva_cpool_008_build.png' import shivaCpool_008Firm from '@site/docs/iaas_vmware/images/shiva_cpool_008_firm.png' import shivaCpool_006 from '@site/docs/iaas_vmware/images/shiva_cpool_006.png' -import shivaSupport from '@site/docs/./console/images/shiva_support.png' +import shivaSupport from '@site/docs/console/images/shiva_support.png' import shivaVmPolitiquesBackupAssignMandatory from '@site/docs/iaas_vmware/images/shiva_vm_politiques_backup_assign_mandatory.png' import shivaVmPolitiquesBackup from '@site/docs/iaas_vmware/images/shiva_vm_politiques_backup.png' import shivaVmDisquesVirtuelsPolitiques from '@site/docs/iaas_vmware/images/shiva_vm_disques_virtuels_politiques.png' @@ -56,96 +56,97 @@ import iaasVmwareEsxMemory from '@site/docs/iaas_vmware/images/iaas_vmware_esx_m ### Gestione delle macchine virtuali -L'interfaccia di gestione delle macchine virtuali è disponibile nella Console nel menu __'IaaS'__ situato sulla barra verde a sinistra dello schermo. +L'interfaccia di gestione delle tue macchine virtuali è disponibile nella Console nel menu __'IaaS'__ situato nella barra verde a sinistra dello schermo. ### Elenco delle macchine virtuali -Nella sezione __'Macchine virtuali'__, puoi accedere all'elenco delle tue macchine virtuali ospitate sul tuo Cloud di fiducia. +Nella sezione __'Macchine virtuali'__, hai accesso all'elenco delle tue macchine virtuali ospitate sul tuo Cloud di fiducia. -Per ciascuna macchina virtuale, hai accesso alle seguenti informazioni: +Hai accesso alle seguenti informazioni, per ogni macchina virtuale: - il nome, - i tag assegnati, -- lo stato (spenta, accesa, in elaborazione, host disconnesso o non valido), -- il manager (nell'ambiente VMware, il Vcenter associato), +- lo stato (spento, acceso, in elaborazione, host disconnesso o invalid), +- il gestore (in ambiente VMware, il Vcenter associato), - il sistema operativo, -- la quantità di CPU virtuali (vCPU), -- la quantità di memoria virtuale (vRAM). +- La quantità di CPU virtuali (vCPU), +- La quantità di memoria virtuale (vRAM). ### Azioni sulle macchine virtuali -Le seguenti azioni sono disponibili da questa interfaccia: +Le seguenti azioni sono possibili da questa interfaccia : -- Aggiornare l'elenco delle macchine virtuali; -- Esportare l'elenco nel formato CSV; -- Filtrare l'elenco; -- Cerca una macchina virtuale in base al nome; +- Aggiornare l'elenco delle macchine virtuali ; +- Esportare l'elenco nel formato CSV ; +- Filtrare l'elenco ; +- Cercare una macchina virtuale per nome ; - Creare una nuova macchina virtuale. -__Un banner di avviso può essere presente in cima all'elenco__: indica che sono state attivate delle allarmi critiche su una o più delle tue macchine virtuali. -Il pulsante __'Visualizza'__ permette di consultare le macchine virtuali interessate da questa notifica. +__Un banner di allerta può essere presente in alto nell'elenco__ : indica che sono state attivate allarmi critici su una o più delle tue macchine virtuali. +Il pulsante __'Visualizza'__ consente di consultare le macchine virtuali interessate da questa notifica. -Quando fai clic sulla freccia verde a destra dell'elenco per una macchina virtuale: +Quando fai clic sulla freccia a discesa verde sulla destra dell'elenco per una macchina virtuale : -accedi a tutte le informazioni relative a tale macchina: +Accedi a tutte le informazioni relative a essa : -Un banner rapido permette di eseguire le seguenti azioni: +Una barra rapida consente di eseguire le seguenti azioni : -- Accendere la macchina virtuale; -- Spegnere la macchina virtuale; -- Riavviare la macchina virtuale; -- Modificare le opzioni di alimentazione del sistema operativo ospite; -- Aprire la console; -- Montare un ISO; -- Smontare un ISO; -- Clonare la macchina virtuale; -- Spostarla (vMotion); -- Rinominarla; +- Accendere la macchina virtuale ; +- Spegnere ; +- Riavviare ; +- Modificare le opzioni di alimentazione del sistema operativo guest ; +- Aprire la console ; +- Montare un ISO ; +- Smontare un ISO ; +- Clonare la macchina virtuale ; +- Spostarla (vMotion) ; +- Rinominarla ; - Eliminarla. -Una vista rapida offre una visualizzazione del __storage__, del __CPU__ e della __RAM__ della macchina virtuale. +Una vista rapida offre una visualizzazione di __storage__, di __CPU__ e di __RAM__ della macchina virtuale. -Nella scheda __'Informazioni generali'__, trovi informazioni dettagliate relative alla tua macchina virtuale, come il sistema operativo, il posizionamento fisico (datacenter, datastore, ecc.), la RAM, il CPU, gli indirizzi IP, i log e altro. +Nella scheda __'Informazioni generali'__, trovi informazioni dettagliate relative alla tua macchina virtuale, come il suo SO, la sua posizione fisica (datacenter, datastore, ecc.), la RAM, la CPU, gli indirizzi IP, i log e altro. -Da questa vista puoi eseguire le seguenti azioni: +Da questa vista, puoi eseguire le seguenti azioni : - Modificare il sistema operativo (la macchina virtuale deve essere spenta), -- Aggiornare la versione del hardware (la macchina virtuale deve essere spenta), -- Modificare la RAM o il CPU. +- Aggiornare la versione dell'hardware (la macchina virtuale deve essere spenta), +- Modificare la RAM o la CPU. -Una scheda __'Avanzate'__ permette di consultare informazioni più specifiche, come quelle relative a "VMware Tools", alla versione hardware, al manager, ecc. +Una scheda __'Avanzate'__ consente di consultare informazioni più specifiche come i dettagli "VMware Tools", la versione hardware, il manager, ecc... -### Modifica RAM o CPU di una macchina virtuale +### Modifica della RAM o della CPU di una macchina virtuale -Vai alla scheda __'Macchine Virtuali'__, visualizza i dettagli di una macchina virtuale, seleziona la scheda __'Informazioni generali'__ e fai clic sul pulsante di modifica della variabile da modificare: +Vai alla scheda __'Macchine Virtuali'__, visualizza i dettagli di una macchina virtuale, +seleziona la scheda __'Informazioni generali'__ e fai clic sul pulsante di modifica della variabile da modificare : -### Disk modes +### Le modalità dei dischi -You can add different disk modes: +È possibile aggiungere diverse modalità dei dischi: -- __Persistent__: Changes are immediately and permanently written to the virtual disk. __This is the recommended mode.__ -- __Non-persistent independent__: Changes made to the virtual disk are recorded in a new log file and deleted when the virtual machine is powered off. Not affected by snapshots. __Not supported by backup.__ -- __Persistent independent__: Changes are immediately and permanently written to the virtual disk. Not affected by snapshots. __Not supported by backup.__ +- __Persistente__ : Le modifiche vengono scritte immediatamente e definitivamente sul disco virtuale. __Questa è la modalità consigliata.__ +- __Indipendente non persistente__ : Le modifiche apportate al disco virtuale vengono registrate in un nuovo log e eliminate allo spegnimento. Non influenzato dagli snapshot. __Non è supportato dal backup.__ +- __Indipendente persistente__ : Le modifiche vengono scritte immediatamente e definitivamente sul disco virtuale. Non influenzato dagli snapshot. __Non è supportato dal backup.__ ### Gestione dei controller della macchina virtuale @@ -153,144 +154,145 @@ You can add different disk modes: -Le macchine virtuali possono essere dotate di controller SCSI e NVMe, con un limite massimo di 4 controller per tipo. Ogni controller può gestire fino a 15 dischi. +Le macchine virtuali possono essere dotate di controller SCSI e NVMe, con un limite di 4 controller per ciascun tipo. Ogni controller può gestire fino a 15 dischi. Un controller SCSI può essere configurato con diversi sottotipi: Para Virtual, Bus Logic, LSI Logic o LSI Logic SAS. -Il controller Para Virtual si distingue per la sua ampia capacità. Può supportare fino a 64 dischi quando la versione hardware della macchina virtuale è compatibile con un ESXi versione 6.7 o successiva. +Il controller Para Virtual si distingue per la sua capacità estesa. Può supportare fino a 64 dischi quando la versione hardware della macchina virtuale è compatibile con ESXi versione 6.7 o successiva. -> __Importante__: Se si desidera modificare il tipo di un controller Para Virtual che possiede più di 15 dischi, sarà necessario prima staccare i dischi dai relativi slot. +> __Importante__ : Se si desidera modificare il tipo di un controller Para Virtual che dispone di più di 15 dischi, sarà necessario innanzitutto scollegare i dischi dagli slot interessati. ### Console di una macchina virtuale -La console di una macchina virtuale è accessibile dalla lista delle macchine virtuali facendo clic sull'icona __'Console'__: +La console di una macchina virtuale è accessibile dall'elenco delle macchine virtuali facendo clic sull'icona __'Console'__: -Si aprirà un nuovo tab del tuo browser, che mostrerà la console della tua macchina, basata su un client __VNC__: +Si apre una nuova scheda del browser e viene visualizzata la console della tua macchina, basata su un client __VNC__: -Nel menu __VNC__ è possibile: +È possibile nel menu __VNC__: - richiedere l'invio di tasti particolari, -- forzare un mapping della tastiera (nel caso in cui non sia stato possibile identificare correttamente la tua tastiera), -- aprire un campo di testo trasmissibile alla macchina. Questo metodo sostituisce il vecchio appunti non funzionante, -- passare alla modalità schermo intero. +- forzare una mappatura della tastiera (nel caso in cui non sia stato possibile identificare correttamente la tua tastiera), +- aprire un campo di testo trasmissibile alla macchina. Questo metodo sostituisce il vecchio sistema degli appunti non funzionante, +- passare alla modalità a schermo intero. -__Nota__: -Lo scaling della finestra avviene automaticamente. +__Nota__ : +Il ridimensionamento della finestra è automatico. -#### Keyboard layout support +#### Supporto layout tastiera -The input entered in the console depends on the keyboard language of your web browser, the keyboard language of the virtual machine, and whether the 'enforce keyboard' option on the left side of the screen is enabled. Below is a summary of the possible scenarios: +La digitazione eseguita nella console dipende dal layout della tastiera del browser web, dal layout della tastiera della macchina virtuale e dall'attivazione o meno dell'opzione 'enforce keyboard' a sinistra dello schermo. Di seguito una sintesi delle situazioni possibili : -| Physical machine keyboard language (input) | Virtual machine keyboard language | 'Enforce keyboard' option selected | Result (output) | -| -------------------------------------------- | --------------------------------- | ---------------------------------- | ------------------------ | -| French | French | No | ✅ | -| French | French | Yes | Not recommended | -| French | English | No | English | -| French | English | Yes | ✅ | -| English | French | No | French | -| English | French | Yes | ✅ | -| English | English | No | ✅ | -| English | English | Yes | Not recommended | +| Layout della tastiera della macchina fisica (input) | Layout della tastiera della macchina virtuale | Opzione 'enforce keyboard' selezionata | Risultato (output) | +| ------------------------------------------------- | ----------------------------------------- | -------------------------------------- | ------------------------ | +| Francese | Francese | No | ✅ | +| Francese | Francese | Sì | Non consigliato | +| Francese | Inglese | No | Inglese | +| Francese | Inglese | Sì | ✅ | +| Inglese | Francese | No | Francese | +| Inglese | Francese | Sì | ✅ | +| Inglese | Inglese | No | ✅ | +| Inglese | Inglese | Sì | Non consigliato | -__Note__: +__Nota__ : -- If certain characters do not appear during manual input, you can try using the clipboard. +- Se alcuni caratteri non passano durante la digitazione manuale, puoi provare tramite il clipboard. #### Funzionamento degli appunti -Questa funzionalità ti permette di inviare una stringa di caratteri completa alla tua macchina virtuale. È importante notare che il pulsante "enforce keyboard" influisce sul modo in cui questa stringa di caratteri verrà trasmessa alla tua macchina virtuale. Se durante l'inserimento nella console riscontri che l'opzione "enforce keyboard" è necessaria, assicurati di attivarla prima di utilizzare la funzione degli appunti. -Questa funzionalità può essere utilizzata per inviare una password, un comando o il contenuto di un file di configurazione, ad esempio: +Questa funzionalità consente di inviare l'intera stringa di caratteri alla tua macchina virtuale. È importante notare che il tasto "enforce keyboard" influisce sul modo in cui questa stringa di caratteri +verrà trasmessa alla tua macchina virtuale. Se durante la digitazione nella console riscontri che l'opzione "enforce keyboard" è necessaria, ricordati di attivarla prima di utilizzare gli appunti. +Questa funzionalità può essere utilizzata per l'invio di una password, di un comando o del contenuto di un file di configurazione, ad esempio: -Al clic sul pulsante "Incolla", il contenuto del campo di testo viene inviato alla tua macchina virtuale. +Al clic sul pulsante "Paste", il contenuto del tuo campo di testo viene inviato alla tua macchina virtuale. -### Cloud Temple Virtual Machine Catalogs +### Cataloghi di macchine virtuali Cloud Temple -Cloud Temple vous met à disposition un catalogue de `Templates` régulièrement enrichi et mis à jour par nos équipes. -Il comprend actuellement plusieurs dizaines de `Templates` et images pouvant être déployées sur vos machines virtuelles. +Cloud Temple mette a disposizione un catalogo di `Templates` regolarmente arricchito e aggiornato dai nostri team. +Attualmente comprende diverse decine di `Templates` e immagini da montare sulle vostre macchine virtuali. -Pour publier un ISO/OVF, rendez-vous dans la vue __'Catalogue'__ et cliquez sur le bouton __'Publier des fichiers'__ en haut de la page : +Per pubblicare un ISO/OVF, è necessario accedere alla vista __'Catalogo'__ e fare clic sul pulsante __'pubblica file'__ in alto nella pagina : -Il est possible de transformer une machine virtuelle en modèle et de l'exporter dans le catalogue. Pour ce faire, sélectionnez une machine virtuelle et utilisez le bouton d'action __'Clone'__ : +È possibile trasformare una VM in un modello ed esportarla nel catalogo. A tal fine, selezionare una macchina virtuale e utilizzare il pulsante di azione __'clone'__ : -Sélectionnez __'Exporter en vm-template'__ : +Selezionare __'Esporta come vm-template'__ : -Renseignez ensuite les informations nécessaires. Il sera alors possible de déployer une nouvelle machine virtuelle à partir du modèle depuis le bouton __'Nouvelle machine virtuelle'__ ou depuis la page __'Catalogues'__. Il est également possible d'exporter la machine virtuelle au format OVF. +Compilare quindi le informazioni necessarie. Sarà quindi possibile distribuire una nuova VM a partire dal modello dal pulsante __'Nuova macchina virtuale'__ o dalla pagina __'Cataloghi'__. È anche possibile esportare la VM in formato OVF. -__Informations utiles__: il est possible de convertir un fichier OVA en OVF et inversement. -La méthode la plus couramment utilisée est VMware Converter, mais une méthode simple existe également en utilisant ```tar```. +__Da sapere__: è possibile convertire un file OVA in OVF e viceversa. +Il metodo più comune utilizzato è VMware Converter, ma esiste anche un metodo semplice utilizzando ```tar``` -Extraction du fichier OVA : +Estrazione del file ova: ``` tar -xvf vmName.ova ``` -Création d'un fichier OVA à partir d'un fichier OVF : +Creazione di un file OVA a partire da un file OVF: ``` tar -cvf vmName-NEW.ova vmName.ovf vmName-disk1.vmdk vmName.mf ``` -### Avanzato configurazione delle macchine virtuali: Extra Config +### Configurazione avanzata delle macchine virtuali: Extra Config -Le impostazioni Extra Config forniscono un metodo flessibile per includere coppie chiave=valore nella configurazione di una macchina virtuale. Le chiavi e i valori vengono interpretati dal sistema al momento del deployment della macchina virtuale. +Le Extra Config forniscono un modo flessibile per includere coppie chiave=valore nella configurazione di una macchina virtuale. Le chiavi e i valori vengono interpretati dal sistema quando la macchina virtuale viene distribuita. -Ora puoi modificare autonomamente le proprietà di tipo __Extra Config__ nelle opzioni avanzate di una macchina virtuale: +Ora è possibile modificare direttamente le proprietà di tipo __Extra Config__ nelle opzioni avanzate di una macchina virtuale: -Puoi aggiungere una proprietà scegliendola da un elenco di chiavi. Inoltre, puoi modificare il valore di una chiave che hai aggiunto tu stesso. Le coppie chiave=valore già esistenti non sono modificabili. +È possibile aggiungere una proprietà da un elenco di chiavi. Inoltre, è possibile modificare il valore di una chiave aggiunta manualmente. Le coppie chiave=valore già esistenti non sono modificabili. -Per richieste di aggiunta di nuove chiavi, contatta il supporto tecnico. +Si prega di contattare il supporto per qualsiasi richiesta di aggiunta di nuove chiavi. -__Nota__ : *Per l'utilizzo del GPU da parte della macchina virtuale, è obbligatorio abilitare la chiave 'pciPassthru.use64bitMMIO' e allocare la quantità di spazio MMIO (Memory-mapped I/O) necessaria tramite 'pciPassthru.64bitMMIOSizeGB'. È fortemente consigliato fare riferimento alla [documentazione ufficiale NVIDIA](https://docs.nvidia.com/vgpu/17.0/grid-vgpu-release-notes-vmware-vsphere/index.html#tesla-p40-large-memory-vms).* +__Nota__ : *Per l'utilizzo della GPU da parte della macchina virtuale, è obbligatorio abilitare la chiave 'pciPassthru.use64bitMMIO' e allocare la quantità di spazio MMIO (Memory-mapped I/O) necessaria tramite 'pciPassthru.64bitMMIOSizeGB'. Si consiglia vivamente di fare riferimento alla [documentazione ufficiale Nvidia](https://docs.nvidia.com/vgpu/17.0/grid-vgpu-release-notes-vmware-vsphere/index.html#tesla-p40-large-memory-vms).* -### Advanced virtual machine configuration: vAPP +### Configurazione avanzata delle macchine virtuali : vAPP -You can also modify __vAPP__ type properties in the advanced options of a virtual machine: +È possibile, inoltre, modificare le proprietà di tipo __vAPP__ nelle opzioni avanzate di una macchina virtuale : -You can add a property, modify an existing one, or remove it. Four types of properties are available: String, Number, Boolean, Password: +È possibile aggiungere una proprietà, modificarla o eliminarla. Sono proposti quattro tipi di proprietà : Stringa, Numero, Booleano, Password : -__Note__: *The virtual machine must be stopped to modify its vAPP properties.* +__Nota__ : *La macchina virtuale deve essere arrestata per modificare le sue proprietà vAPP.* -### Management of __'hypervisors'__ and __'Cpool'__ (hypervisor clusters) +### Gestione degli __'iperVisori'__ e degli __'Cpool'__ (cluster di iperVisori) -The management of your hypervisors is performed in the __'Compute'__ submenu under the __'IaaS'__ menu, located in the green bar on the left side of your screen. +La gestione dei vostri iperVisori avviene nel sottomenu __'Calcolo'__ del menu __'IaaS'__, situato nella barra verde a sinistra dello schermo. -In this submenu, you have visibility on: +In questo sottomenu, è disponibile una vista su: -- The hypervisor software stack, their AZs and resources, -- The backup software stack. +- Lo stack software degli iperVisori, le loro AZ e le relative risorse, +- Lo stack software di backup. -As of January 2024, the available hypervisor offering on the Cloud Temple qualified infrastructure is based on VMware. The backup software used is IBM Spectrum Protect Plus. +A gennaio 2024, l'offerta di iperVisore disponibile sull'infrastruttura certificata Cloud Temple si basa su VMware. Il software di backup utilizzato è IBM Spectrum Protect Plus. ### Gestione dei cluster VMware -Per accedere alla gestione dei cluster VMware, fare clic nel sotto-menu __'Calcolo'__ del menu __'IaaS'__: +Per accedere alla gestione dei cluster VMware, fai clic nel sottomenu __'Calcolo'__ del menu __'IaaS'__ : -Per impostazione predefinita, la prima scheda elenca tutti gli hypervisor (inclusi tutti i cluster): +Per impostazione predefinita, la prima scheda elenca tutti gli hypervisor (tous cluster confondus): @@ -298,16 +300,15 @@ Per impostazione predefinita, la prima scheda elenca tutti gli hypervisor (inclu -Esiste una scheda per ogni cluster di hypervisor per consultare i dettagli di ciascuno: +È presente una scheda per ogni cluster di hypervisor per consultare i dettagli di ciascuno: -Facendo clic su un cluster, viene visualizzata una sintesi della sua composizione: - +Se fai clic su un cluster, vedi la sintesi della sua composizione : - Il totale della potenza di calcolo espressa in GHz, - Il totale della memoria disponibile e il rapporto di utilizzo, -- Lo spazio totale di archiviazione (di tutti i tipi combinati) e la percentuale di utilizzo, -- I meccanismi di automazione in caso di indisponibilità di un nodo di calcolo (__'vSphere DRS'__), +- Il totale dello spazio di archiviazione (tous types confondus) nonché la quota di spazio utilizzata, +- I meccanismi di automazione in caso di indisponibilità di una lama di calcolo (__'Vsphere DRS'__), - Il numero di macchine virtuali, - Il numero di hypervisor. @@ -315,139 +316,136 @@ Facendo clic su un cluster, viene visualizzata una sintesi della sua composizion -__Memoria allocata (Cluster):__ Rappresenta la quantità totale di memoria allocata al cluster. +__Memoria allocata (Cluster) :__ Questo grafico rappresenta la quantità totale di memoria allocata al cluster. -__Memoria consumata (Cluster):__ Mostra la memoria attivamente consumata unicamente dalle macchine virtuali del cluster. Ciò corrisponde alla memoria fisica realmente utilizzata dalle VM per le loro operazioni, che è un indicatore chiave del carico di lavoro attuale. +__Memoria consumata (Cluster) :__ Questa vista mostra la memoria attivamente consumata solo dalle macchine virtuali del cluster. Corrisponde alla memoria fisica effettivamente utilizzata dalle VM per le loro operazioni, che è un indicatore chiave del carico di lavoro attuale. -__Allocazione nel caso peggiore (Cluster):__ Illustra la memoria che sarebbe richiesta se tutte le macchine virtuali del cluster consumassero contemporaneamente l'intera memoria loro allocata (lo scenario di consumo massimo). Il risultato integra anche la memoria necessaria per il funzionamento del cluster e diversi parametri specifici di VMware (il calcolo non è semplicemente pari alla somma della RAM di tutte le macchine virtuali). Questo aiuta ad anticipare il fabbisogno di risorse critiche e a prevenire l'esaurimento della memoria. +__Allocazione nel caso peggiore (Cluster) :__ Questo grafico illustra la memoria che sarebbe richiesta se tutte le macchine virtuali del cluster dovessero consumare simultaneamente l'intera memoria loro allocata (lo scenario di consumo massimo). Il risultato include anche la memoria necessaria per il funzionamento del cluster, nonché diversi parametri specifici di VMware (il calcolo non è semplicemente uguale alla somma della RAM di tutte le macchine virtuali). Ciò consente di anticipare le esigenze di risorse critiche e prevenire l'esaurimento della memoria. -__Memoria consumata (ESX):__ A differenza dei grafici del cluster, questo mostra la memoria totale consumata su uno specifico host ESX. Ciò include non solo la memoria utilizzata dalle macchine virtuali ospitate su questo host, ma anche la memoria consumata dal sistema hypervisor stesso (overhead di ESXi). - -{/*TODO: Add missing page. */} -{/* Al consultare la pagina di un cluster, sono disponibili diverse schede. La scheda __'Regole'__ consente di definire le [regole di affinità/anti-affinità](compute.md#gestione-dellaffinità-delle-tue-macchine-virtuali)*/} +__Memoria consumata (ESX) :__ A differenza dei grafici del cluster, questo mostra l'intera memoria consumata su un host ESX specifico. Include non solo la memoria utilizzata dalle macchine virtuali ospitate su questo host, ma anche la memoria consumata dal sistema dell'iperviseur stesso (overhead di ESXi). -Nella scheda __'Hosts'__ vengono visualizzati per ogni hypervisor: +Vedrai visualizzati per ogni iperviseur nella scheda __'Hosts'__ : -- L'utilizzo di __CPU__ e __Memoria__, +- L'utilizzo __CPU__ e __Memoria__, - Il numero di macchine virtuali assegnate, -- La disponibilità di un nuovo build per il sistema operativo dell'hypervisor, se presente, -- Lo stato dell'hypervisor (connesso in produzione, in manutenzione, spento, ecc.), -- Un menu azioni. +- La disponibilità di un nuovo build per il sistema operativo dell'iperviseur, se del caso, +- Lo stato dell'iperviseur (connesso in produzione, in manutenzione, spento, ...), +- Un menu di azione. -Dalla scheda __'Hosts'__ sono disponibili diverse azioni: +Dalla scheda __'Hosts'__ sono possibili diverse azioni : -- richiedere nuovi hypervisor tramite il pulsante __'Aggiungi un host'__: +- richiedere nuovi iperviseur tramite il pulsante __'Aggiungi host'__ : -- possibilità di consultare il __dettaglio di un hypervisor__: +- possibilità di consultare __i dettagli di un iperviseur__ : -- entrare o uscire dal __modo di manutenzione__ un hypervisor, -- __aggiornare__ l'hypervisor, se necessario; per farlo, __deve essere obbligatoriamente in manutenzione__. Esistono due tipi di aggiornamenti: +- di mettere un iperviseur in __stato di manutenzione__ o di rimuoverlo, +- di __aggiornare__, se del caso, questo iperviseur; per farlo, __deve essere obbligatoriamente in manutenzione__. Esistono due tipi di aggiornamenti : -1. I build VMware (nuove versioni dell'hypervisor): +1. I build VMware (le nuove versioni dell'iperviseur): -1. L'aggiornamento del firmware del nodo di calcolo (BIOS e firmware delle schede aggiuntive): +1. L'aggiornamento del firmware della tua blade di calcolo (bios e firmware delle schede di espansione): -*__Nota__*: +*__Nota__* : -- Cloud Temple mette a disposizione i build per gli hypervisor a intervalli regolari. -È importante aggiornare regolarmente gli hypervisor, in particolare per applicare i correttivi di sicurezza. -Tuttavia, __non aggiorniamo automaticamente gli hypervisor per conto vostro__. Cloud Temple non ha visibilità sugli impegni di disponibilità dei vostri carichi di lavoro. -Vi lasciamo quindi gestire autonomamente il processo di cambiamento e applicare i nuovi build al momento più opportuno. -- Il processo di aggiornamento è completamente automatizzato. È necessario disporre di almeno due hypervisor nel cluster per consentire un aggiornamento senza interruzioni del servizio. +- *Cloud Temple mette a disposizione i build per gli iperviseur a intervalli regolari. +È importante aggiornare regolarmente i tuoi iperviseur, in particolare per consentire l'applicazione delle patch di sicurezza. +Tuttavia, __non aggiorniamo automaticamente i tuoi iperviseur__. Cloud Temple non ha visibilità sugli impegni di disponibilità dei tuoi workload. +Ti lasciamo quindi la responsabilità di implementare la tua gestione del cambiamento e di applicare i nuovi build nel momento migliore.* +- *Il processo di aggiornamento è completamente automatizzato. Devi disporre di almeno due iperviseur nel tuo cluster per consentire un aggiornamento senza interruzione del servizio.* {/*TODO: Add missing page. */} -{/* -*È necessario disporre delle [autorizzazioni appropriate](../console/permissions.md) per eseguire le diverse azioni.**/} +{/* -*È necessario disporre delle autorizzazioni adeguate per eseguire le diverse azioni.**/} -Nella sezione __'Regole'__ è inoltre possibile visualizzare l'insieme delle regole di affinità/anti-affinità per il cluster di hypervisor. +Vedrai anche l'insieme delle regole di affinità/anti-affinità per il tuo cluster di iperviseur nella sezione __'Regole'__. -### Gestione dell'affinità delle macchine virtuali +### Gestione dell'affinità delle tue macchine virtuali -Le __regole di affinità e anti-affinità__ consentono di controllare la posizione delle macchine virtuali sugli iperhost. +Le __regole di affinità e anti-affinità__ consentono di controllare la posizione delle macchine virtuali sui tuoi hypervisor. Possono essere utilizzate per gestire l'utilizzo delle risorse del tuo __'Cpool'__. -Ad esempio, possono aiutare a bilanciare il carico tra i server o a isolare carichi di lavoro intensivi in termini di risorse. +Ad esempio, possono aiutare a bilanciare il carico di lavoro tra i server o a isolare i carichi di lavoro ad alto consumo di risorse. In un __'Cpool'__ VMware, queste regole sono spesso utilizzate per gestire il comportamento delle macchine virtuali con vMotion. -vMotion permette di spostare macchine virtuali da un host all'altro senza interruzioni del servizio. +vMotion consente di spostare le macchine virtuali da un host all'altro senza interruzione del servizio. -Puoi configurare tramite la gestione delle regole: +Puoi configurare tramite la gestione delle regole : -- __Regole di affinità__: queste regole garantiscono che alcune macchine virtuali vengano eseguite sullo stesso host fisico. - Vengono utilizzate per migliorare le prestazioni mantenendo insieme le macchine virtuali che comunicano frequentemente, - riducendo così la latenza di rete. Le regole di affinità sono utili in scenari in cui le prestazioni sono critiche, - come nel caso di database o applicazioni che richiedono una comunicazione rapida tra i server. +- __Regole di Affinità__ : Queste regole garantiscono che determinate macchine virtuali vengano eseguite sullo stesso host fisico. +Vengono utilizzate per migliorare le prestazioni mantenendo le macchine virtuali che comunicano frequentemente +tra loro sullo stesso server per ridurre la latenza di rete. Le regole di affinità sono utili in scenari +in cui le prestazioni sono critiche, come nel caso di database o applicazioni che richiedono una comunicazione rapida tra i server. -- __Regole di anti-affinità__: al contrario, queste regole garantiscono che alcune macchine virtuali non vengano eseguite - sullo stesso host fisico. Sono fondamentali per la disponibilità e la resilienza, ad esempio, - per evitare che tutte le macchine critiche vengano colpite in caso di guasto di un singolo server. - Le regole di anti-affinità sono essenziali per applicazioni che richiedono un'alta disponibilità, - come negli ambienti di produzione dove la tolleranza ai guasti è una priorità. - Ad esempio, non desideri che i tuoi due server Active Directory si trovino sullo stesso iperhost. +- __Regole di Anti-affinità__ : Al contrario, queste regole garantiscono che determinate macchine virtuali non vengano eseguite +sullo stesso host fisico. Sono importanti per la disponibilità e la resilienza, ad esempio, +per evitare che macchine critiche vengano tutte interessate in caso di guasto di un singolo server. +Le regole di anti-affinità sono cruciali per le applicazioni che richiedono un'alta disponibilità, +come negli ambienti di produzione dove la tolleranza ai guasti è una priorità. +Ad esempio, non si desidera che i propri due Active Directory si trovino sullo stesso hypervisor. -Durante la creazione di una regola, definisci il tipo di regola (affinità / anti-affinità), il nome della regola, -lo stato di attivazione (__'Stato'__) e le macchine coinvolte nel cluster degli iperhost. +Durante la creazione di una regola, puoi definire il tipo di regola (affinità / anti-affinità), il nome della regola, +il suo stato di attivazione (__'Stato'__) e le macchine interessate del tuo cluster di hypervisor. -*Nota: le regole di affinità/anti-affinità disponibili nella console sono regole che riguardano le macchine virtuali tra loro (non regole tra iperhost e macchine virtuali).* +*Nota: le regole di affinità/anti-affinità proposte nella console sono regole relative alle macchine virtuali tra loro (nessuna regola tra hypervisor e macchine virtuali).* ## Backup -### Create a backup policy +### Creare una politica di backup -To create a new backup policy, you must submit a request to support. Support is accessible via the buoy icon in the top-right corner of the window. +Per aggiungere una nuova politica di backup, è necessario inviare una richiesta al supporto. Il supporto è accessibile tramite l'icona del salvagente in alto a destra nella finestra. -Creating a new backup policy is done through a __service request__ specifying: +La creazione di una nuova politica di backup viene effettuata tramite __una richiesta di servizio__ indicando: - Your Organization's name - A contact name, email address, and phone number to finalize the configuration - The tenant name - The backup policy name - The retention characteristics (x days, y weeks, z months, ...) + Il nome della tua Organizzazione + Il nome di un referente con la sua email e numero di telefono per completare la configurazione + Il nome del tenant + Il nome della politica di backup + Le caratteristiche (x giorni, y settimane, z mesi, ...) ### Assegnare una politica di backup a una macchina virtuale -Quando una SLA viene assegnata a una macchina virtuale (VM), tutti i dischi associati a tale VM ereditano automaticamente la stessa SLA. In seguito, è possibile avviare manualmente il backup tramite la scheda "Politiche di backup". In assenza di un avvio manuale, il backup verrà eseguito automaticamente secondo il piano configurato dalla SLA. +Quando viene assegnata una SLA a una macchina virtuale (VM), tutti i dischi associati a tale VM ereditano automaticamente la stessa SLA. Successivamente, è possibile avviare manualmente l'esecuzione del backup tramite la scheda "Politiche di backup". In assenza di un'avvio manuale, il backup verrà eseguito automaticamente in base al piano configurato dall'SLA. -SecNumCloud rende obbligatorio assegnare una politica di backup a una macchina virtuale prima del suo avvio. In caso contrario, verrà visualizzato il seguente messaggio di avviso: +SecNumCloud rende obbligatoria l'assegnazione di una politica di backup a una macchina virtuale prima del suo avvio. In caso contrario, riceverai la seguente notifica: -Fai clic sulla scheda __'Politiche di backup'__ del menu della tua macchina virtuale. Qui potrai visualizzare la o le politiche di backup assegnate a tale macchina. +Fai clic sulla scheda __'Politiche di backup'__ nel menu della tua macchina virtuale. Puoi visualizzare la o le politiche di backup assegnate a tale macchina. Per assegnare una nuova politica di backup alla macchina virtuale, fai clic sul pulsante __'Aggiungi una politica'__ e seleziona la politica di backup desiderata. -### Assign a backup policy to a virtual disk +### Assegnare una politica di backup a un disco virtuale -It is also possible to assign an SLA directly to a specific virtual disk of a machine. In this case, the virtual machine does not inherit this SLA applied individually to the disk. However, it is not possible to manually trigger backup execution at the disk level, as this functionality is not supported in Spectrum Protect Plus. +È inoltre possibile assegnare una SLA direttamente a un disco virtuale specifico di una macchina. In questo caso, la macchina virtuale non eredita questa SLA applicata individualmente al disco. Tuttavia, non è possibile avviare manualmente l'esecuzione del backup a livello di disco, poiché questa funzionalità non è supportata in Spectrum Protect Plus. -On the other hand, it is possible to exclude certain disks from one or more backup policies (SLAs) of the VM, which allows unassigning one or more SLAs on a per-disk basis. This approach provides the flexibility to manually trigger the backup execution of an SLA without affecting all disks of the virtual machine, enabling more granular backup management. +Al contrario, è possibile escludere alcuni dischi da una o più politiche di backup (SLA) della VM, consentendo di disassegnare una o più SLA(s) su base disco per disco. Questo approccio offre la flessibilità di avviare manualmente l'esecuzione del backup di una SLA senza influenzare tutti i dischi della macchina virtuale, consentendo così una gestione più granulare dei backup. -Click on the action bar of the disk to which you want to assign a backup policy. Then, click on __'Policies'__ and select the desired backup policy. +Fare clic sulla barra delle azioni del disco a cui si desidera assegnare una politica di backup. Quindi, fare clic su __'Politiche'__ e selezionare la politica di backup desiderata. -*Note*: The policy to be added must reside in a different availability zone than the virtual machine. +*Nota* : La politica da aggiungere deve trovarsi in una zona di disponibilità diversa dalla macchina virtuale. ### Eseguire una politica di backup @@ -455,7 +453,8 @@ Nel menu __'Politiche di backup'__ della tua macchina virtuale, fai clic sul pul -Per eseguire una politica di backup, puoi anche partire dalla sezione __'Backup'__ nel menu della tua macchina virtuale. Fai clic sul pulsante __'Esegui il backup'__, quindi seleziona il backup che desideri eseguire nell'elenco a discesa. +Per eseguire una politica di backup, puoi anche partire dalla sezione __'Backup'__ nel menu di +tua macchina virtuale. Fai clic sul pulsante __'Esegui backup'__, quindi seleziona il backup che desideri eseguire dall'elenco a discesa. @@ -465,46 +464,45 @@ Nel menu __'Politiche di backup'__ della tua macchina virtuale, fai clic sul pul -__Attenzione, non è possibile rimuovere l'ultima SLA su una macchina virtuale attiva:__ +__Attenzione, non è possibile rimuovere l'ultima SLA su una macchina virtuale accesa :__ -### Deletion of a backup policy: case of a suspended backup policy ("held") +### Eliminazione di una politica di backup: caso di una politica di backup in stato "sospeso" ("held") -When the last resource is disassociated from an SLA policy, the system automatically detects this situation. As a result, all jobs associated with this SLA policy are automatically moved to the "Held" state. It is important to note that direct deletion of the SLA policy is not possible at this stage due to the presence of dependent jobs. To proceed with the deletion of the policy, a series of steps must be followed. +Quando l'ultima risorsa viene disassociata da una politica SLA, il sistema rileva automaticamente questa situazione. Di conseguenza, tutti i job correlati a questa politica SLA passano automaticamente allo stato "Sospeso" ("Held"). È importante notare che, a questo stadio, l'eliminazione diretta della politica SLA non è possibile a causa dell'esistenza di job dipendenti. Per procedere all'eliminazione della politica, è necessario seguire una serie di passaggi. -First, verify that the affected jobs are indeed in the "Held" state. Once this verification is complete, these jobs can be deleted. Only after removing these dependent jobs can the SLA policy be permanently erased from the system. +È necessario verificare che i job interessati siano effettivamente nello stato "Sospeso". Una volta effettuata questa verifica, tali job possono essere eliminati. Solo dopo aver eliminato questi job dipendenti la politica SLA potrà essere definitivamente rimossa dal sistema. -A special case requires particular attention: adding a new resource to an SLA policy whose dependent jobs have not been deleted. In this scenario, the job identifiers will be preserved. However, it is crucial to note that jobs in the "Held" state will not resume automatically. Manual intervention will be required to reactivate them and allow their execution. +Un caso particolare merita un'attenzione specifica: l'aggiunta di una nuova risorsa a una politica SLA i cui job dipendenti non sono stati eliminati. In questa situazione, gli identificativi dei job verranno mantenuti. Tuttavia, è fondamentale notare che i job in stato "Sospeso" non riprenderanno automaticamente. Sarà necessario un intervento manuale per riattivarli e consentirne l'esecuzione. -note: For any clarification regarding this situation, contact Cloud Temple support. +nota: Per qualsiasi chiarimento su questa situazione, contattare il supporto Cloud Temple. -The Cloud Temple console prevents assigning a virtual machine to a suspended policy: +La console Cloud Temple impedisce l'assegnazione di una macchina virtuale a una politica sospesa: -Similarly, it is not possible to start a virtual machine associated with a suspended backup policy: +Allo stesso modo, non è possibile avviare una macchina virtuale che è associata a una politica di backup sospesa: ### Ripristinare un backup -L'opzione __'Backup'__ nel menu delle tue macchine virtuali ti permette di accedere all'elenco dei backup di tale macchina. - -Per ripristinare un backup, fai clic sul pulsante __'Ripristina'__ nella riga corrispondente al backup che desideri ripristinare. +La scheda __'Backup'__ nel menu delle tue macchine virtuali ti consente di accedere all'elenco dei backup di ciascuna di esse. +Per ripristinare un backup, fai clic sul pulsante __'Ripristina'__ sulla riga corrispondente al backup che desideri ripristinare. -1. __Modalità produzione__: La modalità produzione consente il ripristino dopo un incidente sul sito locale dallo storage primario o da un sito di ripristino remoto, sostituendo le immagini originali della macchina con le immagini di ripristino. Tutte le configurazioni vengono trasferite durante il ripristino, inclusi nomi e identificatori, e tutti i processi di copia dati associati alla macchina virtuale continuano a essere eseguiti. Nella modalità di ripristino in produzione, puoi scegliere di sostituire lo storage della macchina virtuale con un disco virtuale proveniente da un backup precedente della macchina virtuale. +1. __Modalità produzione__ : La modalità produzione consente il ripristino dopo un incidente sul sito locale dallo storage primario o da un sito di disaster recovery remoto, sostituendo le immagini originali della macchina con le immagini di recupero. Tutte le configurazioni vengono trasferite nell'ambito del ripristino, inclusi nomi e identificatori, e tutti i job di copia dei dati associati alla macchina virtuale continuano a essere eseguiti. Nel contesto di un ripristino in modalità produzione, puoi scegliere di sostituire lo storage nella macchina virtuale con un disco virtuale proveniente da un backup di una macchina virtuale precedente. -2. __Modalità test__: La modalità test crea macchine virtuali temporanee per sviluppo, test, verifica di snapshot e verifica del ripristino dopo incidenti, secondo un piano ripetibile, senza alcun impatto sugli ambienti di produzione. Le macchine di test vengono eseguite per il tempo necessario per completare il test e la verifica, dopodiché vengono eliminate. Grazie alla rete isolata, puoi creare un ambiente sicuro per testare i tuoi lavori senza interferire con le macchine virtuali utilizzate per la produzione. Le macchine virtuali create in modalità test hanno nomi e identificatori univoci per evitare conflitti nel tuo ambiente di produzione. +2. __Modalità test__ : La modalità test crea macchine virtuali temporanee per lo sviluppo, il test, la verifica degli snapshot e la verifica del ripristino dopo un incidente in base a un piano ripetibile, senza impattare gli ambienti di produzione. Le macchine di test vengono eseguite per il tempo necessario a effettuare il test e la verifica, per poi essere eliminate. Tramite una rete isolata, puoi creare un ambiente sicuro per testare i tuoi job senza interferire con le macchine virtuali utilizzate per la produzione. Le macchine virtuali create in modalità test dispongono di nomi e identificatori univoci per evitare qualsiasi conflitto nel tuo ambiente di produzione. -3. __Modalità clone__: La modalità clone crea copie delle macchine virtuali per casi d'uso che richiedono copie permanenti o a lungo termine, ad esempio per l'esplorazione dei dati o la duplicazione di un ambiente di test su una rete isolata. Le macchine virtuali create in modalità clone hanno nomi e identificatori univoci per evitare conflitti nel tuo ambiente di produzione. In modalità clone, devi prestare attenzione al consumo delle risorse poiché questa modalità crea macchine permanenti o a lungo termine. +3. __Modalità clone__ : La modalità Clone crea copie delle macchine virtuali per casi d'uso che richiedono copie permanenti o a esecuzione prolungata per l'esplorazione dei dati o la duplicazione di un ambiente di test su una rete isolata. Le macchine virtuali create in modalità clone dispongono di nomi e identificatori univoci per evitare qualsiasi conflitto nel tuo ambiente di produzione. In modalità clone, devi prestare attenzione al consumo delle risorse poiché la modalità clone crea macchine permanenti o a lungo termine. -__Il ripristino è impostato per impostazione predefinita in modalità "TEST" per preservare la produzione__, e puoi scegliere il nome della macchina virtuale ripristinata: +__Il ripristino è impostato di default in modalità "TEST" per preservare la produzione__ ed è possibile scegliere il nome della vm ripristinata : -Nota che, se i test sono soddisfacenti, è possibile passare una macchina virtuale dalla modalità test alla modalità produzione: +Nota che se i test sono soddisfacenti, è possibile passare una macchina virtuale dalla modalità test alla modalità produzione : - + \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/backup/iaas_backup.md b/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/backup/iaas_backup.md index eef02f62..b60a396d 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/backup/iaas_backup.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/backup/iaas_backup.md @@ -1,5 +1,5 @@ --- -title: Domande frequenti riguardanti il backup +title: Domande frequenti sul backup tags: - iaas_vmware - tutorials @@ -24,35 +24,36 @@ import backupInvIaas_001 from '@site/docs/iaas_vmware/tutorials/backup/images/ba #### Come clonare una macchina virtuale? -Esistono due modi per clonare una macchina virtuale: +Esistono 2 modi per clonare una macchina virtuale : -- La prima opzione permette di clonare una macchina virtuale direttamente dall'icona __'Clone'__ della tua macchina virtuale: +- La prima opzione consente di clonare una macchina virtuale direttamente dall'icona __'Clona'__ della tua macchina virtuale : -- La seconda soluzione consiste nel clonare la macchina virtuale utilizzando __un backup__ della macchina virtuale e poi utilizzando __il ripristino in modalità clone__ di un backup. -Vai alla sezione __'Backup'__ della tua macchina virtuale e scegli l'azione __'Ripristina'__: +- La seconda soluzione consiste nel clonare la macchina virtuale utilizzando __un backup__ della macchina virtuale e successivamente __il ripristino in modalità clone__ di un backup. +Vai alla sezione __'Backup'__ della tua macchina virtuale e scegli l'azione __'Ripristina'__ : -Scegli poi l'opzione __'Clone'__ di ripristino: +Seleziona quindi l'opzione __'Clona'__ per il ripristino : -#### Perché quando vado alla pagina "politiche di backup" e seleziono una politica, non vedo le stesse macchine virtuali che vedo quando vado su "report di backup" e seleziono la stessa politica? +#### Perché quando vado alla pagina "politiche di backup" e seleziono una politica, non vedo le stesse macchine virtuali quando vado su "report di backup" e seleziono la stessa politica? -Ciò significa che le macchine virtuali mancanti hanno avuto la politica in questione assegnata loro per un certo periodo (spiegando la loro presenza nei report di backup) ma che __non è più così attualmente__. +Questo significa che le macchine virtuali mancanti hanno avuto la politica in questione assegnata per +un certo periodo (spiegando la loro presenza nei report di backup) ma che __non è più il caso al momento attuale__. #### Come aggiungere una politica di backup a una macchina virtuale? -Vai alla pagina __'Macchine Virtuali'__ nella sezione __'IaaS'__ del menu verde a sinistra dello schermo. +Vai alla pagina __'Macchine Virtuali'__ nella sezione __'IaaS'__ della barra del menu verde sul lato sinistro dello schermo. -Seleziona una macchina virtuale poi la scheda __'Politiche di backup'__ di questa macchina: +Seleziona una macchina virtuale e poi la scheda __'Politiche di backup'__ di questa macchina : -Aggiungi la politica di backup desiderata: +Aggiungi la politica di backup desiderata : @@ -66,26 +67,26 @@ Elimina la politica di backup desiderata e conferma l'eliminazione: __*Nota:*__ *Attenzione! __Secnumcloud richiede che ci sia almeno una politica di backup__ per ogni macchina virtuale.* -### Come sapere se un backup è stato eseguito correttamente? +### Come verificare se un backup è stato eseguito correttamente? -Ci sono due soluzioni possibili: +Sono disponibili 2 soluzioni possibili: -1. Vai alla pagina __'Jobs'__ del menu __'Backup'__ nel menu verde a sinistra dello schermo. Scegli il job corrispondente al backup e selezionalo. -Poi, trova la *jobsession* corrispondente al tuo backup e selezionala attraverso il menu __'Azioni'__. +1. Vai alla pagina __'Jobs'__ del menu __'Backup'__ nella barra verde a sinistra dello schermo. Scegli il job corrispondente al backup e selezionalo. +Successivamente, individua la *jobsession* corrispondente al tuo backup e selezionala tramite il menu __'Actions'__. -Queste azioni permettono di avere i log dettagliati dell'esecuzione del backup. Puoi cercare nei registri di backup: +Queste azioni consentono di visualizzare i log dettagliati dell'esecuzione del backup. Puoi cercare nei log di backup: -1. Vai alla pagina __'Report di backup'__ e seleziona la politica che ti interessa: +1. Vai alla pagina __'Report di backup'__ e seleziona la policy di tuo interesse: -Puoi quindi filtrare per data, scaricare il report in formato __PDF__ o __CSV__ per utilizzarlo in strumenti di terze parti. +Puoi quindi filtrare per data, scaricare il report in formato __PDF__ o __CSV__ per elaborarlo con strumenti di terze parti. -### Come avviare un ripristino? +### Come eseguire un ripristino? Vai alla pagina __'Macchine Virtuali'__, seleziona una macchina virtuale e poi la scheda __'Backup'__ di questa macchina. Per avviare il ripristino, seleziona il backup da ripristinare. @@ -93,67 +94,68 @@ Vai alla pagina __'Macchine Virtuali'__, seleziona una macchina virtuale e poi l ### Cos'è l'opzione di quiescing? -Il __quiescing__ è un processo che consiste nell'avvisare il sistema per portarlo in uno stato appropriato prima dell'inizio del snapshot. -Per impostazione predefinita, il __quiescing è attivato__. Può essere disattivato manualmente nel caso in cui il sistema gestisca male lo snapshot o se l'agente dell'hypervisor non è installato sulla macchina virtuale. +Il __quiescing__ è un processo che consiste nel notificare al sistema di entrare in uno stato appropriato prima dell'inizio dello snapshot. +Per impostazione predefinita, il __quiescing è attivato__. Può essere disattivato manualmente nel caso in cui il sistema gestisca male lo snapshot o se l'agent dell'ipervisors non è installato sulla macchina virtuale. -Per fare ciò, nella sezione __'Backup'__ della tua macchina virtuale, clicca su __'Modifica opzioni'__ e disattiva il __quiescing__: +Per fare ciò, nella sezione __'Backup'__ della tua macchina virtuale, fai clic su __'Modifica opzioni'__ e disattiva il __quiescing__ : -### Quali sono le opzioni di ripristino per una macchina virtuale? +### Quali sono le opzioni di ripristino di una macchina virtuale? -Tre opzioni principali per ripristinare una vm, sulla destinazione iniziale o su una diversa: +3 opzioni principali per ripristinare una VM, sul suo target iniziale o su un target diverso : -- __'CLONE'__: Ripristina la macchina virtuale rinominandola, senza sostituire la macchina virtuale originale. +- __'CLONE'__ : Ripristina la macchina virtuale rinominandola, senza sostituire la macchina virtuale originale. -- __'PRODUZIONE'__: Ripristina e __sostituisce__ la macchina virtuale di produzione (la macchina virtuale attualmente in produzione viene __distrutta__) +- __'PRODUCTION'__ : Ripristina e __sostituisce__ la macchina virtuale di produzione (la macchina virtuale attualmente in produzione viene __distrutta__) -- __'TEST'__: Ripristina la macchina virtuale di produzione __senza sovrascriverla__. +- __'TEST'__ : Ripristina la macchina virtuale di produzione __senza sovrascriverla__. -### Come ripristinare e sostituire la macchina virtuale di produzione, senza mantenere la macchina virtuale attualmente in produzione? +### Come ripristinare e sostituire la macchina virtuale di produzione, senza conservare la macchina virtuale attualmente in produzione? -Scegli la modalità di ripristino __'Produzione'__. L'opzione 'sovrascrivi la macchina virtuale' è predefinita. +Seleziona la modalità di ripristino __'Produzione'__. L'opzione 'sovrascrivere la macchina virtuale' è impostata per impostazione predefinita. ### Perché il numero di macchine virtuali è diverso tra i moduli di backup e compute? -La differenza nel numero delle macchine virtuali può derivare dal fatto che il modulo di backup non ha acquisito le ultime macchine create. +La differenza di macchine virtuali può derivare dal fatto che il modulo di backup non ha recuperato le ultime macchine create. -Per aggiornare il modulo di backup, è necessario richiedere al livello software di backup di reinventarizzare le macchine virtuali. -Per fare ciò, nel menu __'Infrastruttura'__ del menu verde a sinistra dello schermo, naviga verso il sottomenu __'Spectrum Protect Plus'__ e utilizza il pulsante __'Azione'__ dell'inventario: +Per aggiornare il modulo di backup, è necessario richiedere al livello software di backup di eseguire un reinventario delle macchine virtuali. +A tal fine, nel menu __'Infrastruttura'__ della barra verde a sinistra dello schermo, navigare verso il sottomenu __'Spectrum Protect Plus'__ e utilizzare il pulsante __'Azione'__ dell'inventario: -Nota che hai la data dell'ultimo inventario indicata. +Si noti che viene indicata la data dell'ultimo inventario. -Se persiste una differenza nel numero delle macchine virtuali, ciò potrebbe derivare dalle macchine virtuali che ospitano il sistema che permette i backup. Infatti, queste ultime non si contano da sole nel calcolo del numero di macchine sul modulo di backup. +Se persiste una differenza nel numero di macchine virtuali, potrebbe dipendere dalle macchine virtuali che ospitano il sistema che gestisce i +backup. Infatti, queste non si conteggiano da sole nel calcolo del numero di macchine sul modulo di backup. -### Come fare l'inventario delle macchine virtuali sul modulo backup? +### Come effettuare l'inventario delle macchine virtuali sul modulo di backup? -Per avviare un inventario delle macchine virtuali sul modulo di backup, nel menu __'Infrastruttura'__ del menu verde a sinistra dello schermo, naviga verso il sottomenu __'Spectrum Protect Plus'__ e utilizza il pulsante __'Azione'__ dell'inventario: +Per avviare l'inventario delle macchine virtuali sul modulo di backup, nel menu __'Infrastructure'__ della barra verde a sinistra dello schermo, navigare verso il sottomenu __'Spectrum Protect Plus'__ e utilizzare il pulsante __'Action'__ dell'inventario: -Nota che hai la data dell'ultimo inventario indicata. +Si noti che è indicata la data dell'ultimo inventario. ### Perché il backup della mia macchina virtuale fallisce indicando un problema di snapshot? -Questo errore significa che è la prima volta che la tua macchina cerca di essere backupata. +Questo errore indica che è la prima volta che la tua macchina viene sottoposta a backup. -__Durante il primo backup di una macchina virtuale, nessuno snapshot deve essere presente sulla macchina.__ +__Durante il primo backup di una macchina virtuale, non deve essere presente alcuno snapshot sulla macchina.__ ### Come ripristinare e sostituire la macchina virtuale di produzione, mantenendo e rinominando la macchina virtuale di produzione? Ecco come procedere: -- Scegli la modalità __'CLONE'__ (la modalità clone comporta un cambio di indirizzo MAC e UUID della macchina virtuale), +- Scegli la modalità __'CLONE'__ (la modalità clone comporta una modifica dell’indirizzo MAC e dell’UUID della macchina virtuale), - Rinomina la macchina virtuale ripristinata con il nome definitivo (della vm di produzione), - Rinomina la vecchia macchina virtuale di produzione (in _OLD). @@ -161,23 +163,24 @@ Ecco come procedere: Ecco come procedere: -- Scegli la modalità __'CLONE'__ (la modalità clone comporta un cambio di indirizzo MAC e UUID della macchina virtuale) +- Scegli la modalità __'CLONE'__ (la modalità clone comporta un cambiamento dell’indirizzo MAC e dell’UUID della macchina virtuale) - Definisci il nome del clone (_REST o altri) ### Perché non posso eliminare un disco in modalità instant access sulla mia macchina virtuale? -Esegui l'inventario del backup: nel menu __'Infrastruttura'__ del menu verde a sinistra dello schermo, naviga verso il sottomenu __'Spectrum Protect Plus'__ e utilizza il pulsante __'Azione'__ dell'inventario: +Eseguire l'inventario del backup: nel menu __'Infrastruttura'__ della barra verde a sinistra dello schermo, navigare +verso il sottomenu __'Spectrum Protect Plus'__ e utilizzare il pulsante __'Azione'__ dell'inventario: -Effettua l'eliminazione del disco una volta completato l'inventario. Aggiorna la macchina virtuale per verificare che il disco sia stato eliminato correttamente. +Effettuare l'eliminazione del disco una volta terminato l'inventario. Aggiornare la macchina virtuale per verificare che il disco sia stato effettivamente eliminato. ### Perché non posso avviare una macchina virtuale con una politica in stato Held (politica sospesa)? -Una politica in stato "Held" è una funzionalità che consente di sospendere temporaneamente le azioni di retention e eliminazione dei dati, garantendo così che i dati rimangano intatti e disponibili oltre il loro periodo di retention standard per motivi specifici come conformità o esigenze legali. +Una politica in stato "Held" è una funzionalità che consente di sospendere temporaneamente le azioni di conservazione ed eliminazione dei dati, garantendo così che i dati rimangano integri e disponibili oltre il loro periodo di conservazione standard per motivi specifici come la conformità o le esigenze legali. -Supponiamo che un'azienda abbia una politica di retention di backup di 30 giorni per alcuni dati di produzione. A causa di un'indagine legale, ricevono una richiesta per preservare tutti i backup pertinenti per un periodo di tempo indeterminato. Hai la possibilità di sospendere la politica di backup associata tramite lo stato "Held" per impedire l'eliminazione automatica di questi backup dopo 30 giorni, assicurando che i dati rimangano disponibili per tutta la durata dell'indagine. +Si supponga che un'azienda abbia una politica di conservazione dei backup di 30 giorni per alcuni dati di produzione. A causa di un'indagine legale, riceve una richiesta di conservare tutti i backup pertinenti per un periodo indeterminato. È possibile sospendere la politica di backup associata tramite lo stato "Held" per impedire l'eliminazione automatica di questi backup dopo 30 giorni, garantendo così che i dati rimangano disponibili per tutta la durata dell'indagine. -Una politica di backup sospesa (in stato Held) non eseguirà i backup del piano assegnato, la macchina virtuale non può quindi essere considerata protetta il che non rispetta gli standard SecNumCloud. +Una politica di backup sospesa (in stato Held) non eseguirà i backup previsti dal programma ad essa assegnato, la macchina virtuale non può quindi essere considerata protetta, il che non rispetta gli standard SecNumCloud. -Non esitate a chiedere consiglio al nostro team di supporto su questo argomento. +Non esitate a richiedere consigli al nostro team di supporto su questo argomento. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_template.md b/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_template.md index 64cd3b89..cbac35f3 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_template.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_template.md @@ -1,5 +1,5 @@ --- -title: Deployment from a template +title: Distribuzione da un template tags: - iaas_vmware - tutorials @@ -8,40 +8,40 @@ import shivaCatalogsCharger from '@site/docs/iaas_vmware/tutorials/images/shiva_ import shivaCatalogsAjout from '@site/docs/iaas_vmware/tutorials/images/shiva_catalogs_ajout.png'; import shivaCatalogsDeployer from '@site/docs/iaas_vmware/tutorials/images/shiva_catalogs_deployer.png'; -This guide will allow you to deploy your first instances on the Cloud of Trust in less than 5 minutes. +Questa guida vi permetterà di distribuire in meno di 5 minuti le vostre prime istanze sul Cloud di Fiducia. ## __Prerequisiti__ -1. Aver sottoscritto l'offerta Cloud Temple (sottoscrizione all'offerta IaaS). -2. Aver attivate le autorizzazioni per il driver degli oggetti __'IaaS'__ +1. Avere sottoscritto il prodotto Cloud Temple (sottoscrizione al prodotto IaaS). +2. Avere le autorizzazioni abilitate per il driver degli oggetti __'IaaS'__ -## Deploy a virtual machine from a Template +## Distribuire una macchina virtuale da un modello -This guide shows you step by step how to deploy a virtual machine from a Template in the Console. +Questa guida mostra passo dopo passo come distribuire una macchina virtuale da un modello nella Console. -In the Console portal, go to the "Trusted Cloud" tab, then "Catalogs". Before you can deploy a Template, it must be uploaded to your private catalog, in the "My Catalog" tab. +Nel portale Console, vai alla scheda "Cloud di fiducia", quindi a "Cataloghi". Prima di poter distribuire un modello, questo deve essere caricato nel tuo catalogo privato, nella scheda "Il mio catalogo". -To do this, you have two options: import your own Template directly into your private catalog, or import a template from the public Cloud Temple catalog. +A tal fine, hai due possibilità: importare il tuo modello direttamente nel tuo catalogo privato oppure importare un modello dal catalogo pubblico di Cloud Temple. ### Importare un modello personale nel catalogo privato -Nella scheda "Il mio catalogo", fare clic su "Pubblica file". +Nella scheda "Il mio catalogo", fai clic su "Pubblica file". -Seguire quindi i passaggi per la pubblicazione del modello, inserendo il nome e una descrizione, e scegliendo la posizione all'interno di una libreria. +Quindi, segui i passaggi di pubblicazione del modello, inserendone il nome e una descrizione, e selezionando la posizione all'interno di una libreria. -Il modello dovrà quindi apparire nel tuo catalogo privato. +Il modello dovrebbe quindi essere visualizzato nel tuo catalogo privato. ### Importare un modello dal catalogo pubblico -Nella scheda "Catalogo pubblico", fai clic sul pulsante "Aggiungi al mio catalogo" del modello desiderato per importarlo nel tuo catalogo privato. Esso dovrà quindi apparire nel tuo catalogo privato. +Nella scheda "Catalogo pubblico", fai clic sul pulsante "Aggiungi al mio catalogo" del modello di tua scelta per importarlo nel tuo catalogo privato. Dovrebbe successivamente apparire nel tuo catalogo privato. -### Deploy the Template +### Distribuire il Template -Once the template has been imported into your private catalog, you can deploy it by clicking on "Deploy". +Una volta importato il Template nel tuo catalogo privato, puoi distribuirlo facendo clic su "Distribuisci". -Then follow the various steps of the resource deployment process, selecting its physical location (datacenter, compute cluster, datastore) and other optional configuration parameters. +Segui quindi le diverse fasi di distribuzione della risorsa, selezionandone la posizione fisica (datacenter, cluster di calcolo, datastore) e altri parametri di configurazione opzionali. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_terraform.md b/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_terraform.md index 794f82fe..687bbf9e 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_terraform.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/deploy_vm_terraform.md @@ -7,20 +7,20 @@ tags: import statusCloudInit from '@site/docs/iaas_vmware/tutorials/images/status_cloud_init.png'; import cloudInitOutput from '@site/docs/iaas_vmware/tutorials/images/cloud-init-output.png'; -Questa guida ti permetterà di distribuire le tue prime istanze sul Cloud di Confianza in meno di 5 minuti. +Questa guida ti consentirà di distribuire le tue prime istanze sul Cloud di Fiducia in meno di 5 minuti. ## __Prerequisiti__ -1. Aver sottoscritto l'offerta Cloud Temple (sottoscrizione all'offerta IaaS). -2. Avere i permessi attivati per il pilotaggio degli oggetti __'IaaS'__ +1. Avere sottoscritto il prodotto Cloud Temple (sottoscrizione al prodotto IaaS). +2. Avere le autorizzazioni abilitate per il driver degli oggetti __'IaaS'__ ## Distribuire una macchina virtuale tramite Terraform -In questa sezione, vedremo come distribuire in pochi minuti una macchina virtuale sul Cloud di Confianza tramite il provider Terraform Cloud Temple. -Se non hai ancora utilizzato il provider Cloud Temple, segui le istruzioni che si trovano al [seguente indirizzo](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest/docs) per installarlo e autenticarti al tuo tenant. +In questa sezione, vedremo come distribuire in pochi minuti una macchina virtuale sul Cloud de Confiance tramite il provider Terraform Cloud Temple. +Se non hai ancora utilizzato il provider Cloud Temple, segui le istruzioni riportate [al seguente indirizzo](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest/docs) per installarlo e autenticarti nel tuo tenant. -Inizieremo creando un file .tf che descrive l'istanza che desideriamo distribuire. -Lo script seguente permette di distribuire una macchina virtuale da zero. +Inizieremo creando un file .tf che descriva l'istanza che si desidera distribuire. +Lo script seguente consente di distribuire una macchina virtuale da zero. ```hcl data "cloudtemple_compute_virtual_datacenter" "dc" { @@ -56,60 +56,60 @@ resource "cloudtemple_compute_virtual_machine" "scratch" { } ``` -I parametri utilizzati in questo script sono i seguenti: +I parametri utilizzati in questo script sono i seguenti : -- datacenter_id (obbligatorio): datacenter in cui viene distribuita la macchina virtuale -- host_cluster_id (obbligatorio): cluster in cui viene distribuita la macchina virtuale -- name (obbligatorio): nome della macchina -- memory: RAM allocata alla macchina all'avvio -- cpu: numero di vCPU allocate alla macchina all'avvio -- num_cores_per_socket: numero di core per socket -- datastore_cluster_id: datastore a cui è collegata la macchina -- guest_operating_system_moref: sistema operativo della macchina +- datacenter_id (obbligatorio) : datacenter in cui viene distribuita la macchina virtuale +- host_cluster_id (obbligatorio) : cluster in cui viene distribuita la macchina virtuale +- name (obbligatorio) : nome della macchina +- memory : RAM assegnata alla macchina all'avvio +- cpu : numero di vCPU assegnati alla macchina all'avvio +- num_cores_per_socket : numero di core per socket +- datastore_cluster_id : datastore a cui è associata la macchina +- guest_operating_system_moref : sistema operativo della macchina -Altri parametri possono essere applicati a una macchina virtuale durante la sua distribuzione. Puoi trovare l'elenco completo di questi parametri alla seguente pagina della [documentazione Terraform](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest/docs/resources/compute_virtual_machine) +Altri parametri possono essere applicati a una macchina virtuale durante la distribuzione. È possibile trovare l'elenco completo di questi parametri nella pagina seguente della [documentazione Terraform](https://registry.terraform.io/providers/Cloud-Temple/cloudtemple/latest/docs/resources/compute_virtual_machine) -Una volta creato e salvato il file .tf, esegui il seguente comando per verificare il tuo codice: +Una volta creato e salvato il file .tf, esegui il comando seguente per verificare il codice : ``` terraform validate ``` -Quindi, pianifica la distribuzione e verifica che il piano corrisponda a ciò che desideri realizzare: +Successivamente, pianifica la distribuzione e verifica che il piano corrisponda a quanto desideri realizzare : ``` terraform plan ``` -Infine, distribuisci la macchina virtuale eseguendo il seguente comando: +Infine, distribuisci la macchina virtuale eseguendo il comando seguente : ``` terraform apply ``` -## Utilizzare cloud-init per configurare una macchina virtuale distribuita dal provider Terraform +## Utilizzare cloud-init per configurare una macchina virtuale distribuita tramite il provider Terraform -Lo strumento __'cloud-init'__ permette di personalizzare una macchina virtuale, o un'istanza cloud, al suo primo avvio. Si tratta di uno standard molto diffuso. -Per maggiori informazioni, fare riferimento alla [documentazione](https://cloudinit.readthedocs.io/en/latest/) +Lo strumento __'cloud-init'__ consente di personalizzare una macchina virtuale, o un'istanza cloud, al primo avvio. Si tratta di uno standard molto diffuso. +Per ulteriori informazioni, fare riferimento alla [documentazione](https://cloudinit.readthedocs.io/en/latest/) ### Compatibilità -Per poter configurare tramite cloud-init una macchina virtuale distribuita dal provider Terraform Cloud Temple, l'__OVF__ utilizzato per distribuire quest'ultima deve essere __compatibile__ con __cloud-init__. +Per poter configurare tramite cloud-init una macchina virtuale distribuita tramite il provider Terraform Cloud Temple, l’__OVF__ utilizzato per distribuire quest'ultima deve essere __compatibile__ con __cloud-init__. -Per verificare la compatibilità della tua macchina virtuale con cloud-init, inserisci il seguente comando: +Per verificare la compatibilità della tua macchina virtuale con cloud-init, esegui il comando seguente: `systemctl status cloud-init.service` -Se cloud-init è correttamente installato sulla macchina, dovresti vedere una risposta come questa. (Vedi screenshot qui sotto) +Se cloud-init è installato correttamente sulla macchina, dovresti ottenere una risposta simile alla seguente. (Vedi screenshot di seguito) -Se necessario, puoi trovare immagini compatibili con cloud-init su internet (ad esempio [Ubuntu Cloud Image](https://cloud-images.ubuntu.com/)) o installarlo tu stesso sulla tua macchina prima di trasformarla in OVF. +Se necessario, è possibile trovare immagini compatibili con cloud-init su Internet (ad esempio [Ubuntu Cloud Image](https://cloud-images.ubuntu.com/)) o installarlo manualmente sulla propria macchina prima di convertirla in OVF. ### Distribuzione -Ora che sei sicuro che l'OVF distribuito sia compatibile con cloud-init, ecco un esempio di file terraform (.tf) che puoi utilizzare per configurare la tua macchina virtuale. -NB: Tutti gli esempi mostrati qui possono essere trovati nella cartella degli esempi del repository del provider Terraform Cloud Temple qui: [Esempi](https://github.com/Cloud-Temple/terraform-provider-cloudtemple/tree/main/examples) +Una volta accertato che l’OVF distribuito è effettivamente compatibile con cloud-init, di seguito è riportato un esempio di file Terraform (.tf) che puoi utilizzare per configurare la tua macchina virtuale. +NB : Tutti gli esempi mostrati qui possono essere trovati nella cartella esempi del repository del provider Terraform Cloud Temple qui: [Exemples](https://github.com/Cloud-Temple/terraform-provider-cloudtemple/tree/main/examples) #### `main.tf` @@ -177,27 +177,27 @@ users: plain_text_passwd: password ``` -L'elemento interessante qui è la presenza della proprietà cloud-init, puoi notare che è composta da due sottoproprietà: __network-config__ e __user-data__. +L'elemento interessante qui è la presenza della proprietà cloud-init, è possibile constatare che è composta da due sotto-proprietà: __network-config__ e __user-data__. -Queste fanno parte di un insieme di 7 proprietà che puoi utilizzare per configurare la tua macchina virtuale con cloud-init. +Queste ultime fanno parte di un insieme di 7 proprietà che è possibile utilizzare per configurare la propria macchina virtuale con cloud-init. -- __user-data__: Questo valore deve essere codificato in base64 e contiene in particolare informazioni di configurazione per gli account utente della macchina virtuale. Puoi anche aggiungere script per installare o aggiornare pacchetti. -- __network-config__: Questo valore deve essere codificato in base64 e contiene in particolare informazioni di configurazione di rete della macchina virtuale. -- __public-keys__: Indica che l'istanza deve popolare le 'authorized_keys' dell'utente predefinito con questo valore. -- __instance-id__: Permette di definire un identificatore univoco di istanza per cloud-init. -- __password__: Se definito, la password dell'utente predefinito sarà impostata su questo valore per consentire una connessione basata su password. La password sarà valida solo per una singola connessione. Se il valore è 'RANDOM', verrà generata una password casuale e visualizzata sulla console. -- __hostname__: Specifica un nome host per l'istanza distribuita. -- __seedfrom__: Permette di definire un URL da cui cloud-init andrà a cercare i file di configurazione che deve utilizzare. -Per maggiori informazioni sul funzionamento di cloud-init, si prega di fare riferimento alla [documentazione ufficiale](https://cloudinit.readthedocs.io/en/latest/) +- __user-data__ : Questo valore deve essere codificato in base64 e contiene in particolare informazioni di configurazione per gli account utente della macchina virtuale. È inoltre possibile aggiungere script per installare o aggiornare i pacchetti. +- __network-config__ : Questo valore deve essere codificato in base64 e contiene in particolare informazioni di configurazione di rete della macchina virtuale. +- __public-keys__ : Indica che l'istanza deve popolare i 'authorized_keys' dell'utente predefinito con questo valore. +- __instance-id__ : Consente di definire un identificativo univoco per l'istanza presso cloud-init. +- __password__ : Se impostato, la password dell'utente predefinito verrà impostata su questo valore per consentire una connessione basata su password. La password sarà valida solo per una singola connessione. Se il valore è 'RANDOM', verrà generata una password casuale e visualizzata sulla console. +- __hostname__ : Specifica un nome host per l'istanza distribuita. +- __seedfrom__ : Consente di definire un URL da cui cloud-init recupererà i file di configurazione da utilizzare. +Per ulteriori informazioni sul funzionamento di cloud-init, fare riferimento alla [documentazione ufficiale](https://cloudinit.readthedocs.io/en/latest/) ### Esecuzione -Per verificare la corretta esecuzione di cloud-init, dovresti essere in grado di connetterti con l'utente che hai configurato nel file user-data.yml o il nome host dovrebbe essere cambiato in quello che hai impostato in 'hostname'. +Per verificare il corretto avvio di cloud-init, dovresti poter accedere con l'utente configurato nel file user-data.yml o verificare che il nome host sia stato impostato su quello specificato in 'hostname'. -In caso di problemi, puoi controllare i log di cloud-init utilizzando il seguente comando: +In caso di problemi, puoi verificare i log di cloud-init utilizzando il comando seguente: `sudo cat /var/log/cloud-init-output.log` -Dovresti vedere varie informazioni sull'esecuzione di cloud-init. Nello screenshot seguente, si può notare che la configurazione della rete è andata a buon fine. +Dovresti visualizzare diverse informazioni relative all'esecuzione di cloud-init. Nella schermata seguente, si può constatare che la configurazione di rete è andata a buon fine. - + \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/vm_encryption.md b/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/vm_encryption.md index c01375b8..f067e664 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/vm_encryption.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/iaas_vmware/tutorials/vm_encryption.md @@ -1,8 +1,8 @@ --- -title: Encrypt a Virtual Machine +title: Crittografare una macchina virtuale tags: - iaas_vmware - - tutorials + - tutorial --- import shivaHsmKms_000 from '@site/docs/iaas_vmware/tutorials/images/shiva_hsm_kms_000.png' import shivaHsmKms_001 from '@site/docs/iaas_vmware/tutorials/images/shiva_hsm_kms_001.png' @@ -10,41 +10,41 @@ import shivaHsmKms_002 from '@site/docs/iaas_vmware/tutorials/images/shiva_hsm_k import shivaHsmKms_003 from '@site/docs/iaas_vmware/tutorials/images/shiva_hsm_kms_003.png' import shivaHsmKms_004 from '@site/docs/iaas_vmware/tutorials/images/shiva_hsm_kms_004.png' -This tutorial guides you through encrypting an IaaS VMware virtual machine from the Console portal. +Questo tutorial ti aiuta a crittografare una macchina virtuale IaaS VMWare dalla console. ### Prerequisiti -1. **Fornitore di chiavi (HSM/KMS)**: - - Un fornitore di chiavi deve essere configurato sulla vStack. (Se nessun fornitore di chiavi è configurato, contattare il servizio support tramite un ticket.) - - Assicurarsi che il fornitore di chiavi sia correttamente abilitato. +1. **Fornitore di chiavi (HSM/KMS)** : + - Un fornitore di chiavi deve essere configurato su vStack. (Se non è configurato alcun fornitore di chiavi, contattare il servizio di supporto tramite un ticket.) + - Assicurarsi che il fornitore di chiavi sia correttamente attivato. -2. **Stato della macchina virtuale**: +2. **Stato della macchina virtuale** : - La macchina virtuale deve essere spenta. - - La macchina virtuale non deve essere in modalità spp 'test'. - - La macchina virtuale non deve già essere crittografata. + - La macchina virtuale non deve essere in modalità 'test' spp. + - La macchina virtuale non deve essere già crittografata. - La macchina virtuale non deve avere snapshot. - La macchina virtuale non deve essere replicata. ### Interfaccia -Dopo esserti collegato al portale web Console, dal menu **'IaaS'**, sottomenu **'Configurazione'** e successivamente dalla scheda **'vCenters'**, troverai le informazioni che indicano se il cifratura è abilitata sulla vStack in questione. +Una volta connessi alla Console web, dal menu **'IaaS'**, sottomenu **'Configurazione'** e quindi alla scheda **'vCenters'**, troverete l'informazione che indica se la crittografia è attivata sulla vstack in questione. -Successivamente, recati nel sottomenu **'Macchine virtuali'** e seleziona la macchina che desideri cifrare. +Successivamente, recatevi nel sottomenu **'Macchine virtuali'** e selezionate la macchina che desiderate crittografare. -Nelle informazioni generali della macchina virtuale, troverai il dettaglio che indica se la macchina è già cifrata o meno. +Nelle informazioni generali della macchina virtuale, troverete l'informazione che indica se la macchina è già crittografata o meno. -Se la macchina virtuale soddisfa i prerequisiti, puoi proseguire la procedura facendo clic sul pulsante con l'icona di un lucchetto nella barra degli strumenti contrassegnato da **'Cifra la macchina virtuale'**. +Se la macchina virtuale soddisfa i prerequisiti, potete continuare la procedura facendo clic sul pulsante con l'icona di un lucchetto nella barra degli strumenti che indica **'Crittografa la macchina virtuale'**. -Verrà visualizzata una finestra di conferma: seleziona **'Cifra'**. +Apparirà una finestra di conferma, selezionate Crittografa. -Una volta completata l'azione, dovresti notare che l'informazione è cambiata, indicando che la tua macchina è ora cifrata. +Una volta completata l'operazione, dovreste vedere l'informazione modificata che indica che la vostra macchina è crittografata. - + \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/llmaas/api.md b/i18n/it/docusaurus-plugin-content-docs/current/llmaas/api.md index efbd8693..a76d17d1 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/llmaas/api.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/llmaas/api.md @@ -13,47 +13,49 @@ https://api.ai.cloud-temple.com/v1 ## Autenticazione -Tutte le richieste richiedono un header `Authorization` con il tuo token API: +Tutte le richieste richiedono un header `Authorization` con il token API: ``` -Authorization: Bearer IL_TUO_TOKEN_API +Authorization: Bearer VOTRE_TOKEN_API ``` -## Limitazione delle richieste e fatturazione +## Rate Limiting e Fatturazione -### Il Principio dei Terzi: Livello di Accesso, Budget e Capacità +### Il Principio dei Tier: Livello di Accesso, Budget e Capacità -Il nostro sistema di terzi è progettato come **invii completi di servizio** che definiscono tre aspetti fondamentali del vostro utilizzo: +Il nostro sistema di tier è progettato come **pacchetti di servizio completi** che definiscono tre aspetti chiave del vostro utilizzo: -1. **Un Livello di Accesso (Credito d'Acquisto)**: Per i Terzi 1 al 4, si tratta di un importo da pagare in anticipo (upfront) per attivare il servizio e sbloccare le capacità tecniche e il budget associati al livello scelto. -2. **Un Limite di Budget Mensile**: È il massimale della vostra consumazione mensile, garantendovi un controllo totale sui costi. -3. **Una Capacità Tecnica**: Si tratta dei limiti di throughput (token al giorno e all'ora) che garantiscono un'efficienza stabile e prevedibile per il volume delle chiamate. +1. **Un Livello di Accesso (Credito d'Acquisto)** : Per i Tier da 1 a 4, si tratta di un importo da pagare in anticipo (upfront) per attivare il servizio e sbloccare le capacità tecniche e budgetarie del livello scelto. +2. **Un Limite di Budget Mensile** : È il tetto del vostro consumo mensile, garantendovi un controllo totale sui costi. +3. **Una Capacità Tecnica** : Sono i limiti di throughput (token al giorno e all'ora) che garantiscono prestazioni stabili e prevedibili per il vostro volume di chiamate. -La scelta di un terzo rappresenta quindi un equilibrio tra l'investimento iniziale, il budget mensile previsto e la capacità tecnica richiesta. La vostra consumazione all'interno di questo invio sarà poi fatturata secondo i tariffe in vigore. +La scelta di un tier è quindi un equilibrio tra l'investimento iniziale, il budget mensile previsto e la capacità tecnica richiesta. Il vostro consumo all'interno di questo pacchetto viene quindi fatturato secondo le tariffe vigenti. -### Tier Table +### Tabella dei Piani -| Tier | Purchase Credit | Monthly Limit | Tokens Output/Hour | Tokens Output/Day | Description | -|------|-----------------|----------------|--------------------|-------------------|-----------| -| **Tier 1** | 200 € | 1,000 € | 150,000 | 3,600,000 | Standard usage | -| **Tier 2** | 500 € | 3,000 € | 300,000 | 7,200,000 | Professional usage | -| **Tier 3** | 1,000 € | 5,000 € | 450,000 | 10,800,000 | High volume | -| **Tier 4** | 4,000 € | 10,000 € | 600,000 | 14,400,000 | Enterprise | -| **Monthly Billing** | N/A | Unlimited | High priority | High priority | Contact sales | +| Piano | Credito di Acquisto | Limite Mensile | Token di Output/Ora | Token di Output/Giorno | Descrizione | +| ------------------------- | -------------- | ---------------- | ------------------- | ------------------ | -------------------- | +| **Piano 1** | 200 € | 1 000 € | 150 000 | 3 600 000 | Utilizzo standard | +| **Piano 2** | 500 € | 3 000 € | 300 000 | 7 200 000 | Uso professionale | +| **Piano 3** | 1 000 € | 5 000 € | 450 000 | 10 800 000 | Alto volume | +| **Piano 4** | 4 000 € | 10 000 € | 600 000 | 14 400 000 | Azienda | +| **Fatturazione Mensile** | N/A | Illimitata | Priorità elevata | Priorità elevata | Contatto commerciale | -**Note**: Rate limits are calculated based on output tokens. Token pricing varies by usage: +**Nota** : I limiti di frequenza sono calcolati in base ai token di output. I prezzi variano in base all'uso : -- **Input tokens**: 1.90 € / million -- **Output tokens (standard)**: 8.00 € / million -- **Output tokens (reasoner)**: 8.00 € / million (applies to most advanced models for complex agent-like or reasoning tasks) +| Tipo di utilizzo | Tariffa | +| -------------------------------------- | ------------------------------------------------ | +| **Token di input** | 1.8 € / milione | +| **Token di output (chat/completamento)** | 8.00 € / milione | +| **Token di ragionamento** | 8.00 € / milione | +| **Reranking** | 4.00 € / milione di token riordinati | +| **Batch asincrono (input)** | 0.9 € / milione (−50% rispetto allo standard) | +| **Batch asincrono (output)** | 4.00 € / milione (−50% rispetto allo standard) | +| **Trascrizione Audio** | 0.01 € / minuto (ogni minuto iniziato è dovuto) | -#### **Billing Audio** +### Intestazioni di Limite -- **Audio Transcription**: 0.01 € / minute (any started minute is billable) - -### Limit Headers - -Responses include informative headers: +Le risposte includono intestazioni informative: ``` X-RateLimit-Limit-Requests: 1000 @@ -61,12 +63,12 @@ X-RateLimit-Remaining-Requests: 999 X-RateLimit-Reset-Requests: 1640995200 ``` -### Errore 429 - Limite raggiunta +### Errore 429 - Limite Raggiunto ```json { "error": { - "message": "Limite di velocità superato. Aggiorna il tuo piano o riprova più tardi.", + "message": "Rate limit exceeded. Please upgrade your tier or try again later.", "type": "rate_limit_error", "code": "rate_limit_exceeded" } @@ -84,13 +86,13 @@ Genera risposte conversazionali. ```bash curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ -H "Content-Type: application/json" \ - -H "Authorization: Bearer IL_TUO_TOKEN_API" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ -d '{ - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "messages": [ { "role": "user", - "content": "Spiega la fotosintesi" + "content": "Expliquez la photosynthèse" } ], "max_tokens": 200, @@ -98,21 +100,21 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ }' ``` -#### Parametri +#### Paramètres -| Parametro | Tipo | Obbligatorio | Descrizione | -|-----------|------|-------------|-------------| -| `model` | string | ✅ | ID del modello (vedi [catalogo](./models)) | -| `messages` | array | ✅ | Conversazione (role: system/user/assistant) | -| `stream` | boolean | ❌ | Abilita lo streaming (valore predefinito: false) | -| `temperature` | float | ❌ | Creatività da 0.0 a 2.0 (valore predefinito: 0.7) | -| `max_tokens` | integer | ❌ | Limite di token (valore predefinito: 1024) | -| `top_p` | float | ❌ | Campionamento nucleus da 0.0 a 1.0 (valore predefinito: 1.0) | -| `presence_penalty` | float | ❌ | Penalità presenza da -2.0 a 2.0 (valore predefinito: 0) | -| `frequency_penalty` | float | ❌ | Penalità frequenza da -2.0 a 2.0 (valore predefinito: 0) | -| `user` | string | ❌ | ID utente univoco | -| `tools` | array | ❌ | Elenco degli strumenti che il modello può chiamare. | -| `tool_choice` | string/object | ❌ | Controlla se il modello deve chiamare uno strumento. "none", "auto", oppure `{"type": "function", "function": {"name": "my_function"}}`. | +| Paramètre | Tipo | Obbligatorio | Descrizione | +| ------------------- | ------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------- | +| `model` | string | ✅ | ID del modello (vedi [catalogo](./models)) | +| `messages` | array | ✅ | Conversazione (ruolo: system/user/assistant) | +| `stream` | boolean | ❌ | Attiva lo streaming (predefinito: false) | +| `temperature` | float | ❌ | Creatività 0.0-2.0 (predefinito: 0.7) | +| `max_tokens` | integer | ❌ | Limite di token (predefinito: 1024) | +| `top_p` | float | ❌ | Campionamento nucleus 0.0-1.0 (predefinito: 1.0) | +| `presence_penalty` | float | ❌ | Penalità presenza da -2.0 a 2.0 (predefinito: 0) | +| `frequency_penalty` | float | ❌ | Penalità frequenza da -2.0 a 2.0 (predefinito: 0) | +| `user` | string | ❌ | ID utente univoco | +| `tools` | array | ❌ | Elenco degli strumenti che il modello può chiamare. | +| `tool_choice` | string/object | ❌ | Controlla se il modello deve chiamare uno strumento. "none", "auto", o `{"type": "function", "function": {"name": "my_function"}}`. | #### Risposta Standard @@ -121,13 +123,13 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ "id": "chatcmpl-bc52de347f2e4068b7bde380c0f8db37", "object": "chat.completion", "created": 1749114814, - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "choices": [ { "index": 0, "message": { "role": "assistant", - "content": "La fotosintesi è un processo biologico..." + "content": "La photosynthèse est un processus biologique..." }, "finish_reason": "stop" } @@ -140,16 +142,16 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ } ``` -#### Risposta con Chiamata a Strumento +#### Risposta con Chiamata di Strumento -Se il modello decide di richiamare uno strumento, la risposta avrà un `finish_reason` pari a `tool_calls` e il messaggio conterrà un array `tool_calls`. +Se il modello decide di chiamare uno strumento, la risposta avrà un `finish_reason` di `tool_calls` e il messaggio conterrà un array `tool_calls`. ```json { "id": "chatcmpl-9f27a53f52b44a9693753f2a5e1f7a73", "object": "chat.completion", "created": 1749115200, - "model": "qwen3:14b", + "model": "gpt-oss:120b", "choices": [ { "index": 0, @@ -178,15 +180,15 @@ Se il modello decide di richiamare uno strumento, la risposta avrà un `finish_r } ``` -Dopo aver ricevuto una risposta `tool_calls`, è necessario eseguire lo strumento dal proprio lato, quindi restituire il risultato al modello utilizzando un messaggio con il `role: "tool"`. +Dopo aver ricevuto una risposta `tool_calls`, è necessario eseguire lo strumento sul tuo lato, quindi inviare il risultato al modello utilizzando un messaggio con `role: "tool"`. ```json { - "model": "qwen3:14b", + "model": "gpt-oss:120b", "messages": [ { "role": "user", - "content": "Che tempo fa a Parigi?" + "content": "Quel temps fait-il à Paris ?" }, { "role": "assistant", @@ -204,7 +206,7 @@ Dopo aver ricevuto una risposta `tool_calls`, è necessario eseguire lo strument { "role": "tool", "tool_call_id": "call_abc123", - "content": "{\"temperature\": \"22\", \"unit\": \"celsius\", \"description\": \"Soleggiato\"}" + "content": "{\"temperature\": \"22\", \"unit\": \"celsius\", \"description\": \"Ensoleillé\"}" } ] } @@ -212,45 +214,42 @@ Dopo aver ricevuto una risposta `tool_calls`, è necessario eseguire lo strument #### Streaming (SSE) -Con `"stream": true`, la risposta arriva token per token: - -**Intestazioni della risposta:** +Con `"stream": true`, la risposta arriva token per token : +**Header di risposta :** ``` Content-Type: text/event-stream Cache-Control: no-cache ``` -**Formato degli eventi:** - +**Formato degli eventi :** ``` -data: {"choices":[{"delta":{"content":"La"},"finish_reason":null,"index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"granite3.3:8b","object":"chat.completion.chunk"} +data: {"choices":[{"delta":{"content":"La"},"finish_reason":null,"index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"gpt-oss:120b","object":"chat.completion.chunk"} -data: {"choices":[{"delta":{"content":" photo"},"finish_reason":null,"index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"granite3.3:8b","object":"chat.completion.chunk"} +data: {"choices":[{"delta":{"content":" photo"},"finish_reason":null,"index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"gpt-oss:120b","object":"chat.completion.chunk"} -data: {"choices":[{"delta":{"content":""},"finish_reason":"stop","index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"granite3.3:8b","object":"chat.completion.chunk"} +data: {"choices":[{"delta":{"content":""},"finish_reason":"stop","index":0}],"created":1749114814,"id":"chatcmpl-bc52de347f2e4068b7bde380c0f8db37","model":"gpt-oss:120b","object":"chat.completion.chunk"} data: [DONE] ``` -**Struttura dei chunk:** - +**Struttura dei chunk :** - `choices[].delta.content` : Contenuto incrementale - `finish_reason` : `null` durante lo streaming, poi `"stop"` -- Segnale di fine: `data: [DONE]` +- Segnale di fine : `data: [DONE]` -### Richieste Multimodali (Visione) +### Richieste Multimodali (Vision) -Per analizzare immagini, puoi inviare una richiesta in cui il campo `content` di un messaggio utente è un array contenente sia testo che immagini. +Per analizzare le immagini, è possibile inviare una richiesta in cui il campo `content` di un messaggio utente è un array (array) contenente sia testo che immagini. -Il formato per un'immagine è un oggetto con `type: "image_url"` e un campo `image_url` che contiene l'URL dell'immagine nel formato `data URI` (base64). +Il formato per un'immagine è un oggetto con `type: "image_url"` e un campo `image_url` contenente l'URL dell'immagine nel formato `data URI` (base64). -:::info[Nota sulla Compatibilità] -Sebbene il formato standard e raccomandato sia `{"type": "image_url", "image_url": {"url": "data:..."}}`, l'API supporta anche, per maggiore flessibilità, un formato semplificato `{"type": "image", "image": "data:..."}`. Tuttavia, si consiglia di utilizzare il formato standard `image_url` per una migliore compatibilità con l'ecosistema OpenAI. +:::info Nota sulla Compatibilità +Sebbene il formato standard e consigliato sia `{"type": "image_url", "image_url": {"url": "data:..."}}`, l'API supporta anche, per flessibilità, un formato semplificato `{"type": "image", "image": "data:..."}`. Si consiglia tuttavia di utilizzare il formato standard `image_url` per una migliore compatibilità con l'ecosistema OpenAI. ::: -:::tip[Riconoscimento Ottico dei Caratteri (OCR) e Analisi Documenti] -Per compiti specifici di analisi documenti (PDF, scansioni, tabelle), raccomandiamo l'uso del modello specializzato **DeepSeek-OCR**. Consulta la [documentazione dedicata](./ocr). +:::tip OCR e Analisi dei Documenti +Per attività specifiche di analisi dei documenti (PDF, scans, tableaux), raccomandiamo l'utilizzo del modello specializzato **DeepSeek-OCR**. Consulta la [documentazione dedicata](./ocr). ::: #### Esempio di Richiesta Visione @@ -258,7 +257,7 @@ Per compiti specifici di analisi documenti (PDF, scansioni, tabelle), raccomandi ```bash curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ -H "Content-Type: application/json" \ - -H "Authorization: Bearer IL_TUO_TOKEN_API" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ -d '{ "model": "gemma3:27b", "messages": [ @@ -267,7 +266,7 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ "content": [ { "type": "text", - "text": "Cosa vedi in questa immagine?" + "text": "Que vois-tu sur cette image ?" }, { "type": "image_url", @@ -285,24 +284,24 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ ### POST /v1/completions :::warning -**Nota** : L'endpoint `/v1/completions` utilizza lo stesso formato di `/v1/chat/completions` con messaggi. -Per completamenti di testo semplici, utilizza un messaggio utente con il tuo prompt. +**Nota** : L'endpoint `/v1/completions` utilizza lo stesso formato di `/v1/chat/completions` con i messaggi. +Per la completione di testo semplice, utilizza un messaggio utente con il tuo prompt. ::: -Completamento di testo tramite formato chat. +Completioni di testo tramite formato chat. #### Richiesta ```bash curl -X POST "https://api.ai.cloud-temple.com/v1/completions" \ -H "Content-Type: application/json" \ - -H "Authorization: Bearer IL_TUO_TOKEN_API" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ -d '{ - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "messages": [ { "role": "user", - "content": "Completa questa frase: L'intelligenza artificiale è" + "content": "Complétez cette phrase: L'intelligence artificielle est" } ], "max_tokens": 100, @@ -312,7 +311,7 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/completions" \ #### Parametri -Identici a `/v1/chat/completions` - vedere sezione precedente. +Uguali a `/v1/chat/completions` - vedere la sezione precedente. #### Risposta @@ -320,13 +319,13 @@ Formato identico a `/v1/chat/completions`. ### POST /v1/audio/transcriptions -Trascrizione audio in testo (Whisper). +Trascrizione da audio a testo (Whisper). #### Richiesta ```bash curl -X POST "https://api.ai.cloud-temple.com/v1/audio/transcriptions" \ - -H "Authorization: Bearer IL_TUO_TOKEN_API" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ -F "file=@audio.wav" \ -F "language=fr" \ -F "response_format=json" @@ -334,26 +333,26 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/audio/transcriptions" \ #### Parametri -| Parametro | Tipo | Obbligatorio | Descrizione | -|-----------|------|-------------|-------------| -| `file` | binary | ✅ | File audio (wav, mp3, m4a). | -| `language` | string | ❌ | Codice lingua ISO 639-1 (es: "fr"). Rilevamento automatico se non fornito. | -| `initial_prompt` | string | ❌ | Contesto o parole specifiche per migliorare la precisione della trascrizione. | -| `task` | string | ❌ | Task da eseguire: `transcribe` (predefinito) o `translate` (tradurre in inglese). | -| `response_format` | string | ❌ | `json` (predefinito, equivalente a `verbose_json`). I formati `text`, `srt`, `vtt` non sono attualmente supportati. | +| Parametro | Tipo | Obbligatorio | Descrizione | +| ----------------- | ------ | ------------ | ------------------------------------------------------------------------------------------------------------------ | +| `file` | binary | ✅ | File audio (wav, mp3, m4a). | +| `language` | string | ❌ | Codice lingua ISO 639-1 (ex: "fr"). Rilevamento automatico se non fornito. | +| `initial_prompt` | string | ❌ | Contesto o parole specifiche per migliorare la precisione della trascrizione. | +| `task` | string | ❌ | Attività da eseguire: `transcribe` (défaut) o `translate` (traduire en anglais). | +| `response_format` | string | ❌ | `json` (défaut, équivalent à `verbose_json`). I formati `text`, `srt`, `vtt` non sono attualmente supportati. | #### Risposta (`json`) ```json { - "text": "Ciao, questo è un test di trascrizione audio.", + "text": "Bonjour, ceci est un test de transcription audio.", "segments": [ { "id": 0, "seek": 0, "start": 0.0, "end": 4.0, - "text": " Ciao, questo è un test di trascrizione audio.", + "text": " Bonjour, ceci est un test de transcription audio.", "tokens": [ 50364, 40365, 33, 2373, 359, 456, 2373, 323, 1330, 2373, 2264, 50564 ], "temperature": 0.0, "avg_logprob": -0.25, @@ -361,32 +360,32 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/audio/transcriptions" \ "no_speech_prob": 0.05 } ], - "language": "it" + "language": "fr" } ``` ### POST /v1/embeddings -Crea un vettore di embedding che rappresenta il testo in ingresso. +Crea un vettore di embedding che rappresenta il testo di input. #### Richiesta ```bash curl -X POST "https://api.ai.cloud-temple.com/v1/embeddings" \ -H "Content-Type: application/json" \ - -H "Authorization: Bearer IL_TUO_TOKEN_API" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ -d '{ "model": "granite-embedding:278m", - "input": "Il testo da vettorizzare" + "input": "Le texte à vectoriser" }' ``` #### Parametri -| Parametro | Tipo | Obbligatorio | Descrizione | -|-----------|------|-------------|-------------| -| `model` | string | ✅ | ID del modello di embedding (vedi [catalogo](./models)) | -| `input` | string o array di stringhe | ✅ | Il testo o l'elenco di testi da vettorizzare. | +| Parametro | Tipo | Obbligatorio | Descrizione | +| --------- | -------------------------- | ------------ | ----------------------------------------------------- | +| `model` | string | ✅ | ID del modello di embedding (vedi [catalogo](./models)) | +| `input` | stringa o array di stringhe | ✅ | Il testo o l'elenco di testi da vettorizzare. | #### Risposta @@ -413,15 +412,105 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/embeddings" \ } ``` +### POST /v1/rerank + +Riordina un elenco di documenti in base alla pertinenza rispetto a una query. Compatibile con l'API Cohere (v1 e v2). + +**Fatturazione** : 4€ / milione di token riordinati. Ideale per migliorare la precisione delle pipeline RAG. + +#### Richiesta + +```bash +curl -X POST "https://api.ai.cloud-temple.com/v1/rerank" \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ + -d '{ + "model": "nvidia/llama-nemotron-rerank-vl-1b-v2", + "query": "Quelle est la capitale de la France ?", + "documents": [ + "Paris est la capitale et la plus grande ville de France.", + "Lyon est une grande ville du sud-est de la France.", + "La France est un pays d'\''Europe occidentale." + ], + "top_n": 2 + }' +``` + +#### Parametri + +| Parametro | Tipo | Obbligatorio | Descrizione | +| ----------- | ------- | ------------ | --------------------------------------------------------------------------- | +| `model` | string | ✅ | ID del modello di reranking (vedere [catalogo](./models#modèles-de-reranking)) | +| `query` | string | ✅ | La query di ricerca | +| `documents` | array | ✅ | Elenco dei documenti da riordinare | +| `top_n` | integer | ❌ | Numero di risultati da restituire (predefinito: tutti) | + +#### Risposta + +```json +{ + "id": "rerank-7f3a2b1c", + "results": [ + { + "index": 0, + "relevance_score": 0.9874, + "document": { + "text": "Paris est la capitale et la plus grande ville de France." + } + }, + { + "index": 2, + "relevance_score": 0.5231, + "document": { + "text": "La France est un pays d'Europe occidentale." + } + } + ], + "usage": { + "billed_units": { + "search_units": 3 + } + } +} +``` + +L'endpoint `/v2/rerank` (Cohere SDK v2) è disponibile anche con lo stesso formato di richiesta. + +#### Esempio Python (SDK Cohere) + +```python +import cohere + +# Compatible avec le SDK Cohere en pointant vers l'API LLMaaS +co = cohere.Client( + api_key="VOTRE_TOKEN_API", + base_url="https://api.ai.cloud-temple.com" +) + +results = co.rerank( + model="nvidia/llama-nemotron-rerank-vl-1b-v2", + query="Quelle est la capitale de la France ?", + documents=[ + "Paris est la capitale et la plus grande ville de France.", + "Lyon est une grande ville du sud-est de la France.", + "La France est un pays d'Europe occidentale." + ], + top_n=2 +) + +for result in results.results: + print(f"Index: {result.index}, Score: {result.relevance_score:.4f}") +``` + ### GET /v1/models -List of available models. +Elenco dei modelli disponibili. #### Richiesta ```bash curl -X GET "https://api.ai.cloud-temple.com/v1/models" \ - -H "Authorization: Bearer IL_TUO_TOKEN_API" + -H "Authorization: Bearer VOTRE_TOKEN_API" ``` #### Risposta @@ -431,16 +520,16 @@ curl -X GET "https://api.ai.cloud-temple.com/v1/models" \ "object": "list", "data": [ { - "id": "granite3.3:8b", + "id": "gpt-oss:120b", "object": "model", "created": 1749110897, "owned_by": "CloudTemple", - "root": "granite3.3:8b", - "aliases": ["granite3.3:8b"], + "root": "gpt-oss:120b", + "aliases": ["gpt-oss:120b"], "max_model_len": 60000, "permission": [ { - "id": "modelperm-granite3.3:8b-1749110897", + "id": "modelperm-gpt-oss:120b-1749110897", "object": "model_permission", "allow_sampling": true, "allow_view": true, @@ -452,26 +541,26 @@ curl -X GET "https://api.ai.cloud-temple.com/v1/models" \ } ``` -## Codici di errore +## Codici di Errore ### 400 - Richiesta non valida ```json { "error": { - "message": "Parametro 'temperature' non valido: deve essere compreso tra 0 e 2", + "message": "Invalid parameter 'temperature': must be between 0 and 2", "type": "invalid_request_error", "param": "temperature" } } ``` -### 401 - Non autorizzato +### 401 - Non Autorizzato ```json { "error": { - "message": "Chiave API fornita non valida", + "message": "Invalid API key provided", "type": "authentication_error" } } @@ -482,7 +571,7 @@ curl -X GET "https://api.ai.cloud-temple.com/v1/models" \ ```json { "error": { - "message": "Il modello 'unknown-model' non esiste", + "message": "Model 'unknown-model' does not exist", "type": "invalid_request_error", "param": "model", "code": "model_not_found" @@ -490,41 +579,41 @@ curl -X GET "https://api.ai.cloud-temple.com/v1/models" \ } ``` -### 429 - Limite di velocità +### 429 - Limite di Velocità ```json { "error": { - "message": "Limite di velocità superato. Aggiorna il tuo piano o riprova più tardi.", + "message": "Rate limit exceeded. Please upgrade your tier or try again later.", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` -### 500 - Errore del server +### 500 - Errore del Server ```json { "error": { - "message": "Errore interno del server", + "message": "Internal server error", "type": "server_error" } } ``` -### 503 - Servizio Non Disponibile +### 503 - Servizio non disponibile ```json { "error": { - "message": "Servizio momentaneamente non disponibile", + "message": "Service temporarily unavailable", "type": "service_unavailable_error" } } ``` -## Esempi per Linguaggio +## Esempi per linguaggio ### Python con requests @@ -533,9 +622,9 @@ import requests import json # Configurazione -# It is recommended to protect your API key by using environment variables. +# Si consiglia di proteggere la propria chiave API utilizzando variabili d'ambiente. # Esempio: API_KEY = os.getenv("LLMAAS_API_KEY") -API_KEY = "IL_TUO_TOKEN_API" +API_KEY = "VOTRE_TOKEN_API" BASE_URL = "https://api.ai.cloud-temple.com/v1" headers = { @@ -543,11 +632,11 @@ headers = { "Authorization": f"Bearer {API_KEY}" } -# Chat completion +# Completamento chat payload = { - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "messages": [ - {"role": "user", "content": "Ciao!"} + {"role": "user", "content": "Bonjour !"} ], "max_tokens": 100 } @@ -557,21 +646,21 @@ try: f"{BASE_URL}/chat/completions", headers=headers, json=payload, - timeout=30 # Aggiunta di un timeout per la richiesta + timeout=30 # Aggiunta di un timeout per la richiesta ) - response.raise_for_status() # Solleva un'eccezione per i codici di errore HTTP (4xx, 5xx) + response.raise_for_status() # Solleva un'eccezione per i codici di errore HTTP (4xx, 5xx) result = response.json() print(result["choices"][0]["message"]["content"]) except requests.exceptions.HTTPError as e: - print(f"Errore HTTP: {e.response.status_code} - {e.response.text}") + print(f"Erreur HTTP: {e.response.status_code} - {e.response.text}") except requests.exceptions.RequestException as e: - print(f"Errore di rete: {e}") + print(f"Erreur réseau: {e}") except json.JSONDecodeError: - print(f"Errore di decodifica JSON: {response.text}") + print(f"Erreur de décodage JSON: {response.text}") except Exception as e: - print(f"Si è verificato un errore imprevisto: {e}") + print(f"Une erreur inattendue est survenue: {e}") ``` ### Python con Streaming @@ -580,10 +669,10 @@ except Exception as e: import requests import json -def stream_chat(message, model="granite3.3:8b"): - # Si consigliato proteggere la propria chiave API utilizzando variabili d'ambiente. +def stream_chat(message, model="gpt-oss:120b"): + # Si consiglia di proteggere la propria chiave API utilizzando variabili di ambiente. # Esempio: API_KEY = os.getenv("LLMAAS_API_KEY") - API_KEY = "IL_TUO_TOKEN_API" + API_KEY = "VOTRE_TOKEN_API" BASE_URL = "https://api.ai.cloud-temple.com/v1" headers = { @@ -604,16 +693,16 @@ def stream_chat(message, model="granite3.3:8b"): headers=headers, json=payload, stream=True, - timeout=30 # Aggiunta di un timeout per la richiesta + timeout=30 # Aggiunta di un timeout per la richiesta ) - response.raise_for_status() # Solleva un'eccezione per codici di errore HTTP (4xx, 5xx) + response.raise_for_status() # Solleva un'eccezione per i codici di errore HTTP (4xx, 5xx) for line in response.iter_lines(): if line: line = line.decode('utf-8') if line.startswith('data: '): - data = line[6:] # Rimuove 'data: ' + data = line[6:] # Rimuovere 'data: ' if data == '[DONE]': break try: @@ -622,30 +711,29 @@ def stream_chat(message, model="granite3.3:8b"): if content: print(content, end='', flush=True) except json.JSONDecodeError: - print(f"Errore nel decodificare il JSON nel flusso: {data}") + print(f"Erreur de décodage JSON dans le stream: {data}") continue - print() # Nuova riga dopo il flusso + print() # Nuova riga dopo lo stream except requests.exceptions.HTTPError as e: - print(f"Errore HTTP: {e.response.status_code} - {e.response.text}") + print(f"Erreur HTTP: {e.response.status_code} - {e.response.text}") except requests.exceptions.RequestException as e: - print(f"Errore di rete: {e}") + print(f"Erreur réseau: {e}") except Exception as e: - print(f"Si è verificato un errore imprevisto: {e}") -``` + print(f"Une erreur inattendue est survenue: {e}") # Utilizzo - -stream_chat("Spiega la fisica quantistica") +stream_chat("Expliquez la physique quantique") +``` ### JavaScript/Node.js ```javascript const axios = require('axios'); -// Configurazione -// Si raccomanda di proteggere la tua chiave API utilizzando variabili d'ambiente. -// Esempio: const API_KEY = process.env.LLMAAS_API_KEY; -const API_KEY = 'IL_TUO_TOKEN_API'; +// Configuration +// Il est recommandé de protéger votre clé API en utilisant des variables d'environnement. +// Exemple: const API_KEY = process.env.LLMAAS_API_KEY; +const API_KEY = 'VOTRE_TOKEN_API'; const BASE_URL = 'https://api.ai.cloud-temple.com/v1'; async function chatCompletion(message) { @@ -653,7 +741,7 @@ async function chatCompletion(message) { const response = await axios.post( `${BASE_URL}/chat/completions`, { - model: 'granite3.3:8b', + model: 'gpt-oss:120b', messages: [ { role: 'user', content: message } ], @@ -664,20 +752,20 @@ async function chatCompletion(message) { 'Content-Type': 'application/json', 'Authorization': `Bearer ${API_KEY}` }, - timeout: 30000 // Aggiunta di un timeout per la richiesta (30 secondi) + timeout: 30000 // Ajout d'un timeout pour la requête (30 secondes) } ); return response.data.choices[0].message.content; } catch (error) { - console.error('Errore:', error.response?.data || error.message); - // La gestione degli errori può essere ulteriormente approfondita se necessario - // Ad esempio: if (error.response?.status === 429) { console.error("Limite di richiesta superato"); } + console.error('Erreur:', error.response?.data || error.message); + // Gestion plus détaillée des erreurs peut être ajoutée ici si nécessaire + // Par exemple: if (error.response?.status === 429) { console.error("Rate limit exceeded"); } } } -// Utilizzo -chatCompletion('Ciao!').then(response => { +// Utilisation +chatCompletion('Bonjour !').then(response => { if (response) { console.log(response); } @@ -695,7 +783,7 @@ async function fetchCompletion(message) { 'Authorization': `Bearer ${API_KEY}` }, body: JSON.stringify({ - model: 'granite3.3:8b', + model: 'gpt-oss:120b', messages: [ { role: 'user', content: message } ], @@ -712,9 +800,9 @@ async function fetchCompletion(message) { } ``` -## Best Practices +## Migliori Pratiche -### Gestione degli errori +### Gestione degli Errori ```python def safe_api_call(payload): @@ -724,58 +812,58 @@ def safe_api_call(payload): return response.json() except requests.exceptions.HTTPError as e: if response.status_code == 429: - print("Limite di velocità raggiunta, attendere...") + print("Rate limit atteint, attendre...") time.sleep(60) # Attendere 1 minuto - return safe_api_call(payload) # Riprovare + return safe_api_call(payload) # Riprova else: - print(f"Errore HTTP: {e}") + print(f"Erreur HTTP: {e}") except requests.exceptions.RequestException as e: - print(f"Errore di rete: {e}") + print(f"Erreur réseau: {e}") ``` ### Ottimizzazione dei Costi -1. **Utilizza modelli appropriati**: modelli più piccoli per i test -2. **Limita max_tokens**: evita risposte troppo lunghe -3. **Riutilizza le conversazioni**: finestra di contesto efficiente -4. **Monitoraggio**: controlla il tuo utilizzo nella Console +1. **Utilizza modelli appropriati** : Modelli più piccoli per i test +2. **Limita max_tokens** : Evita risposte troppo lunghe +3. **Riutilizza le conversazioni** : Finestra di contesto efficiente +4. **Monitoraggio** : Monitora il tuo utilizzo nella Console ### Sicurezza -1. **Proteggi il tuo token**: Variabili di ambiente -2. **Rotazione periodica**: Cambia le tue chiavi regolarmente -3. **Validazione input**: Pulisci i dati utente -4. **Limitazione delle richieste client**: Implementa i tuoi limiti +1. **Proteggi il tuo token** : Variabili d'ambiente +2. **Rotazione regolare** : Modifica le tue chiavi periodicamente +3. **Validazione input** : Pulisci i dati utente +4. **Limitazione della velocità client** : Implementa i tuoi limiti ## SDK e Integrazioni -L'API LLMaaS è compatibile con i SDK OpenAI esistenti modificando l'URL di base: +L'API LLMaaS è compatibile con gli SDK OpenAI esistenti modificando l'URL di base : -### OpenAI Python SDK +### SDK Python di OpenAI ```python from openai import OpenAI -# It is recommended to protect your API key by using environment variables. +# Si consiglia di proteggere la propria chiave API utilizzando variabili di ambiente. # Esempio: api_key=os.getenv("LLMAAS_API_KEY") client = OpenAI( - api_key="IL_TUO_TOKEN_API", + api_key="VOTRE_TOKEN_API", base_url="https://api.ai.cloud-temple.com/v1" ) try: response = client.chat.completions.create( - model="granite3.3:8b", + model="gpt-oss:120b", messages=[ - {"role": "user", "content": "Ciao!"} + {"role": "user", "content": "Bonjour !"} ], - max_tokens=50 # Aggiunta di max_tokens per coerenza con i test + max_tokens=50 # Aggiunta di max_tokens per coerenza con i test ) print(response.choices[0].message.content) except Exception as e: - print(f"Errore OpenAI SDK: {e}") + print(f"Erreur OpenAI SDK: {e}") ``` ### LangChain @@ -785,40 +873,40 @@ from langchain_openai import ChatOpenAI from langchain.schema import HumanMessage # Configurazione del modello di chat (compatibile con LLMaaS) -# It is recommended to protect your API key by using environment variables. +# Si consiglia di proteggere la propria chiave API utilizzando variabili di ambiente. # Esempio: api_key=os.getenv("LLMAAS_API_KEY") chat = ChatOpenAI( - api_key="IL_TUO_TOKEN_API", + api_key="VOTRE_TOKEN_API", base_url="https://api.ai.cloud-temple.com/v1", - model="granite3.3:8b", + model="gpt-oss:120b", # Nota: i parametri come max_tokens vengono passati tramite model_kwargs - # per garantire la compatibilità tra le diverse versioni di LangChain. + # per garantire la compatibilità tra le versioni di LangChain. model_kwargs={"max_tokens": 200} ) try: # Utilizzo con messaggi - messages = [HumanMessage(content="Spiega l'IA in 3 frasi")] + messages = [HumanMessage(content="Expliquez l'IA en 3 phrases")] response = chat.invoke(messages) print(response.content) # Oppure con una semplice stringa - response = chat.invoke("Ciao, come va?") + response = chat.invoke("Bonjour, comment ça va ?") print(response.content) except Exception as e: - print(f"Errore LangChain: {e}") + print(f"Erreur LangChain: {e}") ``` -#### Utilizzo degli Embeddings +#### Utilizzo degli Embedding -:::warning[Incompatibilità con i client standard di LangChain] -Al momento, l'utilizzo dell'endpoint di embedding tramite le classi standard di LangChain (`langchain_openai.OpenAIEmbeddings` o `langchain_community.OllamaEmbeddings`) presenta incompatibilità con la nostra API. +:::warning Incompatibilità con i client standard di LangChain +Attualmente, l'utilizzo dell'endpoint di embedding tramite le classi standard di LangChain (`langchain_openai.OpenAIEmbeddings` o `langchain_community.OllamaEmbeddings`) presenta incompatibilità con la nostra API. -- `OpenAIEmbeddings` invia token pre-calcolati invece di testo grezzo, che viene rifiuto. +- `OpenAIEmbeddings` invia token pre-calcolati invece di testo grezzo, che viene rifiutato. - `OllamaEmbeddings` non gestisce l'autenticazione tramite Bearer Token richiesta. -Finché non sarà disponibile una soluzione definitiva, si raccomanda di creare una classe di embedding personalizzata oppure di chiamare l'API direttamente, come mostrato nell'esempio `esempi/simple-rag-demo`. +In attesa di una soluzione duratura, si consiglia di creare una classe di embedding personalizzata o di chiamare l'API direttamente, come dimostrato nell'esempio `exemples/simple-rag-demo`. ::: ```python @@ -828,9 +916,9 @@ import httpx class LLMaaSEmbeddings(Embeddings): """ - Classe di embedding personalizzata per interagire con l'API LLMaaS di Cloud Temple. - Questa classe è progettata per essere compatibile con l'interfaccia `Embeddings` di LangChain, - consentendo il suo utilizzo in pipeline LangChain mentre chiama la nostra API specifica. + Classe d'embedding personnalisée pour interagir avec l'API LLMaaS de Cloud Temple. + Cette classe est conçue pour être compatible avec l'interface `Embeddings` de LangChain, + permettant son utilisation dans des pipelines LangChain tout en appelant notre API spécifique. """ def __init__(self, api_key: str, base_url: str = "https://api.ai.cloud-temple.com/v1", model_name: str = "granite-embedding:278m"): self.api_key = api_key @@ -848,12 +936,12 @@ class LLMaaSEmbeddings(Embeddings): response = client.post(f"{self.base_url}/embeddings", headers=self.headers, json=payload) response.raise_for_status() data = response.json()['data'] - # Ordinare gli embedding in base all'indice per garantire l'ordine + # Ordina gli embedding per indice per garantire l'ordine data.sort(key=lambda e: e['index']) return [item['embedding'] for item in data] except httpx.HTTPStatusError as e: - print(f"Errore HTTP durante il recupero dell'embedding: {e.response.status_code}") - print(f"Risposta: {e.response.text}") + print(f"Erreur HTTP lors de la récupération de l'embedding : {e.response.status_code}") + print(f"Réponse : {e.response.text}") return [] def embed_documents(self, texts: List[str]) -> List[List[float]]: @@ -862,18 +950,17 @@ class LLMaaSEmbeddings(Embeddings): def embed_query(self, text: str) -> List[float]: return self._embed([text])[0] -# Usage +# Utilizzo # embeddings = LLMaaSEmbeddings( -# api_key="IL_VOSTRO_TOKEN_API", +# api_key="VOTRE_TOKEN_API", # base_url="https://api.ai.cloud-temple.com/v1", # model_name="granite-embedding:278m" # ) -# vector = embeddings.embed_query("Il mio testo da vettorizzare") +# vector = embeddings.embed_query("Mon texte à vectoriser") ``` -## Support - -- **Documentazione** : [Guida introduttiva](./quickstart) +## Supporto +- **Documentazione** : [Guida rapida all'avvio](./quickstart) - **Catalogo modelli** : [Elenco completo](./models) - **Console** : Gestione e monitoraggio tramite Console Cloud Temple -- **Supporto** : Attraverso la Console Cloud Temple +- **Supporto** : Tramite la Console Cloud Temple \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/llmaas/batch.md b/i18n/it/docusaurus-plugin-content-docs/current/llmaas/batch.md new file mode 100644 index 00000000..c204a54a --- /dev/null +++ b/i18n/it/docusaurus-plugin-content-docs/current/llmaas/batch.md @@ -0,0 +1,536 @@ +--- +title: API Batch +sidebar_position: 6 +--- + +# Batch API — Elaborazione Asincrona + +:::info Disponibilità +La Batch API è in **distribuzione graduale**. Verifica la disponibilità sul tuo account nella [Console Cloud Temple](https://console.cloud-temple.com) o contatta il supporto commerciale. +::: + +## Cos'è la Batch API? + +La **Batch API** consente di inviare grandi volumi di richieste in modo **asincrono**, elaborate durante le ore di minor carico. In cambio di una tolleranza sui tempi di elaborazione (qualche ora), è possibile beneficiare di una **riduzione del 50%** sulle tariffe standard. + +### Quando utilizzare l'API Batch? + +| Caso d'uso | Adatto al Batch? | +|------------|------------------| +| Classificazione/etichettatura di milioni di documenti | ✅ Ideale | +| Generazione di riassunti in massa | ✅ Ideale | +| Estrazione di entità su un ampio corpus | ✅ Ideale | +| Vettorizzazione (embedding) in volume | ✅ Ideale | +| Valutazione di modelli (benchmark) | ✅ Ideale | +| Chatbot in tempo reale | ❌ Utilizzare `/v1/chat/completions` | +| Risposta interattiva < 2 secondi | ❌ Utilizzare l'API standard | +| Streaming SSE | ❌ Utilizzare l'API standard | + +## Tariffazione + +| Utilizzo | Batch | Standard | Risparmio | +|-------|-------|----------|---------| +| **Token di input** | **0,9 € / milione** | 1,8 € / milione | −50% | +| **Token di output** | **4,0 € / milione** | 8,0 € / milione | −50% | + +### Esempio di risparmio + +Per elaborare 1 milione di documenti da 500 token con risposte da 200 token : +- **Standard** : (500 × 1.8 + 200 × 8) / 1 = 2 500 € +- **Batch** : (500 × 0.9 + 200 × 4) / 1 = 1 250 € +- **Risparmio : 1 250 € (−50%)** + +## Architettura della Pipeline Batch + +``` +1. Préparation 2. Soumission 3. Traitement +───────────────────────── ───────────────────── ───────────────────── +Créer un fichier JSONL → POST /v1/batches → Traitement asynchrone +avec N requêtes (retourne batch_id) en heures creuses + +4. Polling 5. Récupération +───────────────────────── ───────────────────────── +GET /v1/batches/{id} → GET /v1/files/{file_id} → Résultats JSONL +(statut : validating, (télécharger les + in_progress, completed) résultats) +``` + +## Formato del File di Input (JSONL) + +Ogni riga del file è una richiesta JSON indipendente : + +```json +{"custom_id": "req-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gpt-oss:120b", "messages": [{"role": "user", "content": "Résume ce texte : L'IA générative est..."}], "max_tokens": 200}} +{"custom_id": "req-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gpt-oss:120b", "messages": [{"role": "user", "content": "Classifie ce ticket : Mon accès VPN ne fonctionne plus."}], "max_tokens": 50}} +{"custom_id": "req-3", "method": "POST", "url": "/v1/embeddings", "body": {"model": "granite-embedding:278m", "input": "Texte à vectoriser pour la recherche sémantique."}} +``` + +### Campi obbligatori per riga + +| Campo | Tipo | Descrizione | +|-------|------|-------------| +| `custom_id` | string | Identificativo univoco della richiesta (per il recupero) | +| `method` | string | Sempre `"POST"` | +| `url` | string | Endpoint di destinazione (es: `/v1/chat/completions`, `/v1/embeddings`) | +| `body` | object | Corpo della richiesta (stesso formato di una chiamata diretta) | + +## Endpoint API + +### POST /v1/batches — Invia un batch + +```bash +# 1. Upload du fichier JSONL +curl -X POST "https://api.ai.cloud-temple.com/v1/files" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ + -F "purpose=batch" \ + -F "file=@requests.jsonl" +``` + +```json +{ + "id": "file-abc123xyz", + "object": "file", + "purpose": "batch", + "filename": "requests.jsonl", + "bytes": 4096, + "created_at": 1749110753 +} +``` + +```bash +# 2. Soumission du batch +curl -X POST "https://api.ai.cloud-temple.com/v1/batches" \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ + -d '{ + "input_file_id": "file-abc123xyz", + "endpoint": "/v1/chat/completions", + "completion_window": "24h" + }' +``` + +```json +{ + "id": "batch-def456uvw", + "object": "batch", + "endpoint": "/v1/chat/completions", + "input_file_id": "file-abc123xyz", + "status": "validating", + "created_at": 1749110800, + "request_counts": { + "total": 100, + "completed": 0, + "failed": 0 + } +} +``` + +### GET /v1/batches/\{batch_id\} — Verificare lo stato + +```bash +curl -X GET "https://api.ai.cloud-temple.com/v1/batches/batch-def456uvw" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" +``` + +**Stati possibili:** + +| Stato | Descrizione | +|--------|-------------| +| `validating` | Validazione del file di input in corso | +| `in_progress` | Elaborazione delle richieste in corso | +| `finalizing` | Compilazione dei risultati | +| `completed` | Tutti i risultati sono disponibili | +| `failed` | Fallimento complessivo (vedere `errors`) | +| `cancelled` | Annullato dall'utente | + +```json +{ + "id": "batch-def456uvw", + "status": "completed", + "output_file_id": "file-ghi789rst", + "request_counts": { + "total": 100, + "completed": 99, + "failed": 1 + }, + "completed_at": 1749118000 +} +``` + +### GET /v1/files/\{file_id\}/content — Recupera i risultati + +```bash +curl -X GET "https://api.ai.cloud-temple.com/v1/files/file-ghi789rst/content" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ + -o results.jsonl +``` + +**Formato dei risultati (JSONL) :** + +```json +{"id": "batch-def456uvw", "custom_id": "req-1", "response": {"status_code": 200, "body": {"id": "chatcmpl-...", "choices": [{"message": {"role": "assistant", "content": "Résumé : L'IA générative..."}}], "usage": {"prompt_tokens": 45, "completion_tokens": 87}}}} +{"id": "batch-def456uvw", "custom_id": "req-2", "response": {"status_code": 200, "body": {"id": "chatcmpl-...", "choices": [{"message": {"role": "assistant", "content": "Catégorie: Réseau/VPN"}}], "usage": {"prompt_tokens": 22, "completion_tokens": 8}}}} +{"id": "batch-def456uvw", "custom_id": "req-3", "error": {"code": "server_error", "message": "Processing failed"}} +``` + +## Esempio Python Completo + +```python +""" +Exemple complet d'utilisation de la Batch API LLMaaS. +Cas d'usage : classification de tickets de support en masse. +""" +import httpx +import json +import time +import os +from pathlib import Path + +API_KEY = os.getenv("LLMAAS_API_KEY") +BASE_URL = "https://api.ai.cloud-temple.com/v1" +HEADERS = { + "Authorization": f"Bearer {API_KEY}", + "Content-Type": "application/json" +} + + +# ══════════════════════════════════════════════════════ +# PASSO 1: Preparare le richieste in formato JSONL +# ══════════════════════════════════════════════════════ + +def create_batch_file(tickets: list[str], output_path: str = "batch_input.jsonl") -> str: + """ + Crée un fichier JSONL avec une requête de classification par ticket. + + Args: + tickets: Liste des tickets à classifier + output_path: Chemin du fichier JSONL de sortie + + Returns: + Chemin du fichier créé + """ + with open(output_path, "w", encoding="utf-8") as f: + for i, ticket in enumerate(tickets): + request = { + "custom_id": f"ticket-{i:04d}", + "method": "POST", + "url": "/v1/chat/completions", + "body": { + "model": "gpt-oss:120b", + "messages": [ + { + "role": "system", + "content": ( + "Tu es un expert en support IT. " + "Classifie le ticket dans une seule catégorie parmi : " + "Réseau, Sécurité, Logiciel, Matériel, Accès, Autre. " + "Réponds uniquement avec le nom de la catégorie." + ) + }, + { + "role": "user", + "content": ticket + } + ], + "max_tokens": 10, + "temperature": 0.0 + } + } + f.write(json.dumps(request, ensure_ascii=False) + "\n") + + print(f"✅ Fichier JSONL créé : {output_path} ({len(tickets)} requêtes)") + return output_path + + +# ══════════════════════════════════════════════════════ +# PASSO 2: Caricamento del file +# ══════════════════════════════════════════════════════ + +def upload_batch_file(file_path: str) -> str: + """ + Upload le fichier JSONL vers l'API. + + Returns: + file_id retourné par l'API + """ + print(f"📤 Upload de {file_path}...") + + with open(file_path, "rb") as f: + with httpx.Client(timeout=60.0) as client: + response = client.post( + f"{BASE_URL}/files", + headers={"Authorization": f"Bearer {API_KEY}"}, + files={"file": (Path(file_path).name, f, "application/jsonl")}, + data={"purpose": "batch"} + ) + response.raise_for_status() + + file_id = response.json()["id"] + print(f"✅ Fichier uploadé : {file_id}") + return file_id + + +# ══════════════════════════════════════════════════════ +# PASSO 3: Invio del batch +# ══════════════════════════════════════════════════════ + +def submit_batch(file_id: str) -> str: + """ + Soumet un batch pour traitement asynchrone. + + Returns: + batch_id retourné par l'API + """ + print(f"🚀 Soumission du batch (fichier: {file_id})...") + + with httpx.Client(timeout=30.0) as client: + response = client.post( + f"{BASE_URL}/batches", + headers=HEADERS, + json={ + "input_file_id": file_id, + "endpoint": "/v1/chat/completions", + "completion_window": "24h" + } + ) + response.raise_for_status() + + data = response.json() + batch_id = data["id"] + print(f"✅ Batch soumis : {batch_id} (statut: {data['status']})") + return batch_id + + +# ══════════════════════════════════════════════════════ +# PASSO 4: Polling fino al completamento +# ══════════════════════════════════════════════════════ + +def wait_for_completion(batch_id: str, poll_interval: int = 30) -> dict: + """ + Interroge l'API jusqu'à la complétion du batch. + + Args: + batch_id: L'identifiant du batch + poll_interval: Intervalle de polling en secondes + + Returns: + Le statut final du batch + """ + print(f"⏳ En attente de la complétion du batch {batch_id}...") + + terminal_statuses = {"completed", "failed", "cancelled", "expired"} + + while True: + with httpx.Client(timeout=30.0) as client: + response = client.get( + f"{BASE_URL}/batches/{batch_id}", + headers=HEADERS + ) + response.raise_for_status() + + batch = response.json() + status = batch["status"] + counts = batch.get("request_counts", {}) + + print( + f" Statut: {status} | " + f"Complétées: {counts.get('completed', 0)}/{counts.get('total', 0)} | " + f"Échouées: {counts.get('failed', 0)}" + ) + + if status in terminal_statuses: + return batch + + time.sleep(poll_interval) + + +# ══════════════════════════════════════════════════════ +# PASSO 5: Recupero e parsing dei risultati +# ══════════════════════════════════════════════════════ + +def download_results(output_file_id: str, save_path: str = "batch_output.jsonl") -> list[dict]: + """ + Télécharge et parse les résultats du batch. + + Returns: + Liste des résultats par custom_id + """ + print(f"📥 Téléchargement des résultats ({output_file_id})...") + + with httpx.Client(timeout=60.0) as client: + response = client.get( + f"{BASE_URL}/files/{output_file_id}/content", + headers={"Authorization": f"Bearer {API_KEY}"} + ) + response.raise_for_status() + + # Sauvegarder le fichier brut + with open(save_path, "wb") as f: + f.write(response.content) + + # Parser les résultats + results = [] + for line in response.text.strip().split("\n"): + if line: + results.append(json.loads(line)) + + print(f"✅ {len(results)} résultats récupérés → {save_path}") + return results + + +# ══════════════════════════════════════════════════════ +# PROGRAMMA PRINCIPALE +# ══════════════════════════════════════════════════════ + +def main(): + # Esempi di ticket di supporto IT + tickets = [ + "Mon accès VPN ne fonctionne plus depuis ce matin.", + "L'imprimante du 3ème étage n'imprime plus en couleur.", + "Je ne peux pas me connecter à mon compte Office 365.", + "Mon ordinateur est très lent depuis la mise à jour d'hier.", + "Le site web de facturation interne affiche une erreur 500.", + "Besoin d'accès au dossier partagé RH sur le serveur.", + "Mon badge ne fonctionne plus à l'entrée du datacenter.", + "Outlook ne reçoit plus d'emails depuis 2 heures.", + ] + + print(f"🎯 Traitement de {len(tickets)} tickets en mode Batch\n") + + # Pipeline completo + jsonl_file = create_batch_file(tickets) + file_id = upload_batch_file(jsonl_file) + batch_id = submit_batch(file_id) + + final_status = wait_for_completion(batch_id, poll_interval=30) + + if final_status["status"] != "completed": + print(f"❌ Batch terminé avec statut : {final_status['status']}") + return + + output_file_id = final_status.get("output_file_id") + if not output_file_id: + print("❌ Aucun fichier de sortie disponible.") + return + + results = download_results(output_file_id) + + # Visualizzare i risultati + print("\n" + "═" * 60) + print("📊 RÉSULTATS DE CLASSIFICATION") + print("═" * 60) + + for result in results: + custom_id = result["custom_id"] + idx = int(custom_id.split("-")[1]) + + if "error" in result: + category = f"ERREUR: {result['error']['message']}" + else: + category = result["response"]["body"]["choices"][0]["message"]["content"].strip() + + ticket_text = tickets[idx] if idx < len(tickets) else "?" + print(f"[{custom_id}] {category:12s} | {ticket_text[:60]}...") + + +if __name__ == "__main__": + main() +``` + +## Gestione degli Errori Parziali + +Il batch può essere **parzialmente riuscito** : alcune richieste hanno successo e altre falliscono. + +```python +def process_results(results: list[dict]) -> tuple[list, list]: + """Sépare les succès des échecs dans les résultats.""" + successes = [] + failures = [] + + for result in results: + if "error" in result: + failures.append({ + "custom_id": result["custom_id"], + "error": result["error"] + }) + else: + response_body = result["response"]["body"] + successes.append({ + "custom_id": result["custom_id"], + "content": response_body["choices"][0]["message"]["content"], + "usage": response_body.get("usage", {}) + }) + + print(f"✅ Succès : {len(successes)} | ❌ Échecs : {len(failures)}") + return successes, failures +``` + +## Limitazioni e Vincoli + +| Vincolo | Valore | +|-----------|--------| +| **Dimensione massima del file JSONL** | 100 MB | +| **Numero massimo di richieste per batch** | 50 000 | +| **Tempo di elaborazione garantito** | < 24h (tipicamente 2-4h) | +| **Conservazione dei file di risultato** | 7 giorni | +| **Batch simultanei per account** | 10 | + +:::warning Elaborazione asincrona +Il batch non garantisce un ordine di elaborazione. I risultati potrebbero apparire in un ordine diverso rispetto all'ordine di input. Utilizzare il campo `custom_id` per associare ogni risultato alla relativa richiesta originale. +::: + +## Casi d'uso avanzati + +### Embedding in batch + +```python +# Vettorizzazione di 10 000 documenti in batch +def create_embedding_batch(documents: list[str]) -> str: + with open("embed_batch.jsonl", "w") as f: + for i, doc in enumerate(documents): + request = { + "custom_id": f"doc-{i:05d}", + "method": "POST", + "url": "/v1/embeddings", + "body": { + "model": "granite-embedding:278m", + "input": doc[:500] # Limite di contesto del modello + } + } + f.write(json.dumps(request) + "\n") +return "embed_batch.jsonl" +``` + +### Annullamento di un batch + +```python +def cancel_batch(batch_id: str) -> dict: + with httpx.Client(timeout=30.0) as client: + response = client.post( + f"{BASE_URL}/batches/{batch_id}/cancel", + headers=HEADERS + ) + response.raise_for_status() + return response.json() +``` + +### Elenco dei batch + +```python +def list_batches(limit: int = 20) -> list[dict]: + with httpx.Client(timeout=30.0) as client: + response = client.get( + f"{BASE_URL}/batches", + headers=HEADERS, + params={"limit": limit} + ) + response.raise_for_status() + return response.json()["data"] +``` + +## Risorse + +- **Codice di esempio completo** : [`exemples/simple_batch/`](https://github.com/Cloud-Temple/product-llmaas-how-to/tree/main/simple_batch) +- **Catalogo modelli** : [Modelli compatibili Batch](./models) +- **Riferimento API** : [Documentazione API completa](./api) +- **Pricing dettagliato** : [Tariffazione LLMaaS](./api#rate-limiting-et-facturation) \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/llmaas/faq.md b/i18n/it/docusaurus-plugin-content-docs/current/llmaas/faq.md index b990f7dd..30d29abe 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/llmaas/faq.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/llmaas/faq.md @@ -1,92 +1,91 @@ -# Domande frequenti sull'offerta di servizio LLMaaS Cloud Temple +# FAQ sull'offerta di servizio LLMaaS Cloud Temple ## Offerta e Capacità -### **Qual è l'offerta del vostro servizio LLMaaS?** - -Il nostro servizio vi offre un accesso **sovrano e sicuro** a un ampio catalogo di modelli di intelligenza artificiale di ultima generazione, tramite un'API compatibile con OpenAI. Gestiamo tutta la complessità dell'infrastruttura certificata **SecNumCloud 3.2**, consentendovi di concentrarvi sulla creazione di valore per le vostre applicazioni, mantenendo sotto controllo i costi grazie a un modello economico prevedibile e accelerando i vostri sviluppi grazie a standard aperti. - -### **What types of models do you offer, and how does the catalog evolve?** - -We offer a rich catalog of 45 open-source models, including the families **Llama (Meta), Qwen, Deepseek, Mistral, Gemma (Google), Cogito, and Granite (IBM)**. Our models are specialized for various use cases: - -* **Complex reasoning and conversational tasks**. -* **Code generation and analysis**. -* **Long-document analysis** (up to 128k tokens with models such as `Gemma 3` or `Qwen2.5-VL`). -* **Multimodal capabilities** (image analysis with the `Granite Vision`, `Gemma 3`, `Qwen2.5-VL`, and `Mistral Small` series). -* **Advanced multilingual support** (with models like `Llama 3.3` and the `Qwen` family). - -This catalog is **reviewed quarterly** to incorporate the most performant models, with a transparent lifecycle policy (3-month notice prior to any deprecation) to ensure stability for your applications. - -### **Quali sono le principali funzionalità offerte dalla tua API?** - -La nostra API, completamente compatibile con lo standard OpenAI, ti permette di creare facilmente funzionalità avanzate come: - -* **Chatbot/assistenti conversazionali**. -* Sistemi di **Ricerca Aumentata con Generazione (RAG)** utilizzando il nostro endpoint per gli embedding. -* Applicazioni di **analisi di immagini e documenti visivi** senza necessità di OCR predefinito. -* **Trascrizione audio** tramite un servizio dedicato. +### **Qual è la proposta di valore del vostro servizio LLMaaS?** +Il nostro servizio offre un accesso **sovrano e sicuro** a un ampio catalogo di modelli di IA all'avanguardia, tramite un'API compatibile con OpenAI. Gestiamo tutta la complessità dell'infrastruttura certificata **SecNumCloud 3.2**, consentendovi di concentrarvi sulla creazione di valore per le vostre applicazioni, controllando al contempo i costi grazie a un modello economico prevedibile e accelerando lo sviluppo grazie a standard aperti. + +### **Che tipo di modelli offrite e come evolve il catalogo?** +Offriamo un catalogo ricco di **58 modelli open-source**, che includono le famiglie **Llama (Meta), Qwen, Mistral, Gemma (Google), NVIDIA Nemotron, Cogito e Granite (IBM)**. I nostri modelli coprono 8 categorie: +* **Chat & Ragionamento** — dialogo, analisi, agenti con function calling. +* **Programmazione & Agenti** — generazione di codice, refactoring, agenti autonomi. +* **Visione & Multimodale** — analisi di immagini, OCR, video, contesti fino a 1M token. +* **Embedding** — vettorizzazione per RAG semantico (BGE-M3, Granite, Qwen3-Embedding). +* **Reranking** — riordinamento dei risultati RAG (API compatible Cohere `/v1/rerank`). +* **Sicurezza** — filtraggio dei contenuti, guardrails (Granite3-Guardian). +* **Traduzione** — 55 lingue (TranslateGemma). +* **Audio & Immagine** — trascrizione in tempo reale (Voxtral), generazione di immagini (z-image). + +Questo catalogo viene **riveduto ogni trimestre** per integrare i modelli più performanti, con una politica di ciclo di vita trasparente (préavis de 3 mois avant tout retrait) per garantire la stabilità delle vostre applicazioni. + +### **Quali sono le principali capacità funzionali della vostra API?** +La nostra API, 100% compatibile con lo standard OpenAI, vi permette di costruire facilmente funzionalità avanzate come: +* **Chatbot/assistenti** conversazionali con streaming e function calling. +* Sistemi completi di **Ricerca Aumentata dalla Generazione (RAG)**: embedding (`/v1/embeddings`) + reranking (`/v1/rerank`) + generazione aumentata. +* Applicazioni per l'**analisi di immagini e documenti visivi** (OCR, grafici, PDF) senza pre-elaborazione. +* **Trascrizione audio** batch o in tempo reale tramite WebSocket. +* **Elaborazione in batch (Batch API)** asincrona per carichi di lavoro voluminosi, con una tariffazione ridotta del 50%. +* **Generazione di immagini** tramite API compatibile con OpenAI. ## Sicurezza e Sovranità -### **Come garantite la sovranità e la riservatezza dei vostri dati?** - +### **Come garantite la sovranità e la riservatezza dei nostri dati?** La sovranità è al centro della nostra offerta. Si basa su diversi pilastri: +1. **Hosting in Francia** : La nostra infrastruttura è esclusivamente in Francia, gestita da Cloud Temple, una società di diritto francese. Questo ci sottrae alle leggi extraterritoriali come il **CLOUD Act americano**. +2. **Qualifica SecNumCloud 3.2** : Il più alto visto di sicurezza dell'ANSSI garantisce questo posizionamento. +3. **Non conservazione dei dati** : Non memorizziamo **né i vostri prompt, né le risposte**. I dati vengono elaborati in modo volatile in memoria per tutta la durata dell'inferenza. +4. **Crittografia end-to-end** : Tutte le comunicazioni con l'API sono crittografate in **TLS 1.3**. -1. **Ospitalità in Francia**: La nostra infrastruttura è esclusivamente in Francia, gestita da Cloud Temple, una società di diritto francese. Ci esonera dalle leggi extraterritoriali come il **CLOUD Act americano**. -2. **Qualifica SecNumCloud 3.2**: Il massimo riconoscimento di sicurezza dell'ANSSI garantisce questa posizione. -3. **Nessun archiviazione dei dati**: Non conserviamo **né i vostri prompt, né le risposte**. I dati vengono elaborati in modo volatile in memoria durante l'inferenza. -4. **Crittografia end-to-end**: Tutte le comunicazioni con l'API sono crittografate tramite **TLS 1.3**. - -### **How do you manage access, permissions (RBAC), and authentication (SSO, MFA)?** +### **Come gestite gli accessi, i diritti (RBAC) e l'autenticazione (SSO, MFA) ?** +Il nostro servizio si integra con la vostra politica di sicurezza secondo un modello di responsabilità condivisa: +* **Per i vostri utenti finali** : La gestione delle identità, dei diritti (RBAC) e dell'autenticazione forte (SSO, MFA) è di responsabilità della **vostra applicazione**. +* **Per i vostri amministratori** : Gli accessi alla **Console Cloud Temple** per la gestione del servizio (gestione delle chiavi, supervisione) possono essere collegati al vostro SSO aziendale (tramite OpenID Connect) per beneficiare delle vostre politiche di sicurezza, incluso il MFA. +* **Per le vostre applicazioni** : Potete creare diverse chiavi API con quote di consumo distinte per segmentare i diritti a livello applicativo. -Our service integrates with your security policy under a shared responsibility model: +### **Come è protetta la piattaforma ?** +Applichiamo una difesa in profondità : +* **Autenticazione forte** tramite chiave API per ogni richiesta. +* **Crittografia TLS 1.3** di tutti i flussi. +* **Protezione di rete** tramite firewall di nuova generazione e sistemi di rilevamento/prevenzione delle intrusioni (IDS/IPS). +* **"Guardrails" applicativi** per proteggersi dalle minacce specifiche dei LLMs, come l'iniezione di prompt e i tentativi di sfruttamento dei modelli. +* **Test di penetrazione regolari** condotti da auditor qualificati (PASSI) nell'ambito della nostra qualifica SecNumCloud 3.2. -* **For your end users**: Identity management, permissions (RBAC), and strong authentication (SSO, MFA) are the responsibility of **your application**. -* **For your administrators**: Access to the **Cloud Temple Console** for service management (key management, monitoring) can be connected to your enterprise SSO (via OpenID Connect) to leverage your security policies, including MFA. -* **For your applications**: You can create different API keys with distinct consumption quotas to segment permissions at the application level. +## Integrazione e Utilizzo -### **How is the platform secured?** +### **Come si integra la vostra API?** +Il nostro servizio è "API-first". Essendo **compatibile con l'API OpenAI**, potete utilizzare tutti gli SDK (Python, Node.js, ecc.) e i framework standard di mercato come **LangChain** o **LlamaIndex** per un'integrazione rapida. Forniamo una documentazione tecnica completa (OpenAPI) ed esempi di codice. -We implement a defense-in-depth strategy: +### **È possibile personalizzare l'esperienza utente ?** +Sì, assolutamente. Essendo il nostro servizio un'API "headless", hai un controllo totale sull'interfaccia e sull'esperienza dei tuoi utenti finali, inclusa l'integrazione delle tue linee guida grafiche e la visualizzazione dei messaggi di conformità, che sono di tua responsabilità. -* **Strong authentication** via API key for every request. -* **TLS 1.3 encryption** for all data flows. -* **Network protection** through next-generation firewalls and intrusion detection/prevention systems (IDS/IPS). -* **Application-level guardrails** to defend against LLM-specific threats, such as prompt injection and model exploitation attempts. -* **Regular penetration testing** conducted by qualified auditors (PASSI) as part of our SecNumCloud 3.2 certification process. - -## Integrazione e utilizzo - -### **How do you integrate your API?** - -Our service is "API-first". Being **OpenAI API-compatible**, you can use all standard SDKs (Python, Node.js, etc.) and market-leading frameworks such as **LangChain** or **LlamaIndex** for rapid integration. We provide comprehensive technical documentation (OpenAPI) and code examples. - -### **Is it possible to customize the user experience?** - -Yes, absolutely. Since our service is a "headless" API, you have full control over the interface and end-user experience, including the integration of your own design guidelines and the display of compliance messages, which are your responsibility. - -### **How do you manage risks related to intellectual property (IP)?** - -You have full control over the models your application calls. For use cases sensitive to IP, we highlight IBM's **Granite models**, which come with a **contractual, uncapped indemnification** against IP claims — a unique guarantee in the market. +### **Come gestite i rischi legati alla proprietà intellettuale (PI)?** +Avete il controllo totale sui modelli che la vostra applicazione chiama. Per i casi d'uso sensibili alla PI, evidenziamo i modelli **Granite di IBM**, che beneficiano di un **risarcimento contrattuale senza limiti** contro le richieste di PI, una garanzia unica sul mercato. ## Modello Economico e Supporto -### **Qual è il vostro modello economico?** +### **Qual è il vostro modello di business?** +Il nostro modello si basa sul consumo effettivo per riflettere il costo di calcolo esatto. La tariffazione per tipo di utilizzo: -Il nostro modello si basa sul consumo effettivo (**token** per il linguaggio, **minuti** per l'audio) per riflettere il costo di calcolo reale. Per garantire prevedibilità e controllo del budget, offriamo **Piani di servizio** con budget massimi e **contratti su misura**. Potete monitorare il consumo in tempo reale dalla Console Cloud Temple, per una trasparenza totale. Inoltre, il numero di utenti è sempre illimitato, indipendentemente dal piano scelto. +| Utilizzo | Tariffa | +|-------|-------| +| **Token di input (chat)** | 1.8 € / milione | +| **Token di output (chat)** | 8.0 € / milione | +| **Token di ragionamento** | 8.0 € / milione | +| **Reranking** | 4.0 € / milione di token rerankati | +| **Batch (input)** | 0.9 € / milione (−50%) | +| **Batch (output)** | 4.0 € / milione (−50%) | +| **Audio ASR** | 0.01 € / minuto di trascrizione | -### **What level of support and SLA do you offer?** +Per garantire la prevedibilità e il controllo del budget, offriamo **Livelli di servizio** con budget limitati e **contratti su misura**. È possibile monitorare i consumi in tempo reale dalla Console Cloud Temple per una trasparenza totale. Il numero di utenti è sempre illimitato, indipendentemente dal piano scelto. -Our standard offering includes technical support in French and English, accessible via our customer portal, with a commitment to first response within one business day. The platform is backed by a **99%** availability commitment. For more critical needs, our optional **Professional Services** provide enhanced SLAs, including priority support with response times of up to 4 hours for critical incidents, and customized strategic support (innovation workshops, ITIL governance). +### **Che livello di supporto e SLA offrite?** +La nostra offerta standard include un supporto tecnico in francese e inglese, accessibile tramite il nostro portale clienti, con un impegno di prima risposta in giornata lavorativa. La piattaforma garantisce un impegno di disponibilità del **99%**. Per le esigenze più critiche, i nostri **Servizi Professionali** opzionali vi danno accesso a SLA potenziati, che includono un supporto prioritario con un tempo di risposta fino a 4 ore per gli incidenti critici, e un accompagnamento strategico su misura (workshop di innovazione, governance ITIL). -### **Come posso monitorare lo stato di salute della piattaforma LLMaaS?** - -Crediamo in una trasparenza totale riguardo alla disponibilità dei nostri servizi. Puoi verificare in tempo reale lo stato operativo di ciascun modello di intelligenza artificiale sulla nostra pagina di stato pubblica: **[https://llmaas.status.cloud-temple.app/](https://llmaas.status.cloud-temple.app/)**. +### **Come posso monitorare lo stato di salute della piattaforma LLMaaS ?** +Crediamo in una trasparenza totale sulla disponibilità dei nostri servizi. Puoi consultare in tempo reale lo stato operativo di ciascun modello di IA sulla nostra pagina di stato pubblica: **[https://llmaas.status.cloud-temple.app/](https://llmaas.status.cloud-temple.app/)**. Questa pagina fornisce informazioni dettagliate su: - -* Lo stato generale della piattaforma. -* La disponibilità di ciascun modello singolarmente. -* Le metriche di prestazione come il tempo di risposta (TTFB) e il throughput (tokens/s). -* L'archivio degli incidenti per un monitoraggio completo. +* Lo stato generale della piattaforma. +* La disponibilità di ciascun modello individualmente. +* Le metriche di performance come il tempo di risposta (TTFB) e il throughput (tokens/s). +* La cronologia degli incidenti per un monitoraggio completo. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/llmaas/llmaas.md b/i18n/it/docusaurus-plugin-content-docs/current/llmaas/llmaas.md index 49e05f6f..df7e62f9 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/llmaas/llmaas.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/llmaas/llmaas.md @@ -3,41 +3,40 @@ title: Panoramica sidebar_position: 1 --- -# LLM come un Servizio (LLMaaS) +# LLM come Servizio (LLMaaS) ## Accesso all'API -L'API è accessibile tramite la Console Cloud Temple. Puoi gestire le tue chiavi API, monitorare il tuo consumo e configurare i tuoi terzi nei parametri del tuo account. La console consente inoltre di visualizzare l'uso dei tuoi modelli. +L'API è accessibile tramite la Console Cloud Temple. Puoi gestire le tue chiavi API, monitorare il consumo e configurare i tier nelle impostazioni del tuo account. La console consente inoltre di visualizzare l'utilizzo dei tuoi modelli. ## Autenticazione -Tutte le richieste all'API LLMaaS devono includere un header `Authorization` con la propria chiave API nel formato Bearer token. Se si utilizzano i SDK client, la chiave verrà automaticamente inclusa in ogni richiesta. Se si integra direttamente con l'API, è necessario inviare questo header manualmente. +Tutte le richieste all'API LLMaaS devono includere un header `Authorization` con la tua chiave API in formato Bearer token. Se utilizzi gli SDK client, la chiave verrà inclusa automaticamente in ogni richiesta. Se effettui l'integrazione direttamente con l'API, devi inviare questo header tu stesso. ## Tipi di contenuto -L'API LLMaaS accetta sempre JSON nel corpo delle richieste e restituisce JSON nel corpo delle risposte. Devi inviare l'intestazione `content-type: application/json` nelle tue richieste. Se utilizzi i SDK client, questo sarà gestito automaticamente. +L'API LLMaaS accetta sempre JSON nel corpo delle richieste e restituisce JSON nel corpo delle risposte. È necessario inviare l'intestazione `content-type: application/json` nelle richieste. Se si utilizzano gli SDK client, ciò verrà gestito automaticamente. -## Headers di risposta +## Intestazioni della risposta -L'API LLMaaS include i seguenti headers in ogni risposta: +L'API LLMaaS include i seguenti header in ogni risposta : -- `id` : Un identificatore univoco a livello globale per la richiesta +- `id` : Un identificativo globalmente univoco per la richiesta - `backend` : Informazioni sull'infrastruttura utilizzata (engine_type, machine_name) ## Esempi ### Richiesta cURL - ```bash curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_API_KEY" \ -d '{ - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "messages": [ { "role": "user", - "content": "Ciao! Puoi presentarti in francese?" + "content": "Salut ! Peux-tu te présenter en français ?" } ], "max_tokens": 200, @@ -46,7 +45,6 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ ``` ### Risposta - ```json { "backend": { @@ -65,7 +63,7 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ ], "created": 1749110753, "id": "chatcmpl-ollama-14b812ef-b21f-430c-b93c-d0d1bf653806", - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "object": "chat.completion", "usage": { "completion_tokens": 200, @@ -80,18 +78,17 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ | Parametro | Tipo | Descrizione | | ------------- | ------- | ------------------------------------------------------------- | -| `model` | stringa | Il modello da utilizzare (vedi [catalogo dei modelli](./models.md)) | -| `messages` | array | Elenco dei messaggi della conversazione | -| `max_tokens` | intero | Numero massimo di token da generare | -| `temperature` | float | Controllo della creatività (0.0-2.0) | -| `top_p` | float | Controllo della diversità delle risposte | -| `stream` | booleano| Attiva lo streaming delle risposte | -| `user` | stringa | Identificativo univoco dell'utente finale | +| `model` | string | Il modello da utilizzare (vedere [catalogo dei modelli](./models.md)) | +| `messages` | array | Elenco dei messaggi della conversazione | +| `max_tokens` | integer | Numero massimo di token da generare | +| `temperature` | float | Controlla la creatività (0.0-2.0) | +| `top_p` | float | Controlla la diversità delle risposte | +| `stream` | boolean | Abilita lo streaming della risposta | +| `user` | string | Identificativo univoco dell'utente finale | ## URL di base -L'URL di base per tutte le richieste API è : - +L'URL di base per tutte le richieste API è: ``` https://api.ai.cloud-temple.com/v1/ ``` @@ -100,7 +97,11 @@ https://api.ai.cloud-temple.com/v1/ - `/chat/completions` : Generazione di risposte conversazionali - `/completions` : Completamento di testo semplice -- `/embeddings` : Crea un vettore di embedding che rappresenta il testo di input +- `/embeddings` : Vettorizzazione per la ricerca semantica e RAG +- `/rerank` e `/v2/rerank` : Riordinamento dei risultati (compatibile con SDK Cohere) +- `/audio/transcriptions` : Trascrizione audio batch (Whisper) +- `/audio/speech` : Sintesi vocale (TTS) +- `/images/generations` : Generazione di immagini - `/models` : Elenco dei modelli disponibili ### Esempio: Elenco dei modelli @@ -111,18 +112,17 @@ curl -X GET "https://api.ai.cloud-temple.com/v1/models" \ ``` **Risposta** : - ```json { "object": "list", "data": [ { - "id": "granite3.3:8b", + "id": "gpt-oss:120b", "object": "model", "created": 1749110897, "owned_by": "CloudTemple", - "root": "granite3.3:8b", - "aliases": ["granite3.3:8b"], + "root": "gpt-oss:120b", + "aliases": ["gpt-oss:120b"], "parent": null, "max_model_len": 60000, "permission": [ @@ -146,4 +146,4 @@ curl -X GET "https://api.ai.cloud-temple.com/v1/models" \ } ``` -La risposta contiene tutti i modelli disponibili con le loro specifiche e permessi. +La risposta contiene tutti i modelli disponibili con le relative specifiche e autorizzazioni. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/llmaas/models.md b/i18n/it/docusaurus-plugin-content-docs/current/llmaas/models.md index 28cfa535..7f587f7e 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/llmaas/models.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/llmaas/models.md @@ -3,1252 +3,1458 @@ title: Catalogo dei Modelli IA sidebar_position: 2 --- -# Catalogo dei Modelli LLM come Servizio +# Catalogo dei Modelli LLM as a Service ## Panoramica -Cloud Temple LLMaaS offre **46 modelli linguistici su larga scala** selezionati e ottimizzati con cura per soddisfare i requisiti più rigorosi di **SecNumCloud**. Il nostro catalogo copre l'intero spettro, dai modelli micro-ultra-efficienzi ai modelli estremamente voluminosi. +Cloud Temple LLMaaS propone **56 modelli linguistici di grandi dimensioni** attentamente selezionati e ottimizzati per soddisfare i requisiti **SecNumCloud** più rigorosi. Il nostro catalogo copre l'intero spettro, dai micro-modelli ultra-efficienti ai modelli estremamente grandi. ### Statistiche Globali | Metrica | Valore | -|--------|--------| -| **Numero totale di modelli** | 46 modelli | -| **Contesto minimo** | 2.048 token | -| **Contesto massimo** | 262.144 token | +|----------|--------| +| **Numero totale di modelli** | 56 modelli | +| **Contesto minimo** | 512 token | +| **Contesto massimo** | 1,000,000 token | | **Conformità** | SecNumCloud ✅ HDS ✅ Sovranità ✅ C5 ✅ | | **Localizzazione** | 100% Francia 🇫🇷 | -### Tariffe +### Tariffazione | Tipo di utilizzo | Prezzo | -|-------------------|--------| -| **Token di input** | 1,9 € / milione di token | -| **Token di output** | 8 € / milione di token | -| **Ragionamento avanzato** | 8 € / milione di token | +|-------------------|------| +| **Token di input** | 1.8€ / milione di token | +| **Token di output** | 8€ / milione di token | +| **Ragionamento avanzato** | 8€ / milione di token | +| **Reranking dei documenti** | 4€ / milione di token rerankati | +| **Batch asincrono (input)** | 0.9€ / milione di token | +| **Batch asincrono (output)** | 4€ / milione di token | -## Modelli di Grandi Dimensioni +## Modelli Chat & Ragionamento -### cogito:32b - -**Deep Cogito • 32B parameters • Context: 32,000 tokens** +Modelli generalisti per il dialogo, l'analisi, il ragionamento e i compiti multilingue. -Advanced version of the Cogito model offering significantly enhanced reasoning and analytical capabilities, designed for the most demanding AI analytical applications. +### cogito:32b +**Deep Cogito • 32B parametri • Contesto : 32,000 token** -**Technical specifications:** +Modello di ragionamento analitico avanzato, progettato per la scomposizione di problemi complessi e la verifica logica. -- **Speed** : 20 tokens/second -- **Consumption** : 6.67 kWh/million tokens -- **License** : LLAMA 3.2 Community Licence -- **Location** : FR 🇫🇷 +**Specifiche tecniche:** +- **Velocità** : 21 token/secondo +- **Consumo** : 6.32 kWh/milione di token +- **Licenza** : [LLAMA 3.2 Community Licence](./licences/llama_3.2_community_licence.licence.md) +- **Localizzazione** : FR 🇫🇷 -**Capabilities:** -✅ Tools/Agent • ❌ Vision • ✅ Reasoning • ❌ Security +**Capacità:** +✅ Strumenti/Agente • ❌ Visione • ✅ Ragionamento • ❌ Sicurezza -**Tags:** `Agent` `Reasoning` `Understanding` `Analysis` +**Tag :** `Agente` `Ragionamento` `Comprensione` `Analisi` -**Use cases:** +**Casi d'uso :** +- Analisi di scenari multifattoriali +- Risoluzione di problemi scientifici con dimostrazione formale +- Sistemi esperti (giuridico, medico, tecnico) -- Multi-factorial scenario analysis with probabilistic evaluation of outcomes -- Scientific problem solving with formal demonstration of steps -- High-criticality applications requiring precision and verifiability of results -- Expert systems in specialized domains (legal, medical, technical) -- Analysis with multi-step reasoning and full explainability of conclusions +--- ### gemma3:27b +**Google • 27B parametri • Contesto : 120,000 token** -**Google • 27B parameters • Context: 120,000 tokens** - -Revolutionary model from Google offering an optimal balance between power and efficiency, with an exceptional performance-to-cost ratio for demanding professional applications. +Modello multimodale di Google con visione integrata e supporto per oltre 140 lingue. Contesto di 120K token. -**Technical specifications:** - -- **Speed**: 21 tokens/second -- **Energy consumption**: 6.35 kWh per million tokens -- **License**: Google Gemma Terms of Use -- **Location**: FR 🇫🇷 +**Specifiche tecniche:** +- **Velocità** : 23 token/secondo +- **Consumo** : 5.80 kWh/milione di token +- **Licenza** : [Google Gemma Terms of Use](./licences/google_gemma_terms_of_use.licence.md) +- **Localizzazione** : FR 🇫🇷 -**Capabilities:** -✅ Tools/Agent • ✅ Vision • ❌ Reasoning • ❌ Security +**Capacità:** +✅ Strumenti/Agente • ✅ Visione • ❌ Ragionamento • ❌ Sicurezza -**Tags:** `Vision` `Agent` `Large context` +**Tag :** `Vision` `Agent` `Grand Contexte` -**Use cases:** +**Casi d'uso :** +- Analisi di documenti con contesto esteso (120K tokens) +- Elaborazione simultanea di immagini e testo +- Estrazione strutturata da PDF e documenti scansionati -- Document analysis with extended context up to 120K tokens (approximately 400 pages) -- Semantic indexing and search in large document databases -- Simultaneous processing of images and text thanks to multimodal capabilities -- Structured data extraction from PDFs and scanned documents -- Integration with external tools via function calling API +--- ### glm-4.7-flash:30b +**Zhipu AI • 30B parametri • Contesto : 120.000 token** -**Zhipu AI • 30B parametri • Contesto: 120.000 token** - -Version Flash del modello GLM-4.7, ottimizzata per velocità ed efficienza. +Modello rapido con un eccellente equilibrio prestazioni/latenza per il ragionamento e l'analisi. **Specifiche tecniche:** - -- **Velocità**: 103 token al secondo -- **Consumo**: 1,41 kWh per milione di token -- **Licenza**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Localizzazione**: FR 🇫🇷 +- **Velocità** : 88 token/secondo +- **Consumo** : 1.58 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 **Capacità:** ✅ Strumenti/Agente • ❌ Visione • ✅ Ragionamento • ❌ Sicurezza -**Tag**: `Agente` `Velocità` `Grande Contesto` `Multilingue` - -**Casi d'uso:** +**Tag :** `Agente` `Rapido` `Contesto Esteso` `Multilingue` -- Assistenti conversazionali veloci -- Analisi di documenti lunghi (fino a 200k) -- Task di ragionamento con bassa latenza +**Casi d'uso :** +- Assistenti conversazionali rapidi +- Analisi di documenti lunghi (120k tokens) +- Attività di ragionamento a bassa latenza -### glm-4.7:358b -> -> ⚠️ **ATTENZIONE: Questo modello è obsoleto.** Modello rimosso dal catalogo il 30/03/2026. +--- -**Zhipu AI • 358B parametri • Contesto: 120.000 token** +### gpt-oss:120b +**OpenAI • 120B parametri • Contesto : 120,000 token** -Modello versatile ad alte prestazioni sviluppato da Zhipu AI, eccellente nel ragionamento logico, nella comprensione multilingue e nelle attività complesse. +Modello open-weight all'avanguardia di OpenAI con ragionamento configurabile e catena di pensiero trasparente. **Specifiche tecniche:** - -- **Velocità**: 18 token al secondo -- **Consumo**: 7,41 kWh per milione di token -- **Licenza**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Localizzazione**: FR 🇫🇷 +- **Velocità** : 94 token/secondo +- **Consumo** : 2.37 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 **Capacità:** ✅ Strumenti/Agente • ❌ Visione • ✅ Ragionamento • ❌ Sicurezza -**Tag:** `Agente` `Ragionamento` `Grande Contesto` `Multilingue` +**Tag :** `MoE` `Agent` `Raisonnement` `Open-Source` `Très Large` -**Casi d'uso:** - -- Compiti di ragionamento complesso -- Analisi di documenti lunghi -- Assistenti conversazionali avanzati +**Casi d'uso :** +- Agenti conversazionali avanzati con ragionamento complesso +- Applicazioni che richiedono trasparenza nel processo di ragionamento +- Scenari aziendali che richiedono una licenza permissiva -### gpt-oss:120b +--- -**OpenAI • 120B parametri • Contesto: 120.000 token** +### gpt-oss:20b +**OpenAI • 20B parametri • Contesto : 120.000 token** -Modello linguistico open-weight di punta di OpenAI, che offre prestazioni solide con una licenza flessibile Apache 2.0. +Versione compatta del modello OpenAI, ottimizzata per un'inferenza rapida con buone capacità di ragionamento. **Specifiche tecniche:** - -- **Velocità**: 104 token al secondo -- **Consumo**: 2,19 kWh per milione di token -- **Licenza**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Localizzazione**: FR 🇫🇷 +- **Velocità** : 41 token/secondo +- **Consumo** : 3,25 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Posizione** : FR 🇫🇷 **Capacità:** ✅ Strumenti/Agente • ❌ Visione • ✅ Ragionamento • ❌ Sicurezza -**Tag:** `MoE` `Agente` `Ragionamento` `Open-Source` `Molto Grande` +**Tag :** `MoE` `Agente` `Ragionamento` `Open-Source` `Compatto` `Rapido` -**Casi d'uso:** +**Casi d'uso :** +- Inferenza rapida con buone capacità di ragionamento +- Casi d'uso agentic (chiamate di funzioni, navigazione web, esecuzione di codice) +- Applicazioni con budget di calcolo limitato -- Agenti conversazionali avanzati con ragionamento complesso e integrazione di strumenti. -- Applicazioni che richiedono una trasparenza totale del processo di ragionamento (chain-of-thought). -- Scenari commerciali che richiedono una licenza permissiva (Apache 2.0). -- Fine-tuning per compiti specializzati che richiedono un modello base potente. +--- ### llama3.3:70b +**Meta • 70B parametri • Contesto : 132,000 token** -**Meta • 70B parameters • Context: 132,000 tokens** +Modello multilingue di Meta, eccellente nel dialogo naturale e nella comprensione sfumata in 8 lingue. -State-of-the-art multilingual model developed by Meta, designed to excel in natural dialogue, complex reasoning, and nuanced instruction understanding. +**Specifiche tecniche:** +- **Velocità** : 10 token/secondo +- **Consumo** : 13.33 kWh/milione di token +- **Licenza** : [LLAMA 3.3 Community Licence](./licences/llama_3.3_community_licence.licence.md) +- **Localizzazione** : FR 🇫🇷 -**Technical specifications:** +**Capacità:** +✅ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza -- **Speed**: 29 tokens/second -- **Consumption**: 7.85 kWh per million tokens -- **License**: LLAMA 3.3 Community License -- **Location**: FR 🇫🇷 +**Tags :** `Agent` `Dialogue` `Multilingue` -**Capabilities:** -✅ Tools/Agent • ❌ Vision • ❌ Reasoning • ❌ Security +**Casi d'uso :** +- Chatbot multilingue (8 langues) +- Analisi di documenti giuridici o tecnici di grandi dimensioni +- Generazione di testi strutturati con fedeltà stilistica -**Tags:** `Agent` `Dialogue` `Multilingual` +--- -**Use cases:** +### ministral-3:14b +**Mistral AI • 14B parametri • Contesto: 250.000 token** -- Multilingual chatbots supporting 8 languages simultaneously -- Execution of complex, chained instructions (prompt chaining) -- Processing of 60K-token dialogue windows for conversational history -- Analysis of large legal or technical documents (>100 pages) -- Generation of structured text with strict adherence to stylistic guidelines +Il più potente della famiglia Ministral, con capacità avanzate di ragionamento e codifica. Contesto di 250K token. -### ministral-3:14b +**Specifiche tecniche:** +- **Velocità** : 28 token/secondo +- **Consumo** : 4,74 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -**Mistral AI • 14B parameters • Context: 250,000 tokens** +**Capacità:** +✅ Strumenti/Agente • ❌ Visione • ✅ Ragionamento • ❌ Sicurezza -The most powerful model in the Ministral family, designed for complex tasks on local infrastructure. +**Tags :** `Haute Performance` `Raisonnement` `Code` -**Technical specifications:** +**Casi d'uso :** +- Risoluzione di problemi complessi +- Assistenti per la codifica e l'ingegneria +- Analisi approfondita di documenti con ragionamento -- **Speed**: 31 tokens/second -- **Energy consumption**: 4.30 kWh per million tokens -- **License**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Location**: FR 🇫🇷 +--- -**Capabilities:** -✅ Tools/Agent • ❌ Vision • ✅ Reasoning • ❌ Security +### ministral-3:3b +**Mistral AI • 3B parametri • Contesto : 250.000 token** -**Tags:** `High Performance` `Edge` `Reasoning` `Code` +Modello compatto Mistral, performante nonostante le dimensioni ridotte. Contesto di 250K token. -**Use cases:** +**Specifiche tecniche:** +- **Velocità** : 22 token/secondo +- **Consumo** : 1,75 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -- Solving complex problems locally -- Coding and engineering assistants -- In-depth document analysis with reasoning +**Capacità:** +✅ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza -### nemotron-3-nano:30b +**Tag :** `Compatto` `Efficiente` -**NVIDIA • 30B parametri • Contesto: 250.000 token** +**Casi d'uso :** +- Assistenti personali reattivi +- Classificazione e instradamento rapidi +- Compiti semplici con contesto ampio -Modello NVIDIA ottimizzato per il ragionamento complesso e l'uso di strumenti, distribuito con un contesto esteso. +--- -**Specifiche tecniche:** +### ministral-3:8b +**Mistral AI • 8B parametri • Contesto: 250,000 token** -- **Velocità**: 89 token al secondo -- **Consumo**: 1,62 kWh per milione di token -- **Licenza**: NVIDIA Community License -- **Localizzazione**: FR 🇫🇷 +Modello intermedio di Ministral con un eccellente compromesso prestazioni/velocità. Contesto di 250K token. + +**Specifiche tecniche:** +- **Velocità** : 40 token/secondo +- **Consumo** : 3.33 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 **Capacità:** ✅ Strumenti/Agente • ❌ Visione • ✅ Ragionamento • ❌ Sicurezza -**Tag**: `Agente` `Ragionamento` `Grande Contesto` +**Tag :** `Efficiente` `Ragionamento` -**Casi d'uso:** - -- Agenti autonomi complessi con chiamate multiple a strumenti -- Ragionamento logico e risoluzione di problemi -- Analisi di documenti lunghi con estrazione precisa +**Casi d'uso :** +- Assistenti conversazionali avanzati +- Analisi di documenti ed estrazione di informazioni +- Buon compromesso velocità/qualità -### olmo-3:32b +--- -**AllenAI • 32B parametri • Contesto: 65.536 token** +### mistral-small3.2:24b +**Mistral AI • 24B parametri • Contesto: 128,000 token** -Il primo modello di ragionamento completamente open source a questa scala, in grado di competere con i migliori modelli proprietari. +Modello Mistral con miglioramento del rispetto delle istruzioni, function calling robusto e capacità vision. Rilevamento integrato di contenuti problematici. **Specifiche tecniche:** - -- **Velocità**: 19 token al secondo -- **Consumo**: 7,02 kWh per milione di token -- **Licenza**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Localizzazione**: FR 🇫🇷 +- **Velocità** : 28 token/secondo +- **Consumo** : 5.05 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 **Capacità:** -❌ Strumenti/Agente • ❌ Visione • ✅ Ragionamento • ❌ Sicurezza +✅ Strumenti/Agente • ✅ Visione • ❌ Ragionamento • ✅ Sicurezza -**Tag**: `Open-Source` `Grande Contesto` `Ragionamento` `Trasparente` `Codice` `Alta Prestazione` +**Tag :** `Visione` `Agente` `Sicurezza` `Instruction Following` -**Casi d'uso:** +**Casi d'uso :** +- Agent conversazionali affidabili con rispetto delle istruzioni preciso +- Integrazione di strumenti esterni tramite function calling +- Applicazioni che richiedono filtraggio di sicurezza nativo -- Ragionamento complesso e risoluzione di problemi a più passi -- Sviluppo software avanzato e generazione di codice -- Analisi approfondite che richiedono trasparenza sul processo decisionale +--- -### olmo-3:7b +### mistral-small4:119b +**Mistral AI • 119B parametri • Contesto : 262,144 token** -**AllenAI • 7B parameters • Context: 65,536 tokens** +Modello Mistral ad alte prestazioni (119B) con visione, sicurezza integrata e contesto di 262K token. Rapido (100 t/s). -Reference "Fully Open" model, offering complete transparency (data, code, weights) and remarkable efficiency. +**Specifiche tecniche:** +- **Velocità** : 100 token/secondo +- **Consumo** : 2.00 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -**Technical specifications:** +**Capacità:** +✅ Strumenti/Agente • ✅ Visione • ❌ Ragionamento • ✅ Sicurezza -- **Speed**: 37 tokens/second -- **Energy consumption**: 1.65 kWh per million tokens -- **License**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Location**: FR 🇫🇷 +**Tag :** `Visione` `Agente` `Sicurezza` `Contesto Esteso` `Rapido` -**Capabilities:** -❌ Tools/Agent • ❌ Vision • ❌ Reasoning • ❌ Security +**Casi d'uso :** +- Agent conversazionali ad alte prestazioni con visione +- Analisi di documenti molto lunghi (262K token) +- Applicazioni critiche che richiedono affidabilità e sicurezza -**Tags:** `Open-Source` `Large Context` `Transparent` `Efficient` `Maths` `Code` +### nemotron-3-super:120b +**NVIDIA • 120B parametri • Contesto : 1,000,000 token** -**Use cases:** +Modello NVIDIA ottimizzato per agenti collaborativi, ragionamento a lungo termine e carichi di lavoro ad alto volume. Contesto da 1M token. -- Academic and scientific research requiring full reproducibility -- Programming tasks and mathematical problem solving -- Analysis of medium-sized documents with full traceability +**Specifiche tecniche:** +- **Velocità** : 72 token/secondo +- **Consumo** : 1.93 kWh/milione di token +- **Licenza** : [NVIDIA Community License](./licences/nvidia_community_license.licence.md) +- **Localizzazione** : FR 🇫🇷 -### qwen-coder-next:80b +**Capacità:** +✅ Strumenti/Agente • ❌ Visione • ✅ Ragionamento • ❌ Sicurezza -**Qwen Team • 80B parametri • Contestuale: 250.000 token** +**Tag :** `Agente` `Ragionamento` `Contesto Lungo` -Modello MoE di punta ottimizzato per codice e ragionamento complesso. +**Casi d'uso :** +- Agenti autonomi con chiamate multiple agli strumenti +- Automazione di workflow ad alto volume +- Analisi di documenti lunghi con estrazione precisa -**Specifiche tecniche:** +--- + +### nemotron-cascade:30b +**NVIDIA • 30B parametri • Contesto : 1,000,000 token** -- **Velocità**: 98 token al secondo -- **Consumo**: 1,47 kWh per milione di token -- **Licenza**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Localizzazione**: FR 🇫🇷 +Modello NVIDIA specializzato in matematica (médaille d'or IMO 2025) e decomposizione dei problemi. Contesto 1M token. + +**Specifiche tecniche:** +- **Velocità** : 130 token/secondo +- **Consumo** : 1,93 kWh/milione di token +- **Licenza** : [NVIDIA Community License](./licences/nvidia_community_license.licence.md) +- **Localizzazione** : FR 🇫🇷 **Capacità:** ✅ Strumenti/Agente • ❌ Visione • ✅ Ragionamento • ❌ Sicurezza -**Tag**: `Agente` `Programmazione` `MoE` `Grande Contesto` `AWQ` +**Tag :** `Agente` `Ragionamento` `Grande Contesto` `Matematica` -**Casi d'uso:** +**Casi d'uso :** +- Risoluzione di problemi matematici complessi +- Agenti con chiamate multiple agli strumenti +- Analisi di documenti lunghi -- Assistente di programmazione avanzato (scala repository) -- Analisi e refactorizzazione di codice complesso -- Agenti autonomi di ingegneria del software +--- -### qwen3-2507:235b +### nemotron3-nano:30b +**NVIDIA • 30B parametri • Contesto : 1,000,000 token** -**Qwen Team • 235B parameters • Context: 130,000 tokens** +Modello NVIDIA ultra-veloce (160 t/s) con ragionamento e function calling. Contesto di 1M token. -Massive MoE model with 235 billion parameters, activating only 22 billion at a time, delivering state-of-the-art performance. +**Specifiche tecniche:** +- **Velocità** : 160 token/secondo +- **Consumo** : 1.56 kWh/milione di token +- **Licenza** : [NVIDIA Community License](./licences/nvidia_community_license.licence.md) +- **Localizzazione** : FR 🇫🇷 + +**Capacità:** +✅ Strumenti/Agente • ❌ Visione • ✅ Ragionamento • ❌ Sicurezza -**Technical Specifications:** +**Tag :** `Agente` `Ragionamento` `Contesto Esteso` `Veloce` -- **Speed**: 58 tokens/second -- **Energy Consumption**: 3.93 kWh per million tokens -- **License**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Location**: FR 🇫🇷 +**Casi d'uso :** +- Agenti autonomi che richiedono una risposta rapida +- Ragionamento logico e risoluzione dei problemi +- Analisi di documenti lunghi con estrazione precisa -**Capabilities:** -✅ Tools/Agent • ❌ Vision • ✅ Reasoning • ❌ Security +--- -**Tags:** `MoE` `Agent` `Reasoning` `Very Large` +### olmo-3:32b +**AllenAI • 32B parametri • Contesto : 65,536 token** -**Use Cases:** +Primo modello di ragionamento completamente open source a questa scala. Trasparenza totale (dati, codice, pesi). -- Solving complex mathematical and logical problems -- Tasks requiring extensive knowledge base -- Advanced coding assistant -- In-depth document analysis +**Specifiche tecniche:** +- **Velocità** : 22 token/secondo +- **Consumo** : 5.98 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -### qwen3-2507:30b-a3b +**Capacità:** +❌ Strumenti/Agente • ❌ Visione • ✅ Ragionamento • ❌ Sicurezza -**Qwen Team • 30B parametri • Contesto: 250.000 token** +**Tag :** `Open-Source` `Contesto Esteso` `Ragionamento` `Trasparente` `Codice` `Alte Prestazioni` -Versione migliorata del modo senza pensiero di Qwen3-30B, con capacità generali, copertura delle conoscenze e allineamento utente migliorati. +**Casi d'uso :** +- Ragionamento complesso e risoluzione di problemi multi-fase +- Sviluppo software con trasparenza del processo decisionale +- Attività critiche che richiedono una completa auditabilità -**Specifiche tecniche:** +--- -- **Velocità**: 104 token al secondo -- **Consumo**: 1,39 kWh per milione di token -- **Licenza**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Localizzazione**: FR 🇫🇷 +### olmo-3:7b +**AllenAI • 7B parametri • Contesto : 65.536 token** -**Capacità:** -✅ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza +Modello completamente open source ed efficiente, eccellente in matematica e programmazione con trasparenza totale. -**Tag**: `Agente` `Grande Contesto` `MoE` `Multilingue` +**Specifiche tecniche:** +- **Velocità** : 35 token/secondo +- **Consumo** : 1,13 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -**Casi d'uso:** +**Capacità:** +❌ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza + +**Tags :** `Open-Source` `Grand Contexte` `Transparent` `Efficient` `Maths` `Code` -- Compiti complessi che richiedono un follow-up preciso delle istruzioni e un ragionamento logico. -- Applicazioni multilingue con ampia copertura delle conoscenze. -- Generazione di testo di alta qualità per compiti aperti e soggettivi. -- Analisi di documenti estremamente voluminosi grazie al contesto di 250k token. +**Casi d'uso :** +- Ricerca accademica che richiede una riproducibilità totale +- Programmazione e risoluzione di problemi matematici +- Analisi di documenti con tracciabilità completa -### qwen3-coder:30b -> -> ⚠️ **ATTENZIONE: Questo modello è obsoleto.** Si raccomanda la migrazione verso qwen-coder-next:80b. +--- -**Qwen Team • 30B parametri • Contesto: 250.000 token** +### qwen3-2507-think:4b +**Qwen Team • 4B parametri • Contesto : 250.000 token** -Modello MoE ottimizzato per compiti di ingegneria del software, con contesto molto lungo. +Modello compatto ottimizzato per il ragionamento profondo (logica, matematica, scienza, codice). Contesto di 250K token. **Specifiche tecniche:** - -- **Velocità**: 104 token al secondo -- **Consumo**: 1,39 kWh per milione di token -- **Licenza**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Localizzazione**: IT 🇮🇹 +- **Velocità** : 55 token/secondo +- **Consumo** : 2,42 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 **Capacità:** ✅ Strumenti/Agente • ❌ Visione • ✅ Ragionamento • ❌ Sicurezza -**Tag:** `Agente` `Programmazione` `Grande Contesto` `MoE` +**Tag :** `Agente` `Ragionamento` `Grande Contesto` `Compatto` `Veloce` -**Casi d'uso:** - -- Agenti di ingegneria del software per esplorare e modificare basi di codice -- Generazione di codice complesso con comprensione a livello di repository (repository-scale) -- Compiti di ragionamento su contesti estesi -- Miglioramento del codice tramite apprendimento per rinforzo - -### qwen3-next:80b +**Casi d'uso :** +- Ragionamento complesso (logica, matematica, scienza, codice) +- Agenti con lunga cronologia di conversazione (250K token) +- Analisi di documenti di grandi dimensioni con ragionamento profondo -**Qwen Team • 80B parameters • Context: 250,000 tokens** +--- -Next 80B model from Qwen, optimized for large contexts and reasoning. +### qwen3-2507:235b +**Qwen Team • 235B parametri • Contesto : 200,000 token** -**Technical specifications:** +Modello più potente del catalogo (235B parametri, 22B attivi). Eccelle in matematica, codifica e ragionamento logico. -- **Speed** : 98 tokens/second -- **Consumption** : 1.47 kWh/million tokens -- **License** : [Apache 2.0](./licences/apache_2.0.licence.md) -- **Location** : FR 🇫🇷 +**Specifiche tecniche:** +- **Velocità** : 56 token/secondo +- **Consumo** : 3.97 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -**Capabilities:** -✅ Tools/Agent • ❌ Vision • ❌ Reasoning • ❌ Security +**Capacità:** +✅ Strumenti/Agente • ❌ Visione • ✅ Ragionamento • ❌ Sicurezza -**Tags:** `Agent` `Reasoning` `Large Context` `MoE` +**Tag :** `MoE` `Agente` `Ragionamento` `Molto Grande` -**Use cases:** +**Casi d'uso :** +- Risoluzione di problemi matematici e logici complessi +- Attività che richiedono un'ampia base di conoscenze +- Assistente di codifica avanzato -- Advanced conversational agents with tool integration -- Analysis of very large documents (up to 260k tokens) -- Code generation and complex tasks requiring structured reasoning +--- ### qwen3-omni:30b +**Qwen Team • 30B parametri • Contesto : 32.768 token** -**Qwen Team • 30B parametri • Contesto: 32.768 token** - -Qwen3-Omni 30B è un modello nativamente omnimodale, in grado di comprendere testo, immagini, video e audio in un unico flusso. +Modello omnimodale nativo — comprende simultaneamente testo, immagini, video e audio. **Specifiche tecniche:** - -- **Velocità**: 86 token al secondo -- **Consumo**: 2,65 kWh per milione di token -- **Licenza**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Localizzazione**: FR 🇫🇷 +- **Velocità** : 19 token/secondo +- **Consumo** : 7,43 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 **Capacità:** ✅ Strumenti/Agente • ✅ Visione • ✅ Ragionamento • ❌ Sicurezza -**Tag**: `Omni` `Audio` `Visione` `Agente` `Multimodale` `BF16` - -**Casi d'uso:** +**Tag :** `Omni` `Audio` `Visione` `Agente` `Multimodale` -- Interazioni multimodali fluide (parla, vede, ascolta) -- Analisi combinata di video e audio +**Casi d'uso :** +- Interazioni multimodali (testo + immagini + audio + video) +- Analisi video e audio combinata - Assistenti intelligenti di nuova generazione -### qwen3-vl:235b +--- -**Qwen Team • 235B parametri • Contesto: 200.000 token** +### qwen3.5:0.8b +**Qwen Team • 0.8B parametri • Contesto : 250.000 token** -Il modello multimodale più potente del catalogo, che combina una comprensione visiva di ultima generazione con capacità di ragionamento eccezionali. +Modello ultra-leggero con un contesto eccezionale di 250K token — notevole per un modello di queste dimensioni. **Specifiche tecniche:** - -- **Velocità**: 31 token al secondo -- **Consumo**: 7,35 kWh per milione di token -- **Licenza**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Localizzazione**: FR 🇫🇷 +- **Velocità** : 16 token/secondo +- **Consumo** : 2.39 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 **Capacità:** -✅ Strumenti/Agente • ✅ Visione • ✅ Ragionamento • ❌ Sicurezza - -**Tag**: `Agente` `Ragionamento` `Grande Contesto` `NVFP4` `Blackwell` `Visione` +✅ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza -**Casi d'uso:** +**Tag :** `Compatto` `Efficiente` `Grande Contesto` `Multilingue` -- Automazione di processi documentali complessi (OCR multilingue, estrazione strutturata) -- Agenti visivi intelligenti per l'interazione software e l'automazione dell'interfaccia -- Analisi scientifica e tecnica avanzata (STEM, ragionamento spaziale 3D) -- RAG Multimodale su documenti estesi (>200k token) e video +**Casi d'uso :** +- Elaborazione del testo con contesto molto ampio (250K tokens) +- Classificazione e ordinamento rapido +- Assistenti leggeri con grande cronologia -### qwen3-vl:30b +--- -**Qwen Team • 30B parametri • Contestuale: 250.000 token** +### qwen3.5:4b +**Team Qwen • 4B parametri • Contesto : 250,000 token** -Modello multimodale di punta (Qwen3-VL) che offre una comprensione visiva eccezionale e un ragionamento temporale preciso. +Modello Qwen3.5 compatto con un buon compromesso prestazioni/efficienza e un contesto di 250K token. **Specifiche tecniche:** - -- **Velocità**: 43 token al secondo -- **Consumo**: 3,10 kWh per milione di token -- **Licenza**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Localizzazione**: FR 🇫🇷 +- **Velocità** : 37 token/secondo +- **Consumo** : 3.64 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 **Capacità:** -✅ Strumenti/Agente • ✅ Visione • ❌ Ragionamento • ❌ Sicurezza +✅ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza -**Tag**: `Visione` `Agente` `Grande Contesto` `Multimodale` `Video` `OCR` +**Tag :** `Compatto` `Efficiente` `Lungo Contesto` `Multilingue` -**Casi d'uso:** +**Casi d'uso :** +- Assistenti conversazionali con lungo contesto +- Riepilogo di testo e classificazione +- Compiti di codifica semplici -- Analisi approfondita di video lunghi e sorveglianza intelligente -- Estrazione di dati strutturati complessi (documenti, tabelle, grafici) -- Assistenti visivi avanzati con comprensione spaziale -- Ragionamento multimodale su sequenze di eventi +--- -### qwen3-vl:32b +### qwen3.5:9b +**Qwen Team • 9B parametri • Contesto: 250,000 token** -**Qwen Team • 32B parameters • Context: 250,000 tokens** +Modello Qwen3.5 intermedio con solido ragionamento e contesto esteso a 250K token. -High-performance variant of Qwen3-VL, optimized for the most demanding vision tasks. +**Specifiche tecniche:** +- **Velocità** : 32 token/secondo +- **Consumo** : 4.23 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 + +**Capacità:** +✅ Strumenti/Agente • ❌ Visione • ✅ Ragionamento • ❌ Sicurezza -**Technical Specifications:** +**Tag :** `Efficient` `Grande Contesto` `Multilingue` `Ragionamento` -- **Speed**: 17 tokens/second -- **Energy Consumption**: 7.84 kWh per million tokens -- **License**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Location**: FR 🇫🇷 +**Casi d'uso :** +- Assistenti conversazionali avanzati +- Analisi di documenti ed estrazione di informazioni +- Compiti di ragionamento di complessità media -**Capabilities:** -✅ Tools/Agent • ✅ Vision • ❌ Reasoning • ❌ Security +--- -**Tags:** `Vision` `Agent` `Large Context` `Multimodal` `Video` `OCR` +### qwen3.6:27b +**Qwen Team • 27B parametri • Contesto : 1,000,000 token** -**Use Cases:** +Modello generalista di riferimento con un contesto nativo di 1M token. Eccelle nel ragionamento, nell'esecuzione precisa delle istruzioni e nel multilinguismo. -- Scientific and technical analysis of high-resolution images -- Automation of complex visual processes -- Detailed understanding of dynamic scenes +**Specifiche tecniche:** +- **Velocità** : 80 token/secondo +- **Consumo** : 2.78 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -### qwen3:14b +**Capacità:** +✅ Strumenti/Agente • ✅ Visione • ✅ Ragionamento • ❌ Sicurezza -**Qwen Team • 14B parameters • Context: 131,072 tokens** +**Tag :** `Agente` `Grande Contesto` `Multilingue` `Visione` `Ragionamento` -Balanced Qwen3 14B model, delivering strong general performance with good inference speed. +**Casi d'uso :** +- Assistenti versatili con un'accurata esecuzione delle istruzioni +- Analisi di documenti di grandi dimensioni (1M token) +- Applicazioni multilingue con ragionamento logico +- Programmazione e generazione di codice -**Technical specifications:** +--- -- **Speed**: 68.2 tokens/second -- **Energy consumption**: 0.90 kWh per million tokens -- **License**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Location**: FR 🇫🇷 +### qwen3:0.6b +**Squadra Qwen • 0.6B parametri • Contesto : 40,000 token** -**Capabilities:** -✅ Tools/Agent • ❌ Vision • ❌ Reasoning • ❌ Security +Micro-modello ultra-veloce per compiti semplici e routing. 40K token di contesto. -**Tags:** `Agent` `Versatile` `Multilingual` +**Specifiche tecniche:** +- **Velocità** : 46 token/secondo +- **Consumo** : 1.33 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -**Use cases:** +**Capacità:** +✅ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza -- High-performance virtual assistants -- High-quality content generation -- Classification and extraction tasks +**Tag :** `Compatto` `Veloce` `Efficiente` `Multilingue` -## Modelli Specializzati +**Casi d'uso :** +- Classificazione e ordinamento rapido +- Assistenti leggeri con bassa latenza +- Routing in architetture multi-modello -### bge-m3:567m +--- -**BAAI • 567M parametri • Contesto: 8.192 token** +## Modelli Programmazione & Agenti -Modello di embedding multilingue di ultima generazione (BGE-M3), che offre capacità eccezionali di ricerca semantica in oltre 100 lingue. +Modelli specializzati nel codice, nell'ingegneria del software e negli agenti autonomi. -**Specifiche tecniche:** +### devstral-small-2:24b +**Mistral AI & All Hands AI • 24B parametri • Contesto : 200.000 token** -- **Velocità**: 171 token al secondo -- **Consumo**: 0,36 kWh per milione di token -- **Licenza**: MIT -- **Localizzazione**: FR 🇫🇷 +Modello agentico all'avanguardia per l'ingegneria del software. Prestazioni vicine a modelli >100B per il codice. Visione integrata. -**Capacità:** -❌ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza +**Specifiche tecniche :** +- **Velocità** : 33 token/secondo +- **Consumo** : 4,23 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -**Tag**: `Embedding` `Multilingue` `Efficiente` +**Capacità :** +✅ Strumenti/Agente • ✅ Visione • ❌ Ragionamento • ✅ Sicurezza -**Casi d'uso:** +**Tag :** `Agente` `Programmazione` `Visione` `Open-Source` `Lungo Contesto` `Veloce` -- Ricerca semantica multilingue -- Retrieval-Augmented Generation (RAG) -- Clustering e classificazione di documenti +**Casi d'uso :** +- Agenti di codifica autonomi +- Refactoring rapido del codice +- Attività di ingegneria iterative -### deepseek-ocr +--- -**DeepSeek AI • 3B parameters • Context: 8,192 tokens** +### functiongemma:270m +**Google • 270M parametri • Contesto : 32,768 token** -Specialized OCR model from DeepSeek, designed for high-precision text extraction with formatting preservation. +Micro-modello specializzato nel rilevamento delle chiamate di funzione. Ideale come router in un'architettura agentica. -**Technical specifications:** +**Specifiche tecniche:** +- **Velocità** : 40 token/secondo +- **Consumo** : 0.97 kWh/milione di token +- **Licenza** : [Termini di utilizzo di Google Gemma](./licences/google_gemma_terms_of_use.licence.md) +- **Localizzazione** : FR 🇫🇷 -- **Speed**: 79 tokens/second -- **Consumption**: 1.01 kWh/million tokens -- **License**: MIT License -- **Location**: FR 🇫🇷 +**Capacità:** +✅ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza -**Capabilities:** -❌ Tools/Agent • ✅ Vision • ❌ Reasoning • ❌ Security +**Tag :** `Agente` `Compatto` `Efficiente` `Function Calling` -**Tags:** `Vision` `OCR` `Efficient` +**Casi d'uso :** +- Router di strumenti in un'architettura agentica +- Rilevamento di intenzioni di chiamate di funzione +- Pre-filtraggio rapido prima del routing -**Use cases:** +--- -- Extraction of structured text (Markdown/LaTeX) from images/PDFs -- Document digitization with complex tables and formulas +### qwen-coder-next:80b +**Team Qwen • 80B parametri • Contesto: 250,000 token** -### devstral-small-2:24b +Modello all'avanguardia per il codice e il ragionamento complesso. Contesto di 250K token. -**Mistral AI & All Hands AI • 24B parameters • Context: 200,000 tokens** +**Specifiche tecniche:** +- **Velocità** : 97 token/secondo +- **Consumo** : 2.29 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -Second iteration of Devstral (Small 2), state-of-the-art agent model for software engineering, deployed on high-performance GPU server. +**Capacità:** +✅ Strumenti/Agente • ❌ Visione • ✅ Ragionamento • ❌ Sicurezza -**Technical specifications:** +**Tag :** `Agente` `Programmazione` `MoE` `Contesto Lungo` -- **Speed**: 38 tokens/second -- **Consumption**: 3.80 kWh per million tokens -- **License**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Location**: FR 🇫🇷 +**Casi d'uso :** +- Assistente di programmazione avanzato (scala repository) +- Analisi e refactoring di codice complesso +- Agenti autonomi di ingegneria del software -**Capabilities:** -✅ Tools/Agent • ✅ Vision • ❌ Reasoning • ✅ Security +--- -**Tags:** `Agent` `Programming` `Vision` `Open-Source` `Large Context` `FP8` `Fast` +### qwen3-next:80b +**Qwen Team • 80B parametri • Contesto : 250,000 token** -**Use cases:** +Modello versatile da 80B ottimizzato per contesti lunghi, function calling e ragionamento strutturato. -- Autonomous coding agents requiring low latency -- Rapid code refactoring -- Iterative engineering tasks +**Specifiche tecniche:** +- **Velocità** : 67 token/secondo +- **Consumo** : 2.09 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -### devstral:24b -> -> ⚠️ **ATTENTION: questo modello è obsoleto.** Si raccomanda la migrazione verso devstral-small-2:24b. +**Capacità:** +✅ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza -**Mistral AI & All Hands AI • 24B parametri • Contesto: 120.000 token** +**Tag :** `Agente` `Contesto Lungo` `MoE` -Devstral 24b è un modello linguistico agente specializzato nell'ingegneria del software, sviluppato congiuntamente da Mistral AI e All Hands AI. +**Casi d'uso :** +- Agent conversazionali avanzati con integrazione di strumenti +- Analisi di documenti molto voluminosi +- Generazione di codice e ragionamento strutturato -**Specifiche tecniche:** +--- -- **Velocità**: 44 token al secondo -- **Consumo**: 3,28 kWh per milione di token -- **Licenza**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Localizzazione**: FR 🇫🇷 +### qwen3.6:35b +**Team Qwen • 35B parametri • Contesto: 1,000,000 token** -**Capacità:** -✅ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ✅ Sicurezza +Leader nell'ingegneria del software agentica (SWE-bench 73.4%). Contesto da 1M di token, visione e tool calling integrati. -**Tag:** `Agente` `Programmazione` `Open-Source` `Grande Contesto` `FP8` +**Specifiche tecniche:** +- **Velocità** : 121 token/secondo +- **Consumo** : 2,07 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -**Casi d'uso:** +**Capacità:** +✅ Strumenti/Agente • ✅ Visione • ✅ Ragionamento • ❌ Sicurezza -- Esplorazione e modifica di basi di codice -- Agenti autonomi per l'ingegneria del software -- Refactoring e generazione di codice complesso +**Tag :** `Agente` `Programmazione` `Grande Contesto` `MoE` `Visione` `Ragionamento` -### embeddinggemma:300m +**Casi d'uso :** +- Assistente di codifica agentico negli IDE (Cursor, Continue.dev, VS Code Copilot) +- Analisi di basi di codice complete (1M tokens) +- Revisione del codice automatizzata e CI/CD intelligenti +- Risoluzione di bug complessi con ragionamento multi-fase -**Google • 300M parameters • Context: 2,048 tokens** +--- -State-of-the-art embedding model from Google, optimized for its size, ideal for search and semantic retrieval tasks. +### rnj-1:8b +**Essential AI • 8B parametri • Contesto : 32,000 token** -**Technical specifications:** +Modello specializzato STEM — eccellente nel codice (83.5% HumanEval+), matematica e scienze. -- **Speed** : 175 tokens/second -- **Consumption** : 0.35 kWh per million tokens -- **License** : Google Gemma Terms of Use -- **Location** : FR 🇫🇷 +**Specifiche tecniche:** +- **Velocità** : 23 token/secondo +- **Consumo** : 1.69 kWh/milione di token +- **Licenza** : [Open Weights](./licences/open_weights.licence.md) +- **Localizzazione** : FR 🇫🇷 -**Capabilities:** -❌ Tools/Agent • ❌ Vision • ❌ Reasoning • ❌ Security +**Capacità:** +❌ Strumenti/Agente • ❌ Visione • ✅ Ragionamento • ❌ Sicurezza -**Tags:** `Embedding` `Compact` `Semantic` `Efficient` `Multilingual` +**Tag :** `Codice` `Matematica` `STEM` `Ragionamento` `Efficiente` -**Use cases:** +**Casi d'uso :** +- Generazione di codice avanzata +- Risoluzione di problemi matematici complessi +- Attività scientifiche e tecniche -- Information search and retrieval (Retrieval) -- Document classification and clustering -- Semantic similarity search -- Deployment on resource-constrained devices (mobile, laptop) +--- -### gemma3:1b +## Modelli Visione & Multimodali -**Google • 1B parameters • Context: 120,000 tokens** +Modelli per l'analisi di immagini, video, OCR e documenti visivi. -Micro-model Gemma 3, ultra-fast and efficient. +### deepseek-ocr +**DeepSeek AI • 3B parametri • Contesto : 8,192 token** -**Technical specifications:** +Modello OCR specializzato nell'estrazione di testo ad alta precisione con preservazione della formattazione (tabelle, formule). -- **Speed** : 53 tokens/second -- **Consumption** : 1.15 kWh/million tokens -- **License** : Google Gemma Terms of Use -- **Location** : FR 🇫🇷 +**Specifiche tecniche:** +- **Velocità** : 84 token/secondo +- **Consumo** : 0,66 kWh/milione di token +- **Licenza** : [Licenza MIT](./licences/mit_licence.licence.md) +- **Localizzazione** : FR 🇫🇷 -**Capabilities:** -❌ Tools/Agent • ❌ Vision • ❌ Reasoning • ❌ Security +**Capacità:** +❌ Strumenti/Agente • ✅ Visione • ❌ Ragionamento • ❌ Sicurezza -**Tags:** `Compact` `Efficient` `Edge` +**Tag** : `Visione` `OCR` `Efficiente` -**Use cases:** +**Casi d'uso** : +- Estrazione di testo strutturato (Markdown/LaTeX) da immagini/PDF +- Digitalizzazione di documenti con tabelle e formule -- Fast text classification -- Simple chatbots -- Rapid prototyping +--- -### gemma3:4b +### gemma4:31b +**Google • 31B parametri • Contesto: 250,000 token** -**Google • 4B parameters • Context: 120,000 tokens** +Modello denso multimodale di Google, classificato 3° mondiale su Arena AI. Visione avanzata, ragionamento e codifica. Contesto 250K token. -Compact Gemma 3 4B model, offering an excellent performance-to-size ratio. +**Specifiche tecniche:** +- **Velocità** : 59 token/secondo +- **Consumo** : 3.77 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -**Technical specifications:** +**Capacità:** +✅ Strumenti/Agente • ✅ Visione • ✅ Ragionamento • ❌ Sicurezza -- **Speed** : 48.0 tokens/second -- **Energy consumption** : 1.27 kWh per million tokens -- **License** : Google Gemma Terms of Use -- **Location** : FR 🇫🇷 +**Tag :** `Agent` `Grand Contexte` `Vision` `Raisonnement` `Multilingue` `Open-Source` -**Capabilities:** -❌ Tools/Agent • ❌ Vision • ❌ Reasoning • ❌ Security +**Casi d'uso :** +- Agenti autonomi con ragionamento e chiamate di strumenti +- Analisi di documenti di grandi dimensioni con visione +- Comprensione visiva (OCR, graphiques, documents scannés) -**Tags:** `Compact` `Efficient` `Edge` +--- -**Use cases:** +### gemma4:e2b +**Google • 31B (E2B) parametri • Contesto : 128.000 token** -- Personal assistants on laptops -- Text summarization -- Light translation +Variante ultra-rapida (125 t/s) di Gemma 4 con visione. Eccellente efficienza energetica. -### gpt-oss:20b +**Specifiche tecniche:** +- **Velocità** : 125 token/secondo +- **Consumo** : 1,11 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -**OpenAI • 20B parameters • Context: 120,000 tokens** +**Capacità:** +✅ Strumenti/Agente • ✅ Visione • ❌ Ragionamento • ❌ Sicurezza -Open-weight language model by OpenAI, optimized for efficiency and deployment on consumer-grade hardware. +**Tag :** `Visione` `Rapido` `Efficiente` -**Technical specifications:** +**Casi d'uso :** +- Analisi di immagini con bassa latenza +- Documenti di grandi dimensioni con impronta ridotta -- **Speed**: 9 tokens/second -- **Energy consumption**: 14.81 kWh per million tokens -- **License**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Location**: FR 🇫🇷 +--- -**Capabilities:** -✅ Tools/Agent • ❌ Vision • ✅ Reasoning • ❌ Security +### gemma4:e4b +**Google • 31B (E4B) parametri • Contesto : 128,000 token** -**Tags:** `MoE` `Agent` `Reasoning` `Open-Source` `Compact` `Fast` +Variante di Gemma 4 con miglior compromesso qualità/velocità rispetto alla versione E2B. Visione integrata. -**Use cases:** +**Specifiche tecniche:** +- **Velocità** : 85 token/secondo +- **Consumo** : 1.63 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -- Deployments on resource-constrained devices (edge devices) or low-cost servers. -- Applications requiring fast inference with strong reasoning capabilities. -- Agent-based use cases involving function calls, web navigation, and code execution. -- Fine-tuning for specialized tasks on consumer hardware. +**Capacità:** +✅ Strumenti/Agente • ✅ Visione • ❌ Ragionamento • ❌ Sicurezza -### granite-embedding:278m +**Tag :** `Visione` `Rapido` -**IBM • 278M parameters • Context: 8,192 tokens** +**Casi d'uso :** +- Analisi di documenti e immagini con buon compromesso qualità/velocità +- Alternativa rapida per attività di visione -Ultra-compact IBM Granite embedding model, designed for maximum efficiency. +--- -**Technical specifications:** +### granite3.2-vision:2b +**IBM • 2B parametri • Contesto : 16.384 token** -- **Speed** : 196.3 tokens/second -- **Consumption** : 0.31 kWh per million tokens -- **License** : [Apache 2.0](./licences/apache_2.0.licence.md) -- **Location** : FR 🇫🇷 +Modello vision compatto IBM Granite per OCR rapido ed estrazione di dati da documenti scansionati. -**Capabilities:** -❌ Tools/Agent • ❌ Vision • ❌ Reasoning • ❌ Security +**Specifiche tecniche:** +- **Velocità** : 49 token/secondo +- **Consumo** : 0,80 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -**Tags:** `Embedding` `Compact` `Efficient` +**Capacità:** +❌ Strumenti/Agente • ✅ Visione • ❌ Ragionamento • ❌ Sicurezza -**Use cases:** +**Tag :** `Visione` `Compatto` `Efficiente` `OCR` -- Semantic search -- Document clustering +**Casi d'uso :** +- OCR rapido su documenti leggeri +- Estrazione di dati da immagini +- Analisi visiva a basso consumo -### granite4-small-h:32b +--- -**IBM • 32B (9B attivi) parametri • Contest: 128.000 token** +### qwen3-vl:235b +**Qwen Team • 235B parametri • Contesto : 200.000 token** -Modello MoE (Mixture-of-Experts) di IBM, progettato come "cavallo di battaglia" per compiti aziendali quotidiani, con un'ottima efficienza per contesti lunghi. +Il modello multimodale più potente del catalogo. Comprensione visiva all'avanguardia e ragionamento eccezionale. **Specifiche tecniche:** - -- **Velocità** : 49 token al secondo -- **Consumo** : 2,95 kWh per milione di token +- **Velocità** : 24 token/secondo +- **Consumo** : 5,56 kWh/milione di token - **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) - **Localizzazione** : FR 🇫🇷 **Capacità:** -✅ Strumenti/Agente • ❌ Visione • ✅ Ragionamento • ✅ Sicurezza - -**Tag:** `Agente` `Ragionamento` `Sicurezza` `MoE` `Grande Contesto` `Efficiente` +✅ Strumenti/Agente • ✅ Visione • ✅ Ragionamento • ❌ Sicurezza -**Casi d'uso:** +**Tag :** `Agente` `Ragionamento` `Lungo Contesto` `Visione` -- Agenti conversazionali per il supporto client con accesso a basi di conoscenza estese. -- Automazione di flussi di lavoro aziendali che richiedono l'uso di diversi strumenti. -- Analisi di documenti lunghi con un consumo ottimizzato delle risorse. -- Deployment su infrastrutture di dimensioni medie grazie alla sua efficienza. +**Casi d'uso :** +- Automazione documentale complessa (OCR multilingue, estrazione strutturata) +- Agenti visivi intelligenti +- Analisi scientifica avanzata (STEM, ragionamento spaziale) +- RAG Multimodale su documenti e video -### granite4-tiny-h:7b +--- -**IBM • 7B (1B attivi) parametri • Contesto: 128.000 token** +### qwen3-vl:2b +**Qwen Team • 2B parametri • Contesto : 250,000 token** -Modello MoE ibrido estremamente efficiente di IBM, progettato per bassa latenza, applicazioni "edge" e locali, e come blocco di base per flussi di lavoro agenziali. +Modello vision ultra-compatto per OCR rapido, rilevamento di oggetti e applicazioni embedded. **Specifiche tecniche:** - -- **Velocità**: 58 token al secondo -- **Consumo**: 2,30 kWh per milione di token -- **Licenza**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Localizzazione**: FR 🇫🇷 +- **Velocità** : 64 token/secondo +- **Consumo** : 0.95 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 **Capacità:** -✅ Strumenti/Agente • ❌ Visione • ✅ Ragionamento • ✅ Sicurezza - -**Tag**: `Agente` `Ragionamento` `Sicurezza` `MoE` `Grande Contesto` `Efficiente` `Veloce` `Compatto` +✅ Strumenti/Agente • ✅ Visione • ❌ Ragionamento • ❌ Sicurezza -**Casi d'uso:** +**Tag :** `Visione` `Compatto` `Efficiente` `Multimodale` `OCR` -- Applicazioni incorporate e "edge" che richiedono bassa latenza. -- Compiti rapidi all'interno di flussi di lavoro agenziali più ampi (es. chiamate di funzione). -- Analisi di documenti su hardware di consumo. -- Deployment che richiedono un'impronta di memoria minima. +**Casi d'uso :** +- Analisi di immagini in tempo reale +- OCR e lettura di documenti leggeri +- Smistamento e classificazione visiva rapida -### medgemma:27b +--- -**Google • 27B parametri • Contesto: 128.000 token** +### qwen3-vl:30b +**Qwen Team • 30B parametri • Contesto : 250,000 token** -MedGemma è un modello open source tra i più performanti di Google per la comprensione di testi e immagini mediche, basato su Gemma 3. +Modello multimodale ad alte prestazioni per OCR, rilevamento di oggetti, analisi video e ragionamento spaziotemporale. **Specifiche tecniche:** - -- **Velocità**: 22 token al secondo -- **Consumo**: 6,56 kWh per milione di token -- **Licenza**: Google Gemma Terms of Use -- **Localizzazione**: FR 🇫🇷 +- **Velocità** : 39 token/secondo +- **Consumo** : 3.39 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 **Capacità:** ✅ Strumenti/Agente • ✅ Visione • ❌ Ragionamento • ❌ Sicurezza -**Tag**: `Medico` `Visione` `Specializzato` `Grande Contesto` +**Tags :** `Vision` `Agent` `Grand Contexte` `Multimodal` `Vidéo` `OCR` -**Casi d'uso:** +**Casi d'uso :** +- Analisi di video lunghi e sorveglianza intelligente +- Estrazione di dati strutturati (documents, tableaux, graphiques) +- Assistenti visivi con comprensione spaziale -- Interpretazione di immagini mediche (generazione di rapporti e VQA) -- Comprensione di testi medici e ragionamento clinico (supporto alla decisione) -- Interazione con pazienti (interviste e triage medico) -- Sintesi di cartelle cliniche e ricerca nella letteratura scientifica +--- -### ministral-3:3b +### qwen3-vl:32b +**Team Qwen • 32B parametri • Contesto : 250,000 token** -**Mistral AI • 3B parameters • Context: 250,000 tokens** +Variante ad alte prestazioni per i compiti di visione più impegnativi. Contesto 250K token. -Cutting-edge compact model from Mistral AI, designed for efficiency in local and edge deployments. +**Specifiche tecniche:** +- **Velocità** : 17 token/secondo +- **Consumo** : 7.75 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -**Technical specifications:** +**Capacità:** +✅ Strumenti/Agente • ✅ Visione • ❌ Ragionamento • ❌ Sicurezza -- **Speed**: 50 tokens/second -- **Consumption**: 1.22 kWh per million tokens -- **License**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Location**: FR 🇫🇷 +**Tag :** `Visione` `Agente` `Grande Contesto` `Multimodale` `Video` `OCR` -**Capabilities:** -✅ Tools/Agent • ❌ Vision • ❌ Reasoning • ❌ Security +**Casi d'uso :** +- Analisi scientifica e tecnica di immagini ad alta risoluzione +- Automazione di processi visivi complessi +- Comprensione dettagliata di scene dinamiche -**Tags:** `Compact` `Efficient` `Edge` +--- -**Use cases:** +### qwen3-vl:4b +**Qwen Team • 4B parametri • Contesto : 250,000 token** -- Local inference on mobile devices or edge devices -- Responsive personal assistants -- Fast routing and classification tasks +Modello vision compatto e veloce per l'analisi documentale e la comprensione video. -### ministral-3:8b +**Specifiche tecniche:** +- **Velocità** : 57 token/secondo +- **Consumo** : 2.34 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -**Mistral AI • 8B parametri • Contestuale: 250.000 token** +**Capacità:** +✅ Strumenti/Agente • ✅ Visione • ❌ Ragionamento • ❌ Sicurezza -Modello di dimensione intermedia della famiglia Ministral, che offre un equilibrio ottimale tra prestazioni e risorse. +**Tag :** `Visione` `Compatto` `Multimodale` `Efficiente` `Video` `OCR` -**Specifiche tecniche:** +**Casi d'uso :** +- Analisi documentale automatizzata (fatture, moduli) +- Comprensione di contenuti video +- Assistenti visivi interattivi -- **Velocità**: 55 token al secondo -- **Consumo**: 2,42 kWh per milione di token -- **Licenza**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Localizzazione**: FR 🇫🇷 +--- -**Capacità:** -✅ Strumenti/Agente • ❌ Visione • ✅ Ragionamento • ❌ Sicurezza +### qwen3-vl:8b +**Squadra Qwen • 8B parametri • Contesto: 250.000 token** -**Tag**: `Efficiente` `Edge` `Ragionamento` +Modello vision intermedio — buon compromesso tra prestazioni e impronta. Contesto 250K token. -**Casi d'uso:** +**Specifiche tecniche:** +- **Velocità** : 39 token/secondo +- **Consumo** : 3,38 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -- Assistenti conversazionali avanzati in locale -- Analisi di documenti ed estrazione di informazioni -- Compiti che richiedono un buon compromesso tra velocità e qualità +**Capacità:** +✅ Strumenti/Agente • ✅ Visione • ❌ Ragionamento • ❌ Sicurezza -### mistral-small3.2:24b +**Tag :** `Visione` `Multimodale` `Efficiente` `Video` `OCR` -**Mistral AI • 24B parameters • Context: 128,000 tokens** +**Casi d'uso :** +- Analisi documentale automatizzata +- Comprensione dei contenuti video +- Assistenti visivi interattivi -Minor update to Mistral Small 3.1, improving instruction following, function calling robustness, and reducing repetition errors. +--- -**Technical specifications:** +## Modelli di Embedding -- **Speed** : 27 tokens/second -- **Consumption** : 5.35 kWh per million tokens -- **License** : [Apache 2.0](./licences/apache_2.0.licence.md) -- **Location** : FR 🇫🇷 +Modelli per la ricerca semantica e il Retrieval-Augmented Generation (RAG). -**Capabilities:** -✅ Tools/Agent • ✅ Vision • ❌ Reasoning • ✅ Security +### bge-m3:567m +**BAAI • 567M parametri • Contesto : 8,192 token** -**Tags:** `Vision` `Agent` `Security` `Instruction Following` +Embedding multilingue di punta (100+ lingue). Supporta ricerche dense, sparse e multi-vettoriali. -**Use cases:** +**Specifiche tecniche:** +- **Velocità** : 171 token/secondo +- **Consumo** : 0.36 kWh/milione di token +- **Licenza** : [MIT](./licences/mit.licence.md) +- **Localizzazione** : FR 🇫🇷 -- Conversational agents with improved instruction following -- Robust integration with external tools via function calling -- Applications requiring high reliability to avoid repetitions -- Use cases identical to Mistral Small 3.1, with enhanced performance +**Capacità:** +❌ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza -### qwen3-2507-think:4b +**Tag :** `Embedding` `Multilingue` `Efficient` -**Qwen Team • 4B parameters • Context: 250,000 tokens** +**Casi d'uso :** +- Ricerca semantica multilingue +- Retrieval-Augmented Generation (RAG) +- Clustering e classificazione dei documenti -Qwen3-4B model optimized for reasoning, with improved performance on logical tasks, mathematics, science, and code, featuring an extended context of 250K tokens. +--- -**Technical Specifications:** +### embeddinggemma:300m +**Google • 300M parametri • Contesto : 2,048 token** -- **Speed**: 52 tokens/second -- **Energy Consumption**: 2.56 kWh per million tokens -- **License**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Location**: FR 🇫🇷 +Embedding Google multilingue (100+ lingue), ottimizzato per la ricerca e il recupero semantico. -**Capabilities:** -✅ Tools/Agent • ❌ Vision • ✅ Reasoning • ❌ Security +**Specifiche tecniche:** +- **Velocità** : 175 token/secondo +- **Consumo** : 0.35 kWh/milione di token +- **Licenza** : [Google Gemma Terms of Use](./licences/google_gemma_terms_of_use.licence.md) +- **Localizzazione** : FR 🇫🇷 -**Tags:** `Agent` `Reasoning` `Large Context` `Compact` `Fast` +**Capacità:** +❌ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza -**Use Cases:** +**Tag :** `Embedding` `Compatto` `Semantico` `Efficiente` `Multilingue` -- Highly complex reasoning tasks (logic, math, science, code). -- Conversational agents with very long conversation history (256k tokens). -- Deep reasoning on very large documents. -- Integration with external tools via function calling over extremely large contexts. +**Casi d'uso :** +- Ricerca e recupero di informazioni +- Classificazione e clustering di documenti +- Ricerca di similarità semantica -### qwen3-2507:4b -> -> ⚠️ **ATTENZIONE: Questo modello è obsoleto.** Obsoleto. +--- -**Qwen Team • 4B parametri • Contesto: 250.000 token** +### granite-embedding:278m +**IBM • 278M parametri • Contesto : 512 token** -Versione aggiornata del modello non-pensante Qwen3-4B, con miglioramenti significativi delle capacità generali, una copertura delle conoscenze estesa e un migliore allineamento con le preferenze degli utenti. +Embedding IBM ultra-compatto per una ricerca semantica a latenza minima. **Specifiche tecniche:** - -- **Velocità**: 30 token al secondo -- **Consumo**: 4,44 kWh per milione di token -- **Licenza**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Localizzazione**: FR 🇫🇷 +- **Velocità** : 196.3 token/secondo +- **Consumo** : 0.31 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 **Capacità:** -✅ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza +❌ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza -**Tag:** `Agente` `Grande Contesto` `Compatto` `Velocità` `Multilingue` +**Tag :** `Embedding` `Compatto` `Efficiente` -**Casi d'uso:** +**Casi d'usage :** +- Ricerca semantica ad alta frequenza +- Clustering di documenti -- Compiti generali che richiedono un seguito preciso delle istruzioni e un ragionamento logico. -- Applicazioni multilingue con una vasta copertura delle conoscenze. -- Generazione di testo di alta qualità per compiti aperti e soggettivi. -- Analisi di documenti estremamente voluminosi grazie al contesto di 256k token. +--- ### qwen3-embedding:0.6b +**Team Qwen • 0.6B parametri • Contesto : 32,768 token** -**Qwen Team • 0.6B parameters • Context: 32,768 tokens** +Embedding ultra-leggero e veloce per la ricerca semantica a bassa latenza. -Ultra-light Qwen3 embedding model, optimized for speed and efficiency on resource-constrained infrastructure. +**Specifiche tecniche:** +- **Velocità** : N/A +- **Consumo** : 0.57 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -**Technical specifications:** +**Capacità:** +❌ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza -- **Speed**: N/A -- **Energy consumption**: 0.57 kWh per million tokens -- **License**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Localization**: FR 🇫🇷 +**Tag :** `Embedding` `Compatto` `Efficiente` -**Capabilities:** -❌ Tools/Agent • ❌ Vision • ❌ Reasoning • ❌ Security +**Casi d'uso :** +- Ricerca semantica rapida +- Classificazione del testo in tempo reale -**Tags:** `Embedding` `Compact` `Efficient` +--- -**Use cases:** +### qwen3-embedding:4b +**Team Qwen • 4B parametri • Contesto : 40,000 token** -- Fast semantic search -- Real-time text classification +Embedding ad alte prestazioni con comprensione semantica profonda e contesto esteso (40K token). -### qwen3-embedding:4b +**Specifiche tecniche:** +- **Velocità** : N/A +- **Consumo** : 0.57 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -**Qwen Team • 4 miliardi di parametri • Contesto: 40.000 token** +**Capacità:** +❌ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza -Modello di embedding Qwen3-4B ad alte prestazioni, che offre una comprensione semantica approfondita e una finestra di contesto estesa. +**Tag :** `Embedding` `Grande Contesto` `Efficiente` -**Specifiche tecniche:** +**Casi d'uso :** +- Ricerca semantica su documenti lunghi +- RAG con contesto esteso +- Analisi semantica di precisione + +--- + +### qwen3-embedding:8b +**Qwen Team • 8B parametri • Contesto : 40,000 token** -- **Velocità**: N/A -- **Consumo energetico**: 0,57 kWh per milione di token -- **Licenza**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Localizzazione**: FR 🇫🇷 +Embedding ad alta capacità con la migliore comprensione semantica della famiglia Qwen3. Contesto esteso (40K tokens). + +**Specifiche tecniche:** +- **Velocità** : N/A +- **Consumo** : 0.57 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 **Capacità:** ❌ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza -**Tag**: `Embedding` `Gran contesto` `Efficiente` +**Tag :** `Embedding` `Lungo Contesto` `Alte Prestazioni` -**Casi d'uso:** +**Casi d'uso :** +- Ricerca semantica ad alta precisione +- RAG avanzato con contesto esteso +- Analisi semantica di documenti complessi -- Ricerca semantica su documenti lunghi -- RAG con finestre di contesto estese -- Analisi semantica ad alta precisione +--- -### qwen3-vl:2b +## Modelli di Reranking -**Qwen Team • 2 milioni di parametri • Contesto: 250.000 token** +Modelli per il riordinamento dei risultati nei pipeline RAG. -Modello multimodale ultra-compattato Qwen3-VL, che offre capacità avanzate di visione su dispositivi edge. +### bge-reranker-large +**BAAI • 335M parametri • Contesto : 512 token** -**Specifiche tecniche:** +Modello di reranking ad alte prestazioni della famiglia BGE, multilingue. -- **Velocità**: 64 token al secondo -- **Consumo**: 0,95 kWh per milione di token -- **Licenza**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Localizzazione**: FR 🇫🇷 +**Specifiche tecniche:** +- **Velocità** : N/A +- **Consumo** : N/A +- **Licenza** : [MIT](./licences/mit.licence.md) +- **Localizzazione** : FR 🇫🇷 **Capacità:** -✅ Strumenti/Agente • ✅ Visione • ❌ Ragionamento • ❌ Sicurezza - -**Tag**: `Visione` `Compacto` `Efficiente` `Multimodale` `Edge` `OCR` +❌ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza -**Casi d'uso:** +**Tag :** `Reranker` `Alte Prestazioni` -- Analisi di immagini in tempo reale su dispositivi mobili -- OCR e lettura di documenti leggeri -- Classificazione e ordinamento visivo rapido +**Casi d'uso :** +- Riordinamento multilingue per RAG -### qwen3-vl:4b +--- -**Qwen Team • 4 miliardi di parametri • Contesto: 250.000 token** +### nvidia/llama-nemotron-rerank-vl-1b-v2 +**NVIDIA • 1B parametri • Contesto : 4,096 token** -Modello multimodale Qwen3-VL bilanciato, che offre prestazioni solide nella visione con un'impronta ridotta. +Modello di reranking compatibile con l'API Cohere (/v1/rerank e /v2/rerank). Ordina i documenti in base alla pertinenza rispetto a una query. **Specifiche tecniche:** - -- **Velocità**: 57 token al secondo -- **Consumo**: 2,34 kWh per milione di token -- **Licenza**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Localizzazione**: FR 🇫🇷 +- **Velocità** : N/A +- **Consumo** : N/A +- **Licenza** : [NVIDIA Open Model License](./licences/nvidia_open_model_license.licence.md) +- **Localizzazione** : FR 🇫🇷 **Capacità:** -✅ Strumenti/Agente • ✅ Visione • ❌ Ragionamento • ❌ Sicurezza - -**Tag**: `Visione` `Compatto` `Multimodale` `Efficiente` `Video` `OCR` +❌ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza -**Casi d'uso:** +**Tag :** `Rerank` `RAG` `Compact` -- Analisi automatizzata di documenti (fatture, moduli) -- Comprensione del contenuto video -- Assistenti visivi interattivi +**Casi d'uso :** +- Riordinamento dei risultati della ricerca semantica +- Affinamento della pertinenza nelle pipeline RAG -### qwen3-vl:8b +--- -**Qwen Team • 8B parametri • Contestualizzazione: 250.000 token** +### qwen3-reranker:0.6b +**Squadra Qwen • 0.6B parametri • Contesto : 4.096 token** -Modello multimodale Qwen3-VL (8B), che offre prestazioni avanzate di visione con un impatto ragionevole. +Modello di reranking compatto ed efficiente per il riordinamento rapido. **Specifiche tecniche:** - -- **Velocità**: 44 token al secondo -- **Consumo**: 3,03 kWh per milione di token -- **Licenza**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Localizzazione**: FR 🇫🇷 +- **Velocità** : N/A +- **Consumo** : N/A +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 **Capacità:** -✅ Strumenti/Agente • ✅ Visione • ❌ Ragionamento • ❌ Sicurezza +❌ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza -**Tag**: `Visione` `Compatto` `Multimodale` `Efficiente` `Video` `OCR` +**Tags :** `Reranker` `Compatto` `Efficiente` -**Casi d'uso:** +**Casi d'uso :** +- Riordinamento rapido per RAG -- Analisi automatizzata di documenti -- Comprensione del contenuto video -- Assistenti visivi interattivi +--- -### qwen3:0.6b +### qwen3-reranker:4b +**Qwen Team • 4B parametri • Contesto : 4,096 token** + +Modello di reranking ad alte prestazioni con una grande capacità di comprensione contestuale. -**Qwen Team • 0.6B parameters • Context: 40,000 tokens** +**Specifiche tecniche:** +- **Velocità** : N/A +- **Consumo** : N/A +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -Ultra-light Qwen3 model with 0.6 billion parameters, offering exceptional inference speed for simple and fast tasks. +**Capacità:** +❌ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza -**Technical specifications:** +**Tag :** `Reranker` `Performance` -- **Speed**: 46 tokens/second -- **Consumption**: 1.33 kWh per million tokens -- **License**: [Apache 2.0](./licences/apache_2.0.licence.md) -- **Location**: FR 🇫🇷 +**Casi d'uso :** +- Riordinamento di alta qualità per RAG -**Capabilities:** -✅ Tools/Agent • ❌ Vision • ❌ Reasoning • ❌ Security +--- -**Tags:** `Compact` `Fast` `Efficient` `Multilingual` +## Modelli di Sicurezza -**Use cases:** +Modelli per il filtraggio dei contenuti, la conformità e i guardrail. -- Simple text processing tasks -- Fast classification and sorting -- Lightweight assistants with low latency +### granite3-guardian:2b +**IBM • 2B parametri • Contesto : 8,192 token** -### rnj-1:8b +Versione compatta del modello di sicurezza Granite Guardian per il filtraggio a bassa latenza. -**Essential AI • 8B parameters • Context: 32,000 tokens** +**Specifiche tecniche:** +- **Velocità** : 60 token/secondo +- **Consumo** : 0.65 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -8B "Open Weight" model specialized in code, mathematics, and sciences (STEM). +**Capacità:** +❌ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ✅ Sicurezza -**Technical specifications:** +**Tag :** `Sicurezza` `Guardrails` `Compatto` `Efficiente` -- **Speed** : 31 tokens/second -- **Consumption** : 1.97 kWh per million tokens -- **License** : Open Weights -- **Location** : FR 🇫🇷 +**Casi d'uso :** +- Guardrails a bassa latenza nei workflow agentici +- Filtraggio di sicurezza in tempo reale -**Capabilities:** -❌ Tools/Agent • ❌ Vision • ✅ Reasoning • ❌ Security +--- -**Tags:** `Code` `Maths` `STEM` `Reasoning` `Efficient` +### granite3-guardian:8b +**IBM • 8B parametri • Contesto : 8,192 token** -**Use cases:** +Modello di sicurezza specializzato nel rilevamento di contenuti problematici, jailbreak e conformità normativa. -- Advanced programming assistant and code generation -- Solving complex mathematical problems -- Scientific and technical tasks (STEM) +**Specifiche tecniche:** +- **Velocità** : 45 token/secondo +- **Consumo** : 3,09 kWh/milione di token +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 -### translategemma:12b +**Capacità:** +❌ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ✅ Sicurezza -**Google • 12B parameters • Context: 128,000 tokens** +**Tag :** `Sicurezza` `Guardrails` `Conformità` `Filtraggio` -State-of-the-art open translation model based on Gemma 3, supporting 55 languages. +**Casi d'uso :** +- Rilevamento di contenuti problematici e jailbreak +- Filtraggio di sicurezza pre/post-generazione +- Conformità normativa (RGPD, HDS) -**Technical specifications:** +--- -- **Speed** : 30 tokens/second -- **Consumption** : 4.44 kWh per million tokens -- **License** : Gemma Terms of Use -- **Location** : FR 🇫🇷 +## Modelli di Traduzione -**Capabilities:** -❌ Tools/Agent • ❌ Vision • ❌ Reasoning • ❌ Security +Modelli specializzati nella traduzione multilingue ad alta fedeltà. -**Tags:** `Translation` `Multilingual` `Specialized` +### translategemma:12b +**Google • 12B parametri • Contesto : 128,000 token** -**Use cases:** +Traduzione ad alta fedeltà per 55 lingue con un contesto di 128K token. -- Translation of long documents -- Cross-language communication -- Content localization +**Specifiche tecniche:** +- **Velocità** : 27 token/secondo +- **Consumo** : 4.87 kWh/milione di token +- **Licenza** : [Gemma Terms of Use](./licences/gemma_terms_of_use.licence.md) +- **Localizzazione** : FR 🇫🇷 -### translategemma:27b +**Capacità:** +❌ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza -**Google • 27B parametri • Contesto: 120.000 token** +**Tag :** `Traduzione` `Multilingue` `Specializzato` -Modello di traduzione ad alte prestazioni basato su Gemma 3 27B. +**Casi d'uso :** +- Traduzione di documenti lunghi +- Comunicazione interlingue +- Localizzazione di contenuti -**Specifiche tecniche:** +--- + +### translategemma:27b +**Google • 27B parametri • Contesto : 120,000 token** -- **Velocità**: 44 token al secondo -- **Consumo**: 6,35 kWh per milione di token -- **Licenza**: Gemma Terms of Use -- **Localizzazione**: FR 🇫🇷 +Traduzione ad alte prestazioni per 55 lingue. Qualità superiore per contenuti complessi e tecnici. + +**Specifiche tecniche:** +- **Velocità** : 17 token/secondo +- **Consumo** : 7.84 kWh/milione di token +- **Licenza** : [Termini di utilizzo Gemma](./licences/gemma_terms_of_use.licence.md) +- **Localizzazione** : FR 🇫🇷 **Capacità:** ❌ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza -**Tag**: `Traduzione` `Multilingue` `Specializzato` `Alte prestazioni` - -**Casi d'uso:** +**Tag :** `Traduzione` `Multilingue` `Specializzato` `Alte Prestazioni` +**Casi d'uso :** - Traduzione ad alta precisione - Traduzione di documenti tecnici -- Sottigliezze letterarie e culturali +- Sfumature letterarie e culturali + +--- ### translategemma:4b +**Google • 4B parametri • Contesto : 128.000 token** + +Traduzione rapida ed efficiente per 55 lingue. Ideale per la localizzazione in tempo reale. + +**Specifiche tecniche:** +- **Velocità** : 31 token/secondo +- **Consumo** : 1,25 kWh/milione di token +- **Licenza** : [Gemma Terms of Use](./licences/gemma_terms_of_use.licence.md) +- **Localizzazione** : FR 🇫🇷 + +**Capacità:** +❌ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza + +**Tag :** `Traduzione` `Multilingue` `Specializzato` `Efficiente` + +**Casi d'uso :** +- Traduzione rapida di testi +- Localizzazione in tempo reale +- Traduzione a budget limitato -**Google • 4B parametri • Contesto: 128.000 token** +--- + +## Modelli Audio & Immagine + +Modelli per la trascrizione audio e la generazione di immagini. + +### voxtral +**Mistral AI • 4B parametri • Contesto : 32,768 token** -Versione compatta del modello di traduzione TranslateGemma, ottimizzata per la velocità. +Trascrizione audio in tempo reale tramite WebSocket. Riconoscimento vocale in streaming con bassa latenza. **Specifiche tecniche:** +- **Velocità** : N/A +- **Consumo** : N/A +- **Licenza** : [Apache 2.0](./licences/apache_2.0.licence.md) +- **Localizzazione** : FR 🇫🇷 + +**Capacità:** +❌ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza + +**Tag :** `ASR` `Audio` `Realtime` `WebSocket` + +**Casi d'uso :** +- Trascrizione audio in tempo reale (streaming) +- Assistenti vocali +- Sottotitolazione in diretta + +--- + +### z-image:16b +**Community • 16B parametri • Contesto : 0 token** -- **Velocità**: 38 token al secondo -- **Consumo**: 1,27 kWh per milione di token -- **Licenza**: Gemma Terms of Use -- **Localizzazione**: FR 🇫🇷 +Generazione di immagini a partire da prompt testuali, compatibile con l'API OpenAI /v1/images/generations. + +**Specifiche tecniche:** +- **Velocità** : N/A +- **Consumo** : N/A +- **Licenza** : [Open Weights](./licences/open_weights.licence.md) +- **Localizzazione** : FR 🇫🇷 **Capacità:** ❌ Strumenti/Agente • ❌ Visione • ❌ Ragionamento • ❌ Sicurezza -**Tag**: `Traduzione` `Multilingue` `Specializzato` `Efficiente` +**Tag :** `Generazione Immagini` `Creativo` `Multimodale` -**Casi d'uso:** +**Casi d'uso :** +- Generazione di immagini a partire da descrizioni testuali +- Creazione di contenuti visivi +- Prototipazione visiva rapida -- Traduzione rapida di testi -- Traduzione su dispositivi con risorse limitate -- Localizzazione in tempo reale +--- -## Use Case Consigliati +## Casi d'uso consigliati -### Multilingual Dialogue +### Dialogo multilingue -Chatbots and assistants capable of communicating in multiple languages with automatic language detection, context preservation throughout the conversation, and understanding of linguistic nuances. +Chatbot e assistenti in grado di comunicare in più lingue con rilevamento automatico e mantenimento del contesto -**Recommended models:** +**Modelli consigliati:** -- Llama 3.3 -- Mistral Small 3.2 -- Qwen 3 -- Openai OSS -- Granite 4 +- nemotron-3-super:120b +- qwen3.6:27b +- nemotron3-nano:30b +- gpt-oss:120b ### Analisi di documenti lunghi -Elaborazione di documenti estesi (>100 pagine) con mantenimento del contesto per l'intero testo, estrazione di informazioni chiave, generazione di riassunti pertinenti e risposta a domande specifiche sul contenuto. +Elaborazione di documenti di grandi dimensioni (>100 pagine) con estrazione di informazioni chiave, riassunti e risposte alle domande **Modelli consigliati:** -- Gemma 3 -- Qwen next -- Qwen 3 -- Granite 4 +- nemotron-3-super:120b +- qwen3.6:27b +- qwen3-2507:235b ### Programmazione e sviluppo -Generazione e ottimizzazione di codice in diversi linguaggi, debug, refactoring, sviluppo di funzionalità complete, comprensione di implementazioni algoritmiche complesse e creazione di test unitari +Generazione, ottimizzazione e debug del codice in più linguaggi, refactoring e creazione di test **Modelli consigliati:** -- DeepCoder -- Qwen3 coder -- Granite 4 -- Devstral +- qwen3.6:35b +- qwen-coder-next:80b +- devstral-small-2:24b +- nemotron-3-super:120b -### Visual Analysis +### Analisi visiva -Direct processing of images and visual documents without prior OCR preprocessing, interpretation of technical diagrams, charts, tables, drawings, and photos, with generation of detailed textual explanations of the visual content. +Elaborazione di immagini e documenti visivi, OCR, interpretazione di grafici e tabelle -**Recommended models:** +**Modelli consigliati:** -- deepseek-OCR -- Mistral Small 3.2 -- Gemma 3 -- Qwen 3 VL +- qwen3-vl:235b +- gemma4:31b +- deepseek-ocr +- qwen3-vl:30b ### Sicurezza e conformità -Applicazioni che richiedono capacità specifiche in materia di sicurezza; filtraggio del contenuto sensibile, tracciabilità dei ragionamenti, verifica del rispetto del RGPD/HDS, riduzione dei rischi, analisi delle vulnerabilità e conformità alle normative settoriali +Filtraggio di contenuti sensibili, rilevamento di jailbreak, conformità RGPD/HDS **Modelli consigliati:** -- Granite Guardian -- Granite 4 -- Devstral -- Mistral Small 3.2 -- Magistral small +- granite3-guardian:8b +- granite3-guardian:2b +- mistral-small4:119b + +### Distribuzioni leggere -### Lightweight and Embedded Deployments +Applicazioni che richiedono un'impronta minima, bassa latenza e basso consumo + +**Modelli consigliati:** -Applications requiring minimal resource footprint, deployment on devices with limited capacity, real-time inference on standard CPUs, and integration into embedded systems or IoT devices +- qwen3.5:0.8b +- qwen3-vl:2b +- ministral-3:3b -**Recommended models:** +### RAG (Retrieval-Augmented Generation) + +Pipeline completi per la ricerca semantica, la riclassificazione e la generazione potenziata tramite recupero + +**Modelli consigliati:** -- Gemma 3n -- Granite 4 tiny -- Qwen 3 VL (2B) +- bge-m3:567m +- nvidia/llama-nemotron-rerank-vl-1b-v2 +- qwen3.6:27b \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/llmaas/quickstart.md b/i18n/it/docusaurus-plugin-content-docs/current/llmaas/quickstart.md index 0aa8e053..24eebdc9 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/llmaas/quickstart.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/llmaas/quickstart.md @@ -3,23 +3,23 @@ title: Guida di Avvio sidebar_position: 3 --- -# Guida di Avvio Rapido +# Guida Rapida -Questa guida ti permette di effettuare la tua prima richiesta all'API LLMaaS in meno di 5 minuti. +Questa guida ti consente di effettuare la tua prima richiesta all'API LLMaaS in meno di 5 minuti. ## Prerequisiti - Accesso alla Console Cloud Temple -- Account con le autorizzazioni LLMaaS attivate +- Account con permessi LLMaaS abilitati ## Passo 1: Generare una chiave API -1. Accedi alla Console Cloud Temple -2. Vai alle impostazioni del tuo account -3. Genera una nuova chiave API LLMaaS -4. Copia e salva la chiave (non verrà mostrata nuovamente) +1. Accedi alla Console Cloud Temple +2. Vai alle impostazioni del tuo account +3. Genera una nuova chiave API LLMaaS +4. Copia e salva la chiave (verrà visualizzata solo una volta) -## Fase 2: Test della connessione +## Fase 2: Verificare la connessione Verifica che la tua chiave funzioni elencando i modelli disponibili : @@ -30,20 +30,20 @@ curl -X GET "https://api.ai.cloud-temple.com/v1/models" \ Dovresti ricevere un elenco JSON dei modelli disponibili. -## Fase 3: Prima richiesta +## Passo 3: Prima richiesta -Eseguite la vostra prima generazione di testo con un modello rapido: +Esegui la tua prima generazione di testo con un modello veloce: ```bash curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer VOTRE_CLE_API" \ -d '{ - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "messages": [ { "role": "user", - "content": "Scrivi un haiku sull'arte." + "content": "Écris un haiku sur la technologie." } ], "max_tokens": 100, @@ -51,9 +51,9 @@ curl -X POST "https://api.ai.cloud-temple.com/v1/chat/completions" \ }' ``` -## Passo 4: Test con Python +## Passo 4: Testare con Python -Installa la libreria requests e testa con codice Python : +Installare la libreria requests e testare con del codice Python: ```bash pip install requests @@ -67,7 +67,7 @@ import json API_KEY = "VOTRE_CLE_API" BASE_URL = "https://api.ai.cloud-temple.com/v1" -# Headers +# Intestazioni headers = { "Content-Type": "application/json", "Authorization": f"Bearer {API_KEY}" @@ -75,7 +75,7 @@ headers = { # Richiesta payload = { - "model": "granite3.3:8b", + "model": "gpt-oss:120b", "messages": [ { "role": "user", @@ -96,140 +96,126 @@ if response.status_code == 200: result = response.json() print(result["choices"][0]["message"]["content"]) else: - print(f"Errore: {response.status_code}") + print(f"Erreur: {response.status_code}") print(response.text) ``` ## Scelta del modello -Per il vostro primo test, utilizzate uno di questi modelli consigliati: +Per il tuo primo test, utilizza uno di questi modelli consigliati : -| Modello | Utilizzo | Velocità | Valutazione | -| --------------- | ----------------------------- | ------------ | ---------------------------- | -| `granite3.3:8b` | Utilizzo generale, bilanciato | Veloce | Consigliato per iniziare | -| `qwen3:14b` | Compiti complessi | Medio | Modalità "thinking" visibile | -| `gemma3:4b` | Test rapidi, prototipazione | Molto veloce | Risposte dettagliate | +| Modello | Utilizzo | Velocità | Nota | +|--------|--------|---------|------| +| `gpt-oss:120b` | Utilizzo generale, bilanciato | Media | **LTS** — consigliato per la produzione | +| `qwen3-2507-think:4b` | Ragionamento complesso | Rapida | **LTS** — compatto con ragionamento profondo | +| `qwen3.5:9b` | Chat e analisi | Rapida | Buon compromesso dimensione/qualità | -Consulta il [catalogo completo dei modelli](./models) per ulteriori opzioni. +Consulta il [catalogo completo dei modelli](./models) per altre opzioni. Preferisci i modelli contrassegnati con **LTS** per le tue applicazioni in produzione. -:::tip[Suggerimento per i modelli Qwen] -Alcuni modelli della famiglia **Qwen** (come `qwen3:14b` o `qwen3:30b-a3b`) dispongono di una modalità di ragionamento avanzata. È possibile attivarla forzatamente aggiungendo `/think` all'inizio del vostro prompt, o disattivarla per ottenere una risposta più diretta e veloce con `/nothink`. +:::tip Suggerimento per i modelli Qwen con ragionamento +Alcuni modelli della famiglia **Qwen** (come `qwen3-2507-think:4b`, `qwen3.5:9b` o `qwen3.6:27b`) dispongono di una modalità di ragionamento avanzata. Puoi forzarne l'attivazione aggiungendo `/think` all'inizio del tuo prompt, o disattivarlo per una risposta più diretta e rapida con `/nothink`. ::: ## Parametri consigliati -Per iniziare, utilizza questi parametri : +Per iniziare, utilizza questi parametri: ```json { - "temperature": 0.7, // Creatività moderata - "max_tokens": 200, // Risposte concise - "top_p": 1.0, // Diversità standard - "stream": false // Risposta completa in una volta + "temperature": 0.7, // Créativité modérée + "max_tokens": 200, // Réponses concises + "top_p": 1.0, // Diversité standard + "stream": false // Réponse complète d'un coup } ``` ## Gestione degli errori comuni ### Errore 401 - Non autorizzato - ```json {"error": {"message": "Invalid API key", "type": "invalid_request_error"}} ``` - **Soluzione** : Verifica la tua chiave API nella Console Cloud Temple. ### Errore 400 - Modello non trovato - ```json {"error": {"message": "Model not found", "type": "invalid_request_error"}} ``` +**Soluzione** : Utilizzare `/v1/models` per elencare i modelli disponibili. -**Soluzione** : Utilizza `/v1/models` per elencare i modelli disponibili. - -### Errore 429 - Limite di velocità - +### Errore 429 - Limite di richieste ```json {"error": {"message": "Rate limit exceeded", "type": "rate_limit_error"}} ``` +**Soluzione** : Attendere alcuni secondi e riprovare. -**Soluzione** : Aspetta alcuni secondi e riprova. - -## Monitoraggio dell'uso +## Monitoraggio dell'utilizzo Nella Console Cloud Temple, puoi: - - Visualizzare le tue richieste in tempo reale -- Verificare il tuo consumo di token -- Configurare gli avvisi di costo +- Consultare il consumo di token +- Configurare avvisi di costo - Analizzare le prestazioni per modello -## Vai oltre: Esempi di Tool Calling e Vision +## Approfondimenti: Esempi di Tool Calling e Visione -Questa sezione fornisce esempi di script Python semplici e autonomi per illustrare funzionalità specifiche dell'API LLMaaS. Ogni esempio è stato progettato per essere eseguito direttamente, con istruzioni chiare per la configurazione e l'uso. +Questa sezione fornisce esempi di script Python semplici e autonomi per illustrare funzionalità specifiche dell'API LLMaaS. Ogni esempio è progettato per essere eseguito direttamente, con istruzioni chiare per la configurazione e l'utilizzo. --- -## 💡 Esempi di Codice Autonomo +## 💡 Esempi di Codice Autonomi -Questa sezione fornisce esempi di script Python semplici e autonomi per illustrare funzionalità specifiche dell'API LLMaaS. Ogni esempio è stato progettato per essere eseguito direttamente, con istruzioni chiare per la configurazione e l'utilizzo. +Questa sezione fornisce esempi di script Python semplici e autonomi per illustrare funzionalità specifiche dell'API LLMaaS. Ogni esempio è progettato per essere eseguito direttamente, con istruzioni chiare per la configurazione e l'utilizzo. -### 1. Esempio semplice di Tool Calling +### 1. Esempio Semplice di Tool Calling -Il "Tool Calling" (o chiamata di funzione) permette a un modello linguistico di richiedere l'esecuzione di una funzione definita nel tuo codice. È una funzionalità potente per collegare i modelli linguistici (LLMs) a strumenti esterni (API, database, ecc.). +Il "Tool Calling" (o chiamata di funzione) consente a un modello linguistico di richiedere l'esecuzione di una funzione definita nel tuo codice. È una funzionalità potente per collegare i LLM a strumenti esterni (API, database, ecc.). Il flusso è il seguente: - -1. L'utente pone una domanda che richiede un strumento (es: "che tempo fa ?"). -2. Invii la domanda e l'elenco degli strumenti disponibili all'API. -3. Il modello, invece di rispondere direttamente, restituisce una richiesta `tool_calls` che richiede l'esecuzione di una funzione specifica con alcuni argomenti. -4. Il tuo codice esegue la funzione richiesta. -5. Restituisci il risultato della funzione al modello. -6. Il modello utilizza questo risultato per formulare una risposta finale all'utente. +1. L'utente pone una domanda che richiede uno strumento (es: "che tempo fa?"). +2. Invii la domanda e l'elenco degli strumenti disponibili all'API. +3. Il modello, invece di rispondere direttamente, restituisce una richiesta `tool_calls` per eseguire una funzione specifica con determinati argomenti. +4. Il tuo codice esegue la funzione richiesta. +5. Invii il risultato della funzione al modello. +6. Il modello utilizza questo risultato per formulare una risposta finale all'utente. **Struttura dei file** -Per questo esempio, crea una directory `simple_tool_calling` con i seguenti file: +Per questo esempio, crea una directory `simple_tool_calling` con i seguenti file : -- `test_tool_calling.py`: Lo script principale. -- `requirements.txt`: Le dipendenze Python. -- `.env`: Un modello per il tuo file di configurazione. +- `test_tool_calling.py`: Lo script principale. +- `requirements.txt`: Le dipendenze Python. +- `.env`: Un modello per il tuo file di configurazione. **`requirements.txt`** - ```txt httpx python-dotenv ``` **`.env`** - ```env - -# URL di base dell'API LLMaaS +# URL de base de l'API LLMaaS API_URL="https://api.ai.cloud-temple.com/v1" -# La tua chiave API LLMaaS -API_KEY="la_tua_chiave_api_ici" - -# Facoltativo: Modello predefinito da utilizzare per il test - -# Assicurati che questo modello sia compatibile con il "tool calling" -DEFAULT_MODEL="qwen3:30b-a3b" +# Votre clé API LLMaaS +API_KEY="votre_cle_api_ici" +# Optionnel: Modèle par défaut à utiliser pour le test +# Assurez-vous que ce modèle est compatible avec le "tool calling" +DEFAULT_MODEL="gpt-oss:120b" ``` -**Codice sorgente (`test_tool_calling.py`)** +**Codice Sorgente (`test_tool_calling.py`)** ```python - # -*- coding: utf-8 -*- """ -Esempio semplice di Tool Calling con l'API LLMaaS. +Exemple simple de Tool Calling avec l'API LLMaaS. -Questo script mostra come definire un strumento semplice (una calcolatrice), -inviarlo a un modello compatibile, e interpretare la risposta del modello -per eseguire lo strumento e restituire il risultato. +Ce script montre comment définir un outil simple (une calculatrice), +l'envoyer à un modèle compatible, et interpréter la réponse du modèle +pour exécuter l'outil et renvoyer le résultat. """ import os import json @@ -237,48 +223,46 @@ import httpx from dotenv import load_dotenv # --- Configurazione --- - -# Caricare le variabili d'ambiente da un file .env +# Carica le variabili d'ambiente da un file .env load_dotenv() API_URL = os.getenv("API_URL", "https://api.ai.cloud-temple.com/v1") API_KEY = os.getenv("API_KEY") - # Utilizzare un modello noto per gestire correttamente il tool calling -MODEL = os.getenv("DEFAULT_MODEL", "qwen3:30b-a3b") +MODEL = os.getenv("DEFAULT_MODEL", "gpt-oss:120b") # --- Definizione dello strumento --- def calculator(expression: str) -> str: """ - Valuta un'espressione matematica semplice. - Esempio: "2 + 2 * 10" + Évalue une expression mathématique simple. + Exemple: "2 + 2 * 10" """ try: - # Sicurezza: non utilizzare eval() direttamente in produzione senza una valida rigorosa. - # Per questo esempio, limitiamo i caratteri autorizzati. + # Sicurezza: non utilizzare eval() direttamente in produzione senza una validazione rigorosa. + # Per questo esempio, limitiamo i caratteri consentiti. allowed_chars = "0123456789+-*/(). " if not all(char in allowed_chars for char in expression): - return "Errore: L'espressione contiene caratteri non autorizzati." - # eval() viene utilizzato qui per semplicità dell'esempio. + return "Erreur: L'expression contient des caractères non autorisés." + # eval() viene utilizzato qui per la semplicità dell'esempio. result = eval(expression) return str(result) except Exception as e: - return f"Errore di calcolo: {str(e)}" + return f"Erreur de calcul: {str(e)}" -# Descrizione degli strumenti nel formato atteso dall'API +# Descrizione dello strumento nel formato atteso dall'API TOOLS_AVAILABLE = [ { "type": "function", "function": { "name": "calculator", - "description": "Valuta un'espressione matematica. Ad esempio, '2+2*10'.", + "description": "Évalue une expression mathématique. Par exemple, '2+2*10'.", "parameters": { "type": "object", "properties": { "expression": { "type": "string", - "description": "L'espressione matematica da valutare." + "description": "L'expression mathématique à évaluer." } }, "required": ["expression"], @@ -296,30 +280,30 @@ TOOL_FUNCTIONS_MAP = { def run_chat_with_tool_calling(): """ - Funzione principale che esegue lo scenario di test. + Fonction principale qui exécute le scénario de test. """ if not API_KEY: - print("❌ Errore: La variabile d'ambiente API_KEY non è definita.") - print("Si prega di creare un file .env o di esportarlo nella propria sessione.") + print("❌ Erreur: La variable d'environnement API_KEY n'est pas définie.") + print("Veuillez créer un fichier .env ou l'exporter dans votre session.") return - print(f"🤖 Modello utilizzato : {MODEL}") + print(f"🤖 Modèle utilisé : {MODEL}") print("-" * 30) - # 1. Primo chiamata all'API con la domanda dell'utente + # 1. Prima chiamata all'API con la domanda dell'utente # --------------------------------------------------------- - print("➡️ Passo 1: Invio della richiesta iniziale al LLM...") + print("➡️ Étape 1: Envoi de la requête initiale au LLM...") # La cronologia dei messaggi inizia con la domanda dell'utente messages = [ - {"role": "user", "content": "Ciao, puoi calcolare 15 + (3 * 5) ?"} + {"role": "user", "content": "Bonjour, peux-tu calculer 15 + (3 * 5) ?"} ] payload = { "model": MODEL, "messages": messages, "tools": TOOLS_AVAILABLE, - "tool_choice": "auto", # Il modello decide se deve utilizzare uno strumento + "tool_choice": "auto", # Le modèle décide s'il doit utiliser un outil } try: @@ -334,24 +318,24 @@ def run_chat_with_tool_calling(): response_data = response.json() except httpx.HTTPStatusError as e: - print(f"❌ Errore API (HTTP Status) nel passo 1: {e}") - print(f"Risposta dell'API : {e.response.text}") + print(f"❌ Erreur API (HTTP Status) lors de l'étape 1: {e}") + print(f"Réponse de l'API : {e.response.text}") return except httpx.RequestError as e: - print(f"❌ Errore API (Request) nel passo 1: {e}") + print(f"❌ Erreur API (Request) lors de l'étape 1: {e}") return - # Il messaggio dell'assistente contiene la richiesta di chiamata dello strumento + # Il messaggio dell'assistant contiene la richiesta di chiamata dello strumento assistant_message = response_data["choices"][0]["message"] messages.append(assistant_message) # 2. Verifica ed esecuzione della chiamata dello strumento # ------------------------------------------------ - print("\n✅ Il LLM ha richiesto di utilizzare uno strumento.") + print("\n✅ Le LLM a demandé d'utiliser un outil.") if "tool_calls" not in assistant_message: - print("🤔 Il modello non ha richiesto di utilizzare uno strumento. Risposta diretta :") - print(assistant_message.get("content", "Nessun contenuto.")) + print("🤔 Le modèle n'a pas demandé d'utiliser un outil. Réponse directe :") + print(assistant_message.get("content", "Pas de contenu.")) return tool_call = assistant_message["tool_calls"][0] @@ -359,28 +343,28 @@ def run_chat_with_tool_calling(): function_args_str = tool_call["function"]["arguments"] tool_call_id = tool_call["id"] - print(f" - Strumento da chiamare : {function_name}") - print(f" - Argomenti : {function_args_str}") + print(f" - Outil à appeler : {function_name}") + print(f" - Arguments : {function_args_str}") if function_name in TOOL_FUNCTIONS_MAP: function_to_call = TOOL_FUNCTIONS_MAP[function_name] try: - # Gli argomenti sono una stringa JSON, devono essere analizzati + # Gli argomenti sono una stringa JSON, è necessario analizzarli function_args = json.loads(function_args_str) tool_result = function_to_call(**function_args) - print(f" - Risultato dello strumento : {tool_result}") + print(f" - Résultat de l'outil : {tool_result}") except Exception as e: - print(f"❌ Errore durante l'esecuzione dello strumento: {e}") - tool_result = f"Errore: {e}" + print(f"❌ Erreur lors de l'exécution de l'outil: {e}") + tool_result = f"Erreur: {e}" else: - print(f"❌ Strumento sconosciuto : {function_name}") - tool_result = f"Errore: Strumento '{function_name}' non trovato." + print(f"❌ Outil inconnu : {function_name}") + tool_result = f"Erreur: Outil '{function_name}' non trouvé." # 3. Seconda chiamata all'API con il risultato dello strumento # ---------------------------------------------------- - print("\n➡️ Passo 2: Invio del risultato dello strumento al LLM...") + print("\n➡️ Étape 2: Envoi du résultat de l'outil au LLM...") - # Si aggiunge il risultato dello strumento alla cronologia dei messaggi + # Aggiungiamo il risultato dello strumento alla cronologia dei messaggi messages.append( { "role": "tool", @@ -389,7 +373,7 @@ def run_chat_with_tool_calling(): } ) - # Si effettua un nuovo chiamata SENZA gli strumenti questa volta per ottenere la risposta finale + # Effettuiamo un'altra chiamata SENZA gli strumenti questa volta per ottenere la risposta finale payload_final = { "model": MODEL, "messages": messages, @@ -404,15 +388,14 @@ def run_chat_with_tool_calling(): timeout=60, ) response_final.raise_for_status() - -final_data = response_final.json() + final_data = response_final.json() except (httpx.HTTPStatusError, httpx.RequestError) as e: - print(f"❌ Errore API durante il passo 2: {e}") + print(f"❌ Erreur API lors de l'étape 2: {e}") return final_answer = final_data["choices"][0]["message"]["content"] - print("\n✅ Risposta finale del LLM :") + print("\n✅ Réponse finale du LLM :") print(f"💬 \"{final_answer}\"") @@ -422,35 +405,31 @@ if __name__ == "__main__": **Utilizzo** -1. **Installa le dipendenze :** - +1. **Installa le dipendenze :** ```bash pip install -r tests/llmaas/requirements.txt ``` - -2. **Configura la tua chiave API :** - Copia `tests/llmaas/.env.example` in `tests/llmaas/.env` e sostituisci `"la_tua_chiave_api_qui"` con la tua chiave API LLMaaS. -3. **Esegui lo script :** - +2. **Configura la tua chiave API :** + Copia `tests/llmaas/.env.example` in `tests/llmaas/.env` e sostituisci `"votre_cle_api_ici"` con la tua chiave API LLMaaS. +3. **Esegui lo script :** ```bash python tests/llmaas/test_tool_calling.py ``` -### 2. Esempio semplice di Visione (Multimodale) +### 2. Esempio Semplice di Visione (Multimodale) I modelli multimodali possono analizzare sia testo che immagini. Questo esempio mostra come inviare un'immagine e una domanda al modello per ottenere una descrizione di ciò che "vede". **Struttura dei file** -Crea una directory `simple_vision` con i seguenti file: +Crea una directory `simple_vision` con i seguenti file : -- `test_vision.py`: Lo script principale. -- `requirements.txt`: Le dipendenze (incluse `Pillow` per generare l'immagine). -- `.env.example`: Il modello di configurazione. -- `image_example.png`: L'immagine da analizzare (lo script la genererà per te se manca). +- `test_vision.py`: Lo script principale. +- `requirements.txt`: Le dipendenze (incluendo `Pillow` per generare l'immagine). +- `.env.example`: Il modello di configurazione. +- `image_example.png`: L'immagine da analizzare (lo script la genererà per te se manca). **`requirements.txt`** - ```txt httpx python-dotenv @@ -458,110 +437,105 @@ Pillow ``` **`.env.example`** - ```env - # URL di base dell'API LLMaaS API_URL="https://api.ai.cloud-temple.com/v1" # La tua chiave API LLMaaS -API_KEY="la_tua_chiave_api_ici" +API_KEY="votre_cle_api_ici" # Opzionale: Modello predefinito da utilizzare per il test - # Assicurati che questo modello sia multimodale (visione) DEFAULT_MODEL="granite3.2-vision:2b" ``` -**Fonte del codice (`test_vision.py`)** +**Codice Sorgente (`test_vision.py`)** ```python - # -*- coding: utf-8 -*- """ -Esempio semplice di utilizzo dell'API Vision di LLMaaS. +Exemple simple d'utilisation de l'API Vision de LLMaaS. -Questo script mostra come inviare un'immagine locale con una domanda -a un modello di visione (multimodale) e visualizzare la sua risposta. +Ce script montre comment envoyer une image locale avec une question +à un modèle de vision (multimodal) et afficher sa réponse. """ import os import base64 import httpx from dotenv import load_dotenv -# --- Configurazione --- - -# Caricare le variabili d'ambiente da un file .env +# --- Configuration --- +# Carica le variabili d'ambiente da un file .env load_dotenv() API_URL = os.getenv("API_URL", "https://api.ai.cloud-temple.com/v1") API_KEY = os.getenv("API_KEY") - -# Utilizzare un modello di visione. +# Utilizza un modello di visione. MODEL = os.getenv("DEFAULT_MODEL", "granite3.2-vision:2b") -IMAGE_PATH = "image_example.png" # L'immagine deve essere nella stessa directory +IMAGE_PATH = "image_example.png" # L'immagine deve trovarsi nella stessa directory # --- Funzioni --- def encode_image_to_base64(image_path: str) -> str: """ - Codifica un'immagine in base64 per includerla nella richiesta API. + Encode une image en base64 pour l'inclure dans la requête API. """ try: with open(image_path, "rb") as image_file: return base64.b64encode(image_file.read()).decode('utf-8') except FileNotFoundError: - print(f"❌ Errore: Il file immagine '{image_path}' non è stato trovato.") + print(f"❌ Erreur: Le fichier image '{image_path}' n'a pas été trouvé.") return "" except Exception as e: - print(f"❌ Errore durante l'encoding dell'immagine: {e}") + print(f"❌ Erreur lors de l'encodage de l'image: {e}") return "" def generate_example_image(): """ - Genera un'immagine semplice per il test se non esiste. - Richiede la libreria Pillow (PIL). + Génère une image simple pour le test si elle n'existe pas. + Nécessite la bibliothèque Pillow (PIL). """ try: from PIL import Image, ImageDraw if not os.path.exists(IMAGE_PATH): - print(f"🖼️ L'immagine '{IMAGE_PATH}' non esiste, generazione in corso...") - # Crea un'immagine semplice: un quadrato rosso su fondo bianco + print(f"🖼️ L'image '{IMAGE_PATH}' n'existe pas, génération en cours...") + # Crea un'immagine semplice: un quadrato rosso su sfondo bianco img = Image.new('RGB', (200, 200), color = 'white') draw = ImageDraw.Draw(img) draw.rectangle([50, 50, 150, 150], fill='red', outline='black') img.save(IMAGE_PATH) - print("✅ Immagine di esempio generata.") + print("✅ Image d'exemple générée.") except ImportError: - print("⚠️ Avviso: La libreria Pillow non è installata.") - print(" Per favore installa 'Pillow' (`pip install Pillow`) per generare l'immagine di esempio,") - print(f" o posiziona manualmente un file chiamato '{IMAGE_PATH}' in questa directory.") + print("⚠️ Avertissement: La bibliothèque Pillow n'est pas installée.") + print(" Veuillez installer 'Pillow' (`pip install Pillow`) pour générer l'image d'exemple,") + print(f" ou placez manuellement un fichier nommé '{IMAGE_PATH}' dans ce répertoire.") except Exception as e: - print(f"❌ Errore durante la generazione dell'immagine: {e}") + print(f"❌ Erreur lors de la génération de l'image: {e}") + # --- Logica principale --- def run_vision_test(): """ - Funzione principale che esegue il scenario di test di visione. + Fonction principale qui exécute le scénario de test de vision. """ if not API_KEY: - print("❌ Errore: La variabile d'ambiente API_KEY non è definita.") + print("❌ Erreur: La variable d'environnement API_KEY n'est pas définie.") return - # Generare l'immagine di esempio se necessario + # Genera l'immagine di esempio se necessario generate_example_image() - # Codificare l'immagine in base64 + # Codifica l'immagine in base64 base64_image = encode_image_to_base64(IMAGE_PATH) if not base64_image: return - print(f"🤖 Modello utilizzato : {MODEL}") - print(f"🖼️ Immagine inviata : {IMAGE_PATH}") + print(f"🤖 Modèle utilisé : {MODEL}") + print(f"🖼️ Image envoyée : {IMAGE_PATH}") print("-" * 30) - # Costruzione del payload nel formato multimodale + # Costruzione del payload in formato multimodale payload = { "model": MODEL, "messages": [ @@ -570,7 +544,7 @@ def run_vision_test(): "content": [ { "type": "text", - "text": "Cosa vedi in questa immagine? Descrivi la forma e il colore principale." + "text": "Que vois-tu sur cette image ? Décris la forme et la couleur principale." }, { "type": "image_url", @@ -581,31 +555,31 @@ def run_vision_test(): ] } ], - "max_tokens": 500 # Limitare la lunghezza della descrizione + "max_tokens": 500 # Limita la lunghezza della descrizione } - print("➡️ Invio della richiesta al LLM di visione...") + print("➡️ Envoi de la requête au LLM de vision...") try: with httpx.Client() as client: response = client.post( f"{API_URL}/chat/completions", headers={"Authorization": f"Bearer {API_KEY}"}, json=payload, - timeout=120, # I modelli di visione possono essere più lunghi + timeout=120, # I modelli di visione possono richiedere più tempo ) response.raise_for_status() response_data = response.json() except httpx.HTTPStatusError as e: - print(f"❌ Errore API (HTTP Status): {e}") - print(f"Risposta dell'API : {e.response.text}") + print(f"❌ Erreur API (HTTP Status): {e}") + print(f"Réponse de l'API : {e.response.text}") return except httpx.RequestError as e: - print(f"❌ Errore API (Request): {e}") + print(f"❌ Erreur API (Request): {e}") return final_answer = response_data["choices"][0]["message"]["content"] - print("\n✅ Risposta del modello :") + print("\n✅ Réponse du modèle :") print(f"💬 \"{final_answer}\"") @@ -615,35 +589,32 @@ if __name__ == "__main__": **Utilizzo** -1. **Installa le dipendenze :** - +1. **Installa le dipendenze :** ```bash pip install -r tests/llmaas/requirements.txt ``` - -2. **Configura la tua chiave API :** +2. **Configura la tua chiave API :** Copia `tests/llmaas/.env.example` in `tests/llmaas/.env` e sostituisci `"votre_cle_api_ici"` con la tua chiave API LLMaaS. -3. **Esegui lo script :** - +3. **Esegui lo script :** ```bash python tests/llmaas/test_vision.py ``` - Lo script genererà automaticamente un'immagine `image_example.png` se non esiste. -## Passi successivi +--- + +## Prossimi passi -Dopo aver effettuato con successo il primo test: +Una volta completato con successo il primo test: -1. **Esplora i modelli** : Prova diversi modelli in base alle tue esigenze +1. **Esplora i modelli** : Testa diversi modelli in base alle tue esigenze 2. **Ottimizza i prompt** : Migliora la qualità delle risposte 3. **Integra nell'applicazione** : Consulta la [documentazione API](./api) -4. **Casi d'uso avanzati** : Vedere i [tutoriels](./tutorials) +4. **Casi d'uso avanzati** : Consulta i [tutorial](./tutorials) ## Supporto -In caso di problema: - +In caso di problemi: - Consulta la [documentazione API completa](./api) - Verifica lo stato del servizio nella Console -- Contatta il supporto tramite la Console Cloud Temple +- Contatta il supporto tramite la Console Cloud Temple \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/llmaas/rerank.md b/i18n/it/docusaurus-plugin-content-docs/current/llmaas/rerank.md new file mode 100644 index 00000000..fda61450 --- /dev/null +++ b/i18n/it/docusaurus-plugin-content-docs/current/llmaas/rerank.md @@ -0,0 +1,371 @@ +--- +title: Riordinamento +sidebar_position: 5 +--- + +# Reranking dei documenti + +## Cos'è il Reranking? + +Il **reranking** è una fase cruciale nei pipeline RAG (Retrieval-Augmented Generation). Dopo una ricerca vettoriale iniziale (embedding), un modello di reranking prende i `N` documenti candidati e li **riordina** in base alla pertinenza semantica a grana fine rispetto alla query dell'utente. + +### Perché il Reranking migliora i risultati? + +``` +Richiesta dell'utente + │ + ▼ + ┌─────────────┐ ┌────────────────────────────────────┐ + │ Embedding │──────►│ Top-100 documenti (ricerca │ + │ + Vector │ │ vettoriale approssimativa/ANN) │ + │ Search │ └────────────────────────────────────┘ + └─────────────┘ │ + ▼ + ┌────────────────────┐ + │ Reranker │ + │ (analisi precisa │ + │ richiesta↔documento) │ + └────────────────────┘ + │ + ▼ + Top-5 documenti ordinati + per pertinenza reale +``` + +- La **ricerca vettoriale** (embedding) è veloce ma approssimativa — calcola una similarità coseno in uno spazio multidimensionale +- Il **reranker** esegue un'analisi incrociata fine di ogni coppia (richiesta, documento) e produce un punteggio di pertinenza preciso +- Risultato: un RAG con reranking ha tipicamente **+15-30% di precisione** nelle risposte generate + +## Modelli Disponibili + +| Modello | Editore | Contesto | LTS | Uso consigliato | +|--------|---------|----------|-----|-----------------| +| `nvidia/llama-nemotron-rerank-vl-1b-v2` | NVIDIA | 4 096 | No | **Consigliato** — massima precisione, DSP 30/06/2027 | +| `qwen3-reranker:4b` | Qwen Team | 4 096 | No | Alta qualità, comprensione contestuale approfondita | +| `qwen3-reranker:0.6b` | Qwen Team | 4 096 | No | Compatto e veloce, ideale per bassa latenza | +| `bge-reranker-large` | BAAI | 512 | No | Multilingue, alte prestazioni | + +:::tip Quale modello scegliere? +- **Produzione RAG** : `nvidia/llama-nemotron-rerank-vl-1b-v2` — massima precisione +- **Bassa latenza** : `qwen3-reranker:0.6b` — il più veloce +- **Multilingue** : `bge-reranker-large` — ottimizzato per molte lingue +::: + +## Tariffazione + +**4.00 € / milione di token rerank** — circa **50% in meno** rispetto ai token di generazione standard. + +Il numero di token rerank corrisponde alla somma dei token della richiesta e di ciascun documento elaborato. + +## Endpoint + +L'API LLMaaS espone due endpoint compatibili con il SDK Cohere: + +| Endpoint | Versione | Compatibile | +|----------|---------|------------| +| `POST /v1/rerank` | Cohere v1 | SDK Cohere v4, chiamate dirette | +| `POST /v2/rerank` | Cohere v2 | SDK Cohere v5+ | + +## Formato della Richiesta + +```bash +curl -X POST "https://api.ai.cloud-temple.com/v1/rerank" \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer VOTRE_TOKEN_API" \ + -d '{ + "model": "nvidia/llama-nemotron-rerank-vl-1b-v2", + "query": "Quelles sont les garanties de souveraineté de LLMaaS ?", + "documents": [ + "Cloud Temple est hébergé exclusivement en France.", + "Les tarifs débutent à 1.8€ par million de tokens.", + "LLMaaS est qualifié SecNumCloud 3.2 par l'\''ANSSI.", + "L'\''API est compatible avec le standard OpenAI.", + "Les données ne sont ni stockées ni transférées hors de France." + ], + "top_n": 3 + }' +``` + +### Parametri + +| Parametro | Tipo | Obbligatorio | Descrizione | +|-----------|------|-------------|-------------| +| `model` | stringa | ✅ | ID del modello di reranking | +| `query` | stringa | ✅ | La query di ricerca | +| `documents` | array di stringhe | ✅ | I documenti da riordinare | +| `top_n` | intero | ❌ | Numero di risultati da restituire (predefinito: tutti) | +| `return_documents` | booleano | ❌ | Includere il testo dei documenti nella risposta (predefinito: true) | + +### Formato della Risposta + +```json +{ + "id": "rerank-7f3a2b1c4e5d", + "results": [ + { + "index": 0, + "relevance_score": 0.9821, + "document": { + "text": "Cloud Temple est hébergé exclusivement en France." + } + }, + { + "index": 2, + "relevance_score": 0.9743, + "document": { + "text": "LLMaaS est qualifié SecNumCloud 3.2 par l'ANSSI." + } + }, + { + "index": 4, + "relevance_score": 0.9512, + "document": { + "text": "Les données ne sont ni stockées ni transférées hors de France." + } + } + ], + "usage": { + "billed_units": { + "search_units": 5 + } + } +} +``` + +- `results` : Documenti ordinati per punteggio decrescente +- `index` : Posizione originale nell'array `documents` inviato +- `relevance_score` : Punteggio di rilevanza tra 0 e 1 (più è alto, più è pertinente) +- `search_units` : Numero di documenti riordinati (per la fatturazione) + +## Esempi di Implementazione + +### Python — Chiamata diretta (httpx) + +```python +import httpx +import os + +API_KEY = os.getenv("LLMAAS_API_KEY") +BASE_URL = "https://api.ai.cloud-temple.com/v1" + +def rerank(query: str, documents: list[str], top_n: int = 5, model: str = "nvidia/llama-nemotron-rerank-vl-1b-v2") -> list[dict]: + """ + Réordonne des documents par pertinence vis-à-vis d'une requête. + + Args: + query: La requête de l'utilisateur + documents: Liste de documents candidats + top_n: Nombre de résultats à retourner + model: Modèle de reranking à utiliser + + Returns: + Liste de documents triés par pertinence décroissante + """ + payload = { + "model": model, + "query": query, + "documents": documents, + "top_n": top_n + } + + with httpx.Client(timeout=30.0) as client: + response = client.post( + f"{BASE_URL}/rerank", + headers={"Authorization": f"Bearer {API_KEY}"}, + json=payload + ) + response.raise_for_status() + + return response.json()["results"] + +# Utilizzo +query = "Quelles sont les garanties de souveraineté ?" +documents = [ + "Cloud Temple est une société française.", + "LLMaaS est qualifié SecNumCloud 3.2.", + "L'API supporte le streaming SSE.", + "Les données ne quittent jamais la France.", + "La facturation est basée sur les tokens consommés." +] + +results = rerank(query, documents, top_n=3) +for result in results: + print(f"Score: {result['relevance_score']:.4f} | {result['document']['text']}") +``` + +### Python — SDK Cohere + +```python +import cohere +import os + +# Il SDK Cohere punta all'API LLMaaS +co = cohere.Client( + api_key=os.getenv("LLMAAS_API_KEY"), + base_url="https://api.ai.cloud-temple.com" +) + +results = co.rerank( + model="nvidia/llama-nemotron-rerank-vl-1b-v2", + query="Quelles sont les garanties de souveraineté ?", + documents=[ + "Cloud Temple est une société française.", + "LLMaaS est qualifié SecNumCloud 3.2.", + "L'API supporte le streaming SSE.", + ], + top_n=2 +) + +for result in results.results: + print(f"Index: {result.index} | Score: {result.relevance_score:.4f}") +``` + +### Integrazione in una Pipeline RAG Completa + +```python +import httpx +import os +from typing import List + +API_KEY = os.getenv("LLMAAS_API_KEY") +BASE_URL = "https://api.ai.cloud-temple.com/v1" +HEADERS = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"} + +def embed_query(query: str) -> list[float]: + """Vectorise la requête pour la recherche sémantique.""" + with httpx.Client(timeout=30.0) as client: + r = client.post( + f"{BASE_URL}/embeddings", + headers=HEADERS, + json={"model": "granite-embedding:278m", "input": query} + ) + r.raise_for_status() + return r.json()["data"][0]["embedding"] + +def vector_search(query_vector: list[float], top_k: int = 20) -> list[str]: + """ + Recherche vectorielle dans votre base de données (FAISS, Qdrant, etc.). + Retourne les top_k documents candidats. + [Implémentation spécifique à votre stack vectorielle] + """ + # Esempio fittizio — sostituisci con la tua logica di ricerca + return [f"Document candidat {i}" for i in range(top_k)] + +def rerank_documents(query: str, documents: list[str], top_n: int = 5) -> list[str]: + """Réordonne les documents candidats par pertinence fine.""" + with httpx.Client(timeout=30.0) as client: + r = client.post( + f"{BASE_URL}/rerank", + headers=HEADERS, + json={ + "model": "nvidia/llama-nemotron-rerank-vl-1b-v2", + "query": query, + "documents": documents, + "top_n": top_n + } + ) + r.raise_for_status() + + results = r.json()["results"] + # Restituisce i documenti in ordine di pertinenza + return [documents[res["index"]] for res in results] + +def generate_answer(query: str, context_docs: list[str]) -> str: + """Génère une réponse basée sur les documents rerankés.""" + context = "\n\n".join([f"[Doc {i+1}]: {doc}" for i, doc in enumerate(context_docs)]) + + with httpx.Client(timeout=60.0) as client: + r = client.post( + f"{BASE_URL}/chat/completions", + headers=HEADERS, + json={ + "model": "gpt-oss:120b", + "messages": [ + { + "role": "system", + "content": "Tu es un assistant qui répond aux questions basé uniquement sur le contexte fourni." + }, + { + "role": "user", + "content": f"Contexte:\n{context}\n\nQuestion: {query}" + } + ], + "max_tokens": 500, + "temperature": 0.1 + } + ) + r.raise_for_status() + + return r.json()["choices"][0]["message"]["content"] + +def rag_pipeline(query: str) -> str: + """Pipeline RAG complet : Embed → Search → Rerank → Generate.""" + print(f"📝 Requête : {query}") + + # 1. Vettorizzazione della richiesta + print("🔢 Vectorisation...") + query_vector = embed_query(query) + + # 2. Ricerca vettoriale (top-20 candidati) + print("🔍 Recherche vectorielle (top-20)...") + candidates = vector_search(query_vector, top_k=20) + + # 3. Reranking (selezione dei top-5) + print("📊 Reranking (→ top-5)...") + top_docs = rerank_documents(query, candidates, top_n=5) + + # 4. Generazione della risposta + print("✍️ Génération de la réponse...") + answer = generate_answer(query, top_docs) + + return answer + +# Esempio di utilizzo +if __name__ == "__main__": + question = "Quelles sont les garanties de conformité RGPD de Cloud Temple ?" + reponse = rag_pipeline(question) + print(f"\n💬 Réponse : {reponse}") +``` + +## Migliori Pratiche + +### Ottimizzazione dei Costi + +```python +# ✅ BUONO: Reranker su un sottoinsieme ragionevole (20-50 documenti) +candidates = vector_search(query_vector, top_k=20) +top_docs = rerank_documents(query, candidates, top_n=5) + +# ❌ ERRATO: Reranker sull'intera base di dati (1000+ documenti) +# candidates = all_documents # Troppo lento e costoso +``` + +### Scelta del `top_n` + +| Caso d'uso | `top_k` (search) | `top_n` (rerank) | +|------------|-----------------|-----------------| +| Chat/QA semplice | 10-20 | 3-5 | +| Analisi del documento | 20-50 | 5-10 | +| Sintesi complessa | 50-100 | 10-15 | + +### Soglia di Rilevanza + +```python +# Filtra i documenti poco rilevanti (punteggio < 0.3) +RELEVANCE_THRESHOLD = 0.3 + +def rerank_with_threshold(query: str, documents: list[str]) -> list[str]: + results = rerank_documents(query, documents, top_n=len(documents)) + return [ + documents[r["index"]] + for r in results + if r["relevance_score"] >= RELEVANCE_THRESHOLD + ] +``` + +## Risorse + +- **Codice di esempio completo** : [`exemples/simple_rerank/`](https://github.com/Cloud-Temple/product-llmaas-how-to/tree/main/simple_rerank) +- **Catalogo modelli** : [Modèles de Reranking](./models#modèles-de-reranking) +- **Riferimento API** : [POST /v1/rerank](./api#post-v1rerank) +- **Spiegazione RAG** : [Guide complet RAG](./rag_explained) \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/concepts.md b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/concepts.md index 3979f4e6..f7400aa1 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/concepts.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/concepts.md @@ -7,14 +7,14 @@ import grafana from '@site/docs/managed_kubernetes/images/grafana.png' import archi_overview from '@site/docs/managed_kubernetes/images/archi_overview.png' import archi_overview_1az from '@site/docs/managed_kubernetes/images/archi_overview_1az.png' -## Le Nostre Offerte Managed Kubernetes +## Le nostre offerte Managed Kubernetes Cloud Temple propone due offerte distinte per soddisfare le vostre esigenze di orchestrazione dei container: -- **Managed Core Kubernetes**: Un'offerta minimalista che vi fornisce una base Kubernetes robusta e sicura, basata su componenti open-source all'avanguardia. È ideale per i team esperti che desiderano costruire la propria piattaforma su misura. -- **Managed Kubernetes**: Una soluzione completa e pronta all'uso che include uno stack completo di strumenti per la rete, la sicurezza, lo storage, il deployment continuo, l'osservabilità, il backup e la gestione dei costi. +- **Managed Core Kubernetes** : Un prodotto minimalista che fornisce una base Kubernetes solida e sicura, basata su componenti open-source all'avanguardia. È ideale per team esperti che desiderano costruire la propria piattaforma su misura. +- **Managed Kubernetes** : Una soluzione completa e pronta all'uso che include una suite completa di strumenti per la rete, la sicurezza, lo storage, il deployment continuo, l'osservabilità, il backup e la gestione dei costi. -### Tabella Comparativa delle Offerte +### Tabella comparativa delle offerte | Componente | Managed Core Kubernetes | Managed Kubernetes | |---|---|---| @@ -23,85 +23,85 @@ Cloud Temple propone due offerte distinte per soddisfare le vostre esigenze di o | **Osservabilità CNI** | ❌ | Hubble | | **Load Balancer** | MetalLB | MetalLB | | **Ingress** | ❌ | Ingress Nginx | -| **Storage** | Rook-Ceph | Rook-Ceph | -| **Deployment Continuo (GitOps)** | ❌ | ArgoCD | +| **Archiviazione** | Rook-Ceph | Rook-Ceph | +| **Distribuzione Continua (GitOps)** | ❌ | ArgoCD | | **Osservabilità** | ❌ | Prometheus, Grafana, Loki | | **Backup e Migrazione** | ❌ | Veeam Kasten | | **Gestione dei Costi (FinOps)** | ❌ | OpenCost | | **Governance e Sicurezza**| ❌ | Kyverno, Capsule | -| **Container Registry**| ❌ | Harbor | -| **Gestione dei Certificati**| ❌ | Cert-Manager | +| **Registro Container**| ❌ | Harbor | +| **Gestione dei certificati**| ❌ | Cert-Manager | | **Autenticazione SSO**| ❌ | Integrazione OIDC | -## Presentazione dell'Offerta Managed Kubernetes (completa) +## Presentazione del prodotto Managed Kubernetes (complète) -L'offerta **Managed Kubernetes** (chiamata anche "Kube Gestito" o "KM") è una soluzione di containerizzazione Kubernetes gestita da Cloud-Temple, distribuita sotto forma di Macchine Virtuali che operano sulle infrastrutture IaaS Cloud-Temple OpenIaaS. +L'offerta **Managed Kubernetes** (nota anche come "Kub Managé" o "KM") è una soluzione di containerizzazione Kubernetes gestita da Cloud-Temple, distribuita sotto forma di Macchine Virtuali che operano sulle infrastrutture IaaS Cloud-Temple OpenIaaS. -**Managed Kubernetes** è basato su Talos Linux ([https://www.talos.dev/](https://www.talos.dev/)), un sistema operativo dedicato a Kubernetes che è leggero e sicuro. È immutabile, senza alcuna shell né accesso SSH, e configurato esclusivamente in modo dichiarativo tramite API gRPC. +**Managed Kubernetes** si basa su Talos Linux ([https://www.talos.dev/](https://www.talos.dev/)), un sistema operativo dedicato a Kubernetes che è leggero e sicuro. È immutabile, senza alcun shell né accesso ssh, e configurato esclusivamente in modo dichiarativo tramite API gRPC. -L'installazione standardizzata include un insieme di componenti, prevalentemente OpenSource e validati dalla CNCF: +L'installazione standardizzata include un insieme di componenti, per lo più OpenSource e validati dal CNCF: -- **CNI Cilium**, con interfaccia di osservabilità (**Hubble**): Cilium è una soluzione di rete per i container Kubernetes (*Container Network Interface*). Gestisce la sicurezza, il load balancing, il service mesh, l'osservabilità, la crittografia, ecc. È un componente di rete fondamentale presente nella maggior parte delle varianti di Kubernetes (OpenShift, AKS, GKE, EKS,...). Abbiamo incluso l'interfaccia grafica **Hubble** per la visualizzazione dei flussi Cilium. +- **CNI Cillium**, con interfaccia di osservabilità (**Hubble**): Cillium è una soluzione di networking per i container Kubernetes (*Container Network Interface*). Gestisce la sicurezza, il load balancing, il service mesh, l'osservabilità, la crittografia, ecc... È un componente di rete fondamentale che si ritrova nella maggior parte delle distribuzioni di Kubernetes (OpenShift, AKS, GKE, EKS,...). Abbiamo incluso l'interfaccia grafica **Hubble** per la visualizzazione dei flussi Cillium. -- **MetalLB** e **nginx**: Per l'esposizione delle applicazioni web, sono integrate di default 3 *ingress-class* **nginx**: - - *nginx-external-secured*: esposizione su un IP pubblico, filtrato sul firewall per consentire solo IP noti (utilizzato per le interfacce grafiche dei vari prodotti e l'API Kubernetes) - - *nginx-external*: esposizione su un secondo IP pubblico non filtrato (o filtro specifico del cliente) - - *nginx-internal*: esposizione solo su un IP interno +- **MetalLB** e **nginx**: Per l'esposizione delle applicazioni Web, sono integrate di base 3 *ingress-class* **nginx**: + - *nginx-external-secured*: esposizione su un'IP pubblica, filtrata sul firewall per autorizzare solo IP noti (utilisé pour les interfaces graphiques des différents produits, et l'API Kubernetes) + - *nginx-external*: esposizione su una seconda IP pubblica non filtrata (ou filtrage spécifique au client) + - *nginx-internal*: esposizione su un'IP interna esclusivamente - Per i servizi "non web", un load-balancer **MetalLB** permette di esporre servizi internamente o su IP pubblici. (il che consente di distribuire altri ingress, come ad esempio un WAF) + Per i servizi "non web", un load-balancer **metalLB** consente di esporre servizi internamente o su IP pubblici. (ce qui permet de déployer des autres ingresses, comme par exemple un WAF) -- **Storage Distribuito Rook-Ceph**: per l'archiviazione dei volumi persistenti (PV), uno storage distribuito OpenSource **Ceph** è integrato nella piattaforma. Permette di utilizzare le *storage-class* *ceph-block*, *ceph-bucket* e *ceph-filesystem*. Viene utilizzato uno storage con **7500 IOPS**, che garantisce alte prestazioni. Nei deployment di produzione (su 3 AZ), i nodi di storage sono dedicati (1 nodo per AZ); nei deployment fuori produzione (1 AZ), lo storage è condiviso con i worker node. +- **Storage distribuito Rook-Ceph**: per lo storage dei volumi persistenti (PV), è integrata nella piattaforma una soluzione di storage distribuito **Ceph** OpenSource. Consente di utilizzare le *storage-classes* *ceph-block*, *ceph-bucket* e *ceph-filesystem*. Viene utilizzato uno storage con **7500 IOPS**, che garantisce elevate prestazioni. Nei deployment di produzione (sur 3 AZ), i nodi di storage sono dedicati (1 noeud par AZ); nei deployment fuori produzione (1 AZ), lo storage è condiviso con i nodi worker. - **Cert-Manager**: il gestore di certificati OpenSource **Cert-Manager** è integrato nativamente nella piattaforma. -- **ArgoCD** è a vostra disposizione per i deployment automatizzati tramite una catena di **CI/CD**. +- **ArgoCD** è a vostra disposizione per i vostri deployment automatizzati tramite una catena di **CI/CD**. -- Stack **Prometheus** (Prometheus, Grafana, Loki): i cluster Managed Kubernetes vengono consegnati in standard con uno stack OpenSource completo **Prometheus** per l'osservabilità, che include: +- Stack **Prometheus** (Prometheus, Grafana, Loki): i cluster Managed Kubernetes sono forniti in standard con una stack OpenSource completa **Prometheus** per l'osservabilità, includente: - **Prometheus** - **Grafana**, con numerosi dashboard - - **Loki**: i log della piattaforma vengono esportati nello storage S3 di Cloud-Temple (e integrati in Grafana). + - **Loki**: i log della piattaforma sono esportati verso lo storage S3 Cloud-Temple (et intégrés dans Grafana). -- **Harbor** è una **Container Registry** che vi permette di archiviare le immagini dei vostri container o i vostri chart Helm direttamente nel cluster. Esegue **scansioni delle vulnerabilità** sulle immagini e può firmarle digitalmente. **Harbor** consente anche sincronizzazioni con altri registry. ([https://goharbor.io/](https://goharbor.io/)) +- **Harbor** è una **Container registry** che consente di memorizzare le immagini dei vostri container o i vostri chart helm direttamente nel cluster. Esegue **scan di vulnerabilità** sulle vostre immagini e può firmarle digitalmente. **Harbor** consente inoltre sincronizzazioni con altri registries. ([https://goharbor.io/](https://goharbor.io/)) -- **OpenCost** ([https://github.com/opencost/opencost](https://github.com/opencost/opencost)) è uno strumento di gestione dei costi (FinOps) per Kubernetes. Vi permette di monitorare in dettaglio il consumo delle risorse Kubernetes e di effettuare chargeback per progetto/namespace. +- **OpenCost** ([https://github.com/opencost/opencost](https://github.com/opencost/opencost)) è uno strumento di gestione dei costi (Finops) per Kubernetes. Consente di monitorare finemente il consumo delle risorse Kubernetes e di effettuare una sotto-fatturazione per progetto/namespace. -- Politiche di sicurezza avanzate con **Kyverno** e **Capsule**: - - **Kyverno** ([https://kyverno.io/](https://kyverno.io/)) è un admission controller per Kubernetes che permette di applicare politiche. È uno strumento essenziale per la governance e la sicurezza in Kubernetes. - - **Capsule** ([https://projectcapsule.dev/](https://projectcapsule.dev/)) è uno strumento di gestione delle autorizzazioni che facilita la gestione dei diritti in Kubernetes. Introduce la nozione di *tenant* che permette di centralizzare e delegare autorizzazioni su più namespace. Tramite **Capsule**, gli utenti della piattaforma Kubernetes Gestito dispongono di diritti limitati ai soli propri namespace. +- Strategie di sicurezza avanzate con **Kyverno** e **Capsule**: + - **Kyverno** ([https://kyverno.io/](https://kyverno.io/)) è un controller di ammissione per Kubernetes che consente di applicare policy. È uno strumento essenziale per la governance e la sicurezza in Kubernetes. + - **Capsule** ([https://projectcapsule.dev/](https://projectcapsule.dev/)) è uno strumento di gestione delle permessi che facilita la gestione dei diritti in Kubernetes. Introduce il concetto di *tenant* che consente di centralizzare e delegare le permessi su più namespace. Tramite **Capsule**, gli utenti della piattaforma Kubernetes Managé dispongono quindi di diritti limitati ai propri namespace. -- **Veeam Kasten** (noto anche come 'k10') è una soluzione per il **backup** dei workload Kubernetes. +- **Veeam Kasten** (aka 'k10') è una soluzione per il **backup** dei workload Kubernetes. - Permette di salvare un deployment completo: manifest, volumi, ecc., nello storage a oggetti S3 di Cloud-Temple. **Kasten** utilizza **Kanister** per consentire backup applicativi coerenti, ad esempio per i database ([https://docs.kasten.io/latest/usage/blueprints/](https://docs.kasten.io/latest/usage/blueprints/)). + Consente di eseguire il backup di un deployment completo: manifest, volumi, ecc... verso lo storage oggetto S3 Cloud-Temple. **Kasten** utilizza **Kanister** per consentire backup applicativi coerenti, ad esempio per i database ([https://docs.kasten.io/latest/usage/blueprints/](https://docs.kasten.io/latest/usage/blueprints/)). - **Kasten** è uno strumento cross-platform che può funzionare con altri cluster Kubernetes (OpenShift, Hyperscaler,...). Può quindi essere utilizzato per scenari di reversibilità o migrazione (K10 gestisce gli adattamenti necessari tramite *trasformazioni*, ad esempio un cambio di ingress-class), ma anche di "refresh" (esempio: ripristino pianificato di un ambiente di produzione in pre-produzione). + **Kasten** è uno strumento cross-platform che può funzionare con altri cluster Kubernetes (OpenShift, Hyperscaler,...). Può quindi essere utilizzato per scenari di reversibilità o migrazione (K10 gère les adaptations éventuelles via des *transformations*, par exemple un changement d'ingress-class), ma anche per il "refresh" (exemple : restauration planifiée d'un environnement de production en pré-production). - **Autenticazione SSO** con un Identity Provider Esterno OIDC (Microsoft Entra, FranceConnect, Okta, AWS IAM, Google, Salesforce, ...) -## SLA e Informazioni sul Supporto +## SLA & Informazioni sul supporto -- **Disponibilità garantita (produzione 3 AZ)**: 99,90% -- **Supporto**: N1/N2/N3 incluso per il perimetro base (infrastruttura e operatori standard). -- **Impegno di Tempo di Ripristino (ITR)**: secondo il contratto quadro di Cloud Temple. -- **Manutenzione (MCO)**: patching regolare di Talos / Kubernetes / operatori standard da parte dell'MSP, senza interruzione del servizio (rolling upgrade). +- **Disponibilità garantita (produzione 3 AZ)** : 99.90 % +- **Supporto** : N1/N2/N3 inclusi per l'ambito di base (infrastruttura e operatori standard). +- **Impegno sui tempi di ripristino (ETR)** : secondo il contratto quadro Cloud Temple. +- **Manutenzione (MCO)** : patching regolare di Talos / Kubernetes / operatori standard da parte del MSP, senza interruzione del servizio (rolling upgrade). -I tempi di presa in carico e di ripristino dipendono dalla gravità dell'incidente, in conformità con la griglia di supporto (da P1 a P4). +I tempi di presa in carico e di ripristino dipendono dalla gravità dell’incidente, conformemente alla griglia di supporto (P1-P4). -## Politica delle Versioni e Ciclo di Vita +## Politica delle versioni e ciclo di vita -- **Kubernetes supportato:** N-2 (3 release maggiori all'anno, circa ogni 4 mesi). Ogni release è supportata ufficialmente per 12 mesi, il che garantisce una finestra di supporto Cloud Temple di ~16 mesi massimi per versione. -- **Talos OS:** allineato alle versioni stabili di Kubernetes. - - Ogni branch viene mantenuto per circa 12 mesi (incluse le patch di sicurezza). - - Cadenza di upgrade consigliata: 3 volte l'anno, in coerenza con gli upgrade di Kubernetes. - - Le patch critiche (CVE, kernel) vengono applicate tramite rolling upgrade, senza interruzione del servizio. -- **Operatori standard:** aggiornati entro 90 giorni dalla release stabile. -- **Aggiornamenti:** - - **Maggiori** (Kubernetes N+1, Talos X+1): pianificati 3 volte/anno, come rolling update. - - **Minori**: applicati automaticamente entro 30-60 giorni. -- **Deprecazione:** versione N-3 → fine del supporto entro 90 giorni dalla pubblicazione di N. +- **Kubernetes supportato :** N-2 (3 release principali all'anno, circa ogni 4 mesi). Ogni release è supportata ufficialmente per 12 mesi, garantendo una finestra di supporto Cloud Temple di ~16 mesi massimo per versione. +- **Talos OS :** allineato alle versioni stabili di Kubernetes. + - Ogni branch è mantenuta per circa 12 mesi (patch di sicurezza inclusi). + - Frequenza di upgrade consigliata : 3 volte all'anno, in coerenza con gli upgrade di Kubernetes. + - I patch critici (CVE, kernel) vengono applicati in rolling upgrade, senza interruzione del servizio. +- **Operatori standard :** aggiornati entro 90 giorni dal rilascio della versione stabile. +- **Aggiornamenti :** + - **Principali** (Kubernetes N+1, Talos X+1) : pianificate 3 volte/anno, in rolling update. + - **Minori** : applicate automaticamente entro 30-60 giorni. +- **Deprecazione :** versione N-3 → fine del supporto entro 90 giorni dal rilascio di N. ## Nodi Kubernetes @@ -111,67 +111,67 @@ I tempi di presa in carico e di ripristino dipendono dalla gravità dell'inciden Per un deployment "di produzione" (multi-zonale), vengono utilizzate le seguenti macchine: -| **AZ** | **Macchina** | **vCores** | **RAM** | **Storage Locale** | +| **AZ** | **Macchina** | **vCores** | **RAM** | **Storage locale** | |---|---|---|---|---| -| AZ07 | Git Runner | 4 | 8 GB | OS: 64 GB | -| AZ05 | Control Plane 1 | 8 | 12 GB | OS: 64 GB | -| AZ06 | Control Plane 2 | 8 | 12 GB | OS: 64 GB | -| AZ07 | Control Plane 3 | 8 | 12 GB | OS: 64 GB | -| AZ05 | Storage Node 1 | 12 | 24 GB | OS: 64 GB + Ceph minimo 500 GB (*) | -| AZ06 | Storage Node 2 | 12 | 24 GB | OS: 64 GB + Ceph minimo 500 GB (*)| -| AZ07 | Storage Node 3 | 12 | 24 GB | OS: 64 GB + Ceph minimo 500 GB (*)| -| AZ05 | Worker Node 1 (**) | 12 | 24 GB | OS: 64 GB | -| AZ06 | Worker Node 2 (**) | 12 | 24 GB | OS: 64 GB | -| AZ07 | Worker Node 3 (**) | 12 | 24 GB | OS: 64 GB | +| AZ07 | Git Runner | 4 | 8 Go | OS: 64 Go | +| AZ05 | Control Plane 1 | 8 | 12 Go | OS: 64 Go | +| AZ06 | Control Plane 2 | 8 | 12 Go | OS: 64 Go | +| AZ07 | Control Plane 3 | 8 | 12 Go | OS: 64 Go | +| AZ05 | Storage Node 1 | 12 | 24 Go | OS: 64 Go + Ceph 500 Go minimum (*) | +| AZ06 | Storage Node 2 | 12 | 24 Go | OS: 64 Go + Ceph 500 Go minimum (*)| +| AZ07 | Storage Node 3 | 12 | 24 Go | OS: 64 Go + Ceph 500 Go minimum (*)| +| AZ05 | Worker Node 1 (**) | 12 | 24 Go | OS: 64 Go | +| AZ06 | Worker Node 2 (**) | 12 | 24 Go | OS: 64 Go | +| AZ07 | Worker Node 3 (**) | 12 | 24 Go | OS: 64 Go | -(*): Ogni nodo di storage viene consegnato con un minimo di 500 GB di spazio disco, per uno storage utile Ceph distribuito di 500 GB (i dati vengono replicati su ogni AZ, quindi x3). Lo spazio libero disponibile per il cliente è di circa 350 GB. Questa dimensione iniziale può essere aumentata al momento della costruzione, o in seguito, in base alle esigenze. Vengono applicati dei quota su Ceph, con una distribuzione Block/File. +(*) : Ogni nodo di storage è fornito con un minimo di 500 Go di spazio disco, per uno spazio utile Ceph distribuito di 500 Go (i dati sono replicati su ogni AZ, quindi x3). Lo spazio libero disponibile per il cliente è di circa 350 Go. Questa dimensione iniziale può essere aumentata al momento della costruzione o in seguito, in base alle esigenze. Vengono applicati dei quota su Ceph, con una ripartizione Block/File. -(**): La dimensione e il numero dei Worker Node possono essere adattati in base alle esigenze di capacità di calcolo del cliente. Il numero minimo di Worker Node è 3 (1 per AZ), e si consiglia di aumentarne il numero per gruppi di 3 per mantenere una distribuzione multi-zonale coerente. La dimensione del Worker Node può essere adattata, con un minimo di 12 core e 24 GB di RAM; il limite superiore per Worker Node è determinato dalla dimensione degli hypervisor utilizzati (quindi potenzialmente 112 core/1536 GB di RAM con blade Performance 3). Il numero di Worker Node è limitato a 100. La CNCF consiglia di avere Worker Node di dimensioni identiche. Il limite di pod per Worker Node è di 110. +(**) : La dimensione e il numero dei Worker Nodes possono essere adattati in base alle esigenze di capacità di calcolo del cliente. Il numero minimo di Worker Nodes è di 3 (1 per AZ), e consigliamo di aumentarne il numero a gruppi di 3 per mantenere una distribuzione multi-zonale coerente. La dimensione dei Worker Nodes può essere adattata, con un minimo di 12 core e 24 Go di RAM; il limite superiore per ogni Worker Node è determinato dalla dimensione degli hypervisor utilizzati (quindi potenzialmente 112 core/1536 Go di RAM con le lame Performance 3). Il numero di Worker Nodes è limitato a 100. Il CNCF consiglia di avere worker nodes di dimensioni identiche. Il limite del numero di pod per Worker Node è di 110. ### Dev/Test -Per una versione "dev/test", vengono distribuiti le seguenti macchine: +Per una versione "dev/test", vengono distribuite le seguenti macchine: -| **AZ** | **Macchina** | **vCores** | **RAM** | **Storage Locale** | +| **AZ** | **Macchina** | **vCores** | **RAM** | **Archiviazione locale** | |---|---|---|---|---| -| AZ0n | Git Runner | 4 | 8 GB | OS: 30 GB | -| AZ0n | Control Plane | 8 | 12 GB | OS: 64 GB | -| AZ0n | Worker Node 1 (**) | 12 | 24 GB | OS: 64 GB + Ceph minimo 300 GB (*) | -| AZ0n | Worker Node 2 (**) | 12 | 24 GB | OS: 64 GB + Ceph minimo 300 GB (*) | -| AZ0n | Worker Node 3 (**) | 12 | 24 GB | OS: 64 GB + Ceph minimo 300 GB (*) | +| AZ0n | Git Runner | 4 | 8 Go | OS: 30 Go | +| AZ0n | Control Plane | 8 | 12 Go | OS: 64 Go | +| AZ0n | Worker Node 1 (**) | 12 | 24 Go | OS: 64 Go + Ceph 300 Go minimo (*) | +| AZ0n | Worker Node 2 (**) | 12 | 24 Go | OS: 64 Go + Ceph 300 Go minimo (*) | +| AZ0n | Worker Node 3 (**) | 12 | 24 Go | OS: 64 Go + Ceph 300 Go minimo (*) | -(*): 3 Worker Node vengono utilizzati come Storage Node e vengono consegnati con un minimo di 300 GB di spazio disco, per uno storage utile distribuito di 300 GB (i dati vengono replicati tre volte). Lo spazio libero disponibile per il cliente è di circa 150 GB. Questa dimensione iniziale può essere aumentata al momento della costruzione, o in seguito, in base alle esigenze. +(*) : 3 Worker node vengono utilizzati come Storage node e sono forniti con un minimo di 300 Go di spazio su disco, per un'archiviazione utile distribuita di 300 Go (i dati sono replicati tre volte). Lo spazio libero disponibile per il cliente è di circa 150 Go. Questa dimensione iniziale può essere aumentata al momento della configurazione o in seguito, in base alle esigenze. -(**): La dimensione e il numero dei Worker Node possono essere adattati in base alle esigenze di capacità di calcolo del cliente. Il numero minimo di Worker Node è 3 (a causa della replicazione dello storage). La dimensione del Worker Node può essere adattata, con un minimo di 12 core e 24 GB di RAM; il limite superiore per Worker Node è determinato dalla dimensione degli hypervisor utilizzati (quindi potenzialmente 112 core/1536 GB di RAM con blade Performance 3). Il numero di Worker Node è limitato a 250. La CNCF consiglia di avere Worker Node di dimensioni identiche. Il limite di pod per Worker Node è di 110. +(**) : La dimensione e il numero dei Worker Node possono essere adattati in base alle esigenze di capacità di calcolo del cliente. Il numero minimo di Worker node è 3 (a causa della replicazione dell'archiviazione). La dimensione dei Worker Node può essere adattata, con un minimo di 12 core e 24 Go di RAM; il limite superiore per Worker node è determinato dalla dimensione degli hypervisor utilizzati (quindi potenzialmente 112 core/1536 Go di RAM con le lame Performance 3). La quantità di Worker Node è limitata a 250. Il CNCF consiglia di utilizzare worker node di dimensioni identiche. Il limite del numero di pod per Worker Node è 110. ## RACI -### Architettura e Infrastruttura +### Architettura & Infrastruttura | **Attività** | **Cliente** | **Cloud Temple** | |---|---|---| -| Definire l'architettura globale del servizio Kubernetes | C | RA | -| Dimensionare il servizio Kubernetes (numero di nodi, risorse) | C | RA | -| Installare il servizio Kubernetes con una configurazione predefinita | I | RA | -| Configurare il servizio Kubernetes | C | RA | +| Definire l'architettura globale del servizio Kubernetes | C | RA | +| Dimensionare il servizio Kubernetes (numero di nodi, risorse) | C | RA | +| Installare il servizio Kubernetes con una configurazione predefinita | I | RA | +| Configurazione del servizio Kubernetes | C | RA | | Configurare la rete di base del servizio Kubernetes | I | RA | -| Distribuire la configurazione iniziale delle identità e degli accessi | C | RA | -| Definire la strategia di scaling e alta disponibilità | C | RA | +| Distribuzione della configurazione iniziale di identità e accessi | C | RA | +| Definire la strategia di scalabilità e alta disponibilità | C | RA | -### Gestione dei Progetti e delle Applicazioni Aziendali +### Gestione dei progetti e delle applicazioni di business | **Attività** | **Cliente** | **Cloud Temple** | |---|---|---| -| Creare e gestire i progetti Kubernetes | RA | I* | -| Distribuire e gestire le applicazioni in Kubernetes | RA | I* | -| Configurare le pipeline CI/CD | RA | I* | -| Gestire le immagini dei container e i registry | RA | I* | +| Creare e gestire i progetti Kubernetes | RA | I* | +| Distribuire e gestire le applicazioni su Kubernetes | RA | I* | +| Configurare le pipeline CI/CD | RA | I* | +| Gestire le immagini dei container e i registri | RA | I* | -*può passare a "C" in base al contratto di servizi gestiti +*può passare a "C" in base al contratto di gestione -### Monitoraggio e Prestazioni +### Monitoraggio e prestazioni | **Attività** | **Cliente** | **Cloud Temple** | |---|---|---| @@ -180,105 +180,105 @@ Per una versione "dev/test", vengono distribuiti le seguenti macchine: | Gestire gli alert relativi al servizio Kubernetes | I | RA* | | Gestire gli alert relativi alle applicazioni | RA | | -(*): *Solo Cluster di Produzione. In Dev/Test il cliente è completamente autonomo e responsabile.* +(*) : *Solo cluster di produzione. In Dev/Test il cliente è completamente autonomo e responsabile.* -### Manutenzione e Aggiornamenti delle Infrastrutture +### Manutenzione e aggiornamenti delle infrastrutture | **Attività** | **Cliente** | **Cloud Temple** | |---|---|---| -| Aggiornare il servizio Kubernetes/OS | C | RA | -| Applicare le patch di sicurezza a Kubernetes | C | RA | -| Aggiornare le applicazioni distribuite (operatori*) | C | RA | +| Aggiornare il servizio Kubernetes/OS | C | RA | +| Applicare le patch di sicurezza a Kubernetes | C | RA | +| Aggiornare le applicazioni distribuite (operatori*) | C | RA | -*Pacchetto operatori incluso su Managed Kube - vedere capitoli: Pacchetti Helm Gestiti +*Pacchetto operatore incluso su Managed Kube - vedere capitoli: Pacchetti Helm gestiti ### Sicurezza -| **Attività** | **Cliente** | **Cloud Temple** | +| **Attività** | **Client** | **Cloud Temple** | |---|---|---| -| Gestire la sicurezza del servizio Kubernetes | RA | RA* | +| Gestire la sicurezza del servizio Kubernetes | RA | RA* | | Configurare e gestire le politiche di sicurezza dei pod | RA | I | | Gestire i certificati SSL/TLS per il servizio Kubernetes | C | RA* | -| Gestire i certificati SSL/TLS per le applicazioni | RA | I | -| Implementare e gestire il controllo degli accessi basato sui ruoli base (RBAC) | C | R* | -| Implementare e gestire il controllo degli accessi basato sui ruoli del cliente (RBAC) | RA | I | +| Gestire i certificati SSL/TLS per le applicazioni | RA | I | +| Implementare e gestire il controllo degli accessi basato sui ruoli di base (RBAC)| C | R* | +| Implementare e gestire il controllo degli accessi basato sui ruoli client (RBAC) | RA | I | -(*): *Solo Cluster di Produzione. In Dev/Test il cliente è completamente autonomo e responsabile.* +(*) : *Solo cluster di produzione. In Dev/Test il cliente è completamente autonomo e responsabile.* -### Backup e Ripristino di Emergenza +### Backup e ripristino di emergenza | **Attività** | **Cliente** | **Cloud Temple** | |---|---|---| -| Definire la strategia di backup per il servizio Kubernetes | I | RA | -| Implementare e gestire i backup del servizio Kubernetes | I | RA | -| Definire la strategia di backup per le applicazioni | RA* | I* | -| Implementare e gestire i backup delle applicazioni | RA* | I* | -| Testare le procedure di ripristino di emergenza per il servizio Kubernetes | CI | RA | -| Testare le procedure di ripristino di emergenza per le applicazioni | RA* | CI* | +| Definire la strategia di backup per il servizio Kubernetes | I | RA | +| Implementare e gestire i backup del servizio Kubernetes | I | RA | +| Definire la strategia di backup per le applicazioni | RA* | I* | +| Implementare e gestire i backup delle applicazioni | RA* | I* | +| Testare le procedure di ripristino di emergenza per il servizio Kubernetes | CI | RA | +| Testare le procedure di ripristino di emergenza per le applicazioni | RA* | CI* | -*può passare a "CI | RA" in base al contratto di servizi gestiti +*può passare a "CI | RA" in base al contratto di gestione -### Supporto e Risoluzione dei Problemi +### Supporto e risoluzione dei problemi | **Attività** | **Cliente** | **Cloud Temple** | |---|---|---| -| Fornire supporto di livello 1 per l'infrastruttura | I | RA | -| Fornire supporto di livello 2 e 3 per l'infrastruttura | I | RA | -| Risolvere i problemi relativi al servizio Kubernetes | C | RA | -| Risolvere i problemi relativi alle applicazioni | RA | I | +| Fornire supporto di livello 1 per l'infrastruttura | I | RA | +| Fornire supporto di livello 2 e 3 per l'infrastruttura | I | RA | +| Risolvere i problemi relativi al servizio Kubernetes | C | RA | +| Risolvere i problemi relativi alle applicazioni | RA | I | -### Gestione della Capacità ed Evoluzione +### Gestione delle capacità e dell'evoluzione -*Solo Cluster di Produzione. In Dev/Test il cliente è completamente autonomo e responsabile.* +*Solo per il cluster di produzione. In Dev/Test il cliente è completamente autonomo e responsabile.* | **Attività** | **Cliente** | **Cloud Temple** | |---|---|---| -| Monitorare l'utilizzo delle risorse Kubernetes | C | RA | -| Pianificare l'evoluzione della capacità del servizio | RA | C | -| Implementare i cambiamenti di capacità | I | RA | -| Gestire l'evoluzione delle applicazioni e delle loro risorse | RA | I | +| Monitorare l'utilizzo delle risorse Kubernetes | C | RA | +| Pianificare l'evoluzione delle capacità del servizio | RA | C | +| Implementare le modifiche alle capacità | I | RA | +| Gestire l'evoluzione delle applicazioni e delle relative risorse | RA | I | -### Documentazione e Conformità +### Documentazione e conformità | **Attività** | **Cliente** | **Cloud Temple** | |---|---|---| -| Mantenere la documentazione del servizio Kubernetes | I | RA | +| Mantenere la documentazione del prodotto Kubernetes | I | RA | | Mantenere la documentazione delle applicazioni | RA | I | | Garantire la conformità del servizio Kubernetes | I | RA | | Garantire la conformità delle applicazioni | RA | I | | Effettuare audit del servizio Kubernetes | I | RA | | Effettuare audit delle applicazioni | RA | I | -### Gestione degli Operatori/CRD Kubernetes (incluso nell'offerta) +### Gestione degli operatori/CRD Kubernetes (inclusi nel prodotto) | **Attività** | **Cliente** | **Cloud Temple** | |---|---|---| -| Messa a disposizione del catalogo di Operatori predefinito | CI | RA | -| Aggiornamento degli Operatori | CI | RA | -| Monitoraggio dello stato degli Operatori | CI | RA | -| Risoluzione dei problemi relativi agli Operatori | CI | RA | -| Gestione delle autorizzazioni degli Operatori | CI | RA | -| Gestione delle risorse degli Operatori (aggiunta/rimozione) | CI | RA | -| Backup dei dati delle risorse degli Operatori | CI | RA | -| Supervisione delle risorse degli Operatori | CI | RA | -| Ripristino dei dati delle risorse degli Operatori | CI | RA | -| Audit di sicurezza degli Operatori | CI | RA | -| Supporto degli Operatori | CI | RA | -| Gestione delle licenze degli operatori | CI | RA | +| Fornitura del catalogo predefinito degli operatori | CI | RA | +| Aggiornamento degli operatori | CI | RA | +| Monitoraggio dello stato degli operatori | CI | RA | +| Risoluzione dei problemi relativi agli operatori | CI | RA | +| Gestione delle autorizzazioni degli operatori | CI | RA | +| Gestione delle risorse degli operatori (aggiunta/rimozione) | CI | RA | +| Backup dei dati delle risorse degli operatori | CI | RA | +| Supervisione delle risorse degli operatori | CI | RA | +| Ripristino dei dati delle risorse degli operatori | CI | RA | +| Audit di sicurezza degli operatori | CI | RA | +| Supporto degli operatori | CI | RA | +| Gestione delle licenze per gli operatori | CI | RA | | Gestione dei piani di supporto specifici per gli operatori | CI | RA | -*Pacchetto operatori incluso su Managed Kube - vedere capitoli: Pacchetti Helm Gestiti +*Pacchetto operatore incluso su Managed Kube - vedere capitoli: Pacchetti Helm gestiti -### Gestione delle Applicazioni/Operatori/CRD Kubernetes del Cliente +### Gestione delle applicazioni/operatori/CRD Kubernetes (del cliente) -*Solo Cluster di Produzione. In Dev/Test il cliente è completamente autonomo e responsabile.* +*Solo cluster di produzione. In ambiente Dev/Test il cliente è completamente autonomo e responsabile.* | **Attività** | **Cliente** | **Cloud Temple** | |---|---|---| -| Distribuzione delle CRD | I* | RA* | +| Distribuzione delle CRDs | I* | RA* | | Aggiornamento degli Operatori | RA | I | | Monitoraggio dello stato degli Operatori | RA | I | -| Risoluzione dei problemi relativi agli Operatori | RA | I | +| Risoluzione dei problemi legati agli Operatori | RA | I | | Gestione delle autorizzazioni degli Operatori | RA | I | | Gestione delle risorse degli Operatori (aggiunta/rimozione) | RA | I | | Backup dei dati delle risorse degli Operatori | RA | I | @@ -286,23 +286,23 @@ Per una versione "dev/test", vengono distribuiti le seguenti macchine: | Ripristino dei dati delle risorse degli Operatori | RA | I | | Audit di sicurezza degli Operatori | RA | I | | Supporto degli Operatori | RA | I | -| Gestione delle licenze degli operatori | RA | I | -| Gestione dei piani di supporto specifici per gli operatori | RA | I | +| Gestione delle licenze per gli operatori | RA | I | +| Gestione dei piani di supporto specifici per gli operatori | RA | I | -Alcuni servizi degli operatori possono essere coperti in base al contratto di servizi gestiti. +Alcuni servizi relativi agli operatori possono essere assunti in base al contratto di gestione. -*può passare a "A | RC" in base al contratto di servizi gestiti +*può passare a "A | RC" in base al contratto di gestione -### Assistenza Applicativa +### Assistenza applicativa | **Attività** | **Cliente** | **Cloud Temple** | |---|---|---| -| Assistenza applicativa (servizio esterno) | RA | I | +| Assistenza applicativa (prestazione esterna) | RA | I | -Il supporto applicativo può essere fornito tramite un servizio aggiuntivo. +Un supporto applicativo può essere fornito tramite una prestazione aggiuntiva. -### RACI (sintesi) +### RACI (sintetica) -- Cloud Temple: responsabile e attore (RA) della base Kubernetes, sicurezza del cluster, backup infrastruttura, supervisione, CRD. -- Cliente: responsabile e attore (RA) dei progetti applicativi, operatori aziendali, pipeline CI/CD, backup applicativi. -- Zona "grigia": adattamenti ed estensioni (IAM, operatori specifici, irrigidimento della conformità/sicurezza del cluster) - fatturati in modalità progetto. +- Cloud Temple : responsabile ed esecutore (RA) dell'infrastruttura Kubernetes, sicurezza del cluster, backup infrastrutturale, monitoraggio, CRD. +- Cliente : responsabile ed esecutore (RA) dei progetti applicativi, operatori di business, pipeline CI/CD, backup applicativi. +- Zona "grigia" : adattamenti ed estensioni (IAM, operatori specifici, hardening della conformità/sicurezza del cluster) - fatturate a progetto. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/images/archi_overview.png b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/images/archi_overview.png deleted file mode 100644 index a0ecba5f36d045212649820e04a16a87d0c81c2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114801 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
  • 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
      JF!xt(T+wcG!jghN_A!?IREjJq23_ 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 diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/images/archi_overview_1az.png b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/images/archi_overview_1az.png deleted file mode 100644 index ce2b1f09bba3e76a7f16c4299bbade0fcc380852..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81762 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 diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/images/cillium.png b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/images/cillium.png deleted file mode 100644 index ae41ac76111528c40edad8308ffccc9a011bf1b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108152 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�K@= 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

      n1E>lrnQo5P9U^YZ8`^lmslZkPe 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

      x9=y$Q%dvl+XkI)t>}yVR#H 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�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

      Guida introduttiva

      -

      Iniziate rapidamente seguendo istruzioni chiare e semplici.

      - Avviare il Quickstart → +

      Inizia rapidamente seguendo istruzioni chiare e semplici.

      + Avvia il Quickstart →

      Tutorial

      -

      Imparate passo dopo passo a configurare e utilizzare i nostri servizi con guide dettagliate.

      - Scoprire i tutorial → +

      Impara passo dopo passo a configurare e utilizzare i nostri servizi con guide dettagliate.

      + Scopri i tutorial →
      -Managed **Core** Kubernetes by Cloud Temple è una soluzione di orchestrazione di container basata su una selezione di prodotti Open Source, progettata per offrire uno strato base sicuro, resiliente e automatizzato sulle piattaforme SecNumCloud di Cloud Temple. Ogni cluster viene distribuito in un ambiente IaaS di Cloud Temple interamente dedicato al cliente. +Managed **Core** Kubernetes di Cloud Temple è una soluzione di orchestrazione di container basata su una selezione di prodotti Open Source, progettata per offrire una piattaforma di base sicura, resiliente e automatizzata sulle piattaforme SecNumCloud di Cloud Temple. Ogni cluster viene distribuito in un ambiente IaaS Cloud-Temple interamente dedicato al cliente. -Questa offerta è progettata per team con un'eccellente padronanza di Kubernetes e degli strumenti Cloud Native, che desiderano costruire la propria piattaforma su fondamenta minimaliste e robuste. Si rivolge agli appassionati dell'open source che cercano una soluzione essenziale, portabile, senza sovrastrutture del fornitore, su un OS minimalista e immutabile progettato per l'automazione e la sicurezza. +Questo prodotto è progettato per team che padroneggiano eccellentemente Kubernetes e gli strumenti Cloud Native, che desiderano costruire la propria piattaforma su fondamenta minimaliste e robuste. Si rivolge agli appassionati di open source che cercano una soluzione pulita, portabile, senza layer costruttore, su un OS minimalista e immutabile progettato per l'automazione e la sicurezza. ### Benefici Chiave -- **Sovranità e Reversibilità**: La soluzione si basa esclusivamente su standard open source (Kubernetes CNCF) per evitare qualsiasi dipendenza tecnologica e garantire la portabilità delle applicazioni. -- **Sicurezza "Zero-Trust" by design**: L'architettura si basa su Talos OS, un sistema operativo immutabile senza accesso diretto (né shell, né SSH), il che riduce drasticamente la superficie di attacco e costituisce una base solida per una strategia di sicurezza "Zero-Trust". -- **Fondamenta di rete moderne**: L'integrazione di Cilium per il CNI e MetalLB per l'esposizione dei servizi fornisce una base di rete performante e standard, pronta ad accogliere i vostri componenti di sicurezza e filtraggio. +- **Sovranità e Reversibilità** : La soluzione si basa esclusivamente su standard open source (Kubernetes CNCF) per evitare qualsiasi dipendenza tecnologica e garantire la portabilità delle vostre applicazioni. +- **Sicurezza "Zero-Trust" by design** : L'architettura si basa su Talos OS, un sistema operativo immutabile senza accesso diretto (né shell, né SSH), il che riduce drasticamente la superficie di attacco e costituisce una base solida per una strategia di sicurezza "Zero-Trust". +- **Fondamenta di rete moderne** : L'integrazione di Cilium per il CNI e MetalLB per l'esposizione dei servizi fornisce una base di rete performante e standard, pronta ad accogliere i vostri componenti di sicurezza e filtraggio. -### Una piattaforma base pronta per essere estesa +### Una piattaforma di base pronta per essere estesa -L'offerta "Managed Core" include nativamente uno stack minimo e coerente di strumenti open source all'avanguardia per fornirvi le fondamenta di un cluster Kubernetes: +L'offerta "Managed Core" include nativamente uno stack minimo e coerente di strumenti open source all'avanguardia per fornirti le fondamenta di un cluster Kubernetes : -- **OS e Rete**: Talos, Cilium, MetalLB +- **OS e Rete** : Talos, Cilium, MetalLB -A partire da questa base, siete liberi di integrare i vostri strumenti per il continuous deployment, l'observability, il backup e la gestione dei costi. +A partire da questa base, sei libero di integrare i tuoi strumenti per il deployment continuo, l'osservabilità, il backup e la gestione dei costi. --- -## Architetture di Distribuzione +## Architetture di Deploy -Offriamo due architetture distinte per soddisfare le vostre esigenze, sia per ambienti di sviluppo che per produzioni critiche. +Proponiamo due architetture distinte per soddisfare le vostre esigenze, sia per ambienti di sviluppo che di produzione critici. ### Architettura "Dev/Test" -Ideale per ambienti POC, questa architettura compatta distribuisce tutte le risorse all'interno di una singola zona di disponibilità (AZ). +Ideale per gli ambienti POC, questa architettura compatta distribuisce tutte le risorse all'interno di una singola zona di disponibilità (AZ). -- **Casi d'uso**: Sviluppo, test, proof-of-concept (POC). -- **Punti chiave**: +- **Caso d'uso** : Sviluppo, test, proof-of-concept (POC). +- **Punti chiave** : - 1 nodo Control Plane. - - 3 nodi Worker (o più). - - Nessun SLA di alta disponibilità. - - Nessuna restrizione di sicurezza. + - 3 nodi Workers (o più). + - Non beneficia di SLA di alta disponibilità. + - nessuna restrizione di sicurezza -Architettura Mono-AZ +Architecture Mono-AZ ### Architettura di Produzione (Multi-AZ) -Progettata per la produzione e le applicazioni critiche, questa architettura distribuisce le risorse su tre zone di disponibilità (AZ) per garantire alta disponibilità e massima resilienza, in conformità con i requisiti SecNumCloud. +Progettata per la produzione e le applicazioni critiche, questa architettura distribuisce le risorse su tre zone di disponibilità (AZ) per garantire un'alta disponibilità e una resilienza massima, in conformità con i requisiti SecNumCloud. -- **Casi d'uso**: Applicazioni di produzione, servizi critici, piattaforme che richiedono un SLA. -- **Punti chiave**: - - **Alta Disponibilità**: 3 nodi Control Plane distribuiti su 3 AZ. - - **Worker Distribuiti**: Almeno 3 nodi worker, uno per AZ. - - **Nodi Bare Metal (Opzionale)**: Possibile integrazione di nodi worker di tipo **"Bare Metal"** per esigenze di prestazioni specifiche, in particolare il **supporto GPU**. - - **SLA del 99,90%**. +- **Caso d'uso** : Applicazioni di produzione, servizi critici, piattaforme che richiedono un SLA. +- **Punti chiave** : + - **Alta Disponibilità** : 3 nodi Control Plane distribuiti su 3 AZ. + - **Worker Distribuiti** : Almeno 3 nodi worker, uno per AZ. + - **Nodi Bare Metal (Optionnel)** : Possibilità di integrare nodi worker di tipo **"Bare Metal"** per esigenze di prestazioni specifiche, in particolare il **supporto GPU**. + - **SLA del 99.90%**, misurato mensilmente. -Architettura Multi-AZ +Architecture Multi-AZ --- @@ -78,7 +80,7 @@ Progettata per la produzione e le applicazioni critiche, questa architettura dis L'offerta "Managed Core" include i seguenti componenti: -- **Sistema operativo**: Talos OS -- **Archiviazione**: Rook-Ceph -- **CNI (Container Network Interface)**: Cilium -- **Load Balancer**: MetalLB +- **Sistema operativo** : Talos OS +- **Archiviazione** : Rook-Ceph +- **CNI (Container Network Interface)** : Cilium +- **Bilanciamento del carico** : MetalLB \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md index 7133f2ab..aea0b48b 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md @@ -1,81 +1,81 @@ --- -title: Panoramica di Managed Kubernetes +title: Panoramica --- -# Managed Kubernetes +# Kubernetes gestito

      Concetti

      -

      Scoprite le basi e i principi essenziali per padroneggiare la nostra infrastruttura.

      - Esplorare i concetti → +

      Scopri le basi e i principi essenziali per padroneggiare la nostra infrastruttura.

      + Esplora i concetti →

      Guida introduttiva

      -

      Iniziate rapidamente seguendo istruzioni chiare e semplici.

      - Avviare il Quickstart → +

      Inizia rapidamente seguendo istruzioni chiare e semplici.

      + Avvia il Quickstart →

      Tutorial

      -

      Imparate passo dopo passo a configurare e utilizzare i nostri servizi con guide dettagliate.

      - Scoprire i tutorial → +

      Impara passo dopo passo a configurare e utilizzare i nostri servizi con guide dettagliate.

      + Scopri i tutorial →
      -Managed Kubernetes by Cloud Temple è una soluzione di orchestrazione di container basata su prodotti Open Source, progettata per offrire un alto livello di sicurezza, resilienza e automazione sulle piattaforme SecNumCloud di Cloud Temple. Ogni cluster viene distribuito in un ambiente IaaS di Cloud Temple interamente dedicato al cliente. +Kubernetes gestito da Cloud Temple è una soluzione di orchestrazione di container basata su prodotti open source e progettata per offrire un elevato livello di sicurezza, resilienza e automazione sulle piattaforme SecNumcloud di Cloud Temple. Ogni cluster viene distribuito in un ambiente IaaS Cloud-Temple interamente dedicato al cliente. -Questa offerta è progettata per team con una buona conoscenza di Kubernetes e gli appassionati dell'open source che cercano una soluzione nativa, portabile, senza sovrastrutture del fornitore, su un OS minimalista e immutabile progettato per l'automazione e la sicurezza. +Questo prodotto è progettato per team con una buona conoscenza di Kubernetes e per gli appassionati di open source che cercano una soluzione nativa, portabile, senza layer proprietario, su un OS minimalista e immutabile progettato per automazione e sicurezza. ### Benefici Chiave -- **Sovranità e Reversibilità**: La soluzione si basa su standard open source (Kubernetes CNCF) per evitare qualsiasi dipendenza tecnologica e garantire la portabilità delle applicazioni. Lo strumento di backup Veeam Kasten, incluso nell'offerta, è specificamente progettato per facilitare le migrazioni da un cloud all'altro. -- **Sicurezza "Zero-Trust" e Governance**: L'architettura si basa su Talos OS, un sistema operativo immutabile senza accesso diretto (né shell, né SSH), il che riduce drasticamente la superficie di attacco. Questo approccio è abbinato a strumenti di governance come Kyverno per la gestione delle policy e Capsule per la gestione granulare dei diritti, costituendo una base solida per una strategia di sicurezza "Zero-Trust". -- **Controllo dei Costi e Integrazione**: La soluzione integra nativamente strumenti FinOps come OpenCost per un monitoraggio preciso dei consumi. Il modello economico è trasparente, basato sulle risorse IaaS consumate, e l'utilizzo di componenti open source riconosciuti (Cilium, Ceph, ArgoCD) facilita l'integrazione nei vostri ecosistemi esistenti. +- **Sovranità e Reversibilità** : La soluzione si basa su standard open source (Kubernetes CNCF) per evitare qualsiasi dipendenza tecnologica e garantire la portabilità delle vostre applicazioni. Lo strumento di backup Veeam Kasten, incluso nel prodotto, è appositamente progettato per facilitare le migrazioni da un cloud all'altro. +- **Sicurezza "Zero-Trust" e Governance** : L'architettura si basa su Talos OS, un sistema operativo immutabile senza accesso diretto (né shell, né SSH), il che riduce drasticamente la superficie di attacco. Questo approccio è affiancato da strumenti di governance come Kyverno per la gestione delle policy e Capsule per la gestione fine dei permessi, costituendo una base solida per una strategia di sicurezza "Zero-Trust". +- **Controllo dei Costi e Integrazione** : La soluzione integra nativamente strumenti di FinOps come OpenCost per un monitoraggio preciso dei consumi. Il modello economico è trasparente, basato sulle risorse IaaS consumate, e l'utilizzo di componenti open source riconosciuti (Cilium, Ceph, ArgoCD) facilita l'integrazione nei vostri ecosistemi esistenti. ### Una piattaforma completa e pronta all'uso La soluzione include nativamente uno stack completo e coerente di strumenti open source all'avanguardia per coprire tutte le esigenze del ciclo di vita delle applicazioni: -- **Rete e Sicurezza**: Cilium, Hubble, MetalLB, Ingress Nginx, Kyverno, Capsule -- **Archiviazione**: Rook-Ceph -- **Continuous Deployment (GitOps)**: ArgoCD -- **Observability**: Prometheus, Grafana, Loki -- **Backup e Migrazione**: Veeam Kasten -- **Gestione dei Costi (FinOps)**: OpenCost +- **Rete e Sicurezza** : Cilium, Hubble, MetalLB, Ingress Nginx, Kyverno, Capsule +- **Archiviazione** : Rook-Ceph +- **Deployment Continuo (GitOps)** : ArgoCD +- **Osservabilità** : Prometheus, Grafana, Loki +- **Backup e Migrazione** : Veeam Kasten +- **Gestione dei Costi (FinOps)** : OpenCost --- -## Architetture di Distribuzione +## Architetture di Deploy -Offriamo due architetture distinte per soddisfare le vostre esigenze, sia per ambienti di sviluppo che per produzioni critiche. +Proponiamo due architetture distinte per soddisfare le vostre esigenze, sia per ambienti di sviluppo che di produzione critici. ### Architettura "Dev/Test" -Ideale per ambienti POC, questa architettura compatta distribuisce tutte le risorse all'interno di una singola zona di disponibilità (AZ). +Ideale per gli ambienti POC, questa architettura compatta distribuisce tutte le risorse all'interno di una singola zona di disponibilità (AZ). -- **Casi d'uso**: Sviluppo, test, proof-of-concept (POC). -- **Punti chiave**: +- **Caso d'uso** : Sviluppo, test, proof-of-concept (POC). +- **Punti chiave** : - 1 nodo Control Plane. - - 3 nodi Worker (o più). - - Lo storage distribuito (Ceph) è co-localizzato sui nodi worker. - - Nessun SLA di alta disponibilità. - - Nessuna restrizione di sicurezza. + - 3 nodi Workers (ou plus). + - Lo storage distribuito (Ceph) è co-localizzato sui nodi workers. + - Non beneficia di un SLA di alta disponibilità. + - Nessuna restrizione di sicurezza -Architettura Mono-AZ +Architecture Mono-AZ ### Architettura di Produzione (Multi-AZ) -Progettata per la produzione e le applicazioni critiche, questa architettura distribuisce le risorse su tre zone di disponibilità (AZ) per garantire alta disponibilità e massima resilienza, in conformità con i requisiti SecNumCloud. +Progettata per la produzione e le applicazioni critiche, questa architettura distribuisce le risorse su tre zone di disponibilità (AZ) per garantire un'alta disponibilità e una resilienza massima, in conformità ai requisiti SecNumCloud. -- **Casi d'uso**: Applicazioni di produzione, servizi critici, piattaforme che richiedono un SLA. -- **Punti chiave**: - - **Alta Disponibilità**: 3 nodi Control Plane distribuiti su 3 AZ. - - **Storage Dedicato**: 3 nodi di storage dedicati e distribuiti per prestazioni e resilienza. - - **Worker Distribuiti**: Almeno 3 nodi worker, uno per AZ. - - **Nodi Bare Metal (Opzionale)**: Possibile integrazione di nodi worker di tipo **"Bare Metal"** per esigenze di prestazioni specifiche, in particolare il **supporto GPU**. +- **Caso d'uso** : Applicazioni di produzione, servizi critici, piattaforme che richiedono un SLA. +- **Punti chiave** : + - **Alta Disponibilità** : 3 nodi Control Plane distribuiti su 3 AZ. + - **Archiviazione Dedicata** : 3 nodi di archiviazione dedicati e distribuiti per prestazioni e resilienza. + - **Nodi Worker Distribuiti** : Almeno 3 nodi worker, uno per AZ. + - **Nodi Bare Metal (Opzionale)** : Possibilità di integrare nodi worker di tipo **"Bare Metal"** per esigenze di prestazioni specifiche, in particolare il **supporto delle GPU**. - **SLA del 99,90%**. -Architettura Multi-AZ +Architecture Multi-AZ --- @@ -83,14 +83,14 @@ Progettata per la produzione e le applicazioni critiche, questa architettura dis L'offerta include in dettaglio i seguenti componenti: -- CNI Cilium, con interfaccia di observability (Hubble) +- CNI Cilium, con interfaccia di osservabilità (Hubble) - Ingress interni ed esterni MetalLB e nginx - Storage distribuito Rook-Ceph - Cert-Manager - ArgoCD - Stack Prometheus (Prometheus, Grafana, Loki) -- Container registry Harbor +- Registro container Harbor - Gestione dei costi con OpenCost -- Policy di sicurezza avanzate con Kyverno e Capsule +- Strategie di sicurezza avanzate con Kyverno e Capsule - Veeam Kasten (backup, automazioni tra ambienti e reversibilità) -- Autenticazione SSO con un Identity Provider esterno OIDC (Microsoft Entra, FranceConnect, Okta, AWS IAM, Google, Salesforce, ...) +- Autenticazione SSO con un Identity Provider esterno OIDC (Microsoft Entra, FranceConnect, Okta, AWS IAM, Google, Salesforce, ...) \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/quickstart.md b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/quickstart.md index 77c8d5f8..6af59509 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/quickstart.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/quickstart.md @@ -1,82 +1,86 @@ --- -title: Guida Introduttiva +title: Guida introduttiva --- -Benvenuti nella guida introduttiva di **Managed Kubernetes** di Cloud Temple. +Benvenuti nella guida introduttiva di **Managed Kubernetes** Cloud Temple. -L'obiettivo di questa sezione è indirizzarvi verso le risorse necessarie per prendere in mano il vostro cluster. +L'obiettivo di questa sezione è indirizzarvi verso le risorse necessarie per iniziare a utilizzare il vostro cluster. --- -## Prima di Iniziare +## Prima di iniziare -Per interagire con il vostro cluster, sono indispensabili diversi elementi: +Per interagire con il tuo cluster, sono indispensabili diversi elementi: -1. **Il file `kubeconfig`**: Questo file, che vi viene fornito dai team di Cloud Temple alla consegna del servizio, contiene tutte le informazioni per connettersi in modo sicuro. -2. **Lo strumento `kubectl`**: È l'interfaccia a riga di comando standard per gestire un cluster Kubernetes. -3. **Lo strumento `kubelogin`** (se viene utilizzato OIDC): Se il vostro cluster è configurato per autenticarsi tramite un provider di identità OIDC (come Entra ID/Azure AD), dovete installare lo strumento `kubelogin` per gestire il flusso di autenticazione. Seguite la [guida all'installazione di kubelogin](https://github.com/int128/kubelogin). +1. **Il file `kubeconfig`** : Questo file, fornito dai team Cloud Temple al momento della consegna del servizio, contiene tutte le informazioni necessarie per connettersi in modo sicuro. +2. **Lo strumento `kubectl`** : Si tratta dell'interfaccia a riga di comando standard per gestire un cluster Kubernetes. +3. **Lo strumento `kubelogin`** (se OIDC è utilizzato) : Se il tuo cluster è configurato per l'autenticazione tramite un fornitore di identità OIDC (come Entra ID/Azure AD), devi installare lo strumento `kubelogin` per gestire il flusso di autenticazione. Segui la [guida all'installazione di kubelogin](https://github.com/int128/kubelogin). -:::info[Strumenti grafici consigliati:] -Per un'esperienza più visiva e una gestione semplificata delle vostre risorse, vi consigliamo l'utilizzo di **Lens**. È uno strumento potente per Kubernetes che vi permette di esplorare il vostro cluster, gestire le vostre applicazioni e visualizzarne lo stato in modo grafico. -Alcuni dei nostri tutorial utilizzeranno Lens per illustrare le operazioni. Potete scaricarlo qui: [https://k8slens.dev/](https://k8slens.dev/). +:::info[Strumenti grafici consigliati: +] +Per un'esperienza più visiva e una gestione semplificata delle tue risorse, consigliamo l'uso di **Lens**. È uno strumento potente per Kubernetes che ti permette di esplorare il tuo cluster, gestire le tue applicazioni e visualizzare il loro stato in modo grafico. +Alcuni dei nostri tutorial utilizzeranno Lens per illustrare le operazioni. Puoi scaricarlo qui : [https://k8slens.dev/](https://k8slens.dev/). ::: --- -## Accedere al Vostro Cluster Kubernetes Gestito +## Accedere al tuo cluster Kubernetes gestito -Il vostro cluster di produzione è identificato da un codice a 5 lettere (6 lettere in Dev/Test). Questo codice viene utilizzato per costruire gli URL delle varie interfacce. Nei tutorial, utilizzeremo **"ctodev"**. +Il tuo cluster di produzione è identificato da un codice di 5 lettere (6 lettres en Dev/Test). Questo codice viene utilizzato per costruire gli URL delle diverse interfacce. Nei tutorial, utilizzeremo **"ctodev"**. Gli URL sono: -- API Kubernetes (utilizzata nel kubeconfig): - - **identificatore**.mk.ms-cloud-temple.com:6443 (quindi nel nostro esempio: [https://ctodev.mk.ms-cloud-temple.com:6443](https://ctodev.mk.ms-cloud-temple.com:6443) ) +- API Kubernetes (utilisée dans kubeconfig): + - **identifiant**.mk.ms-cloud-temple.com:6443 (donc dans notre exemple: [https://ctodev.mk.ms-cloud-temple.com:6443](https://ctodev.mk.ms-cloud-temple.com:6443) ) -- URL pubblici: - - k10.external-secured.**identificatore**.mk.ms-cloud-temple.com - - grafana.external-secured.**identificatore**.mk.ms-cloud-temple.com - - harbor.external-secured.**identificatore**.mk.ms-cloud-temple.com - - opencost.external-secured.**identificatore**.mk.ms-cloud-temple.com - - opencost-mcp.external-secured.**identificatore**.mk.ms-cloud-temple.com +- URL publics : + - k10.external-secured.**identifiant**.mk.ms-cloud-temple.com + - grafana.external-secured.**identifiant**.mk.ms-cloud-temple.com + - harbor.external-secured.**identifiant**.mk.ms-cloud-temple.com + - opencost.external-secured.**identifiant**.mk.ms-cloud-temple.com + - opencost-mcp.external-secured.**identifiant**.mk.ms-cloud-temple.com -:::info[URL sicuri] -Gli URL sopra indicati sono accessibili solo da IP pubblici noti, configurati nel firewall della soluzione. Se desiderate aggiungere un IP pubblico, è necessario inviare una richiesta di supporto. +:::info[url sécurisées +] +Gli URL sopra elencati sono accessibili solo da IP pubblici noti, configurati nel firewall della soluzione. Se desideri aggiungere un IP pubblico, è necessario inviare una richiesta di supporto. ::: -- URL interni: - - ceph.internal.**identificatore**.mk.ms-cloud-temple.com - - argocd.internal.**identificatore**.mk.ms-cloud-temple.com - - hubble.internal.**identificatore**.mk.ms-cloud-temple.com +- URL interni : + - ceph.internal.**identifiant**.mk.ms-cloud-temple.com + - argocd.internal.**identifiant**.mk.ms-cloud-temple.com + - hubble.internal.**identifiant**.mk.ms-cloud-temple.com -:::info[URL interni] -Gli URL sopra indicati non sono esposti su Internet. Sono accessibili solo sulla rete interna di Managed Kubernetes. +:::info[url internes +] +Gli URL sopra elencati non sono esposti su Internet. Sono accessibili solo sulla rete interna di Kubernetes gestito. ::: --- -## Le Vostre Autorizzazioni +## Le tue autorizzazioni -:::warning[Dev/Test] -Per i cluster Managed Kubernetes **"Dev/Test"**, l'account di servizio che vi è stato fornito dispone di tutte le autorizzazioni sull'intero cluster (ClusterAdmin) +:::warning[Dev/Test +] +Per i cluster Kubernetes gestiti **"Dev/Test"**, l'account di servizio fornito dispone di tutti i permessi sull'intero cluster (ClusterAdmin) ::: -Sui cluster di **"Produzione"**, le vostre autorizzazioni sono limitate. Disponete di un diritto di **"Viewer Esteso"** sulle risorse del cluster. Questo diritto concede un accesso in sola lettura alle risorse chiave, sia a livello di cluster che per la diagnostica: +Sui cluster **"Production"**, le tue autorizzazioni sono limitate. Disponi di un diritto **"Viewer Esteso"** sulle risorse del cluster. Tale diritto concede un accesso in sola lettura a risorse chiave, sia a livello di cluster che per il diagnostico: -- Namespaces: consentono ai tenant di elencare gli spazi dei nomi per gli strumenti e i dashboard. -- Pod, deployment, replicaset...: consentono ai tenant di elencare le risorse distribuite sul cluster. -- Nodes: offrono visibilità sulla capacità, i taint e le label dei nodi per comprendere il comportamento dello scheduler. -- StorageClass, PV, PVC, VolumeAttachment e CSIDriver: consentono ai tenant di identificare le storage class disponibili e di risolvere i problemi di associazione tra PVC e PV o gli errori relativi ai driver CSI. -- IngressClass: informano gli utenti sui controller di ingress disponibili per il routing delle applicazioni. -- NetworkPolicy, ResourceQuota, LimitRange ed Event: essenziali per diagnosticare le restrizioni di rete, i fallimenti di scheduling o le violazioni delle quote di risorse. +- Namespaces: consentono agli inquilini di elencare gli spazi dei nomi per strumenti e dashboard. +- Pods, deployments, replicaset...: consentono agli inquilini di elencare le risorse distribuite sul cluster. +- Nodes: offrono visibilità sulla capacità, i taints e i labels dei nodi per comprendere il comportamento dello scheduler. +- StorageClasses, PVs, PVCs, VolumeAttachments e CSIDrivers: consentono agli inquilini di identificare le classi di storage disponibili e risolvere i problemi di binding tra PVC e PV o gli errori relativi ai driver CSI. +- IngressClasses: informano gli utenti sui controller ingress disponibili per il routing delle applicazioni. +- NetworkPolicies, ResourceQuotas, LimitRanges ed Events: essenziali per diagnosticare restrizioni di rete, fallimenti di scheduling o violazioni dei quote di risorse. -L'account di servizio che vi è stato affidato è stato anche reso **proprietario di un primo *tenant* Capsule**. -Potete creare Namespace, che saranno associati al vostro tenant Capsule. -Gli account esterni (OIDC) sono membri dello stesso tenant Capsule, il che consente loro di interagire liberamente all'interno dei **namespace** associati al tenant. (Vedere il tutorial "Gestire le autorizzazioni con Capsule") +L'account di servizio che ti è stato assegnato è anche diventato **proprietario di un primo *tenant* Capsule**. +Puoi creare Namespaces, che verranno associati al tuo tenant Capsule. +Gli account esterni (OIDC) sono membri dello stesso tenant Capsule, il che consente loro di interagire liberamente all'interno dei **namespaces** associati al tenant. (Vedi la guida "Gestire le autorizzazioni con Capsule") Alcune azioni non sono consentite: -- elencare / creare tenant Capsule -- creare CRD: Se dovete distribuire un'applicazione con CRD (ad esempio un chart Helm di un operatore), dovrete interagire con il supporto affinché queste CRD vengano importate (tramite estrazione dei yaml dal chart Helm). Potrete quindi distribuire il vostro chart Helm con l'opzione --skip-crds. Vedere: [Documentazione di Helm 3](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/) +- elencare/creare tenant Capsule +- creare CRD: se devi distribuire un'applicazione con CRD (ad esempio un helm chart di un operatore), dovrai interagire con il supporto affinché queste CRD vengano importate (tramite estrazione degli yaml dal chart helm). Potrai successivamente distribuire il tuo chart helm con l'opzione --skip-crds. Vedi: [Documentazione Helm 3](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/) --- @@ -84,41 +88,41 @@ Alcune azioni non sono consentite:
      -

      Tutorial: Distribuire la Vostra Prima Applicazione

      +

      Guida: Distribuisci la tua prima applicazione

      - Seguite una guida dettagliata per connettervi, distribuire un'applicazione "Hello World" ed esporla su Internet. + Segui una guida dettagliata per connetterti, distribuire un'applicazione "Hello World" ed esporla su Internet.

      -

      Tutorial: Comprendere la Rete

      +

      Guida: Comprendere la rete

      - Scoprite il piano di indirizzamento, gli Ingress Controller e come esporre i vostri servizi in modo sicuro. + Scopri il piano di indirizzamento, gli Ingress Controller e come esporre i tuoi servizi in modo sicuro.

      -

      Tutorial: Gestire le Autorizzazioni con Capsule

      +

      Guida: Gestire le autorizzazioni con Capsule

      - Imparate a utilizzare Capsule per creare tenant e delegare autorizzazioni ai vostri team. + Impara a utilizzare Capsule per creare tenant e delegare le autorizzazioni ai tuoi team.

      @@ -126,4 +130,4 @@ Alcune azioni non sono consentite:
      - + \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/firstdeploy.md b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/firstdeploy.md index acdfa773..896a34db 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/firstdeploy.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/firstdeploy.md @@ -1,33 +1,33 @@ --- -title: Tutorial - Distribuire la prima applicazione +title: Tutorial - Distribuire la tua prima applicazione --- ## Obiettivi -Questo tutorial vi guida passo dopo passo nel vostro primo deployment su un cluster **Managed Kubernetes**. Al termine di questa guida, avrete: +Questo tutorial vi guida passo dopo passo per effettuare il vostro primo deployment su un cluster **Managed Kubernetes**. Al termine di questa guida, avrete: -- Distribuito una semplice applicazione web. -- Esposto tale applicazione all'interno del cluster tramite un Service. +- Distribuito un'applicazione web semplice. +- Esposto questa applicazione all'interno del cluster tramite un Service. - Reso l'applicazione accessibile da Internet tramite un Ingress. ## Prerequisiti -- Avete configurato l'accesso al cluster come descritto nella [guida introduttiva](../quickstart.md). -- Disponete di un namespace sul quale avete i diritti di deployment. In questo tutorial utilizzeremo un namespace chiamato `hello-world`. +- Hai configurato l'accesso al cluster come descritto nella [guida rapida](../quickstart.md). +- Disponi di un namespace su cui hai i diritti di distribuzione. In questo tutorial, utilizzeremo un namespace denominato `hello-world`. -## Passo 1: Creare un namespace +## Fase 1: Creare un namespace -Se non è già stato fatto, create un namespace per isolare la vostra applicazione. +Se non è già stato creato, crea un namespace per isolare la tua applicazione. ```bash kubectl create namespace hello-world ``` -## Passo 2: Distribuire un'applicazione "Hello World" +## Fase 2: Distribuire un'applicazione "Hello World" -Distribuiremo un'applicazione dimostrativa che mostra una semplice pagina web. +Distribuiremo un'applicazione dimostrativa che visualizza una semplice pagina web. -1. Create un file chiamato `deployment.yaml` con il seguente contenuto: +1. Crea un file denominato `deployment.yaml` con il contenuto seguente: ```yaml apiVersion: apps/v1 @@ -54,32 +54,32 @@ Distribuiremo un'applicazione dimostrativa che mostra una semplice pagina web. - containerPort: 80 ``` -2. Applicate questo manifest al vostro cluster: +2. Applica questo manifesto al tuo cluster: ```bash kubectl apply -f deployment.yaml ``` -3. Verificate che il deployment sia stato creato e che i pod siano in esecuzione: +3. Verifica che il deployment sia stato creato e che i pod siano in esecuzione: ```bash kubectl get deployment -n hello-world - # Dovreste vedere il vostro deployment con 2/2 repliche pronte. + # Vous devriez voir votre déploiement avec 2/2 replicas prêts. NAME READY UP-TO-DATE AVAILABLE AGE hello-world-deployment 2/2 2 2 102s kubectl get pods -n hello-world - # Dovreste vedere due pod con lo stato "Running". + # Vous devriez voir deux pods avec le statut "Running". NAME READY STATUS RESTARTS AGE hello-world-deployment-669dfbd799-294zz 1/1 Running 0 2m21s hello-world-deployment-669dfbd799-plcbg 1/1 Running 0 2m21s ``` -## Passo 3: Esporre l'applicazione all'interno del cluster (Service) +## Fase 3 : Esporre l'applicazione nel cluster (Service) -Per consentire ai vari componenti del cluster di comunicare con la nostra applicazione, dobbiamo creare un **Service**. +Per consentire ai diversi componenti del cluster di comunicare con la nostra applicazione, dobbiamo creare un **Service**. -1. Create un file chiamato `service.yaml`: +1. Crea un file denominato `service.yaml` : ```yaml apiVersion: v1 @@ -97,19 +97,19 @@ Per consentire ai vari componenti del cluster di comunicare con la nostra applic type: ClusterIP ``` -2. Applicate il manifest: +2. Applica il manifesto : ```bash kubectl apply -f service.yaml ``` - La vostra applicazione è ora accessibile tramite il nome `hello-world-service.hello-world` da qualsiasi altro pod nel cluster. + La tua applicazione è ora accessibile tramite il nome `hello-world-service.hello-world` da qualsiasi altro pod del cluster. -## Passo 4: Rendere l'applicazione accessibile da Internet (Ingress) +## Fase 4: Rendere l'applicazione accessibile da Internet (Ingress) -Per esporre il nostro servizio su Internet, utilizzeremo una risorsa **Ingress**. L'offerta Managed Kubernetes fornisce diversi `ingressClassName` preconfigurati. Utilizzeremo `nginx-external` per l'esposizione pubblica. +Per esporre il nostro servizio su Internet, utilizzeremo una risorsa **Ingress**. L'offerta Managed Kubernetes fornisce diversi `ingressClassName` preconfigurati. Utilizzeremo `nginx-external` per un'esposizione pubblica. -1. Create un file `ingress.yaml`. **Ricordate di sostituire `il-vostro-cluster-id`** con l'identificatore del vostro cluster (es. `ctodev`). +1. Crea un file `ingress.yaml`. **Ricorda di sostituire `votre-cluster-id`** con l'ID del tuo cluster (es: `ctodev`). ```yaml apiVersion: networking.k8s.io/v1 @@ -120,7 +120,7 @@ Per esporre il nostro servizio su Internet, utilizzeremo una risorsa **Ingress** spec: ingressClassName: nginx-external rules: - - host: "hello-world.external.il-vostro-cluster-id.mk.ms-cloud-temple.com" # modificatemi + - host: "hello-world.external.votre-cluster-id.mk.ms-cloud-temple.com" # changez moi http: paths: - path: / @@ -132,7 +132,7 @@ Per esporre il nostro servizio su Internet, utilizzeremo una risorsa **Ingress** number: 80 ``` -2. Applicate il manifest: +2. Applica il manifesto: ```bash kubectl apply -f ingress.yaml @@ -140,14 +140,14 @@ Per esporre il nostro servizio su Internet, utilizzeremo una risorsa **Ingress** ## Passo 5: Verificare l'accesso -Una voce DNS con carattere jolly punta già tutti gli URL che terminano con ".external.il-vostro-cluster-id.mk.ms-cloud-temple.com" all'IP dell'ingress "external". -Le applicazioni pubblicate su questo suffisso DNS sono quindi direttamente accessibili. +Una voce DNS "*" indirizza già tutti gli URL che terminano con ".external.votre-cluster-id.mk.ms-cloud-temple.com" all'IP del ingress "external". +le applicazioni pubblicate su questo suffisso DNS sono quindi direttamente accessibili. ```bash -curl http://hello-world.external.il-vostro-cluster-id.mk.ms-cloud-temple.com +curl http://hello-world.external.votre-cluster-id.mk.ms-cloud-temple.com ``` -Dovreste ricevere una risposta dal server NGINX di demo. +Dovresti ricevere una risposta dal server NGINX di demo. ```bash StatusCode : 200 @@ -168,20 +168,21 @@ RawContent : HTTP/1.1 200 OK Server: ng... ``` -:::warning[Andare oltre: sicurezza in produzione] -Questo tutorial vi ha mostrato le basi del deployment. Per un ambiente di produzione, è fondamentale applicare misure di sicurezza aggiuntive: +:::warning[Per approfondire: la sicurezza in produzione +] +Questo tutorial ti ha mostrato le basi del deployment. Per un ambiente di produzione, è fondamentale applicare ulteriori misure di sicurezza: -- **Utilizzate immagini sicure**: Preferite immagini provenienti dal vostro registro aziendale sicuro come **Harbor** piuttosto che immagini pubbliche. -- **Controllate i flussi di rete**: Implementate `NetworkPolicies` per limitare le comunicazioni ai soli flussi necessari tra le vostre applicazioni. -- **Applicate politiche di governance**: Utilizzate strumenti come **Kyverno** per imporre regole di sicurezza (es. vietare i container "root", richiedere `requests` e `limits` per le risorse, ecc.). +- **Utilizza immagini sicure** : Privilegia immagini provenienti dal tuo registro aziendale sicuro come **Harbor** anziché immagini pubbliche. +- **Controlla i flussi di rete** : Implementa `NetworkPolicies` per limitare le comunicazioni ai soli flussi necessari tra le tue applicazioni. +- **Applica politiche di governance** : Utilizza strumenti come **Kyverno** per imporre regole di sicurezza (es: vietare i container "root", richiedere `requests` e `limits` di risorse, ecc.). ::: ## Pulizia -Per eliminare tutte le risorse create durante questo tutorial, potete semplicemente eliminare il namespace: +Per eliminare tutte le risorse che hai creato durante questo tutorial, puoi semplicemente eliminare il namespace : ```bash kubectl delete namespace hello-world ``` -Congratulazioni, avete distribuito ed esposto la vostra prima applicazione su Managed Kubernetes! +Complimenti, hai distribuito ed esposto la tua prima applicazione su Managed Kubernetes ! \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/argocdguestbook.png b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/argocdguestbook.png deleted file mode 100644 index 1ebb7ab01b50dfc30c9cd5a7341ad5b822640771..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150815 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 IYWeoR03N|)<^TWy diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/cillium.png b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/cillium.png deleted file mode 100644 index ae41ac76111528c40edad8308ffccc9a011bf1b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108152 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 V1gV*?;Y+ANSzcZ4ovi8O{{VuEDS7|^ diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp.png b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp.png deleted file mode 100644 index a73ef0039a6e7693d3ced0ff6d123ca8b49d93c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 291688 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 z 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

      vs{UyxIC!?{58j2!bD$Q= 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

      ?-oV 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 z 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 z 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

      X6bsrg;O6@=l( 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%0DcbKP-B^Fm(4_aw`wxI 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 diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp2.png b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencostmcp2.png deleted file mode 100644 index 04b4e033b0a1515312f6f57023909a1860e27de1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22533 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 |d|Ec_+BV;3)d|`9V&n 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 M$K;N_k **Importante**: Questo range rimane **in uno spazio di indirizzamento privato**. Per un'**esposizione pubblica**, è necessario creare una **regola NAT (DNAT)** sul firewall della vostra infrastruttura per reindirizzare il traffico da uno dei vostri IP pubblici esterni all'indirizzo IP privato assegnato da MetalLB. +> **Importante**: Questo intervallo rimane **in uno spazio di indirizzamento privato**. Per un'**esposizione pubblica**, è necessario creare una **regola NAT (DNAT)** sul firewall della tua infrastruttura per reindirizzare il traffico da uno dei tuoi IP pubblici esterni verso l'indirizzo IP privato assegnato da MetalLB. -## IP Pubblici +## IP Pubbliche -Il vostro cluster Kubernetes Managed è stato consegnato con 2 indirizzi IPv4 pubblici. +Il cluster Kubernetes gestito è stato fornito con 2 indirizzi IPv4 pubblici. -Il 1° IP viene utilizzato sulla porta 6443 per l'API Kubernetes (nel nostro esempio ctodev.mk.ms-cloud-temple.com:6443) +La 1ª IP è utilizzata sulla porta 6443 per l'API Kubernetes (nel nostro esempio ctodev.mk.ms-cloud-temple.com:6443) -Questo stesso IP è anche NATato sull'ingress controller *"nginx-external-secured"* per la porta 443. Ciò consente l'esposizione delle varie console messe a vostra disposizione (vedere la guida introduttiva). L'accesso a questo IP pubblico è **filtrato** con un elenco di IP autorizzati. +Questa stessa IP è inoltre sottoposta a NAT sul controller ingress *"nginx-external-secured"* per la porta 443. Ciò consente l'esposizione delle diverse console messe a disposizione (vedere la guida quickstart). L'accesso a questa IP pubblica è **filtrato** tramite un elenco di IP autorizzati. --- -Il 2° IP pubblico è NATato sull'ingress controller *"nginx-external"*, sulle porte 80 e 443. +La 2ª IP pubblica è sottoposta a NAT sul controller ingress *"nginx-external"*, sulle porte 80 e 443. -Le applicazioni esposte con la ingress class *"nginx-external"* saranno quindi direttamente accessibili da Internet su questo IP. +Le applicazioni esposte con la classe ingress *"nginx-external"* saranno quindi direttamente accessibili da Internet su questo IP. -*Se desiderate una modifica delle regole del firewall (aggiunta/rimozione di IP autorizzati), dovete fare una richiesta di supporto.* +*Se desideri modificare le regole del firewall (aggiunta/rimozione di IP autorizzati), devi presentare una richiesta di supporto.* -*È possibile aggiungere altri IP pubblici se lo si desidera.* +*È possibile aggiungere altre IP pubbliche se lo desideri.* ## DNS Per il DNS interno (CoreDNS), il cluster avrà questi parametri: -- Nome del cluster: `` -- Dominio interno: `-cluster.local` (nel nostro esempio: ctodev-cluster.local) +- Nome del cluster : `` +- Dominio interno : `-cluster.local` (dans notre exemple : ctodev-cluster.local) -Questo dominio interno è fondamentale per la comunicazione inter-servizio all'interno del cluster. Permette a un'applicazione di contattare un'altra applicazione semplicemente usando il nome del servizio Kubernetes, senza dover conoscere il suo indirizzo IP interno. +Questo dominio interno è cruciale per la comunicazione inter-service all'interno del cluster. Consente a un'applicazione di contattare un'altra applicazione utilizzando semplicemente il nome del servizio Kubernetes, senza doverne conoscere l'indirizzo IP interno. -Ad esempio, un servizio chiamato `api-backend` nel namespace `production` sarà automaticamente risolvibile all'indirizzo `api-backend.production.svc.ctodev-cluster.local`. +Ad esempio, un servizio denominato `api-backend` nel namespace `production` sarà automaticamente risolvibile all'indirizzo `api-backend.production.svc.ctodev-cluster.local`. --- -La zona DNS pubblica utilizzata per i cluster Kubernetes Managed è `.mk.ms-cloud-temple.com` +La zona DNS pubblica utilizzata per i cluster Kubernetes gestiti è `.mk.ms-cloud-temple.com` -L'ingress *"nginx-external"* (mappato sull'IP pubblico n°2) è accessibile su `"*.external..mk.ms-cloud-temple.com"`. -Se pubblicate un'applicazione con questa ingress-class, potrete accedervi direttamente tramite questo nome di dominio. Vedere il tutorial: [Distribuire la prima applicazione](./firstdeploy) +L'ingress *"nginx-external"* (mappé sur l'IP publique n°2) è accessibile su `"*.external..mk.ms-cloud-temple.com"`. +Se si pubblica un'applicazione con questa ingress-class, sarà possibile accedervi direttamente tramite questo nome di dominio. Vedi la guida : [Deploy della tua prima applicazione](./firstdeploy) -## Hubble: L'osservabilità di rete a portata di mano +## Hubble: l'osservabilità di rete a portata di mano -Hubble è un'interfaccia grafica e a riga di comando per visualizzare e comprendere i flussi di rete del vostro cluster. Basato su Cilium, offre una mappa dettagliata dei servizi, delle dipendenze e delle politiche di rete in tempo reale. +Hubble è un'interfaccia grafica e da riga di comando per visualizzare e comprendere i flussi di rete del tuo cluster. Basato su Cilium, ti offre una mappatura dettagliata di servizi, dipendenze e politiche di rete in tempo reale. -Con Hubble, potete: +Con Hubble, puoi: -- **Visualizzare i flussi di traffico** tra i vostri pod e servizi. -- **Identificare problemi di connettività** ed errori di rete. -- **Verificare l'applicazione delle vostre politiche di sicurezza** (Network Policies). -- **Esplorare le dipendenze** tra le vostre diverse applicazioni. +- **Visualizzare i flussi di traffico** tra i tuoi pod e servizi. +- **Identificare i problemi di connettività** e gli errori di rete. +- **Verificare l'applicazione delle tue politiche di sicurezza** (Network Policies). +- **Esplorare le dipendenze** tra le tue diverse applicazioni. ### Accedere all'interfaccia Hubble -L'interfaccia grafica di Hubble è esposta su un URL interno del vostro cluster. L'accesso non è possibile tramite port-forwarding `kubectl` poiché gli utenti non dispongono di diritti sufficienti sul namespace `kube-system`. +L'interfaccia grafica di Hubble è esposta su un URL interno del tuo cluster. L'accesso non è possibile tramite un port-forwarding `kubectl` poiché gli utenti non dispongono dei privilegi sufficienti sul namespace `kube-system`. -Per accedervi, dovete essere connessi alla rete interna del cluster (ad esempio, tramite un bastion o una VPN). L'URL da utilizzare è il seguente: +Per accedervi, è necessario essere connessi alla rete interna del cluster (ad esempio, tramite un bastion o un VPN). L'URL da utilizzare è la seguente : -`http://hubble.internal..mk.ms-cloud-temple.com` +`http://hubble.internal..mk.ms-cloud-temple.com` -Affinché questo URL sia risolvibile dalla vostra workstation, probabilmente dovrete aggiungere una voce nel file `hosts` o nel vostro DNS interno. Potete ottenere l'indirizzo IP interno dell'Ingress Hubble con il seguente comando: +Affinché questo URL sia risolubile dalla tua postazione di lavoro, probabilmente dovrai aggiungere una voce nel tuo file `hosts` o nel tuo DNS interno. Puoi ottenere l'indirizzo IP interno dell'Ingress Hubble con il comando seguente : ```bash kubectl get ingress hubble-ui -n kube-system @@ -176,51 +178,52 @@ kubectl get ingress hubble-ui -n kube-system ### Creazione di zone DNS interne (cluster privato) -Per rafforzare la sicurezza e semplificare l'accesso ai vostri servizi e all'API Kubernetes dalla vostra rete interna, si raccomanda di creare una zona DNS interna. Questa zona consentirà di risolvere i nomi di dominio dei vostri Ingress e dell'API Kubernetes verso i rispettivi indirizzi IP privati, evitando così il transito attraverso reti pubbliche. +Per rafforzare la sicurezza e semplificare l'accesso ai tuoi servizi e all'API Kubernetes dalla tua rete interna, si consiglia di creare una zona DNS interna. Questa zona consentirà di risolvere i nomi di dominio dei tuoi Ingress e dell'API Kubernetes verso i rispettivi indirizzi IP privati, evitando così il transito attraverso reti pubbliche. -**Esempio di configurazione con il nostro cluster "ctodev", con il range assegnato** **10.20.0.0/22:** +**Esempio di configurazione con il nostro cluster "ctodev", il cui range assegnato è** **10.20.0.0/22 :** -Basandosi sugli URL forniti nella guida introduttiva, potete configurare il vostro DNS interno come segue: +Basandosi sugli URL forniti nella guida di avvio, è possibile configurare il proprio DNS interno come segue : -1. **Create la zona DNS privata** sui vostri server DNS interni per `..mk.ms-cloud-temple.com` +1. **Crea la zona DNS privata** sui tuoi server DNS interni per `..mk.ms-cloud-temple.com` -2. **Aggiungete i seguenti record di tipo A**: +2. **Aggiungi i seguenti record di tipo A** : - - **Per l'API Kubernetes:** + - **Per l'API Kubernetes :** - `. -> 10.20.0.20` (IP virtuale dell'API) - - **Per i servizi interni (tramite l'Ingress `nginx-internal`):** + - **Per i servizi interni (tramite l'Ingress `nginx-internal`) :** - `hubble.internal -> 10.20.1.1` - `argocd.internal -> 10.20.1.1` - `ceph.internal -> 10.20.1.1` - - **Per i servizi sicuri (tramite l'Ingress `nginx-external-secure`):** + - **Per i servizi sicuri (tramite l'Ingress `nginx-external-secure`) :** - `k10.external-secured -> 10.20.1.129` - `grafana.external-secured -> 10.20.1.129` - `harbor.external-secured -> 10.20.1.129` - `opencost.external-secured -> 10.20.1.129` - `opencost-mcp.external-secured -> 10.20.1.129` -Questa configurazione garantisce che il traffico verso l'API e i servizi interni rimanga confinato nella vostra rete privata, conformemente alle best practice di sicurezza. +Questa configurazione garantisce che il traffico verso l'API e i servizi interni rimanga confinato alla tua rete privata, in conformità con le migliori pratiche di sicurezza.

      -:::warning[Andare oltre: sicurezza in produzione] -Questo documento spiega i concetti di rete fondamentali. Per un deployment in produzione, è fondamentale applicare misure di sicurezza aggiuntive: +:::warning[Per approfondire: la sicurezza in produzione +] +Questo documento spiega i concetti di rete fondamentali. Per una distribuzione in produzione, è fondamentale applicare ulteriori misure di sicurezza : -- **Utilizzate immagini sicure**: Preferite immagini provenienti dal vostro registro aziendale sicuro come **Harbor** piuttosto che immagini pubbliche. -- **Controllate i flussi di rete**: Implementate `NetworkPolicies` per controllare le comunicazioni ai soli flussi necessari tra le vostre applicazioni. -- **Applicate politiche di governance**: Utilizzate strumenti come **Kyverno** per imporre regole di sicurezza (es. vietare i container "root", richiedere `requests` e `limits` per le risorse, ecc.). -::: +- **Utilizza immagini sicure** : Privilegia immagini provenienti dal tuo registro aziendale sicuro come **Harbor** piuttosto che immagini pubbliche. +- **Controlla i flussi di rete** : Implementa `NetworkPolicies` per limitare le comunicazioni ai soli flussi necessari tra le tue applicazioni. +- **Applica politiche di governance** : Utilizza strumenti come **Kyverno** per imporre regole di sicurezza (es: vietare i container "root", richiedere `requests` e `limits` di risorse, ecc.). +::: \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingargocd.md b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingargocd.md index d70d23e0..951434ba 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingargocd.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingargocd.md @@ -1,75 +1,75 @@ --- -title: Utilizzare ArgoCD per i deployment GitOps +title: Utilizzare ArgoCD per i tuoi deploy GitOps --- import argocdguestbook from '@site/docs/managed_kubernetes/tutorials/images/argocdguestbook.png' ## Obiettivi -Questo tutorial spiega come utilizzare **ArgoCD**, lo strumento di deployment continuo GitOps integrato nel vostro cluster **Managed Kubernetes**. Al termine di questa guida, saprete: +Questo tutorial spiega come utilizzare **ArgoCD**, lo strumento di deployment continuo GitOps integrato nel tuo cluster **Managed Kubernetes**. Alla fine di questa guida, saprai: - Cos'è l'approccio GitOps. - Come accedere all'interfaccia di ArgoCD. -- Come distribuire un'applicazione usando ArgoCD per sincronizzare un repository Git. +- Come distribuire un'applicazione utilizzando ArgoCD per sincronizzare un repository Git. -## Il principio GitOps con ArgoCD +## Il principio del GitOps con ArgoCD -**GitOps** è una pratica che consiste nell'utilizzare un repository Git come unica fonte di verità per dichiarare lo stato desiderato della propria infrastruttura e delle proprie applicazioni. +Il **GitOps** è una pratica che consiste nell'utilizzare un repository Git come unica fonte di verità per dichiarare lo stato desiderato della tua infrastruttura e delle tue applicazioni. -**ArgoCD** è lo strumento che implementa questo principio. Monitora continuamente un repository Git e confronta lo stato ivi definito (tramite manifest Kubernetes) con lo stato reale del vostro cluster. Se rileva una differenza, applica automaticamente le modifiche affinché il cluster corrisponda a quanto dichiarato in Git. +**ArgoCD** è lo strumento che implementa questo principio. Monitora costantemente un repository Git e confronta lo stato definito al suo interno (tramite manifest Kubernetes) con lo stato effettivo del tuo cluster. Se rileva una differenza, applica automaticamente le modifiche affinché il cluster corrisponda a quanto dichiarato in Git. I vantaggi sono numerosi: -- **Deployment affidabili e riproducibili.** +- **Distribuzioni affidabili e riproducibili.** - **Tracciabilità completa** di tutte le modifiche tramite la cronologia Git. -- **Ripristino rapido** dopo un incidente tornando a un commit precedente. +- **Recupero rapido** in caso di incidente, tornando a un commit precedente. - **Sicurezza migliorata** limitando gli accessi diretti al cluster. ## Accedere all'interfaccia ArgoCD -L'interfaccia web di ArgoCD è esposta su un URL interno del vostro cluster. Per accedervi, dovete essere connessi alla rete interna del cluster (ad esempio, tramite un bastion o una VPN). +L'interfaccia web di ArgoCD è esposta su un URL interno del cluster. Per accedervi, è necessario essere connessi alla rete interna del cluster (ad esempio, tramite un bastion o un VPN). -L'URL da utilizzare è il seguente, sostituendo ``: +L'URL da utilizzare è la seguente, sostituendo `` : -`http://argocd.internal..mk.ms-cloud-temple.com` +`http://argocd.internal..mk.ms-cloud-temple.com` -Potete ottenere l'indirizzo IP interno dell'Ingress di ArgoCD con il seguente comando: +È possibile ottenere l'indirizzo IP interno dell'Ingress ArgoCD con il comando seguente : ```bash kubectl get ingress argocd-server -n argocd ``` :::info -La password per l'account `admin` vi viene fornita dai team Cloud Temple al momento della consegna del vostro cluster. +La password per l'account `admin` viene fornita dai team Cloud Temple durante la configurazione del cluster. ::: ## Distribuire un'applicazione con ArgoCD -Distribuiremo ora un'applicazione di test usando l'approccio GitOps. +Ora distribuiremo un'applicazione di test utilizzando l'approccio GitOps. ### 1. Il repository Git -ArgoCD ha bisogno di un repository Git contenente i manifest Kubernetes dell'applicazione da distribuire. Per questo tutorial, utilizzeremo il repository di esempi di ArgoCD: `https://github.com/argoproj/argocd-example-apps`. Distribuiremo l'applicazione `guestbook` che si trova in questo repository. +ArgoCD richiede un repository Git contenente i manifest Kubernetes dell'applicazione da distribuire. Per questo tutorial, utilizzeremo il repository di esempio di ArgoCD: `https://github.com/argoproj/argocd-example-apps`. Distribuiremo l'applicazione `guestbook` che si trova in questo repository. -### 2. Preparare il namespace di destinazione +### 2. Preparare il Namespace di destinazione -Affinché l'applicazione possa essere distribuita in un namespace gestito da Capsule, dobbiamo prima creare questo namespace e applicarvi l'etichetta di tenant appropriata. +Per consentire la distribuzione dell'applicazione in un namespace gestito da Capsule, dobbiamo prima creare questo namespace e applicargli la label del tenant appropriata. -Eseguite i seguenti comandi: +Eseguire i seguenti comandi : ```bash # Crea il namespace kubectl create namespace guestbook -# Applica l'etichetta per associarlo al tenant "default" di Capsule (se necessario, poiché il namespace è probabilmente già stato associato al vostro tenant alla sua creazione) +# Applica la label per associarlo al tenant "default" di Capsule (se necessario, poiché il namespace è probabilmente già stato associato al tuo tenant durante la creazione) kubectl label namespace guestbook capsule.clastix.io/tenant=default ``` ### 3. Creare l'applicazione in ArgoCD -Ora che il namespace è pronto, possiamo dichiarare l'applicazione ad ArgoCD. +Una volta pronto il namespace, possiamo dichiarare l'applicazione ad ArgoCD. -1. Create un file chiamato `app-guestbook.yaml` con il seguente contenuto: +1. Crea un file denominato `app-guestbook.yaml` con il contenuto seguente : ```yaml apiVersion: argoproj.io/v1alpha1 @@ -92,51 +92,51 @@ Ora che il namespace è pronto, possiamo dichiarare l'applicazione ad ArgoCD. selfHeal: true ``` - Questo manifest chiede ad ArgoCD di: - - Creare un'applicazione chiamata `guestbook`. + Questo manifesto richiede ad ArgoCD di : + - Creare un'applicazione denominata `guestbook`. - Monitorare il repository `argocd-example-apps`. - Concentrarsi sulla cartella `guestbook` di questo repository. - - Distribuire i manifest trovati nel namespace `guestbook` del cluster locale. + - Distribuire i manifesti trovati nel namespace `guestbook` del cluster locale. - Mantenere la sincronizzazione automaticamente (`automated`). -2. Avete due opzioni per creare l'applicazione in ArgoCD: +2. Hai due opzioni per creare l'applicazione in ArgoCD : - **Opzione A: Tramite `kubectl` (Approccio GitOps)** + **Opzione A : tramite `kubectl` (Approccio GitOps)** - Applicate questo manifest direttamente al vostro cluster. Questo è il metodo raccomandato in quanto segue il principio GitOps di gestione dichiarativa. + Applica questo manifesto direttamente al tuo cluster. È il metodo consigliato poiché segue il principio GitOps di gestione dichiarativa. ```bash kubectl apply -f app-guestbook.yaml ``` - **Opzione B: Tramite l'interfaccia web di ArgoCD** + **Opzione B : tramite l'interfaccia web di ArgoCD** - Potete anche creare l'applicazione direttamente dall'interfaccia grafica: - - Nell'UI di ArgoCD, fate clic su **"+ NEW APP"**. - - In alto a destra nella schermata di creazione, fate clic su **"EDIT AS YAML"**. - - Incollate il contenuto del file `app-guestbook.yaml` nell'editor. - - Fate clic su **"CREATE"**. + Puoi anche creare l'applicazione direttamente dall'interfaccia grafica : + - Nell'UI di ArgoCD, fai clic su **"+ NEW APP"**. + - In alto a destra nella schermata di creazione, fai clic su **"EDIT AS YAML"**. + - Incolla il contenuto del tuo file `app-guestbook.yaml` nell'editor. + - Fai clic su **"CREATE"**. ### 4. Verificare la sincronizzazione -Non appena applicate il manifest, ArgoCD rileva questa nuova risorsa `Application` e inizia il suo lavoro. +Non appena applichi il manifesto, ArgoCD rileva questa nuova risorsa `Application` e inizia il suo lavoro. -1. **Tramite l'interfaccia web:** - - Collegandovi all'interfaccia di ArgoCD. - - Dovreste vedere una nuova scheda per l'applicazione `guestbook`. - - Dopo alcuni istanti, il suo stato dovrebbe passare a `Healthy` e `Synced`. - - Facendo clic sulla scheda, potete visualizzare tutte le risorse Kubernetes (Deployment, Service, ecc.) che sono state create. +1. **Tramite l'interfaccia web :** + - Accedi all'interfaccia di ArgoCD. + - Dovresti vedere una nuova scheda per l'applicazione `guestbook`. + - Dopo qualche istante, il suo stato dovrebbe passare a `Healthy` e `Synced`. + - Facendo clic sulla scheda, puoi visualizzare tutte le risorse Kubernetes (Deployment, Service, ecc.) che sono state create. -1. **Tramite la riga di comando:** - - Verificate che il namespace `guestbook` sia stato creato: +1. **Tramite la riga di comando :** + - Verifica che il namespace `guestbook` sia stato creato : ```bash kubectl get ns guestbook ``` - - Verificate che le risorse dell'applicazione siano correttamente distribuite in quel namespace: + - Verifica che le risorse dell'applicazione siano effettivamente distribuite in questo namespace : ```bash kubectl get all -n guestbook @@ -155,33 +155,34 @@ Non appena applicate il manifest, ArgoCD rileva questa nuova risorsa `Applicatio ### 5. Il ciclo GitOps -Ora, se modificate un manifest nel repository Git, ArgoCD rileverà la modifica e aggiornerà automaticamente l'applicazione nel cluster. Questa è la magia di GitOps! +Ora, se si modifica un manifesto nel repository Git, ArgoCD rileverà la modifica e aggiornerà automaticamente l'applicazione nel cluster. È la magia del GitOps! ## Pulizia -Per eliminare l'applicazione e tutte le risorse associate, potete semplicemente eliminare la risorsa `Application` di ArgoCD. +Per eliminare l'applicazione e tutte le risorse associate, è sufficiente eliminare la risorsa `Application` di ArgoCD. -1. **Tramite l'interfaccia web:** - - Nell'UI di ArgoCD, trovate l'applicazione `guestbook`. - - Fate clic sui tre punti (...) per aprire il menu e selezionate **"Delete"**. - - Selezionate l'opzione **"Foreground"** per assicurarvi che tutte le risorse gestite (pod, servizi, ecc.) vengano anch'esse eliminate a cascata. -2. **Tramite `kubectl`:** - - Eliminate il file `app-guestbook.yaml` che avete creato: +1. **Tramite l'interfaccia web :** + - Nell'UI di ArgoCD, trova l'applicazione `guestbook`. + - Clicca sui tre punti (...) per aprire il menu e seleziona **"Elimina"**. + - Seleziona l'opzione **"Foreground"** per assicurarti che tutte le risorse gestite (pod, servizi, ecc.) vengano eliminate in cascata. +2. **Tramite `kubectl` :** + - Elimina il file `app-guestbook.yaml` che hai creato : ```bash kubectl delete -f app-guestbook.yaml ``` -ArgoCD eliminerà ora tutti i componenti dell'applicazione `guestbook`. Una volta completata la sincronizzazione dell'eliminazione, il namespace `guestbook` sarà vuoto. Potrete quindi eliminarlo con il seguente comando: +ArgoCD ora eliminerà tutti i componenti dell'applicazione `guestbook`. Una volta completata la sincronizzazione di eliminazione, il namespace `guestbook` sarà vuoto. A questo punto puoi eliminarlo con il comando seguente : ```bash kubectl delete namespace guestbook ``` -:::info[Andare oltre: gestione dei secret] -Questo tutorial usa un repository pubblico senza dati sensibili. Per le vostre applicazioni in produzione, è fondamentale non archiviare mai i secret (password, chiavi API) in chiaro nel vostro repository Git. Soluzioni come **Sealed Secrets** o **HashiCorp Vault** si integrano con ArgoCD per gestire i vostri secret in modo sicuro. Un futuro tutorial illustrerà in dettaglio questo approccio. +:::info[Per approfondire: la gestione dei segreti +] +Questo tutorial utilizza un repository pubblico senza dati sensibili. Per le tue applicazioni in produzione, è fondamentale non memorizzare mai segreti (password, chiavi API) in chiaro nel tuo repository Git. Soluzioni come **Sealed Secrets** o **HashiCorp Vault** si integrano con ArgoCD per gestire i tuoi segreti in modo sicuro. Un futuro tutorial approfondirà questo approccio. ::: ## Conclusione -Avete distribuito la vostra prima applicazione con ArgoCD seguendo i principi GitOps. Questo potente approccio vi consente di gestire i vostri deployment in modo dichiarativo, affidabile e sicuro. Vi incoraggiamo ad adottarlo per tutte le vostre applicazioni su Managed Kubernetes. +Hai distribuito la tua prima applicazione con ArgoCD seguendo i principi GitOps. Questo approccio potente ti consente di gestire le tue distribuzioni in modo dichiarativo, affidabile e sicuro. Ti incoraggiamo ad adottarlo per tutte le tue applicazioni su Managed Kubernetes. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingcapsule.md b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingcapsule.md index 25fed51e..d65fe55b 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingcapsule.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingcapsule.md @@ -1,20 +1,20 @@ --- -title: Gestire le autorizzazioni con Capsule +title: Gestire i permessi con Capsule --- ## Obiettivi -Questo tutorial vi guiderà nell'utilizzo di **Capsule**, lo strumento di multi-tenancy integrato nel vostro cluster **Managed Kubernetes**. Al termine di questa guida, saprete: +Questo tutorial ti guiderà nell'utilizzo di **Capsule**, lo strumento di multi-tenancy integrato nel tuo cluster **Managed Kubernetes**. Alla fine di questa guida, saprai: -- Cos'è un **Tenant Capsule** e come organizza le vostre autorizzazioni. -- Come **creare e gestire i Namespace** all'interno del vostro Tenant. -- Come vengono applicate le **politiche di sicurezza e le quote** ai vostri progetti. +- Cos'è un **Tenant Capsule** e come organizza i tuoi permessi. +- Come **creare e gestire i Namespaces** all'interno del tuo Tenant. +- Come vengono applicate le **politiche di sicurezza e le quote** ai tuoi progetti. ## Cos'è Capsule? -Capsule è un controller Kubernetes che introduce il concetto di **Tenant** per raggruppare più Namespace. Nell'offerta Managed Kubernetes di Cloud Temple, Capsule viene utilizzato per delegarvi la gestione autonoma dei vostri Namespace, senza necessità dell'intervento di un amministratore del cluster. +Capsule è un controller Kubernetes che introduce il concetto di **Tenant** per raggruppare più Namespace. Nel prodotto Managed Kubernetes di Cloud Temple, Capsule viene utilizzato per delegare a voi la gestione dei vostri Namespace in piena autonomia, senza la necessità dell'intervento di un amministratore del cluster. -Alla consegna del vostro cluster, i team di Cloud Temple hanno creato un primo Tenant per voi e vi hanno designato come suo **proprietario (Tenant Owner)**. +Alla consegna del vostro cluster, i team di Cloud Temple hanno creato un primo Tenant per voi e vi hanno designato come **proprietario (Tenant Owner)**. :::tip Per impostazione predefinita, il vostro primo Tenant si chiama `default` e l'account di servizio proprietario è `defaultapp`. @@ -22,44 +22,44 @@ Per impostazione predefinita, il vostro primo Tenant si chiama `default` e l'acc Per saperne di più sul progetto, potete consultare il [sito web ufficiale di Capsule](https://projectcapsule.dev/). -## Passo 1: Conoscere il nome del proprio Tenant +## Fase 1: Conoscere il nome del proprio Tenant -Come `Tenant Owner`, non avete i permessi per elencare direttamente la risorsa `Tenant`. Il nome del vostro Tenant vi viene comunicato dai team di Cloud Temple al momento della consegna del servizio. +In qualità di `Tenant Owner`, non disponi delle autorizzazioni per elencare direttamente la risorsa `Tenant`. Il nome del tuo Tenant ti viene fornito dai team Cloud Temple durante la consegna del servizio. -Se avete dimenticato il nome del vostro Tenant, potete trovarlo ispezionando le etichette dei Namespace a cui avete accesso. Il seguente comando elenca tutti i namespace collegati a un tenant Capsule e ne visualizza le etichette: +Se hai dimenticato il nome del tuo Tenant, puoi recuperarlo ispezionando le etichette dei Namespaces a cui hai accesso. Il comando seguente elenca tutti i namespace associati a un tenant Capsule e ne visualizza le etichette: ```bash kubectl get ns -l capsule.clastix.io/tenant --show-labels ``` -Cercate l'etichetta `capsule.clastix.io/tenant`. Il valore di questa etichetta è il nome del vostro Tenant. Potete quindi usare questo nome per filtrare e vedere solo i Namespace del vostro Tenant: +Cerca l'etichetta `capsule.clastix.io/tenant`. Il valore di questa etichetta corrisponde al nome del tuo Tenant. Puoi quindi utilizzare questo nome per filtrare e visualizzare solo i Namespaces del tuo Tenant : ```bash -# Una volta che conoscete il nome del vostro tenant, ad esempio "my-tenant" +# Una volta noto il nome del tuo tenant, ad esempio "my-tenant" kubectl get ns -l capsule.clastix.io/tenant=my-tenant ``` -## Passo 2: Creare un nuovo Namespace +## Passo 2 : Creare un nuovo Namespace -Il vostro principale vantaggio come `Tenant Owner` è poter creare Namespace da soli. Potete farlo direttamente con un singolo comando `kubectl`. +Il tuo vantaggio principale in qualità de `Tenant Owner` è poter creare autonomamente i Namespace. Puoi farlo direttamente con un singolo comando `kubectl`. -Eseguite il seguente comando per creare un namespace chiamato `mon-projet-dev`: +Esegui il comando seguente per creare un namespace denominato `mon-projet-dev` : ```bash kubectl create namespace mon-projet-dev ``` -Capsule intercetterà questa richiesta. Poiché siete proprietari di un Tenant, autorizzerà la creazione del Namespace e lo associerà automaticamente al vostro Tenant. +Capsule intercetterà questa richiesta. Poiché sei il proprietario di un Tenant, autorizzerà la creazione del Namespace e lo associerà automaticamente al tuo Tenant. ## Passo 3: Verificare l'associazione del Namespace -Una volta creato il Namespace, potete verificare che sia stato correttamente collegato al vostro Tenant. +Una volta creato il Namespace, puoi verificare che sia stato correttamente associato al tuo Tenant. ```bash kubectl get ns mon-projet-dev --show-labels ``` -Noterete che Capsule ha aggiunto un'etichetta al vostro Namespace, indicando a quale Tenant appartiene. Questo è il meccanismo che garantisce l'isolamento tra i diversi Tenant del cluster. +Noterai che Capsule ha aggiunto una label al tuo Namespace, indicando a quale Tenant appartiene. È questo meccanismo a garantire l'isolamento tra i diversi Tenant del cluster. ``` NAME STATUS AGE LABELS @@ -68,16 +68,16 @@ mon-projet-dev Active 1m capsule.clastix.io/tenant=votre-tenant ## Passo 4: Comprendere l'ereditarietà delle politiche -Uno dei maggiori vantaggi di Capsule è che tutte le politiche di sicurezza, le quote di risorse (`ResourceQuota`) e gli intervalli di risorse (`LimitRange`) definiti a livello di Tenant dagli amministratori vengono **automaticamente ereditati** da tutti i Namespace che create. +Uno dei maggiori vantaggi di Capsule è che tutte le politiche di sicurezza, le quote di risorse (`ResourceQuota`) e gli intervalli di risorse (`LimitRange`) definiti a livello di Tenant dagli amministratori vengono **ereditati automaticamente** da tutti i Namespace che crei. -Questo garantisce che i vostri progetti rispettino i limiti di consumo (CPU, memoria, storage) e le regole di sicurezza (come le politiche di rete predefinite o i vincoli di sicurezza definiti da **Kyverno**) stabiliti per il vostro ambiente, senza che dobbiate riconfigurarli per ogni Namespace. +Ciò garantisce che i tuoi progetti rispettino i limiti di consumo (CPU, mémoire, stockage) e le regole di sicurezza (come le politiche di rete predefinite o i vincoli di sicurezza definiti da **Kyverno**) impostati per il tuo ambiente, senza che tu debba riconfigurarli per ogni Namespace. :::info -Quote specifiche sono state impostate sul vostro Tenant Capsule per limitare l'utilizzo dello storage persistente (Ceph-Block e Ceph-FileSystem) allo spazio totale disponibile nel cluster. Se avete bisogno di modificare queste quote per un progetto specifico, vi preghiamo di formulare una richiesta al supporto di Cloud Temple. +Sono state impostate quote specifiche sul tuo Tenant Capsule per limitare l'utilizzo dell'archiviazione persistente (Ceph-Block et Ceph-FileSystem) allo spazio totale disponibile nel cluster. Se hai bisogno di modificare queste quote per un progetto specifico, invia una richiesta al supporto Cloud Temple. ::: ## Conclusione -Grazie a Capsule, disponete di completa autonomia per gestire i Namespace dei vostri team, beneficiando al contempo di un framework sicuro e preconfigurato dagli amministratori del cluster. Potete creare, modificare ed eliminare Namespace a piacimento, sapendo che i necessari controlli vengono applicati automaticamente. +Grazie a Capsule, disponi di piena autonomia per gestire i Namespace dei tuoi team, beneficiando al contempo di un framework sicuro e preconfigurato dagli amministratori del cluster. Puoi creare, modificare ed eliminare Namespace a piacimento, sapendo che i necessari controlli vengono applicati automaticamente. -Se avete bisogno di creare un nuovo Tenant per isolare un altro insieme di progetti o team, potete farne richiesta al supporto di Cloud Temple. +Se hai bisogno di creare un nuovo Tenant per isolare un altro insieme di progetti o team, puoi inoltrare la richiesta al supporto Cloud Temple. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggapi.md b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggapi.md index e89434c3..6bbf20ba 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggapi.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggapi.md @@ -6,71 +6,73 @@ import gapischema from '@site/docs/managed_kubernetes/tutorials/images/gapi.png' ## Introduzione -La Gateway API è il nuovo standard Kubernetes per la gestione del traffico in entrata. Succede alla risorsa Ingress tradizionale offrendo maggiore flessibilità, più funzionalità (routing avanzato, bilanciamento del carico, ecc.) e una migliore separazione delle responsabilità. +L'API Gateway è il nuovo standard Kubernetes per la gestione del traffico in entrata. Sostituisce la tradizionale risorsa Ingress offrendo maggiore flessibilità, funzionalità (routing avanzato, bilanciamento del carico, ecc.) e una migliore separazione delle responsabilità. -Nel vostro cluster Managed Kubernetes di Cloud Temple, **Cilium** viene utilizzato come CNI e implementa nativamente il supporto della Gateway API. +Nel tuo cluster Managed Kubernetes Cloud Temple, **Cilium** è utilizzato come CNI e implementa nativamente il supporto per la Gateway API. -:::info[Versioni supportate] +:::info[Versioni supportate +] Questa documentazione si applica ai cluster che utilizzano **Cilium 1.8.4 o superiore**. -I **CRD di Gateway API in versione 1.4** sono preinstallati sul vostro cluster. +I **CRD della Gateway API versione 1.4** sono preinstallati nel tuo cluster. ::: ## Obiettivi Questo tutorial vi guiderà per: -- Comprendere le risorse di base della Gateway API (GatewayClass, Gateway, HTTPRoute). +- Comprendere le risorse di base di Gateway API (GatewayClass, Gateway, HTTPRoute). - Distribuire un'applicazione di test. - Esporre questa applicazione tramite una Gateway Cilium. - Testare l'accesso. ## Prerequisiti -- Un cluster Managed Kubernetes Cloud Temple operativo. -- Lo strumento `kubectl` configurato per accedere al vostro cluster. +- Un cluster Kubernetes gestito Cloud Temple operativo. +- Lo strumento `kubectl` configurato per accedere al tuo cluster. - Lo strumento `cilium`. ## Concetti Chiave -La Gateway API decompone la configurazione di rete in tre risorse principali: +Gateway API scompone la configurazione di rete in tre risorse principali: -1. **GatewayClass**: Definisce il tipo di controller (qui, `io.cilium/gateway`). -2. **Gateway**: Crea un punto di ingresso di rete (load balancer). -3. **HTTPRoute**: Definisce le regole di routing (percorsi, header) verso i Services Kubernetes. +1. **GatewayClass** : Definisce il tipo di controller (qui, `io.cilium/gateway`). +2. **Gateway** : Istanzia un punto di ingresso di rete (load balancer). +3. **HTTPRoute** : Definisce le regole di routing (percorsi, header) verso i Servizi Kubernetes. Schema GAPI -## Passo 1: Verificare la versione e la GatewayClass +## Fase 1: Verificare la versione e la GatewayClass -Potete verificare che il vostro cluster utilizzi una versione compatibile di Cilium (1.8.4+) tramite i comandi: +È possibile verificare che il cluster utilizzi una versione compatibile di Cilium (1.8.4+) utilizzando i comandi: ```bash cilium status cilium config view | grep -w "enable-gateway-api" ``` -Assicuratevi quindi che la `GatewayClass` di Cilium sia disponibile sul vostro cluster: +Assicurarsi quindi che la `GatewayClass` di Cilium sia disponibile sul cluster: ```bash kubectl get gatewayclass ``` -Dovreste vedere un output simile a: +Si dovrebbe ottenere un output simile al seguente: ```text NAME CONTROLLER ACCEPTED AGE cilium io.cilium/gateway True 2d ``` -:::info[Nota] -Se non è elencata nessuna GatewayClass, assicuratevi che la funzionalità Gateway API sia abilitata nella vostra installazione Cilium. +:::info[Nota +] +Se non viene elencata alcuna GatewayClass, assicurarsi che la funzionalità Gateway API sia abilitata nell'installazione di Cilium. ::: -## Passo 2: Distribuire un'applicazione dimostrativa +## Fase 2 : Distribuire un'applicazione di dimostrazione -Distribuiremo una semplice applicazione che restituisce informazioni sul pod (echo-server). +Distribuiremo un'applicazione semplice che restituisce informazioni sul pod (echo-server). -Create un file `apps.yaml`: +Crea un file `apps.yaml` : ```yaml apiVersion: apps/v1 @@ -109,17 +111,17 @@ spec: targetPort: 80 ``` -Applicate la configurazione: +Applica la configurazione : ```bash kubectl apply -f apps.yaml ``` -## Passo 3: Creare la Gateway +## Passo 3 : Creare il Gateway -La Gateway richiederà la creazione di un LoadBalancer per ricevere il traffico. +Il Gateway richiederà la creazione di un LoadBalancer per ricevere il traffico. -Create un file `gateway.yaml`: +Crea un file `gateway.yaml` : ```yaml apiVersion: gateway.networking.k8s.io/v1 @@ -137,25 +139,25 @@ spec: from: Same ``` -Applicate la configurazione: +Applica la configurazione : ```bash kubectl apply -f gateway.yaml ``` -Verificate che la Gateway abbia ottenuto un indirizzo IP (questo può richiedere alcuni istanti affinché il LoadBalancer venga provisionato dall'infrastruttura Cloud Temple): +Verifica che il Gateway abbia ottenuto un indirizzo IP (potrebbero volerci alcuni istanti affinché il LoadBalancer venga provisionato dall'infrastruttura Cloud Temple) : ```bash kubectl get gateway my-gateway ``` -Aspettate che il campo `PROGRAMMED` sia `True` e che `ADDRESS` mostri un IP. +Attendi che il campo `PROGRAMMED` sia `True` e che `ADDRESS` mostri un IP. -## Passo 4: Creare una HTTPRoute +## Passo 4 : Creare una HTTPRoute -Ora che abbiamo un "punto di ingresso" (Gateway), dobbiamo indirizzare il traffico verso il nostro servizio. +Ora che disponiamo di un "gateway" (Gateway), dobbiamo instradare il traffico verso il nostro servizio. -Create un file `httproute.yaml`: +Crea un file `httproute.yaml` : ```yaml apiVersion: gateway.networking.k8s.io/v1 @@ -175,33 +177,33 @@ spec: port: 80 ``` -Applicate la configurazione: +Applica la configurazione : ```bash kubectl apply -f httproute.yaml ``` -## Passo 5: Testare l'accesso +## Fase 5: Testare l'accesso -Recuperate l'indirizzo IP della vostra Gateway: +Recuperare l'indirizzo IP del Gateway: ```bash kubectl get gateway my-gateway -o jsonpath='{.status.addresses[0].value}' ``` -Inviate una richiesta a questo IP per testare: +Inviare una richiesta a questo IP per testare: ```bash curl http://10.200.205.2 ``` -Dovreste ricevere una risposta JSON dall'applicazione `echo-server` che indica i dettagli del pod che ha risposto. +Dovresti ricevere una risposta JSON dall'applicazione `echo-server` che indica i dettagli del pod che ha risposto. -## Funzionalità avanzate (Esempio: Canary Release) +## Funzionalità avanzate (Esempio : Canary Release) -La Gateway API facilita enormemente gli scenari di deployment avanzati, come il Canary Release (distribuzione ponderata del traffico). +Gateway API facilita notevolmente gli scenari di deployment avanzati, come il Canary Release (distribuzione ponderata del traffico). -Supponiamo di avere una v2 della nostra applicazione. Possiamo distribuire il traffico al 90% verso v1 e al 10% verso v2 semplicemente regolando i pesi in `backendRefs`: +Supponiamo di avere una v2 della nostra applicazione. Possiamo distribuire il traffico al 90% verso v1 e al 10% verso v2 semplicemente regolando i pesi in `backendRefs` : ```yaml apiVersion: gateway.networking.k8s.io/v1 @@ -223,4 +225,4 @@ spec: ## Conclusione -Avete configurato una moderna infrastruttura di esposizione dei servizi con Cilium Gateway API. Questo approccio standardizzato, semanticamente più ricco degli Ingress, è quello raccomandato per sfruttare le capacità avanzate di rete di Kubernetes. +Avete implementato un'infrastruttura moderna per l'esposizione dei servizi con Cilium Gateway API. Questo approccio standardizzato, semanticamente più ricco rispetto agli Ingress, è consigliato per sfruttare le funzionalità avanzate della rete Kubernetes. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggpu.md b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggpu.md index ce65ec15..ff0d35ee 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggpu.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usinggpu.md @@ -1,5 +1,5 @@ --- -title: Utilizzare una GPU NVIDIA +title: Utilizzare una GPU nVidia --- import nvidiasmi from '@site/docs/managed_kubernetes/tutorials/images/nvidiasmi.png' @@ -10,11 +10,11 @@ Questo tutorial mostra come distribuire un pod che utilizza una risorsa GPU su u ## Prerequisiti -- Un cluster Managed Kubernetes con almeno un nodo worker di tipo "Bare Metal" con GPU. +- Un cluster Kubernetes gestito con almeno un nodo worker di tipo "Bare Metal" con GPU. -## Manifesto Pod di esempio +## Manifest di Pod di esempio -Ecco un esempio di manifesto pod che esegue il comando `nvidia-smi` per verificare la presenza e lo stato della scheda GPU. +Ecco un esempio di manifest di pod che esegue il comando `nvidia-smi` per verificare la presenza e lo stato della scheda GPU. ```yaml apiVersion: v1 @@ -22,7 +22,7 @@ kind: Pod metadata: name: nvidia-cuda-check spec: - runtimeClassName: nvidia # Chiave per Talos NVIDIA + runtimeClassName: nvidia # Clé pour Talos NVIDIA restartPolicy: Never containers: - name: nvidia-version-check @@ -31,10 +31,10 @@ spec: command: ["nvidia-smi"] ``` -### Spiegazione del Manifesto +### Spiegazione del Manifest - **`runtimeClassName: nvidia`**: Questa è la parte più importante. Indica a Kubernetes di utilizzare il runtime NVIDIA. Il toolkit NVIDIA si occupa quindi di iniettare i driver NVIDIA direttamente nel pod, consentendo al container di accedere alla GPU. -- **`restartPolicy: Never`**: Poiché questo pod è solo un comando di verifica, non vogliamo che venga riavviato dopo l'esecuzione. +- **`restartPolicy: Never`**: Poiché questo pod è solo un comando di verifica, non vogliamo che si riavvii dopo l'esecuzione. - **`image: "nvidia/cuda:..."`**: Utilizziamo un'immagine fornita da NVIDIA che contiene gli strumenti necessari per interagire con la GPU. - **`command: ["nvidia-smi"]`**: Questo è il comando che verrà eseguito all'interno del container. `nvidia-smi` è uno strumento da riga di comando che fornisce informazioni sulle GPU NVIDIA. @@ -42,18 +42,18 @@ Per ulteriori informazioni sul funzionamento del toolkit NVIDIA, è possibile co ## Distribuzione e Verifica -1. **Distribuire il pod** usando il comando `kubectl apply`: +1. **Distribuisci il pod** utilizzando il comando `kubectl apply` : ```shell kubectl apply -f nvidia-smi.yaml ``` -2. **Verificare i log del pod** per vedere l'output del comando `nvidia-smi`: +2. **Verifica i log del pod** per visualizzare l'output del comando `nvidia-smi` : ```shell kubectl logs nvidia-cuda-check ``` -Se tutto è configurato correttamente, si dovrebbe vedere un output simile al seguente, che mostra i dettagli della scheda GPU: +Se tutto è configurato correttamente, dovresti vedere un output simile al seguente, che mostra i dettagli della tua scheda GPU : -nvidia-smi command result +nvidia-smi command result \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingharbor.md b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingharbor.md index 20216165..09e5830d 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingharbor.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingharbor.md @@ -2,14 +2,14 @@ title: Utilizzare Harbor --- -Harbor è un registro di artefatti OCI (immagini container, chart Helm, SBOM, firme, ecc.) che offre una gestione dettagliata dei progetti, controllo degli accessi, scansioni delle vulnerabilità, criteri di conservazione e gestione delle firme. Questa guida spiega come utilizzarlo con Cloud Temple Managed Kubernetes, dalla connessione al registro fino all'integrazione nei deployment Kubernetes e nelle pipeline CI/CD. +Harbor è un registro di artefatti OCI (immagini container, chart Helm, SBOM, firme, ecc.) che offre una gestione granulare dei progetti, un controllo degli accessi, scansioni di vulnerabilità, politiche di retention e gestione delle firme. Questa guida spiega come utilizzarlo con Cloud Temple Managed Kubernetes, dalla connessione al registro fino all'integrazione nei vostri deployment Kubernetes e nelle vostre pipeline CI/CD. :::note -In questa guida, sostituire le seguenti variabili con i propri valori: +In questa guida, sostituite le seguenti variabili con i vostri valori: -- `` : codice del cluster (es.: `ctodev`) -- `` : URL pubblica di Harbor costruita come segue: `harbor.external-secured..mk.ms-cloud-temple.com` (es.: `harbor.external-secured.ctodev.mk.ms-cloud-temple.com`) -- `` : nome del progetto Harbor +- `` : codice del vostro cluster (es: `ctodev`) +- `` : URL pubblica di Harbor costruita nel seguente modo: `harbor.external-secured..mk.ms-cloud-temple.com` (es: `harbor.external-secured.ctodev.mk.ms-cloud-temple.com`) +- `` : nome del vostro progetto Harbor - `` : namespace Kubernetes di destinazione - `` / `` : credenziali di un account robot Harbor @@ -17,11 +17,11 @@ In questa guida, sostituire le seguenti variabili con i propri valori: ## Prerequisiti -- Accesso alla Console e al servizio Managed Kubernetes -- Un progetto Harbor esistente (o i diritti per crearne uno) +- Accesso alla Console e al servizio Kubernetes gestito +- Un progetto Harbor esistente (o i permessi per crearne uno) - Strumenti installati localmente: - Docker o Podman - - kubectl (configurato sul cluster) + - kubectl (configurato sul tuo cluster) - Helm v3.8+ (supporto OCI) - Opzionale: `cosign` per le firme delle immagini - Accesso di rete in uscita verso `` in HTTPS (443) @@ -29,16 +29,16 @@ In questa guida, sostituire le seguenti variabili con i propri valori: ## Concetti essenziali -- Progetto: spazio logico (pubblico o privato) che contiene repository. -- Repository: raccolta di tag per una determinata immagine (`/app-web:1.0.0`). -- Account robot: identità tecniche con privilegi limitati, destinate alle CI/CD. -- Scansioni delle vulnerabilità: analisi automatica (es.: Trivy) al caricamento e su richiesta. -- Criteri: immutabilità dei tag, conservazione, regole di sicurezza. +- Progetto: spazio logico (pubblico o privato) che contiene dei repository. +- Repository: insieme di tag per un'immagine data (`/app-web:1.0.0`). +- Account robot: identità tecniche con privilegi limitati, destinate a CI/CD. +- Scansioni di vulnerabilità: analisi automatica (es. Trivy) al caricamento e su richiesta. +- Politiche: immutabilità dei tag, retention, regole di sicurezza. - Artefatti OCI: immagini, chart Helm (OCI), SBOM, firme. ## Connessione al registro (Docker / Podman) -Preferire un **account robot** associato al progetto per le operazioni CI/CD. +Si consiglia di utilizzare un **account robot** associato al progetto per le operazioni CI/CD. ```bash # Docker @@ -48,57 +48,59 @@ docker login podman login ``` -- Utente: `` (es.: `robot$mioproget+pusher`) +- Utente: `` (es: `robot$monprojet+pusher`) - Password: `` -:::tip[Certificati] -L'istanza Harbor gestita da Cloud Temple presenta un certificato pubblico riconosciuto. Normalmente non è richiesta alcuna configurazione CA aggiuntiva in Docker o Podman. +:::tip[Certificati +] +L'istanza Harbor gestita da Cloud Temple presenta un certificato pubblico riconosciuto. Non è normalmente necessaria alcuna configurazione CA aggiuntiva in Docker o Podman. ::: ## Creare un progetto -Tramite l'UI Harbor: +Tramite l'interfaccia utente Harbor: -- Projects > New Project -- Nome: ``, visibilità: Private (consigliato) -- Opzioni: abilitare l'immutabilità dei tag, l'auto-scan on push, ecc. +- Progetti > Nuovo progetto +- Nome: ``, visibilità: Private (recommandé) +- Opzioni: abilitare l'immutabilità dei tag, la scansione automatica al push, ecc. -:::info[Buone pratiche] +:::info[Bonnes pratiques +] - Un progetto per applicazione o per dominio funzionale. - Limitare i ruoli (maintainer, developer, guest). -- Abilitare l'auto-scan e i criteri di conservazione. +- Abilitare la scansione automatica e le politiche di retention. ::: -## Caricare un'immagine (push) +## Spingere un'immagine Esempio con Docker: ```bash -# Build locale +# Construire localement docker build -t app-web:1.0.0 . -# Tag verso Harbor +# Tag vers Harbor docker tag app-web:1.0.0 //app-web:1.0.0 -# Push +# Pousser docker push //app-web:1.0.0 ``` -Organizzazione consigliata: +Organisation consigliata: -- `/:` (es.: `payments/api:2.3.4`) +- `/:` (ex: `payments/api:2.3.4`) - Immutabilità dei tag per evitare sovrascritture -- Tag semantici: `1.2.3`, `1.2`, `latest` (usare `latest` con cautela) +- Tag semantici: `1.2.3`, `1.2`, `latest` (utilizzare `latest` con cautela) -## Scaricare un'immagine (pull) +## Recuperare un'immagine ```bash docker pull //app-web:1.0.0 ``` -Verificare i risultati della scansione e la firma (se abilitata) prima di promuovere in produzione. +Verificare i risultati della scansione e la firma (se attivata) prima della promozione in produzione. ## Utilizzare le immagini in Kubernetes @@ -113,10 +115,10 @@ kubectl create secret docker-registry harbor-pull-secret \ ``` :::tip -Il parametro --docker-email non è più richiesto nelle versioni recenti di kubectl (e può essere omesso). +Il parametro --docker-email non è più richiesto nelle versioni recenti di kubectl (e può essere ignorato). ::: -### 2) Referenziare il secret nei workload +### 2) Referenziare il segreto nei tuoi workload - Tramite il ServiceAccount: @@ -130,7 +132,7 @@ imagePullSecrets: - name: harbor-pull-secret ``` -- O direttamente nel Pod/Deployment: +- Oppure direttamente nel Pod/Deployment: ```yaml apiVersion: apps/v1 @@ -159,7 +161,7 @@ spec: ### 3) Testare il pull dal cluster (opzionale) -Verificare rapidamente che il nodo possa scaricare l'immagine con il secret: +Verifica rapidamente che il nodo possa scaricare la tua immagine con il segreto: ```bash kubectl run pull-check --rm -it --image=//app-web:1.0.0 \ @@ -167,53 +169,54 @@ kubectl run pull-check --rm -it --image=//app-web:1.0.0 \ -n --command -- sh -c 'echo OK' ``` -Per una promozione in produzione, preferire l'uso di un digest: +Per la promozione in produzione, preferisci l'uso di un digest: ```yaml image: //app-web@sha256: ``` -## Account robot e permessi +## Account robot e autorizzazioni -- Projects > `` > Robot Accounts > New Robot -- Scopes: limitare alle azioni necessarie (`pull` per runtime, `push` per CI) -- Scadenza: definire una durata e un processo di rotazione -- Conservare il token come secret (Kubernetes/CI) +- Progetti > `` > Account Robot > Nuovo Robot +- Ambiti: limitare alle azioni necessarie (`pull` per runtime, `push` per CI) +- Scadenza: impostare una durata e un processo di rotazione +- Memorizzare il token in modo sicuro (Kubernetes/CI) -:::caution[Principio del minimo privilegio] -Non utilizzare account personali per le pipeline. Preferire un robot per progetto, o anche per ambiente. +:::caution[Principio di minimo privilegio +] +Non utilizzare account personali per i pipeline. Preferire un robot per progetto, o addirittura per ambiente. ::: -## Scansioni delle vulnerabilità +## Scansioni di vulnerabilità -- Abilitare "Scan on push" a livello di progetto -- Attivare su richiesta dall'UI o dall'API -- Configurare criteri: bloccare il pull se la severità >= `High` (in base alla governance) +- Abilitare « Scan on push » a livello di progetto +- Attivare su richiesta dall'interfaccia utente o dall'API +- Configurare le policy: bloccare il pull se la severità >= `High` (in base alla governance) -È possibile esportare i report (JSON) o visualizzare i CVE e i layer interessati. +È possibile esportare i report (JSON) o visualizzare le CVE e i layer interessati. ## Conservazione e immutabilità -- Conservazione: mantenere, ad esempio, gli ultimi `N` tag corrispondenti a un pattern (es.: `release-*`) -- Immutabilità: impedire la sovrascrittura dei tag esistenti -- Garbage Collection: pianificata dall'amministrazione Harbor (rimuove i blob orfani) +- Conservazione: conservare, ad esempio, gli ultimi `N` tag corrispondenti a un pattern (es: `release-*`) +- Immutabilità: impedire la riscrittura dei tag esistenti +- Garbage Collection: pianificata dall'amministrazione di Harbor (elimina i blob orfani) -Questi meccanismi riducono i costi di archiviazione e rafforzano la tracciabilità. +Questi meccanismi riducono il costo di archiviazione e rafforzano la tracciabilità. ## Chart Helm (OCI) -Helm v3.8+ supporta OCI in modo nativo. +Helm v3.8+ supporta OCI nativamente. ```bash -# Connessione +# Connexion helm registry login \ --username '' \ --password '' -# Impacchettare il chart +# Packaging du chart helm package charts/myapp -# Caricare il chart (push) +# Push du chart helm push myapp-0.1.0.tgz oci:////charts # Pull / Install @@ -226,7 +229,7 @@ helm install myapp oci:////charts/myapp --version 0.1.0 -n < Con `cosign`: ```bash -# Login (se necessario per recuperare la chiave pubblica in Harbor) +# Accesso (se necessario per recuperare la chiave pubblica in Harbor) cosign login # Firmare un'immagine (chiave locale o KMS) @@ -237,10 +240,10 @@ cosign verify //app-web:1.0.0 ``` :::note -Nelle versioni precedenti di cosign, potrebbe essere necessario esportare COSIGN_EXPERIMENTAL=1. +Sulle versioni precedenti di cosign, potrebbe essere necessario esportare COSIGN_EXPERIMENTAL=1. ::: -Harbor può visualizzare le attestazioni (firme, SBOM) e far rispettare i criteri di firma. +Harbor può visualizzare le attestazioni (firme, SBOM) e far rispettare le politiche di firma. ## Integrazione CI/CD @@ -296,22 +299,22 @@ jobs: ## Risoluzione dei problemi - `denied: requested access to the resource is denied` - - Verificare i diritti dell'account robot sul progetto e/o sul nome del repository + - Verificare i permessi dell'account robot sul progetto e/o il nome del repo - `name unknown` / `manifest unknown` - - Progetto inesistente, repository scritto in modo errato, tag inesistente + - Progetto inesistente, repo non correttamente scritto, tag inesistente - `x509: certificate signed by unknown authority` - - Aggiornare il deposito di certificati del runner (ca-certificates), verificare l'assenza di un proxy TLS intercettore; aggiungere la CA del proxy se necessario e/o sincronizzare l'orologio di sistema + - Aggiornare l'archivio certificati del runner (ca-certificates), verificare l'assenza di un proxy TLS che effettua l'intercettazione; aggiungere la CA del proxy se necessario e/o sincronizzare l'orologio di sistema - 401/403 durante il pull in Kubernetes - Secret `imagePullSecrets` assente o credenziali scadute - `413 Request Entity Too Large` - - Dimensione dell'immagine troppo grande rispetto alla configurazione dell'Ingress/Registry; ottimizzare l'immagine o regolare la configurazione (tramite il supporto Cloud Temple) + - Dimensione dell'immagine troppo grande rispetto alla configurazione di Ingress/Registry; ottimizzare l'immagine o regolare la configurazione (via support Cloud Temple) ## Buone pratiche - Progetti privati per impostazione predefinita, separazione dev/preprod/prod - Account robot dedicati, rotazione regolare dei token -- Immutabilità dei tag e promozione per digest -- Criterio di scansione: soglia di severità e remediation documentata -- Conservazione rigorosa, eliminazione programmata degli artefatti obsoleti +- Immutabilità dei tag e promozione tramite digest +- Politica di scansione: soglia di severità e remediation documentata +- Ritenzione rigorosa, eliminazione programmata degli artefatti obsoleti - Logging/audit: esportare e conservare i log di accesso/attività -- Integrazione SBOM e firme per la catena di approvvigionamento del software +- Integrazione SBOM e firme per la catena di approvvigionamento \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingkasten.md b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingkasten.md index 151f2e62..19bdd6cb 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingkasten.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingkasten.md @@ -1,5 +1,5 @@ --- -title: Eseguire il backup delle applicazioni con Veeam Kasten +title: Backup delle tue applicazioni con Veeam Kasten --- import k10dashboard from '@site/docs/managed_kubernetes/tutorials/images/k10dashboard.png' @@ -8,107 +8,110 @@ import k10infrabackups from '@site/docs/managed_kubernetes/tutorials/images/k10i ## Introduzione -Veeam Kasten K10 è una soluzione di backup e ripristino progettata specificamente per gli ambienti Kubernetes. Nel servizio Managed Kubernetes di Cloud Temple, Kasten è integrato per consentire di proteggere le applicazioni, ripristinare i dati quando necessario e garantire la continuità operativa. +Veeam Kasten K10 è una soluzione di backup e ripristino progettata specificamente per gli ambienti Kubernetes. Nel prodotto Managed Kubernetes di Cloud Temple, Kasten è integrato per consentirti di proteggere le tue applicazioni, ripristinare i dati quando necessario e garantire la continuità operativa. -Questo tutorial guida attraverso i passaggi di base per eseguire il backup e ripristinare un'applicazione utilizzando Kasten. +Questo tutorial ti guiderà attraverso i passaggi di base per eseguire il backup e il ripristino di un'applicazione utilizzando Kasten. ## Prerequisiti -Prima di iniziare, assicurarsi di disporre dei seguenti elementi: +Prima di iniziare, assicurati di disporre dei seguenti elementi: - Un cluster Managed Kubernetes attivo. -- L'identificatore del cluster (ad esempio, `ctodev`). -- Un'applicazione distribuita nel cluster di cui si desidera eseguire il backup. +- L'ID del tuo cluster (ad esempio, `ctodev`). +- Un'applicazione distribuita nel tuo cluster che desideri salvare. -## 1. Accedere al dashboard di Kasten +## 1. Accedere alla dashboard di Kasten -Il dashboard di Kasten è accessibile tramite un URL sicuro, costruito a partire dall'identificatore del cluster. +La dashboard di Kasten è accessibile tramite un URL sicuro, costruito a partire dall'identificativo del proprio cluster. -1. **Costruire l'URL di accesso**: - L'URL si basa sul seguente modello: `https://k10.external-secured..mk.ms-cloud-temple.com/k10/` - Sostituire `` con l'identificatore del cluster. Ad esempio, se l'identificatore è `ctodev`, l'URL sarà: `https://k10.external-secured.ctodev.mk.ms-cloud-temple.com/k10/`. +1. **Comporre l'URL di accesso** : + L'URL si basa sul modello seguente: `https://k10.external-secured..mk.ms-cloud-temple.com/k10/` + Sostituire `` con l'identificativo del proprio cluster. Ad esempio, se l'identificativo è `ctodev`, l'URL sarà: `https://k10.external-secured.ctodev.mk.ms-cloud-temple.com/k10/`. 2. **Accedere all'URL** nel browser. :::info Nota sulla sicurezza - L'accesso a questo URL è limitato agli indirizzi IP pubblici dichiarati. Se non è possibile connettersi, assicurarsi che il proprio indirizzo IP sia autorizzato contattando il supporto Cloud Temple. + L'accesso a questo URL è limitato agli indirizzi IP pubblici dichiarati. Se non si riesce ad accedere, assicurarsi che il proprio indirizzo IP sia autorizzato contattando il supporto di Cloud Temple. ::: -:::tip[Guida introduttiva rapida integrata] -La console Kasten include una guida introduttiva rapida interattiva nella sua pagina iniziale. Non esitare a seguirla per una prima esperienza pratica direttamente dall'interfaccia. +:::tip[Guide de démarrage rapide intégré +] +La console Kasten include una guida rapida interattiva nella propria pagina iniziale. Si consiglia di seguirla per un primo utilizzo direttamente dall'interfaccia. ::: -## 2. Comprendere l'archiviazione dei backup +## 2. Comprendere lo storage dei backup -Per impostazione predefinita, Kasten è preconfigurato per utilizzare il servizio di archiviazione oggetti (S3) di Cloud Temple per conservare i backup in modo sicuro e duraturo. +Per impostazione predefinita, Kasten è preconfigurato per utilizzare il servizio di storage oggetto (S3) di Cloud Temple per archiviare i tuoi backup in modo sicuro e persistente. -Non è necessaria alcuna configurazione. La posizione di archiviazione è già definita nel dashboard di Kasten, in **Settings > Locations**. Questa configurazione garantisce che i dati siano archiviati su un'infrastruttura sovrana. +Non è necessaria alcuna configurazione. Il percorso di storage è già impostato nella dashboard di Kasten, sotto **Settings > Locations**. Questa configurazione garantisce che i tuoi dati vengano archiviati su un'infrastruttura sovrana. -:::info[Modello di costo] -Il servizio Veeam Kasten è incluso nell'offerta Managed Kubernetes. L'archiviazione dei backup sul nostro S3 sovrano viene fatturata in base all'utilizzo. Consultare la griglia tariffaria per maggiori dettagli. +:::info[Modello di costo +] +Il servizio Veeam Kasten è incluso nel prodotto Managed Kubernetes. Lo storage dei backup sul nostro S3 sovrano è fatturato a consumo. Consulta la nostra griglia tariffaria per maggiori dettagli. ::: ## 3. Creare una politica di backup -Una politica di backup (`Policy`) è un insieme di regole che definiscono quando e come eseguire il backup delle applicazioni. +Una politica di backup (`Policy`) è un insieme di regole che definiscono quando e come eseguire il backup delle tue applicazioni. -:::warning[Politica di backup esistente] -Una politica di backup denominata `infra-backups` è già configurata nell'istanza Kasten. Questa politica garantisce il backup dei componenti essenziali forniti con il cluster. +:::warning[Politica di backup esistente +] +Una politica di backup denominata `infra-backups` è già configurata nella tua istanza Kasten. Questa politica garantisce il backup dei componenti essenziali forniti con il cluster. -**Non modificare né eliminare questa politica.** +**Non modificare e non eliminare questa politica.** -È necessario creare le proprie politiche per eseguire il backup delle applicazioni distribuite. +Devi creare le tue politiche per eseguire il backup delle applicazioni che distribuisci. ::: -1. Nel dashboard di Kasten, accedere alla sezione **Policies** e fare clic su **Create New Policy**. +1. Nella dashboard di Kasten, accedi alla sezione **Policies** e fai clic su **Create New Policy**. -2. **Assegnare un nome alla politica**: Fornire un nome descrittivo, ad esempio `backup-my-app-daily`. +2. **Assegna un nome alla tua politica** : Assegna un nome descrittivo, ad esempio `backup-my-app-daily`. -3. **Definire la frequenza (Action)**: - - **Action**: `Snapshot`. - - **Frequency**: Scegliere la frequenza più adatta (ad esempio, `Daily` alle `02:00`). +3. **Definisci la frequenza (Action)** : + - **Action**: `Snapshot` (istantaneo). + - **Frequency**: Scegli la frequenza desiderata (ad esempio, `Daily` alle `02:00`). -4. **Selezionare le risorse di cui eseguire il backup**: - - **Select resources by**: È possibile selezionare le applicazioni per nome (`Application Name`), per namespace (`Namespace`) o per label. - - Per eseguire il backup di tutte le applicazioni di un namespace, scegliere `Namespace` e selezionare il namespace desiderato. +4. **Seleziona le risorse da salvare** : + - **Select resources by**: Puoi selezionare le applicazioni per nome (`Application Name`), per namespace (`Namespace`) o per etichette. + - Per salvare tutte le applicazioni di un namespace, scegli `Namespace` e seleziona il namespace desiderato. -5. **Fare clic su `Create Policy`** per salvare. +5. **Fai clic su `Create Policy`** per salvare. -La politica verrà eseguita automaticamente alla frequenza definita. È anche possibile avviare un'esecuzione manuale facendo clic sul pulsante "Play" (▶️) accanto alla politica. +La politica verrà eseguita automaticamente alla frequenza impostata. Puoi anche avviare un'esecuzione manuale facendo clic sul pulsante "Play" (▶️) accanto alla politica. ## 4. Ripristinare un'applicazione -Kasten facilita il ripristino di un'applicazione al suo stato precedente da un punto di ripristino. +Kasten facilita il ripristino di un'applicazione al suo stato precedente a partire da un punto di ripristino. -1. Nel dashboard, accedere alla sezione **Applications**. Qui è possibile vedere l'elenco delle applicazioni e il loro stato di conformità rispetto alle politiche di backup. +1. Nella dashboard, vai alla sezione **Applicazioni**. Vedrai l'elenco delle tue applicazioni e il loro stato di conformità rispetto alle policy di backup. -2. **Selezionare l'applicazione** da ripristinare. +2. **Seleziona l'applicazione** che desideri ripristinare. -3. **Scegliere un punto di ripristino**: - La pagina dell'applicazione mostra un elenco dei punti di ripristino disponibili. Scegliere quello da utilizzare e fare clic su **Restore**. +3. **Scegli un punto di ripristino** : + La pagina dell'applicazione visualizza un elenco dei punti di ripristino disponibili. Scegli quello che desideri utilizzare e fai clic su **Restore**. -4. **Configurare il ripristino**: - - È possibile scegliere di ripristinare in un nuovo namespace o di sostituire l'applicazione esistente. Per questo tutorial, sostituiremo l'applicazione esistente. - - Fare clic su **Restore** per avviare il processo. +4. **Configura il ripristino** : + - Puoi scegliere di ripristinare in un nuovo namespace o di sostituire l'applicazione esistente. Per questo tutorial, sostituiremo l'applicazione esistente. + - Fai clic su **Restore** per avviare il processo. -Kasten ripristinerà ora l'applicazione allo stato acquisito nello snapshot. È possibile seguire l'avanzamento nel dashboard. +Kasten ripristinerà ora l'applicazione allo stato catturato nello snapshot. Puoi seguire l'avanzamento nella dashboard. ## 5. Sicurezza dei backup -La protezione dei dati di backup è una priorità. L'integrazione di Kasten nell'offerta Managed Kubernetes rispetta i più alti standard di sicurezza. +La protezione dei vostri dati di backup è una priorità. L'integrazione di Kasten nel prodotto Managed Kubernetes rispetta i più elevati standard di sicurezza. -- **Crittografia**: In conformità con i requisiti SecNumCloud, tutti i backup sono crittografati. I dati vengono crittografati in transito verso l'archiviazione S3 con il protocollo **TLS 1.3** e a riposo nei bucket di archiviazione con l'algoritmo **AES-256**. +- **Crittografia** : In conformità ai requisiti SecNumCloud, tutti i vostri backup sono crittografati. I dati sono crittografati in transito verso l'archiviazione S3 tramite il protocollo **TLS 1.3** e a riposo nei bucket di storage con l'algoritmo **AES-256**. -- **Gestione dei permessi**: L'accesso all'interfaccia Kasten e alle sue funzionalità è controllato da un sistema di permessi basato sul RBAC di Kubernetes. Solo gli utenti autorizzati possono creare, modificare o eseguire politiche di backup e ripristino, garantendo così una governance rigorosa delle operazioni di backup. +- **Gestione dei permessi** : L'accesso all'interfaccia Kasten e alle relative funzionalità è controllato da un sistema di permessi basato sul RBAC di Kubernetes. Solo gli utenti autorizzati possono creare, modificare o eseguire le politiche di backup e ripristino, garantendo così una governance rigorosa delle vostre operazioni di backup. ## Conclusione -È stato illustrato come utilizzare Veeam Kasten per eseguire operazioni di base di backup e ripristino nel cluster Managed Kubernetes. Kasten offre molte funzionalità avanzate, come la migrazione delle applicazioni tra cluster e politiche di conservazione granulari, che è possibile esplorare per rafforzare la strategia di protezione dei dati. +Avete imparato a utilizzare Veeam Kasten per eseguire operazioni di backup e ripristino di base nel vostro cluster Kubernetes gestito. Kasten offre numerose funzionalità avanzate, come la migrazione delle applicazioni tra cluster e politiche di retention granulari, che potete esplorare per rafforzare la vostra strategia di protezione dei dati. -Per ulteriori informazioni, consultare la [documentazione ufficiale di Kasten K10](https://docs.kasten.io/latest/). +Per ulteriori informazioni, consultate la [documentazione ufficiale di Kasten K10](https://docs.kasten.io/latest/). \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingopencost.md b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingopencost.md index 20ae286e..92091ac9 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingopencost.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/usingopencost.md @@ -9,62 +9,62 @@ import opencostmcp3 from '@site/docs/managed_kubernetes/tutorials/images/opencos ## Obiettivi -Questo tutorial presenta **OpenCost**, lo strumento di monitoraggio e ottimizzazione dei costi integrato nel cluster **Managed Kubernetes**. Al termine di questa guida, sarà possibile: +Questo tutorial presenta **OpenCost**, lo strumento di monitoraggio e ottimizzazione dei costi integrato nel cluster **Managed Kubernetes**. Al termine di questa guida, sarete in grado di: - **Accedere** all'interfaccia di OpenCost. - **Comprendere** la struttura dell'interfaccia e le viste disponibili. -- **Analizzare** la ripartizione dei costi delle applicazioni e dell'infrastruttura. +- **Analizzare** la ripartizione dei costi delle vostre applicazioni e della vostra infrastruttura. ## Cos'è OpenCost? -OpenCost è una soluzione open source, standard CNCF (Cloud Native Computing Foundation), che fornisce visibilità in tempo reale sui costi degli ambienti Kubernetes. Aiuta a capire con precisione cosa consuma risorse nel cluster e come ciò si traduce in termini di costi. +OpenCost è una soluzione open-source, standard CNCF (Cloud Native Computing Foundation), che fornisce una visibilità in tempo reale sui costi dei tuoi ambienti Kubernetes. Ti aiuta a comprendere esattamente cosa consuma risorse nel tuo cluster e come ciò si traduce in termini di costi. -Nell'offerta Managed Kubernetes, OpenCost è preinstallato e configurato per fornire una visione chiara delle spese. È direttamente parametrizzato con i costi reali dell'infrastruttura Cloud Temple. +Nel prodotto Managed Kubernetes, OpenCost è preinstallato e configurato per offrirti una visione chiara delle tue spese. È direttamente configurato con i costi effettivi dell'infrastruttura Cloud Temple. ## Accedere all'interfaccia OpenCost -L'interfaccia OpenCost è esposta su un URL sicuro, specifico del cluster. Per accedervi, utilizzare il seguente URL sostituendo `identificatore` con l'identificatore del cluster (ad esempio, `ctodev`): +L'interfaccia di OpenCost è esposta su un URL sicuro, specifico per il vostro cluster. Per accedervi, utilizzate il seguente URL sostituendo `identificativo` con quello del vostro cluster (ad esempio, `ctodev`) : -`https://opencost.external-secured.identificatore.mk.ms-cloud-temple.com` +`https://opencost.external-secured.identifiant.mk.ms-cloud-temple.com` :::info -L'accesso a questo URL è limitato agli indirizzi IP dichiarati al supporto Cloud Temple. Se non è possibile accedere, contattare il supporto per verificare le regole del firewall. +L'accesso a questo URL è limitato agli indirizzi IP che avete dichiarato al supporto Cloud Temple. Se non riuscite ad accedervi, contattate il supporto per verificare le regole del firewall. ::: OpenCost UI ## Esplorare la ripartizione dei costi (Allocations) -La vista principale e più dettagliata di OpenCost è il dashboard **Allocations**. Qui è possibile visualizzare il consumo delle risorse in tempo reale. +La vista principale e più dettagliata di OpenCost è la dashboard **Allocations**. È qui che è possibile visualizzare il consumo delle risorse in tempo reale. -Questa vista consente di scomporre i costi per concetti nativi di Kubernetes. Il menu a discesa "Aggregate by" è lo strumento principale per l'analisi; consente di raggruppare i costi per: +Questa vista consente di scomporre i costi in base ai concetti nativi di Kubernetes. Il menu a discesa "Aggregate by" è lo strumento principale per la tua analisi; ti consente di raggruppare i costi per: -- **Namespace**: Per una vista per ambiente o per team. -- **Deployment**, **StatefulSet**, ecc.: Per analizzare il costo di un'applicazione specifica. -- **Controller**: Per una vista più tecnica. +- **Namespace** : Per avere una vista per ambiente o per team. +- **Deployment**, **StatefulSet**, ecc. : Per analizzare il costo di un'applicazione specifica. +- **Controller** : Per una vista più tecnica. -### Aggregazione per Label +### Aggregazione per Etichette -Per un'analisi finanziaria ancora più dettagliata, OpenCost può aggregare i costi basandosi sui **label Kubernetes**. Non esiste un'opzione "Label" diretta nel menu, ma OpenCost acquisisce i label e consente di creare aggregazioni personalizzate. A tal fine, è essenziale una strategia di etichettatura coerente. Ad esempio, utilizzando label come `team: backend` o `product: api-gateway`, sarà possibile analizzare i costi che corrispondono precisamente all'organizzazione. -Per questo tipo di analisi, è necessario utilizzare l'integrazione AI di OpenCost. +Per un'analisi finanziaria ancora più granulare, OpenCost può aggregare i costi basandosi sulle **etichette Kubernetes**. Non è presente un'opzione diretta "Etichetta" nel menu, ma OpenCost importa le vostre etichette e consente di creare aggregazioni personalizzate. A tal fine, è essenziale una strategia di etichettatura coerente. Ad esempio, utilizzando etichette come `team: backend` o `product: api-gateway`, potrete analizzare i costi che corrispondono esattamente alla vostra organizzazione. +Per questo tipo di analisi, è necessario utilizzare l'integrazione IA di OpenCost. ## Dashboard Grafana -È disponibile anche un dashboard Grafana per visualizzare i dati di OpenCost. Questo dashboard offre una vista alternativa e complementare all'interfaccia OpenCost, e conserva la cronologia completa delle metriche dei costi, consentendo di analizzare le tendenze nel lungo termine. +Un dashboard Grafana è disponibile anche per visualizzare i dati di OpenCost. Questo dashboard offre una vista alternativa e complementare all'interfaccia di OpenCost e conserva lo storico completo delle metriche dei costi, consentendoti di analizzare le tendenze a lungo termine. OpenCost Grafana Dashboard -## Utilizzo Avanzato: Integrazione con AI (Server MCP) +## Utilizzo Avanzato: Integrazione con un'IA (Server MCP) -Per gli utenti avanzati, OpenCost può essere interrogato direttamente dall'assistente conversazionale Cline (o altri) grazie al sistema di **server MCP (Multi-purpose Co-processor)**. Ciò consente di creare script di query e ottenere dati sui costi direttamente nelle conversazioni. +Per gli utenti avanzati, OpenCost può essere interrogato direttamente dall'assistente conversazionale Cline (o altro) grazie al sistema di **server MCP (Multi-purpose Co-processor)**. Questo consente di eseguire query tramite script e di ottenere i dati sui costi direttamente nelle conversazioni. -### 1. Configurazione dell'MCP OpenCost in Cline +### 1. Configurazione di MCP OpenCost in Cline -Per connettere Cline all'istanza OpenCost, è necessario aggiungere la seguente configurazione al file `cline_mcp_settings.json`. Questo file si trova solitamente nella directory di configurazione di Cline. +Per connettere Cline alla tua istanza OpenCost, devi aggiungere la configurazione seguente al tuo file `cline_mcp_settings.json`. Questo file si trova generalmente nella directory di configurazione di Cline. -Si consiglia di creare un server MCP denominato "opencost-xxxxx" dove xxxxx è il nome del cluster Kubernetes gestito. -L'URL del server MCP ha il seguente formato: `https://opencost-mcp.external-secured.identificatore.mk.ms-cloud-temple.com` -Ad esempio, per il cluster "bestie": +Consigliamo di creare un server MCP "opencost-xxxxx" dove xxxxx è il nome del tuo cluster Kubernetes gestito. +L'URL del server MCP è di tipo `https://opencost-mcp.external-secured.identifiant.mk.ms-cloud-temple.com` +Ad esempio, per il cluster "bestie" : ```json { @@ -82,49 +82,50 @@ Ad esempio, per il cluster "bestie": } ``` -Per generare il valore `` dalle proprie credenziali, utilizzare uno dei seguenti comandi: +Per generare il valore `` a partire dalle tue credenziali, utilizza uno dei comandi seguenti : -**Per Linux/macOS:** +**Per Linux/macOS :** ```bash -echo -n 'finopsadm:LA_VOSTRA_PASSWORD' | base64 +echo -n 'finopsadm:VOTRE_MOT_DE_PASSE' | base64 ``` -**Per Windows (PowerShell):** +**Per Windows (PowerShell) :** ```powershell -$credentials = [System.Text.Encoding]::UTF8.GetBytes("finopsadm:LA_VOSTRA_PASSWORD") +$credentials = [System.Text.Encoding]::UTF8.GetBytes("finopsadm:VOTRE_MOT_DE_PASSE") [System.Convert]::ToBase64String($credentials) ``` -Una volta salvato il file, Cline caricherà automaticamente il MCP `opencost-xxxxx` all'avvio. +Una volta salvato questo file, Cline caricherà automaticamente il MCP `opencost-xxxxx` all'avvio. -### 2. Interrogare OpenCost con l'MCP +### 2. Interrogare OpenCost con il MCP -:::tip[Prerequisiti] -Per interagire con l'MCP in linguaggio naturale, l'AI sottostante deve avere accesso a modelli linguistici (LLM), sia localmente (LMStudio, ecc.), sia tramite una connessione a servizi pubblici come GPT-5 o Gemini, sia utilizzando la nostra offerta sovrana **[LLM-as-a-Service](pathname:///llmaas/llmaas)**. +:::tip[Prerequisiti +] +Per interagire con il MCP in linguaggio naturale, l'IA sottostante deve avere accesso a modelli linguistici (LLM), sia localmente (LMStudio, ecc.), sia tramite una connessione a servizi pubblici come GPT-5 o Gemini, sia utilizzando il nostro prodotto **[LLM-as-a-Service](pathname:///llmaas/llmaas)** sovrano. ::: -Dopo la configurazione, è possibile utilizzare gli strumenti LLM per effettuare query in linguaggio naturale su questo server MCP. +Dopo la configurazione, è possibile utilizzare gli strumenti LLM per eseguire query in linguaggio naturale su questo server MCP. #### Esempio -"Utilizza il MCP 'opencost-bestie' e dimmi quale percentuale dei costi del cluster non è allocata a risorse" -Si otterrà questo: -Risposta AI opencost +"usa il MCP "opencost-bestie", e dimmi quale percentuale dei costi del cluster non è allocata alle risorse" +Otterrai questo: +risposta IA opencost #### Esempio 2 -"Utilizza il MCP 'opencost-bestie' e elenca i costi associati ai volumi persistenti per la giornata di ieri" +"use il MCP "opencost-bestie", e elencami i costi associati ai volumi persistenti per la giornata di ieri" -Risposta AI opencost 2 +risposta IA opencost 2 #### Esempio 3 -"Utilizza il MCP opencost-bestie e dimmi quale percentuale dei costi del cluster è allocata all'applicazione con il label 'nginx'. (filtro della forma filter: 'label:app:frontend')" +"utilizza il MCP opencost-bestie, e dimmi quale percentuale dei costi del cluster assegnati all'applicazione con l'etichetta "nginx" . (filtro del tipo filter: "label:app:frontend" )" -Risposta AI opencost 3 +risposta IA opencost 3 -## Conclusione +## Conclusion -OpenCost fornisce strumenti potenti per un'analisi dettagliata e in tempo reale dei costi del cluster Kubernetes. Utilizzando principalmente la vista **Allocations** e combinandola con una buona strategia di etichettatura, è possibile ottenere una visione chiara delle spese, allineata sia ai deployment tecnici che all'organizzazione interna. L'utilizzo di LLM e del server MCP OpenCost consente di approfondire ulteriormente lo sfruttamento dei dati. +OpenCost fornisce potenti strumenti per un'analisi granulare e in tempo reale dei costi del tuo cluster Kubernetes. Utilizzando principalmente la vista **Allocations** e combinandola con una solida strategia di labeling, è possibile ottenere una visione chiara delle spese, allineata sia ai deployment tecnici che all'organizzazione interna. L'utilizzo dei LLM e del server MCP di OpenCost consente di approfondire ulteriormente l'utilizzo dei dati. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_mariadb/concepts.md b/i18n/it/docusaurus-plugin-content-docs/current/managed_mariadb/concepts.md index 993bc2b2..3c0bc260 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/managed_mariadb/concepts.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/managed_mariadb/concepts.md @@ -5,113 +5,111 @@ sidebar_position: 1 # Concetti Chiave di MariaDB Gestito -Questa sezione presenta i concetti fondamentali del nostro servizio **MariaDB Gestito**. Comprendere questi principi vi aiuterà a sfruttare al meglio il vostro database gestito, allineando le sue capacità alle vostre esigenze applicative e ai requisiti di sicurezza. +Questa sezione presenta i concetti fondamentali del nostro servizio **MariaDB Gestito**. Comprendere questi principi ti aiuterà a sfruttare al massimo il tuo database gestito, allineandone le capacità alle tue esigenze applicative e ai requisiti di sicurezza. ## Sovranità e Conformità SecNumCloud -Al centro della nostra offerta si trova la **sovranità digitale**. Il servizio MariaDB Gestito è interamente ospitato sull'infrastruttura Cloud Temple, qualificata **SecNumCloud 3.2** dall'ANSSI. +Al centro del nostro prodotto vi è la **sovranità digitale**. Il servizio MariaDB Gestito è interamente ospitato sull'infrastruttura Cloud Temple, qualificata **SecNumCloud 3.2** dall'ANSSI. -- **Hosting 100% in Francia**: I vostri dati rimangono sul territorio nazionale, al riparo dalle leggi extraterritoriali. -- **Conformità nativa**: La soluzione è progettata per soddisfare i requisiti normativi più stringenti (RGPD, HDS, LPM, NIS2, PCI-DSS). -- **Open Source e Reversibilità**: Basandoci su standard aperti come MariaDB Community Server e Galera, garantiamo l'assenza di dipendenza tecnologica (*vendor lock-in*) e una portabilità totale dei vostri dati. +- **Hosting 100% in Francia** : I vostri dati rimangono sul territorio nazionale, al riparo dalle leggi extraterritoriali. +- **Conformità nativa** : La soluzione è progettata per soddisfare i requisiti normativi più rigorosi (GDPR, HDS, LPM, NIS2, PCI-DSS). +- **Open Source e Reversibilità** : Basandoci su standard aperti come MariaDB Community Server e Galera, garantiamo l'assenza di dipendenza tecnologica (*vendor lock-in*) e una portabilità totale dei vostri dati. -## Architettura ad Alta Disponibilità: Galera Cluster + MaxScale +## Architettura ad Alta Disponibilità : Galera Cluster + MaxScale -Per gli ambienti distribuiti, il nostro servizio si basa su **Galera Cluster** per offrire alta disponibilità senza perdita di dati. +Per gli ambienti distribuiti, il nostro prodotto si basa su **Galera Cluster** per offrire un'alta disponibilità senza perdita di dati. -- **Replicazione Sincrona**: A differenza della tradizionale replicazione asincrona, ogni transazione viene validata su tutti i nodi del cluster *prima* di essere confermata. Ciò garantisce un **Recovery Point Objective (RPO) pari a zero**: nessun dato validato può essere perso in caso di guasto. -- **Distribuzione Multi-AZ**: Il cluster è distribuito su tre Zone di Disponibilità (AZ) distinte. Il guasto di un intero datacenter non provoca alcuna interruzione del servizio né perdita di dati. -- **Failover Automatico**: In caso di incidente su un nodo, il traffico viene automaticamente reindirizzato verso i nodi sani, garantendo un **Recovery Time Objective (RTO) minimo**. -- **Proxy MaxScale**: MaxScale è un proxy, router e load balancer avanzato per MariaDB. Gestisce il failover automatico nella replicazione, bilancia le richieste (scritture verso il primary, letture verso le replicas tramite ReadWriteSplit) e offre filtri per cache, audit (QLAfilter) o sicurezza (RegexFilter). +- **Replicazione Sincrona** : A differenza della replicazione asincrona tradizionale, ogni transazione viene validata su tutti i nodi del cluster *prima* di essere confermata. Ciò garantisce un **Obiettivo di Punto di Ripristino (RPO) pari a zero** : nessun dato validato può andare perso in caso di guasto. +- **Distribuzione Multi-AZ** : Il cluster è distribuito su tre Zone di Disponibilità (AZ) distinte. Il guasto di un intero datacenter non causa alcuna interruzione del servizio né perdita di dati. +- **Failover Automatico** : In caso di incidente su un nodo, il traffico viene reindirizzato automaticamente verso i nodi sani, garantendo un **Obiettivo di Tempo di Ripristino (RTO) minimo**. +- **Proxy MaxScale** : MaxScale è un proxy, router e load balancer avanzato per MariaDB. Gestisce il failover automatico nella replicazione, bilancia le richieste (writes vers primary, reads vers replicas via ReadWriteSplit) e offre filtri per cache, audit (QLAfilter) o sicurezza (RegexFilter). -## Modelli di Deployment +## Modelli di Distribuzione -Proponiamo due modelli per adattarsi alla criticità dei vostri carichi di lavoro. +Proponiamo due modelli per adattarsi alla criticità dei carichi di lavoro. ### 1. StandAlone Questo modello distribuisce un'istanza singola del motore MariaDB. -- **Caso d'uso**: Questo modello di deployment è perfetto per applicazioni semplici, come CMS, che utilizzano un unico endpoint per connettersi ai database. -- **Resilienza**: Sebbene si tratti di un'istanza singola, lo storage sottostante è replicato su 3 AZ, consentendo un riavvio automatico su un'altra AZ in caso di guasto hardware. -- **SLA**: 99,9% (escludendo le finestre di manutenzione). +- **Caso d'uso** : Questo modello di distribuzione è ideale per applicazioni semplici, come i CMS, che utilizzano un unico endpoint per connettersi ai database. +- **Resilienza** : Sebbene si tratti di un'istanza singola, lo storage sottostante è replicato su 3 AZ, consentendo un riavvio automatico su un altro AZ in caso di guasto hardware. +- **SLA** : 99,9% (esclusi i periodi di manutenzione). -### 2. Distributed +### 2. Distribuito Questo modello distribuisce un **cluster Galera di 3 istanze** del motore MariaDB, completato da un proxy **MaxScale**. -- **Caso d'uso**: Questo modello di deployment è perfetto per applicazioni con accessi distribuiti, come applicazioni di data o business intelligence, che beneficiano di accessi in sola lettura senza impatto sull'ingestione dei dati. -- **Componenti**: - - **3 Nodi MariaDB**: Un nodo primario in lettura-scrittura (RW) e due nodi secondari in sola lettura (RO). - - **Proxy MaxScale**: Un router intelligente che distribuisce le richieste. Invia le scritture al nodo primario e distribuisce le letture su tutti i nodi (`ReadWriteSplit`), ottimizzando così le prestazioni. -- **SLA**: 99,9% (escludendo le finestre di manutenzione). +- **Caso d'uso** : Questo modello di distribuzione è ideale per le applicazioni con accessi distribuiti, come le applicazioni di data o business intelligence, che beneficiano di accessi in sola lettura senza impattare l'ingestione dei dati. +- **Componenti** : + - **3 Nodi MariaDB** : Un nodo primario in lettura-scrittura (RW) e due nodi secondari in sola lettura (RO). + - **Proxy MaxScale** : Un router intelligente che distribuisce le query. Invia le scritture al nodo primario e bilancia le letture su tutti i nodi (`ReadWriteSplit`), ottimizzando così le prestazioni. +- **SLA** : 99.9% (esclusi i periodi di manutenzione). -> **Nota Importante**: Non è possibile modificare il modello di deployment di un cluster esistente (ad esempio, passare da *StandAlone* a *Distributed*). Questa operazione richiede la creazione di un nuovo cluster nel modello desiderato, tramite un ripristino. +> **Nota Importante** : Non è possibile modificare il modello di distribuzione di un cluster esistente (ad esempio, passare da *StandAlone* a *Distributed*). Questa operazione richiede la creazione di un nuovo cluster nel modello desiderato, tramite un ripristino. ## Backup e Ripristino (PITR) -La protezione dei vostri dati è garantita da una doppia strategia di backup. +La protezione dei dati è garantita da una duplice strategia di backup. -1. **Backup Fisico e Point-in-Time Recovery**: - - Eseguiamo backup fisici completi giornalieri (`mariabackup`) (senza interruzione del servizio). - - Con la versione **distributed**, i log delle transazioni (*binary logs*) vengono archiviati in modo continuo. Questa combinazione consente un ripristino PiTR fino al momento immediatamente precedente a un incidente. +1. **Backup Fisico e Recupero punto nel tempo** : + - Eseguiamo backup fisici completi quotidiani (`mariabackup`) (senza interruzione del servizio). + - Con la versione **distributed**, i log delle transazioni (*binary logs*) sono archiviati in modo continuo. Questa combinazione consente un ripristino PiTR fino al momento immediatamente precedente un incidente. -2. **Backup Logico (`mysqldump`)**: - - Vengono effettuati anche export logici dei database. +2. **Backup Logico (`mysqldump`)** : + - Vengono eseguiti anche export logici dei database. - Offrono una granularità fine per ripristinare o esportare un singolo database. -Tutti i backup sono cifrati a riposo e archiviati nel nostro Object Storage S3, anch'esso qualificato SecNumCloud. +Tutti i backup sono cifrati a riposo e archiviati sul nostro Object Storage S3, a sua volta qualificato SecNumCloud. ## Sicurezza a Più Livelli La sicurezza è integrata in ogni livello del servizio. -- **Isolamento di Rete**: Le istanze di database non sono **mai esposte su Internet**. L'accesso avviene esclusivamente tramite la rete privata del cliente. -- **Cifratura end-to-end**: - - **In transito**: Tutte le connessioni (client verso database e tra i nodi del cluster) sono cifrate con TLS 1.3. - - **A riposo**: I dati su disco (tablespace InnoDB) e i backup sono cifrati con AES-256. -- **Gestione degli Accessi**: L'autenticazione è protetta (plugin `ed25519` o `sha256_password`), e i permessi sono gestiti secondo il principio del minimo privilegio. +- **Isolamento di Rete** : Le istanze del database non sono **mai esposte su Internet**. L'accesso avviene esclusivamente tramite la rete privata del cliente. +- **Crittografia end-to-end** : + - **In transito** : Tutte le connessioni (dal client al database e tra i nodi del cluster) sono crittografate con TLS 1.3. + - **A riposo** : I dati su disco (tablespace InnoDB) e i backup sono crittografati con AES-256. +- **Gestione degli Accessi** : L'autenticazione è sicura (plugin `ed25519` o `sha256_password`), e i permessi sono gestiti secondo il principio del minimo privilegio. ## Servizio Gestito ("Zero Ops") -L'obiettivo di MariaDB Gestito è sollevarvi dalla complessità operativa. I nostri team si occupano di: +L'obiettivo di MariaDB Gestito è liberarvi dalla complessità operativa. I nostri team gestiscono: - Il provisioning e la configurazione iniziale. - La gestione completa del ciclo di vita: aggiornamenti minori, applicazione delle patch di sicurezza. - Il monitoraggio 24/7 dell'infrastruttura e del servizio. - La gestione e la verifica dei backup. -Questo consente ai vostri team di concentrarsi sullo sviluppo applicativo e sull'utilizzo dei propri dati. +Ciò consente ai vostri team di concentrarsi sullo sviluppo applicativo e sull'utilizzo dei propri dati. ## Politica delle versioni e ciclo di vita -La fondazione MariaDB pubblica versioni con supporto a lungo termine (LTS), il che garantisce stabilità e prevedibilità. Il nostro servizio si basa su queste versioni per assicurare la longevità della vostra infrastruttura. +La Fondazione MariaDB pubblica versioni con supporto a lungo termine (LTS), garantendo stabilità e prevedibilità. Il nostro servizio si basa su queste versioni per assicurare la longevità della vostra infrastruttura. -| Versione | Tipo | Supportata fino a | +| Versione | Tipo | Supportato fino a | | :--- | :--- | :--- | | **MariaDB 11.4** | LTS | Maggio 2029 | | **MariaDB 11.8** | LTS | Giugno 2028 | -- **Aggiornamenti minori**: Le patch di sicurezza e le correzioni di bug vengono applicate dai nostri team tramite *rolling update* (nodo per nodo) per non causare alcuna interruzione del servizio. -- **Aggiornamenti maggiori**: Gli aggiornamenti di versione principali vengono pianificati in collaborazione con voi per allinearsi al vostro calendario. -- **Fine del supporto**: Vi notifichiamo almeno 180 giorni prima della fine del supporto di una versione LTS per pianificare la migrazione alla versione successiva. +- **Aggiornamenti minori** : I patch di sicurezza e le correzioni di bug vengono applicati dai nostri team tramite *rolling update* (nodo per nodo) per evitare qualsiasi interruzione del servizio. +- **Aggiornamenti maggiori** : I passaggi di versione maggiori vengono pianificati in collaborazione con voi per allinearsi al vostro calendario. +- **Fine del supporto** : Vi notificheremo almeno 180 giorni prima della fine del supporto di una versione LTS per pianificare la migrazione alla versione successiva. ## Dimensioni delle istanze -Le istanze ***StandAlone*** e ***Distributed*** sono disponibili in dimensioni predefinite: - -| Dimensione | vCPU/nodo | RAM/nodo | Max Conn | Working Set Max | DB Totale Max | -| :-- | :-- | :-- | :-- | :-- | :-- | -| **Micro** | 1 | **2.00 Gi** | **40** | **1-2 GiB** | **2-8 GiB** | -| **Small** | 1 | **4.00 Gi** | **80** | **2-5 GiB** | **8-16 GiB** | -| **Medium** | 2 | **4.00 Gi** | **80** | **2-5 GiB** | **8-16 GiB** | -| **Med-Large**| 2 | **8.00 Gi** | **150** | **4-10 GiB** | **16-32 GiB** | -| **Large** | 4 | **8.00 Gi** | **150** | **4-10 GiB** | **16-32 GiB** | -| **X-Large** | 4 | **16.00 Gi** | **250** | **8-20 GiB** | **32-64 GiB** | -| **2X-Large**| 8 | **16.00 Gi** | **250** | **8-20 GiB** | **32-64 GiB** | -| **3X-Large**| 8 | **32.00 Gi** | **500** | **16-40 GiB** | **64-128 GiB** | -| **4X-Large**| 16 | **32.00 Gi** | **500** | **32-80 GiB** | **128-256 GiB** | -| **5X-Large**| 16 | **64.00 Gi** | **500** | **32-80 GiB** | **128-256 GiB** | -| **6X-Large**| 32 | **128.00 Gi**| **500** | **64-160 GiB** | **256-512 GiB** | - -> **Nota**: Lo storage viene provisionato separatamente e può essere aumentato a caldo (da 2 Gi a 512 Gi) (ma non ridotto, se non ricreando una nuova istanza). +Le istanze ***StandAlone*** e ***Distributed*** sono disponibili con dimensioni predefinite: + +| Dimensione | vCPU | Memoria | innodb_buffer_pool_size | innodb_buffer_pool_instances | max_allowed_packet | table_open_cache | maxconn | +| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | +| **XS** | 1000m | 4096Mi | 2458M | 2 | 256M | 800 | 80 | +| **S** | 1000m | 8192Mi | 4915M | 4 | 512M | 1600 | 150 | +| **M** | 2000m | 8192Mi | 4915M | 4 | 512M | 1600 | 150 | +| **L** | 2000m | 16384Mi | 9830M | 8 | 1G | 3200 | 250 | +| **XL** | 4000m | 16384Mi | 9830M | 8 | 1G | 3200 | 250 | +| **XXL** | 4000m | 32768Mi | 19660M | 16 | 1G | 6400 | 500 | +| **3XL** | 8000m | 32768Mi | 19660M | 16 | 1G | 6400 | 500 | +| **4XL** | 8000m | 65536Mi | 39320M | 16 | 1G | 10000 | 500 | + + +> **Nota** : Lo storage è provisionato separatamente e può essere aumentato a caldo (da 2Gi a 128Gi) (ma non ridotto, tranne ricreando una nuova istanza.). \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_mariadb/images/Distributed.png b/i18n/it/docusaurus-plugin-content-docs/current/managed_mariadb/images/Distributed.png deleted file mode 100644 index ee4a1e353a2658a16bc1f5124435c901c6cb9349..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72032 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

      VwShLNe#3Wqi1Ep5M@G#07mwr^kgWb7IrbRcTu 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%0ApFbHUlp4zL?BR+4PH$q6>=m>6tw4 zTUyG;U|iv}N~da&k(DL4RlotDM9`@O6$yz`RYTAw5*11(+8qz{>(jz~dPn;6;kELq zcKPQM47l#`U@^pk6-{K|GJIP6Pw!M2Jiyn2P*jYh|F5Z#O8)1Yu(-QMEu^u6)^t%c z-~flp*3QUuAy|?J=R|V&*e;#}X?iQHD_rKgdK(dq>KS|PwMa-GA=N{?| zQ2efOlMfoEl#+)>&HQ>qLV}{Is%n3Z#_ia9PWeZCq|A_(6}7(ZEN(aL|2HfDeuua{ z{afCXK1{SOhqrHdYs9T~Wr8!lUDb?hXmU!*w$ob&)CmbtbzZ;!tNr6j^{(!^x3)g?K^DRh?>RV@x5GpFlWBe@1rwLPxxhn~0zi{gu33d9D$aEzXS&~x=^Y0#B zn?Q@p;I%qAn}^CM;^xUgo12?IG+b(HLjaXH?a~bq|EVsp_mikmSf1e3Y1SkY$EHv} zNZo?Ut5bQwgAH#^7{4y?LaR}o4Wyd%Z%Yc|s`)-+BB!i;xjo72xh`CZuZzL3k8*x_5GhQp=ezi94Pf8OfV43>Fs$81MxL%u$TSwzd`^L{Q>s7n2 zK>Z^bGW^3$-j^X77QT))1c+NEgGL!u)v$SaW+by_3i*k9^4=T>60)VUAIyK+a1!%} zzf(@f`iS|~Ej5r{q+XW|GH5WppBAFl@muXmHttE4PR*py4CLoa_5&;kl~Z%!>%zCW z#vpdCLAS|?i~$yIgTIV`CG}^S#S|kt@u>DT z1DX_Hk`%wl2`o+_lxhb=x{wBCm}*?y#uhmf4R;@My;YHd>NJ8xrg(M5fMqwmRHWdE z*+iY=An>(#0N$LvS{Mvz- z{0azoS`ADq$w%^95`gMEplL0TnkER zKT9*dadN?ST8DAIE_9C znH;;O_H)rSOLDgyjLClpFoM1|2u<9VU}GSB^D3B>Z^SCu;4%tdN?zRK0*k6wzZXiA zy|=~wmAEB6He}IlM^^=984L^lT zzc;*Bo2e$zT5q~c(qE~Vo3T4D!9JCrERZ*|+Y{=V!ps#?`R1Ej1BG~1hw2RP#`cgY zv!-1d|IK-g?%v-QB(jylQj>r?nK?pTs=3Ei{?6MfA`I*Llw0Tu`R#N? zq<8qDXdHe=O=D2DrvZ9!I=c_+hy!=Hc=j z@}+u?7h{twbWKDGLLS`Teji;TFN&t~QUIHb8?5<1S$%h1gRP?{m)VXmB}{2y0{G;Y z)$;W>NS~&p? zzwvhQ)eN5o^EUc+Wc-|8?uTKbTTo*l+U1|a4dw2&xtA;@Ul1#&%u^l!R!NgBdrJCT zfZ-Y=8cocsLC=z>5`G&U+*G8KKPUw4=J%8kvicu%w@07*;pr5KNJY(itxOgfFHC2d zPR>)EC&9igLCURvp4zLfr({{;%+ BDS-e0 diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_mariadb/images/StandAlone.png b/i18n/it/docusaurus-plugin-content-docs/current/managed_mariadb/images/StandAlone.png deleted file mode 100644 index b45d0458aaa988c2404e508a15eeb92d3803a869..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42541 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 diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_mariadb/images/stack.png b/i18n/it/docusaurus-plugin-content-docs/current/managed_mariadb/images/stack.png deleted file mode 100644 index e66ea488e66549c99d5e00ba0743278bb2a52456..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8593 zcmc(FdsLEXySKe%+Ci! zX{gLpGfrbFW=e=aX-cL-W(f*NisBR?BJzN8+Gy|Wz1O$CcfH^G*1Pxq<5{fdzVGL` zuKT)w*Y9^-&*Ivb;b9JoKUr*JW8-l6(1EXQY~}&h3vR#AI&$gi)iCSNJoMLL`)q2s zZttx(3lMvc?X|I~BP}t)ZLRlWodLVA+{+I>FUBQq$| z7!4*?@7_)C%MK(or`XX0Zue{WcY2EwyEBG4q*J(KHR1%qWOvu2HdLTx(k1*3Da3MC zFapYMhF!wvQQRFeDI zkl=59io2IQ5M|b~yqsbfmY|jjhpyJ{u<$_syLWI>AFM!YmK~|BW{sZ-ypvgbx8EG- zn_1>Pm@r7V6U^86xBzb-jW^FoiMp6dh8X;0Oe(u;kNdUhY1i|(!_DdG58=d-gD&L( z3-668wNI>@LPvzOVpF+{e6>?9e(RP@fzDkYnQI8EhYhL^9=ccck=p#5=r*-dyTz8 z^dwiKP=!CdohKAohw_J51GTN%)=_$0mpjxyNhnSu4U2aq?!O%sfG-_ec43K=vba6vYXob4ye~FAZc=4Q>on4 zeH+$!ped@aJ$WVo*CZjV2Jb37_WQ{U?-TNB?pETBEecbKN7f(so;RRGu&jG20iVxY zf=@wS)+8cy$s|~I>ib2wf+nv?QIX|fKT?uG9#1G)o@C zPW|K(+O0ywPwm_xiPj+Dmi%$sXZlZ;!o~`hlZeipZ@YXPN3iAHkX+5x%dSLb4=mVdZPAOnePtdS9eUV2F0r8@fAl!89H!x;0L{#@Eo%tY0JPDCy_)Nh^n4Z1;c3 zDA7s3Xs!69Z~8E*%TzrV5kgyJR=u4R(5S zGra7#{qD-RlJf8x&=v6Fq)%iQg&2V_u}HKKgvxZ1^0Eax7~-E{miMmR`{_|*c!iMm z9qWyx4x7#lhq8K>d|x1%PMcnY`{{LL8yBpg;}?*sK)* z7jGZkOhUpbj8z~-ATijS0_P1rf|0fpNZ@F1;~OK^pqNgx9{R7ho_25Nh3;My3)z`R zsmmMQ6%W*JSCq!xXoX}L-{|!wy~kQu-X;Y;x;3@@d^@Dh^l4dZwPuUp9umP#?YY4; zWoaRkDGs?Q1ucVNV5s>mq;b|dHQcTG0X2i9leY;k#QGy2nP zs&^&{PuA|NWX@-d2%myuUlsNbZo1efTWG-^(k)pZA>PGQN&4^KoU>5=%}s3P@z3 zQ&~W=;U(o<@m^+5c{%3ho<&p7_8e-CZ#7G0fHooN7kO=f_a>oR`>n)!)}XVHJ<(F| zQNm57oCtCehuxD+FbM+5wDNY+vE}K7Mb!Gs$pOio3x0FpMaAmXcd^Q(07abLT3%uC zjdPlPpJohJsXC%+Btdtnwfn^7s^>Ftqq(M1Ct$3hH}h$~eQ*@!`_gNiTUezcvem4w z5{s__wr>(Lao`&EKu9ll0Kp1u3*IkaSlH+{Q7zom73qzU-Ag6FPkMEMU#z-X9rU7V z^d7!_$P83 zL&Rkjj&g@ic3l%5>ZXZ$4{4XW7t?4a$$*H!bVoC|ROKyGJBcQd?wn9hdXZu7?Y-qu zRK*P9&R7_K{)wFOOtEw3cn5K#Ywfy+RZ%bD&l|6R2RX~`PA`*jd?E3Aeb9CFt^l=b z`)(F`*K;%)*{AL(JSS8imm{UBy%U%w($D~^V&Y`#()MMFMDP+1B(!ie-Vkt6DZUKy zl-kpf`~8y)ElZLe;`{NB`#KG}PTCc)E4SNhH6&_ujd1H<_fR?6YdvjV1}sn78H%fy zpcW2ZNzbl$Pq?ftT8oQkxEPeIx2z{GV&)%O6s)=BrFygFzPgLy%$uR*fHS%j1kEEj zPg(EEpNI@;?;`kkL)tTZ;(;cXoRWTCBNb7&3mQiWgb<)C4u`*f5e~%P zxd(Blj)!6|Hf#wRV&$UC7Kfv9n-c{Lj1Y?&e&SE1kK(&35sF_t;S`}NS};a)1toJZ zyZ5wk(_4>jyFQw7B*^9G6fr8(uc`}G@7VQ0uJwAx_kCsySKTXyKm^{3BZG00%@Fg9 zN%pQz30KuB2jQx?L6oG%RpP$pl=zO5Bn}jHCCyK&iru1E18DsP&12wL54KkY%Y~%` z10pQX4X8FaNQ#_vOgy8ZzS;iWpZ3AQpX^)x=X__o1m_R20SkxrSn1>9-ox{K>DdSO zRP2?x-F0zBI2aluN=Uk08OCqSdTHDyc*Nize?l`^iGq(>m5g!PRlrTPf4fI!l8We}|Y5tOI_$FK4Av*~pUNBzM zziWg%&v6HC(O1FfTK8+d&0&si71Y*Pt1|U7=C?R{E>9P9s;}TNTs88{S9!1hhnuPY zJ(B->2l;>M9#KJJ*+2C#Pw=38Kg;N@E&DaTaJ$HTg00u7^S5nOtPB;*D_)*{-P(P2 z+6RX&Pyg;*PWfH?;HN$<;a}yrpI!^E+|uGmy+J*`()!rJfAM2LmN1=Vi;l6!s=Pe}XgoF*?8fKdC z>mLgn?r-~O<-^~6edS=bP4_augsIn7b!%1Uic=rVh6L!m;4dUIFyw_>SpFV%nGM;G zc|oFkQJj-xxp#S(V65H03_;8|!weB^z7c1@8Zb`?pYYU?vO>xiyf`6nyi=1A{Um!f ztOn19)+BE$uWt}fewFi))_Fl^GtVzW8;obr@?Wc-m0#7bA)j`Vx=HA3HZ;)##OAxZ zQ06E#Mwf;3(JB`ZgMH}k$Gt!LB5qZ%&icsmkj87h*n{Qn zymd3*V4Lu>yuCUP3{FQGI~vhr%W`qT$po;kt}|>F2C&$}r)9-scgq%dJGU(<{VxT6 z7f&!&P$=O9g$yPfWFe^= zW92uECt8jZ4X4-5!g1`!>64YilI+GqQ%*k~El*g}O_qErg z&!z~fVL%NFI8xhs;MHAWUsdX0hb8}C@BBJ?S@~aXb(vp>(`9c`!(#qNlE3LeAuAXXZ`5>ojTw~qZ;wTKWdb)rXgZI9-rG`d! zJz~&W?Q1Y0osfH}M@djq)`z;dO|xfLsql#sJ)~vrJ4$gYde;`gm171tK0-txUD@GB zSRpyrzxi8+$7fkXzQJ5|lelgMFT1p|hSr4JMHuqSkZ07hr>-1C05fCl6~c_iv6H?x zqlgxD+4P=@^OW~b?9|h;#%uiDCuTDl|B|^B=O>rPFv7laeElpNV${RqPlN6-lItHF4Ja~!W)B78`e1b8GqVR!4( z;z|b*>EwhE1gj7s9ur08;JxN7ec`ted2R#4U!hiPHSa-p`Cb7pJ;Kg5oeidK+YQL{ z==zD9TKaw8!M>mcCQR0uX5QHlITk96cK1l;>}uweW$rD4vgtqk7Uy0Xq&oX>Xie;$ z{|urALW}9VhTQBCd~nX%w=?$}vc7fz$@@-0r>k4AeL6uPcca3zrXKE8ToBJ0s%xhu zN>5=?&BuvvKV=cDJ-9YsTE|+5eA0r>e)mjvAsZRbOWtt5o=^1UiZUzX99Wk6xc+RW z3d>D*&k!N7JLqZ(id>fr<<>2m#Y=Bm#E9HW(N+EOSV=1;&9`#M_VX=F=0N{yK%1ZU z4(p91L=B1_X<2D;VtAj6N3cr^woJVwPYd+;djNF0W2^Q~NhpGs{OSE6^ROIB9F)ds zFV#hmevM&`VF6a5#^APZ5Im^D5sam&Q)(WiH+3$xeEVoud^;ccz*+ZSf9aMN2Uam3 zTkv{YfA_h}8GHB(L_YKDAEP1M50N|^RGhz#HWWM;rF@`qjO!Z&e;4`00W=5tf6hGr zB0=7|OTo6hIgFke>6RggcXk8^!q@|%jI4&~XUvdx@I-56IN30+ZJ-~rRsvn2xy&W{ zj>Bjl{i{zST|huoce40u`|6oCc{i~Wm7&_c*x*zXNVKrJGx3TuG~+hpTf-`g)ZJF z$r4L1=T0EQLi~05gAV$tnI5b2i`0FWV;XL@&|t_xO-F>EYGwl6&8RT1xgo+%UGB!g zh`(nl3i!7u?l04p!&UJkY%Fv7{Q50*!Iv)^WG+s|9HR;#)^ZQdzO zw~Vgct`2xEmHRp37~Ry`w`MjQLP+wj=rt<~FJ}JC-Y$vZA>|c;aA>oRWqvTy;VKhl zjiyhc5A1gI0CrH}ufCR2b?T)p1KUBNnNb2Mek$2^llQX8NjOP29jTE((ZAAF?Gt7k z=ru->S8LEU=9y|FwV(~mYne25Z|cK9xQY*Qx704=@brA8|0$-u9;ZeEbe+WMu)s;q zb%Iht&bRJB5#{wAJm+&;Ad3G>kC&ejEFa7XaXbEq0$&>Q5xvvuUU= zOQw%P(K5Vknw~~>Pb!De<8WSgjrAMtkxQbNO7w_Z3(NdeC|jfP1?nT+Rpl)NQB%Y-M8#t` z89;cMGw&{SSq^BE0PSi#z*AMndyiu0$E5dTj-@-W%@Czmmi3&D+&n z5Hh{wLhhG3`8mrU(NDN)sdO4rA2|P#ZkW?KplY){!1Pq)c`6h~1f7^vIAR<6GxM572Kb_2!wMj65pHV^ zbK_t0o{C?W0fkgh@th~OXG3LT>a~1 zvsG~GigdtJF*-+0e>dwnE0In|1pT+Ew~x%$g#RA~aP&b_9V~IsFjIMlIPtbMYwC!1 zAbU!|DN;ZGPnVd{AiWdp5DS(!X->}Gyf#7srWikep>NXQq4Hg7;#G( zSyPah#&jC#@oxU{hS%o5@YAqeLDb>dKCS?8{Ea%Gi~`Ki<{{Y;d5`2OuLOPp(c@#G z4}A!9>?X7nGRNAS0x}5t>7I0@1THyuB8=Jf*B+}(BRFFYcvMW$SH^T@WbXRh^k3&N z#vBJm0`cZCqm>#yqI$aOf}+aQP_MR9+8luFfcC^-Q~5dj1`w5Tl^w@J%`F^i0Nv0S z26yM{EL`tR(6Ar(&ow?b(g94d)9ci-fzm7k`TZ~j^m4;o-`Q6V)$h}>a7J%}drOog z^>taZbbl~3HkbIuSk68*spp0nRP#jBOvxca?3SXrG>i?T1f37Bz^0FJIw#W5rtfcY zI3J5%PU5HUj+5qR&LIeU%r+#u*~DKB~%SRi1pN@aR1Fh_W?c&91^f!hub6(%rH zH~plM(>(e7a`#VLUeVRn)v#q#_2YUl@TbZ2AgsGAnteprima -# MariaDB Gestito (anteprima)

      Concetti

      -

      Scoprite le basi e i principi essenziali per padroneggiare la nostra infrastruttura.

      +

      Scopri le basi e i principi fondamentali per padroneggiare la nostra infrastruttura.

      Esplora i concetti →

      Guida introduttiva

      -

      Iniziate rapidamente seguendo istruzioni chiare e semplici.

      - Avvia il Quickstart → +

      Inizia rapidamente seguendo istruzioni chiare e semplici.

      + Avvia la guida rapida →
      @@ -22,59 +27,60 @@ title: Panoramica ### Panoramica > -> Questo prodotto è in versione di anteprima e la sua documentazione può contenere errori o approssimazioni. +> Questo prodotto è in versione preliminare e la sua documentazione potrebbe contenere errori o imprecisioni. -**MariaDB Gestito (on Kubernetes) by Cloud Temple** è una soluzione di motore di database MariaDB gestito, ospitata su Kubernetes. Integra le offerte di motore di database gestito su macchine virtuali (qui denominate **MariaDB Gestito (on IaaS)**) +**MariaDB Managé (on Kubernetes) by Cloud Temple** è una soluzione gestita del motore di database MariaDB, ospitata su Kubernetes. Si affianca alle offerte di motori di database gestiti su macchine virtuali (denominate qui **MariaDB Managé (on IaaS)**) -Questa offerta è adatta ai clienti con carichi di lavoro Kubernetes con database MariaDB/MySQL, o ai clienti che desiderano consolidare molti motori di database MariaDB/PostgreSQL su un unico cluster Kubernetes (consolidamento). È particolarmente adatta per database di piccole e medie dimensioni che non richiedono tuning o funzionalità specifiche. Per database di grandi dimensioni o che richiedono un tuning particolare, è preferibile optare per l'offerta **MariaDB Gestito (on IaaS)**, che consente maggiori adattamenti da parte dei nostri team di esperti DBA. +Questo prodotto è adatto per i clienti che dispongono di carichi di lavoro Kubernetes con database MariaDB/MySQL, o per i clienti che desiderano condividere più motori di database MariaDB/PostgreSQL su uno stesso cluster Kubernetes (condivisione). Si adatta particolarmente bene ai database di piccole e medie dimensioni che non richiedono tuning o funzionalità specifiche. Per i database di grandi dimensioni o che richiedono un tuning particolare, è consigliabile optare per il prodotto **MariaDB Managé (on IaaS)**, che consente maggiori adattamenti da parte dei nostri team di esperti DBA. -I motori MariaDB possono essere scelti nella versione 11.4 LTS o 11.8 LTS. +I motori MariaDB possono essere selezionati nelle versioni 11.4 LTS o 11.8 LTS. -Tutti i backup utilizzano lo storage S3 di Cloud-Temple (qualificato SNC) con crittografia a riposo. +Tutti i backup utilizzano l'archiviazione S3 Cloud-Temple (certificata SNC) con crittografia at-rest. ![Architettura stack](@site/docs/managed_mariadb/images/stack.png) ### Vantaggi Chiave -- **Sovranità e Reversibilità**: La soluzione si basa esclusivamente su standard open source per evitare qualsiasi dipendenza tecnologica e garantire la portabilità delle vostre applicazioni. -- **Semplicità e delega**: La soluzione permette di delegare a Cloud-Temple la gestione dei motori di database, in particolare: aggiornamenti e backup. +- **Sovranità e Reversibilità** : La soluzione si basa esclusivamente su standard open source per evitare qualsiasi dipendenza tecnologica e garantire la portabilità delle vostre applicazioni. +- **Semplicità e delega** : La soluzione consente di delegare a Cloud-Temple la gestione dei motori di database, in particolare: aggiornamenti e backup. ## Modelli di Distribuzione -Offriamo due modelli di distribuzione per soddisfare le vostre esigenze: ***StandAlone*** o ***Distributed***. +Offriamo due modelli di distribuzione per soddisfare le vostre esigenze: ***StandAlone*** o ***Distributed***. ### StandAlone -Il modello ***StandAlone*** distribuisce un'unica istanza del motore MariaDB in un'infrastruttura multi-AZ. +Il modello ***StandAlone*** distribuisce un'istanza singola del motore MariaDB in un'infrastruttura multi-AZ. -Lo storage utilizzato da questa istanza è replicato su 3 AZ e consente il riavvio automatico dell'istanza MariaDB su un'altra AZ in caso di guasto. +Lo storage utilizzato da questa istanza è replicato su 3 AZ e consente il riavvio automatico dell'istanza MariaDB su un altro AZ in caso di guasto. -- **Caso d'uso**: Questo modello di distribuzione è perfettamente adatto per applicazioni semplici, come i CMS, che utilizzano un unico endpoint per connettersi ai database. +- **Caso d'uso**: Questo modello di distribuzione si adatta perfettamente ad applicazioni semplici, come i CMS, che utilizzano un unico endpoint per connettersi ai database. - **Punti chiave**: - - 1 istanza del motore di database + - 1 istanza del motore del database - storage distribuito su 3 AZ per il ripristino automatico in caso di guasto - backup fisici (`mariabackup`) e logici (`mysqldump`) - - SLA 99,9% (al di fuori delle finestre di manutenzione) + - SLA 99,9 % (esclusi i periodi di manutenzione) -![Architettura StandAlone](@site/docs/managed_mariadb/images/StandAlone.png) +![Architecture StandAlone](@site/docs/managed_mariadb/images/StandAlone.png) -### Distributed +### Distribuito -Il modello ***Distributed*** distribuisce un cluster di 3 istanze del motore MariaDB, con Galera in modalità "single primary" e MaxScale: +Il modello ***Distribuito*** distribuisce un cluster di 3 istanze del motore MariaDB, con Galera in modalità "single primary" e MaxScale: -- un endpoint MaxScale consente il routing verso le diverse istanze in base al tipo di richiesta (lettura o scrittura). +- un endpoint MaxScale consente il routing verso le diverse istanze in base al tipo di query (lettura o scrittura). ![MaxScale](@site/docs/managed_mariadb/images/maxscale.png) -- l'istanza di lettura-scrittura (RW) è accessibile tramite un endpoint specifico. -- Le 2 istanze di sola lettura (RO) sono accessibili tramite un altro endpoint specifico. -Pertanto, le applicazioni possono scegliere di utilizzare connessioni RW o RO, o lasciare che MaxScale indirizzi autonomamente verso gli endpoint più appropriati. +- l'istanza in lettura-scrittura (RW) è accessibile tramite un endpoint specifico. +- Le 2 istanze in sola lettura (RO) sono accessibili tramite un altro endpoint specifico. -- **Caso d'uso**: Questo modello di distribuzione è perfettamente adatto per applicazioni con accessi distribuiti, come applicazioni di dati o di business intelligence, che beneficiano dell'accesso in sola lettura senza impatto sull'ingestione dei dati. -- **Punti chiave**: - - 3 istanze del motore di database con Galera in modalità "single primary" +Pertanto, le applicazioni possono scegliere di utilizzare connessioni RW o RO, oppure lasciare che MaxScale instradi automaticamente verso gli endpoint più adatti. + +- **Caso d'uso** : Questo modello di distribuzione è perfetto per le applicazioni con accessi distribuiti, come le applicazioni di dati o business intelligence, che beneficiano di accessi in sola lettura senza impattare l'ingestione dei dati. +- **Punti chiave** : + - 3 Istanze del motore del database con Galera in modalità "single primary" - Proxy MaxScale per un routing efficiente delle query. - - storage distribuito su 3 AZ per il ripristino automatico in caso di guasto - - backup PiTR e Logici - - SLA 99,9% (al di fuori delle finestre di manutenzione) + - Storage distribuito su 3 AZ per il recupero automatico in caso di guasto + - Backup PiTR e Logici + - SLA 99.9 % (esclusi i periodi di manutenzione) -![Architettura Distributed](@site/docs/managed_mariadb/images/Distributed.png) +![Architecture Distribuito](@site/docs/managed_mariadb/images/Distributed.png) \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_mariadb/quickstart.md b/i18n/it/docusaurus-plugin-content-docs/current/managed_mariadb/quickstart.md index 9bc25816..5b5d18b6 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/managed_mariadb/quickstart.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/managed_mariadb/quickstart.md @@ -1,33 +1,33 @@ ---- -title: Guida introduttiva ---- - -Benvenuti nella guida introduttiva di **MariaDB Gestito** di Cloud Temple. - -L'obiettivo di questa sezione è orientarvi verso le risorse necessarie per iniziare a utilizzare il vostro prodotto. - -## Prima di iniziare - -Assicuratevi di disporre degli accessi che vi sono stati forniti da Cloud-Temple. - -Assicuratevi che i flussi di rete siano aperti verso gli IP che vi sono stati forniti. - -## Accesso al vostro cluster MariaDB Gestito - -A seconda del modello di distribuzione scelto, disponete di uno o più endpoint. - -**StandAlone**: 1 unico endpoint (1 unico IP), accessibile sulla porta 3306. - -**Distributed**: - -- 1 Endpoint MaxScale, accessibile sulla porta 3306, in grado di distribuire le vostre query verso le istanze più appropriate (questo è l'endpoint preferito) -- 1 Endpoint R/W, accessibile sulla porta 3306, che punta all'istanza primaria, in modalità lettura-scrittura. -- 1 Endpoint R/O, accessibile sulla porta 3306, che punta a tutte le istanze, in modalità sola lettura. - -## I vostri permessi - -Non disponete di alcun permesso a livello del motore di database (né `SUPER`, né `ALL_PRIVILEGE`) - -Non potete riconfigurare il motore o le sue opzioni, né installare il performance_schema. - -Le richieste di aggiunta di database, utenti o grant devono essere effettuate ai team di Cloud-Temple. +--- +title: Guida introduttiva +--- + +Benvenuti nella guida introduttiva di **MariaDB Gestito** Cloud Temple. + +L'obiettivo di questa sezione è indirizzarvi verso le risorse necessarie per iniziare a utilizzare il vostro prodotto. + +## Prima di iniziare + +Assicurati di disporre degli accessi forniti da Cloud-Temple. + +Assicurati che i flussi di rete siano aperti verso gli indirizzi IP forniti. + +## Accedere al tuo cluster MariaDB gestito + +In base al modello di distribuzione scelto, disponi di uno o più endpoint. + +**StandAlone** : 1 solo endpoint (1 seule IP), accessibile sulla porta 3306. + +**Distribuito** : + +- 1 Endpoint Maxscale, accessibile sulla porta 3306, in grado di distribuire le tue richieste verso le istanze più appropriate (c'est le endpoint a privilégier) +- 1 Endpoint R/W, accessibile sulla porta 3306, che punta all'istanza primaria, in lettura-scrittura. +- 1 Endpoint R/O, accessibile sulla porta 3306, che punta a tutte le istanze, in sola lettura. + +## Le tue autorizzazioni + +Non disponi di alcuna autorizzazione a livello di motore di database (né `SUPER`, né `ALL_PRIVILEGE`) + +Non è possibile riconfigurare il motore o le sue opzioni, né installare il performance_schema. + +Le richieste di aggiunta di database, utenti o grant devono essere inoltrate ai team Cloud-Temple. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_postgresql/concepts.md b/i18n/it/docusaurus-plugin-content-docs/current/managed_postgresql/concepts.md index ed423af9..8b99658f 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/managed_postgresql/concepts.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/managed_postgresql/concepts.md @@ -5,113 +5,110 @@ sidebar_position: 1 # Concetti Chiave di PostgreSQL Gestito -Questa sezione presenta i concetti fondamentali del nostro servizio **PostgreSQL Gestito**. Comprendere questi principi vi aiuterà a sfruttare al meglio il vostro database gestito, allineando le sue capacità con le vostre esigenze applicative e i requisiti di sicurezza. +Questa sezione presenta i concetti fondamentali del nostro servizio **PostgreSQL Gestito**. Comprendere questi principi ti aiuterà a sfruttare al massimo il tuo database gestito, allineandone le capacità alle tue esigenze applicative e ai requisiti di sicurezza. ## Sovranità e Conformità SecNumCloud -Al centro della nostra offerta si trova la **sovranità digitale**. Il servizio PostgreSQL Gestito è interamente ospitato sull'infrastruttura Cloud Temple, qualificata **SecNumCloud 3.2** dall'ANSSI. +Al centro del nostro prodotto vi è la **sovranità digitale**. Il servizio PostgreSQL gestito è interamente ospitato sull'infrastruttura Cloud Temple, certificata **SecNumCloud 3.2** dall'ANSSI. -- **Hosting 100% in Francia**: I vostri dati rimangono sul territorio nazionale, al riparo dalle leggi extraterritoriali. -- **Conformità nativa**: La soluzione è progettata per soddisfare i requisiti normativi più severi (RGPD, HDS, LPM, NIS2, PCI-DSS). -- **Open Source e Reversibilità**: Basandoci su standard aperti come PostgreSQL Community Server e Patroni, garantiamo l'assenza di dipendenza tecnologica (*vendor lock-in*) e la piena portabilità dei vostri dati. +- **Hosting 100% in Francia** : I vostri dati rimangono sul territorio nazionale, al riparo dalle leggi extraterritoriali. +- **Conformità nativa** : La soluzione è progettata per soddisfare i requisiti normativi più rigorosi (GDPR, HDS, LPM, NIS2, PCI-DSS). +- **Open Source e Reversibilità** : Basandoci su standard aperti come PostgreSQL Community Server e Patroni, garantiamo l'assenza di dipendenze tecnologiche (*vendor lock-in*) e una portabilità totale dei vostri dati. -## Architettura ad Alta Disponibilità: Patroni Cluster +## Architettura Alta Disponibilità : Patroni Cluster -Per gli ambienti distribuiti, il nostro servizio si basa su **Patroni Cluster** per offrire alta disponibilità senza perdita di dati. +Per gli ambienti distribuiti, il nostro prodotto si basa su **Patroni Cluster** per offrire un'alta disponibilità senza perdita di dati. -- **Replica Sincrona**: A differenza della tradizionale replica asincrona, ogni transazione viene validata su tutti i nodi del cluster *prima* di essere confermata. Ciò garantisce un **Recovery Point Objective (RPO) di zero**: nessun dato validato può essere perso in caso di guasto. -- **Distribuzione Multi-AZ**: Il cluster è distribuito su tre Zone di Disponibilità (AZ) distinte. Il guasto di un intero datacenter non provoca alcuna interruzione del servizio né perdita di dati. -- **Failover Automatico**: In caso di incidente su un nodo, il traffico viene automaticamente reindirizzato verso i nodi sani, garantendo un **Recovery Time Objective (RTO) minimo**. +- **Replicazione Sincrona** : A differenza della replicazione asincrona tradizionale, ogni transazione viene confermata su tutti i nodi del cluster *prima* di essere accettata. Ciò garantisce un **Obiettivo di Punto di Recupero (RPO) pari a zero** : nessun dato confermato può andare perso in caso di guasto. +- **Distribuzione Multi-AZ** : Il cluster è distribuito su tre Zone di Disponibilità (AZ) distinte. Il guasto di un intero datacenter non causa interruzioni del servizio né perdita di dati. +- **Failover Automatico** : In caso di incidente su un nodo, il traffico viene reindirizzato automaticamente verso i nodi sani, garantendo un **Obiettivo di Tempo di Recupero (RTO) minimo** . ## Modelli di Distribuzione -Offriamo due modelli per adattarsi alla criticità dei vostri carichi di lavoro. +Proponiamo due modelli per adattarsi alla criticità dei carichi di lavoro. ### 1. StandAlone -Questo modello distribuisce un'unica istanza del motore PostgreSQL. +Questo modello distribuisce un'istanza singola del motore PostgreSQL. -- **Caso d'uso**: Questo modello di distribuzione è perfettamente adatto per applicazioni semplici, come i CMS, che utilizzano un unico endpoint per connettersi ai database. -- **Resilienza**: Sebbene si tratti di un'istanza unica, lo storage sottostante è replicato su 3 AZ, consentendo un riavvio automatico su un'altra AZ in caso di guasto hardware. -- **SLA**: 99,9% (al di fuori delle finestre di manutenzione). +- **Caso d'uso** : Questo modello di distribuzione è ideale per applicazioni semplici, come i CMS, che utilizzano un singolo endpoint per connettersi ai database. +- **Resilienza** : Sebbene si tratti di un'istanza singola, lo storage sottostante è replicato su 3 AZ, consentendo un riavvio automatico su un'altra AZ in caso di guasto hardware. +- **SLA** : 99,9% (escluse le finestre di manutenzione). -### 2. Distributed +### 2. Distribuito Questo modello distribuisce un **cluster Patroni di 3 istanze** del motore PostgreSQL, completato da un proxy **PgBouncer**. -- **Caso d'uso**: Questo modello di distribuzione è perfettamente adatto per applicazioni con accessi distribuiti, come applicazioni di dati o di business intelligence, che beneficiano dell'accesso in sola lettura senza impatto sull'ingestione dei dati. -- **Componenti**: - - **3 Nodi PostgreSQL**: Un nodo primario di lettura-scrittura (RW) e due nodi secondari di sola lettura (RO). - - **Proxy PgBouncer**: Un router intelligente che distribuisce le richieste. Invia le scritture al nodo primario e distribuisce le letture tra i nodi secondari (*read/write splitting*), ottimizzando così le prestazioni. -- **SLA**: 99,9% (al di fuori delle finestre di manutenzione). +- **Caso d'uso** : Questo modello di distribuzione è ideale per applicazioni con accessi distribuiti, come le applicazioni di data o business intelligence, che beneficiano di accessi in sola lettura senza impattare l'ingestione dei dati. +- **Componenti** : + - **3 Nodi PostgreSQL** : Un nodo primario in lettura-scrittura (RW) e due nodi secondari in sola lettura (RO). + - **Proxy PgBouncer** : Un router intelligente che distribuisce le query. Invia le scritture al nodo primario e ripartisce le letture sui nodi secondari (*read/write splitting*), ottimizzando così le prestazioni. +- **SLA** : 99,9% (escluse le finestre di manutenzione). -> **Nota Importante**: Non è possibile modificare il modello di distribuzione di un cluster esistente (ad esempio, passare da *StandAlone* a *Distributed*). Questa operazione richiede la creazione di un nuovo cluster nel modello desiderato, tramite un ripristino PiTR. +> **Nota Importante** : Non è possibile modificare il modello di distribuzione di un cluster esistente (ad esempio, passare da *StandAlone* a *Distributed*). Questa operazione richiede la creazione di un nuovo cluster nel modello desiderato, tramite un ripristino PiTR. ## Backup e Ripristino (PITR) La protezione dei vostri dati è garantita da una doppia strategia di backup. -1. **Backup Fisico (Point-in-Time Recovery - PITR)**: - - Eseguiamo backup fisici completi giornalieri con `pg_basebackup` (senza interruzione del servizio). - - I log di transazione (*WAL*) vengono archiviati continuamente. - - Questa combinazione consente un ripristino "al secondo" fino al momento appena prima di un incidente. +1. **Backup Fisico (Point-in-Time Recovery - PITR)** : + - Eseguiamo backup fisici completi quotidiani con `pg_basebackup` (senza interruzione del servizio). + - I log delle transazioni (*WAL*) sono archiviati in modo continuo. + - Questa combinazione consente un ripristino con precisione al secondo fino al momento immediatamente precedente un incidente. -2. **Backup Logico (`pg_dump`)**: - - Vengono eseguite anche esportazioni logiche dei database. +2. **Backup Logico (`pg_dump`)** : + - Vengono inoltre eseguiti export logici dei database. - Offrono una granularità fine per ripristinare o esportare un singolo database. -Tutti i backup sono cifrati a riposo e archiviati nel nostro Object Storage S3, anch'esso qualificato SecNumCloud. +Tutti i backup sono cifrati a riposo e archiviati sul nostro Object Storage S3, a sua volta qualificato SecNumCloud. ## Sicurezza a Più Livelli -La sicurezza è integrata in ogni strato del servizio. +La sicurezza è integrata a ogni livello del servizio. -- **Isolamento di Rete**: Le istanze di database non sono **mai esposte su Internet**. L'accesso avviene esclusivamente tramite la rete privata del cliente. -- **Crittografia end-to-end**: - - **In transito**: Tutte le connessioni (client al database e tra i nodi del cluster) sono cifrate in TLS 1.3. - - **A riposo**: I dati su disco e i backup sono cifrati in AES-256. -- **Gestione degli Accessi**: L'autenticazione è sicura e i diritti sono gestiti secondo il principio del minimo privilegio. +- **Isolamento di Rete** : Le istanze del database non sono **mai esposte su Internet**. L'accesso avviene esclusivamente tramite la rete privata del client. +- **Crittografia End-to-End** : + - **In transito** : Tutte le connessioni (dal client al database e tra i nodi del cluster) sono crittografate con TLS 1.3. + - **A riposo** : I dati su disco e i backup sono crittografati con AES-256. +- **Gestione degli Accessi** : L'autenticazione è sicura e i permessi sono gestiti secondo il principio del minimo privilegio. -## Servizio Gestito ("Zero Ops") +## Servizio Gestito ("Zéro Ops") -L'obiettivo di PostgreSQL Gestito è sollevarvi dalla complessità operativa. I nostri team assicurano: +L'obiettivo di PostgreSQL Gestito è liberarvi dalla complessità operativa. I nostri team si occupano di: - Il provisioning e la configurazione iniziale. - La gestione completa del ciclo di vita: aggiornamenti minori, applicazione delle patch di sicurezza. - Il monitoraggio 24/7 dell'infrastruttura e del servizio. - La gestione e la verifica dei backup. -Questo consente ai vostri team di concentrarsi sullo sviluppo applicativo e sull'utilizzo dei dati. +Ciò consente ai vostri team di concentrarsi sullo sviluppo applicativo e sull'utilizzo dei propri dati. -## Politica delle Versioni e Ciclo di Vita +## Politica delle versioni & ciclo di vita -La comunità PostgreSQL pubblica versioni con supporto a lungo termine (LTS), che garantisce stabilità e prevedibilità. Il nostro servizio si basa su queste versioni per garantire la longevità della vostra infrastruttura. +La comunità PostgreSQL rilascia versioni con supporto a lungo termine (LTS), garantendo stabilità e prevedibilità. Il nostro servizio si basa su queste versioni per assicurare la longevità della vostra infrastruttura. | Versione | Tipo | Supportato fino a | | :--- | :--- | :--- | | **PostgreSQL 15** | LTS | Nov 2027 | | **PostgreSQL 16** | LTS | Nov 2028 | -- **Aggiornamenti minori**: Le patch di sicurezza e le correzioni di bug vengono applicate dai nostri team in *rolling update* (nodo per nodo) per non causare alcuna interruzione del servizio. -- **Aggiornamenti maggiori**: Gli aggiornamenti di versione maggiore vengono pianificati in collaborazione con voi per allinearsi al vostro calendario. -- **Fine del supporto**: Vi notifichiamo almeno 180 giorni prima della fine del supporto di una versione LTS per pianificare la migrazione alla versione successiva. +- **Aggiornamenti minori** : I patch di sicurezza e le correzioni dei bug vengono applicati dai nostri team in *rolling update* (nodo per nodo) per non causare alcuna interruzione del servizio. +- **Aggiornamenti maggiori** : I passaggi di versione maggiori vengono pianificati in collaborazione con voi per allinearsi al vostro calendario. +- **Fine del supporto** : Vi notifichiamo almeno 180 giorni prima della fine del supporto di una versione LTS per pianificare la migrazione alla versione successiva. ## Dimensioni delle istanze -Le istanze ***StandAlone*** e ***Distributed*** sono disponibili in dimensioni predefinite: - -| Dimensione | vCPU/nodo | RAM/nodo | Conn. Max | Working Set Max | DB Totale Max | -| :-- | :-- | :-- | :-- | :-- | :-- | -| **Micro** | 1 | **2.00 Gi** | **40** | **1-2 GiB** | **2-8 GiB** | -| **Small** | 1 | **4.00 Gi** | **80** | **2-5 GiB** | **8-16 GiB** | -| **Medium** | 2 | **4.00 Gi** | **80** | **2-5 GiB** | **8-16 GiB** | -| **Med-Large**| 2 | **8.00 Gi** | **150** | **4-10 GiB** | **16-32 GiB** | -| **Large** | 4 | **8.00 Gi** | **150** | **4-10 GiB** | **16-32 GiB** | -| **X-Large** | 4 | **16.00 Gi** | **250** | **8-20 GiB** | **32-64 GiB** | -| **2X-Large**| 8 | **16.00 Gi** | **250** | **8-20 GiB** | **32-64 GiB** | -| **3X-Large**| 8 | **32.00 Gi** | **500** | **16-40 GiB** | **64-128 GiB** | -| **4X-Large**| 16 | **32.00 Gi** | **500** | **32-80 GiB** | **128-256 GiB** | -| **5X-Large**| 16 | **64.00 Gi** | **500** | **32-80 GiB** | **128-256 GiB** | -| **6X-Large**| 32 | **128.00 Gi**| **500** | **64-160 GiB** | **256-512 GiB** | - -> **Nota**: Lo storage viene provisionato separatamente e può essere aumentato a caldo (da 2Gi a 512Gi) (ma non ridotto, salvo ricreando una nuova istanza). +Le istanze ***StandAlone*** et ***Distributed*** sono disponibili con dimensioni predefinite: + +| Dimensione | vCPU | Memoria | innodb_buffer_pool_size | innodb_buffer_pool_instances | max_allowed_packet | table_open_cache | maxconn | +| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | +| **XS** | 1000m | 4096Mi | 2458M | 2 | 256M | 800 | 80 | +| **S** | 1000m | 8192Mi | 4915M | 4 | 512M | 1600 | 150 | +| **M** | 2000m | 8192Mi | 4915M | 4 | 512M | 1600 | 150 | +| **L** | 2000m | 16384Mi | 9830M | 8 | 1G | 3200 | 250 | +| **XL** | 4000m | 16384Mi | 9830M | 8 | 1G | 3200 | 250 | +| **XXL** | 4000m | 32768Mi | 19660M | 16 | 1G | 6400 | 500 | +| **3XL** | 8000m | 32768Mi | 19660M | 16 | 1G | 6400 | 500 | +| **4XL** | 8000m | 65536Mi | 39320M | 16 | 1G | 10000 | 500 | + +> **Nota** : Lo storage è provisioning separato e può essere espanso a caldo (da 2Gi a 128Gi) (ma non ridotto, a meno di ricreare una nuova istanza.). \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_postgresql/managed_postgresql.md b/i18n/it/docusaurus-plugin-content-docs/current/managed_postgresql/managed_postgresql.md index 4ab4b40c..6011e6ab 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/managed_postgresql/managed_postgresql.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/managed_postgresql/managed_postgresql.md @@ -2,18 +2,18 @@ title: Panoramica --- -# PostgreSQL Gestito (anteprima) +# PostgreSQL Gestito Anteprima

      Concetti

      -

      Scoprite le basi e i principi essenziali per padroneggiare la nostra infrastruttura.

      +

      Scopri le basi e i principi essenziali per padroneggiare la nostra infrastruttura.

      Esplora i concetti →

      Guida introduttiva

      -

      Iniziate rapidamente seguendo istruzioni chiare e semplici.

      - Avvia il Quickstart → +

      Inizia rapidamente seguendo istruzioni chiare e semplici.

      + Avvia la guida rapida →
      @@ -21,63 +21,63 @@ title: Panoramica ### Panoramica > -> Questo prodotto è in versione di anteprima e la sua documentazione può contenere errori o approssimazioni. +> Questo prodotto è in versione preliminare e la sua documentazione potrebbe contenere errori o imprecisioni. -**PostgreSQL Gestito (on Kubernetes) by Cloud Temple** è una soluzione di motore di database PostgreSQL gestito, ospitata su Kubernetes. Integra le offerte di motore di database gestito su macchine virtuali (qui denominate **PostgreSQL Gestito (on IaaS)**) +**PostgreSQL Managé (on Kubernetes) by Cloud Temple** è una soluzione gestita per il motore di database PostgreSQL, ospitata su Kubernetes. Si integra come complemento alle offerte di motori di database gestiti su macchine virtuali (nommées ici **PostgreSQL Managé (on IaaS)**) -Questa offerta è adatta ai clienti con carichi di lavoro Kubernetes che richiedono database PostgreSQL, o ai clienti che desiderano consolidare molti motori di database PostgreSQL su un unico cluster Kubernetes (consolidamento). È particolarmente adatta per database di piccole e medie dimensioni che non richiedono tuning o funzionalità specifiche. Per database di grandi dimensioni o che richiedono un tuning particolare, è preferibile optare per l'offerta **PostgreSQL Gestito (on IaaS)**, che consente maggiori adattamenti da parte dei nostri team di esperti DBA. +Questo prodotto è adatto per i clienti che dispongono di carichi di lavoro Kubernetes che richiedono database PostgreSQL, o per i clienti che desiderano condividere più motori di database PostgreSQL sullo stesso cluster Kubernetes (mutualisation). Si adatta particolarmente bene a database di piccole e medie dimensioni che non richiedono ottimizzazioni o funzionalità specifiche. Per database di grandi dimensioni o che necessitano di ottimizzazioni particolari, è consigliabile optare per il prodotto **PostgreSQL Managé (on IaaS)**, che consente maggiori adattamenti da parte dei nostri team di esperti DBA. ### Vantaggi Chiave -- **Sovranità e Reversibilità**: La soluzione si basa esclusivamente su standard open source per evitare qualsiasi dipendenza tecnologica e garantire la portabilità delle vostre applicazioni. -- **Semplicità e delega**: La soluzione permette di delegare a Cloud-Temple la gestione dei motori di database, in particolare: aggiornamenti e backup. +- **Sovranità e Reversibilità** : La soluzione si basa esclusivamente su standard open source per evitare qualsiasi dipendenza tecnologica e garantire la portabilità delle vostre applicazioni. +- **Semplicità e delega** : La soluzione consente di delegare a Cloud-Temple la gestione dei motori di database, in particolare: aggiornamenti e backup. ## Modelli di Distribuzione -Offriamo due modelli di distribuzione per soddisfare le vostre esigenze: ***StandAlone*** o ***Distributed***. +Offriamo due modelli di distribuzione per soddisfare le vostre esigenze: ***StandAlone*** o ***Distributed***. ### StandAlone -Il modello ***StandAlone*** distribuisce un'unica istanza del motore PostgreSQL in un'infrastruttura multi-AZ. +Il modello ***StandAlone*** distribuisce un'istanza singola del motore PostgreSQL in un'infrastruttura multi-AZ. Lo storage utilizzato da questa istanza è replicato su 3 AZ e consente il riavvio automatico dell'istanza PostgreSQL su un'altra AZ in caso di guasto. -- **Caso d'uso**: Questo modello di distribuzione è perfettamente adatto per applicazioni semplici, come i CMS, che utilizzano un unico endpoint per connettersi ai database. -- **Punti chiave**: +- **Caso d'uso** : Questo modello di distribuzione è ideale per applicazioni semplici, come i CMS, che utilizzano un singolo endpoint per connettersi ai database. +- **Punti chiave** : - 1 istanza del motore di database - storage distribuito su 3 AZ per il ripristino automatico in caso di guasto - backup fisici e logici - - SLA 99,9% (al di fuori delle finestre di manutenzione) + - SLA 99,9 % (esclusi i periodi di manutenzione) -### Distributed +### Distribuito -Il modello ***Distributed*** distribuisce un cluster di 3 istanze del motore PostgreSQL, con Patroni in modalità "single primary" e PgBouncer: +Il modello ***Distribuito*** implementa un cluster di 3 istanze del motore PostgreSQL, con Patroni in modalità "single primary" e PgBouncer: -- un endpoint PgBouncer consente il routing verso le diverse istanze in base al tipo di richiesta (lettura o scrittura). -- l'istanza di lettura-scrittura (RW) è accessibile tramite un endpoint specifico. -- Le istanze di sola lettura (RO) sono accessibili tramite un altro endpoint specifico. +- un endpoint PgBouncer consente il routing verso le diverse istanze in base al tipo di query (lettura o scrittura). +- l'istanza in lettura-scrittura (RW) è accessibile tramite un endpoint specifico. +- Le istanze in sola lettura (RO) sono accessibili tramite un altro endpoint specifico. -Pertanto, le applicazioni possono scegliere di utilizzare connessioni RW o RO, o lasciare che PgBouncer indirizzi autonomamente verso gli endpoint più appropriati. +Di conseguenza, i client applicativi possono scegliere di utilizzare connessioni RW o RO, oppure lasciare che PgBouncer instradi automaticamente verso gli endpoint più adatti. -- **Caso d'uso**: Questo modello di distribuzione è perfettamente adatto per applicazioni con accessi distribuiti, come applicazioni di dati o di business intelligence, che beneficiano dell'accesso in sola lettura senza impatto sull'ingestione dei dati. -- **Punti chiave**: - - 3 istanze del motore di database con Patroni in modalità "single primary" +- **Caso d'uso** : Questo modello di distribuzione è ideale per le applicazioni con accessi distribuiti, come le applicazioni di data o business intelligence, che beneficiano di accessi in sola lettura senza impattare sull'ingestione dei dati. +- **Punti chiave** : + - 3 Istanze del motore di database con Patroni in modalità "single primary" - Proxy PgBouncer per un routing efficiente delle query. - - storage distribuito su 3 AZ per il ripristino automatico in caso di guasto - - backup PiTR e Logici - - SLA 99,9% (al di fuori delle finestre di manutenzione) + - Storage distribuito su 3 AZ per un ripristino automatico in caso di guasto + - Backup PiTR e Logici + - SLA 99.9 % (escluse le finestre di manutenzione) ### Funzionalità comuni #### Versioni -I motori PostgreSQL possono essere scelti tra tutte le versioni supportate (attualmente dalla 14 alla 18) [Vedere "versioning policy" sul sito ufficiale di PostgreSQL](https://www.postgresql.org/support/versioning/) +I motori PostgreSQL possono essere scelti tra tutte le versioni supportate (attualmente dalla 14 alla 18) [Vedi la "politica di versioning" sul sito ufficiale PostgreSQL](https://www.postgresql.org/support/versioning/) #### Backup -Vengono implementati 2 tipi di backup: +Sono implementati 2 tipi di backup: -- Point in Time Restoration (PiTR): backup fisico giornaliero dell'intero motore e dei suoi log di transazione (WAL), che consente di ripristinare l'intero server a una data precisa precedente senza perdere transazioni. -- Backup logico (pg_dump): esportazioni logiche dei database, per il ripristino/esportazione individuale per database. +- Point in Time Recovery (PITR) : backup fisico giornaliero dell'intero motore e dei suoi log delle transazioni (WAL), che consente di ripristinare l'intero server a una data specifica precedente senza perdita di transazioni. +- Backup logico (pg_dump) : esportazioni logiche dei database, per un ripristino/esportazione individuale per database. -Tutti i backup utilizzano lo storage S3 di Cloud-Temple (qualificato SNC) con crittografia a riposo. +Tutti i backup utilizzano lo storage S3 Cloud-Temple (certificato SNC) con crittografia at-rest. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_postgresql/quickstart.md b/i18n/it/docusaurus-plugin-content-docs/current/managed_postgresql/quickstart.md index e72fa329..1278ec46 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/managed_postgresql/quickstart.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/managed_postgresql/quickstart.md @@ -1,24 +1,24 @@ ---- -title: Guida introduttiva ---- - -Benvenuti nella guida introduttiva di **PostgreSQL Gestito** di Cloud Temple. - -L'obiettivo di questa sezione è orientarvi verso le risorse necessarie per iniziare a utilizzare il vostro prodotto. - ---- - -## Prima di iniziare - -> in fase di redazione ---- - -## Accesso al vostro cluster PostgreSQL Gestito - -> in fase di redazione ---- - -## I vostri permessi - -> in fase di redazione ---- +--- +title: Guida introduttiva +--- + +Benvenuti nella guida introduttiva di **PostgreSQL Gestito** Cloud Temple. + +L'obiettivo di questa sezione è indirizzarvi verso le risorse necessarie per iniziare a utilizzare il vostro prodotto. + +--- + +## Prima di iniziare + +> in fase di redazione +--- + +## Accedere al cluster PostgreSQL gestito + +> in fase di redazione +--- + +## Le tue autorizzazioni + +> in fase di redazione +--- \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managedproducts_overview.md b/i18n/it/docusaurus-plugin-content-docs/current/managedproducts_overview.md index a672e082..31e8fdd7 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/managedproducts_overview.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/managedproducts_overview.md @@ -4,40 +4,40 @@ title: Panoramica delle offerte di prodotti gestiti ## Che cos'è un prodotto gestito? -I prodotti gestiti di Cloud Temple sono servizi cloud interamente gestiti dal fornitore, consentendo ai clienti di concentrarsi sulle proprie applicazioni senza dover gestire l'infrastruttura sottostante. +I prodotti gestiti da Cloud Temple sono servizi cloud interamente gestiti dal fornitore, che permettono ai clienti di concentrarsi sulle proprie applicazioni senza dover gestire l'infrastruttura sottostante. -Questi prodotti includono soluzioni come Managed Kubernetes, Managed MariaDB, Managed PostgreSQL, Managed Firewall o Managed SOC, dove Cloud Temple si occupa della configurazione, del monitoraggio, della manutenzione e della scalabilità. +Questi prodotti includono soluzioni come Kubernetes gestito, MariaDB gestito, PostgreSQL gestito, Firewall gestito o SOC gestito, dove Cloud Temple si occupa della configurazione, del monitoraggio, della manutenzione e della scalabilità. -Si basano su un'infrastruttura sovrana con qualificazione SecNumCloud, con alta disponibilità (multi-AZ), automazione e supporto garantito da SLA. +Si basano su un'infrastruttura sovrana certificata SecNumCloud, con alta disponibilità (multi-AZ), automazione e supporto SLA. -**Vantaggi principali** +**Vantaggi chiave** -- Liberazione operativa: Cloud Temple gestisce il control plane, i backup, la sicurezza e gli aggiornamenti, semplificando l'orchestrazione per i vostri deployment. +- Liberazione dalle operazioni: Cloud Temple gestisce il control plane, i backup, la sicurezza e gli aggiornamenti, semplificando l'orchestrazione per i vostri deployment. -- Standard del settore: prodotti semplici, riconosciuti, collaudati e open-source. +- Standard di mercato: prodotti semplici, riconosciuti, collaudati e open-source. -## Il nostro portfolio di prodotti gestiti +## Il nostro portafoglio di prodotti gestiti ### Database gestiti -- **Managed MariaDB (on Kubernetes)**: una soluzione di motore di database MariaDB che funziona "on-top" delle nostre offerte *Managed Kubernetes* / *Managed Core Kubernetes*. [Vedi la scheda](./managed_mariadb) +- **MariaDB gestito (on Kubernetes)** : una soluzione del motore di database MariaDB che funziona "on-top" delle nostre offerte *Kubernetes gestito* / *Core Kubernetes gestito*. [Vedi la scheda](./managed_mariadb) -- **Managed PostgreSQL (on Kubernetes)**: una soluzione di motore di database PostgreSQL che funziona "on-top" delle nostre offerte *Managed Kubernetes* / *Managed Core Kubernetes*. [Vedi la scheda](./managed_postgresql). +- **PostgreSQL gestito (on Kubernetes)** : una soluzione del motore di database PostgreSQL che funziona "on-top" delle nostre offerte *Kubernetes gestito* / *Core Kubernetes gestito*. [Vedi la scheda](./managed_postgresql). -- **Managed MongoDB (on Kubernetes)**: una soluzione di motore di database MongoDB che funziona "on-top" delle nostre offerte *Managed Kubernetes* / *Managed Core Kubernetes*. (documentazione in corso di realizzazione) +- **MongoDB gestito (on Kubernetes)** : una soluzione del motore di database MongoDB che funziona "on-top" delle nostre offerte *Kubernetes gestito* / *Core Kubernetes gestito*. (documentazione in fase di realizzazione) ### Prodotti per i dati -- **Managed Kafka (on Kubernetes)**: Una soluzione Apache Kafka con schema registry che funziona "on-top" delle nostre offerte *Managed Kubernetes* / *Managed Core Kubernetes*. (documentazione in corso di realizzazione) +- **Kafka gestito (su Kubernetes)** : Una soluzione Apache Kafka, con schema registry che funziona "on-top" delle nostre offerte *Kubernetes gestito* / *Core Kubernetes gestito*. (documentazione in fase di realizzazione) -- **Managed Airflow**: *in arrivo!* +- **Airflow gestito** : *in arrivo a breve!* -- **Managed Superset**: *in arrivo!* +- **Superset gestito** : *in arrivo a breve!* ### Prodotti per la sicurezza -- **Managed KMS**: *in arrivo!* +- **KMS gestito** : *in arrivo presto!* -- **Managed SIEM**: *in arrivo!* +- **SIEM gestito** : *in arrivo presto!* ---- +--- \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/market_place_public.md b/i18n/it/docusaurus-plugin-content-docs/current/market_place_public.md index 1f86e30f..2ecf8ca5 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/market_place_public.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/market_place_public.md @@ -9,10 +9,10 @@ tags: ## Piattaforme di acquisto
      -

      Sei un attore del settore pubblico? L'offerta IaaS Cloud Temple è accessibile tramite:

      +

      Sei un operatore del settore pubblico? Il prodotto IaaS Cloud Temple è accessibile tramite:

      +
      \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/marketplace/concepts.md b/i18n/it/docusaurus-plugin-content-docs/current/marketplace/concepts.md index 662c67e2..34f87953 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/marketplace/concepts.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/marketplace/concepts.md @@ -2,72 +2,78 @@ title: Concetti --- -La **Marketplace Cloud Temple** è una piattaforma centralizzata che semplifica l'accesso e il deployment di soluzioni cloud pronte all'uso in un ambiente sovrano e sicuro. +La **Marketplace Cloud Temple** è una piattaforma centralizzata che facilita l'accesso e il deployment di soluzioni cloud pronte all'uso in un ambiente sovrano e sicuro. ## Definizione e posizionamento -La Marketplace Cloud Temple si posiziona come un fattore di trasformazione digitale per le aziende che cercano servizi affidabili, ospitati in Europa, con un'integrazione semplice e rapida. +La Marketplace Cloud Temple si posiziona come una leva di trasformazione digitale per le aziende alla ricerca di servizi affidabili, ospitati in Europa, con un'integrazione semplice e rapida. -Permette di: +Consente di: - **Centralizzare** l'accesso alle soluzioni partner validate - **Semplificare** il deployment di ambienti cloud - **Accelerare** l'implementazione di progetti digitali - **Garantire** la conformità e la sicurezza dei deployment +--- + ## Tipi di soluzioni disponibili -### Virtual Machine Images +### Immagini delle macchine virtuali -Virtual machine images are the current core of the Marketplace offering. These pre-configured images enable the rapid deployment of standardized environments. +Le immagini delle macchine virtuali costituiscono il nucleo attuale del prodotto Marketplace. Queste immagini preconfigurate consentono un rapido deployment di ambienti standardizzati. -**Features:** +**Caratteristiche :** -- Validated and secure images -- Compatible with OpenIaaS and VMware environments -- Deployment in under 10 minutes -- Native integration with the Cloud Temple console +- Immagini validate e sicure +- Compatibile con gli ambienti OpenIaaS e VMware +- Deployment in meno di 10 minuti +- Integrazione nativa con la console Cloud Temple ### Soluzioni partner -La Marketplace offre inoltre l'accesso a soluzioni sviluppate dai nostri partner editori, coprendo diversi settori di attività. +Il Marketplace offre inoltre l'accesso a soluzioni sviluppate dai nostri partner editor, che coprono diversi settori di attività. -**Processo di accesso:** +**Processo di accesso :** - Consultazione del catalogo dalla console -- Collegamento diretto con il partner +- Contatto diretto con il partner - Distribuzione sull'infrastruttura Cloud Temple +--- + ## Integrazione con l'ecosistema Cloud Temple -### Cloud Temple Console +### Console Cloud Temple -Il Marketplace è integrato nativamente alla console Cloud Temple, offrendo: +Il Marketplace è integrato nativamente nella console Cloud Temple, offrendo: -- **Accesso unificato** dall'interfaccia di gestione abituale +- **Accesso unificato** dall'interfaccia di gestione standard - **Distribuzione diretta** sulle infrastrutture esistenti - **Gestione centralizzata** delle risorse e delle soluzioni ### Compatibilità con i servizi -Le soluzioni della Marketplace sono progettate per integrarsi in modo armonioso con: +Le soluzioni del Marketplace sono progettate per integrarsi armoniosamente con: + +- **IaaS OpenSource** : Distribuzione su infrastruttura OpenIaaS +- **IaaS VMware** : Integrazione con l'ambiente vSphere -- **IaaS OpenSource**: distribuzione sull'infrastruttura OpenIaaS -- **IaaS VMware**: integrazione con l'ambiente vSphere +--- ## Sicurezza e conformità ### Hosting sovrano -Tutte le soluzioni distribuite tramite la Marketplace beneficiano di: +Tutte le soluzioni deployate tramite la Marketplace beneficiano di: -- **Hosting esclusivamente in Francia** +- **Hosting in Francia** esclusivamente - **Qualifica SecNumCloud** dell'infrastruttura ### Validazione delle soluzioni -Le soluzioni proposte nella Marketplace sono oggetto di una selezione rigorosa che garantisce: +Le soluzioni proposte nel Marketplace sono oggetto di una selezione rigorosa che garantisce: - **Compatibilità** con l'infrastruttura Cloud Temple - **Sicurezza** delle immagini e delle applicazioni -- **Affidabilità** dei partner editori +- **Affidabilità** dei partner editori \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/marketplace/marketplace.md b/i18n/it/docusaurus-plugin-content-docs/current/marketplace/marketplace.md index e7f0be23..03bc8dda 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/marketplace/marketplace.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/marketplace/marketplace.md @@ -2,26 +2,28 @@ title: Panoramica --- +# Marketplace + La __Marketplace Cloud Temple__ offre un accesso semplificato alle soluzioni cloud essenziali e ai migliori software dei nostri partner editori, distribuiti in pochi clic in un ambiente sicuro. -Questa piattaforma sovrana centralizza soluzioni cloud pronte all'uso, consentendo alle aziende di distribuire rapidamente servizi adatti alle proprie esigenze, dalle fondamenta dell'infrastruttura alle applicazioni aziendali avanzate. +Questa piattaforma sovrana centralizza soluzioni Cloud pronte all'uso, consentendo alle aziende di distribuire rapidamente servizi adatti alle proprie esigenze, dalle fondamenta dell'infrastruttura alle applicazioni aziendali avanzate. -Collaborando con una rete di partner tecnologici riconosciuti, Cloud Temple garantisce una selezione rigorosa di prodotti pre-validati, affidabili e compatibili con gli ambienti esistenti. La navigazione fluida, le schede dettagliate e l'accesso diretto ai fornitori semplificano le decisioni e accelerano i deployment in un contesto sovrano e sicuro. +Collaborando con una rete di partner tecnologici riconosciuti, Cloud Temple garantisce una selezione rigorosa di prodotti pre-validati, affidabili e compatibili con gli ambienti esistenti. La navigazione fluida, le schede dettagliate e l'accesso diretto ai fornitori facilitano le decisioni e accelerano le distribuzioni in un contesto sovrano e sicuro.

      Concetti

      -

      Scopri le basi e i principi fondamentali per comprendere e utilizzare la Marketplace.

      +

      Scopri le basi e i principi essenziali per comprendere e utilizzare la Marketplace.

      Esplora i concetti →
      -

      Avvio rapido

      +

      Quickstart

      Inizia rapidamente con la Marketplace seguendo istruzioni chiare e semplici.

      - Avvia l'Avvio rapido → + Avvia il Quickstart →
      -
      +

      Tutorial

      -

      Impara passo dopo passo come utilizzare la Marketplace con guide dettagliate.

      +

      Impara passo dopo passo a utilizzare la Marketplace con guide dettagliate.

      Scopri i tutorial →
      -
      +
      \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/marketplace/quickstart.md b/i18n/it/docusaurus-plugin-content-docs/current/marketplace/quickstart.md index 6fa5c6a4..0119b1cf 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/marketplace/quickstart.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/marketplace/quickstart.md @@ -4,71 +4,81 @@ title: Guida introduttiva import marketplaceCatalog from '@site/docs/marketplace/images/marketplace_catalog.png' import marketplaceSolutionDetails from '@site/docs/marketplace/images/marketplace_solution_details.png' -# Guida rapida per la Marketplace Cloud Temple +# Guida rapida per il Marketplace Cloud Temple -Questa pagina ti guida attraverso i passaggi iniziali per utilizzare la **Marketplace Cloud Temple** dalla console. Segui queste istruzioni per scoprire le soluzioni disponibili e distribuirle rapidamente. +Questa pagina guida attraverso i passaggi iniziali per utilizzare il **Marketplace Cloud Temple** dalla console. Segui queste istruzioni per scoprire le soluzioni disponibili e distribuirle rapidamente. -## Prerequisiti +--- + +## Prerequisi -Prima di iniziare, assicurati dei seguenti punti: +Prima di iniziare, verifica i seguenti punti: -1. **Sottoscrizione attivata**: Per consentire i deployment, la tua organizzazione deve essere sottoscritta a almeno un servizio Cloud Temple (IaaS OpenSource o IaaS VMware). Nel contesto del contatto con i nostri partner, non è necessaria una sottoscrizione specifica. -2. **Permessi utente**: Il tuo account utente deve disporre dei diritti necessari per accedere alla console e dei diritti di scrittura sugli ambienti di destinazione quando desideri distribuire risorse. -3. **Ambiente di destinazione**: Disporre di un tenant configurato per il deployment delle soluzioni. +1. **Sottoscrizione attiva** : Per consentire i deployment, la tua organizzazione deve aver sottoscritto almeno un servizio Cloud Temple (IaaS OpenSource ou IaaS VMware). Nel caso di contatto con i nostri partner, non è necessaria una sottoscrizione specifica. +2. **Autorizzazioni utente** : L'account utente deve disporre dei permessi necessari per accedere alla console e dei diritti di scrittura sugli ambienti target quando si desidera distribuire risorse. +3. **Ambiente target** : Avere un tenant configurato per il deployment delle soluzioni. -## Accesso alla Marketplace +--- + +## Accesso al Marketplace ### 1. Accesso dalla Console -Dopo esserti connesso alla console Cloud Temple, puoi accedere alla Marketplace in diversi modi: +Una volta connessi alla console Cloud Temple, è possibile accedere al Marketplace in diversi modi : -- **Menu principale**: Un menu **Marketplace** è disponibile nella navigazione principale -- **Pagine delle macchine virtuali**: La Marketplace è inoltre accessibile dalle pagine di creazione di macchine virtuali negli ambienti OpenIaaS e VMware +- **Menu principale** : Un menu **Marketplace** è disponibile nella navigazione principale +- **Pagine macchine virtuali** : Il Marketplace è inoltre accessibile dalle pagine di creazione delle macchine virtuali negli ambienti OpenIaaS e VMware ### 2. Pagina Marketplace La pagina Marketplace presenta un catalogo delle soluzioni disponibili. Ogni soluzione mostra: -- **Nome e logo** della soluzione -- **Descrizione breve** -- **Editore/Partner** +- **Nome e logo** della soluzione +- **Descrizione breve** +- **Editore/Partner** - **Tipo di soluzione** (Immagine VM, Soluzione SaaS, ecc.) -## Viewing solution details +--- + +## Visualizzazione dei dettagli di una soluzione ### Accesso alle informazioni dettagliate -Facendo clic su una soluzione, si accede a una pagina di dettagli che include: +Cliccando su una soluzione, si accede a una pagina di dettaglio che include: -- **Descrizione completa** della soluzione -- **Specifiche tecniche** (se applicabile) -- **Requisiti** per il deployment -- **Documentazione** fornita dall'editore -- **Opzioni di deployment** disponibili +- **Descrizione completa** della soluzione +- **Specifiche tecniche** (se applicabile) +- **Requisiti** di deployment +- **Documentazione** fornita dall'editore +- **Opzioni di deployment** disponibili +--- + ## Azioni disponibili -A seconda del tipo di soluzione, sono disponibili diverse azioni: +A seconda del tipo di soluzione, sono possibili diverse azioni: -### Deployment di immagini di macchine virtuali +### Distribuzione di immagini di macchine virtuali -Per le soluzioni compatibili con i tuoi ambienti OpenIaaS o VMware, puoi effettuare il deployment direttamente dalla Marketplace. +Per le soluzioni compatibili con i tuoi ambienti OpenIaaS o VMware, puoi distribuire direttamente dal Marketplace. -**Nota importante:** Il deployment diretto è disponibile solo per le immagini che includono il tuo ambiente tra i destinatari compatibili. +**Nota importante:** La distribuzione diretta è disponibile solo per le immagini che includono il tuo ambiente tra i target compatibili. **Guide dettagliate:** -- [Come distribuire un'immagine su OpenIaaS?](tutorials/deploy_openiaas) -- [Come distribuire un'immagine su VMware?](tutorials/deploy_vmware) +- [Comment déployer une image sur OpenIaaS ?](tutorials/deploy_openiaas) +- [Comment déployer une image sur VMware ?](tutorials/deploy_vmware) ### Contatto con i partner -Per le soluzioni che richiedono un collegamento diretto, è possibile contattare direttamente il partner editore. +Per le soluzioni che richiedono un'intermediazione, puoi contattare direttamente il partner editore. -**Guida dettagliata:** +**Guida dettagliata :** - [Come contattare un partner?](tutorials/contact_partner) + +--- \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/marketplace/tutorials/contact_partner.md b/i18n/it/docusaurus-plugin-content-docs/current/marketplace/tutorials/contact_partner.md index afbaacd4..59fcfa4d 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/marketplace/tutorials/contact_partner.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/marketplace/tutorials/contact_partner.md @@ -5,39 +5,39 @@ import marketplaceContactAccess from '@site/docs/marketplace/images/marketplaceC import marketplaceContactConfirm from '@site/docs/marketplace/images/marketplaceContactConfirm.png' import marketplaceContactEmail from '@site/docs/marketplace/images/marketplaceContactEmail.png' -Questo tutorial ti guida nel contattare un partner sviluppatore tramite la Marketplace Cloud Temple. +Questo tutorial ti guida per entrare in contatto con un partner editore tramite la Marketplace Cloud Temple. -## Contesto d'uso +## Contesto di utilizzo -Utilizzate questa funzionalità quando: +Utilizzare questa funzionalità quando: -- la soluzione richiede un collegamento con il partner -- desiderate ottenere informazioni aggiuntive -- la soluzione non è direttamente implementabile (nessuna immagine VM) +- La soluzione richiede un contatto con il partner +- Si desidera ottenere informazioni aggiuntive +- La soluzione non è direttamente deployable (pas de VM Image) -## Passi di contatto +## Fasi di contatto ### 1. Accesso al modulo -Dalla pagina di dettaglio di una soluzione partner, fare clic su **Contatta il partner**: +Dalla pagina di dettaglio di una soluzione partner, fai clic su **Contatta il partner** : ### 2. Invio della richiesta -Conferma e invia la tua richiesta di contatto: +Conferma e invia la richiesta di contatto: -Riceverai una conferma via email relativa all'invio della tua richiesta. +Riceverai una conferma via email dell'invio della richiesta. -### 3. Collegamento +### 3. Messa in contatto -Il partner riceverà automaticamente un'email con le tue informazioni: +Il partner riceverà automaticamente un'email con le tue informazioni : -**Esempio di email inviata al partner:** +**Esempio di email inviata al partner :** -## Best practices +## Buone pratiche -- **Be precise** in describing your requirement -- **Indicate the intended use context** -- **Mention your technical or regulatory constraints** +- **Siate precisi** nella descrizione del vostro requisito +- **Indicate il contesto** d'uso previsto +- **Menzionate i vostri vincoli** tecnici o normativi \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_openiaas.md b/i18n/it/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_openiaas.md index 26f92fdb..a4d4568c 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_openiaas.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_openiaas.md @@ -5,46 +5,56 @@ import marketplaceOpenIaasExportTemplate from '@site/docs/marketplace/images/mar import marketplaceOpenIaasExportTemplateButton from '@site/docs/marketplace/images/marketplace_openiaas_export_template_button.png' import marketplaceOpeniaasDeployFromTemplate from '@site/docs/marketplace/images/marketplace_openiaas_deploy_from_template.png' -Questo tutorial spiega come personalizzare un'immagine di macchina virtuale (VMI) OpenIaaS fornita dal Marketplace per creare modelli riutilizzabili personalizzati. +Questo tutorial spiega come personalizzare un'immagine di macchina virtuale (VMI) OpenIaaS fornita dal Marketplace per creare i propri modelli riutilizzabili. ### Principio generale -La Marketplace fornisce sistemi operativi (OS) generici. Il deployment dalla Marketplace ti offre una base solida, rapidamente e facilmente deployabile, evitandoti caricamenti manuali e accelerando i tuoi deployment. +Il Marketplace fornisce sistemi operativi (OS) generici. La distribuzione tramite marketplace vi offre una base solida, rapidamente e facilmente distribuibile, evitando upload manuali e accelerando le vostre distribuzioni. -Una volta che l'immagine è stata distribuita, diventa una macchina virtuale che puoi configurare. Successivamente, puoi esportarla come modello riutilizzabile da tutti gli utenti del tuo tenant. +Una volta distribuita l'immagine, questa diventa una macchina virtuale che è possibile configurare. Potete quindi esportarla come modello riutilizzabile da tutti gli utenti del vostro tenant. + +--- ## Passaggi di personalizzazione -1. **Distribuire l'immagine di base** dalla Marketplace. -2. **Configurare la macchina virtuale** secondo le proprie esigenze. -3. **Creare un modello** a partire dalla macchina virtuale configurata. -4. **Distribuire una nuova macchina virtuale** dal proprio modello personalizzato. +1. **Distribuire l'immagine** di base dal Marketplace. +2. **Configurare la macchina virtuale** in base alle proprie esigenze. +3. **Creare un modello** dalla macchina virtuale configurata. +4. **Distribuire una nuova macchina virtuale** dal modello personalizzato. + +--- + +### Fase 1: Distribuire l'immagine di base -### Step 1: Deploy the base image +Segui la guida [Distribuire un'immagine su OpenIaaS](./deploy_openiaas.md) per iniziare. -Follow the tutorial [Deploy an image on OpenIaaS](./deploy_openiaas.md) to get started. +--- + +### Passaggio 2: Configurare la macchina virtuale -### Step 2: Configure the virtual machine +Una volta distribuita la macchina virtuale, configuratela in base alle vostre esigenze (installazione di software, configurazione della sicurezza, ecc.). -Once the virtual machine is deployed, configure it according to your needs (software installation, security configuration, etc.). +--- -### Step 3: Create a template from the virtual machine +### Passo 3: Creare un modello dalla macchina virtuale -1. From your list of virtual machines, select the configured virtual machine. -2. Select **"Export"** from the action bar. -3. Follow the steps in the Console to export the template. +1. Dall'elenco delle tue macchine virtuali, seleziona la macchina virtuale configurata. +2. Seleziona **"Esporta"** dalla barra delle azioni. +3. Segui i passaggi della Console per esportare il modello. -### Step 4: Deploy from your new template +--- + +### Passaggio 4 : Distribuire dal nuovo modello -You can deploy from the **Catalog** page or from the **Virtual Machines** page. +È possibile distribuire dalla pagina "Catalogo" o dalla pagina "Macchine Virtuali". -To deploy from the **Virtual Machines** page: +Per distribuire dalla pagina **Macchine Virtuali** : -1. Click on **"Create a virtual machine"**. -2. Choose **"Deploy from a template"**. -3. Select your new template from the list. +1. Fare clic su **"Crea una macchina virtuale"**. +2. Seleziona **"Distribuire da un modello"**. +3. Seleziona il nuovo modello dall'elenco. - + \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_vmware.md b/i18n/it/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_vmware.md index fdb716de..62488189 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_vmware.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/marketplace/tutorials/customize_image_vmware.md @@ -5,46 +5,56 @@ import marketplaceVMwareExportTemplate from '@site/docs/marketplace/images/marke import marketplaceVMwareExportTemplateButton from '@site/docs/marketplace/images/marketplace_vmware_export_template_button.png' import marketplaceVMwareDeployFromTemplate from '@site/docs/marketplace/images/marketplace_vmware_deploy_from_template.png' -Questo tutorial spiega come personalizzare un'immagine di macchina virtuale (VMI) VMware fornita dal Marketplace per creare modelli riutilizzabili personalizzati. +Questo tutorial spiega come personalizzare un'immagine di macchina virtuale (VMI) VMware fornita dal Marketplace per creare i propri modelli riutilizzabili. ### Principio generale -La Marketplace fornisce sistemi operativi (OS) generici. Il deployment dalla Marketplace ti offre una base solida, rapidamente e facilmente deployabile, evitandoti caricamenti manuali e accelerando i tuoi deployment. +Il Marketplace fornisce sistemi operativi (OS) generici. La distribuzione tramite marketplace vi offre una base solida, rapidamente e facilmente distribuibile, evitando upload manuali e accelerando le vostre distribuzioni. -Una volta che l'immagine è stata distribuita, diventa una macchina virtuale che puoi configurare. Successivamente, puoi esportarla come modello riutilizzabile da tutti gli utenti del tuo tenant. +Una volta distribuita l'immagine, questa diventa una macchina virtuale che è possibile configurare. Potete quindi esportarla come modello riutilizzabile da tutti gli utenti del vostro tenant. + +--- ## Passaggi di personalizzazione -1. **Distribuire l'immagine di base** dalla Marketplace. -2. **Configurare la macchina virtuale** secondo le proprie esigenze. -3. **Creare un modello** a partire dalla macchina virtuale configurata. -4. **Distribuire una nuova macchina virtuale** dal proprio modello personalizzato. +1. **Distribuire l'immagine** di base dal Marketplace. +2. **Configurare la macchina virtuale** in base alle proprie esigenze. +3. **Creare un modello** dalla macchina virtuale configurata. +4. **Distribuire una nuova macchina virtuale** dal modello personalizzato. + +--- + +### Fase 1: Distribuire l'immagine di base -### Step 1: Deploy the base image +Segui la guida [Distribuire un'immagine su VMware](./deploy_vmware.md) per iniziare. -Follow the tutorial [Deploy an image on VMware](./deploy_vmware.md) to get started. +--- + +### Passaggio 2: Configurare la macchina virtuale -### Step 2: Configure the virtual machine +Una volta distribuita la macchina virtuale, configuratela in base alle vostre esigenze (installazione di software, configurazione della sicurezza, ecc.). -Once the virtual machine is deployed, configure it according to your needs (software installation, security configuration, etc.). +--- -### Step 3: Create a template from the virtual machine +### Fase 3: Creare un modello dalla macchina virtuale -1. From your list of virtual machines, select the configured virtual machine. -2. Select **"Export"** from the action bar. -3. Follow the steps in the Console to export the template. +1. Dall'elenco delle tue macchine virtuali, seleziona la macchina virtuale configurata. +2. Seleziona **"Esporta"** dalla barra delle azioni. +3. Segui i passaggi della Console per esportare il modello. -### Step 4: Deploy from your new template +--- + +### Passaggio 4 : Distribuire dal nuovo modello -You can deploy from the **Catalog** page or from the **Virtual Machines** page. +È possibile distribuire dalla pagina "Catalogo" o dalla pagina "Macchine Virtuali". -To deploy from the **Virtual Machines** page: +Per distribuire dalla pagina **Macchine Virtuali** : -1. Click on **"Create a virtual machine"**. -2. Choose **"Deploy from a template"**. -3. Select your new template from the list. +1. Fare clic su **"Crea una macchina virtuale"**. +2. Seleziona **"Distribuisci da un modello"**. +3. Seleziona il nuovo modello dall'elenco. - + \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_openiaas.md b/i18n/it/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_openiaas.md index 6ef50655..405056da 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_openiaas.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_openiaas.md @@ -4,24 +4,24 @@ title: Distribuire un'immagine su OpenIaaS import marketplaceOpeniaasDeployment from '@site/docs/marketplace/images/marketplace_openiaas_deploy.png' import marketplaceOpeniaasConfig from '@site/docs/marketplace/images/marketplace_openiaas_config.png' -Questo tutorial ti guida nel distribuire un'immagine di macchina virtuale dalla Marketplace Cloud Temple nel tuo ambiente OpenIaaS. +Questo tutorial ti guida per distribuire un'immagine di macchina virtuale dal Marketplace Cloud Temple al tuo ambiente OpenIaaS. ## Prerequisiti - Disporre di un ambiente OpenIaaS configurato - Avere i permessi per la creazione di macchine virtuali -- L'immagine deve avere **OpenIaaS** tra le destinazioni compatibili +- L'immagine deve avere **OpenIaaS** tra i suoi target compatibili -## Passi di distribuzione +## Fasi di distribuzione ### 1. Selezione e distribuzione -Dalla pagina di dettaglio di una soluzione compatibile con OpenIaaS, seleziona l'ambiente di destinazione e fai clic su **Distribuisci**: +Dalla pagina di dettaglio di una soluzione compatibile con OpenIaaS, seleziona il tuo ambiente di destinazione e fai clic su **Distribuisci** : ### 2. Configurazione della macchina virtuale -Configurate i parametri di base della vostra macchina virtuale: +Configura i parametri di base della tua macchina virtuale: - **Nome** della VM - **Risorse** (CPU, RAM) @@ -30,19 +30,19 @@ Configurate i parametri di base della vostra macchina virtuale: -Il provisioning viene solitamente completato in meno di 10 minuti, in base alle dimensioni dell'immagine. +Il deployment avviene generalmente in meno di 10 minuti in base alla dimensione dell'immagine. ## Accesso alternativo -È inoltre possibile accedere direttamente alle immagini Marketplace dalla pagina **Macchine Virtuali** del proprio ambiente OpenIaaS: +È inoltre possibile accedere alle immagini del Marketplace direttamente dalla pagina **Macchine Virtuali** dell'ambiente OpenIaaS: 1. Accedi a **Macchine Virtuali** > **Crea una VM** -2. Seleziona **Immagini Marketplace** tra le opzioni di origine +2. Seleziona **Immagini Marketplace** nelle opzioni di origine 3. Scegli la tua soluzione nel catalogo integrato -## Monitoraggio del deployment +## Monitoraggio della distribuzione -Dopo aver avviato il deployment: +Una volta avviata la distribuzione : -- Segui l'avanzamento dalla console OpenIaaS -- La VM apparirà nella tua lista delle macchine virtuali +- Monitora i progressi dalla console OpenIaaS +- La VM apparirà nell'elenco delle macchine virtuali \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_vmware.md b/i18n/it/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_vmware.md index 10d4a726..1b70a685 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_vmware.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/marketplace/tutorials/deploy_vmware.md @@ -4,24 +4,24 @@ title: Distribuire un'immagine su VMware import marketplaceVmwareDeployment from '@site/docs/marketplace/images/marketplace_vmware_deploy.png' import marketplaceVmwareConfig from '@site/docs/marketplace/images/marketplace_vmware_config.png' -Questo tutorial ti guida nel distribuire un'immagine di macchina virtuale dalla Marketplace Cloud Temple nel tuo ambiente VMware. +Questo tutorial ti guida nel distribuire un'immagine di macchina virtuale dalla Marketplace Cloud Temple al tuo ambiente VMware. ## Prerequisiti - Disporre di un ambiente VMware configurato - Avere i permessi per la creazione di macchine virtuali -- L'immagine deve avere **VMware** tra i target compatibili +- L'immagine deve avere **VMware** nei target compatibili -## Passi di distribuzione +## Fasi di distribuzione ### 1. Selezione e distribuzione -Dalla pagina di dettaglio di una soluzione compatibile con VMware, seleziona l'ambiente di destinazione e fai clic su **Distribuisci**: +Dalla pagina dei dettagli di una soluzione compatibile con VMware, seleziona il tuo ambiente di destinazione e fai clic su **Distribuisci** : ### 2. Configurazione della macchina virtuale -Configurate i parametri di base della vostra macchina virtuale: +Configura i parametri di base della tua macchina virtuale : - **Nome** della VM - **Risorse** (CPU, RAM) @@ -30,19 +30,19 @@ Configurate i parametri di base della vostra macchina virtuale: -Il provisioning viene solitamente completato in meno di 10 minuti, in base alle dimensioni dell'immagine. +Il deployment avviene generalmente in meno di 10 minuti in base alla dimensione dell'immagine. ## Accesso alternativo -È inoltre possibile accedere ai template Marketplace direttamente dall'interfaccia VMware: +È inoltre possibile accedere direttamente ai template del Marketplace dall'interfaccia VMware: 1. Accedi a **vSphere** > **Distribuisci una VM** 2. Seleziona **Template Marketplace** come origine 3. Esplora le immagini disponibili nel catalogo integrato -## Deployment tracking +## Monitoraggio del deployment -Once the deployment is started: +Una volta avviato il deployment: -- Monitor the progress from the VMware console -- The VM will appear in your vSphere inventory +- Monitora l'avanzamento dalla console VMware +- La VM apparirà nel tuo inventario vSphere \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/network/internet/advanced_concepts.md b/i18n/it/docusaurus-plugin-content-docs/current/network/internet/advanced_concepts.md index 294de529..55ea9615 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/network/internet/advanced_concepts.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/network/internet/advanced_concepts.md @@ -6,41 +6,41 @@ title: Concetti avanzati Questa pagina presenta le funzionalità avanzate di routing BGP disponibili sull'infrastruttura Internet Cloud Temple. -## BGP Communities +## Comunità BGP -Cloud Temple offre una varietà di community BGP che consentono di controllare la selezione del percorso seguito dal tuo traffico. +Cloud Temple offre una varietà di comunità BGP che consentono di controllare la selezione del percorso utilizzato dal tuo traffico. ### Cos'è una comunità BGP? -Le comunità BGP sono attributi opzionali che possono essere associati alle route BGP per contrassegnarle, filtrarle o influenzare il routing. +Le comunità BGP sono attributi opzionali che possono essere associati alle rotte BGP per contrassegnare, filtrare o influenzare il routing. -### Actions on Local Preference +### Azioni sulla Preferenza Locale -The following BGP communities allow you to modify the **local preference** of your prefixes, thereby influencing the path selection toward the machine announcing the prefix within AS33930. +Le seguenti comunità BGP consentono di modificare la **preferenza locale** dei tuoi prefissi, influenzando così la selezione del percorso verso la macchina che annuncia il prefisso all'interno dell'AS33930. -You can adjust the local preference of a prefix within the Internet Cloud Temple backbone in AS 33930 by using the following communities: +È possibile modificare la preferenza locale di un prefisso all'interno del backbone Internet Cloud Temple nell'AS 33930 utilizzando le seguenti comunità : -| BGP Community | Priority | Local Preference | -|:--------------|:---------|:----------------:| -| 33930:40010 | Low priority | 10 | -| *Default* | Cloud Temple backbone (default) | 100 | -| 33930:40150 | Medium priority | 150 | -| 33930:40200 | High priority | 200 | -| 33930:40250 | Maximum priority | 250 | +| Comunità BGP | Priorità | Preferenza Locale | +|:---------------|:------------|:----------------:| +| 33930:40010 | Priorità bassa | 10 | +| *Predefinito* | Backbone Cloud Temple (predefinito) | 100 | +| 33930:40150 | Priorità media | 150 | +| 33930:40200 | Priorità alta | 200 | +| 33930:40250 | Priorità massima | 250 | -**Note:** The higher the local preference value, the more preferred the path is in BGP routing decisions. By default, without a specific community, your prefixes use the standard local preference of 100. +**Nota :** Più alto è il valore della preferenza locale, più il percorso è preferito nelle decisioni di routing BGP. Per impostazione predefinita, senza una comunità specifica, i tuoi prefissi utilizzano la preferenza locale standard di 100. ## Configurazione -Per applicare una comunità BGP alle tue annunciazioni: +Per applicare una comunità BGP alle tue route: -1. Definire una policy che contrassegni il prefisso con la comunità -2. Applicare questa policy alla sessione BGP con i server di routing di Cloud Temple +1. Definire una policy che contrassegna il prefisso con la comunità +2. Applicare questa policy alla sessione BGP con i server di route Cloud Temple ### Esempio di configurazione (bird) ```junos -# Definire una policy che aggiunge il prefisso con la community +# Définir une policy qui tag le préfixe avec la communauté filter p_bkb_rs_001_export { if net ~ [203.0.113.0/32] then { @@ -54,8 +54,8 @@ if net ~ [203.0.113.1/32] else reject; } -# Apply this policy to the BGP session with Cloud Temple route servers -protocol bgp p_bkb_rs_001 { +# Appliquer cette policy à la session BGP avec les serveurs de routes Cloud Temple +protocol bgp p_bkb_rs_001 { local 100.64.3.226 as 65551; neighbor 100.64.0.1 as 33930; multihop; @@ -67,4 +67,4 @@ protocol bgp p_bkb_rs_001 { } ``` -The prefix 203.0.113.0/32 will be advertised with a **local preference of 250**, and the prefix 203.0.113.1/32 will be advertised with a **local preference of 100** (default) within AS33930. +Il prefisso 203.0.113.0/32 verrà annunciato con una **preferenza locale di 250** e il prefisso 203.0.113.1/32 verrà annunciato con una **preferenza locale di 100** (predefinita) all'interno dell'AS33930. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/network/internet/concepts.md b/i18n/it/docusaurus-plugin-content-docs/current/network/internet/concepts.md index 11a70672..26dd1a00 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/network/internet/concepts.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/network/internet/concepts.md @@ -2,113 +2,113 @@ title: Concetti --- -## Internet Infrastructure CloudTemple +## Infrastruttura Internet CloudTemple -CloudTemple opera come **Cloud Service Provider (CSP)** con un'infrastruttura Internet autonoma, altamente resiliente e sicura. La nostra connettività di tipo operatore si basa su un numero di AS (Autonomous System Number) proprietario, che ci garantisce un controllo totale sul routing e assicura un'alta disponibilità per tutti i nostri servizi. +CloudTemple opera come **Cloud Service Provider (CSP)** dotato di un'infrastruttura Internet autonoma, altamente resiliente e sicura. La nostra connettività di tipo operator si basa su un proprio numero AS (Autonomous System Number) che ci conferisce un controllo totale sul routing e garantisce un'elevata disponibilità per tutti i nostri servizi. -Questa infrastruttura autonoma ci permette di offrire una connettività Internet con funzionalità avanzate, adatte a tutte le tipologie di offerte CloudTemple, dall'hosting dedicato alle soluzioni IaaS passando per i servizi PaaS. +Questa infrastruttura autonoma ci permette di offrire una connettività Internet con funzionalità avanzate, adatta a tutti i tipi di offerte CloudTemple, dall'hosting dedicato alle soluzioni IaaS, passando per i servizi PaaS. ## Architettura di rete e ridondanza -La nostra rete si avvale di un'architettura ridondante progettata per ottimizzare le prestazioni e garantire la continuità del servizio. CloudTemple dispone di un sistema autonomo indipendente con un insieme di prefissi IP pubblici assegnati, assicurando una connettività diretta globale. +La nostra rete beneficia di un'architettura ridondante progettata per ottimizzare le prestazioni e garantire la continuità operativa. CloudTemple dispone di un sistema autonomo indipendente con un insieme di prefissi IP pubblici assegnati, che garantisce una connettività globale diretta. -Questa connettività si basa su **due percorsi distinti** per massimizzare la resilienza: +Questa connettività si basa su **due percorsi distinti** per massimizzare la resilienza : -**Connessione di transit:** Due operatori principali di transit garantiscono la ridondanza a livello globale, consentendo un routing ottimale del traffico Internet verso le nostre infrastrutture. +**Connettività di transito :** Due principali operatori di transito garantiscono la ridondanza a livello globale, consentendo un routing ottimale del traffico Internet verso le nostre infrastrutture. -**Punti di scambio:** La nostra presenza su due punti di scambio (IXP) a Parigi ci permette di ridurre significativamente la latenza per gli utenti europei, migliorando al contempo le prestazioni dei servizi regionali. Questa strategia garantisce inoltre una ridondanza naturale contro i guasti dei fornitori. +**Punti di interscambio (IXP) :** La nostra presenza su due punti di interscambio (IXP) a Parigi ci permette di ridurre significativamente la latenza per gli utenti europei, migliorando al contempo le prestazioni dei servizi regionali. Questo approccio garantisce inoltre una ridondanza naturale contro i guasti del fornitore. -L'utilizzo del protocollo BGP4 garantisce un routing efficiente dei flussi Internet verso la gateway attiva della vostra architettura, in particolare nei scenari di distribuzione multi-zone di disponibilità, come nel caso di cluster di firewall distribuiti tra due zone di disponibilità. +L'utilizzo del protocollo BGP4 garantisce un routing efficiente dei vostri flussi Internet verso il gateway attivo della vostra architettura, in particolare negli scenari di distribuzione su più zone di disponibilità, come nel caso di cluster di firewall distribuiti tra due zone di disponibilità. -## Protezione DDoS integrata +## Protezione anti-DDoS integrata -Tutto il traffico in entrata verso l'infrastruttura CloudTemple beneficia di una protezione DDoS avanzata garantita da **F5**, un leader mondiale nella sicurezza di rete. Questa protezione opera in modo trasparente e automatico. +Tutto il traffico in entrata verso l'infrastruttura CloudTemple beneficia di una protezione anti-DDoS avanzata, garantita da **F5**, un leader mondiale nella sicurezza di rete. Questa protezione opera in modo trasparente e automatico. -Le attacchi volumetrici vengono rilevati e mitigati direttamente al bordo della rete F5, prima ancora di raggiungere la rete CloudTemple. Questo filtraggio in upstream garantisce che nessuna saturazione possa influenzare le nostre connessioni Internet, e solo le richieste legittime raggiungono le nostre infrastrutture. +Gli attacchi volumetrici vengono rilevati e mitigati direttamente al bordo della rete F5, prima ancora di raggiungere la rete CloudTemple. Questo filtraggio a monte garantisce che nessuna saturazione possa influenzare le nostre connessioni Internet e solo le richieste legittime raggiungano le nostre infrastrutture. -**Tutti i servizi CloudTemple** beneficiano di questa protezione senza costi aggiuntivi, inclusi i prefissi clienti che possono essere migrati verso la nostra infrastruttura. Questo approccio integrato trasforma un requisito di sicurezza in un vantaggio operativo per i nostri clienti. +**Tutti i servizi CloudTemple** beneficiano di questa protezione senza costi aggiuntivi, inclusi i prefissi client che possono essere migrati verso la nostra infrastruttura. Questo approccio integrato trasforma un requisito di sicurezza in un vantaggio operativo per i nostri clienti. -## Assignment of Public IP Addresses +## Assegnazione di indirizzi IP pubblici -CloudTemple offers a flexible system for assigning Provider Aggregated (PA) public IP addresses, allowing clients to reserve public IP addresses **individually** according to their specific needs. +CloudTemple propone un sistema flessibile di assegnazione di indirizzi IP pubblici Provider Aggregated (PA), che consente ai clienti di riservare indirizzi IP pubblici **singolarmente** in base alle loro esigenze specifiche. ### Processo di prenotazione La prenotazione di indirizzi IP pubblici avviene direttamente tramite la console CloudTemple, offrendo una gestione autonoma e immediata: -**Attraverso l'API della console:** Integrazione possibile nei vostri flussi di automazione e provisioning. +**Tramite l'API della console:** Integrazione possibile nei vostri workflow di automazione e provisioning. -**Attraverso la console web:** Interfaccia intuitiva accessibile dalla sezione *Internet* del vostro spazio client. +**Tramite la console web:** Interfaccia intuitiva accessibile dalla sezione *Internet* della vostra area cliente. -Il processo di prenotazione segue queste semplici fasi: accesso alla console, navigazione verso *Internet* > *Gestisci gli indirizzi IP*, selezione di *Prenota un nuovo indirizzo*, scelta tra IPv4 o IPv6, quindi conferma dell'ordine. +Il processo di prenotazione segue queste semplici fasi: accesso alla console, navigazione verso *Internet* > *Gestisci gli indirizzi IP*, selezione di *Prenota un nuovo indirizzo*, scelta tra IPv4 o IPv6, quindi convalida dell'ordine. ### Fatturazione -La fatturazione degli indirizzi IP pubblici avviene per unità di misura (UM) e ha inizio al momento della prenotazione dell'indirizzo, garantendo una trasparenza totale dei costi. +La fatturazione degli indirizzi IP pubblici avviene per unità d'opera (UO) e inizia fin dalla prenotazione dell'indirizzo, garantendo una trasparenza totale dei costi. | Riferimento | Unità | SKU | -|-------------|-------|-----| -| Rete - IPv4 pubblico dedicato | 1 IPv4 | RSIP-IP4-UNIT | -| Rete - IPv6 pubblico dedicato | 1 IPv6 | RSIP-IP6-UNIT | +|-----------|-------|-----| +| Rete - IPv4 Pubblica dedicata | 1 IPv4 | RSIP-IP4-UNIT | +| Rete - IPv6 Pubblica dedicata | 1 IPv6 | RSIP-IP6-UNIT | -## IPv4 Blocks +## Blocchi IPv4 -The delivery of IPv4 addresses is subject to **available stock** for our customers, per IP address. +La fornitura di un'IPv4 avviene **nei limiti delle scorte disponibili** per i nostri clienti, per indirizzo IP. -To order IPv4 addresses, go to the ***'Public IPs'*** menu under Networks in the green bar on the left, and click the ***"Order IPv4 addresses or IPv6 prefixes"*** button. +L'ordine di indirizzi IPv4 viene effettuato dal menu ***'Indirizzi pubblici'*** del menu Reti nella barra verde a sinistra, tramite il pulsante ***"Ordina indirizzi IPv4 o prefissi IPv6"***. -You can also view the address blocks assigned to you in the same menu. +È possibile visualizzare i blocchi di indirizzi assegnati a te in questo stesso menu. -| Reference | Unit | SKU | +| Riferimento | Unità | SKU | | ----------------------------- | ------ | ---------------------------- | -| Public IPv4 Dedicated Network | IPv4/32 | csp:(region):network:ipv4:v2 | +| Rete - IPv4 Pubblica dedicata | IPv4/32 | csp:(region):network:ipv4:v2 | ## Blocchi IPv6 -La richiesta di prefissi IPv6 avviene dal menu ***'IP pubblici'*** del menu Reti nella barra verde a sinistra, tramite il pulsante ***"Richiedi indirizzi IPv4 o prefissi IPv6"***. +L'ordine dei prefissi IPv6 viene effettuato dal menu ***'IP pubbliche'*** del menu Reti nella barra verde a sinistra, tramite il pulsante ***"Ordina indirizzi IPv4 o prefissi IPv6"***. -È possibile visualizzare i prefissi assegnati a questo stesso menu. +È possibile visualizzare i prefissi assegnati in questo stesso menu. | Riferimento | Unità | SKU | | ------------------------------------- | ------- | ---------------------------- | -| Rete - Intervallo di indirizzi IPv6 pubblici dedicati | IPv6/48 | csp:(region):network:ipv6:v1 | +| Rete - Intervallo IPv6 Pubblici dedicati | IPv6/48 | csp:(region):network:ipv6:v1 | -## IP prefix migration +## Migrazione dei prefissi IP dei clienti -CloudTemple supports clients wishing to migrate their own IP prefixes to our infrastructure, facilitating migration projects while preserving their existing network identity. +CloudTemple accompagna i clienti che desiderano migrare i propri prefissi IP verso la nostra infrastruttura, facilitando così i progetti di migrazione mantenendo invariata l'identità di rete esistente. ### Vantaggi della migrazione -Questo approccio consente di mantenere il tuo indirizzo IP durante la migrazione verso CloudTemple, garantendo una continuità perfetta per le tue applicazioni e i tuoi clienti. Mantieni il pieno controllo sull'utilizzo dei tuoi indirizzi IP, beneficiando contemporaneamente dell'infrastruttura di CloudTemple. +Questo approccio consente di mantenere la vostra identità IP durante la migrazione verso CloudTemple, garantendo una continuità perfetta per le vostre applicazioni e clienti. Mantenete il controllo completo sull'utilizzo dei vostri indirizzi IP, beneficiando al contempo dell'infrastruttura CloudTemple. ### Processo di integrazione Il tuo prefisso IP (ad esempio `203.0.113.0/24`) viene integrato nella rete backbone di CloudTemple e annunciato dal nostro AS. Una volta integrato, il prefisso può essere associato liberamente alle tue macchine virtuali, bilanciatori di carico o altri servizi. -**Tutte le indirizzi del prefisso migrato beneficiano automaticamente della protezione anti-DDoS F5**, senza configurazioni aggiuntive né costi aggiuntivi. +**Tutti gli indirizzi del prefisso migrato beneficiano automaticamente della protezione anti-DDoS F5**, senza configurazione aggiuntiva né costi aggiuntivi. -### Requis +### Requisiti -La migrazione dei prefissi IP richiede che il prefisso sia registrato in un registro Internet riconosciuto (ARIN, RIPE, APNIC, ecc.) e che ne sia il proprietario legittimo. La gestione BGP può essere gestita dal vostro team oppure supportata tecnicamente da CloudTemple, a seconda delle vostre preferenze. +La migrazione dei prefissi IP richiede che il prefisso sia registrato in un registro Internet riconosciuto (ARIN, RIPE, APNIC, ecc.) e che ne siate i proprietari legittimi. La gestione BGP può essere affidata ai vostri team o avvalersi del supporto tecnico di CloudTemple, a seconda delle vostre preferenze. -## Reserved Internet Bandwidth +## Riserva di banda internet -Internet bandwidth is reservable in increments of 100 Mbps. The maximum available capacity for a gateway is 10 Gbps, potentially limited by the technical specifications of your gateway. +La banda internet è prenotabile in incrementi di 100 Mbps. La capacità massima disponibile per un gateway è di 10 Gbps, potenzialmente limitata dalle caratteristiche tecniche del tuo gateway. -Billing is based on the 95th percentile over the billing period, typically one month. You may therefore occasionally benefit from bursts exceeding your reserved capacity. +La fatturazione si basa sul 95° percentile durante il periodo di fatturazione, solitamente un mese. Puoi quindi occasionalmente usufruire di un burst oltre la capacità prenotata. -| Reference | Unit | SKU | +| Riferimento | Unità | SKU | | ----------------------------------------- | -------- | --------------------------------------- | -| Network - Reserved Internet Bandwidth | 100 Mbps | csp:(region):network:trafic:internet:v1 | +| Rete - Banda internet prenotata | 100 Mbps | csp:(region):network:trafic:internet:v1 | -***Note:*** -*There is no **volume-based billing** of the type **'egress fees'**. You pay only for the bandwidth reservation.__* +***Nota:*** +*Non è prevista una **fatturazione volumetrica** di tipo **'egress fees'. Paghi solo la prenotazione della banda.*** -## Disponibilità per offerta +## Disponibilità per prodotto -L'intera gamma di funzionalità di connettività Internet è disponibile su tutte le offerte CloudTemple, garantendo un'esperienza omogenea indipendentemente dal tipo di servizio utilizzato. +Tutte queste funzionalità di connettività Internet sono disponibili su tutte le offerte CloudTemple, garantendo un'esperienza uniforme indipendentemente dal tipo di servizio utilizzato. -| Offerta | Connessione Internet | Protezione DDoS | Gestione RSIP | Migrazione prefissi | +| Offerta | Connettività Internet | Protezione DDoS | Gestione RSIP | Migrazione prefissi | |-------|----------------------|------------------|---------------|-------------------| | Hosting dedicato | ✓ | ✓ | ✓ | ✓ | | Hosting condiviso | ✓ | ✓ | ✓ | ✓ | @@ -116,4 +116,4 @@ L'intera gamma di funzionalità di connettività Internet è disponibile su tutt | IaaS OpenSource | ✓ | ✓ | ✓ | ✓ | | PaaS OpenShift | ✓ | ✓ | ✓ | ✓ | -Questa approccio unificato garantisce a tutti i nostri clienti l'accesso a una connettività Internet di qualità operatore, con sicurezza integrata e funzionalità avanzate, indipendentemente dalla scelta tecnologica. +Questo approccio unificato garantisce che tutti i nostri clienti beneficiano di un accesso Internet di qualità carrier-grade, con sicurezza integrata e funzionalità avanzate, indipendentemente dalla loro scelta tecnologica. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/network/internet/internet.md b/i18n/it/docusaurus-plugin-content-docs/current/network/internet/internet.md index 8f5dce82..b7578d81 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/network/internet/internet.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/network/internet/internet.md @@ -2,22 +2,24 @@ title: Panoramica --- -Cloud Temple mette a disposizione dei suoi clienti blocchi di __indirizzi IP pubblici__ di almeno 1 IPv4, o 64 IPv6, registrati presso RIPE, per consentire la vostra connettività Internet. +# Internet + +Cloud Temple mette a disposizione dei propri clienti blocchi di __indirizzi IP pubblici__ di almeno 1 IPv4 o 64 IPv6, assegnati dal RIPE, per garantire la connettività Internet.

      Concetti

      -

      Scoprite le basi e i principi essenziali per comprendere e padroneggiare la nostra infrastruttura.

      - Esplorare i concetti → +

      Scopri le basi e i principi fondamentali per comprendere e padroneggiare la nostra infrastruttura.

      + Esplora i concetti →
      -

      Guida rapida

      -

      Iniziate rapidamente con le nostre risorse seguendo istruzioni chiare e semplici.

      - Avviare la guida rapida → +

      Quickstart

      +

      Inizia rapidamente con le nostre risorse seguendo istruzioni chiare e semplici.

      + Avvia il Quickstart →

      Tutorial

      -

      Imparate passo dopo passo come configurare e utilizzare i nostri servizi con guide dettagliate.

      - Scoprire i tutorial → +

      Impara passo dopo passo a configurare e utilizzare i nostri servizi con guide dettagliate.

      + Scopri i tutorial →
      -
      + \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/network/network_overview.md b/i18n/it/docusaurus-plugin-content-docs/current/network/network_overview.md index 686fe8e6..faa38c1e 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/network/network_overview.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/network/network_overview.md @@ -1,11 +1,11 @@ --- -title: Network +title: Rete displayed_sidebar: docSidebar --- -# Network +# Rete -I servizi di rete di Cloud Temple consentono di costruire una topologia adattata alla tua architettura: isolamento tramite reti private, routing avanzato con VPC o connettività Internet diretta. +I servizi di rete di Cloud Temple consentono di costruire una topologia adatta alla tua architettura: isolamento tramite reti private, routing avanzato con VPC o connettività Internet diretta.
      @@ -15,12 +15,12 @@ I servizi di rete di Cloud Temple consentono di costruire una topologia adattata

      Private Network

      -

      Reti private per interconnettere le tue risorse senza passare per Internet, con pieno controllo della topologia.

      +

      Reti private per interconnettere le tue risorse senza passare per Internet, con un controllo totale della topologia.

      Scopri Private Network →

      Internet

      -

      Connettività Internet ad alta disponibilità: indirizzi IP pubblici, BGP e accesso diretto per i tuoi workload esposti.

      +

      Connettività Internet ad alta disponibilità: indirizzi IP pubblici, BGP e accesso diretto per i tuoi carichi di lavoro esposti.

      Scopri Internet →
      -
      + \ No newline at end of file diff --git a/memory-bank/core/documentationStatus.md b/memory-bank/core/documentationStatus.md index 5efdfcc8..47bdd104 100644 --- a/memory-bank/core/documentationStatus.md +++ b/memory-bank/core/documentationStatus.md @@ -79,7 +79,9 @@ ## 🌍 Internationalisation (i18n) -**Script de traduction** : `scripts/translate_py/translate.py` — **corrigé le 14/05/2026** (chunking code-block-aware) +**Script de traduction** : `scripts/translate_py/translate.py` + +**État des hash** : ✅ 157/157 fichiers synchronisés (resync 17/05/2026) | Langue | Statut Build | Qualité Traduction | Actions Requises | |--------|--------------|-------------------|------------------| @@ -89,6 +91,17 @@ | **IT** | ✅ Succès | Moyenne | Aucune | | **DE** | ✅ Succès | Moyenne | Aucune | +### Scripts impactant les traductions + +| Script | Écrit docs/ | Écrit i18n/ | Met à jour hash | +|--------|:-:|:-:|:-:| +| `scripts/translate_py/translate.py` | ❌ | ✅ | ✅ | +| `scripts/extract_changelog.py` | ✅ | ✅ | ✅ (corrigé 17/05/2026) | +| `scripts/generate_models_doc/generate_models_doc.py` | ✅ | ❌ | N/A (déclenche re-traduction) | + +> ⚠️ **Règle** : Ne jamais éditer `i18n/` manuellement. Modifier `docs/` puis lancer `translate.py`. +> L'ancien script `oldies/translate.js` a été supprimé le 17/05/2026. + ## 🏗️ Navigation et Structure ### Catégories principales (sidebar) @@ -105,19 +118,26 @@ ## 🛠️ Maintenance Technique +### Actions Récentes (session 17/05/2026) + +- [x] Resync des hash de traduction (102 mis à jour, 34 ajoutés, 55 orphelins nettoyés) +- [x] Nettoyage changelog_produits.md (tronqué avant v4.0, ~2600 → ~420 lignes) +- [x] Correction extract_changelog.py pour mettre à jour les hash après génération +- [x] Suppression de l'ancien script oldies/translate.js +- [x] Mise à jour README.md et scripts/README.md (doc traduction complète) +- [x] Mise à jour Memory Bank + ### Actions Récentes (session 14/05/2026) - [x] Fix permissions git (core.fileMode false) - [x] Mise à jour changelog (3 entrées manquantes : stockage IOPS, sauvegarde IaaS, DB sizing) - [x] Fix chunking traduction (code-block-aware dans ContentSplitter) -- [x] Mise à jour Memory Bank ### Actions Futures -- [ ] Relancer les traductions avec le script corrigé pour les fichiers modifiés - [ ] Ajouter des tutoriels pour Managed MariaDB et PostgreSQL - [ ] Enrichir VM Instances avec cas d'usage avancés --- -*Dernière mise à jour : 14/05/2026* +*Dernière mise à jour : 17/05/2026* diff --git a/oldies/translate.js b/oldies/translate.js deleted file mode 100755 index 94dad982..00000000 --- a/oldies/translate.js +++ /dev/null @@ -1,753 +0,0 @@ -#!/usr/bin/env node - -/** - * CloudTemple Documentation Translation Script - * - * This script automatically translates Markdown documentation from French to other languages - * using the DragonflyGroup LLM API. It tracks source content hashes to determine if a - * translation is outdated and only retranslates files when their French source has changed. - */ - -const fs = require('fs-extra'); -const path = require('path'); -const crypto = require('crypto'); -const axios = require('axios'); -const dotenv = require('dotenv'); - -// Load environment variables -dotenv.config(); - -// Configuration -const API_URL = process.env.CLOUDTEMPLE_API_URL || 'https://api.ai.cloud-temple.com/v1/chat/completions'; // Default Cloud Temple API URL -const API_KEY = process.env.CLOUDTEMPLE_API_KEY; -const DOC_BASE_PATH = process.env.DOC_BASE_PATH || '.'; -const TRANSLATION_MODEL = process.env.TRANSLATION_MODEL || 'qwen3:30b-a3b'; // Default to qwen3:30b-a3b -const TRANSLATION_TEMPERATURE = parseFloat(process.env.TRANSLATION_TEMPERATURE || '0.1'); -const TRANSLATION_TOP_P = parseFloat(process.env.TRANSLATION_TOP_P || '1'); -const CONCURRENT_TRANSLATIONS = parseInt(process.env.CONCURRENT_TRANSLATIONS || '4', 10); // Number of files to process concurrently - -// Validate required environment variables -// API_URL has a default, so only API_KEY needs to be strictly checked if not using a local model or other auth. -if (!API_KEY) { - console.error('Error: CLOUDTEMPLE_API_KEY environment variable is not defined'); - process.exit(1); -} -// No need to check API_URL if it has a default. -// If the default is used, API_KEY is essential. -// If a custom API_URL is set (e.g. for a local LLM), API_KEY might not be needed, -// but for Cloud Temple's public API, it is. -if (process.env.CLOUDTEMPLE_API_URL && !API_KEY) { - console.warn('Warning: CLOUDTEMPLE_API_URL is set, but CLOUDTEMPLE_API_KEY is not. This might be an issue for non-local APIs.'); -} else if (!process.env.CLOUDTEMPLE_API_URL && !API_KEY) { - // This case should ideally not be hit if API_URL has a default and API_KEY is checked. - // However, if the default URL is removed in the future, this check becomes relevant. - console.error('Error: CLOUDTEMPLE_API_URL (or its default) and CLOUDTEMPLE_API_KEY must be defined.'); - process.exit(1); -} - -// Language mapping -const LANGUAGES = { - 'en': 'English', - 'de': 'Deutsch', - 'es': 'Español', - 'it': 'Italiano' -}; - -// Parse command line arguments -const args = process.argv.slice(2); -const isDryRun = args.includes('--dry-run'); -const forceTranslation = args.includes('--force'); -const isInitMode = args.includes('--init'); -const translateMissing = args.includes('--translate-missing'); -const targetLang = args.find(arg => arg.startsWith('--lang='))?.split('=')[1]; - -// Statistics tracking -const stats = { - processed: 0, - translated: 0, - skipped: 0, - errors: 0, - copied: 0 -}; - -/** - * Compute SHA-256 hash of file content - * @param {string} filePath - Path to the file - * @returns {string} - SHA-256 hash - */ -function computeFileHash(filePath) { - const content = fs.readFileSync(filePath, 'utf8'); - return crypto.createHash('sha256').update(content).digest('hex'); -} - -/** - * Check if translation is needed for a file - * @param {string} filePath - Path to the source file - * @param {string} lang - Target language code - * @param {Object} translationMeta - Translation metadata - * @returns {boolean} - Whether translation is needed - */ -function isTranslationNeeded(filePath, lang, translationMeta) { - if (forceTranslation) { - return true; - } - - const relativePath = path.relative(path.join(DOC_BASE_PATH, 'docs'), filePath); - - // Check if file exists in meta and has hash for this language - if (translationMeta[relativePath] && translationMeta[relativePath][lang]) { - const storedHash = translationMeta[relativePath][lang]; - const currentHash = computeFileHash(filePath); - return storedHash !== currentHash; - } - - // No existing translation or hash for this language - return true; -} - -/** - * Split content into blocks for translation - * @param {string} content - Content to split - * @param {number} maxTokens - Maximum tokens per block - * @returns {string[]} - Array of content blocks - */ -function splitContentIntoBlocks(content, maxTokens = 10000) { - const lines = content.split('\n'); - const blocks = []; - let buffer = ''; - - for (const line of lines) { - if ((buffer + line).length > maxTokens) { - blocks.push(buffer); - buffer = line + '\n'; - } else { - buffer += line + '\n'; - } - } - - if (buffer) { - blocks.push(buffer); - } - - return blocks; -} - -/** - * Translate text using the Cloud Temple LLMaaS API - * @param {string} text - Text to translate - * @param {string} targetLang - Target language code - * @param {string} targetLangName - Target language name - * @returns {Promise} - Translated text - */ -async function translateTextBlock(text, targetLang, targetLangName) { - const maxRetries = 5; - let retryCount = 0; - - // Log translation request details - console.log(`Translation request details:`); - console.log(`- Model: ${TRANSLATION_MODEL}`); - console.log(`- Target language: ${targetLang} (${targetLangName})`); - console.log(`- Temperature: ${TRANSLATION_TEMPERATURE}`); - console.log(`- Top_p: ${TRANSLATION_TOP_P}`); - console.log(`- Text length: ${text.length} characters`); - - while (retryCount < maxRetries) { - try { - console.log(`Sending request to API...`); - - const systemPrompt = `You are a technical translator specialized in Cloud computing, IT systems, and software engineering. -Your task is to translate plain text from French to ${targetLangName} while strictly preserving the structure and formatting of the original Markdown file. -Follow these rules strictly: -1. Do not modify, translate, or interpret any HTML or Markdown elements, such as \`\`, \`
      \`, or \`#\` headers. -2. Do not alter the content inside code blocks delimited by: - - Triple backticks: \` \`\`\` \` - - Triple quotes: \`'''\` or \`"""\` - - Inline code: \` \`code\` \` -3. For Python code blocks specifically: - - Do NOT translate variable names, function names, class names, or any Python syntax - - Do NOT translate strings inside the code (even if they contain French text) - - Do NOT translate docstrings (text between triple quotes \`'''\` or \`"""\`) - - Only translate comments that start with \`#\` if they are standalone comment lines - - Preserve all indentation, spacing, and Python syntax exactly -4. Do not translate or modify text inside square brackets \`[]\`, parentheses \`()\`, or URLs. -5. Do not add or modify any new lines, spaces, or formatting outside of the original text. -6. If the content includes raw HTML, do not alter or translate it; leave it exactly as it appears. -7. For any programming language code blocks, preserve ALL syntax, variable names, function calls, and string literals unchanged. -Your sole task is to translate only the plain text content outside of code, Markdown, or HTML elements, while ensuring that all formatting and structural integrity are preserved. -The goal is to produce a translation that is technically accurate, professional, and maintains the original file's structure without any unintended changes.`; - - const response = await axios.post( - API_URL, // This will use the CLOUDTEMPLE_API_URL or its default - { - model: TRANSLATION_MODEL, - messages: [ - { role: 'system', content: systemPrompt }, - { role: 'user', content: text } - ], - temperature: TRANSLATION_TEMPERATURE, - top_p: TRANSLATION_TOP_P, - stream: false - // Consider adding max_tokens if appropriate for the API - }, - { - headers: { - 'Authorization': `Bearer ${API_KEY}`, - 'Content-Type': 'application/json' - } - } - ); - - // Log response details - console.log(`API response received:`); - console.log(`- Status code: ${response.status}`); - // For OpenAI compatible APIs, model and usage are typically directly in response.data - console.log(`- Model used: ${response.data.model || response.data.id || 'unknown'}`); // model or id depending on API - console.log(`- Tokens used: ${response.data.usage?.total_tokens || 'unknown'}`); - - if (response.status === 200 && response.data.choices?.length > 0) { - const translatedText = response.data.choices[0].message.content; - console.log(`Translation successful (${translatedText.length} characters)`); - return translatedText; - } else { - console.error(`API error: ${response.status} - ${JSON.stringify(response.data)}`); - } - } catch (error) { - console.error(`Error translating text (attempt ${retryCount + 1}/${maxRetries}):`, error.message); - - if (error.response) { - console.error(`Status: ${error.response.status}, Data:`, error.response.data); - } - } - - retryCount++; - console.log(`Retrying in 5 seconds (Attempt ${retryCount}/${maxRetries})...`); - await new Promise(resolve => setTimeout(resolve, 5000)); - } - - throw new Error(`Translation failed after ${maxRetries} attempts`); -} - -/** - * Translate content in blocks - * @param {string} content - Content to translate - * @param {string} targetLang - Target language code - * @param {string} targetLangName - Target language name - * @returns {Promise} - Translated content - */ -async function translateContent(content, targetLang, targetLangName) { - console.log(`Starting translation for ${targetLang} (${targetLangName}). Text size: ${content.length} characters.`); - - const blocks = splitContentIntoBlocks(content); - console.log(`Content divided into ${blocks.length} block(s) for translation.`); - - let translatedContent = ''; - - for (let i = 0; i < blocks.length; i++) { - console.log(`Translating block ${i + 1}/${blocks.length}...`); - try { - const translatedBlock = await translateTextBlock(blocks[i], targetLang, targetLangName); - translatedContent += translatedBlock + '\n'; - } catch (error) { - console.error(`Error translating block ${i + 1}:`, error.message); - stats.errors++; - // Continue with next block instead of failing the entire file - translatedContent += blocks[i] + '\n'; - } - } - - console.log(`Translation for ${targetLang} (${targetLangName}) completed.`); - return translatedContent.trim(); -} - -/** - * Save translated content to file - * @param {string} content - Translated content - * @param {string} sourceHash - Source file hash (stored in metadata only, not in the file) - * @param {string} sourcePath - Source file path - * @param {string} targetLang - Target language code - */ -async function saveTranslatedFile(content, sourceHash, sourcePath, targetLang) { - const relativePath = path.relative(path.join(DOC_BASE_PATH, 'docs'), sourcePath); - const targetPath = path.join( - DOC_BASE_PATH, - 'i18n', - targetLang, - 'docusaurus-plugin-content-docs', - 'current', - relativePath - ); - - // Create target directory if it doesn't exist - await fs.ensureDir(path.dirname(targetPath)); - - // Write translated content to file (without hash comment) - await fs.writeFile(targetPath, content, 'utf8'); - console.log(`Translated file saved: ${targetPath}`); -} - -/** - * Check if a file should be copied rather than translated - * @param {string} filePath - Path to the file - * @returns {boolean} - Whether the file should be copied - */ -function shouldCopyFile(filePath) { - const ext = path.extname(filePath).toLowerCase(); - // Only translate .md files, copy everything else - // .docx files, images, and other non-Markdown files are copied without translation - return ext !== '.md'; -} - -/** - * Check if two files are identical (for binary files) - * @param {string} sourceFile - Source file path - * @param {string} targetFile - Target file path - * @returns {Promise} - Whether the files are identical - */ -async function areFilesIdentical(sourceFile, targetFile) { - try { - // If target doesn't exist, they're not identical - if (!fs.existsSync(targetFile)) { - return false; - } - - // Compare file sizes first (quick check) - const sourceStats = await fs.stat(sourceFile); - const targetStats = await fs.stat(targetFile); - - if (sourceStats.size !== targetStats.size) { - return false; - } - - // For .docx files, just compare sizes (to avoid unnecessary binary comparisons) - if (path.extname(sourceFile).toLowerCase() === '.docx') { - console.log(`Files have identical size (${sourceStats.size} bytes), skipping content comparison for .docx`); - return true; - } - - // For other files, compare actual content - const sourceContent = await fs.readFile(sourceFile); - const targetContent = await fs.readFile(targetFile); - return sourceContent.equals(targetContent); - } catch (error) { - console.error(`Error comparing files: ${error.message}`); - return false; // If there's an error, assume files are different - } -} - -/** - * Copy non-Markdown file to target directory - * @param {string} sourcePath - Source file path - * @param {string} targetLang - Target language code - */ -async function copyNonMarkdownFile(sourcePath, targetLang) { - // Skip system files - if (path.basename(sourcePath).startsWith('.')) { - return; - } - - const relativePath = path.relative(path.join(DOC_BASE_PATH, 'docs'), sourcePath); - const targetPath = path.join( - DOC_BASE_PATH, - 'i18n', - targetLang, - 'docusaurus-plugin-content-docs', - 'current', - relativePath - ); - - // Create target directory if it doesn't exist - await fs.ensureDir(path.dirname(targetPath)); - - // Check if files are identical before copying - const identical = await areFilesIdentical(sourcePath, targetPath); - - if (identical) { - console.log(`Skipping copy of identical file: ${relativePath}`); - return; - } - - // Special handling for .docx files - if (path.extname(sourcePath).toLowerCase() === '.docx') { - console.log(`Copying .docx file: ${relativePath} (preserving file attributes)`); - - // For .docx files, use a more careful copy approach - try { - // On Unix-like systems - if (process.platform !== 'win32') { - const { execSync } = require('child_process'); - // On macOS, use -p instead of --preserve=all - if (process.platform === 'darwin') { - execSync(`cp -p "${sourcePath}" "${targetPath}"`); - } else { - // On Linux, use --preserve=all - execSync(`cp --preserve=all "${sourcePath}" "${targetPath}"`); - } - } else { - // On Windows, use fs.copyFileSync with COPYFILE_FICLONE flag - fs.copyFileSync(sourcePath, targetPath, fs.constants.COPYFILE_FICLONE); - } - console.log(`File copied with preserved attributes: ${targetPath}`); - } catch (error) { - console.error(`Error copying .docx file with preserved attributes: ${error.message}`); - // Fall back to regular copy - await fs.copy(sourcePath, targetPath); - console.log(`File copied with regular method: ${targetPath}`); - } - } else { - // Regular copy for other files - await fs.copy(sourcePath, targetPath); - console.log(`File copied: ${targetPath}`); - } - - stats.copied++; -} - -/** - * Check if a translation file exists for a given source file and language - * @param {string} sourcePath - Path to the source file - * @param {string} lang - Target language code - * @returns {boolean} - Whether the translation file exists - */ -function translationFileExists(sourcePath, lang) { - const relativePath = path.relative(path.join(DOC_BASE_PATH, 'docs'), sourcePath); - const targetPath = path.join( - DOC_BASE_PATH, - 'i18n', - lang, - 'docusaurus-plugin-content-docs', - 'current', - relativePath - ); - - return fs.existsSync(targetPath); -} - -// The extractHashFromTranslatedFile function has been removed since we no longer store hashes in the translated files - -/** - * Initialize translation metadata for existing files - * @param {string} filePath - Path to the source file - * @param {Object} translationMeta - Translation metadata - * @returns {Promise} - Updated translation metadata - */ -async function initializeFile(filePath, translationMeta) { - stats.processed++; - const relativePath = path.relative(path.join(DOC_BASE_PATH, 'docs'), filePath); - - // Initialize metadata entry if it doesn't exist - if (!translationMeta[relativePath]) { - translationMeta[relativePath] = {}; - } - - // Only process Markdown files for initialization - if (!shouldCopyFile(filePath)) { - const sourceHash = computeFileHash(filePath); - - // Process each target language - for (const [lang, langName] of Object.entries(LANGUAGES)) { - // Skip if specific language is requested and this isn't it - if (targetLang && lang !== targetLang) { - continue; - } - - const targetFilePath = path.join( - DOC_BASE_PATH, - 'i18n', - lang, - 'docusaurus-plugin-content-docs', - 'current', - relativePath - ); - - if (isDryRun) { - const sourceHash = computeFileHash(filePath); - - if (translationFileExists(filePath, lang)) { - console.log(`[DRY RUN] Would initialize metadata for: ${relativePath} in ${lang}`); - console.log(` Hash to be stored: ${sourceHash}`); - stats.skipped++; - } else if (translateMissing) { - console.log(`[DRY RUN] Would translate missing file: ${relativePath} to ${lang}`); - stats.translated++; - } else { - console.log(`[DRY RUN] Would skip missing translation: ${relativePath} for ${lang}`); - } - continue; - } - - if (translationFileExists(filePath, lang)) { - // Translation exists, record the hash - console.log(`Initializing metadata for: ${relativePath} in ${lang}`); - translationMeta[relativePath][lang] = sourceHash; - stats.skipped++; - } else if (translateMissing) { - // Translation doesn't exist but --translate-missing is set - try { - console.log(`Translating missing file: ${relativePath} to ${lang}`); - const sourceContent = await fs.readFile(filePath, 'utf8'); - const translatedContent = await translateContent(sourceContent, lang, langName); - await saveTranslatedFile(translatedContent, sourceHash, filePath, lang); - - // Update metadata - translationMeta[relativePath][lang] = sourceHash; - stats.translated++; - } catch (error) { - console.error(`Error processing ${relativePath} for ${lang}:`, error.message); - stats.errors++; - } - } else { - // Translation doesn't exist and --translate-missing is not set - console.log(`Skipping missing translation: ${relativePath} for ${lang}`); - } - } - } else { - // For non-Markdown files, just copy them if --translate-missing is set - if (translateMissing) { - for (const lang of Object.keys(LANGUAGES)) { - // Skip if specific language is requested and this isn't it - if (targetLang && lang !== targetLang) { - continue; - } - - if (isDryRun) { - console.log(`[DRY RUN] Would copy: ${relativePath} to ${lang}`); - stats.copied++; - continue; - } - - try { - await copyNonMarkdownFile(filePath, lang); - } catch (error) { - console.error(`Error copying ${relativePath} to ${lang}:`, error.message); - stats.errors++; - } - } - } - } - - return translationMeta; -} - -/** - * Process a single file for translation - * @param {string} filePath - Path to the file - * @param {Object} translationMeta - Translation metadata - * @returns {Promise} - Updated translation metadata - */ -async function processFile(filePath, translationMeta) { - stats.processed++; - const relativePath = path.relative(path.join(DOC_BASE_PATH, 'docs'), filePath); - - // Initialize metadata entry if it doesn't exist - if (!translationMeta[relativePath]) { - translationMeta[relativePath] = {}; - } - - // Process file based on type - if (!shouldCopyFile(filePath)) { - // Process Markdown file - const sourceHash = computeFileHash(filePath); - const sourceContent = await fs.readFile(filePath, 'utf8'); - - // Process each target language - for (const [lang, langName] of Object.entries(LANGUAGES)) { - // Skip if specific language is requested and this isn't it - if (targetLang && lang !== targetLang) { - continue; - } - - if (isDryRun) { - const needsTranslation = isTranslationNeeded(filePath, lang, translationMeta); - - // Get current hash for comparison - const currentHash = computeFileHash(filePath); - const storedHash = translationMeta[relativePath]?.[lang] || 'none'; - - if (needsTranslation) { - if (forceTranslation) { - console.log(`[DRY RUN] Would translate: ${relativePath} to ${lang} (--force flag used)`); - } else if (storedHash === 'none') { - console.log(`[DRY RUN] Would translate: ${relativePath} to ${lang} (new file or no previous translation)`); - } else { - console.log(`[DRY RUN] Would translate: ${relativePath} to ${lang} (content changed)`); - console.log(` Current hash: ${currentHash}`); - console.log(` Stored hash: ${storedHash}`); - } - // Update statistics even in dry run mode - stats.translated++; - } else { - console.log(`[DRY RUN] Would skip: ${relativePath} for ${lang} (up-to-date)`); - stats.skipped++; - } - continue; - } - - if (isTranslationNeeded(filePath, lang, translationMeta)) { - try { - console.log(`Translating: ${relativePath} to ${lang}`); - const translatedContent = await translateContent(sourceContent, lang, langName); - await saveTranslatedFile(translatedContent, sourceHash, filePath, lang); - - // Update metadata - translationMeta[relativePath][lang] = sourceHash; - stats.translated++; - } catch (error) { - console.error(`Error processing ${relativePath} for ${lang}:`, error.message); - stats.errors++; - } - } else { - console.log(`Skipping: ${relativePath} for ${lang} (up-to-date)`); - stats.skipped++; - } - } - } else { - // Copy non-Markdown file - for (const lang of Object.keys(LANGUAGES)) { - // Skip if specific language is requested and this isn't it - if (targetLang && lang !== targetLang) { - continue; - } - - if (isDryRun) { - console.log(`[DRY RUN] Would copy: ${relativePath} to ${lang}`); - stats.copied++; - continue; - } - - try { - await copyNonMarkdownFile(filePath, lang); - } catch (error) { - console.error(`Error copying ${relativePath} to ${lang}:`, error.message); - stats.errors++; - } - } - } - - return translationMeta; -} - -/** - * Get all files in a directory recursively - * @param {string} dir - Directory to scan - * @returns {Promise} - Array of file paths - */ -async function getFiles(dir) { - const dirents = await fs.readdir(dir, { withFileTypes: true }); - const files = await Promise.all(dirents.map((dirent) => { - const res = path.resolve(dir, dirent.name); - return dirent.isDirectory() ? getFiles(res) : res; - })); - return Array.prototype.concat(...files); -} - -/** - * Main function - */ -async function main() { - console.log('CloudTemple Documentation Translation Script'); - console.log('==========================================='); - - // Validate paths - const docsDir = path.join(DOC_BASE_PATH, 'docs'); - const i18nDir = path.join(DOC_BASE_PATH, 'i18n'); - const metaFilePath = path.join(DOC_BASE_PATH, 'scripts', 'translation-meta.json'); - - if (!fs.existsSync(docsDir)) { - console.error(`Error: Source directory '${docsDir}' does not exist`); - process.exit(1); - } - - // Create i18n directory if it doesn't exist - await fs.ensureDir(i18nDir); - - // Load translation metadata - let translationMeta = {}; - if (fs.existsSync(metaFilePath)) { - try { - translationMeta = JSON.parse(await fs.readFile(metaFilePath, 'utf8')); - console.log('Loaded existing translation metadata'); - } catch (error) { - console.error('Error loading translation metadata:', error.message); - console.log('Starting with empty metadata'); - } - } else { - console.log('No existing translation metadata found, creating new file'); - } - - // Get all files in docs directory - const files = await getFiles(docsDir); - console.log(`Found ${files.length} files in '${docsDir}'`); - - if (isDryRun) { - console.log('DRY RUN MODE - No files will be modified'); - } - - // Determine the processing function based on the mode - const processFunction = isInitMode ? initializeFile : processFile; - - if (isInitMode) { - console.log('INITIALIZATION MODE - Creating hashes for existing files'); - if (translateMissing) { - console.log('Will also translate missing files'); - } else { - console.log('Skipping missing translations (use --translate-missing to translate them)'); - } - } else { - console.log('TRANSLATION MODE - Processing files for translation.'); - } - - console.log(`Processing files with up to ${CONCURRENT_TRANSLATIONS} concurrent operations.`); - - // Process files in batches - for (let i = 0; i < files.length; i += CONCURRENT_TRANSLATIONS) { - const batch = files.slice(i, i + CONCURRENT_TRANSLATIONS); - console.log(`Processing batch of ${batch.length} files (Files ${i + 1} to ${i + batch.length} of ${files.length})...`); - - const promises = batch.map(file => - processFunction(file, translationMeta) - .catch(err => { - console.error(`Error processing file ${file} in batch:`, err.message); - // stats.errors might be incremented inside processFunction, - // but good to log here as well. - }) - ); - - const results = await Promise.allSettled(promises); - - results.forEach((result, index) => { - if (result.status === 'rejected') { - // Log additional error context if the promise was rejected. - // processFunction itself should handle incrementing stats.errors. - console.error(`Batch processing encountered an error for file ${batch[index]}: ${result.reason}`); - } - }); - console.log(`Batch (Files ${i + 1} to ${i + batch.length}) completed.`); - } - - // Save updated translation metadata - if (!isDryRun) { - await fs.writeFile(metaFilePath, JSON.stringify(translationMeta, null, 2), 'utf8'); - console.log(`Translation metadata saved to ${metaFilePath}`); - } - - // Print statistics - console.log('\nTranslation Statistics:'); - console.log(`- Files processed: ${stats.processed}`); - console.log(`- Files translated: ${stats.translated}`); - console.log(`- Files skipped (up-to-date): ${stats.skipped}`); - console.log(`- Files copied (non-Markdown): ${stats.copied}`); - console.log(`- Errors encountered: ${stats.errors}`); - - if (stats.errors > 0) { - console.log('\nWarning: Some errors occurred during translation. Check the logs above for details.'); - process.exit(1); - } - - console.log('\nTranslation completed successfully!'); -} - -// Run the script -main().catch(error => { - console.error('Unhandled error:', error); - process.exit(1); -}); diff --git a/scripts/README.md b/scripts/README.md index f586bc57..07b298ad 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -220,63 +220,22 @@ Hash actuel : 99033f972d83789a35fb75077e53e170df0b14b9fd465ecdbd691bdacdca2b74 --- -### 🌐 `oldies/translate.js` (Legacy - Archivé) -**Script de traduction multilingue avec Cloud Temple LLMaaS** +### 📋 `extract_changelog.py` +**Générateur de changelog produits multi-langues** -> ⚠️ **Archivé** : Script déplacé dans `oldies/`. Utilisez `translate_py/translate.py` pour toutes les nouvelles traductions. - -Script Node.js legacy pour la traduction automatique de la documentation Markdown (fichiers `.md`) du français vers d'autres langues en utilisant l'API Cloud Temple LLMaaS. **Ce script est désormais archivé et remplacé par le système Python moderne.** - -#### Configuration Requise - -Avant d'utiliser le script, vous devez configurer vos identifiants d'API et d'autres paramètres via un fichier `.env` placé à la racine de votre projet Docusaurus. Un fichier d'exemple `scripts/.env.example` est fourni. Copiez-le en `.env` à la racine et modifiez les valeurs : - -```bash -cp scripts/.env.example .env -# Ensuite, éditez .env avec vos informations -``` - -**Variables d'environnement principales :** -- `CLOUDTEMPLE_API_KEY`: (Obligatoire) Votre clé API pour le service Cloud Temple LLMaaS. -- `CLOUDTEMPLE_API_URL`: (Optionnel) URL de l'API LLMaaS. Par défaut : `https://api.ai.cloud-temple.com/v1/chat/completions`. -- `TRANSLATION_MODEL`: (Optionnel) Modèle LLM à utiliser. Par défaut : `Qwen/Qwen3-30B-A3B-FP8`. -- `CONCURRENT_TRANSLATIONS`: (Optionnel) Nombre de fichiers à traiter en parallèle. Par défaut : `4`. -- `TRANSLATION_TEMPERATURE`: (Optionnel) Température pour la génération. Par défaut : `1`. -- `TRANSLATION_TOP_P`: (Optionnel) Top_p pour la génération (nucleus sampling). Par défaut : `1`. -- `DOC_BASE_PATH`: (Optionnel) Chemin de base de la documentation si le script n'est pas lancé depuis la racine. Par défaut : `.` +Extrait les nouvelles fonctionnalités depuis `maj.js` et génère les changelogs dans toutes les langues. Met automatiquement à jour les hash dans `translation-meta.json` après génération. #### Utilisation - -Exécutez le script depuis la racine de votre projet Docusaurus : ```bash -node scripts/translate.js [options] +python scripts/extract_changelog.py ``` -#### Options de Ligne de Commande -- `--dry-run`: Simule l'exécution sans modifier de fichiers ni appeler l'API. Affiche ce qui serait fait. -- `--force`: Force la retraduction de tous les fichiers, même s'ils semblent à jour. -- `--init`: Mode initialisation. Calcule et stocke les hachages des fichiers sources français existants dans `translation-meta.json` sans traduire. Si des traductions existent déjà, leur hachage est associé au source français actuel. - - `--init --translate-missing`: En mode initialisation, traduit également les fichiers pour lesquels une traduction n'existe pas encore. -- `--translate-missing`: En mode de traduction normal (pas `--init`), traduit uniquement les fichiers pour lesquels une traduction n'existe pas encore, sans vérifier les hachages des traductions existantes. -- `--lang=`: Cible une langue spécifique pour la traduction (ex: `--lang=en`). `` peut être `en`, `de`, `es`, `it`. - -#### Langues Supportées -- 🇫🇷 **Français** (langue source, depuis le dossier `docs/`) -- 🇬🇧 **Anglais** (code: `en`) -- 🇩🇪 **Allemand** (code: `de`) -- 🇪🇸 **Espagnol** (code: `es`) -- 🇮🇹 **Italien** (code: `it`) - -Les traductions sont placées dans `i18n//docusaurus-plugin-content-docs/current/`. - -#### Fonctionnement -1. Le script scanne le dossier `docs/`. -2. Pour chaque fichier `.md`, il calcule un hachage de son contenu. -3. Il compare ce hachage avec celui stocké dans `scripts/translation-meta.json` pour chaque langue cible. -4. Si un fichier a été modifié (hachage différent) ou si la traduction est manquante (et que l'option appropriée est utilisée), le contenu est envoyé à l'API Cloud Temple LLMaaS pour traduction. -5. La traduction est sauvegardée dans le dossier `i18n/` correspondant. -6. Le nouveau hachage du fichier source est enregistré dans `translation-meta.json`. -7. Les fichiers non `.md` sont copiés dans les dossiers `i18n/` respectifs s'ils n'existent pas ou s'ils sont différents. +#### Source et Sorties +- **Entrée** : `maj.js` (racine du projet) +- **Sorties** : + - `docs/changelog_produits.md` (FR — source) + - `i18n/{en,de,es,it}/docusaurus-plugin-content-docs/current/changelog_produits.md` +- **Hash** : Mis à jour automatiquement dans `translation-meta.json` ✅ --- @@ -297,22 +256,21 @@ Les scripts sont intégrés dans `package.json` pour faciliter l'utilisation : ``` scripts/ -├── README.md # 📋 Ce fichier -├── generate_models_doc.py # 🚀 Générateur LLMaaS -└── translate_py/ # 🐍 Système de traduction moderne - ├── translate.py # 🚀 Script principal - ├── translation-meta.json # 🔍 Métadonnées et hash SHA-256 - ├── config.py # ⚙️ Configuration - ├── models.py # 📋 Modèles de données - ├── ui.py # 🎨 Interface utilisateur - ├── translator.py # 🌐 Moteur de traduction - ├── file_manager.py # 📁 Gestion fichiers - ├── requirements.txt # 📦 Dépendances - ├── .env.example # 📝 Template config - └── .env # 🔒 Configuration locale - -oldies/ -└── translate.js # 🌐 Script Node.js archivé +├── README.md # 📋 Ce fichier +├── extract_changelog.py # 📋 Générateur changelog multi-langues +├── generate_models_doc/ +│ └── generate_models_doc.py # 🚀 Générateur doc LLMaaS +└── translate_py/ # 🐍 Système de traduction + ├── translate.py # 🚀 Script principal + ├── translation-meta.json # 🔍 Métadonnées et hash SHA-256 + ├── config.py # ⚙️ Configuration + ├── models.py # 📋 Modèles de données + ├── ui.py # 🎨 Interface utilisateur + ├── translator.py # 🌐 Moteur de traduction + ├── file_manager.py # 📁 Gestion fichiers + ├── requirements.txt # 📦 Dépendances + ├── .env.example # 📝 Template config + └── .env # 🔒 Configuration locale ``` ## 🎯 Workflow de Documentation diff --git a/scripts/extract_changelog.py b/scripts/extract_changelog.py index 883cd7be..9033cf9a 100644 --- a/scripts/extract_changelog.py +++ b/scripts/extract_changelog.py @@ -6,14 +6,21 @@ - Sortie : markdown """ +import hashlib +import json import re import sys +from datetime import datetime from pathlib import Path ROOT = Path(__file__).parent.parent INPUT = ROOT / "maj.js" I18N = ROOT / "i18n" DOCS = ROOT / "docs" +META = ROOT / "scripts" / "translate_py" / "translation-meta.json" + +# Langues cibles (hors FR qui est la source) +TARGET_LANGUAGES = ["en", "de", "es", "it"] # (lang, output_path, title_fr, title_h1, intro) OUTPUTS = [ @@ -255,6 +262,57 @@ def render_markdown( return "\n".join(lines) +def _compute_file_hash(file_path: Path) -> str: + """Calcule le hash SHA-256 d'un fichier.""" + sha256 = hashlib.sha256() + with open(file_path, "rb") as f: + for chunk in iter(lambda: f.read(4096), b""): + sha256.update(chunk) + return sha256.hexdigest() + + +def _update_translation_meta(source_path: Path) -> None: + """ + Met à jour translation-meta.json avec le hash actuel du fichier source FR. + + Pour chaque langue cible dont le fichier traduit existe dans i18n/, + enregistre le hash du fichier source. Cela évite que translate.py + ne considère ces fichiers comme « désynchronisés ». + """ + if not META.exists(): + print(" ⚠️ translation-meta.json introuvable, hash non mis à jour") + return + + with open(META, "r", encoding="utf-8") as f: + meta = json.load(f) + + files = meta.setdefault("files", {}) + rel_path = str(source_path.relative_to(DOCS)) + source_hash = _compute_file_hash(source_path) + + entry = files.setdefault(rel_path, {}) + updated_langs = [] + + for lang in TARGET_LANGUAGES: + target = ( + I18N / lang / "docusaurus-plugin-content-docs" / "current" / rel_path + ) + if target.exists(): + entry[lang] = source_hash + updated_langs.append(lang) + + if updated_langs: + meta["last_update"] = datetime.now().isoformat() + with open(META, "w", encoding="utf-8") as f: + json.dump(meta, f, indent=2, ensure_ascii=False) + f.write("\n") + print(f" ✅ Hash mis à jour dans translation-meta.json " + f"[{', '.join(updated_langs)}]") + else: + print(f" ⚠️ Aucun fichier traduit trouvé pour {rel_path}, " + f"hash non enregistré") + + def main(): if not INPUT.exists(): print(f"Fichier introuvable : {INPUT}", file=sys.stderr) @@ -263,6 +321,8 @@ def main(): print(f"Lecture de {INPUT} …") content = INPUT.read_text(encoding="utf-8") + source_path = None # chemin du fichier FR (source) + for lang, output_path, title, title_h1, intro in OUTPUTS: # DE/ES/IT → fallback sur EN (maj.js n'a que FR+EN) extract_lang = lang if lang in ("fr", "en") else "en" @@ -273,6 +333,15 @@ def main(): output_path.write_text(md, encoding="utf-8") print(f" [{lang}] {len(versions)} versions → {output_path.relative_to(ROOT)}") + # Mémoriser le chemin du fichier source FR + if lang == "fr": + source_path = output_path + + # Mise à jour du hash dans translation-meta.json + if source_path and source_path.exists(): + print("\nMise à jour des hash de traduction …") + _update_translation_meta(source_path) + if __name__ == "__main__": main() diff --git a/scripts/translate_py/translation-meta.json b/scripts/translate_py/translation-meta.json index 996ba684..6fdce144 100644 --- a/scripts/translate_py/translation-meta.json +++ b/scripts/translate_py/translation-meta.json @@ -1,100 +1,148 @@ { "files": { + "additional_content/concepts_az.md": { + "en": "5cbd7f8c41aa565196086deba38a32582f7f7e21efa9b3023b398b42342f75ed", + "de": "5cbd7f8c41aa565196086deba38a32582f7f7e21efa9b3023b398b42342f75ed", + "es": "5cbd7f8c41aa565196086deba38a32582f7f7e21efa9b3023b398b42342f75ed", + "it": "5cbd7f8c41aa565196086deba38a32582f7f7e21efa9b3023b398b42342f75ed" + }, "additional_content/concepts_regional.md": { - "en": "8fecc92103d25a188e8459d62a58b26cfcccc25f7f48bb928e80eb52e43f9420", - "de": "8fecc92103d25a188e8459d62a58b26cfcccc25f7f48bb928e80eb52e43f9420", - "es": "8fecc92103d25a188e8459d62a58b26cfcccc25f7f48bb928e80eb52e43f9420", - "it": "8fecc92103d25a188e8459d62a58b26cfcccc25f7f48bb928e80eb52e43f9420" + "en": "3ba875920a8433570039e54bcda034c46d88b0a9205b52ff15dba36557ad8093", + "de": "3ba875920a8433570039e54bcda034c46d88b0a9205b52ff15dba36557ad8093", + "es": "3ba875920a8433570039e54bcda034c46d88b0a9205b52ff15dba36557ad8093", + "it": "3ba875920a8433570039e54bcda034c46d88b0a9205b52ff15dba36557ad8093" }, - "console/api.md": { - "en": "4b82c64e25a2a225e6562957c986da6b79864851b16cdc0ceabba67e40eb8792", - "de": "4b82c64e25a2a225e6562957c986da6b79864851b16cdc0ceabba67e40eb8792", - "es": "4b82c64e25a2a225e6562957c986da6b79864851b16cdc0ceabba67e40eb8792", - "it": "4b82c64e25a2a225e6562957c986da6b79864851b16cdc0ceabba67e40eb8792" + "bastion/bastion.md": { + "en": "fabad2fbe37852910c499fa0c298469c439761d1aef29993b86eebff591ac6be", + "de": "fabad2fbe37852910c499fa0c298469c439761d1aef29993b86eebff591ac6be", + "es": "fabad2fbe37852910c499fa0c298469c439761d1aef29993b86eebff591ac6be", + "it": "fabad2fbe37852910c499fa0c298469c439761d1aef29993b86eebff591ac6be" }, - "bastion/quickstart.md": { - "en": "ae0bd64db9fdda8016fc6be837e7704aa58b152e774943c03b788f77b9097f32", - "de": "ae0bd64db9fdda8016fc6be837e7704aa58b152e774943c03b788f77b9097f32", - "es": "ae0bd64db9fdda8016fc6be837e7704aa58b152e774943c03b788f77b9097f32", - "it": "ae0bd64db9fdda8016fc6be837e7704aa58b152e774943c03b788f77b9097f32" + "bastion/concepts.md": { + "en": "0ad6e40408ca79cefb845a9d7e1c39808b6cff27488d8fed882313f8ebe6d3ec", + "de": "0ad6e40408ca79cefb845a9d7e1c39808b6cff27488d8fed882313f8ebe6d3ec", + "es": "0ad6e40408ca79cefb845a9d7e1c39808b6cff27488d8fed882313f8ebe6d3ec", + "it": "0ad6e40408ca79cefb845a9d7e1c39808b6cff27488d8fed882313f8ebe6d3ec" }, - "additional_content/concepts_az.md": { - "en": "546af793df996ab80fbcfff8c230385cc8dd135a39cfc569e2429e954221242a", - "de": "546af793df996ab80fbcfff8c230385cc8dd135a39cfc569e2429e954221242a", - "es": "546af793df996ab80fbcfff8c230385cc8dd135a39cfc569e2429e954221242a", - "it": "546af793df996ab80fbcfff8c230385cc8dd135a39cfc569e2429e954221242a" + "bastion/quickstart.md": { + "en": "6f9223dba72fc82cfbc5f2d734b22eb8876d05abbf8c1c7e045498fc9a6745ff", + "de": "6f9223dba72fc82cfbc5f2d734b22eb8876d05abbf8c1c7e045498fc9a6745ff", + "es": "6f9223dba72fc82cfbc5f2d734b22eb8876d05abbf8c1c7e045498fc9a6745ff", + "it": "6f9223dba72fc82cfbc5f2d734b22eb8876d05abbf8c1c7e045498fc9a6745ff" }, - "bastion/bastion.md": { - "en": "3d93307da1382658d2de7d9852e3b69298fa901574dd334adc542ad8a75c37c8", - "de": "3d93307da1382658d2de7d9852e3b69298fa901574dd334adc542ad8a75c37c8", - "es": "3d93307da1382658d2de7d9852e3b69298fa901574dd334adc542ad8a75c37c8", - "it": "3d93307da1382658d2de7d9852e3b69298fa901574dd334adc542ad8a75c37c8" + "bastion/tutorials.md": { + "en": "efab3a71c16c98efecf08fdd9ce316df25d4990992dba6dc0c2ed94d418e736e", + "de": "efab3a71c16c98efecf08fdd9ce316df25d4990992dba6dc0c2ed94d418e736e", + "es": "efab3a71c16c98efecf08fdd9ce316df25d4990992dba6dc0c2ed94d418e736e", + "it": "efab3a71c16c98efecf08fdd9ce316df25d4990992dba6dc0c2ed94d418e736e" }, - "console/console.md": { - "en": "ee2e6389e19aa00db3d25dacd927b3c0348b81864db4680c23c9a88d4cb5edcb", - "de": "ee2e6389e19aa00db3d25dacd927b3c0348b81864db4680c23c9a88d4cb5edcb", - "es": "ee2e6389e19aa00db3d25dacd927b3c0348b81864db4680c23c9a88d4cb5edcb", - "it": "ee2e6389e19aa00db3d25dacd927b3c0348b81864db4680c23c9a88d4cb5edcb" + "changelog.md": { + "en": "6b284748931f088016bf25e781f554f2799fe0978a5fa4ba72d078fe299c20b8", + "de": "6b284748931f088016bf25e781f554f2799fe0978a5fa4ba72d078fe299c20b8", + "es": "6b284748931f088016bf25e781f554f2799fe0978a5fa4ba72d078fe299c20b8", + "it": "6b284748931f088016bf25e781f554f2799fe0978a5fa4ba72d078fe299c20b8" + }, + "changelog_produits.md": { + "en": "0639e259b6d1d05d0b13fabbd35ad14d5bfe4b4e24f8ce7323ecd024ac5b896b", + "de": "0639e259b6d1d05d0b13fabbd35ad14d5bfe4b4e24f8ce7323ecd024ac5b896b", + "es": "0639e259b6d1d05d0b13fabbd35ad14d5bfe4b4e24f8ce7323ecd024ac5b896b", + "it": "0639e259b6d1d05d0b13fabbd35ad14d5bfe4b4e24f8ce7323ecd024ac5b896b" + }, + "compute_overview.md": { + "en": "5e40ef26288ad3029a528496323d15b2bcc534408f885b47eaf79cd00336db01", + "de": "5e40ef26288ad3029a528496323d15b2bcc534408f885b47eaf79cd00336db01", + "es": "5e40ef26288ad3029a528496323d15b2bcc534408f885b47eaf79cd00336db01", + "it": "5e40ef26288ad3029a528496323d15b2bcc534408f885b47eaf79cd00336db01" }, - "bastion/concepts.md": { - "en": "6417871668f6d31f1aeec22a2a31035528ffda64c8e3e343064cc3f87ac37411", - "de": "6417871668f6d31f1aeec22a2a31035528ffda64c8e3e343064cc3f87ac37411", - "es": "6417871668f6d31f1aeec22a2a31035528ffda64c8e3e343064cc3f87ac37411", - "it": "6417871668f6d31f1aeec22a2a31035528ffda64c8e3e343064cc3f87ac37411" + "console/api.md": { + "en": "87953a72824a374ac202485fa4653090bef714a8d6810133d7d91c8830dc3bd9", + "de": "87953a72824a374ac202485fa4653090bef714a8d6810133d7d91c8830dc3bd9", + "es": "87953a72824a374ac202485fa4653090bef714a8d6810133d7d91c8830dc3bd9", + "it": "87953a72824a374ac202485fa4653090bef714a8d6810133d7d91c8830dc3bd9" }, - "bastion/tutorials.md": { - "en": "5f6e82a14b738f303c31b2d969744914228753a6b3a927f6580707ea75e22cce", - "de": "5f6e82a14b738f303c31b2d969744914228753a6b3a927f6580707ea75e22cce", - "es": "5f6e82a14b738f303c31b2d969744914228753a6b3a927f6580707ea75e22cce", - "it": "5f6e82a14b738f303c31b2d969744914228753a6b3a927f6580707ea75e22cce" + "console/billing/concepts.md": { + "en": "6a345d03420f2bdc8266c4eab70ac6c0aa8be39476a8550a7abe861759d763c4", + "de": "6a345d03420f2bdc8266c4eab70ac6c0aa8be39476a8550a7abe861759d763c4", + "es": "6a345d03420f2bdc8266c4eab70ac6c0aa8be39476a8550a7abe861759d763c4", + "it": "6a345d03420f2bdc8266c4eab70ac6c0aa8be39476a8550a7abe861759d763c4" }, - "console/iam/tutorials/sso_aad.md": { - "en": "6d8099bdca3bc2a5bc058639c4e6a6898ad7369ec81ce61cbc80dbc5dffd977c", - "de": "6d8099bdca3bc2a5bc058639c4e6a6898ad7369ec81ce61cbc80dbc5dffd977c", - "es": "6d8099bdca3bc2a5bc058639c4e6a6898ad7369ec81ce61cbc80dbc5dffd977c", - "it": "6d8099bdca3bc2a5bc058639c4e6a6898ad7369ec81ce61cbc80dbc5dffd977c" + "console/console.md": { + "en": "841ad2248c399df04592fd931ae946f3640e3c21d04528a1cdf967d020abed4a", + "de": "841ad2248c399df04592fd931ae946f3640e3c21d04528a1cdf967d020abed4a", + "es": "841ad2248c399df04592fd931ae946f3640e3c21d04528a1cdf967d020abed4a", + "it": "841ad2248c399df04592fd931ae946f3640e3c21d04528a1cdf967d020abed4a" }, - "console/metrics/concepts.md": { - "en": "6c181ddcfd18e568a9edecddb592e03eb2df9712fd1ea1b940283c662e784746", - "de": "6c181ddcfd18e568a9edecddb592e03eb2df9712fd1ea1b940283c662e784746", - "es": "6c181ddcfd18e568a9edecddb592e03eb2df9712fd1ea1b940283c662e784746", - "it": "6c181ddcfd18e568a9edecddb592e03eb2df9712fd1ea1b940283c662e784746" + "console/console_quickstart.md": { + "en": "c71708ad3cfbc3f9ef816c9aa2f2cfe0e7b36c964f4bbd0cf368bd1b8b9c7ce5", + "de": "c71708ad3cfbc3f9ef816c9aa2f2cfe0e7b36c964f4bbd0cf368bd1b8b9c7ce5", + "es": "c71708ad3cfbc3f9ef816c9aa2f2cfe0e7b36c964f4bbd0cf368bd1b8b9c7ce5", + "it": "c71708ad3cfbc3f9ef816c9aa2f2cfe0e7b36c964f4bbd0cf368bd1b8b9c7ce5" }, "console/iam/concepts.md": { - "en": "3253c13c4f8a57dc22873a2c3256c568cd8ecef51135f51efcd2d5a93df037e8", - "de": "3253c13c4f8a57dc22873a2c3256c568cd8ecef51135f51efcd2d5a93df037e8", - "es": "3253c13c4f8a57dc22873a2c3256c568cd8ecef51135f51efcd2d5a93df037e8", - "it": "3253c13c4f8a57dc22873a2c3256c568cd8ecef51135f51efcd2d5a93df037e8" + "en": "31d1de239eb5fd87b60c60caab8da4781db26fb73b626c21ded17a494841559c", + "de": "31d1de239eb5fd87b60c60caab8da4781db26fb73b626c21ded17a494841559c", + "es": "31d1de239eb5fd87b60c60caab8da4781db26fb73b626c21ded17a494841559c", + "it": "31d1de239eb5fd87b60c60caab8da4781db26fb73b626c21ded17a494841559c" }, - "console/iam/tutorials/sso_adfs.md": { - "en": "64f60337294b1a8dabfc05bf13ec4296771e4398920cf050a190198874836c5f", - "de": "64f60337294b1a8dabfc05bf13ec4296771e4398920cf050a190198874836c5f", - "es": "64f60337294b1a8dabfc05bf13ec4296771e4398920cf050a190198874836c5f", - "it": "64f60337294b1a8dabfc05bf13ec4296771e4398920cf050a190198874836c5f" + "console/iam/iam.md": { + "en": "484e52649550098662ce7e64419dd94d10c20b10e5e2d2bee7e987d53841c949", + "de": "484e52649550098662ce7e64419dd94d10c20b10e5e2d2bee7e987d53841c949", + "es": "484e52649550098662ce7e64419dd94d10c20b10e5e2d2bee7e987d53841c949", + "it": "484e52649550098662ce7e64419dd94d10c20b10e5e2d2bee7e987d53841c949" }, "console/iam/quickstart.md": { - "en": "582fc58d1376cb036ea84b2dbe1cd2c90fd4b61cfd4a7abcf1ba329bf121cb14", - "de": "582fc58d1376cb036ea84b2dbe1cd2c90fd4b61cfd4a7abcf1ba329bf121cb14", - "es": "582fc58d1376cb036ea84b2dbe1cd2c90fd4b61cfd4a7abcf1ba329bf121cb14", - "it": "582fc58d1376cb036ea84b2dbe1cd2c90fd4b61cfd4a7abcf1ba329bf121cb14" + "en": "3b3a44b3e281fa129a58463c3dae6336fd8ee4809d2ba091f693f65850739434", + "de": "3b3a44b3e281fa129a58463c3dae6336fd8ee4809d2ba091f693f65850739434", + "es": "3b3a44b3e281fa129a58463c3dae6336fd8ee4809d2ba091f693f65850739434", + "it": "3b3a44b3e281fa129a58463c3dae6336fd8ee4809d2ba091f693f65850739434" + }, + "console/iam/tutorials/sso_adfs.md": { + "en": "606b1e74af281a97dc6c45adc4a7e5fcf461776e0cdf2ea86945b3ceabe9d7d0", + "de": "606b1e74af281a97dc6c45adc4a7e5fcf461776e0cdf2ea86945b3ceabe9d7d0", + "es": "606b1e74af281a97dc6c45adc4a7e5fcf461776e0cdf2ea86945b3ceabe9d7d0", + "it": "606b1e74af281a97dc6c45adc4a7e5fcf461776e0cdf2ea86945b3ceabe9d7d0" + }, + "console/iam/tutorials/sso_azuread.md": { + "en": "5f7663bd054a82964ede9dfe11dc45e6a2a79624c7b924bafce3f9fd91195fec", + "de": "5f7663bd054a82964ede9dfe11dc45e6a2a79624c7b924bafce3f9fd91195fec", + "es": "5f7663bd054a82964ede9dfe11dc45e6a2a79624c7b924bafce3f9fd91195fec", + "it": "5f7663bd054a82964ede9dfe11dc45e6a2a79624c7b924bafce3f9fd91195fec" + }, + "console/iam/tutorials/sso_intune.md": { + "en": "9b7e3d2022ea301cd572ca7cb090622770c108202728c822b73a25f27f90b476", + "de": "9b7e3d2022ea301cd572ca7cb090622770c108202728c822b73a25f27f90b476", + "es": "9b7e3d2022ea301cd572ca7cb090622770c108202728c822b73a25f27f90b476", + "it": "9b7e3d2022ea301cd572ca7cb090622770c108202728c822b73a25f27f90b476" }, "console/iam/tutorials/sso_jumpcloud.md": { - "en": "f6c34c956caa7b687b061f3b43c74b43831a7fab5e6bb5068f04b87e3d16bdc3", - "de": "f6c34c956caa7b687b061f3b43c74b43831a7fab5e6bb5068f04b87e3d16bdc3", - "es": "f6c34c956caa7b687b061f3b43c74b43831a7fab5e6bb5068f04b87e3d16bdc3", - "it": "f6c34c956caa7b687b061f3b43c74b43831a7fab5e6bb5068f04b87e3d16bdc3" + "en": "783b771eb72c7c44910ce0cb4dd0b2d7f7d09fc98461c5809b1b641aae57f77d", + "de": "783b771eb72c7c44910ce0cb4dd0b2d7f7d09fc98461c5809b1b641aae57f77d", + "es": "783b771eb72c7c44910ce0cb4dd0b2d7f7d09fc98461c5809b1b641aae57f77d", + "it": "783b771eb72c7c44910ce0cb4dd0b2d7f7d09fc98461c5809b1b641aae57f77d" }, - "console/iam/iam.md": { - "en": "b1ed2392738fc331bbc9f5b479dbabda6eb29e48999d92ea94754fe4a292d9dc", - "de": "b1ed2392738fc331bbc9f5b479dbabda6eb29e48999d92ea94754fe4a292d9dc", - "es": "b1ed2392738fc331bbc9f5b479dbabda6eb29e48999d92ea94754fe4a292d9dc", - "it": "b1ed2392738fc331bbc9f5b479dbabda6eb29e48999d92ea94754fe4a292d9dc" + "console/iam/tutorials/sso_okta.md": { + "en": "02238beed3b16d91e70a218c6efce8c383e11511682313d3f5beea79a8344f12", + "de": "02238beed3b16d91e70a218c6efce8c383e11511682313d3f5beea79a8344f12", + "es": "02238beed3b16d91e70a218c6efce8c383e11511682313d3f5beea79a8344f12", + "it": "02238beed3b16d91e70a218c6efce8c383e11511682313d3f5beea79a8344f12" }, - "console/console_quickstart.md": { - "en": "c7e72946470ba1c1ce4083f33453699ac03667be96500b0d523c0ce2dfede135", - "de": "c7e72946470ba1c1ce4083f33453699ac03667be96500b0d523c0ce2dfede135", - "es": "c7e72946470ba1c1ce4083f33453699ac03667be96500b0d523c0ce2dfede135", - "it": "c7e72946470ba1c1ce4083f33453699ac03667be96500b0d523c0ce2dfede135" + "console/metrics/concepts.md": { + "en": "2f2c677773cad529a9613b4e9cc4b76ee36074b60020a5140b97c990537e9102", + "de": "2f2c677773cad529a9613b4e9cc4b76ee36074b60020a5140b97c990537e9102", + "es": "2f2c677773cad529a9613b4e9cc4b76ee36074b60020a5140b97c990537e9102", + "it": "2f2c677773cad529a9613b4e9cc4b76ee36074b60020a5140b97c990537e9102" + }, + "console/orders.md": { + "en": "7c75b25f2641edf9a70e72221b466dc55146c9ab9432198bc797f5d027356a86", + "de": "7c75b25f2641edf9a70e72221b466dc55146c9ab9432198bc797f5d027356a86", + "es": "7c75b25f2641edf9a70e72221b466dc55146c9ab9432198bc797f5d027356a86", + "it": "7c75b25f2641edf9a70e72221b466dc55146c9ab9432198bc797f5d027356a86" + }, + "console/security/security_alarms.md": { + "en": "7215869ab5c44a1958611f8d11855494095dd9974a774aa5dcc684cdbf50db90", + "de": "7215869ab5c44a1958611f8d11855494095dd9974a774aa5dcc684cdbf50db90", + "es": "7215869ab5c44a1958611f8d11855494095dd9974a774aa5dcc684cdbf50db90", + "it": "7215869ab5c44a1958611f8d11855494095dd9974a774aa5dcc684cdbf50db90" }, "console/security/security_recommendations.md": { "en": "ead16db4726fd1c148c32b3189f09fe3b4e289bf13f6819b91f9e9bfe7cd9982", @@ -102,973 +150,799 @@ "es": "ead16db4726fd1c148c32b3189f09fe3b4e289bf13f6819b91f9e9bfe7cd9982", "it": "ead16db4726fd1c148c32b3189f09fe3b4e289bf13f6819b91f9e9bfe7cd9982" }, - "contractual/dpa.md": { - "en": "59b047c5604017f6d8db80f68f39657f2e75f1ebc5a8dc4e3a11aa2a33211306", - "de": "59b047c5604017f6d8db80f68f39657f2e75f1ebc5a8dc4e3a11aa2a33211306", - "es": "59b047c5604017f6d8db80f68f39657f2e75f1ebc5a8dc4e3a11aa2a33211306", - "it": "59b047c5604017f6d8db80f68f39657f2e75f1ebc5a8dc4e3a11aa2a33211306" - }, - "console/security/security_alarms.md": { - "en": "b3b17a8d94029ff13cc8a8e5985a129261aa519b87af50daad7d719c07bb2ec2", - "de": "b3b17a8d94029ff13cc8a8e5985a129261aa519b87af50daad7d719c07bb2ec2", - "es": "b3b17a8d94029ff13cc8a8e5985a129261aa519b87af50daad7d719c07bb2ec2", - "it": "b3b17a8d94029ff13cc8a8e5985a129261aa519b87af50daad7d719c07bb2ec2" - }, "console/status.md": { - "en": "a42aee84154bd76af9f334553dc5c188043dd4f2abe210cdf193b02153f6ec9d", - "de": "a42aee84154bd76af9f334553dc5c188043dd4f2abe210cdf193b02153f6ec9d", - "es": "a42aee84154bd76af9f334553dc5c188043dd4f2abe210cdf193b02153f6ec9d", - "it": "a42aee84154bd76af9f334553dc5c188043dd4f2abe210cdf193b02153f6ec9d" + "en": "cfbf56aba967abc4217eba15abb8360882a38b58b59d100a562482a1116448da", + "de": "cfbf56aba967abc4217eba15abb8360882a38b58b59d100a562482a1116448da", + "es": "cfbf56aba967abc4217eba15abb8360882a38b58b59d100a562482a1116448da", + "it": "cfbf56aba967abc4217eba15abb8360882a38b58b59d100a562482a1116448da" }, - "console/orders.md": { - "en": "59fdd6456bd509c86dfbfb7f76c673555f1dfde5f8291d5cb466d51fbfcbd99b", - "de": "59fdd6456bd509c86dfbfb7f76c673555f1dfde5f8291d5cb466d51fbfcbd99b", - "es": "59fdd6456bd509c86dfbfb7f76c673555f1dfde5f8291d5cb466d51fbfcbd99b", - "it": "59fdd6456bd509c86dfbfb7f76c673555f1dfde5f8291d5cb466d51fbfcbd99b" + "containers_overview.md": { + "en": "a66adfe83eb09511d5ade9c4e3ad5d38200691bb22b37028fbb17f0acecfc9be", + "de": "a66adfe83eb09511d5ade9c4e3ad5d38200691bb22b37028fbb17f0acecfc9be", + "es": "a66adfe83eb09511d5ade9c4e3ad5d38200691bb22b37028fbb17f0acecfc9be", + "it": "a66adfe83eb09511d5ade9c4e3ad5d38200691bb22b37028fbb17f0acecfc9be" + }, + "contractual/contracts.md": { + "en": "beb2f04e6cebfade24a0b6fbb822c342e8e0999b47aceb910e43fbe075714491", + "de": "beb2f04e6cebfade24a0b6fbb822c342e8e0999b47aceb910e43fbe075714491", + "es": "beb2f04e6cebfade24a0b6fbb822c342e8e0999b47aceb910e43fbe075714491", + "it": "beb2f04e6cebfade24a0b6fbb822c342e8e0999b47aceb910e43fbe075714491" }, "contractual/iaas/raci.md": { - "en": "ccb84a4732e6bed28145cda0d246c209acdd93bcd1064574c86555cf31f3f817", - "de": "ccb84a4732e6bed28145cda0d246c209acdd93bcd1064574c86555cf31f3f817", - "es": "ccb84a4732e6bed28145cda0d246c209acdd93bcd1064574c86555cf31f3f817", - "it": "ccb84a4732e6bed28145cda0d246c209acdd93bcd1064574c86555cf31f3f817" - }, - "contractual/baremetal.md": { - "en": "cf55c48e8841a31ac8e28979edd4e6f303c498bc66b28d0abfdad53616a0f68f", - "de": "cf55c48e8841a31ac8e28979edd4e6f303c498bc66b28d0abfdad53616a0f68f", - "es": "cf55c48e8841a31ac8e28979edd4e6f303c498bc66b28d0abfdad53616a0f68f", - "it": "cf55c48e8841a31ac8e28979edd4e6f303c498bc66b28d0abfdad53616a0f68f" - }, - "contractual/cgvu.md": { - "en": "3fb7fd7b68254d073cc685daf52c7befda2efaae8dd143e7a16632f0ed656db0", - "de": "3fb7fd7b68254d073cc685daf52c7befda2efaae8dd143e7a16632f0ed656db0", - "es": "3fb7fd7b68254d073cc685daf52c7befda2efaae8dd143e7a16632f0ed656db0", - "it": "3fb7fd7b68254d073cc685daf52c7befda2efaae8dd143e7a16632f0ed656db0" + "en": "3ad2843c031be51ceefc33d1c065a0c605a0599e91c136a816ca0422e1305d71", + "de": "3ad2843c031be51ceefc33d1c065a0c605a0599e91c136a816ca0422e1305d71", + "es": "3ad2843c031be51ceefc33d1c065a0c605a0599e91c136a816ca0422e1305d71", + "it": "3ad2843c031be51ceefc33d1c065a0c605a0599e91c136a816ca0422e1305d71" + }, + "contractual/iaas/raci_s3.md": { + "en": "faa4aeed8b88a1531000d69a89e2acc8ddf15d4b40f47706dc9bab53e682e5b7", + "de": "faa4aeed8b88a1531000d69a89e2acc8ddf15d4b40f47706dc9bab53e682e5b7", + "es": "faa4aeed8b88a1531000d69a89e2acc8ddf15d4b40f47706dc9bab53e682e5b7", + "it": "faa4aeed8b88a1531000d69a89e2acc8ddf15d4b40f47706dc9bab53e682e5b7" + }, + "contractual/kubernetes/raci.md": { + "en": "2df434978dcbeb4992ef64cc94131d603d64174eae14fa1947488fbfa15e4e2b", + "de": "2df434978dcbeb4992ef64cc94131d603d64174eae14fa1947488fbfa15e4e2b", + "es": "2df434978dcbeb4992ef64cc94131d603d64174eae14fa1947488fbfa15e4e2b", + "it": "2df434978dcbeb4992ef64cc94131d603d64174eae14fa1947488fbfa15e4e2b" + }, + "contractual/llmaas/raci.md": { + "en": "a17d9628c8b0f66c7393d896de8ccf0b580a9063679772b411466de2e119d053", + "de": "a17d9628c8b0f66c7393d896de8ccf0b580a9063679772b411466de2e119d053", + "es": "a17d9628c8b0f66c7393d896de8ccf0b580a9063679772b411466de2e119d053", + "it": "a17d9628c8b0f66c7393d896de8ccf0b580a9063679772b411466de2e119d053" }, "contractual/network/raci.md": { - "en": "f4ea003ba08f104d7bf622f9b13f97ebeee01728c9d4df34d3d44567594c4e59", - "de": "f4ea003ba08f104d7bf622f9b13f97ebeee01728c9d4df34d3d44567594c4e59", - "es": "f4ea003ba08f104d7bf622f9b13f97ebeee01728c9d4df34d3d44567594c4e59", - "it": "f4ea003ba08f104d7bf622f9b13f97ebeee01728c9d4df34d3d44567594c4e59" + "en": "3714bc8532fef00b32f4bdb8dc84c162e3aae29d3fc998324c758b94e036f8b6", + "de": "3714bc8532fef00b32f4bdb8dc84c162e3aae29d3fc998324c758b94e036f8b6", + "es": "3714bc8532fef00b32f4bdb8dc84c162e3aae29d3fc998324c758b94e036f8b6", + "it": "3714bc8532fef00b32f4bdb8dc84c162e3aae29d3fc998324c758b94e036f8b6" + }, + "contractual/network/raci_vpc.md": { + "en": "73a4f685dbf730240c7744ae3b050eb640fb0212d6a670109bac0b94329ccbc4", + "de": "73a4f685dbf730240c7744ae3b050eb640fb0212d6a670109bac0b94329ccbc4", + "es": "73a4f685dbf730240c7744ae3b050eb640fb0212d6a670109bac0b94329ccbc4", + "it": "73a4f685dbf730240c7744ae3b050eb640fb0212d6a670109bac0b94329ccbc4" + }, + "contractual/network/sla_vpc.md": { + "en": "7970b289ea93a811a164250325463bcbd9273ec7a8c7ffab6d842315b58d8feb", + "de": "7970b289ea93a811a164250325463bcbd9273ec7a8c7ffab6d842315b58d8feb", + "es": "7970b289ea93a811a164250325463bcbd9273ec7a8c7ffab6d842315b58d8feb", + "it": "7970b289ea93a811a164250325463bcbd9273ec7a8c7ffab6d842315b58d8feb" }, "contractual/paas/mco_mcs.md": { - "en": "dc79052f341ac9e6c46b05db573be61a482cb6150308c18095122db6a0ee2de5", - "de": "dc79052f341ac9e6c46b05db573be61a482cb6150308c18095122db6a0ee2de5", - "es": "dc79052f341ac9e6c46b05db573be61a482cb6150308c18095122db6a0ee2de5", - "it": "dc79052f341ac9e6c46b05db573be61a482cb6150308c18095122db6a0ee2de5" - }, - "contractual/iaas/raci_s3.md": { - "en": "a3ba19e7a50cf1c7a0e242778ffd1c04ea04d74a5c1721137d65343322bdde85", - "de": "a3ba19e7a50cf1c7a0e242778ffd1c04ea04d74a5c1721137d65343322bdde85", - "es": "a3ba19e7a50cf1c7a0e242778ffd1c04ea04d74a5c1721137d65343322bdde85", - "it": "a3ba19e7a50cf1c7a0e242778ffd1c04ea04d74a5c1721137d65343322bdde85" + "en": "da9967b689e29f99dddb4276ac77d2f26083c9a6844c5e112c510fe02e758306", + "de": "da9967b689e29f99dddb4276ac77d2f26083c9a6844c5e112c510fe02e758306", + "es": "da9967b689e29f99dddb4276ac77d2f26083c9a6844c5e112c510fe02e758306", + "it": "da9967b689e29f99dddb4276ac77d2f26083c9a6844c5e112c510fe02e758306" }, "contractual/paas/raci.md": { - "en": "3a20ce1e0d72cb8968f125d108d09f719fab4ad87540de6782ae973cf76fbfb1", - "de": "3a20ce1e0d72cb8968f125d108d09f719fab4ad87540de6782ae973cf76fbfb1", - "es": "3a20ce1e0d72cb8968f125d108d09f719fab4ad87540de6782ae973cf76fbfb1", - "it": "3a20ce1e0d72cb8968f125d108d09f719fab4ad87540de6782ae973cf76fbfb1" - }, - "contractual/orderdoc.md": { - "en": "0593a2c7004fe885ae2c638a517ba0ef0bf2734c1130341b9695c1de3d666681", - "de": "0593a2c7004fe885ae2c638a517ba0ef0bf2734c1130341b9695c1de3d666681", - "es": "0593a2c7004fe885ae2c638a517ba0ef0bf2734c1130341b9695c1de3d666681", - "it": "0593a2c7004fe885ae2c638a517ba0ef0bf2734c1130341b9695c1de3d666681" + "en": "432998000105a556b0fba441c46fdcf5592bbe1e4a9cb0cff4312a4746ac1463", + "de": "432998000105a556b0fba441c46fdcf5592bbe1e4a9cb0cff4312a4746ac1463", + "es": "432998000105a556b0fba441c46fdcf5592bbe1e4a9cb0cff4312a4746ac1463", + "it": "432998000105a556b0fba441c46fdcf5592bbe1e4a9cb0cff4312a4746ac1463" }, "contractual/paas/raci_ocp_std.md": { - "en": "e6c24afa046165bae4c221753322debfc7d306867762defa14acf8b2a3e8e76b", - "de": "e6c24afa046165bae4c221753322debfc7d306867762defa14acf8b2a3e8e76b", - "es": "e6c24afa046165bae4c221753322debfc7d306867762defa14acf8b2a3e8e76b", - "it": "e6c24afa046165bae4c221753322debfc7d306867762defa14acf8b2a3e8e76b" - }, - "contractual/iaas/sla_iaas.md": { - "en": "6d5613421323939a1d4fae0d996126fb0b19a6641a3b18787772a2a49866b681", - "de": "6d5613421323939a1d4fae0d996126fb0b19a6641a3b18787772a2a49866b681", - "es": "6d5613421323939a1d4fae0d996126fb0b19a6641a3b18787772a2a49866b681", - "it": "6d5613421323939a1d4fae0d996126fb0b19a6641a3b18787772a2a49866b681" - }, - "contractual/iaas/sla_openiaas.md": { - "en": "b0caf0ee9ec7f81020436f8adabf8ad216f190fe611e2fa738fc524c9ec3ed85", - "de": "b0caf0ee9ec7f81020436f8adabf8ad216f190fe611e2fa738fc524c9ec3ed85", - "es": "b0caf0ee9ec7f81020436f8adabf8ad216f190fe611e2fa738fc524c9ec3ed85", - "it": "b0caf0ee9ec7f81020436f8adabf8ad216f190fe611e2fa738fc524c9ec3ed85" + "en": "1cc65d85757780bbddfad4fb9c5fb115b65341104fbc3e44140eaef019b3e8a0", + "de": "1cc65d85757780bbddfad4fb9c5fb115b65341104fbc3e44140eaef019b3e8a0", + "es": "1cc65d85757780bbddfad4fb9c5fb115b65341104fbc3e44140eaef019b3e8a0", + "it": "1cc65d85757780bbddfad4fb9c5fb115b65341104fbc3e44140eaef019b3e8a0" + }, + "contractual/shared-responsibility.md": { + "en": "b6ceb680f47de28d481d49d802bd176276a06b3705ec83382354e6f27648a52a", + "de": "b6ceb680f47de28d481d49d802bd176276a06b3705ec83382354e6f27648a52a", + "es": "b6ceb680f47de28d481d49d802bd176276a06b3705ec83382354e6f27648a52a", + "it": "b6ceb680f47de28d481d49d802bd176276a06b3705ec83382354e6f27648a52a" + }, + "contractual/vm-instances/raci.md": { + "en": "c2e322cb1fd622a663747b5dc92ecb6ec4a91e1375a9eb54d3d6579ca3ad88e2", + "de": "c2e322cb1fd622a663747b5dc92ecb6ec4a91e1375a9eb54d3d6579ca3ad88e2", + "es": "c2e322cb1fd622a663747b5dc92ecb6ec4a91e1375a9eb54d3d6579ca3ad88e2", + "it": "c2e322cb1fd622a663747b5dc92ecb6ec4a91e1375a9eb54d3d6579ca3ad88e2" + }, + "contractual/vm-instances/sla_vm-instances.md": { + "en": "1b9e3a667de23bcdf9181e21783a44b8a0ae42e684f42f9aacfbd6cf7668a4b0", + "de": "1b9e3a667de23bcdf9181e21783a44b8a0ae42e684f42f9aacfbd6cf7668a4b0", + "es": "1b9e3a667de23bcdf9181e21783a44b8a0ae42e684f42f9aacfbd6cf7668a4b0", + "it": "1b9e3a667de23bcdf9181e21783a44b8a0ae42e684f42f9aacfbd6cf7668a4b0" + }, + "databases_overview.md": { + "en": "81b9e04929d01cbbd9846d59bf7a419f45fae1168a8356184bd49007a0e8ac4f", + "de": "81b9e04929d01cbbd9846d59bf7a419f45fae1168a8356184bd49007a0e8ac4f", + "es": "81b9e04929d01cbbd9846d59bf7a419f45fae1168a8356184bd49007a0e8ac4f", + "it": "81b9e04929d01cbbd9846d59bf7a419f45fae1168a8356184bd49007a0e8ac4f" + }, + "faq.md": { + "en": "eeaf1b1166b80e987ff2c2f45a74c310e1365ad7beefd17dc4c55f29b684cbc9", + "de": "eeaf1b1166b80e987ff2c2f45a74c310e1365ad7beefd17dc4c55f29b684cbc9", + "es": "eeaf1b1166b80e987ff2c2f45a74c310e1365ad7beefd17dc4c55f29b684cbc9", + "it": "eeaf1b1166b80e987ff2c2f45a74c310e1365ad7beefd17dc4c55f29b684cbc9" }, "home.md": { - "en": "ca093356de02afb1ad076aeee7c6be8f29ab0d0a01382567bdd659fc865e37a4", - "de": "ca093356de02afb1ad076aeee7c6be8f29ab0d0a01382567bdd659fc865e37a4", - "es": "ca093356de02afb1ad076aeee7c6be8f29ab0d0a01382567bdd659fc865e37a4", - "it": "ca093356de02afb1ad076aeee7c6be8f29ab0d0a01382567bdd659fc865e37a4" + "en": "838d39fa605dcde674eaeb5b4e90c3e1abb0cac9ad6c68d8db00f95b8d914554", + "de": "838d39fa605dcde674eaeb5b4e90c3e1abb0cac9ad6c68d8db00f95b8d914554", + "es": "838d39fa605dcde674eaeb5b4e90c3e1abb0cac9ad6c68d8db00f95b8d914554", + "it": "838d39fa605dcde674eaeb5b4e90c3e1abb0cac9ad6c68d8db00f95b8d914554" }, - "housing/quickstart.md": { - "en": "442b708244ce7af9e23109f53591fbbd328fa8dc623f6c7eed0c32c2f113b4ca", - "de": "442b708244ce7af9e23109f53591fbbd328fa8dc623f6c7eed0c32c2f113b4ca", - "es": "442b708244ce7af9e23109f53591fbbd328fa8dc623f6c7eed0c32c2f113b4ca", - "it": "442b708244ce7af9e23109f53591fbbd328fa8dc623f6c7eed0c32c2f113b4ca" + "housing/concepts.md": { + "en": "e3ce71f562b91e34265a313d4410bdad5b70349836857b036cf386edf2d74728", + "de": "e3ce71f562b91e34265a313d4410bdad5b70349836857b036cf386edf2d74728", + "es": "e3ce71f562b91e34265a313d4410bdad5b70349836857b036cf386edf2d74728", + "it": "e3ce71f562b91e34265a313d4410bdad5b70349836857b036cf386edf2d74728" }, - "iaas_bare-metal/iaas_bare-metal.md": { - "en": "eb064e2a3bc5e584fe1f96fef5d51b25c355116646bb5ef6ed45e01154d37daa", - "de": "eb064e2a3bc5e584fe1f96fef5d51b25c355116646bb5ef6ed45e01154d37daa", - "es": "eb064e2a3bc5e584fe1f96fef5d51b25c355116646bb5ef6ed45e01154d37daa", - "it": "eb064e2a3bc5e584fe1f96fef5d51b25c355116646bb5ef6ed45e01154d37daa" + "housing/housing.md": { + "en": "6a5be1fdca2211fd66909921a34026fd578ab5bf5398bbd10d8ba7db739613c5", + "de": "6a5be1fdca2211fd66909921a34026fd578ab5bf5398bbd10d8ba7db739613c5", + "es": "6a5be1fdca2211fd66909921a34026fd578ab5bf5398bbd10d8ba7db739613c5", + "it": "6a5be1fdca2211fd66909921a34026fd578ab5bf5398bbd10d8ba7db739613c5" }, - "housing/tutorials.md": { - "en": "5763d1cf09b4992dbb2ffdd01f563eb2d0d97647796ba7bb1c3d08c9584984dc", - "de": "5763d1cf09b4992dbb2ffdd01f563eb2d0d97647796ba7bb1c3d08c9584984dc", - "es": "5763d1cf09b4992dbb2ffdd01f563eb2d0d97647796ba7bb1c3d08c9584984dc", - "it": "5763d1cf09b4992dbb2ffdd01f563eb2d0d97647796ba7bb1c3d08c9584984dc" + "housing/quickstart.md": { + "en": "098606509abc8b53281f479551eff52b6a30a1189d9c1333537fdf89f6757c58", + "de": "098606509abc8b53281f479551eff52b6a30a1189d9c1333537fdf89f6757c58", + "es": "098606509abc8b53281f479551eff52b6a30a1189d9c1333537fdf89f6757c58", + "it": "098606509abc8b53281f479551eff52b6a30a1189d9c1333537fdf89f6757c58" }, - "contractual/paas/sla_paas.md": { - "en": "f3161abdf9648e566919e983337d7aa53096b0d99f74bc9a7657f09f94eb4b80", - "de": "f3161abdf9648e566919e983337d7aa53096b0d99f74bc9a7657f09f94eb4b80", - "es": "f3161abdf9648e566919e983337d7aa53096b0d99f74bc9a7657f09f94eb4b80", - "it": "f3161abdf9648e566919e983337d7aa53096b0d99f74bc9a7657f09f94eb4b80" + "housing/tutorials.md": { + "en": "ad234610824325f0c41564d02a4d9f62b02d6d1e0a231540e199e27fb7a420fb", + "de": "ad234610824325f0c41564d02a4d9f62b02d6d1e0a231540e199e27fb7a420fb", + "es": "ad234610824325f0c41564d02a4d9f62b02d6d1e0a231540e199e27fb7a420fb", + "it": "ad234610824325f0c41564d02a4d9f62b02d6d1e0a231540e199e27fb7a420fb" }, "iaas_bare-metal/concepts.md": { - "en": "2218f5acac47d3b0bb6a965601f02a761211fba41a4b124bfa7f25e5f915573f", - "de": "2218f5acac47d3b0bb6a965601f02a761211fba41a4b124bfa7f25e5f915573f", - "es": "2218f5acac47d3b0bb6a965601f02a761211fba41a4b124bfa7f25e5f915573f", - "it": "2218f5acac47d3b0bb6a965601f02a761211fba41a4b124bfa7f25e5f915573f" + "en": "686a953b4f794e9a28dd92e0d5a066097d01baf49cf0a0ea0ad72eb429951a1c", + "de": "686a953b4f794e9a28dd92e0d5a066097d01baf49cf0a0ea0ad72eb429951a1c", + "es": "686a953b4f794e9a28dd92e0d5a066097d01baf49cf0a0ea0ad72eb429951a1c", + "it": "686a953b4f794e9a28dd92e0d5a066097d01baf49cf0a0ea0ad72eb429951a1c" }, - "housing/housing.md": { - "en": "ecbaa08aec512ecbcc250779d843e8717c657660c0c0c690e9f8a104113da168", - "de": "ecbaa08aec512ecbcc250779d843e8717c657660c0c0c690e9f8a104113da168", - "es": "ecbaa08aec512ecbcc250779d843e8717c657660c0c0c690e9f8a104113da168", - "it": "ecbaa08aec512ecbcc250779d843e8717c657660c0c0c690e9f8a104113da168" + "iaas_bare-metal/iaas_bare-metal.md": { + "en": "3441cef079a716c6b06d5a079fed50a1771eda8471ed76b3450b645791a7f03a", + "de": "3441cef079a716c6b06d5a079fed50a1771eda8471ed76b3450b645791a7f03a", + "es": "3441cef079a716c6b06d5a079fed50a1771eda8471ed76b3450b645791a7f03a", + "it": "3441cef079a716c6b06d5a079fed50a1771eda8471ed76b3450b645791a7f03a" }, - "housing/concepts.md": { - "en": "e3ce71f562b91e34265a313d4410bdad5b70349836857b036cf386edf2d74728", - "de": "e3ce71f562b91e34265a313d4410bdad5b70349836857b036cf386edf2d74728", - "es": "e3ce71f562b91e34265a313d4410bdad5b70349836857b036cf386edf2d74728", - "it": "e3ce71f562b91e34265a313d4410bdad5b70349836857b036cf386edf2d74728" + "iaas_bare-metal/quickstart.md": { + "en": "6414cbc305585fa899634bb063dcfc96a62c3710299ef3fced507aebd7a3ecd7", + "de": "6414cbc305585fa899634bb063dcfc96a62c3710299ef3fced507aebd7a3ecd7", + "es": "6414cbc305585fa899634bb063dcfc96a62c3710299ef3fced507aebd7a3ecd7", + "it": "6414cbc305585fa899634bb063dcfc96a62c3710299ef3fced507aebd7a3ecd7" }, - "iaas_opensource/iaas_opensource.md": { - "en": "5deae1f1d7073b314996962a448becda752dd254ee5cc9c981fc4483a87b91f0", - "de": "5deae1f1d7073b314996962a448becda752dd254ee5cc9c981fc4483a87b91f0", - "es": "5deae1f1d7073b314996962a448becda752dd254ee5cc9c981fc4483a87b91f0", - "it": "5deae1f1d7073b314996962a448becda752dd254ee5cc9c981fc4483a87b91f0" + "iaas_bare-metal/tutorials.md": { + "en": "ea2704db25b3315a99e4bdeb594d743d88f73da8e62a9fe353088a673131f852", + "de": "ea2704db25b3315a99e4bdeb594d743d88f73da8e62a9fe353088a673131f852", + "es": "ea2704db25b3315a99e4bdeb594d743d88f73da8e62a9fe353088a673131f852", + "it": "ea2704db25b3315a99e4bdeb594d743d88f73da8e62a9fe353088a673131f852" }, "iaas_opensource/concepts.md": { - "en": "b6fcf465a40cf7d7a13f76d2c7490e7ba4342a5df4ce36f7bff2871304b403e7", - "de": "b6fcf465a40cf7d7a13f76d2c7490e7ba4342a5df4ce36f7bff2871304b403e7", - "es": "b6fcf465a40cf7d7a13f76d2c7490e7ba4342a5df4ce36f7bff2871304b403e7", - "it": "b6fcf465a40cf7d7a13f76d2c7490e7ba4342a5df4ce36f7bff2871304b403e7" + "en": "804add592e311cd56bae2a60480fbc9431f1e28ac5c07c9477db517d797d0236", + "de": "804add592e311cd56bae2a60480fbc9431f1e28ac5c07c9477db517d797d0236", + "es": "804add592e311cd56bae2a60480fbc9431f1e28ac5c07c9477db517d797d0236", + "it": "804add592e311cd56bae2a60480fbc9431f1e28ac5c07c9477db517d797d0236" }, - "iaas_vmware/iaas_vmware.md": { - "en": "227a6fc9452bc93a670f1148bc057120b0348edd9ca5266421fac7408ccefa46", - "de": "227a6fc9452bc93a670f1148bc057120b0348edd9ca5266421fac7408ccefa46", - "es": "227a6fc9452bc93a670f1148bc057120b0348edd9ca5266421fac7408ccefa46", - "it": "227a6fc9452bc93a670f1148bc057120b0348edd9ca5266421fac7408ccefa46" + "iaas_opensource/iaas_opensource.md": { + "en": "4d27fd397c405d991e5198494e7d40b293a2eb2223c26e7d55a4371e2c796d87", + "de": "4d27fd397c405d991e5198494e7d40b293a2eb2223c26e7d55a4371e2c796d87", + "es": "4d27fd397c405d991e5198494e7d40b293a2eb2223c26e7d55a4371e2c796d87", + "it": "4d27fd397c405d991e5198494e7d40b293a2eb2223c26e7d55a4371e2c796d87" }, "iaas_opensource/quickstart.md": { - "en": "bb494fec90c1b017c7d17a54773fb45d65ade8cf47ca690ddf37e2cf7a3b7e81", - "de": "bb494fec90c1b017c7d17a54773fb45d65ade8cf47ca690ddf37e2cf7a3b7e81", - "es": "bb494fec90c1b017c7d17a54773fb45d65ade8cf47ca690ddf37e2cf7a3b7e81", - "it": "bb494fec90c1b017c7d17a54773fb45d65ade8cf47ca690ddf37e2cf7a3b7e81" + "en": "c4387b21658aaedf157a86c34f1295ee5a2e26e2b0a043102c31f2a40169102c", + "de": "c4387b21658aaedf157a86c34f1295ee5a2e26e2b0a043102c31f2a40169102c", + "es": "c4387b21658aaedf157a86c34f1295ee5a2e26e2b0a043102c31f2a40169102c", + "it": "c4387b21658aaedf157a86c34f1295ee5a2e26e2b0a043102c31f2a40169102c" }, - "iaas_opensource/tutorials.md": { - "en": "7f10bbc9ad032ad82fa94227ac59972546f1e1a6976c5b15ad777bfa457b1927", - "de": "7f10bbc9ad032ad82fa94227ac59972546f1e1a6976c5b15ad777bfa457b1927", - "es": "7f10bbc9ad032ad82fa94227ac59972546f1e1a6976c5b15ad777bfa457b1927", - "it": "7f10bbc9ad032ad82fa94227ac59972546f1e1a6976c5b15ad777bfa457b1927" + "iaas_opensource/tutorials/backup/iaas_opensource_backup.md": { + "en": "f9779cdd753720756737c12954a66e98ff0724d06d7ae1a1651b9ab77fb486be", + "de": "f9779cdd753720756737c12954a66e98ff0724d06d7ae1a1651b9ab77fb486be", + "es": "f9779cdd753720756737c12954a66e98ff0724d06d7ae1a1651b9ab77fb486be", + "it": "f9779cdd753720756737c12954a66e98ff0724d06d7ae1a1651b9ab77fb486be" }, - "iaas_bare-metal/tutorials.md": { - "en": "4e03aeb3cb65cf26b2a3c3e7d5a0629a4b65faa981d1ff4de051757d0c84ff0e", - "de": "4e03aeb3cb65cf26b2a3c3e7d5a0629a4b65faa981d1ff4de051757d0c84ff0e", - "es": "4e03aeb3cb65cf26b2a3c3e7d5a0629a4b65faa981d1ff4de051757d0c84ff0e", - "it": "4e03aeb3cb65cf26b2a3c3e7d5a0629a4b65faa981d1ff4de051757d0c84ff0e" + "iaas_opensource/tutorials/create_vm.md": { + "en": "1adc74c9f04435f5f0459fca765b33f518cb23db877a68f0aede9056fe13599c", + "de": "1adc74c9f04435f5f0459fca765b33f518cb23db877a68f0aede9056fe13599c", + "es": "1adc74c9f04435f5f0459fca765b33f518cb23db877a68f0aede9056fe13599c", + "it": "1adc74c9f04435f5f0459fca765b33f518cb23db877a68f0aede9056fe13599c" }, - "iaas_bare-metal/quickstart.md": { - "en": "a0814a6030c000e298d47269bd3ded18e9b65f03db838f6afd44dbfb4df116e3", - "de": "a0814a6030c000e298d47269bd3ded18e9b65f03db838f6afd44dbfb4df116e3", - "es": "a0814a6030c000e298d47269bd3ded18e9b65f03db838f6afd44dbfb4df116e3", - "it": "a0814a6030c000e298d47269bd3ded18e9b65f03db838f6afd44dbfb4df116e3" + "iaas_opensource/tutorials/high_availability/manage_pool.md": { + "en": "a4d3421583050f80bd18e1fd2c7fda0fd57da64b54da071599c05c07079c4b30", + "de": "a4d3421583050f80bd18e1fd2c7fda0fd57da64b54da071599c05c07079c4b30", + "es": "a4d3421583050f80bd18e1fd2c7fda0fd57da64b54da071599c05c07079c4b30", + "it": "a4d3421583050f80bd18e1fd2c7fda0fd57da64b54da071599c05c07079c4b30" + }, + "iaas_opensource/tutorials/high_availability/manage_vm.md": { + "en": "281289bc26113b45708ca464819f262146745b2f50de98546173ef7e908ba00f", + "de": "281289bc26113b45708ca464819f262146745b2f50de98546173ef7e908ba00f", + "es": "281289bc26113b45708ca464819f262146745b2f50de98546173ef7e908ba00f", + "it": "281289bc26113b45708ca464819f262146745b2f50de98546173ef7e908ba00f" }, "iaas_vmware/concepts.md": { - "en": "760ec5526a7849762cab1f39b75c4f38dfdf7df9d8e62a3390a53e8a551249d3", - "de": "760ec5526a7849762cab1f39b75c4f38dfdf7df9d8e62a3390a53e8a551249d3", - "es": "760ec5526a7849762cab1f39b75c4f38dfdf7df9d8e62a3390a53e8a551249d3", - "it": "760ec5526a7849762cab1f39b75c4f38dfdf7df9d8e62a3390a53e8a551249d3" + "en": "843af302bb432faf16c496cdb080e724fb18a37d6e4de804e240a024fba9f151", + "de": "843af302bb432faf16c496cdb080e724fb18a37d6e4de804e240a024fba9f151", + "es": "843af302bb432faf16c496cdb080e724fb18a37d6e4de804e240a024fba9f151", + "it": "843af302bb432faf16c496cdb080e724fb18a37d6e4de804e240a024fba9f151" }, - "iaas_vmware/tutorials/deploy_vm_template.md": { - "en": "dc3538288e02123696a3439f2e0dc4758204d8841b8ba1da81fb06c700667bcb", - "de": "dc3538288e02123696a3439f2e0dc4758204d8841b8ba1da81fb06c700667bcb", - "es": "dc3538288e02123696a3439f2e0dc4758204d8841b8ba1da81fb06c700667bcb", - "it": "dc3538288e02123696a3439f2e0dc4758204d8841b8ba1da81fb06c700667bcb" + "iaas_vmware/iaas_vmware.md": { + "en": "8ab7499f394fc125df5c8e58bbb06d3a9d953eb4a8206029e52c119ba69ff692", + "de": "8ab7499f394fc125df5c8e58bbb06d3a9d953eb4a8206029e52c119ba69ff692", + "es": "8ab7499f394fc125df5c8e58bbb06d3a9d953eb4a8206029e52c119ba69ff692", + "it": "8ab7499f394fc125df5c8e58bbb06d3a9d953eb4a8206029e52c119ba69ff692" }, - "iaas_vmware/tutorials/vm_encryption.md": { - "en": "7b7b959fef583a55d005fddd92608332ebae61fa2c9786aacdd61c862d5c4fcf", - "de": "7b7b959fef583a55d005fddd92608332ebae61fa2c9786aacdd61c862d5c4fcf", - "es": "7b7b959fef583a55d005fddd92608332ebae61fa2c9786aacdd61c862d5c4fcf", - "it": "7b7b959fef583a55d005fddd92608332ebae61fa2c9786aacdd61c862d5c4fcf" + "iaas_vmware/quickstart.md": { + "en": "532b54806d9f386738d0f4a9bc63d1d4b9e24ff1aac58f252665a32210d4ca6b", + "de": "532b54806d9f386738d0f4a9bc63d1d4b9e24ff1aac58f252665a32210d4ca6b", + "es": "532b54806d9f386738d0f4a9bc63d1d4b9e24ff1aac58f252665a32210d4ca6b", + "it": "532b54806d9f386738d0f4a9bc63d1d4b9e24ff1aac58f252665a32210d4ca6b" }, - "llmaas/licences/apache2.licence.md": { - "en": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "de": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "es": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "it": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa" + "iaas_vmware/tutorials/backup/iaas_backup.md": { + "en": "bc4a7561b71c398acc71c6199488c4009c74e0151cba9aa6f98717f122faff2b", + "de": "bc4a7561b71c398acc71c6199488c4009c74e0151cba9aa6f98717f122faff2b", + "es": "bc4a7561b71c398acc71c6199488c4009c74e0151cba9aa6f98717f122faff2b", + "it": "bc4a7561b71c398acc71c6199488c4009c74e0151cba9aa6f98717f122faff2b" }, - "llmaas/api.md": { - "en": "1fe3c91b8f2f42f3c555bbe311d3536239e52dff8a4ba35ae97d9f663b9b95fc", - "de": "1fe3c91b8f2f42f3c555bbe311d3536239e52dff8a4ba35ae97d9f663b9b95fc", - "es": "1fe3c91b8f2f42f3c555bbe311d3536239e52dff8a4ba35ae97d9f663b9b95fc", - "it": "1fe3c91b8f2f42f3c555bbe311d3536239e52dff8a4ba35ae97d9f663b9b95fc" + "iaas_vmware/tutorials/configure_management_vm.md": { + "en": "b80506a68354e3ea15d25c90d36c09ec7e01473548c19ec8d2adda04fd477776", + "de": "b80506a68354e3ea15d25c90d36c09ec7e01473548c19ec8d2adda04fd477776", + "es": "b80506a68354e3ea15d25c90d36c09ec7e01473548c19ec8d2adda04fd477776", + "it": "b80506a68354e3ea15d25c90d36c09ec7e01473548c19ec8d2adda04fd477776" }, - "llmaas/concepts.md": { - "en": "adc9da6055aa875fe4d70deb266ec519f86744ed0c6f2153354fd3da67799ea5", - "de": "adc9da6055aa875fe4d70deb266ec519f86744ed0c6f2153354fd3da67799ea5", - "es": "adc9da6055aa875fe4d70deb266ec519f86744ed0c6f2153354fd3da67799ea5", - "it": "adc9da6055aa875fe4d70deb266ec519f86744ed0c6f2153354fd3da67799ea5" + "iaas_vmware/tutorials/deploy_vm_template.md": { + "en": "afa9e5c4969bece55e6822d56e2a3c1c02641998b756c56830b65fb77946e635", + "de": "afa9e5c4969bece55e6822d56e2a3c1c02641998b756c56830b65fb77946e635", + "es": "afa9e5c4969bece55e6822d56e2a3c1c02641998b756c56830b65fb77946e635", + "it": "afa9e5c4969bece55e6822d56e2a3c1c02641998b756c56830b65fb77946e635" }, "iaas_vmware/tutorials/deploy_vm_terraform.md": { - "en": "9465c1d0aa7e2189becbe648bdd5ec7c069412c6f6b67ff1a2a3f945bafbb664", - "de": "9465c1d0aa7e2189becbe648bdd5ec7c069412c6f6b67ff1a2a3f945bafbb664", - "es": "9465c1d0aa7e2189becbe648bdd5ec7c069412c6f6b67ff1a2a3f945bafbb664", - "it": "9465c1d0aa7e2189becbe648bdd5ec7c069412c6f6b67ff1a2a3f945bafbb664" + "en": "749624a44388fce0c8350d342118724f236dd193476b22aa5abd3ac7006148e9", + "de": "749624a44388fce0c8350d342118724f236dd193476b22aa5abd3ac7006148e9", + "es": "749624a44388fce0c8350d342118724f236dd193476b22aa5abd3ac7006148e9", + "it": "749624a44388fce0c8350d342118724f236dd193476b22aa5abd3ac7006148e9" }, - "iaas_vmware/tutorials/backup/iaas_backup.md": { - "en": "e58a23f7cf83208762d1642a705210fa31cacd3094e0db9edc3c00dabffc6428", - "de": "e58a23f7cf83208762d1642a705210fa31cacd3094e0db9edc3c00dabffc6428", - "es": "e58a23f7cf83208762d1642a705210fa31cacd3094e0db9edc3c00dabffc6428", - "it": "e58a23f7cf83208762d1642a705210fa31cacd3094e0db9edc3c00dabffc6428" - }, - "iaas_vmware/quickstart.md": { - "en": "d63b0094883ba13e61b50fba9d05cdf8e9a8679f0c32060e9a34c525efa24631", - "de": "d63b0094883ba13e61b50fba9d05cdf8e9a8679f0c32060e9a34c525efa24631", - "es": "d63b0094883ba13e61b50fba9d05cdf8e9a8679f0c32060e9a34c525efa24631", - "it": "d63b0094883ba13e61b50fba9d05cdf8e9a8679f0c32060e9a34c525efa24631" - }, - "llmaas/licences/cogito_3b.licence.md": { - "en": "bab200d1e3f1a0207858317f5565c8b5a57cfe5d5db2d7cafbf6dd7aff7f3f17", - "de": "bab200d1e3f1a0207858317f5565c8b5a57cfe5d5db2d7cafbf6dd7aff7f3f17", - "es": "bab200d1e3f1a0207858317f5565c8b5a57cfe5d5db2d7cafbf6dd7aff7f3f17", - "it": "bab200d1e3f1a0207858317f5565c8b5a57cfe5d5db2d7cafbf6dd7aff7f3f17" - }, - "llmaas/licences/deepseek-r1_671b.licence.md": { - "en": "a4b40acd2721dde65aff3766e839f4091084fc79cab340e9d0628b4fdf1945f0", - "de": "a4b40acd2721dde65aff3766e839f4091084fc79cab340e9d0628b4fdf1945f0", - "es": "a4b40acd2721dde65aff3766e839f4091084fc79cab340e9d0628b4fdf1945f0", - "it": "a4b40acd2721dde65aff3766e839f4091084fc79cab340e9d0628b4fdf1945f0" - }, - "llmaas/licences/cogito_14b.licence.md": { - "en": "0616851d14f5d3f5d0f1e8d7770a3410491ed0120f4eb68e3d0685ec5b41bc17", - "de": "0616851d14f5d3f5d0f1e8d7770a3410491ed0120f4eb68e3d0685ec5b41bc17", - "es": "0616851d14f5d3f5d0f1e8d7770a3410491ed0120f4eb68e3d0685ec5b41bc17", - "it": "0616851d14f5d3f5d0f1e8d7770a3410491ed0120f4eb68e3d0685ec5b41bc17" - }, - "llmaas/licences/deepcoder_14b.licence.md": { - "en": "6992a2566a6104fc717b567c27ce2122cd735ae0f740f924ac29fad59fbf5c16", - "de": "6992a2566a6104fc717b567c27ce2122cd735ae0f740f924ac29fad59fbf5c16", - "es": "6992a2566a6104fc717b567c27ce2122cd735ae0f740f924ac29fad59fbf5c16", - "it": "6992a2566a6104fc717b567c27ce2122cd735ae0f740f924ac29fad59fbf5c16" - }, - "llmaas/licences/cogito_8b.licence.md": { - "en": "f0673bb6d92cb8381dc024397f91dda9363853b44a42a69f2c0e87569479565a", - "de": "f0673bb6d92cb8381dc024397f91dda9363853b44a42a69f2c0e87569479565a", - "es": "f0673bb6d92cb8381dc024397f91dda9363853b44a42a69f2c0e87569479565a", - "it": "f0673bb6d92cb8381dc024397f91dda9363853b44a42a69f2c0e87569479565a" - }, - "llmaas/licences/deepseek-r1_14b.licence.md": { - "en": "6761a4b388ee5f5f7698c87a0612cba6215e4f4c31ffc3e4fcc9c4341af96be6", - "de": "6761a4b388ee5f5f7698c87a0612cba6215e4f4c31ffc3e4fcc9c4341af96be6", - "es": "6761a4b388ee5f5f7698c87a0612cba6215e4f4c31ffc3e4fcc9c4341af96be6", - "it": "6761a4b388ee5f5f7698c87a0612cba6215e4f4c31ffc3e4fcc9c4341af96be6" - }, - "llmaas/licences/deepseek-r1_32b.licence.md": { - "en": "63fcdec22b3acd5adf2113265de36812efcda91279bb8e7edbebcf107378bc61", - "de": "63fcdec22b3acd5adf2113265de36812efcda91279bb8e7edbebcf107378bc61", - "es": "63fcdec22b3acd5adf2113265de36812efcda91279bb8e7edbebcf107378bc61", - "it": "63fcdec22b3acd5adf2113265de36812efcda91279bb8e7edbebcf107378bc61" - }, - "llmaas/licences/cogito_32b.licence.md": { - "en": "745d75733594fa04e9fdb4bc6a7e12eeadcb763aab86f87cfc2905a63eaf01fd", - "de": "745d75733594fa04e9fdb4bc6a7e12eeadcb763aab86f87cfc2905a63eaf01fd", - "es": "745d75733594fa04e9fdb4bc6a7e12eeadcb763aab86f87cfc2905a63eaf01fd", - "it": "745d75733594fa04e9fdb4bc6a7e12eeadcb763aab86f87cfc2905a63eaf01fd" - }, - "llmaas/licences/devstral_24b.licence.md": { - "en": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "de": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "es": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "it": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa" - }, - "llmaas/licences/granite3-guardian_2b.licence.md": { - "en": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "de": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "es": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "it": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa" - }, - "llmaas/licences/granite-embedding_278m.licence.md": { - "en": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "de": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "es": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "it": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa" - }, - "llmaas/licences/gemma3_4b.licence.md": { - "en": "1d83fc9a080d492b119666ca5c098062b29eb60f017ca708d68e8e3ec89a434a", - "de": "1d83fc9a080d492b119666ca5c098062b29eb60f017ca708d68e8e3ec89a434a", - "es": "1d83fc9a080d492b119666ca5c098062b29eb60f017ca708d68e8e3ec89a434a", - "it": "1d83fc9a080d492b119666ca5c098062b29eb60f017ca708d68e8e3ec89a434a" - }, - "llmaas/licences/deepseek-r1_70b.licence.md": { - "en": "58eb1c9d8287dd3194753c96cf603f90088a61d336d87f90f24ecccededfd373", - "de": "58eb1c9d8287dd3194753c96cf603f90088a61d336d87f90f24ecccededfd373", - "es": "58eb1c9d8287dd3194753c96cf603f90088a61d336d87f90f24ecccededfd373", - "it": "58eb1c9d8287dd3194753c96cf603f90088a61d336d87f90f24ecccededfd373" - }, - "llmaas/licences/gemma3_27b.licence.md": { - "en": "e51bab2018292c7ab160c6a652930c4247526db5733a5665e075494bf267f46a", - "de": "e51bab2018292c7ab160c6a652930c4247526db5733a5665e075494bf267f46a", - "es": "e51bab2018292c7ab160c6a652930c4247526db5733a5665e075494bf267f46a", - "it": "e51bab2018292c7ab160c6a652930c4247526db5733a5665e075494bf267f46a" - }, - "llmaas/licences/gemma3_12b.licence.md": { - "en": "e51bab2018292c7ab160c6a652930c4247526db5733a5665e075494bf267f46a", - "de": "e51bab2018292c7ab160c6a652930c4247526db5733a5665e075494bf267f46a", - "es": "e51bab2018292c7ab160c6a652930c4247526db5733a5665e075494bf267f46a", - "it": "e51bab2018292c7ab160c6a652930c4247526db5733a5665e075494bf267f46a" - }, - "llmaas/licences/gemma3_1b.licence.md": { - "en": "c089861664d47f8c30f7e9edc5665825406e16af535e0e5411aa0dfc42fa232f", - "de": "c089861664d47f8c30f7e9edc5665825406e16af535e0e5411aa0dfc42fa232f", - "es": "c089861664d47f8c30f7e9edc5665825406e16af535e0e5411aa0dfc42fa232f", - "it": "c089861664d47f8c30f7e9edc5665825406e16af535e0e5411aa0dfc42fa232f" - }, - "llmaas/licences/granite3.1-moe_3b.licence.md": { - "en": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "de": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "es": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "it": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa" - }, - "llmaas/licences/granite3-guardian_8b.licence.md": { - "en": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "de": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "es": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "it": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa" - }, - "llmaas/licences/granite3.3_2b.licence.md": { - "en": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "de": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "es": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "it": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa" - }, - "llmaas/licences/llama3.3_70b.licence.md": { - "en": "5c3e76d95c8e5a150b18e279fb854d1778d961a53cb42e0835cdd32405ae49e7", - "de": "5c3e76d95c8e5a150b18e279fb854d1778d961a53cb42e0835cdd32405ae49e7", - "es": "5c3e76d95c8e5a150b18e279fb854d1778d961a53cb42e0835cdd32405ae49e7", - "it": "5c3e76d95c8e5a150b18e279fb854d1778d961a53cb42e0835cdd32405ae49e7" - }, - "llmaas/licences/granite3.3_8b.licence.md": { - "en": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "de": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "es": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "it": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa" - }, - "llmaas/licences/granite3.2-vision_2b.licence.md": { - "en": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "de": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "es": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "it": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa" - }, - "llmaas/licences/granite3.1-moe_2b.licence.md": { - "en": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "de": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "es": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa", - "it": "9a2f5e9bd37f8c5a70d0997dcf34e26a6805cddb4b8a52131e5f1765e03890aa" - }, - "llmaas/licences/llama3.1_8b.licence.md": { - "en": "647f08d0514c27cc79ffd717796fab403fb9899f9019d2651fd0d1e53b5e1789", - "de": "647f08d0514c27cc79ffd717796fab403fb9899f9019d2651fd0d1e53b5e1789", - "es": "647f08d0514c27cc79ffd717796fab403fb9899f9019d2651fd0d1e53b5e1789", - "it": "647f08d0514c27cc79ffd717796fab403fb9899f9019d2651fd0d1e53b5e1789" - }, - "llmaas/licences/qwen2.5_0.5b.licence.md": { - "en": "34b4884fbe096ff8386ea5bc6084c8df3c3e69b704217a3bccc20eeb1a115299", - "de": "34b4884fbe096ff8386ea5bc6084c8df3c3e69b704217a3bccc20eeb1a115299", - "es": "34b4884fbe096ff8386ea5bc6084c8df3c3e69b704217a3bccc20eeb1a115299", - "it": "34b4884fbe096ff8386ea5bc6084c8df3c3e69b704217a3bccc20eeb1a115299" - }, - "llmaas/licences/qwen2.5_14b.licence.md": { - "en": "9be031999fb27f54582a9a835481046f9499352f1e708394885bdfceb545b6e0", - "de": "9be031999fb27f54582a9a835481046f9499352f1e708394885bdfceb545b6e0", - "es": "9be031999fb27f54582a9a835481046f9499352f1e708394885bdfceb545b6e0", - "it": "9be031999fb27f54582a9a835481046f9499352f1e708394885bdfceb545b6e0" - }, - "llmaas/licences/qwen2.5_1.5b.licence.md": { - "en": "4478b3328515a8310c7170a59fa7ccab8875d54f64e7fec5ab9640ae20cda5eb", - "de": "4478b3328515a8310c7170a59fa7ccab8875d54f64e7fec5ab9640ae20cda5eb", - "es": "4478b3328515a8310c7170a59fa7ccab8875d54f64e7fec5ab9640ae20cda5eb", - "it": "4478b3328515a8310c7170a59fa7ccab8875d54f64e7fec5ab9640ae20cda5eb" - }, - "llmaas/licences/phi4-reasoning_14b.licence.md": { - "en": "a17ee9cd902a8263b372ffa786d6a12ca9b0484af8c2d038c297e6c1fdffa132", - "de": "a17ee9cd902a8263b372ffa786d6a12ca9b0484af8c2d038c297e6c1fdffa132", - "es": "a17ee9cd902a8263b372ffa786d6a12ca9b0484af8c2d038c297e6c1fdffa132", - "it": "a17ee9cd902a8263b372ffa786d6a12ca9b0484af8c2d038c297e6c1fdffa132" - }, - "llmaas/licences/qwen2.5_3b.licence.md": { - "en": "0305550fe7eb4ed24033fd541cd76d14f78d08cc429b8a6145f0eebc9bb01bf2", - "de": "0305550fe7eb4ed24033fd541cd76d14f78d08cc429b8a6145f0eebc9bb01bf2", - "es": "0305550fe7eb4ed24033fd541cd76d14f78d08cc429b8a6145f0eebc9bb01bf2", - "it": "0305550fe7eb4ed24033fd541cd76d14f78d08cc429b8a6145f0eebc9bb01bf2" - }, - "llmaas/licences/qwen2.5vl_32b.licence.md": { - "en": "d62534056719aa9c0fcac22e4077d084e5b343da08b41627a440ee90652805ef", - "de": "d62534056719aa9c0fcac22e4077d084e5b343da08b41627a440ee90652805ef", - "es": "d62534056719aa9c0fcac22e4077d084e5b343da08b41627a440ee90652805ef", - "it": "d62534056719aa9c0fcac22e4077d084e5b343da08b41627a440ee90652805ef" - }, - "llmaas/licences/qwen2.5_32b.licence.md": { - "en": "a6280f65900607402c7ea2b67a4bb66727996f143f5edb3957aa5faffcf2c1f6", - "de": "a6280f65900607402c7ea2b67a4bb66727996f143f5edb3957aa5faffcf2c1f6", - "es": "a6280f65900607402c7ea2b67a4bb66727996f143f5edb3957aa5faffcf2c1f6", - "it": "a6280f65900607402c7ea2b67a4bb66727996f143f5edb3957aa5faffcf2c1f6" - }, - "llmaas/licences/qwen2.5vl_3b.licence.md": { - "en": "9f941cdb26e8bbe189d102f69c48f63eb48b43737f53bac2e541db5c4b9c8974", - "de": "9f941cdb26e8bbe189d102f69c48f63eb48b43737f53bac2e541db5c4b9c8974", - "es": "9f941cdb26e8bbe189d102f69c48f63eb48b43737f53bac2e541db5c4b9c8974", - "it": "9f941cdb26e8bbe189d102f69c48f63eb48b43737f53bac2e541db5c4b9c8974" - }, - "llmaas/licences/qwen2.5vl_7b.licence.md": { - "en": "41ccd5ea371ffc526307072a3a2dee29a43ab99412d800a466175778c6b7e960", - "de": "41ccd5ea371ffc526307072a3a2dee29a43ab99412d800a466175778c6b7e960", - "es": "41ccd5ea371ffc526307072a3a2dee29a43ab99412d800a466175778c6b7e960", - "it": "41ccd5ea371ffc526307072a3a2dee29a43ab99412d800a466175778c6b7e960" - }, - "llmaas/licences/qwen3_14b.licence.md": { - "en": "bfd87fc6ee6e4650315219bb9fdeec8c944e68593fc38b02f89ffe06f045fa71", - "de": "bfd87fc6ee6e4650315219bb9fdeec8c944e68593fc38b02f89ffe06f045fa71", - "es": "bfd87fc6ee6e4650315219bb9fdeec8c944e68593fc38b02f89ffe06f045fa71", - "it": "bfd87fc6ee6e4650315219bb9fdeec8c944e68593fc38b02f89ffe06f045fa71" - }, - "llmaas/licences/qwen3_4b.licence.md": { - "en": "0b572eb84eef0ef078d28539c0f076487a6e59be62ff535cbc48b396ba605986", - "de": "0b572eb84eef0ef078d28539c0f076487a6e59be62ff535cbc48b396ba605986", - "es": "0b572eb84eef0ef078d28539c0f076487a6e59be62ff535cbc48b396ba605986", - "it": "0b572eb84eef0ef078d28539c0f076487a6e59be62ff535cbc48b396ba605986" - }, - "llmaas/licences/qwen3_8b.licence.md": { - "en": "9625a9fc12cd3b8a604705a75af5d14a1fff363fa06dc1709a3ed107a4bf8a2d", - "de": "9625a9fc12cd3b8a604705a75af5d14a1fff363fa06dc1709a3ed107a4bf8a2d", - "es": "9625a9fc12cd3b8a604705a75af5d14a1fff363fa06dc1709a3ed107a4bf8a2d", - "it": "9625a9fc12cd3b8a604705a75af5d14a1fff363fa06dc1709a3ed107a4bf8a2d" - }, - "llmaas/licences/qwen3_1.7b.licence.md": { - "en": "12fc90019613e25b05640ab19fa0ee345136f9a030262774d93ccd5aa8a893da", - "de": "12fc90019613e25b05640ab19fa0ee345136f9a030262774d93ccd5aa8a893da", - "es": "12fc90019613e25b05640ab19fa0ee345136f9a030262774d93ccd5aa8a893da", - "it": "12fc90019613e25b05640ab19fa0ee345136f9a030262774d93ccd5aa8a893da" - }, - "llmaas/licences/qwen3_32b.licence.md": { - "en": "d4ca33a00c0c3f0a0a73dd20aa1bf5f0a14e51a9c4a66200fae33cd9095c8c66", - "de": "d4ca33a00c0c3f0a0a73dd20aa1bf5f0a14e51a9c4a66200fae33cd9095c8c66", - "es": "d4ca33a00c0c3f0a0a73dd20aa1bf5f0a14e51a9c4a66200fae33cd9095c8c66", - "it": "d4ca33a00c0c3f0a0a73dd20aa1bf5f0a14e51a9c4a66200fae33cd9095c8c66" - }, - "llmaas/licences/qwen3_0.6b.licence.md": { - "en": "81a8dc21bbfecb2d5301b9ab51bca4c92b10426be665c6922a8206d549d40c54", - "de": "81a8dc21bbfecb2d5301b9ab51bca4c92b10426be665c6922a8206d549d40c54", - "es": "81a8dc21bbfecb2d5301b9ab51bca4c92b10426be665c6922a8206d549d40c54", - "it": "81a8dc21bbfecb2d5301b9ab51bca4c92b10426be665c6922a8206d549d40c54" - }, - "llmaas/licences/qwen3_235b.licence.md": { - "en": "a393c884974671a7721d3cfb9ae93c0363a4e25e6dd868c8a52922a90146f642", - "de": "a393c884974671a7721d3cfb9ae93c0363a4e25e6dd868c8a52922a90146f642", - "es": "a393c884974671a7721d3cfb9ae93c0363a4e25e6dd868c8a52922a90146f642", - "it": "a393c884974671a7721d3cfb9ae93c0363a4e25e6dd868c8a52922a90146f642" - }, - "llmaas/quickstart.md": { - "en": "39eed24555f539e7758c0223096d31fa618c8044af1d296ff49e77880984887e", - "de": "39eed24555f539e7758c0223096d31fa618c8044af1d296ff49e77880984887e", - "es": "39eed24555f539e7758c0223096d31fa618c8044af1d296ff49e77880984887e", - "it": "39eed24555f539e7758c0223096d31fa618c8044af1d296ff49e77880984887e" - }, - "llmaas/tutorials.md": { - "en": "f2b2cc8a50af27d3d6eac4b74795cd4f933e380cef7f25d9fd92c5d2f424881e", - "de": "f2b2cc8a50af27d3d6eac4b74795cd4f933e380cef7f25d9fd92c5d2f424881e", - "es": "f2b2cc8a50af27d3d6eac4b74795cd4f933e380cef7f25d9fd92c5d2f424881e", - "it": "f2b2cc8a50af27d3d6eac4b74795cd4f933e380cef7f25d9fd92c5d2f424881e" + "iaas_vmware/tutorials/vm_encryption.md": { + "en": "1cfb170e2b26885bb8165067de8a62247ab8437c433af57649e7a7917ae15a82", + "de": "1cfb170e2b26885bb8165067de8a62247ab8437c433af57649e7a7917ae15a82", + "es": "1cfb170e2b26885bb8165067de8a62247ab8437c433af57649e7a7917ae15a82", + "it": "1cfb170e2b26885bb8165067de8a62247ab8437c433af57649e7a7917ae15a82" }, - "network/internet/concepts.md": { - "en": "23b2568cc386be4030c6227e3e1de4eacce38a6d47ea39a67e9e74b36824e436", - "de": "23b2568cc386be4030c6227e3e1de4eacce38a6d47ea39a67e9e74b36824e436", - "es": "23b2568cc386be4030c6227e3e1de4eacce38a6d47ea39a67e9e74b36824e436", - "it": "23b2568cc386be4030c6227e3e1de4eacce38a6d47ea39a67e9e74b36824e436" + "llmaas/api.md": { + "en": "4b3006ac798c5ca352dd57a76acc8f9c5c524153070428c512ab7afdf9afdc4a", + "de": "4b3006ac798c5ca352dd57a76acc8f9c5c524153070428c512ab7afdf9afdc4a", + "es": "4b3006ac798c5ca352dd57a76acc8f9c5c524153070428c512ab7afdf9afdc4a", + "it": "4b3006ac798c5ca352dd57a76acc8f9c5c524153070428c512ab7afdf9afdc4a" }, - "market_place_public.md": { - "en": "bbc2021736b25948e141aa4a513329c400ca93159b576c6d1621025be35ca0f6", - "de": "bbc2021736b25948e141aa4a513329c400ca93159b576c6d1621025be35ca0f6", - "es": "bbc2021736b25948e141aa4a513329c400ca93159b576c6d1621025be35ca0f6", - "it": "bbc2021736b25948e141aa4a513329c400ca93159b576c6d1621025be35ca0f6" + "llmaas/batch.md": { + "en": "e3033683b7d1ad80e5c46a68ffa9b3cc31f13ae79a16434c9cc2419f76398da0", + "de": "e3033683b7d1ad80e5c46a68ffa9b3cc31f13ae79a16434c9cc2419f76398da0", + "es": "e3033683b7d1ad80e5c46a68ffa9b3cc31f13ae79a16434c9cc2419f76398da0", + "it": "e3033683b7d1ad80e5c46a68ffa9b3cc31f13ae79a16434c9cc2419f76398da0" }, - "llmaas/licences/qwq_32b.licence.md": { - "en": "fa722ffcc9c5777f49cdd170b1e32552554aea61c4914051fa9d7d00c4322eb1", - "de": "fa722ffcc9c5777f49cdd170b1e32552554aea61c4914051fa9d7d00c4322eb1", - "es": "fa722ffcc9c5777f49cdd170b1e32552554aea61c4914051fa9d7d00c4322eb1", - "it": "fa722ffcc9c5777f49cdd170b1e32552554aea61c4914051fa9d7d00c4322eb1" + "llmaas/concepts.md": { + "en": "8b20b30233a272fcedba9251b27c6f837680075c1d0493f8fd6dd46bcbaa83c9", + "de": "8b20b30233a272fcedba9251b27c6f837680075c1d0493f8fd6dd46bcbaa83c9", + "es": "8b20b30233a272fcedba9251b27c6f837680075c1d0493f8fd6dd46bcbaa83c9", + "it": "8b20b30233a272fcedba9251b27c6f837680075c1d0493f8fd6dd46bcbaa83c9" }, - "network/internet/internet.md": { - "en": "db3ce2f58eb5184299852c59f20707572900010f4605f3c956231106de38952f", - "de": "db3ce2f58eb5184299852c59f20707572900010f4605f3c956231106de38952f", - "es": "db3ce2f58eb5184299852c59f20707572900010f4605f3c956231106de38952f", - "it": "db3ce2f58eb5184299852c59f20707572900010f4605f3c956231106de38952f" + "llmaas/faq.md": { + "en": "230f6dcc4767cc1872470388153121689cd4c17c04d89407c5fbc9123b877f91", + "de": "230f6dcc4767cc1872470388153121689cd4c17c04d89407c5fbc9123b877f91", + "es": "230f6dcc4767cc1872470388153121689cd4c17c04d89407c5fbc9123b877f91", + "it": "230f6dcc4767cc1872470388153121689cd4c17c04d89407c5fbc9123b877f91" }, "llmaas/llmaas.md": { - "en": "c982586c414e83ea3f3c62707801272b7903fbe9dad5b4a4d447c7da7892c5d6", - "de": "c982586c414e83ea3f3c62707801272b7903fbe9dad5b4a4d447c7da7892c5d6", - "es": "c982586c414e83ea3f3c62707801272b7903fbe9dad5b4a4d447c7da7892c5d6", - "it": "c982586c414e83ea3f3c62707801272b7903fbe9dad5b4a4d447c7da7892c5d6" + "en": "1f2d6c5d1769e9f55f1aef60a6c248030b4869d782065fa2a94b0a42f1c8be45", + "de": "1f2d6c5d1769e9f55f1aef60a6c248030b4869d782065fa2a94b0a42f1c8be45", + "es": "1f2d6c5d1769e9f55f1aef60a6c248030b4869d782065fa2a94b0a42f1c8be45", + "it": "1f2d6c5d1769e9f55f1aef60a6c248030b4869d782065fa2a94b0a42f1c8be45" }, "llmaas/models.md": { - "en": "4feb1ee60b7e1edbbb1b7c63ad6ec224e5777f668275965a2ab8bc334bb184a5", - "de": "4feb1ee60b7e1edbbb1b7c63ad6ec224e5777f668275965a2ab8bc334bb184a5", - "es": "4feb1ee60b7e1edbbb1b7c63ad6ec224e5777f668275965a2ab8bc334bb184a5", - "it": "4feb1ee60b7e1edbbb1b7c63ad6ec224e5777f668275965a2ab8bc334bb184a5" - }, - "network/private_network/tutorials.md": { - "en": "3129859075ff7dde2682afa48dd26621529a60e627c5ddff45268dcddd88c203", - "de": "3129859075ff7dde2682afa48dd26621529a60e627c5ddff45268dcddd88c203", - "es": "3129859075ff7dde2682afa48dd26621529a60e627c5ddff45268dcddd88c203", - "it": "3129859075ff7dde2682afa48dd26621529a60e627c5ddff45268dcddd88c203" + "en": "1b16c78beaed21564c7ac7fc7a56436da16a7846412f1fceeb520e68758593c2", + "de": "1b16c78beaed21564c7ac7fc7a56436da16a7846412f1fceeb520e68758593c2", + "es": "1b16c78beaed21564c7ac7fc7a56436da16a7846412f1fceeb520e68758593c2", + "it": "1b16c78beaed21564c7ac7fc7a56436da16a7846412f1fceeb520e68758593c2" }, - "network/private_network/private_network.md": { - "en": "58dee5c452c37d68b45398b72a7e5b9cbe40e0df8f5e142687dc00f31b9ce153", - "de": "58dee5c452c37d68b45398b72a7e5b9cbe40e0df8f5e142687dc00f31b9ce153", - "es": "58dee5c452c37d68b45398b72a7e5b9cbe40e0df8f5e142687dc00f31b9ce153", - "it": "58dee5c452c37d68b45398b72a7e5b9cbe40e0df8f5e142687dc00f31b9ce153" + "llmaas/ocr.md": { + "en": "24dd9d6569bcbdb664734729afc5776b24258b2addcbbd1d91f5b74505c0fe96", + "de": "24dd9d6569bcbdb664734729afc5776b24258b2addcbbd1d91f5b74505c0fe96", + "es": "24dd9d6569bcbdb664734729afc5776b24258b2addcbbd1d91f5b74505c0fe96", + "it": "24dd9d6569bcbdb664734729afc5776b24258b2addcbbd1d91f5b74505c0fe96" }, - "network/internet/tutorials/forti.md": { - "en": "a21974275e6dcea3f608ece23529f9693e002833f6b0ccfe52decf5f07558726", - "de": "a21974275e6dcea3f608ece23529f9693e002833f6b0ccfe52decf5f07558726", - "es": "a21974275e6dcea3f608ece23529f9693e002833f6b0ccfe52decf5f07558726", - "it": "a21974275e6dcea3f608ece23529f9693e002833f6b0ccfe52decf5f07558726" + "llmaas/quickstart.md": { + "en": "a3984eedebc6da0f6d233ccebd6ddda3c44089ebb741456ee32f24b7ad41b432", + "de": "a3984eedebc6da0f6d233ccebd6ddda3c44089ebb741456ee32f24b7ad41b432", + "es": "a3984eedebc6da0f6d233ccebd6ddda3c44089ebb741456ee32f24b7ad41b432", + "it": "a3984eedebc6da0f6d233ccebd6ddda3c44089ebb741456ee32f24b7ad41b432" }, - "network/internet/quickstart.md": { - "en": "f4b32003e20f5e6ea54f7460d0b1e1181dc6956d2b9d8e786bf7fd96965b61de", - "de": "f4b32003e20f5e6ea54f7460d0b1e1181dc6956d2b9d8e786bf7fd96965b61de", - "es": "f4b32003e20f5e6ea54f7460d0b1e1181dc6956d2b9d8e786bf7fd96965b61de", - "it": "f4b32003e20f5e6ea54f7460d0b1e1181dc6956d2b9d8e786bf7fd96965b61de" + "llmaas/rag_explained.md": { + "en": "162c342afa4e75f8730f1dad545ad97e5faffa7e7538441e3e9bffb4127b7cf7", + "de": "162c342afa4e75f8730f1dad545ad97e5faffa7e7538441e3e9bffb4127b7cf7", + "es": "162c342afa4e75f8730f1dad545ad97e5faffa7e7538441e3e9bffb4127b7cf7", + "it": "162c342afa4e75f8730f1dad545ad97e5faffa7e7538441e3e9bffb4127b7cf7" }, - "paas_openshift/concepts.md": { - "en": "755fb1e1eb841461da6158e0f04c7eb3aa4b74cc1334f9394b6e84999577ec57", - "de": "755fb1e1eb841461da6158e0f04c7eb3aa4b74cc1334f9394b6e84999577ec57", - "es": "755fb1e1eb841461da6158e0f04c7eb3aa4b74cc1334f9394b6e84999577ec57", - "it": "755fb1e1eb841461da6158e0f04c7eb3aa4b74cc1334f9394b6e84999577ec57" + "llmaas/rerank.md": { + "en": "58c2b5feaa310a909a3d0c3e6a1454d94f830f6ddf00b04c7e34597e56cfdc87", + "de": "58c2b5feaa310a909a3d0c3e6a1454d94f830f6ddf00b04c7e34597e56cfdc87", + "es": "58c2b5feaa310a909a3d0c3e6a1454d94f830f6ddf00b04c7e34597e56cfdc87", + "it": "58c2b5feaa310a909a3d0c3e6a1454d94f830f6ddf00b04c7e34597e56cfdc87" }, - "network/private_network/concepts.md": { - "en": "60e7c424c08e19463c55702e85cff9d985be3facd85364fa3d48a44a6a528df8", - "de": "60e7c424c08e19463c55702e85cff9d985be3facd85364fa3d48a44a6a528df8", - "es": "60e7c424c08e19463c55702e85cff9d985be3facd85364fa3d48a44a6a528df8", - "it": "60e7c424c08e19463c55702e85cff9d985be3facd85364fa3d48a44a6a528df8" + "llmaas/tutorials.md": { + "en": "ffb7e6f257a44d999881f783ad0090f55ae9b5ca49ed68c49eba273e04553469", + "de": "ffb7e6f257a44d999881f783ad0090f55ae9b5ca49ed68c49eba273e04553469", + "es": "ffb7e6f257a44d999881f783ad0090f55ae9b5ca49ed68c49eba273e04553469", + "it": "ffb7e6f257a44d999881f783ad0090f55ae9b5ca49ed68c49eba273e04553469" }, - "network/private_network/quickstart.md": { - "en": "5461a6248495464e005fc046e5d0629109dce54728aa8c131a0e145667b5f7e8", - "de": "5461a6248495464e005fc046e5d0629109dce54728aa8c131a0e145667b5f7e8", - "es": "5461a6248495464e005fc046e5d0629109dce54728aa8c131a0e145667b5f7e8", - "it": "5461a6248495464e005fc046e5d0629109dce54728aa8c131a0e145667b5f7e8" + "managed_kubernetes/concepts.md": { + "en": "e635db629d8230906fd2c24abcbed41fc72c802b27cb5cedb37b4c43c0c3192f", + "de": "e635db629d8230906fd2c24abcbed41fc72c802b27cb5cedb37b4c43c0c3192f", + "es": "e635db629d8230906fd2c24abcbed41fc72c802b27cb5cedb37b4c43c0c3192f", + "it": "e635db629d8230906fd2c24abcbed41fc72c802b27cb5cedb37b4c43c0c3192f" }, - "network/internet/tutorials/pfSense.md": { - "en": "fa891e6cb0b0d37249d1dcea379582c338e959db4a1015f8fc4d45763ad4165f", - "de": "fa891e6cb0b0d37249d1dcea379582c338e959db4a1015f8fc4d45763ad4165f", - "es": "fa891e6cb0b0d37249d1dcea379582c338e959db4a1015f8fc4d45763ad4165f", - "it": "fa891e6cb0b0d37249d1dcea379582c338e959db4a1015f8fc4d45763ad4165f" + "managed_kubernetes/managed_core_kubernetes.md": { + "en": "2b5bb0920aa123fedb3c3b32c045eebfca6d4246a8a63e9ee740892ffd4e2d4c", + "de": "2b5bb0920aa123fedb3c3b32c045eebfca6d4246a8a63e9ee740892ffd4e2d4c", + "es": "2b5bb0920aa123fedb3c3b32c045eebfca6d4246a8a63e9ee740892ffd4e2d4c", + "it": "2b5bb0920aa123fedb3c3b32c045eebfca6d4246a8a63e9ee740892ffd4e2d4c" }, - "paas_openshift/paas_openshift.md": { - "en": "c24c84b7dd2e82a31cec1446003dda0e9dd2660ce1c4fd4cb448a3cc1370011c", - "de": "c24c84b7dd2e82a31cec1446003dda0e9dd2660ce1c4fd4cb448a3cc1370011c", - "es": "c24c84b7dd2e82a31cec1446003dda0e9dd2660ce1c4fd4cb448a3cc1370011c", - "it": "c24c84b7dd2e82a31cec1446003dda0e9dd2660ce1c4fd4cb448a3cc1370011c" + "managed_kubernetes/managed_kubernetes.md": { + "en": "56f627452754875f65319e3a25da00a162bf722baed236d2ed6484d2b28624d0", + "de": "56f627452754875f65319e3a25da00a162bf722baed236d2ed6484d2b28624d0", + "es": "56f627452754875f65319e3a25da00a162bf722baed236d2ed6484d2b28624d0", + "it": "56f627452754875f65319e3a25da00a162bf722baed236d2ed6484d2b28624d0" }, - "paas_openshift/tutorials/using-kasten.md": { - "en": "3e02f4c3071d05c8f9f8240b95a7f159b2710811333f91eaaac2f49c795618aa", - "de": "3e02f4c3071d05c8f9f8240b95a7f159b2710811333f91eaaac2f49c795618aa", - "es": "3e02f4c3071d05c8f9f8240b95a7f159b2710811333f91eaaac2f49c795618aa", - "it": "3e02f4c3071d05c8f9f8240b95a7f159b2710811333f91eaaac2f49c795618aa" + "managed_kubernetes/quickstart.md": { + "en": "fde0faf47a49061b775d46275863c709a0796bd4d2a1da3a6b0de0919296e198", + "de": "fde0faf47a49061b775d46275863c709a0796bd4d2a1da3a6b0de0919296e198", + "es": "fde0faf47a49061b775d46275863c709a0796bd4d2a1da3a6b0de0919296e198", + "it": "fde0faf47a49061b775d46275863c709a0796bd4d2a1da3a6b0de0919296e198" }, - "paas_openshift/tutorials/deploy-through-helmfile.md": { - "en": "a733d6a6baf97b08f8a496496c207af98fd7cd6ed2f9b822dbcbc7d893ecd113", - "de": "a733d6a6baf97b08f8a496496c207af98fd7cd6ed2f9b822dbcbc7d893ecd113", - "es": "a733d6a6baf97b08f8a496496c207af98fd7cd6ed2f9b822dbcbc7d893ecd113", - "it": "a733d6a6baf97b08f8a496496c207af98fd7cd6ed2f9b822dbcbc7d893ecd113" + "managed_kubernetes/tutorials/firstdeploy.md": { + "en": "b72a65693bf9806eaa6a4af8f1e311060ad315e4fc2e6e0f945bf52642e33a6c", + "de": "b72a65693bf9806eaa6a4af8f1e311060ad315e4fc2e6e0f945bf52642e33a6c", + "es": "b72a65693bf9806eaa6a4af8f1e311060ad315e4fc2e6e0f945bf52642e33a6c", + "it": "b72a65693bf9806eaa6a4af8f1e311060ad315e4fc2e6e0f945bf52642e33a6c" }, - "storage/oss/concepts.md": { - "en": "eb48921e87fc9aa77af5cd00006b239fd1a706b28026b68495bfb7bae12b0c39", - "de": "eb48921e87fc9aa77af5cd00006b239fd1a706b28026b68495bfb7bae12b0c39", - "es": "eb48921e87fc9aa77af5cd00006b239fd1a706b28026b68495bfb7bae12b0c39", - "it": "eb48921e87fc9aa77af5cd00006b239fd1a706b28026b68495bfb7bae12b0c39" + "managed_kubernetes/tutorials/networking.md": { + "en": "084a65e63aab5f5dbb2b20aa489df228f42874bd0ed588663a1f870f1fde5002", + "de": "084a65e63aab5f5dbb2b20aa489df228f42874bd0ed588663a1f870f1fde5002", + "es": "084a65e63aab5f5dbb2b20aa489df228f42874bd0ed588663a1f870f1fde5002", + "it": "084a65e63aab5f5dbb2b20aa489df228f42874bd0ed588663a1f870f1fde5002" }, - "paas_openshift/quickstart.md": { - "en": "944b023317e18bd422e00fbc66eb0166e82dedcbf02624aee0bc0817235ca790", - "de": "944b023317e18bd422e00fbc66eb0166e82dedcbf02624aee0bc0817235ca790", - "es": "944b023317e18bd422e00fbc66eb0166e82dedcbf02624aee0bc0817235ca790", - "it": "944b023317e18bd422e00fbc66eb0166e82dedcbf02624aee0bc0817235ca790" + "managed_kubernetes/tutorials/usingargocd.md": { + "en": "70ee02e5f3c210db721fbf7f060e808d0c59442b89369cc4cc7dff423e836ef6", + "de": "70ee02e5f3c210db721fbf7f060e808d0c59442b89369cc4cc7dff423e836ef6", + "es": "70ee02e5f3c210db721fbf7f060e808d0c59442b89369cc4cc7dff423e836ef6", + "it": "70ee02e5f3c210db721fbf7f060e808d0c59442b89369cc4cc7dff423e836ef6" }, - "privacy.md": { - "en": "03ce6808894a3b12567fc584a7cf355f64dbe8bb4dc78dfc829825517bbd2340", - "de": "03ce6808894a3b12567fc584a7cf355f64dbe8bb4dc78dfc829825517bbd2340", - "es": "03ce6808894a3b12567fc584a7cf355f64dbe8bb4dc78dfc829825517bbd2340", - "it": "03ce6808894a3b12567fc584a7cf355f64dbe8bb4dc78dfc829825517bbd2340" + "managed_kubernetes/tutorials/usingcapsule.md": { + "en": "0880dcd28dbfda933addaa876fd80cdbc39baaedcae56dc37b3843cb4cfa96b5", + "de": "0880dcd28dbfda933addaa876fd80cdbc39baaedcae56dc37b3843cb4cfa96b5", + "es": "0880dcd28dbfda933addaa876fd80cdbc39baaedcae56dc37b3843cb4cfa96b5", + "it": "0880dcd28dbfda933addaa876fd80cdbc39baaedcae56dc37b3843cb4cfa96b5" }, - "paas_openshift/tutorials/tutorials.md": { - "en": "93470d31a8855b3cb1b20793df414729dd58ac967085adbf551c0c943431d8d5", - "de": "93470d31a8855b3cb1b20793df414729dd58ac967085adbf551c0c943431d8d5", - "es": "93470d31a8855b3cb1b20793df414729dd58ac967085adbf551c0c943431d8d5", - "it": "93470d31a8855b3cb1b20793df414729dd58ac967085adbf551c0c943431d8d5" + "managed_kubernetes/tutorials/usinggapi.md": { + "en": "04554e6ca7176f7f80c73e543118d52099d41f1cc0c3cbae4c7fd794e678a5c8", + "de": "04554e6ca7176f7f80c73e543118d52099d41f1cc0c3cbae4c7fd794e678a5c8", + "es": "04554e6ca7176f7f80c73e543118d52099d41f1cc0c3cbae4c7fd794e678a5c8", + "it": "04554e6ca7176f7f80c73e543118d52099d41f1cc0c3cbae4c7fd794e678a5c8" }, - "paas_openshift/tutorials/deploy-vm-with-kubevirt.md": { - "en": "a7d30d8452bfb206365eb00f44de87f90c73025d0d7e103ee116c567289cc8b1", - "de": "a7d30d8452bfb206365eb00f44de87f90c73025d0d7e103ee116c567289cc8b1", - "es": "a7d30d8452bfb206365eb00f44de87f90c73025d0d7e103ee116c567289cc8b1", - "it": "a7d30d8452bfb206365eb00f44de87f90c73025d0d7e103ee116c567289cc8b1" + "managed_kubernetes/tutorials/usinggpu.md": { + "en": "5e292c6237d621c51dcf02577fced6a0d7ff654119da7f40288dd79f75fce05b", + "de": "5e292c6237d621c51dcf02577fced6a0d7ff654119da7f40288dd79f75fce05b", + "es": "5e292c6237d621c51dcf02577fced6a0d7ff654119da7f40288dd79f75fce05b", + "it": "5e292c6237d621c51dcf02577fced6a0d7ff654119da7f40288dd79f75fce05b" }, - "storage/oss/quickstart.md": { - "en": "e7931d3c74546f80070f837e21840be4301f1812786398d6e05af6ad6ee8f2af", - "de": "e7931d3c74546f80070f837e21840be4301f1812786398d6e05af6ad6ee8f2af", - "es": "e7931d3c74546f80070f837e21840be4301f1812786398d6e05af6ad6ee8f2af", - "it": "e7931d3c74546f80070f837e21840be4301f1812786398d6e05af6ad6ee8f2af" + "managed_kubernetes/tutorials/usingharbor.md": { + "en": "4a1c6c38724665d7363933cbcdb26391b556b18fc69bb36c6d6385d6d807aaff", + "de": "4a1c6c38724665d7363933cbcdb26391b556b18fc69bb36c6d6385d6d807aaff", + "es": "4a1c6c38724665d7363933cbcdb26391b556b18fc69bb36c6d6385d6d807aaff", + "it": "4a1c6c38724665d7363933cbcdb26391b556b18fc69bb36c6d6385d6d807aaff" }, - "storage/oss/oss.md": { - "en": "82169a5d37eeffe57709fdb364cfa605905aac9ed80ea87e812abd49954a756e", - "de": "82169a5d37eeffe57709fdb364cfa605905aac9ed80ea87e812abd49954a756e", - "es": "82169a5d37eeffe57709fdb364cfa605905aac9ed80ea87e812abd49954a756e", - "it": "82169a5d37eeffe57709fdb364cfa605905aac9ed80ea87e812abd49954a756e" + "managed_kubernetes/tutorials/usingkasten.md": { + "en": "c40d6914044f72ba8700536db9df0b9b0b2150a3a7bb59c577a7ccb11c7cbda6", + "de": "c40d6914044f72ba8700536db9df0b9b0b2150a3a7bb59c577a7ccb11c7cbda6", + "es": "c40d6914044f72ba8700536db9df0b9b0b2150a3a7bb59c577a7ccb11c7cbda6", + "it": "c40d6914044f72ba8700536db9df0b9b0b2150a3a7bb59c577a7ccb11c7cbda6" }, - "storage/oss/tutorials.md": { - "en": "458bfcabce2a2b35d387a7438085bd4ab933ee115a307851366cc06e2f34e161", - "de": "458bfcabce2a2b35d387a7438085bd4ab933ee115a307851366cc06e2f34e161", - "es": "458bfcabce2a2b35d387a7438085bd4ab933ee115a307851366cc06e2f34e161", - "it": "458bfcabce2a2b35d387a7438085bd4ab933ee115a307851366cc06e2f34e161" + "managed_kubernetes/tutorials/usingopencost.md": { + "en": "a157156c82be0fc6905904eb6dfb6b2993bc6bfbdc35e06da8fa58a83eec1c84", + "de": "a157156c82be0fc6905904eb6dfb6b2993bc6bfbdc35e06da8fa58a83eec1c84", + "es": "a157156c82be0fc6905904eb6dfb6b2993bc6bfbdc35e06da8fa58a83eec1c84", + "it": "a157156c82be0fc6905904eb6dfb6b2993bc6bfbdc35e06da8fa58a83eec1c84" + }, + "managed_mariadb/concepts.md": { + "en": "5ae1ca61c2f17de67560f7a2d197349ebce56872aff15184c749e988ae06d60b", + "de": "5ae1ca61c2f17de67560f7a2d197349ebce56872aff15184c749e988ae06d60b", + "es": "5ae1ca61c2f17de67560f7a2d197349ebce56872aff15184c749e988ae06d60b", + "it": "5ae1ca61c2f17de67560f7a2d197349ebce56872aff15184c749e988ae06d60b" + }, + "managed_mariadb/managed_mariadb.md": { + "en": "ec1e8e61974d90e66cd62fee8fe899ef4e3acc9ba7660532fac055c1e74df58a", + "de": "ec1e8e61974d90e66cd62fee8fe899ef4e3acc9ba7660532fac055c1e74df58a", + "es": "ec1e8e61974d90e66cd62fee8fe899ef4e3acc9ba7660532fac055c1e74df58a", + "it": "ec1e8e61974d90e66cd62fee8fe899ef4e3acc9ba7660532fac055c1e74df58a" + }, + "managed_mariadb/quickstart.md": { + "en": "a2052d961c1f3ac559d07418fc96349079e17f8cb5614498c8a4c2ae10645903", + "de": "a2052d961c1f3ac559d07418fc96349079e17f8cb5614498c8a4c2ae10645903", + "es": "a2052d961c1f3ac559d07418fc96349079e17f8cb5614498c8a4c2ae10645903", + "it": "a2052d961c1f3ac559d07418fc96349079e17f8cb5614498c8a4c2ae10645903" + }, + "managed_postgresql/concepts.md": { + "en": "7608ac60a84dc873e061645c2fe6664578c9b8feeae30e69e9d53d607b279910", + "de": "7608ac60a84dc873e061645c2fe6664578c9b8feeae30e69e9d53d607b279910", + "es": "7608ac60a84dc873e061645c2fe6664578c9b8feeae30e69e9d53d607b279910", + "it": "7608ac60a84dc873e061645c2fe6664578c9b8feeae30e69e9d53d607b279910" + }, + "managed_postgresql/managed_postgresql.md": { + "en": "5471de11b29a1623aa47c9ad783c18b6506f6ec84d88003016b7d01bd657959c", + "de": "5471de11b29a1623aa47c9ad783c18b6506f6ec84d88003016b7d01bd657959c", + "es": "5471de11b29a1623aa47c9ad783c18b6506f6ec84d88003016b7d01bd657959c", + "it": "5471de11b29a1623aa47c9ad783c18b6506f6ec84d88003016b7d01bd657959c" + }, + "managed_postgresql/quickstart.md": { + "en": "47145ba6073e47d34916d0746cebae698727c4e37f7420bd88d1dfbdd9b05174", + "de": "47145ba6073e47d34916d0746cebae698727c4e37f7420bd88d1dfbdd9b05174", + "es": "47145ba6073e47d34916d0746cebae698727c4e37f7420bd88d1dfbdd9b05174", + "it": "47145ba6073e47d34916d0746cebae698727c4e37f7420bd88d1dfbdd9b05174" + }, + "managedproducts_overview.md": { + "en": "fa9e89f2e4395fab1d490e2c71f6aa0e6094aec7ba22933f2ebeaf2b20e58021", + "de": "fa9e89f2e4395fab1d490e2c71f6aa0e6094aec7ba22933f2ebeaf2b20e58021", + "es": "fa9e89f2e4395fab1d490e2c71f6aa0e6094aec7ba22933f2ebeaf2b20e58021", + "it": "fa9e89f2e4395fab1d490e2c71f6aa0e6094aec7ba22933f2ebeaf2b20e58021" }, - "llmaas/rag_explained.md": { - "en": "b33cc1e218480ed3b838dc681c23a5c75cb3cf281b94d3622f260f2e9425b3ad", - "es": "b33cc1e218480ed3b838dc681c23a5c75cb3cf281b94d3622f260f2e9425b3ad", - "de": "b33cc1e218480ed3b838dc681c23a5c75cb3cf281b94d3622f260f2e9425b3ad", - "it": "b33cc1e218480ed3b838dc681c23a5c75cb3cf281b94d3622f260f2e9425b3ad" + "market_place_public.md": { + "en": "28ea7fe88ff3b9b7362cfb5ae447670cc391ab8d187860bc4d445f14d6c1d595", + "de": "28ea7fe88ff3b9b7362cfb5ae447670cc391ab8d187860bc4d445f14d6c1d595", + "es": "28ea7fe88ff3b9b7362cfb5ae447670cc391ab8d187860bc4d445f14d6c1d595", + "it": "28ea7fe88ff3b9b7362cfb5ae447670cc391ab8d187860bc4d445f14d6c1d595" }, - "changelog.md": { - "en": "d94e79dc26be7da84c05d6a7981865a1dfd534e792163d64d58c7c86cc4f8a84", - "es": "d94e79dc26be7da84c05d6a7981865a1dfd534e792163d64d58c7c86cc4f8a84", - "de": "d94e79dc26be7da84c05d6a7981865a1dfd534e792163d64d58c7c86cc4f8a84", - "it": "d94e79dc26be7da84c05d6a7981865a1dfd534e792163d64d58c7c86cc4f8a84" + "marketplace/concepts.md": { + "en": "1f56deab4e9f5a347c0886af01b64823a247519f69c08a114408e8fc95de4cea", + "de": "1f56deab4e9f5a347c0886af01b64823a247519f69c08a114408e8fc95de4cea", + "es": "1f56deab4e9f5a347c0886af01b64823a247519f69c08a114408e8fc95de4cea", + "it": "1f56deab4e9f5a347c0886af01b64823a247519f69c08a114408e8fc95de4cea" }, - "contractual/llmaas/raci.md": { - "en": "49ed11511db1a57d1181e20ef4c8784748390c98045d71a2977a6ba408ac998f", - "de": "49ed11511db1a57d1181e20ef4c8784748390c98045d71a2977a6ba408ac998f", - "it": "49ed11511db1a57d1181e20ef4c8784748390c98045d71a2977a6ba408ac998f", - "es": "49ed11511db1a57d1181e20ef4c8784748390c98045d71a2977a6ba408ac998f" + "marketplace/marketplace.md": { + "en": "049051ed6337f1bd4489e36b700ee7f7063d126d9c8291f7c3b0d1d51ee75f75", + "de": "049051ed6337f1bd4489e36b700ee7f7063d126d9c8291f7c3b0d1d51ee75f75", + "es": "049051ed6337f1bd4489e36b700ee7f7063d126d9c8291f7c3b0d1d51ee75f75", + "it": "049051ed6337f1bd4489e36b700ee7f7063d126d9c8291f7c3b0d1d51ee75f75" }, - "storage/oss/tutorials/aws-s3-sync.md": { - "en": "a677d29c12508d93a59be9298e2de63ff77102c4468d4211980c28c10d95cfec", - "de": "a677d29c12508d93a59be9298e2de63ff77102c4468d4211980c28c10d95cfec", - "es": "a677d29c12508d93a59be9298e2de63ff77102c4468d4211980c28c10d95cfec", - "it": "a677d29c12508d93a59be9298e2de63ff77102c4468d4211980c28c10d95cfec" + "marketplace/quickstart.md": { + "en": "730eeaace6cf6af34eeacacc001a9ac5bb01123cbb8de10a5708f6e42bbe9100", + "de": "730eeaace6cf6af34eeacacc001a9ac5bb01123cbb8de10a5708f6e42bbe9100", + "es": "730eeaace6cf6af34eeacacc001a9ac5bb01123cbb8de10a5708f6e42bbe9100", + "it": "730eeaace6cf6af34eeacacc001a9ac5bb01123cbb8de10a5708f6e42bbe9100" }, - "storage/oss/tutorials/cloudberry-explorer.md": { - "en": "a1e33b3b7029e5b8245e1ab81527c837f14935fdffa199a4307f3a636de79e9c", - "de": "a1e33b3b7029e5b8245e1ab81527c837f14935fdffa199a4307f3a636de79e9c", - "es": "a1e33b3b7029e5b8245e1ab81527c837f14935fdffa199a4307f3a636de79e9c", - "it": "a1e33b3b7029e5b8245e1ab81527c837f14935fdffa199a4307f3a636de79e9c" + "marketplace/tutorials/contact_partner.md": { + "en": "919d8dffb4e5d0ef80ae0563f80c63d78bce3fa575683a8f0b9d39eda62bdb4f", + "de": "919d8dffb4e5d0ef80ae0563f80c63d78bce3fa575683a8f0b9d39eda62bdb4f", + "es": "919d8dffb4e5d0ef80ae0563f80c63d78bce3fa575683a8f0b9d39eda62bdb4f", + "it": "919d8dffb4e5d0ef80ae0563f80c63d78bce3fa575683a8f0b9d39eda62bdb4f" }, - "storage/oss/tutorials/file-hashing.md": { - "en": "a4341967d15fb2384f83959a5e9e5a22e520268a5040459853b4f642f16c8eb7", - "de": "a4341967d15fb2384f83959a5e9e5a22e520268a5040459853b4f642f16c8eb7", - "es": "a4341967d15fb2384f83959a5e9e5a22e520268a5040459853b4f642f16c8eb7", - "it": "a4341967d15fb2384f83959a5e9e5a22e520268a5040459853b4f642f16c8eb7" + "marketplace/tutorials/customize_image_openiaas.md": { + "en": "5f3496d8b4a5da942497c917957e0c3fd4f37656b24aacc85315d3fcbefed1fd", + "de": "5f3496d8b4a5da942497c917957e0c3fd4f37656b24aacc85315d3fcbefed1fd", + "es": "5f3496d8b4a5da942497c917957e0c3fd4f37656b24aacc85315d3fcbefed1fd", + "it": "5f3496d8b4a5da942497c917957e0c3fd4f37656b24aacc85315d3fcbefed1fd" }, - "storage/oss/tutorials/mc-mirror.md": { - "en": "a64eb325a35b2b36436ba69c903e25cb279f5d70f03116f2b44bda79fcabc3c2", - "de": "a64eb325a35b2b36436ba69c903e25cb279f5d70f03116f2b44bda79fcabc3c2", - "es": "a64eb325a35b2b36436ba69c903e25cb279f5d70f03116f2b44bda79fcabc3c2", - "it": "a64eb325a35b2b36436ba69c903e25cb279f5d70f03116f2b44bda79fcabc3c2" + "marketplace/tutorials/customize_image_vmware.md": { + "en": "429c426eb07d8ecf2cc6043b1a43d92330d7ee28f775f6d8d30826896f8e0430", + "de": "429c426eb07d8ecf2cc6043b1a43d92330d7ee28f775f6d8d30826896f8e0430", + "es": "429c426eb07d8ecf2cc6043b1a43d92330d7ee28f775f6d8d30826896f8e0430", + "it": "429c426eb07d8ecf2cc6043b1a43d92330d7ee28f775f6d8d30826896f8e0430" }, - "storage/oss/tutorials/python-boto3.md": { - "en": "1da04a66bedd3cd01eaf56867448cb1f65a8457cacc017f6fd0c890b2c0b13b8", - "de": "1da04a66bedd3cd01eaf56867448cb1f65a8457cacc017f6fd0c890b2c0b13b8", - "es": "1da04a66bedd3cd01eaf56867448cb1f65a8457cacc017f6fd0c890b2c0b13b8", - "it": "1da04a66bedd3cd01eaf56867448cb1f65a8457cacc017f6fd0c890b2c0b13b8" + "marketplace/tutorials/deploy_openiaas.md": { + "en": "7e3b5e63cd4ebeccdc1bca42e04c0ee5e08714fc8af6dba36d03b831eaad1067", + "de": "7e3b5e63cd4ebeccdc1bca42e04c0ee5e08714fc8af6dba36d03b831eaad1067", + "es": "7e3b5e63cd4ebeccdc1bca42e04c0ee5e08714fc8af6dba36d03b831eaad1067", + "it": "7e3b5e63cd4ebeccdc1bca42e04c0ee5e08714fc8af6dba36d03b831eaad1067" }, - "storage/oss/tutorials/winscp.md": { - "en": "918bc04a8b747caced46dfb070934af45c12a8b1ab52a09036224a397c8c0444", - "de": "918bc04a8b747caced46dfb070934af45c12a8b1ab52a09036224a397c8c0444", - "es": "918bc04a8b747caced46dfb070934af45c12a8b1ab52a09036224a397c8c0444", - "it": "918bc04a8b747caced46dfb070934af45c12a8b1ab52a09036224a397c8c0444" + "marketplace/tutorials/deploy_vmware.md": { + "en": "746cd9968d6afaa656d0d41a8dcb7555c37296ca8eb6ca686fe58d797ba427eb", + "de": "746cd9968d6afaa656d0d41a8dcb7555c37296ca8eb6ca686fe58d797ba427eb", + "es": "746cd9968d6afaa656d0d41a8dcb7555c37296ca8eb6ca686fe58d797ba427eb", + "it": "746cd9968d6afaa656d0d41a8dcb7555c37296ca8eb6ca686fe58d797ba427eb" }, - "iaas_opensource/tutorials/high_availability/manage_pool.md": { - "en": "2ca24aceb8a01cb82cc6814a8005a532110b2f6aeaaa00b40b200e1bab883f2f", - "es": "2ca24aceb8a01cb82cc6814a8005a532110b2f6aeaaa00b40b200e1bab883f2f", - "de": "2ca24aceb8a01cb82cc6814a8005a532110b2f6aeaaa00b40b200e1bab883f2f", - "it": "2ca24aceb8a01cb82cc6814a8005a532110b2f6aeaaa00b40b200e1bab883f2f" + "network/internet/advanced_concepts.md": { + "en": "2453b90d81afe3c1efc520146f33ee2039b19ca4c80f98d9cdc28d1def78e512", + "de": "2453b90d81afe3c1efc520146f33ee2039b19ca4c80f98d9cdc28d1def78e512", + "es": "2453b90d81afe3c1efc520146f33ee2039b19ca4c80f98d9cdc28d1def78e512", + "it": "2453b90d81afe3c1efc520146f33ee2039b19ca4c80f98d9cdc28d1def78e512" }, - "iaas_opensource/tutorials/high_availability/manage_vm.md": { - "en": "2fa4e0a6e44632e90778e35113623c1fa3d2936065033ca6ce1c299c59406890", - "es": "2fa4e0a6e44632e90778e35113623c1fa3d2936065033ca6ce1c299c59406890", - "it": "2fa4e0a6e44632e90778e35113623c1fa3d2936065033ca6ce1c299c59406890", - "de": "2fa4e0a6e44632e90778e35113623c1fa3d2936065033ca6ce1c299c59406890" + "network/internet/concepts.md": { + "en": "bf5b06cd8106ff05eed259eaa84bcb2ff66b17116d3913a16ef05f39cdf850ae", + "de": "bf5b06cd8106ff05eed259eaa84bcb2ff66b17116d3913a16ef05f39cdf850ae", + "es": "bf5b06cd8106ff05eed259eaa84bcb2ff66b17116d3913a16ef05f39cdf850ae", + "it": "bf5b06cd8106ff05eed259eaa84bcb2ff66b17116d3913a16ef05f39cdf850ae" }, - "llmaas/faq.md": { - "en": "cb822ec374cb1813977c61bf0c30be52394279a6bce18b8d9ddc7bdb5c249c6b", - "de": "cb822ec374cb1813977c61bf0c30be52394279a6bce18b8d9ddc7bdb5c249c6b", - "it": "cb822ec374cb1813977c61bf0c30be52394279a6bce18b8d9ddc7bdb5c249c6b", - "es": "cb822ec374cb1813977c61bf0c30be52394279a6bce18b8d9ddc7bdb5c249c6b" + "network/internet/internet.md": { + "en": "a579fe1760bfa5d6039f83449a6302e8e0e85663178449c94782a03cfd3892bf", + "de": "a579fe1760bfa5d6039f83449a6302e8e0e85663178449c94782a03cfd3892bf", + "es": "a579fe1760bfa5d6039f83449a6302e8e0e85663178449c94782a03cfd3892bf", + "it": "a579fe1760bfa5d6039f83449a6302e8e0e85663178449c94782a03cfd3892bf" }, - "console/iam/tutorials/sso_intune.md": { - "en": "9b7e3d2022ea301cd572ca7cb090622770c108202728c822b73a25f27f90b476", - "it": "9b7e3d2022ea301cd572ca7cb090622770c108202728c822b73a25f27f90b476", - "de": "9b7e3d2022ea301cd572ca7cb090622770c108202728c822b73a25f27f90b476", - "es": "9b7e3d2022ea301cd572ca7cb090622770c108202728c822b73a25f27f90b476" + "network/internet/quickstart.md": { + "en": "8aa52ce6615020f631b98f7b9e2c881d904acf7505d6d93108ca808cda6cf8c4", + "de": "8aa52ce6615020f631b98f7b9e2c881d904acf7505d6d93108ca808cda6cf8c4", + "es": "8aa52ce6615020f631b98f7b9e2c881d904acf7505d6d93108ca808cda6cf8c4", + "it": "8aa52ce6615020f631b98f7b9e2c881d904acf7505d6d93108ca808cda6cf8c4" }, - "console/iam/tutorials/sso_okta.md": { - "en": "02238beed3b16d91e70a218c6efce8c383e11511682313d3f5beea79a8344f12", - "es": "02238beed3b16d91e70a218c6efce8c383e11511682313d3f5beea79a8344f12", - "de": "02238beed3b16d91e70a218c6efce8c383e11511682313d3f5beea79a8344f12", - "it": "02238beed3b16d91e70a218c6efce8c383e11511682313d3f5beea79a8344f12" + "network/internet/tutorials/forti.md": { + "en": "84cdbd3a76be4dfea7e2afef36ecdf99ef49d77b75f7dc1717e7f8d8cb27c36d", + "de": "84cdbd3a76be4dfea7e2afef36ecdf99ef49d77b75f7dc1717e7f8d8cb27c36d", + "es": "84cdbd3a76be4dfea7e2afef36ecdf99ef49d77b75f7dc1717e7f8d8cb27c36d", + "it": "84cdbd3a76be4dfea7e2afef36ecdf99ef49d77b75f7dc1717e7f8d8cb27c36d" }, - "console/iam/tutorials/sso_azuread.md": { - "en": "3348fd90b83abb4abb9f687eb7d732c0f3e4f882fbe16a099313bc0ffbec14d6", - "it": "3348fd90b83abb4abb9f687eb7d732c0f3e4f882fbe16a099313bc0ffbec14d6", - "es": "3348fd90b83abb4abb9f687eb7d732c0f3e4f882fbe16a099313bc0ffbec14d6", - "de": "3348fd90b83abb4abb9f687eb7d732c0f3e4f882fbe16a099313bc0ffbec14d6" + "network/internet/tutorials/pfSense.md": { + "en": "cbbc5f76a570e697856f1fe93387d7a5e361b7edcbc4b2b403fc680e57bccf49", + "de": "cbbc5f76a570e697856f1fe93387d7a5e361b7edcbc4b2b403fc680e57bccf49", + "es": "cbbc5f76a570e697856f1fe93387d7a5e361b7edcbc4b2b403fc680e57bccf49", + "it": "cbbc5f76a570e697856f1fe93387d7a5e361b7edcbc4b2b403fc680e57bccf49" + }, + "network/network_overview.md": { + "en": "a92caa8a3d1bc1beab7ca1fa0bd5b15c277df6e0b90afdc0c265d4c4b11f9478", + "de": "a92caa8a3d1bc1beab7ca1fa0bd5b15c277df6e0b90afdc0c265d4c4b11f9478", + "es": "a92caa8a3d1bc1beab7ca1fa0bd5b15c277df6e0b90afdc0c265d4c4b11f9478", + "it": "a92caa8a3d1bc1beab7ca1fa0bd5b15c277df6e0b90afdc0c265d4c4b11f9478" + }, + "network/private_backbone/concepts.md": { + "en": "d2933b32bfb620feffb5f54d1f0a763a51a3405a067ad7473a065242b2bcf36b", + "de": "d2933b32bfb620feffb5f54d1f0a763a51a3405a067ad7473a065242b2bcf36b", + "es": "d2933b32bfb620feffb5f54d1f0a763a51a3405a067ad7473a065242b2bcf36b", + "it": "d2933b32bfb620feffb5f54d1f0a763a51a3405a067ad7473a065242b2bcf36b" + }, + "network/private_backbone/private_backbone.md": { + "en": "283ffb3b0781169c059c9cd19431c8cbe9b98c41f990daf4000eb39383ecce35", + "de": "283ffb3b0781169c059c9cd19431c8cbe9b98c41f990daf4000eb39383ecce35", + "es": "283ffb3b0781169c059c9cd19431c8cbe9b98c41f990daf4000eb39383ecce35", + "it": "283ffb3b0781169c059c9cd19431c8cbe9b98c41f990daf4000eb39383ecce35" + }, + "network/private_backbone/quickstart.md": { + "en": "2a13277ed336bd5b342fcf3906808972a3eef1dabd34b2f88236c356d2db555c", + "de": "2a13277ed336bd5b342fcf3906808972a3eef1dabd34b2f88236c356d2db555c", + "es": "2a13277ed336bd5b342fcf3906808972a3eef1dabd34b2f88236c356d2db555c", + "it": "2a13277ed336bd5b342fcf3906808972a3eef1dabd34b2f88236c356d2db555c" + }, + "network/private_backbone/tutorials.md": { + "en": "b869996d00266db6549176b941cbcb8afd039e238244eb9b975f15fc7b5bb701", + "de": "b869996d00266db6549176b941cbcb8afd039e238244eb9b975f15fc7b5bb701", + "es": "b869996d00266db6549176b941cbcb8afd039e238244eb9b975f15fc7b5bb701", + "it": "b869996d00266db6549176b941cbcb8afd039e238244eb9b975f15fc7b5bb701" }, - "iaas_vmware/tutorials/configure_management_vm.md": { - "en": "b80506a68354e3ea15d25c90d36c09ec7e01473548c19ec8d2adda04fd477776", - "de": "b80506a68354e3ea15d25c90d36c09ec7e01473548c19ec8d2adda04fd477776", - "it": "b80506a68354e3ea15d25c90d36c09ec7e01473548c19ec8d2adda04fd477776", - "es": "b80506a68354e3ea15d25c90d36c09ec7e01473548c19ec8d2adda04fd477776" + "network/private_network/concepts.md": { + "en": "9314df2a2eac26465a9e094142915442da5451a60e0aa104c2ee02a3d5c0f765", + "de": "9314df2a2eac26465a9e094142915442da5451a60e0aa104c2ee02a3d5c0f765", + "es": "9314df2a2eac26465a9e094142915442da5451a60e0aa104c2ee02a3d5c0f765", + "it": "9314df2a2eac26465a9e094142915442da5451a60e0aa104c2ee02a3d5c0f765" }, - "marketplace/concepts.md": { - "en": "9f05f67111625e0bd15fa1c768e8d7ed1ee0b0dbb7244fc986ce5fb411ee85a8", - "de": "9f05f67111625e0bd15fa1c768e8d7ed1ee0b0dbb7244fc986ce5fb411ee85a8", - "es": "9f05f67111625e0bd15fa1c768e8d7ed1ee0b0dbb7244fc986ce5fb411ee85a8", - "it": "9f05f67111625e0bd15fa1c768e8d7ed1ee0b0dbb7244fc986ce5fb411ee85a8" + "network/private_network/private_network.md": { + "en": "1d8c064221201fc0ac3b7baf2812431479731f474777e433c8e2d1139d80742f", + "de": "1d8c064221201fc0ac3b7baf2812431479731f474777e433c8e2d1139d80742f", + "es": "1d8c064221201fc0ac3b7baf2812431479731f474777e433c8e2d1139d80742f", + "it": "1d8c064221201fc0ac3b7baf2812431479731f474777e433c8e2d1139d80742f" }, - "marketplace/marketplace.md": { - "en": "1014ad038337351dc860335536e6e5eab736d44b3956bb1440cac24e8783d4e4", - "de": "1014ad038337351dc860335536e6e5eab736d44b3956bb1440cac24e8783d4e4", - "es": "1014ad038337351dc860335536e6e5eab736d44b3956bb1440cac24e8783d4e4", - "it": "1014ad038337351dc860335536e6e5eab736d44b3956bb1440cac24e8783d4e4" + "network/private_network/quickstart.md": { + "en": "3933c1edafe5f2e1772e6ecc4edad38190f9ba7e67c6ef88bdea56e15c7705d3", + "de": "3933c1edafe5f2e1772e6ecc4edad38190f9ba7e67c6ef88bdea56e15c7705d3", + "es": "3933c1edafe5f2e1772e6ecc4edad38190f9ba7e67c6ef88bdea56e15c7705d3", + "it": "3933c1edafe5f2e1772e6ecc4edad38190f9ba7e67c6ef88bdea56e15c7705d3" }, - "marketplace/quickstart.md": { - "en": "20eec3c9b69dd3369d8864baa7f37c3c46316fa01b37ce47722ef97ffd3263bb", - "de": "20eec3c9b69dd3369d8864baa7f37c3c46316fa01b37ce47722ef97ffd3263bb", - "es": "20eec3c9b69dd3369d8864baa7f37c3c46316fa01b37ce47722ef97ffd3263bb", - "it": "20eec3c9b69dd3369d8864baa7f37c3c46316fa01b37ce47722ef97ffd3263bb" + "network/vpc/concepts.md": { + "en": "c91f7cd71bbd913ac81a7bac9d74981833ac963de7a45e61a059e971aa7f5dcc", + "de": "c91f7cd71bbd913ac81a7bac9d74981833ac963de7a45e61a059e971aa7f5dcc", + "es": "c91f7cd71bbd913ac81a7bac9d74981833ac963de7a45e61a059e971aa7f5dcc", + "it": "c91f7cd71bbd913ac81a7bac9d74981833ac963de7a45e61a059e971aa7f5dcc" }, - "marketplace/tutorials/contact_partner.md": { - "en": "7c8321b6a01e5be22c4915339ccdef6bfe4b63d69f4f464a94e24a6fa0fa2009", - "de": "7c8321b6a01e5be22c4915339ccdef6bfe4b63d69f4f464a94e24a6fa0fa2009", - "es": "7c8321b6a01e5be22c4915339ccdef6bfe4b63d69f4f464a94e24a6fa0fa2009", - "it": "7c8321b6a01e5be22c4915339ccdef6bfe4b63d69f4f464a94e24a6fa0fa2009" + "network/vpc/quickstart.md": { + "en": "ff3813024ada853fdec473faf2bfed40f882105fa8684727c475ee9dff64c6fc", + "de": "ff3813024ada853fdec473faf2bfed40f882105fa8684727c475ee9dff64c6fc", + "es": "ff3813024ada853fdec473faf2bfed40f882105fa8684727c475ee9dff64c6fc", + "it": "ff3813024ada853fdec473faf2bfed40f882105fa8684727c475ee9dff64c6fc" }, - "marketplace/tutorials/customize_image_openiaas.md": { - "en": "1024a54e21fed35575d6ceac69a3376b03c0a6b3d493544894a59d72ed0fe9d7", - "de": "1024a54e21fed35575d6ceac69a3376b03c0a6b3d493544894a59d72ed0fe9d7", - "es": "1024a54e21fed35575d6ceac69a3376b03c0a6b3d493544894a59d72ed0fe9d7", - "it": "1024a54e21fed35575d6ceac69a3376b03c0a6b3d493544894a59d72ed0fe9d7" + "network/vpc/tutorials/vm_configuration.md": { + "en": "6882a28d4350a654fc6baf49447ecabdcdf75a80d9b00b6d88e80dc0d3465bc9", + "de": "6882a28d4350a654fc6baf49447ecabdcdf75a80d9b00b6d88e80dc0d3465bc9", + "es": "6882a28d4350a654fc6baf49447ecabdcdf75a80d9b00b6d88e80dc0d3465bc9", + "it": "6882a28d4350a654fc6baf49447ecabdcdf75a80d9b00b6d88e80dc0d3465bc9" }, - "marketplace/tutorials/customize_image_vmware.md": { - "en": "510fd0ed23676d6f4bd7a01589a8e8d0010e667286b1e5b761bf9b71001eb166", - "de": "510fd0ed23676d6f4bd7a01589a8e8d0010e667286b1e5b761bf9b71001eb166", - "es": "510fd0ed23676d6f4bd7a01589a8e8d0010e667286b1e5b761bf9b71001eb166", - "it": "510fd0ed23676d6f4bd7a01589a8e8d0010e667286b1e5b761bf9b71001eb166" + "network/vpc/vpc.md": { + "en": "4af72079050e593421703c11097d64b39446b9c119d639e49b21968c80bd9f5c", + "de": "4af72079050e593421703c11097d64b39446b9c119d639e49b21968c80bd9f5c", + "es": "4af72079050e593421703c11097d64b39446b9c119d639e49b21968c80bd9f5c", + "it": "4af72079050e593421703c11097d64b39446b9c119d639e49b21968c80bd9f5c" }, - "marketplace/tutorials/deploy_openiaas.md": { - "en": "9db13de7336d9097f28b90693844406d57fe9fd1079a3079881f1359e1da4b4a", - "de": "9db13de7336d9097f28b90693844406d57fe9fd1079a3079881f1359e1da4b4a", - "es": "9db13de7336d9097f28b90693844406d57fe9fd1079a3079881f1359e1da4b4a", - "it": "9db13de7336d9097f28b90693844406d57fe9fd1079a3079881f1359e1da4b4a" + "paas_openshift/concepts.md": { + "en": "04d6e5feb80daa7f960e27605f8b0e6c9e3a1f438af1c00fcfdddbbe492c97cc", + "de": "04d6e5feb80daa7f960e27605f8b0e6c9e3a1f438af1c00fcfdddbbe492c97cc", + "es": "04d6e5feb80daa7f960e27605f8b0e6c9e3a1f438af1c00fcfdddbbe492c97cc", + "it": "04d6e5feb80daa7f960e27605f8b0e6c9e3a1f438af1c00fcfdddbbe492c97cc" }, - "marketplace/tutorials/deploy_vmware.md": { - "en": "73e1d4102e2fa0edafcaaa8f8dbec518bc8647e50d396c164c1effb1a4c020be", - "de": "73e1d4102e2fa0edafcaaa8f8dbec518bc8647e50d396c164c1effb1a4c020be", - "es": "73e1d4102e2fa0edafcaaa8f8dbec518bc8647e50d396c164c1effb1a4c020be", - "it": "73e1d4102e2fa0edafcaaa8f8dbec518bc8647e50d396c164c1effb1a4c020be" + "paas_openshift/paas_openshift.md": { + "en": "74277e7b8bf261adb8d04948a416c8e36499bfcf1e901ebc563dc3f06439ddfe", + "de": "74277e7b8bf261adb8d04948a416c8e36499bfcf1e901ebc563dc3f06439ddfe", + "es": "74277e7b8bf261adb8d04948a416c8e36499bfcf1e901ebc563dc3f06439ddfe", + "it": "74277e7b8bf261adb8d04948a416c8e36499bfcf1e901ebc563dc3f06439ddfe" }, - "containers_overview.md": { - "en": "98e812fa59c832010d6033be07259e4bbd28532d4092a3cfdb9632d393667926", - "de": "98e812fa59c832010d6033be07259e4bbd28532d4092a3cfdb9632d393667926", - "es": "98e812fa59c832010d6033be07259e4bbd28532d4092a3cfdb9632d393667926", - "it": "98e812fa59c832010d6033be07259e4bbd28532d4092a3cfdb9632d393667926" + "paas_openshift/quickstart.md": { + "en": "d1a64c1a9ce37e9a958ded3d25bd05d0936ac0fa226aade56a666b353ec12b83", + "de": "d1a64c1a9ce37e9a958ded3d25bd05d0936ac0fa226aade56a666b353ec12b83", + "es": "d1a64c1a9ce37e9a958ded3d25bd05d0936ac0fa226aade56a666b353ec12b83", + "it": "d1a64c1a9ce37e9a958ded3d25bd05d0936ac0fa226aade56a666b353ec12b83" }, - "contractual/kubernetes/raci.md": { - "en": "45ccc020dead1978dff5b6d24a083705f0a44e258242530f353f22d2c07a43c4", - "de": "45ccc020dead1978dff5b6d24a083705f0a44e258242530f353f22d2c07a43c4", - "es": "45ccc020dead1978dff5b6d24a083705f0a44e258242530f353f22d2c07a43c4", - "it": "45ccc020dead1978dff5b6d24a083705f0a44e258242530f353f22d2c07a43c4" + "paas_openshift/tutorials/deploy-through-helmfile.md": { + "en": "a733d6a6baf97b08f8a496496c207af98fd7cd6ed2f9b822dbcbc7d893ecd113", + "de": "a733d6a6baf97b08f8a496496c207af98fd7cd6ed2f9b822dbcbc7d893ecd113", + "es": "a733d6a6baf97b08f8a496496c207af98fd7cd6ed2f9b822dbcbc7d893ecd113", + "it": "a733d6a6baf97b08f8a496496c207af98fd7cd6ed2f9b822dbcbc7d893ecd113" }, - "managed_kubernetes/concepts.md": { - "en": "576fb78559b06f26aba5064711a797aa87b4220c1a4d87b22eb90ac76c527895", - "de": "576fb78559b06f26aba5064711a797aa87b4220c1a4d87b22eb90ac76c527895", - "es": "576fb78559b06f26aba5064711a797aa87b4220c1a4d87b22eb90ac76c527895", - "it": "576fb78559b06f26aba5064711a797aa87b4220c1a4d87b22eb90ac76c527895" + "paas_openshift/tutorials/deploy-vm-with-kubevirt.md": { + "en": "c538e78312dbc4a6a7a2557405b6c23e27638888f8fb6c065b9ce375c1d51e2d", + "de": "c538e78312dbc4a6a7a2557405b6c23e27638888f8fb6c065b9ce375c1d51e2d", + "es": "c538e78312dbc4a6a7a2557405b6c23e27638888f8fb6c065b9ce375c1d51e2d", + "it": "c538e78312dbc4a6a7a2557405b6c23e27638888f8fb6c065b9ce375c1d51e2d" }, - "managed_kubernetes/quickstart.md": { - "en": "983844e51bd33596d3eaa296289d2f8900894dd6a329f803fa37ed96b6029f27", - "de": "983844e51bd33596d3eaa296289d2f8900894dd6a329f803fa37ed96b6029f27", - "es": "983844e51bd33596d3eaa296289d2f8900894dd6a329f803fa37ed96b6029f27", - "it": "983844e51bd33596d3eaa296289d2f8900894dd6a329f803fa37ed96b6029f27" + "paas_openshift/tutorials/using-kasten.md": { + "en": "367e19123e867ba48763c4bb7fff522bb8fe20d542fb9202188604bcb826af2d", + "de": "367e19123e867ba48763c4bb7fff522bb8fe20d542fb9202188604bcb826af2d", + "es": "367e19123e867ba48763c4bb7fff522bb8fe20d542fb9202188604bcb826af2d", + "it": "367e19123e867ba48763c4bb7fff522bb8fe20d542fb9202188604bcb826af2d" }, - "managed_kubernetes/managed_kubernetes.md": { - "en": "0f17ea40f36dd50d68d949a246ca81a9102ffa06d03f65704199c9a53fc61796", - "de": "0f17ea40f36dd50d68d949a246ca81a9102ffa06d03f65704199c9a53fc61796", - "es": "0f17ea40f36dd50d68d949a246ca81a9102ffa06d03f65704199c9a53fc61796", - "it": "0f17ea40f36dd50d68d949a246ca81a9102ffa06d03f65704199c9a53fc61796" + "privacy.md": { + "en": "03ce6808894a3b12567fc584a7cf355f64dbe8bb4dc78dfc829825517bbd2340", + "de": "03ce6808894a3b12567fc584a7cf355f64dbe8bb4dc78dfc829825517bbd2340", + "es": "03ce6808894a3b12567fc584a7cf355f64dbe8bb4dc78dfc829825517bbd2340", + "it": "03ce6808894a3b12567fc584a7cf355f64dbe8bb4dc78dfc829825517bbd2340" }, - "managed_kubernetes/tutorials.md": { - "en": "ec7dca39ba811c8947882f464dab93081b191fc8ac5a740d48f6e6c10a6d7eff", - "it": "ec7dca39ba811c8947882f464dab93081b191fc8ac5a740d48f6e6c10a6d7eff", - "de": "ec7dca39ba811c8947882f464dab93081b191fc8ac5a740d48f6e6c10a6d7eff", - "es": "ec7dca39ba811c8947882f464dab93081b191fc8ac5a740d48f6e6c10a6d7eff" + "public_cloud/vm_instances/concepts.md": { + "en": "29c3fedef926cd78990f059fa6e782bbd6083216528cae955f9ef59e30cd8d9d", + "de": "29c3fedef926cd78990f059fa6e782bbd6083216528cae955f9ef59e30cd8d9d", + "es": "29c3fedef926cd78990f059fa6e782bbd6083216528cae955f9ef59e30cd8d9d", + "it": "29c3fedef926cd78990f059fa6e782bbd6083216528cae955f9ef59e30cd8d9d" + }, + "public_cloud/vm_instances/quickstart.md": { + "en": "8d43c8f1b8ff2eadda375efe4d393c1e2d76fad36fb654c8750c87e6f3e60a80", + "de": "8d43c8f1b8ff2eadda375efe4d393c1e2d76fad36fb654c8750c87e6f3e60a80", + "es": "8d43c8f1b8ff2eadda375efe4d393c1e2d76fad36fb654c8750c87e6f3e60a80", + "it": "8d43c8f1b8ff2eadda375efe4d393c1e2d76fad36fb654c8750c87e6f3e60a80" + }, + "public_cloud/vm_instances/tutorials/create_vm.md": { + "en": "f61d7698458e23b19560c21c3a3a0e1aade70b6b76f77263e15e577083d3bb9e", + "de": "f61d7698458e23b19560c21c3a3a0e1aade70b6b76f77263e15e577083d3bb9e", + "es": "f61d7698458e23b19560c21c3a3a0e1aade70b6b76f77263e15e577083d3bb9e", + "it": "f61d7698458e23b19560c21c3a3a0e1aade70b6b76f77263e15e577083d3bb9e" + }, + "public_cloud/vm_instances/tutorials/manage_disks.md": { + "en": "3b78d490b01e5235d7043dcc8e62e99e17390f794c60a4806a2968d0a20c2a49", + "de": "3b78d490b01e5235d7043dcc8e62e99e17390f794c60a4806a2968d0a20c2a49", + "es": "3b78d490b01e5235d7043dcc8e62e99e17390f794c60a4806a2968d0a20c2a49", + "it": "3b78d490b01e5235d7043dcc8e62e99e17390f794c60a4806a2968d0a20c2a49" + }, + "public_cloud/vm_instances/tutorials/snapshots.md": { + "en": "b6d15a147bb66bf1fc5b2a5223aebd11ce91ca2efc7024473b21aca83a23bbc3", + "de": "b6d15a147bb66bf1fc5b2a5223aebd11ce91ca2efc7024473b21aca83a23bbc3", + "es": "b6d15a147bb66bf1fc5b2a5223aebd11ce91ca2efc7024473b21aca83a23bbc3", + "it": "b6d15a147bb66bf1fc5b2a5223aebd11ce91ca2efc7024473b21aca83a23bbc3" + }, + "public_cloud/vm_instances/vm_instances.md": { + "en": "bd2ea57b6e1c4038032988b8b7b4cf98f872ac8d6180a5d8a67e7a593cc11efd", + "de": "bd2ea57b6e1c4038032988b8b7b4cf98f872ac8d6180a5d8a67e7a593cc11efd", + "es": "bd2ea57b6e1c4038032988b8b7b4cf98f872ac8d6180a5d8a67e7a593cc11efd", + "it": "bd2ea57b6e1c4038032988b8b7b4cf98f872ac8d6180a5d8a67e7a593cc11efd" + }, + "security_identity_overview.md": { + "en": "a343d105f9bf1da4ddcdd3e3ed9162e3fceceeb312e006e7e03fb5507f60077c", + "de": "a343d105f9bf1da4ddcdd3e3ed9162e3fceceeb312e006e7e03fb5507f60077c", + "es": "a343d105f9bf1da4ddcdd3e3ed9162e3fceceeb312e006e7e03fb5507f60077c", + "it": "a343d105f9bf1da4ddcdd3e3ed9162e3fceceeb312e006e7e03fb5507f60077c" }, - "storage/oss/tutorials/bucket-access.md": { - "en": "3a085dd4b7b67968f6164b0d176b399e0a807de2c303c384762306410d0fb2b6", - "de": "3a085dd4b7b67968f6164b0d176b399e0a807de2c303c384762306410d0fb2b6", - "es": "3a085dd4b7b67968f6164b0d176b399e0a807de2c303c384762306410d0fb2b6", - "it": "3a085dd4b7b67968f6164b0d176b399e0a807de2c303c384762306410d0fb2b6" + "storage/oss/concepts.md": { + "en": "447e638e4df5b56fc6f8e35d3ee3682ef2f2dd0c3130f3e6254ad1d2b4421633", + "de": "447e638e4df5b56fc6f8e35d3ee3682ef2f2dd0c3130f3e6254ad1d2b4421633", + "es": "447e638e4df5b56fc6f8e35d3ee3682ef2f2dd0c3130f3e6254ad1d2b4421633", + "it": "447e638e4df5b56fc6f8e35d3ee3682ef2f2dd0c3130f3e6254ad1d2b4421633" }, - "storage/oss/tutorials/restic.md": { - "en": "76fb3249a290d99d2d96a77abc2fc6bfc4cdf9d3cfb2e8a46b6818eb23f9f831", - "de": "76fb3249a290d99d2d96a77abc2fc6bfc4cdf9d3cfb2e8a46b6818eb23f9f831", - "es": "76fb3249a290d99d2d96a77abc2fc6bfc4cdf9d3cfb2e8a46b6818eb23f9f831", - "it": "76fb3249a290d99d2d96a77abc2fc6bfc4cdf9d3cfb2e8a46b6818eb23f9f831" + "storage/oss/faq.md": { + "en": "52af4e1fcefcb28a2549d7756c176fbd2ad1aebe6c676e55312e806ae97ba5d6", + "de": "52af4e1fcefcb28a2549d7756c176fbd2ad1aebe6c676e55312e806ae97ba5d6", + "es": "52af4e1fcefcb28a2549d7756c176fbd2ad1aebe6c676e55312e806ae97ba5d6", + "it": "52af4e1fcefcb28a2549d7756c176fbd2ad1aebe6c676e55312e806ae97ba5d6" }, - "managed_kubernetes/tutorials/firstdeploy.md": { - "en": "6589aebb6eb59050870704f43325b88fa2724e8b6f6efbe0c856f191b481f388", - "de": "6589aebb6eb59050870704f43325b88fa2724e8b6f6efbe0c856f191b481f388", - "it": "6589aebb6eb59050870704f43325b88fa2724e8b6f6efbe0c856f191b481f388", - "es": "6589aebb6eb59050870704f43325b88fa2724e8b6f6efbe0c856f191b481f388" + "storage/oss/oss.md": { + "en": "4fc9460921a793012f7c9580ae6e7996c0187135c48b8432358d73b100874712", + "de": "4fc9460921a793012f7c9580ae6e7996c0187135c48b8432358d73b100874712", + "es": "4fc9460921a793012f7c9580ae6e7996c0187135c48b8432358d73b100874712", + "it": "4fc9460921a793012f7c9580ae6e7996c0187135c48b8432358d73b100874712" }, - "managed_kubernetes/tutorials/usingcapsule.md": { - "en": "25b08854f1fad585bdd74e85e46def9c672ec4cf8edb6511a0edb7ac1bab533e", - "de": "25b08854f1fad585bdd74e85e46def9c672ec4cf8edb6511a0edb7ac1bab533e", - "es": "25b08854f1fad585bdd74e85e46def9c672ec4cf8edb6511a0edb7ac1bab533e", - "it": "25b08854f1fad585bdd74e85e46def9c672ec4cf8edb6511a0edb7ac1bab533e" + "storage/oss/quickstart.md": { + "en": "d96609e1a2e1ebb9946e6feb889c8f89247c504e87a71622072753c7dba707ea", + "de": "d96609e1a2e1ebb9946e6feb889c8f89247c504e87a71622072753c7dba707ea", + "es": "d96609e1a2e1ebb9946e6feb889c8f89247c504e87a71622072753c7dba707ea", + "it": "d96609e1a2e1ebb9946e6feb889c8f89247c504e87a71622072753c7dba707ea" }, - "managed_kubernetes/tutorials/usingkubecosts.md": { - "en": "72f155a9385f7d55b2aedeff44ffe1ed68928f138af3d39d447ca4d95d4a20a6", - "de": "72f155a9385f7d55b2aedeff44ffe1ed68928f138af3d39d447ca4d95d4a20a6", - "es": "72f155a9385f7d55b2aedeff44ffe1ed68928f138af3d39d447ca4d95d4a20a6", - "it": "72f155a9385f7d55b2aedeff44ffe1ed68928f138af3d39d447ca4d95d4a20a6" + "storage/oss/tutorials.md": { + "en": "3a0bda400fc4903c35d076f540a5c229f6f7a340cf4052de369723a101ec9e34", + "de": "3a0bda400fc4903c35d076f540a5c229f6f7a340cf4052de369723a101ec9e34", + "es": "3a0bda400fc4903c35d076f540a5c229f6f7a340cf4052de369723a101ec9e34", + "it": "3a0bda400fc4903c35d076f540a5c229f6f7a340cf4052de369723a101ec9e34" }, - "managed_kubernetes/tutorials/networking.md": { - "en": "f79c38a5e17ae82a10246cf753a9571882315b11ca4d84193e14fb89322019c9", - "de": "f79c38a5e17ae82a10246cf753a9571882315b11ca4d84193e14fb89322019c9", - "es": "f79c38a5e17ae82a10246cf753a9571882315b11ca4d84193e14fb89322019c9", - "it": "f79c38a5e17ae82a10246cf753a9571882315b11ca4d84193e14fb89322019c9" + "storage/oss/tutorials/aws-s3-sync.md": { + "en": "8cbcf8fde7507d34a871ab5dc7e38a28bcd504b45e34de721fe5fead59697c2c", + "de": "8cbcf8fde7507d34a871ab5dc7e38a28bcd504b45e34de721fe5fead59697c2c", + "es": "8cbcf8fde7507d34a871ab5dc7e38a28bcd504b45e34de721fe5fead59697c2c", + "it": "8cbcf8fde7507d34a871ab5dc7e38a28bcd504b45e34de721fe5fead59697c2c" }, - "managed_kubernetes/tutorials/usingkasten.md": { - "en": "542924aeca9ea911ee49a1ee4663ddc4e5267e9eed8e545f9c88e9f3aaa4f6a6", - "es": "542924aeca9ea911ee49a1ee4663ddc4e5267e9eed8e545f9c88e9f3aaa4f6a6", - "de": "542924aeca9ea911ee49a1ee4663ddc4e5267e9eed8e545f9c88e9f3aaa4f6a6", - "it": "542924aeca9ea911ee49a1ee4663ddc4e5267e9eed8e545f9c88e9f3aaa4f6a6" + "storage/oss/tutorials/bucket-access.md": { + "en": "33f13203c56349a9ae8e452d89b5e2a012ac72ed8538d2b08ae7f8fdd9d7a9bf", + "de": "33f13203c56349a9ae8e452d89b5e2a012ac72ed8538d2b08ae7f8fdd9d7a9bf", + "es": "33f13203c56349a9ae8e452d89b5e2a012ac72ed8538d2b08ae7f8fdd9d7a9bf", + "it": "33f13203c56349a9ae8e452d89b5e2a012ac72ed8538d2b08ae7f8fdd9d7a9bf" }, - "managed_kubernetes/tutorials/usingargocd.md": { - "en": "9487a29cda9624fc94f16d1dfa7efc4b3f8d528a4404b7ad07a297383203c57b", - "de": "9487a29cda9624fc94f16d1dfa7efc4b3f8d528a4404b7ad07a297383203c57b", - "es": "9487a29cda9624fc94f16d1dfa7efc4b3f8d528a4404b7ad07a297383203c57b", - "it": "9487a29cda9624fc94f16d1dfa7efc4b3f8d528a4404b7ad07a297383203c57b" + "storage/oss/tutorials/cloudberry-explorer.md": { + "en": "2348b776db3934a391e691c405b5b5f4eabe0b19c854eff8edc9c398bf9abe30", + "de": "2348b776db3934a391e691c405b5b5f4eabe0b19c854eff8edc9c398bf9abe30", + "es": "2348b776db3934a391e691c405b5b5f4eabe0b19c854eff8edc9c398bf9abe30", + "it": "2348b776db3934a391e691c405b5b5f4eabe0b19c854eff8edc9c398bf9abe30" }, - "llmaas/ocr.md": { - "en": "41e7fa373fc188db9002c45205cf7c42b30da37363b7aa5381682fa2033723c7", - "de": "41e7fa373fc188db9002c45205cf7c42b30da37363b7aa5381682fa2033723c7", - "es": "41e7fa373fc188db9002c45205cf7c42b30da37363b7aa5381682fa2033723c7", - "it": "41e7fa373fc188db9002c45205cf7c42b30da37363b7aa5381682fa2033723c7" + "storage/oss/tutorials/file-hashing.md": { + "en": "683e13dcf7e6b1bb5a20d89577dbc6df84776ec713bae989ef2aff996865f43a", + "de": "683e13dcf7e6b1bb5a20d89577dbc6df84776ec713bae989ef2aff996865f43a", + "es": "683e13dcf7e6b1bb5a20d89577dbc6df84776ec713bae989ef2aff996865f43a", + "it": "683e13dcf7e6b1bb5a20d89577dbc6df84776ec713bae989ef2aff996865f43a" }, - "iaas_opensource/tutorials/backup/iaas_opensource_backup.md": { - "en": "fc06779d0e66e49bc7ab2a292050961859da58fd3a5af45d4fb3cf0692d863e4", - "de": "fc06779d0e66e49bc7ab2a292050961859da58fd3a5af45d4fb3cf0692d863e4", - "es": "fc06779d0e66e49bc7ab2a292050961859da58fd3a5af45d4fb3cf0692d863e4", - "it": "fc06779d0e66e49bc7ab2a292050961859da58fd3a5af45d4fb3cf0692d863e4" + "storage/oss/tutorials/mc-mirror.md": { + "en": "3c2845975fee1434fc338fba31af1d03552d4c364da1544817f4f4e5cc50cde9", + "de": "3c2845975fee1434fc338fba31af1d03552d4c364da1544817f4f4e5cc50cde9", + "es": "3c2845975fee1434fc338fba31af1d03552d4c364da1544817f4f4e5cc50cde9", + "it": "3c2845975fee1434fc338fba31af1d03552d4c364da1544817f4f4e5cc50cde9" }, - "managed_kubernetes/tutorials/usinggapi.md": { - "en": "9eda0118ede2f3c46bd0f9f2ab934613483c1d75cb1d14baa80762b59ced7b2e", - "de": "9eda0118ede2f3c46bd0f9f2ab934613483c1d75cb1d14baa80762b59ced7b2e", - "es": "9eda0118ede2f3c46bd0f9f2ab934613483c1d75cb1d14baa80762b59ced7b2e", - "it": "9eda0118ede2f3c46bd0f9f2ab934613483c1d75cb1d14baa80762b59ced7b2e" + "storage/oss/tutorials/python-boto3.md": { + "en": "303d4814922f0d9f5e3a1d52b7bcc2c30af0ca73ace899b4db2156fbc6af7103", + "de": "303d4814922f0d9f5e3a1d52b7bcc2c30af0ca73ace899b4db2156fbc6af7103", + "es": "303d4814922f0d9f5e3a1d52b7bcc2c30af0ca73ace899b4db2156fbc6af7103", + "it": "303d4814922f0d9f5e3a1d52b7bcc2c30af0ca73ace899b4db2156fbc6af7103" }, - "managed_kubernetes/tutorials/usingharbor.md": { - "en": "0878368929e7cbe62688404fab60e338e8970c593b219c3a21cc2eeebcbdd46b", - "de": "0878368929e7cbe62688404fab60e338e8970c593b219c3a21cc2eeebcbdd46b", - "es": "0878368929e7cbe62688404fab60e338e8970c593b219c3a21cc2eeebcbdd46b", - "it": "0878368929e7cbe62688404fab60e338e8970c593b219c3a21cc2eeebcbdd46b" + "storage/oss/tutorials/rclone.md": { + "en": "e402a3a1a87ed18530d934398baf5a885cf1fa4cc229ed0472fcba7a0e806acd", + "de": "e402a3a1a87ed18530d934398baf5a885cf1fa4cc229ed0472fcba7a0e806acd", + "es": "e402a3a1a87ed18530d934398baf5a885cf1fa4cc229ed0472fcba7a0e806acd", + "it": "e402a3a1a87ed18530d934398baf5a885cf1fa4cc229ed0472fcba7a0e806acd" }, - "managed_kubernetes/tutorials/usingopencost.md": { - "en": "b6e4edc0b60e5070a2d922f603250d1a2651271046c2ac24f0c92d8326c68e82", - "de": "b6e4edc0b60e5070a2d922f603250d1a2651271046c2ac24f0c92d8326c68e82", - "es": "b6e4edc0b60e5070a2d922f603250d1a2651271046c2ac24f0c92d8326c68e82", - "it": "b6e4edc0b60e5070a2d922f603250d1a2651271046c2ac24f0c92d8326c68e82" + "storage/oss/tutorials/restic.md": { + "en": "2e75d8887e808ecc802f92b81f13c21a71232d1e4d7d63919af5f3283cb03e9d", + "de": "2e75d8887e808ecc802f92b81f13c21a71232d1e4d7d63919af5f3283cb03e9d", + "es": "2e75d8887e808ecc802f92b81f13c21a71232d1e4d7d63919af5f3283cb03e9d", + "it": "2e75d8887e808ecc802f92b81f13c21a71232d1e4d7d63919af5f3283cb03e9d" }, - "terraform/terraform.md": { - "en": "dce44f42bac9d5e4f060cbaa02232f42f5d2018a5ef041d41005f9d6bb46bb02", - "de": "dce44f42bac9d5e4f060cbaa02232f42f5d2018a5ef041d41005f9d6bb46bb02", - "es": "dce44f42bac9d5e4f060cbaa02232f42f5d2018a5ef041d41005f9d6bb46bb02", - "it": "dce44f42bac9d5e4f060cbaa02232f42f5d2018a5ef041d41005f9d6bb46bb02" + "storage/oss/tutorials/winscp.md": { + "en": "21d72f76b35507df73c5bbef305d78d409f22faee0818342451f1882078d6a1a", + "de": "21d72f76b35507df73c5bbef305d78d409f22faee0818342451f1882078d6a1a", + "es": "21d72f76b35507df73c5bbef305d78d409f22faee0818342451f1882078d6a1a", + "it": "21d72f76b35507df73c5bbef305d78d409f22faee0818342451f1882078d6a1a" }, "terraform/concepts.md": { - "en": "e8b47a3b12b5a9cfd06f13a2934cdca32d3262e02e009870edf1ac78803a78de", - "de": "e8b47a3b12b5a9cfd06f13a2934cdca32d3262e02e009870edf1ac78803a78de", - "es": "e8b47a3b12b5a9cfd06f13a2934cdca32d3262e02e009870edf1ac78803a78de", - "it": "e8b47a3b12b5a9cfd06f13a2934cdca32d3262e02e009870edf1ac78803a78de" + "en": "fac596ff4a66ff49cbde6dbfcb9ba914d4854b34ec5b0ebaf1bedd58ac091fbc", + "de": "fac596ff4a66ff49cbde6dbfcb9ba914d4854b34ec5b0ebaf1bedd58ac091fbc", + "es": "fac596ff4a66ff49cbde6dbfcb9ba914d4854b34ec5b0ebaf1bedd58ac091fbc", + "it": "fac596ff4a66ff49cbde6dbfcb9ba914d4854b34ec5b0ebaf1bedd58ac091fbc" }, "terraform/quickstart.md": { - "en": "d410be8693761a95a9491d0bb832870fab243fabe7b112118fd7265a49d55fdb", - "de": "d410be8693761a95a9491d0bb832870fab243fabe7b112118fd7265a49d55fdb", - "it": "d410be8693761a95a9491d0bb832870fab243fabe7b112118fd7265a49d55fdb", - "es": "d410be8693761a95a9491d0bb832870fab243fabe7b112118fd7265a49d55fdb" - }, - "terraform/tutorials.md": { - "en": "9983a92bd65fe0f15b4ba58430cf63c2fee829d74ef26e832315c6a0e43d5ea3", - "de": "9983a92bd65fe0f15b4ba58430cf63c2fee829d74ef26e832315c6a0e43d5ea3", - "es": "9983a92bd65fe0f15b4ba58430cf63c2fee829d74ef26e832315c6a0e43d5ea3", - "it": "9983a92bd65fe0f15b4ba58430cf63c2fee829d74ef26e832315c6a0e43d5ea3" - }, - "network/vpc/vpc.md": { - "en": "d3563c764c9e80ed9101944e68b2d3387316ea973ece62ef75c7541f65062d7a", - "es": "d3563c764c9e80ed9101944e68b2d3387316ea973ece62ef75c7541f65062d7a", - "de": "d3563c764c9e80ed9101944e68b2d3387316ea973ece62ef75c7541f65062d7a", - "it": "d3563c764c9e80ed9101944e68b2d3387316ea973ece62ef75c7541f65062d7a" - }, - "network/vpc/concepts.md": { - "en": "159370db850922ed27f472ada013055852e02735e9be201d9578fc086fb8b966", - "es": "159370db850922ed27f472ada013055852e02735e9be201d9578fc086fb8b966", - "it": "159370db850922ed27f472ada013055852e02735e9be201d9578fc086fb8b966", - "de": "159370db850922ed27f472ada013055852e02735e9be201d9578fc086fb8b966" - }, - "network/vpc/tutorials/vm_configuration.md": { - "en": "e54d6dcf448c344ee3370a0973389d89677f24db50cb0b3077c05d98dac9456e", - "de": "e54d6dcf448c344ee3370a0973389d89677f24db50cb0b3077c05d98dac9456e", - "es": "e54d6dcf448c344ee3370a0973389d89677f24db50cb0b3077c05d98dac9456e", - "it": "e54d6dcf448c344ee3370a0973389d89677f24db50cb0b3077c05d98dac9456e" - }, - "network/vpc/quickstart.md": { - "en": "5a3315d46830d98be0a522cd91b0bae0ac87a7495ad75b291901316dbcfb2b4b", - "de": "5a3315d46830d98be0a522cd91b0bae0ac87a7495ad75b291901316dbcfb2b4b", - "it": "5a3315d46830d98be0a522cd91b0bae0ac87a7495ad75b291901316dbcfb2b4b", - "es": "5a3315d46830d98be0a522cd91b0bae0ac87a7495ad75b291901316dbcfb2b4b" - }, - "managed_kubernetes/tutorials/usinggpu.md": { - "en": "d7d259db6096fc47338988d7158fc0fb0095a2ee0b6ff6a21288aeb32c5c2e4c", - "de": "d7d259db6096fc47338988d7158fc0fb0095a2ee0b6ff6a21288aeb32c5c2e4c", - "es": "d7d259db6096fc47338988d7158fc0fb0095a2ee0b6ff6a21288aeb32c5c2e4c", - "it": "d7d259db6096fc47338988d7158fc0fb0095a2ee0b6ff6a21288aeb32c5c2e4c" + "en": "3507e021523367f311f0dfe1e02ff4a0d8a97841993c4cdd9cf3053bc4ffacc2", + "de": "3507e021523367f311f0dfe1e02ff4a0d8a97841993c4cdd9cf3053bc4ffacc2", + "es": "3507e021523367f311f0dfe1e02ff4a0d8a97841993c4cdd9cf3053bc4ffacc2", + "it": "3507e021523367f311f0dfe1e02ff4a0d8a97841993c4cdd9cf3053bc4ffacc2" }, - "network/internet/advanced_concepts.md": { - "en": "1f51b44309457a8659d04ba50367875cc96bdb4e9036265e1a25107c560dde02", - "de": "1f51b44309457a8659d04ba50367875cc96bdb4e9036265e1a25107c560dde02", - "es": "1f51b44309457a8659d04ba50367875cc96bdb4e9036265e1a25107c560dde02", - "it": "1f51b44309457a8659d04ba50367875cc96bdb4e9036265e1a25107c560dde02" - }, - "storage/oss/faq.md": { - "en": "52af4e1fcefcb28a2549d7756c176fbd2ad1aebe6c676e55312e806ae97ba5d6", - "de": "52af4e1fcefcb28a2549d7756c176fbd2ad1aebe6c676e55312e806ae97ba5d6", - "it": "52af4e1fcefcb28a2549d7756c176fbd2ad1aebe6c676e55312e806ae97ba5d6", - "es": "52af4e1fcefcb28a2549d7756c176fbd2ad1aebe6c676e55312e806ae97ba5d6" + "terraform/terraform.md": { + "en": "4fc902404c1ed4665d592da6d15bfb47d7bb351180c328105a7164e98c4d5c0f", + "de": "4fc902404c1ed4665d592da6d15bfb47d7bb351180c328105a7164e98c4d5c0f", + "es": "4fc902404c1ed4665d592da6d15bfb47d7bb351180c328105a7164e98c4d5c0f", + "it": "4fc902404c1ed4665d592da6d15bfb47d7bb351180c328105a7164e98c4d5c0f" }, - "storage/oss/tutorials/rclone.md": { - "en": "6aefa4331cc80bf8ea10cc04f009fd12934361a11d0d992bdbe680ea4bc5d2c9", - "es": "6aefa4331cc80bf8ea10cc04f009fd12934361a11d0d992bdbe680ea4bc5d2c9", - "it": "6aefa4331cc80bf8ea10cc04f009fd12934361a11d0d992bdbe680ea4bc5d2c9", - "de": "6aefa4331cc80bf8ea10cc04f009fd12934361a11d0d992bdbe680ea4bc5d2c9" + "terraform/tutorials.md": { + "en": "1f532fe40db1196a2cc8a965bc05ccb1f311ef575e207f0d6ef3e47cc389bef0", + "de": "1f532fe40db1196a2cc8a965bc05ccb1f311ef575e207f0d6ef3e47cc389bef0", + "es": "1f532fe40db1196a2cc8a965bc05ccb1f311ef575e207f0d6ef3e47cc389bef0", + "it": "1f532fe40db1196a2cc8a965bc05ccb1f311ef575e207f0d6ef3e47cc389bef0" } }, - "last_update": "2026-02-21T16:00:32.911398", + "last_update": "2026-05-17T18:00:15.357380", "version": "2.0" -} \ No newline at end of file +} From 12e2e8693c4c47a7bcb8025c4af968057bf35229 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20LELEU?= Date: Mon, 25 May 2026 12:36:50 +0200 Subject: [PATCH 07/15] update MK SLAs and prereq --- docs/managed_kubernetes/concepts.md | 30 +++++++++--------- docs/managed_kubernetes/concepts.pdf | Bin 0 -> 303812 bytes .../managed_core_kubernetes.md | 4 ++- docs/managed_kubernetes/managed_kubernetes.md | 2 +- 4 files changed, 19 insertions(+), 17 deletions(-) create mode 100644 docs/managed_kubernetes/concepts.pdf diff --git a/docs/managed_kubernetes/concepts.md b/docs/managed_kubernetes/concepts.md index 9b07d08c..3ca4fd3f 100644 --- a/docs/managed_kubernetes/concepts.md +++ b/docs/managed_kubernetes/concepts.md @@ -83,7 +83,7 @@ L'installation standardisée inclus un ensemble de composants, majoritairement O ## SLA & Information sur le support -- **Disponibilité garantie (production 3 AZ)** : 99.90 % +- **Disponibilité garantie (production 3 AZ)** : 99.95 % - **Support** : N1/N2/N3 inclus pour le périmètre socle (infrastructure et opérateurs standards). - **Engagement de temps de rétablissement (ETR)** : selon contrat cadre Cloud Temple. - **Maintenance (MCO)** : patching régulier Talos / Kubernetes / opérateurs standards par MSP, sans interruption de service (rolling upgrade). @@ -113,16 +113,16 @@ Pour un déploiement "de production" (multi-zonal), les machines suivantes sont | **AZ** | **Machine** | **vCores** | **RAM** | **Stockage local** | |---|---|---|---|---| -| AZ07 | Git Runner | 4 | 8 Go | OS: 64 Go | -| AZ05 | Control Plane 1 | 8 | 12 Go | OS: 64 Go | -| AZ06 | Control Plane 2 | 8 | 12 Go | OS: 64 Go | -| AZ07 | Control Plane 3 | 8 | 12 Go | OS: 64 Go | -| AZ05 | Storage Node 1 | 12 | 24 Go | OS: 64 Go + Ceph 500 Go minimum (*) | -| AZ06 | Storage Node 2 | 12 | 24 Go | OS: 64 Go + Ceph 500 Go minimum (*)| -| AZ07 | Storage Node 3 | 12 | 24 Go | OS: 64 Go + Ceph 500 Go minimum (*)| -| AZ05 | Worker Node 1 (**) | 12 | 24 Go | OS: 64 Go | -| AZ06 | Worker Node 2 (**) | 12 | 24 Go | OS: 64 Go | -| AZ07 | Worker Node 3 (**) | 12 | 24 Go | OS: 64 Go | +| AZ07 | Git Runner | 4 | 8 Go | OS: 256 Go | +| AZ05 | Control Plane 1 | 8 | 12 Go | OS: 128 Go | +| AZ06 | Control Plane 2 | 8 | 12 Go | OS: 128 Go | +| AZ07 | Control Plane 3 | 8 | 12 Go | OS: 128 Go | +| AZ05 | Storage Node 1 | 12 | 24 Go | OS: 128 Go + Ceph 500 Go minimum (*) | +| AZ06 | Storage Node 2 | 12 | 24 Go | OS: 128 Go + Ceph 500 Go minimum (*)| +| AZ07 | Storage Node 3 | 12 | 24 Go | OS: 128 Go + Ceph 500 Go minimum (*)| +| AZ05 | Worker Node 1 (**) | 12 | 24 Go | OS: 128 Go | +| AZ06 | Worker Node 2 (**) | 12 | 24 Go | OS: 128 Go | +| AZ07 | Worker Node 3 (**) | 12 | 24 Go | OS: 128 Go | (*) : Chaque noeud de stockage est livré avec un minimum de 500 Go d'espace disque, pour un stockage utile Ceph distribué de 500 Go (les données sont répliquées sur chaque AZ, donc x3). L'espace libre disponible pour le client est d'environ 350 Go. Cette taille initiale peut être augmentée au moment de la construction, ou plus tard, en fonction des besoins. Des quotas sont appliqués sur Ceph, avec une répartition Block/File. @@ -137,10 +137,10 @@ Pour une version "dev/test", les machines suivantes sont déployées: | **AZ** | **Machine** | **vCores** | **RAM** | **Stockage local** | |---|---|---|---|---| | AZ0n | Git Runner | 4 | 8 Go | OS: 30 Go | -| AZ0n | Control Plane | 8 | 12 Go | OS: 64 Go | -| AZ0n | Worker Node 1 (**) | 12 | 24 Go | OS: 64 Go + Ceph 300 Go minimum (*) | -| AZ0n | Worker Node 2 (**) | 12 | 24 Go | OS: 64 Go + Ceph 300 Go minimum (*) | -| AZ0n | Worker Node 3 (**) | 12 | 24 Go | OS: 64 Go + Ceph 300 Go minimum (*) | +| AZ0n | Control Plane | 8 | 12 Go | OS: 128 Go | +| AZ0n | Worker Node 1 (**) | 12 | 24 Go | OS: 128 Go + Ceph 300 Go minimum (*) | +| AZ0n | Worker Node 2 (**) | 12 | 24 Go | OS: 128 Go + Ceph 300 Go minimum (*) | +| AZ0n | Worker Node 3 (**) | 12 | 24 Go | OS: 128 Go + Ceph 300 Go minimum (*) | (*) : 3 Worker nodes sont utilisés comme Storage nodes et sont livrés avec un minimum de 300 Go d'espace disque, pour un stockage utile distribué de 300 Go (les données sont répliquées trois fois). L'espace libre disponible pour le client est d'environ 150 Go. Cette taille initiale peut être augmentée au moment de la construction, ou plus tard, en fonction des besoins. diff --git a/docs/managed_kubernetes/concepts.pdf b/docs/managed_kubernetes/concepts.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7bd513894b5a206712b30a7183e538c8b8e9de33 GIT binary patch literal 303812 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�Ni66RI&_8&WoU=vUsrRYW>6 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 literal 0 HcmV?d00001 diff --git a/docs/managed_kubernetes/managed_core_kubernetes.md b/docs/managed_kubernetes/managed_core_kubernetes.md index 60961792..1b90d36d 100644 --- a/docs/managed_kubernetes/managed_core_kubernetes.md +++ b/docs/managed_kubernetes/managed_core_kubernetes.md @@ -68,9 +68,11 @@ Conçue pour la production et les applications critiques, cette architecture dis - **Cas d'usage** : Applications de production, services critiques, plateformes nécessitant un SLA. - **Points clés** : - **Haute Disponibilité** : 3 nœuds Control Plane répartis sur 3 AZ. + - **Stockage Dédié** : 3 nœuds de stockage dédiés et répartis pour la performance et la résilience. - **Workers Répartis** : Au minimum 3 nœuds workers, un par AZ. - **Nœuds Bare Metal (Optionnel)** : Intégration possible de nœuds workers de type **"Bare Metal"** pour des besoins de performance spécifiques, notamment le **support des GPU**. - - **SLA de 99.90%**, mesurée mensuellement. + - **SLA de 99.95%**, mesurée mensuellement. + Architecture Multi-AZ diff --git a/docs/managed_kubernetes/managed_kubernetes.md b/docs/managed_kubernetes/managed_kubernetes.md index d7b05de3..184f1c64 100644 --- a/docs/managed_kubernetes/managed_kubernetes.md +++ b/docs/managed_kubernetes/managed_kubernetes.md @@ -73,7 +73,7 @@ Conçue pour la production et les applications critiques, cette architecture dis - **Stockage Dédié** : 3 nœuds de stockage dédiés et répartis pour la performance et la résilience. - **Workers Répartis** : Au minimum 3 nœuds workers, un par AZ. - **Nœuds Bare Metal (Optionnel)** : Intégration possible de nœuds workers de type **"Bare Metal"** pour des besoins de performance spécifiques, notamment le **support des GPU**. - - **SLA de 99.90%**. + - **SLA de 99.95%**. Architecture Multi-AZ From c0ffc1814c079f9aa4d0f8d6ebd6d6c0967eefdc Mon Sep 17 00:00:00 2001 From: Alexandre LEPETIT <10155402+aelttil@users.noreply.github.com> Date: Tue, 26 May 2026 11:25:09 +0200 Subject: [PATCH 08/15] fix(security): untrack scripts/translate_py/.env The file was committed before the .gitignore rule existed (or before a previous git rm --cached). The rule on line 19 of .gitignore had no effect on the already-tracked file. Removing it from the index keeps the local copy intact but stops future modifications from being committed. NOTE: any API key that was previously committed to history must still be considered compromised and rotated separately on the LLMaaS side. Co-Authored-By: Claude Opus 4.7 (1M context) --- scripts/translate_py/.env | 34 ---------------------------------- 1 file changed, 34 deletions(-) delete mode 100644 scripts/translate_py/.env diff --git a/scripts/translate_py/.env b/scripts/translate_py/.env deleted file mode 100644 index 02a8e7b7..00000000 --- a/scripts/translate_py/.env +++ /dev/null @@ -1,34 +0,0 @@ -# URL de l'API Cloud Temple LLMaaS (par défaut https://api.ai.cloud-temple.com/v1) -CLOUDTEMPLE_API_URL=https://api.ai.cloud-temple.com/v1/chat/completions - -# Clé API pour Cloud Temple LLMaaS -CLOUDTEMPLE_API_KEY="WolFH3xGSCMPvlfEru5JAt_KWZIrYreQOm1dDB2x5X4" - -# Optionnel: Chemin de base de la documentation (par défaut '.') -# DOC_BASE_PATH=. - -# Optionnel: Modèle de traduction -TRANSLATION_MODEL=qwen3.6:35b - -# Optionnel: Type de modèle pour la gestion du tokenizer ('openai' ou 'other', par défaut 'other') -MODEL_TYPE=openai - -# Optionnel: Température pour la traduction (par défaut '1') -TRANSLATION_TEMPERATURE=0.1 - -# Optionnel: Top_p pour la traduction (par défaut '1') -# TRANSLATION_TOP_P=1 - -# Optionnel: Nombre de fichiers à traduire en parallèle (par défaut 4 dans le script) -CONCURRENT_TRANSLATIONS=16 -MAX_RETRIES=5 -RETRY_DELAY=5.0 - -# Optionnel: Taille maximale d'un bloc de traduction en tokens (par défaut 5000) -MAX_TOKENS_PER_BLOCK=4000 - -# Optionnel: Longueur maximale du contexte du modèle en tokens (qwen3.6:35b supporte 1M) -MAX_MODEL_CONTEXT_LENGTH=250000 - -# Optionnel: Nombre de tokens de sécurité à soustraire du contexte disponible (par défaut 200) -BUFFER_TOKENS=200 From c8d8e82db571d0ab4e7b527564937cb59b04f13c Mon Sep 17 00:00:00 2001 From: "christophe.lesur" Date: Tue, 26 May 2026 21:59:24 +0200 Subject: [PATCH 09/15] fix(translation): ignore unchanged notranslation markdown files --- scripts/translate_py/config.py | 12 +++--------- scripts/translate_py/file_manager.py | 15 +++++++++++++-- scripts/translate_py/translate.py | 3 ++- scripts/translate_py/ui.py | 8 +++++++- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/scripts/translate_py/config.py b/scripts/translate_py/config.py index 33f17f24..122df484 100644 --- a/scripts/translate_py/config.py +++ b/scripts/translate_py/config.py @@ -96,13 +96,6 @@ def convert_path(cls, v) -> Path: """Convertit le chemin en objet Path.""" return Path(v) - @validator('api_key') - def validate_api_key(cls, v) -> Optional[str]: - """Valide la présence de la clé API si nécessaire.""" - if not v and not os.getenv('TRANSLATION_LOCAL_MODE'): - raise ValueError("CLOUDTEMPLE_API_KEY est requis") - return v - class LanguageConfig(BaseModel): """Configuration des langues supportées.""" @@ -235,12 +228,13 @@ def _find_project_root(start_path: Path) -> Path: return Path(".").resolve() -def validate_environment(config: TranslationConfig) -> bool: +def validate_environment(config: TranslationConfig, require_api: bool = True) -> bool: """ Valide l'environnement d'exécution. Args: config: Configuration à valider + require_api: Exige une clé API pour les modes qui appellent le service distant Returns: True si l'environnement est valide @@ -259,7 +253,7 @@ def validate_environment(config: TranslationConfig) -> bool: paths['i18n'].mkdir(exist_ok=True) # Vérification de la clé API en mode distant - if not os.getenv('TRANSLATION_LOCAL_MODE') and not config.api_key: + if require_api and not os.getenv('TRANSLATION_LOCAL_MODE') and not config.api_key: raise ValueError("CLOUDTEMPLE_API_KEY requis pour l'API distante") return True diff --git a/scripts/translate_py/file_manager.py b/scripts/translate_py/file_manager.py index 0c62ce85..6874981e 100644 --- a/scripts/translate_py/file_manager.py +++ b/scripts/translate_py/file_manager.py @@ -302,8 +302,6 @@ async def build_translation_tasks( # Vérifier si le fichier est dans un répertoire .notranslation force_copy = self._is_in_notranslation_directory(file_path, notranslation_dirs) - if force_copy: - print(f"📋 Fichier forcé en copie (répertoire .notranslation): {relative_path}") # Calcul du hash pour les fichiers traduisibles (même si force_copy) current_hash = None @@ -324,6 +322,7 @@ async def build_translation_tasks( target_path=target_path, current_hash=current_hash, stored_hash=stored_hash, + force_copy=force_copy, force_retranslation=force_retranslation, init_mode=init_mode, translate_missing=translate_missing @@ -411,6 +410,7 @@ def _needs_translation( target_path: Path, current_hash: Optional[str], stored_hash: Optional[str], + force_copy: bool, force_retranslation: bool, init_mode: bool, translate_missing: bool @@ -423,6 +423,7 @@ def _needs_translation( target_path: Chemin cible current_hash: Hash actuel du fichier source stored_hash: Hash stocké en métadonnées + force_copy: Fichier markdown à copier sans traduction force_retranslation: Forcer la retraduction init_mode: Mode initialisation translate_missing: Traduire les fichiers manquants @@ -436,6 +437,16 @@ def _needs_translation( # Pour les nouveaux contenus, utiliser @site/docs/... (chemins absolus). if file_type != FileType.MARKDOWN: return False + + # Fichiers markdown sous .notranslation : traiter comme une copie. + # Ils ne sont pas nécessairement présents dans translation-meta.json. + # La source de vérité est donc l'identité source/cible, pas le hash stocké. + if force_copy: + if not target_path.exists(): + return True + + target_hash = self.file_hasher.compute_file_hash(target_path) + return current_hash != target_hash # Fichiers markdown : vérification du hash if not target_path.exists(): diff --git a/scripts/translate_py/translate.py b/scripts/translate_py/translate.py index 030834a9..f75c894a 100644 --- a/scripts/translate_py/translate.py +++ b/scripts/translate_py/translate.py @@ -568,7 +568,8 @@ async def _async_main( try: # Chargement de la configuration config = load_config() - validate_environment(config) + require_api = test_api or (not dry_run and (not init or translate_missing)) + validate_environment(config, require_api=require_api) # Affichage de la configuration paths = {k: str(v) for k, v in get_paths(config).items()} diff --git a/scripts/translate_py/ui.py b/scripts/translate_py/ui.py index 253c6196..6e0b18f4 100644 --- a/scripts/translate_py/ui.py +++ b/scripts/translate_py/ui.py @@ -621,13 +621,15 @@ def _show_errors_final(self, errors: List[str]) -> None: def confirm_dry_run(self, job: TranslationJob) -> bool: """Demande confirmation pour un dry run.""" self.console.print() + tasks_to_process = [task for task in job.tasks if task.needs_translation] # Informations du dry run dry_run_info = Table(show_header=False, box=None) dry_run_info.add_column("Label", width=20) dry_run_info.add_column("Value", width=40) - dry_run_info.add_row("📊 Tâches à traiter", f"[yellow]{len(job.tasks)}[/yellow]") + dry_run_info.add_row("📊 Tâches scannées", f"[dim]{len(job.tasks)}[/dim]") + dry_run_info.add_row("📊 Tâches à traiter", f"[yellow]{len(tasks_to_process)}[/yellow]") dry_run_info.add_row("🗣️ Langues", f"[magenta]{', '.join(job.target_languages)}[/magenta]") dry_run_info.add_row("🔄 Force retraduction", f"[cyan]{'Oui' if job.force_retranslation else 'Non'}[/cyan]") @@ -640,6 +642,10 @@ def confirm_dry_run(self, job: TranslationJob) -> bool: self.console.print(panel) self.console.print() + + if not sys.stdin.isatty(): + self.console.print("[yellow]Entrée non interactive détectée : poursuite automatique du dry-run.[/yellow]") + return True response = input(f"❓ Continuer ? [y/N]: ") return response.lower() in ['y', 'yes', 'oui'] From 0fb25728368c5d49e141f4cd5cf11d17f84c39ab Mon Sep 17 00:00:00 2001 From: "christophe.lesur" Date: Tue, 26 May 2026 22:44:47 +0200 Subject: [PATCH 10/15] fix(translation): add CLI API overrides --- README.md | 18 +- docs/changelog.md | 6 + .../current/managed_kubernetes/concepts.md | 312 ++--- .../managed_core_kubernetes.md | 54 +- .../managed_kubernetes/managed_kubernetes.md | 60 +- .../current/managed_kubernetes/concepts.md | 228 ++-- .../managed_core_kubernetes.md | 48 +- .../managed_kubernetes/managed_kubernetes.md | 58 +- .../current/managed_kubernetes/concepts.md | 242 ++-- .../managed_core_kubernetes.md | 42 +- .../managed_kubernetes/managed_kubernetes.md | 58 +- .../current/managed_kubernetes/concepts.md | 258 ++--- .../managed_core_kubernetes.md | 38 +- .../managed_kubernetes/managed_kubernetes.md | 46 +- memory-bank/core/activeDocumentation.md | 15 +- memory-bank/core/translationGuidelines.md | 48 +- memory-bank/workflows/translation-workflow.md | 31 +- scripts/README.md | 29 +- scripts/translate_py/config.py | 19 +- scripts/translate_py/translate.py | 20 +- scripts/translate_py/translation-meta.json | 28 +- yarn.lock | 1002 ++++++++--------- 22 files changed, 1321 insertions(+), 1339 deletions(-) diff --git a/README.md b/README.md index 76eda0cb..31bf6780 100644 --- a/README.md +++ b/README.md @@ -190,33 +190,33 @@ The system uses SHA-256 hashing to intelligently detect modified files, ensuring pip install -r requirements.txt ``` -2. __Configure Environment__: - Copy the example `.env` file and add your API key. +2. __Configure API Access__: + Pass the Cloud Temple LLMaaS token directly on the command line, or keep using environment variables if preferred. The CLI options take precedence over environment variables. ```bash - # From the scripts/translate_py directory - cp .env.example .env - # Now, edit the .env file with your credentials + python scripts/translate_py/translate.py --token "$CLOUDTEMPLE_API_KEY" ``` + The default API URL is `https://api.ai.cloud-temple.com/v1/chat/completions` and the default translation model is `qwen3.6:27b`. Both can be overridden with `--url` and `--model`. + 3. __Run Translation__: After adding or modifying content in the `/docs` directory, run the translation from the project root. ```bash # Translate all modified files to all supported languages - python scripts/translate_py/translate.py + python scripts/translate_py/translate.py --token "$CLOUDTEMPLE_API_KEY" # Perform a dry run to see what would be translated python scripts/translate_py/translate.py --dry-run # Translate only one language - python scripts/translate_py/translate.py --lang=en + python scripts/translate_py/translate.py --lang=en --token "$CLOUDTEMPLE_API_KEY" # Force retranslation of all files - python scripts/translate_py/translate.py --force + python scripts/translate_py/translate.py --force --token "$CLOUDTEMPLE_API_KEY" # Test API connection - python scripts/translate_py/translate.py --test-api + python scripts/translate_py/translate.py --test-api --token "$CLOUDTEMPLE_API_KEY" ``` ### How It Works diff --git a/docs/changelog.md b/docs/changelog.md index 5a7d8b58..03a7ca1d 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -5,6 +5,12 @@ sidebar_position: 2 # Suivi des Changements +### 26 Mai 2026 : Amélioration du workflow de traduction + +- **Traduction (outillage)** : Ajout des options `--token`, `--url` et `--model` au script Python `scripts/translate_py/translate.py`. Le token API peut désormais être fourni directement en ligne de commande, sans recréer de fichier `.env`. Les options CLI sont prioritaires sur les variables d'environnement. +- **Traduction (configuration)** : Mise à jour du modèle de traduction par défaut vers `qwen3.6:27b`, avec conservation de l'endpoint Cloud Temple LLMaaS par défaut `https://api.ai.cloud-temple.com/v1/chat/completions`. +- **Traduction (dry-run)** : Le workflow de simulation reste utilisable sans token API, afin de vérifier les fichiers à traduire avant toute exécution réelle. + ### 4 Mai 2026 : Correctifs de sécurité — image Docker (CVE Alpine) - **Sécurité (Docker)** : Ajout de `apk upgrade --no-cache` dans le stage final `nginx:stable-alpine` des Dockerfiles de production (`Dockerfile` et `Dockerfile.prebuilt`). Cette mise à jour corrige l'ensemble des CVE Critical et High détectées par Harbor/Trivy sur l'image `3.24.3`, liées aux packages Alpine figés : `libcrypto3`, `libssl3`, `libxml2`, `libxslt`, `libexpat`, `libpng`, `zlib`, `c-ares`, `musl`, `xz-libs`, `busybox`, `curl`. Le prochain build produira une image avec tous ces packages à leur dernière version corrigée. diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/concepts.md b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/concepts.md index 01533b79..5460ce42 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/concepts.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/concepts.md @@ -7,12 +7,12 @@ import grafana from '@site/docs/managed_kubernetes/images/grafana.png' import archi_overview from '@site/docs/managed_kubernetes/images/archi_overview.png' import archi_overview_1az from '@site/docs/managed_kubernetes/images/archi_overview_1az.png' -## Unsere Managed-Kubernetes-Angebote +## Unsere Managed Kubernetes-Angebote -Cloud Temple bietet zwei verschiedene Angebote an, um Ihren Anforderungen an die Container-Orchestrierung gerecht zu werden: +Cloud Temple bietet zwei separate Angebote an, um Ihre Anforderungen an die Container-Orchestrierung zu erfüllen: -- **Managed Core Kubernetes** : Ein minimalistisches Produkt, das Ihnen eine robuste und sichere Kubernetes-Basis bereitstellt, die auf modernsten Open-Source-Komponenten basiert. Es ist ideal für erfahrene Teams, die ihre eigene maßgeschneiderte Plattform aufbauen möchten. -- **Managed Kubernetes** : Eine vollständige und sofort einsatzbereite Lösung, die einen umfassenden Toolstack für Netzwerk, Sicherheit, Speicher, Continuous Deployment, Observability, Backup und Kostenmanagement umfasst. +- **Managed Core Kubernetes** : Ein minimalistisches Produkt, das Ihnen eine robuste und sichere Kubernetes-Basis bietet, die auf modernsten Open-Source-Komponenten basiert. Es ist ideal für erfahrene Teams, die ihre eigene maßgeschneiderte Plattform aufbauen möchten. +- **Managed Kubernetes** : Eine vollständige, sofort einsatzbereite Lösung, die einen umfassenden Tool-Stack für Netzwerk, Sicherheit, Speicher, Continuous Deployment, Observability, Backup und Kostenmanagement beinhaltet. ### Vergleichstabelle der Angebote @@ -20,289 +20,289 @@ Cloud Temple bietet zwei verschiedene Angebote an, um Ihren Anforderungen an die |---|---|---| | **Betriebssystem** | Talos | Talos | | **CNI** | Cilium | Cilium | -| **CNI-Beobachtung** | ❌ | Hubble | +| **CNI-Beobachtbarkeit** | ❌ | Hubble | | **Load Balancer** | MetalLB | MetalLB | | **Ingress** | ❌ | Ingress Nginx | | **Speicher** | Rook-Ceph | Rook-Ceph | | **Kontinuierliche Bereitstellung (GitOps)** | ❌ | ArgoCD | -| **Observability** | ❌ | Prometheus, Grafana, Loki | +| **Beobachtbarkeit** | ❌ | Prometheus, Grafana, Loki | | **Sicherung und Migration** | ❌ | Veeam Kasten | | **Kostenmanagement (FinOps)** | ❌ | OpenCost | | **Governance und Sicherheit**| ❌ | Kyverno, Capsule | -| **Container Registry**| ❌ | Harbor | +| **Container-Registry**| ❌ | Harbor | | **Zertifikatsverwaltung**| ❌ | Cert-Manager | -| **SSO-Authentifizierung**| ❌ | OIDC-Anbindung | +| **SSO-Authentifizierung**| ❌ | OIDC-Integration | -## Vorstellung des Managed Kubernetes-Produkts (vollständig) +## Vorstellung des Produkts Managed Kubernetes (vollständig) -Das **Managed Kubernetes**-Angebot (auch „Kub Managé“ oder „KM“ genannt) ist eine von Cloud-Temple verwaltete Kubernetes-Containerisierungslösung, die als Virtuelle Maschinen auf den Cloud-Temple OpenIaaS IaaS-Infrastrukturen bereitgestellt wird. +Das Angebot **Managed Kubernetes** (auch "Kub Managé" oder "KM" genannt) ist eine von Cloud-Temple verwaltete Kubernetes-Containerisierungslösung, die als virtuelle Maschinen auf den Cloud-Temple OpenIaaS IaaS-Infrastrukturen bereitgestellt wird. -**Managed Kubernetes** basiert auf Talos Linux ([https://www.talos.dev/](https://www.talos.dev/)), einem Kubernetes-spezifischen Betriebssystem, das leichtgewichtig und sicher ist. Es ist immutable, verfügt über keine Shell und keinen SSH-Zugriff und wird ausschließlich deklarativ über die gRPC-API konfiguriert. +**Managed Kubernetes** basiert auf Talos Linux ([https://www.talos.dev/](https://www.talos.dev/)), einem für Kubernetes entwickelten Betriebssystem, das leichtgewichtig und sicher ist. Es ist unveränderlich, verfügt über keine Shell und keinen SSH-Zugriff und wird ausschließlich deklarativ über die gRPC-API konfiguriert. -Die standardisierte Installation umfasst eine Reihe von Komponenten, die größtenteils Open Source sind und vom CNCF validiert wurden: +Die standardisierte Installation umfasst eine Reihe von Komponenten, die größtenteils Open Source sind und vom CNCF zertifiziert wurden: -- **CNI Cilium** mit Observability-Schnittstelle (**Hubble**): Cilium ist eine Container-Netzwerk-Lösung für Kubernetes (*Container Network Interface*). Es verwaltet Sicherheit, Load Balancing, Service Mesh, Observability, Verschlüsselung usw. Es handelt sich um eine grundlegende Netzwerkkomponente, die in den meisten Kubernetes-Distributionen (OpenShift, AKS, GKE, EKS, ...) zu finden ist. Wir haben die grafische Oberfläche **Hubble** integriert, um Cilium-Flüsse zu visualisieren. +- **CNI Cilium**, mit Observability-Schnittstelle (**Hubble**): Cilium ist eine Netzwerklösung für Kubernetes-Container (*Container Network Interface*). Es übernimmt Sicherheit, Load Balancing, Service Mesh, Observability, Verschlüsselung usw. Es ist eine grundlegende Netzwerkkomponente, die in den meisten Kubernetes-Varianten (OpenShift, AKS, GKE, EKS usw.) zu finden ist. Wir haben die grafische Oberfläche **Hubble** zur Visualisierung der Cilium-Flüsse integriert. -- **MetalLB** und **nginx**: Zur Bereitstellung von Webanwendungen sind standardmäßig drei *Ingress-Class*-Konfigurationen für **nginx** integriert: - - *nginx-external-secured*: Bereitstellung über eine öffentliche IP, gefiltert über die Firewall, um nur bekannten IPs den Zugriff zu erlauben (wird für die grafischen Oberflächen der verschiedenen Produkte und die Kubernetes-API verwendet) +- **MetalLB** und **nginx**: Für die Bereitstellung von Webanwendungen sind standardmäßig 3 *ingress-class* **nginx** integriert: + - *nginx-external-secured*: Bereitstellung über eine öffentliche IP, die im Firewall gefiltert wird, um nur bekannte IPs zuzulassen (wird für die grafischen Oberflächen der verschiedenen Produkte und die Kubernetes-API verwendet) - *nginx-external*: Bereitstellung über eine zweite, nicht gefilterte öffentliche IP (oder kundenspezifische Filterung) - *nginx-internal*: Bereitstellung ausschließlich über eine interne IP - Für „nicht-Web“-Dienste ermöglicht ein **MetalLB**-Load-Balancer die Bereitstellung von Diensten intern oder über öffentliche IPs. (Dies ermöglicht die Bereitstellung weiterer Ingresses, wie beispielsweise eines WAF) + Für "nicht-Web"-Dienste ermöglicht ein **MetalLB**-Load-Balancer die Bereitstellung von Diensten intern oder über öffentliche IPs. (Dies ermöglicht den Einsatz weiterer Ingresses, wie z. B. eines WAF) -- **Verteilter Speicher Rook-Ceph**: Für die Speicherung persistenter Volumes (PV) ist eine Open-Source-**Ceph**-Speicherlösung in die Plattform integriert. Sie ermöglicht die Nutzung der *Storage Classes* *ceph-block*, *ceph-bucket* und *ceph-filesystem*. Es wird ein Speicher mit **7500 IOPS** eingesetzt, der hohe Leistung ermöglicht. Bei Produktionsbereitstellungen (über 3 AZ) sind die Speicherknoten dediziert (1 Knoten pro AZ); bei Nicht-Produktionsbereitstellungen (1 AZ) wird der Speicher mit den Worker Nodes geteilt. +- **Verteiltes Rook-Ceph-Speicher**: Für die Speicherung von persistenten Volumes (PV) ist ein verteiltes Open-Source-**Ceph**-Speichersystem in der Plattform integriert. Es ermöglicht die Nutzung der *storage-classes* *ceph-block*, *ceph-bucket* und *ceph-filesystem*. Es wird ein Speicher mit **7500 IOPS** verwendet, der hohe Leistung bietet. In Produktionsbereitstellungen (über 3 AZs) sind die Speicherknoten dediziert (1 Knoten pro AZ); in Nicht-Produktionsbereitstellungen (1 AZ) wird der Speicher mit den Worker-Knoten geteilt. -- **Cert-Manager**: Der Open-Source-Zertifikatsmanager **Cert-Manager** ist nativ in die Plattform integriert. +- **Cert-Manager**: Der Open-Source-Zertifikatsmanager **Cert-Manager** ist nativ in der Plattform integriert. - **ArgoCD** steht Ihnen für Ihre automatisierten Bereitstellungen über eine **CI/CD**-Pipeline zur Verfügung. -- **Prometheus**-Stack (Prometheus, Grafana, Loki): Managed-Kubernetes-Cluster werden standardmäßig mit einem vollständigen Open-Source-**Prometheus**-Stack für die Observability ausgeliefert, einschließlich: +- **Prometheus**-Stack (Prometheus, Grafana, Loki): Die Managed Kubernetes-Cluster werden standardmäßig mit einem vollständigen Open-Source-**Prometheus**-Stack für Observability geliefert, der Folgendes umfasst: - **Prometheus** - **Grafana** mit zahlreichen Dashboards - - **Loki**: Die Plattform-Logs werden in den Cloud-Temple S3-Speicher exportiert (und in Grafana integriert). + - **Loki**: Die Plattformprotokolle werden in den Cloud-Temple S3-Speicher exportiert (und in Grafana integriert). -- **Harbor** ist eine **Container Registry**, mit der Sie Container-Images oder Helm Charts direkt im Cluster speichern können. Sie führt **Vulnerability Scans** für Ihre Images durch und kann diese digital signieren. **Harbor** ermöglicht zudem Synchronisierungen mit anderen Registries. ([https://goharbor.io/](https://goharbor.io/)) +- **Harbor** ist ein **Container-Registry**, mit dem Sie Ihre Container-Images oder Helm-Charts direkt im Cluster speichern können. Es führt **Schwachstellen-Scans** für Ihre Images durch und kann diese digital signieren. **Harbor** ermöglicht auch Synchronisationen mit anderen Registries. ([https://goharbor.io/](https://goharbor.io/)) -- **OpenCost** ([https://github.com/opencost/opencost](https://github.com/opencost/opencost)) ist ein Kostenmanagement-Tool (FinOps) für Kubernetes. Es ermöglicht Ihnen, den Ressourcenverbrauch von Kubernetes genau zu verfolgen und eine detaillierte Kostenabrechnung (Chargeback/Showback) pro Projekt/Namespace durchzuführen. +- **OpenCost** ([https://github.com/opencost/opencost](https://github.com/opencost/opencost)) ist ein Kostenmanagement-Tool (FinOps) für Kubernetes. Es ermöglicht eine detaillierte Verfolgung des Kubernetes-Ressourcenverbrauchs und die Weiterabrechnung nach Projekt/Namespace. - Erweiterte Sicherheitsstrategien mit **Kyverno** und **Capsule**: - - **Kyverno** ([https://kyverno.io/](https://kyverno.io/)) ist ein Admission Controller für Kubernetes, der die Durchsetzung von Richtlinien ermöglicht. Es ist ein essentielles Tool für Governance und Sicherheit in Kubernetes. - - **Capsule** ([https://projectcapsule.dev/](https://projectcapsule.dev/)) ist ein Berechtigungsverwaltungstool, das das Rechte-Management in Kubernetes erleichtert. Es führt den Begriff des *Tenants* ein, der die Zentralisierung und Delegation von Berechtigungen über mehrere Namespaces hinweg ermöglicht. Über **Capsule** verfügen die Nutzer der Managed-Kubernetes-Plattform daher über auf ihre jeweiligen Namespaces beschränkte Rechte. + - **Kyverno** ([https://kyverno.io/](https://kyverno.io/)) ist ein Admission-Controller für Kubernetes, der das Durchsetzen von Richtlinien ermöglicht. Es ist ein essentielles Tool für Governance und Sicherheit in Kubernetes. + - **Capsule** ([https://projectcapsule.dev/](https://projectcapsule.dev/)) ist ein Berechtigungsmanagement-Tool, das die Rechteverwaltung in Kubernetes erleichtert. Es führt das Konzept des *Tenants* ein, das die Zentralisierung und Delegation von Berechtigungen über mehrere Namespaces hinweg ermöglicht. Über **Capsule** sind die Berechtigungen der Nutzer der Managed Kubernetes-Plattform somit auf ihre eigenen Namespaces beschränkt. -- **Veeam Kasten** (auch „k10“) ist eine Lösung zum **Backup** von Kubernetes-Workloads. +- **Veeam Kasten** (auch 'k10' genannt) ist eine Lösung zur **Sicherung** von Kubernetes-Workloads. - Es ermöglicht das Backup einer vollständigen Bereitstellung: Manifests, Volumes usw. in den Cloud-Temple S3-Objektspeicher. **Kasten** nutzt **Kanister**, um konsistente Anwendungsbackups zu ermöglichen, beispielsweise für Datenbanken ([https://docs.kasten.io/latest/usage/blueprints/](https://docs.kasten.io/latest/usage/blueprints/)). + Es ermöglicht die Sicherung einer vollständigen Bereitstellung: Manifeste, Volumes usw. in den Cloud-Temple S3-Objektspeicher. **Kasten** nutzt **Kanister**, um konsistente anwendungsspezifische Sicherungen zu ermöglichen, beispielsweise für Datenbanken ([https://docs.kasten.io/latest/usage/blueprints/](https://docs.kasten.io/latest/usage/blueprints/)). - **Kasten** ist ein plattformübergreifendes Tool, das mit anderen Kubernetes-Clustern (OpenShift, Hyperscaler, ...) arbeiten kann. Es kann daher für Szenarien zur Reversibilität oder Migration eingesetzt werden (K10 verwaltet eventuelle Anpassungen über *Transformationen*, z. B. einen Wechsel der Ingress-Class), sowie für „Refresh“-Szenarien (Beispiel: geplante Wiederherstellung einer Produktionsumgebung in einer Pre-Production-Umgebung). + **Kasten** ist ein plattformübergreifendes Tool, das auch mit anderen Kubernetes-Clustern (OpenShift, Hyperscaler usw.) funktioniert. Es kann daher für Reversibilitäts- oder Migrationsszenarien verwendet werden (K10 verwaltet eventuelle Anpassungen über *Transformations*, z. B. einen Wechsel der ingress-class), aber auch für "Refresh"-Szenarien (Beispiel: geplante Wiederherstellung einer Produktionsumgebung in der Pre-Production). -- **SSO-Authentifizierung** über einen externen OIDC-Identity-Provider (Microsoft Entra, FranceConnect, Okta, AWS IAM, Google, Salesforce, ...) +- **SSO-Authentifizierung** mit einem externen OIDC-Identity-Provider (Microsoft Entra, FranceConnect, Okta, AWS IAM, Google, Salesforce, ...) ## SLA & Supportinformationen -- **Garantierte Verfügbarkeit (production 3 AZ)** : 99.90 % -- **Support** : N1/N2/N3 inclus pour le périmètre socle (infrastructure et opérateurs standards). -- **Zusage zur Wiederherstellungszeit (ETR)** : gemäß Rahmenvertrag Cloud Temple. -- **Wartung (MCO)** : regelmäßiges Patchen von Talos / Kubernetes / opérateurs standards par MSP, sans interruption de service (rolling upgrade). +- **Garantierte Verfügbarkeit (Produktion 3 AZ)** : 99.95 % +- **Support** : N1/N2/N3 im Basisumfang enthalten (Infrastruktur und Standard-Operatoren). +- **Zusicherung zur Wiederherstellungszeit (ETR)** : gemäß Cloud Temple Rahmenvertrag. +- **Wartung (MCO)** : regelmäßiges Patching von Talos / Kubernetes / Standard-Operatoren durch MSP, ohne Dienstunterbrechung (Rolling Upgrade). -Die Reaktions- und Wiederherstellungszeiten hängen von der Schwere des Vorfalls ab, gemäß der Support-Matrix (P1 à P4). +Die Reaktions- und Wiederherstellungszeiten hängen von der Schwere des Vorfalls ab, entsprechend der Supportmatrix (P1 bis P4). ## Versionsrichtlinie & Lebenszyklus -- **Unterstütztes Kubernetes:** N-2 (3 Major-Releases pro Jahr, ca. alle 4 Monate). Jedes Release wird offiziell 12 Monate unterstützt, was ein Support-Fenster von maximal ~16 Monaten pro Version für Cloud Temple gewährleistet. -- **Talos OS:** ausgerichtet auf die stabilen Kubernetes-Versionen. - - Jede Branch wird ca. 12 Monate gewartet (inkl. Sicherheits-Patches). - - Empfohlener Upgrade-Rhythmus: 3 Mal pro Jahr, konsistent mit den Kubernetes-Upgrades. - - Kritische Patches (CVE, Kernel) werden im Rolling-Upgrade angewendet, ohne Dienstunterbrechung. -- **Standard-Operatoren:** werden innerhalb von 90 Tagen nach stabilem Release aktualisiert. -- **Updates:** - - **Major** (Kubernetes N+1, Talos X+1): geplant 3 Mal/Jahr, im Rolling-Update. - - **Minor:** automatisch innerhalb von 30 bis 60 Tagen angewendet. -- **Deprecation:** Version N-3 → Supportende innerhalb von 90 Tagen nach Veröffentlichung von N. +- **Unterstütztes Kubernetes :** N-2 (3 Major-Releases pro Jahr, etwa alle 4 Monate). Jedes Release wird offiziell 12 Monate unterstützt, was ein Cloud Temple Supportfenster von maximal ~16 Monaten pro Version gewährleistet. +- **Talos OS :** an die stabilen Kubernetes-Versionen angepasst. + - Jeder Zweig wird etwa 12 Monate gewartet (einschließlich Sicherheitspatches). + - Empfohlener Upgrade-Rhythmus : 3-mal jährlich, im Einklang mit den Kubernetes-Upgrades. + - Kritische Patches (CVE, Kernel) werden als Rolling Upgrade angewendet, ohne Dienstunterbrechung. +- **Standard-Operatoren :** innerhalb von 90 Tagen nach dem stabilen Release aktualisiert. +- **Updates :** + - **Major** (Kubernetes N+1, Talos X+1) : 3-mal jährlich geplant, als Rolling Update. + - **Minor** : automatisch innerhalb von 30 bis 60 Tagen angewendet. +- **Deprecation :** Version N-3 → Supportende innerhalb von 90 Tagen nach Veröffentlichung von N. ## Kubernetes-Knoten -### Produktion (multi-zonal) +### Produktion (Multi-Zonen) -Für eine „Produktions“-Bereitstellung (multi-zonal) werden die folgenden Maschinen verwendet: +Für eine "Produktions"-Bereitstellung (Multi-Zonen) werden folgende Maschinen verwendet: -| **AZ** | **Instanz** | **vCores** | **RAM** | **Lokaler Speicher** | +| **AZ** | **Maschine** | **vCores** | **RAM** | **Lokaler Speicher** | |---|---|---|---|---| -| AZ07 | Git Runner | 4 | 8 Go | OS: 64 Go | -| AZ05 | Control Plane 1 | 8 | 12 Go | OS: 64 Go | -| AZ06 | Control Plane 2 | 8 | 12 Go | OS: 64 Go | -| AZ07 | Control Plane 3 | 8 | 12 Go | OS: 64 Go | -| AZ05 | Storage Node 1 | 12 | 24 Go | OS: 64 Go + Ceph 500 Go minimum (*) | -| AZ06 | Storage Node 2 | 12 | 24 Go | OS: 64 Go + Ceph 500 Go minimum (*)| -| AZ07 | Storage Node 3 | 12 | 24 Go | OS: 64 Go + Ceph 500 Go minimum (*)| -| AZ05 | Worker Node 1 (**) | 12 | 24 Go | OS: 64 Go | -| AZ06 | Worker Node 2 (**) | 12 | 24 Go | OS: 64 Go | -| AZ07 | Worker Node 3 (**) | 12 | 24 Go | OS: 64 Go | +| AZ07 | Git Runner | 4 | 8 GB | OS: 256 GB | +| AZ05 | Control Plane 1 | 8 | 12 GB | OS: 128 GB | +| AZ06 | Control Plane 2 | 8 | 12 GB | OS: 128 GB | +| AZ07 | Control Plane 3 | 8 | 12 GB | OS: 128 GB | +| AZ05 | Storage Node 1 | 12 | 24 GB | OS: 128 GB + Ceph 500 GB Minimum (*) | +| AZ06 | Storage Node 2 | 12 | 24 GB | OS: 128 GB + Ceph 500 GB Minimum (*)| +| AZ07 | Storage Node 3 | 12 | 24 GB | OS: 128 GB + Ceph 500 GB Minimum (*)| +| AZ05 | Worker Node 1 (**) | 12 | 24 GB | OS: 128 GB | +| AZ06 | Worker Node 2 (**) | 12 | 24 GB | OS: 128 GB | +| AZ07 | Worker Node 3 (**) | 12 | 24 GB | OS: 128 GB | -(*) : Jeder Storage-Knoten wird mit mindestens 500 GB Festplattenspeicher ausgeliefert, um einen nutzbaren verteilten Ceph-Speicher von 500 GB zu gewährleisten (die Daten werden in jeder AZ repliziert, also x3). Der für den Kunden verfügbare freie Speicherplatz beträgt ca. 350 GB. Diese initiale Größe kann bei der Erstellung oder später je nach Bedarf erweitert werden. Auf Ceph werden Quotas angewendet, mit einer Aufteilung in Block/File. +(*) : Jeder Storage Node wird mit mindestens 500 GB Festplattenspeicher geliefert, was einem nutzbaren, verteilten Ceph-Speicher von 500 GB entspricht (die Daten werden auf jede AZ repliziert, also x3). Der für den Kunden verfügbare freie Speicher beträgt etwa 350 GB. Diese anfängliche Größe kann bei der Bereitstellung oder später je nach Bedarf erhöht werden. Auf Ceph werden Quotas angewendet, mit einer Block-/Datei-Aufteilung. -(**) : Größe und Anzahl der Worker Nodes können an den Rechenkapazitätsbedarf des Kunden angepasst werden. Die Mindestanzahl an Worker Nodes beträgt 3 (1 pro AZ). Wir empfehlen, die Anzahl in Schritten von 3 zu erhöhen, um eine konsistente multi-zonale Verteilung beizubehalten. Die Größe der Worker Nodes kann angepasst werden, wobei ein Minimum von 12 Cores und 24 GB RAM gilt; die Obergrenze pro Worker Node wird durch die Größe der verwendeten Hypervisor-Blades festgelegt (also potenziell 112 Cores/1536 GB RAM mit Performance 3-Blades). Die Anzahl der Worker Nodes ist auf 100 begrenzt. Das CNCF empfiehlt Worker Nodes mit identischer Größe. Die Obergrenze für die Anzahl der Pods pro Worker Node beträgt 110. +(**) : Größe und Anzahl der Worker Nodes können je nach Rechenkapazitätsbedarf des Kunden angepasst werden. Die Mindestanzahl an Worker Nodes beträgt 3 (1 pro AZ), und wir empfehlen, ihre Anzahl in Schritten von 3 zu erhöhen, um eine konsistente Multi-Zonen-Verteilung beizubehalten. Die Größe der Worker Nodes kann angepasst werden, mit einem Minimum von 12 Kernen und 24 GB RAM; die Obergrenze pro Worker Node wird durch die Größe der verwendeten Hypervisoren festgelegt (potenziell also 112 Kerne/1536 GB RAM mit Performance 3 Blades). Die Anzahl der Worker Nodes ist auf 100 begrenzt. Das CNCF empfiehlt, Worker Nodes gleicher Größe zu verwenden. Die Begrenzung der Pods pro Worker Node liegt bei 110. ### Dev/Test -Für eine "Dev/Test"-Version werden die folgenden Maschinen bereitgestellt: +Für eine "Dev/Test"-Version werden folgende Maschinen bereitgestellt: | **AZ** | **Maschine** | **vCores** | **RAM** | **Lokaler Speicher** | |---|---|---|---|---| -| AZ0n | Git Runner | 4 | 8 Go | OS: 30 Go | -| AZ0n | Control Plane | 8 | 12 Go | OS: 64 Go | -| AZ0n | Worker Node 1 (**) | 12 | 24 Go | OS: 64 Go + Ceph 300 Go minimum (*) | -| AZ0n | Worker Node 2 (**) | 12 | 24 Go | OS: 64 Go + Ceph 300 Go minimum (*) | -| AZ0n | Worker Node 3 (**) | 12 | 24 Go | OS: 64 Go + Ceph 300 Go minimum (*) | +| AZ0n | Git Runner | 4 | 8 GB | OS: 30 GB | +| AZ0n | Control Plane | 8 | 12 GB | OS: 128 GB | +| AZ0n | Worker Node 1 (**) | 12 | 24 GB | OS: 128 GB + Ceph mindestens 300 GB (*) | +| AZ0n | Worker Node 2 (**) | 12 | 24 GB | OS: 128 GB + Ceph mindestens 300 GB (*) | +| AZ0n | Worker Node 3 (**) | 12 | 24 GB | OS: 128 GB + Ceph mindestens 300 GB (*) | -(*) : 3 Worker Nodes werden als Storage Nodes verwendet und mit mindestens 300 GB Speicherplatz bereitgestellt, was einem nutzbaren verteilten Speicher von 300 GB entspricht (die Daten werden dreifach repliziert). Der für den Kunden verfügbare freie Speicher beträgt ca. 150 GB. Diese initiale Größe kann bei der Bereitstellung oder später je nach Bedarf erweitert werden. +(*) : 3 Worker Nodes werden als Storage Nodes verwendet und werden mit mindestens 300 GB Festplattenspeicher geliefert, was einer nutzbaren verteilten Speicherkapazität von 300 GB entspricht (die Daten werden dreifach repliziert). Der für den Kunden verfügbare freie Speicher beträgt etwa 150 GB. Diese anfängliche Größe kann bei der Provisionierung oder später je nach Bedarf erhöht werden. -(**) : Die Größe und Anzahl der Worker Nodes kann an den Rechenkapazitätsbedarf des Kunden angepasst werden. Die Mindestanzahl an Worker Nodes beträgt 3 (aufgrund der Speicherreplikation). Die Größe der Worker Nodes kann angepasst werden, mit einem Minimum von 12 Cores und 24 GB RAM; die Obergrenze pro Worker Node wird durch die Größe der verwendeten Hypervisor-Hosts festgelegt (also potenziell 112 Cores/1536 GB RAM mit Performance 3 Blades). Die Anzahl der Worker Nodes ist auf 250 begrenzt. Das CNCF empfiehlt, Worker Nodes mit identischer Größe zu verwenden. Die Obergrenze für die Anzahl der Pods pro Worker Node beträgt 110. +(**) : Größe und Anzahl der Worker Nodes können an den Rechenleistungsbedarf des Kunden angepasst werden. Die Mindestanzahl an Worker Nodes beträgt 3 (aufgrund der Speicherreplikation). Die Größe der Worker Nodes kann angepasst werden, mit einem Minimum von 12 Kernen und 24 GB RAM; die Obergrenze pro Worker Node wird durch die Größe der verwendeten Hypervisoren festgelegt (potenziell also 112 Kerne/1536 GB RAM mit Performance-3-Blades). Die Anzahl der Worker Nodes ist auf 250 begrenzt. Der CNCF empfiehlt, Worker Nodes gleicher Größe zu verwenden. Die maximale Anzahl von Pods pro Worker Node beträgt 110. ## RACI ### Architektur & Infrastruktur -| **Aufgabe** | **Client** | **Cloud Temple** | +| **Aktivität** | **Kunde** | **Cloud Temple** | |---|---|---| -| Globale Architektur des Kubernetes-Dienstes definieren | C | RA | -| Kubernetes-Dienst dimensionieren (Anzahl der Knoten, Ressourcen) | C | RA | -| Kubernetes-Dienst mit Standardkonfiguration installieren | I | RA | -| Konfiguration des Kubernetes-Dienstes | C | RA | -| Basisnetzwerk des Kubernetes-Dienstes konfigurieren | I | RA | -| Bereitstellung der initialen Konfiguration für Identitäten und Zugriffe | C | RA | -| Strategie für Skalierung und Hochverfügbarkeit definieren | C | RA | +| Globale Architektur des Kubernetes-Services definieren | C | RA | +| Kubernetes-Service dimensionieren (Anzahl der Knoten, Ressourcen) | C | RA | +| Kubernetes-Service mit Standardkonfiguration installieren | I | RA | +| Konfiguration des Kubernetes-Services | C | RA | +| Basisnetzwerk des Kubernetes-Services konfigurieren | I | RA | +| Bereitstellung der initialen Identitäts- und Zugriffskonfiguration | C | RA | +| Skalierungs- und Hochverfügbarkeitsstrategie definieren | C | RA | -### Projekt- und Geschäftsanwendungsverwaltung +### Projekt- und Geschäftsanwendungsmanagement -| **Aktivität** | **Client** | **Cloud Temple** | +| **Tätigkeit** | **Kunde** | **Cloud Temple** | |---|---|---| -| Kubernetes-Projekte erstellen und verwalten | RA | I* | -| Anwendungen in Kubernetes bereitstellen und verwalten | RA | I* | -| CI/CD-Pipelines konfigurieren | RA | I* | -| Container-Images und -Registries verwalten | RA | I* | +| Erstellen und Verwalten von Kubernetes-Projekten | RA | I* | +| Bereitstellen und Verwalten von Anwendungen in Kubernetes | RA | I* | +| Konfigurieren von CI/CD-Pipelines | RA | I* | +| Verwalten von Container-Images und Registries | RA | I* | -*kann je nach Wartungsvertrag auf "C" wechseln +*kann je nach Managed-Service-Vertrag auf "C" wechseln -### Monitoring und Performance +### Überwachung und Leistung -| **Aktivität** | **Kunde** | **Cloud Temple** | +| **Aktivität** | **Kunde** | **Cloud Temple** | |---|---|---| -| Performance des Kubernetes-Dienstes überwachen | I | RA* | -| Performance der Anwendungen überwachen | RA | | -| Alerts des Kubernetes-Dienstes verwalten | I | RA* | -| Alerts der Anwendungen verwalten | RA | | +| Überwachung der Leistung des Kubernetes-Dienstes | I | RA* | +| Überwachung der Anwendungsleistung | RA | | +| Verwaltung der Alarme für den Kubernetes-Dienst | I | RA* | +| Verwaltung der Alarme für die Anwendungen | RA | | -(*) : *Nur Produktionscluster. Im Dev/Test-Bereich ist der Kunde vollständig eigenverantwortlich.* +(*) : *Nur für Produktionscluster. In Dev/Test ist der Kunde vollständig autonom und verantwortlich.* ### Wartung und Updates der Infrastrukturen -| **Aktivität** | **Client** | **Cloud Temple** | +| **Aktivität** | **Kunde** | **Cloud Temple** | |---|---|---| | Kubernetes/OS-Dienst aktualisieren | C | RA | | Sicherheitspatches für Kubernetes anwenden | C | RA | | Bereitgestellte Anwendungen aktualisieren (Operatoren*) | C | RA | -*Operator-Paket auf Managed Kube enthalten - siehe Kapitel: Verwaltete Helm-Pakete +*Operator-Paket in Managed Kube enthalten – siehe Kapitel: Verwaltete Helm-Pakete ### Sicherheit -| **Aktivität** | **Client** | **Cloud Temple** | +| **Aufgabe** | **Kunde** | **Cloud Temple** | |---|---|---| | Sicherheit des Kubernetes-Dienstes verwalten | RA | RA* | -| Pod-Sicherheitsrichtlinien konfigurieren und verwalten | RA | I | +| Sicherheitsrichtlinien für Pods konfigurieren und verwalten | RA | I | | SSL/TLS-Zertifikate für den Kubernetes-Dienst verwalten | C | RA* | -| SSL/TLS-Zertifikate für Anwendungen verwalten | RA | I | -| Implementieren und Verwalten der grundlegenden rollenbasierten Zugriffskontrolle (RBAC)| C | R* | -| Implementieren und Verwalten der kundenseitigen rollenbasierten Zugriffskontrolle (RBAC) | RA | I | +| SSL/TLS-Zertifikate für die Anwendungen verwalten | RA | I | +| Rollenbasierte Zugriffskontrolle (RBAC) implementieren und verwalten| C | R* | +| Rollenbasierte Zugriffskontrolle für Clients (RBAC) implementieren und verwalten | RA | I | -(*) : *Nur im Produktionscluster. In Dev/Test-Umgebungen ist der Client vollständig eigenverantwortlich.* +(*) : *Nur für Produktionscluster. In Dev/Test ist der Kunde vollständig autonom und trägt die volle Verantwortung.* ### Sicherung und Disaster Recovery -| **Aktivität** | **Client** | **Cloud Temple** | +| **Aufgabe** | **Kunde** | **Cloud Temple** | |---|---|---| -| Sicherungstrategie für den Kubernetes-Dienst festlegen | I | RA | +| Strategie für die Sicherung des Kubernetes-Dienstes definieren | I | RA | | Sicherungen des Kubernetes-Dienstes implementieren und verwalten | I | RA | -| Sicherungstrategie für Anwendungen festlegen | RA* | I* | -| Sicherungen von Anwendungen implementieren und verwalten | RA* | I* | +| Strategie für die Sicherung der Anwendungen definieren | RA* | I* | +| Sicherungen der Anwendungen implementieren und verwalten | RA* | I* | | Disaster-Recovery-Verfahren für den Kubernetes-Dienst testen | CI | RA | -| Disaster-Recovery-Verfahren für Anwendungen testen | RA* | CI* | +| Disaster-Recovery-Verfahren für die Anwendungen testen | RA* | CI* | -*kann je nach Managed-Services-Vertrag auf "CI | RA" geändert werden +*kann je nach Managed-Service-Vertrag auf "CI | RA" geändert werden -### Support und Problembehebung +### Support und Fehlerbehebung | **Aktivität** | **Kunde** | **Cloud Temple** | |---|---|---| -| Level-1-Support für die Infrastruktur bereitstellen | I | RA | -| Level-2- und Level-3-Support für die Infrastruktur bereitstellen | I | RA | -| Probleme mit dem Kubernetes-Dienst beheben | C | RA | -| Probleme mit den Anwendungen beheben | RA | I | +| Bereitstellung von Level-1-Support für die Infrastruktur | I | RA | +| Bereitstellung von Level-2- und Level-3-Support für die Infrastruktur | I | RA | +| Behebung von Problemen im Zusammenhang mit dem Kubernetes-Dienst | C | RA | +| Behebung von Problemen im Zusammenhang mit Anwendungen | RA | I | -### Kapazitätsmanagement und -skalierung +### Kapazitätsmanagement und Weiterentwicklung -*Nur im Produktions-Cluster. In Dev/Test ist der Kunde vollständig eigenverantwortlich und autonom tätig.* +*Nur Produktionscluster. In Dev/Test ist der Kunde vollständig autonom und trägt die volle Verantwortung.* | **Aktivität** | **Kunde** | **Cloud Temple** | |---|---|---| -| Überwachung der Kubernetes-Ressourcennutzung | C | RA | -| Planung der Kapazitätserweiterung des Dienstes | RA | C | -| Durchführung von Kapazitätsanpassungen | I | RA | -| Verwaltung der Anwendungsentwicklung und ihrer Ressourcen | RA | I | +| Überwachung der Kubernetes-Ressourcennutzung | C | RA | +| Planung der Kapazitätsentwicklung des Dienstes | RA | C | +| Implementierung von Kapazitätsänderungen | I | RA | +| Verwaltung der Weiterentwicklung von Anwendungen und deren Ressourcen | RA | I | -### Dokumentation und Konformität +### Dokumentation und Compliance | **Aktivität** | **Kunde** | **Cloud Temple** | |---|---|---| -| Dokumentation des Kubernetes-Produkts pflegen | I | RA | -| Dokumentation der Anwendungen pflegen | RA | I | -| Konformität des Kubernetes-Dienstes gewährleisten | I | RA | -| Konformität der Anwendungen gewährleisten | RA | I | -| Audits des Kubernetes-Dienstes durchführen | I | RA | -| Audits der Anwendungen durchführen | RA | I | +| Dokumentation des Kubernetes-Produkts pflegen | I | RA | +| Dokumentation der Anwendungen pflegen | RA | I | +| Compliance des Kubernetes-Dienstes gewährleisten | I | RA | +| Compliance der Anwendungen gewährleisten | RA | I | +| Audits des Kubernetes-Dienstes durchführen | I | RA | +| Audits der Anwendungen durchführen | RA | I | -### Verwaltung von Kubernetes-Operatoren/CRD (im Produkt enthalten) +### Verwaltung von Kubernetes-Operatoren/CRDs (im Produkt enthalten) | **Aktivität** | **Kunde** | **Cloud Temple** | |---|---|---| | Bereitstellung des Standard-Operator-Katalogs | CI | RA | | Aktualisierung der Operatoren | CI | RA | | Überwachung des Operator-Status | CI | RA | -| Behebung von Operator-Problemen | CI | RA | +| Behebung von Operator-bezogenen Problemen | CI | RA | | Verwaltung der Operator-Berechtigungen | CI | RA | | Verwaltung der Operator-Ressourcen (Hinzufügen/Entfernen) | CI | RA | -| Sicherung der Daten der Operator-Ressourcen | CI | RA | +| Sicherung der Operator-Ressourcendaten | CI | RA | | Überwachung der Operator-Ressourcen | CI | RA | -| Wiederherstellung der Daten der Operator-Ressourcen | CI | RA | +| Wiederherstellung der Operator-Ressourcendaten | CI | RA | | Sicherheitsaudit der Operatoren | CI | RA | -| Support für Operatoren | CI | RA | +| Support der Operatoren | CI | RA | | Verwaltung der Operator-Lizenzen | CI | RA | | Verwaltung spezifischer Supportpläne für Operatoren | CI | RA | -*Operator-Paket in Managed Kube enthalten - siehe Kapitel: Verwaltete Helm-Pakete +*Operator-Paket enthalten in Managed Kube - siehe Kapitel: Verwaltete Helm-Pakete -### Verwaltung von Kubernetes-Anwendungen/Operatoren/CRDs (seitens des Kunden) +### Verwaltung von Anwendungen/Operatoren/Kubernetes-CRDs (des Kunden) -*Nur im Produktions-Cluster. In Dev/Test ist der Kunde vollständig eigenverantwortlich.* +*Nur für Produktionscluster. In Dev/Test ist der Kunde vollständig autonom und trägt die volle Verantwortung.* -| **Tätigkeit** | **Kunde** | **Cloud Temple** | +| **Tätigkeit** | **Kunde** | **Cloud Temple** | |---|---|---| -| Bereitstellung von CRDs | I* | RA* | -| Aktualisierung der Operatoren | RA | I | -| Überwachung des Status der Operatoren | RA | I | -| Behebung von Problemen mit Operatoren | RA | I | -| Verwaltung der Berechtigungen der Operatoren | RA | I | -| Verwaltung der Ressourcen der Operatoren (Hinzufügen/Entfernen) | RA | I | -| Sicherung der Daten der Operator-Ressourcen | RA | I | -| Überwachung der Operator-Ressourcen | RA | I | -| Wiederherstellung der Daten der Operator-Ressourcen | RA | I | -| Sicherheitsaudit der Operatoren | RA | I | -| Support für Operatoren | RA | I | -| Verwaltung der Lizenzen für Operatoren | RA | I | -| Verwaltung spezifischer Supportverträge für Operatoren | RA | I | - -Einige Operator-Dienste können je nach Managed-Services-Vertrag übernommen werden. - -*kann je nach Managed-Services-Vertrag auf "A | RC" wechseln - -### Anwendungsunterstützung - -| **Leistung** | **Kunde** | **Cloud Temple** | +| Bereitstellung der CRDs | I* | RA* | +| Aktualisierung der Operatoren | RA | I | +| Überwachung des Operator-Status | RA | I | +| Fehlerbehebung bei Operatoren | RA | I | +| Verwaltung der Operator-Berechtigungen | RA | I | +| Verwaltung der Operator-Ressourcen (Hinzufügen/Entfernen) | RA | I | +| Sicherung der Operator-Ressourcendaten | RA | I | +| Überwachung der Operator-Ressourcen | RA | I | +| Wiederherstellung der Operator-Ressourcendaten | RA | I | +| Sicherheitsaudit der Operatoren | RA | I | +| Operator-Support | RA | I | +| Lizenzverwaltung für Operatoren | RA | I | +| Verwaltung spezifischer Supportpläne für Operatoren | RA | I | + +Bestimmte Operator-Dienstleistungen können je nach Managed-Services-Vertrag übernommen werden. + +*kann je nach Managed-Services-Vertrag zu "A | RC" wechseln + +### Anwendungssupport + +| **Aktivität** | **Kunde** | **Cloud Temple** | |---|---|---| -| Anwendungsunterstützung (externe Leistung) | RA | I | +| Anwendungssupport (externe Leistung) | RA | I | -Eine Anwendungsunterstützung kann als Zusatzleistung erbracht werden. +Ein Anwendungssupport kann über eine Zusatzleistung bereitgestellt werden. -### RACI (kompakt) +### RACI (zusammenfassend) -- Cloud Temple : verantwortlich und ausführend (RA) für die Kubernetes-Plattform, Cluster-Sicherheit, Infrastruktur-Backups, Monitoring, CRD. -- Client : verantwortlich und ausführend (RA) für die Anwendungsprojekte, fachliche Operatoren, CI/CD-Pipelines, Anwendungs-Backups. -- Grauzone : Anpassungen und Erweiterungen (IAM, spezifische Operatoren, Härtung der Cluster-Compliance/-Sicherheit) – abgerechnet im Projektmodus. \ No newline at end of file +- Cloud Temple: Verantwortlich und ausführend (RA) für die Kubernetes-Basis, Clustersicherheit, Infrastruktursicherung, Monitoring, CRD. +- Kunde: Verantwortlich und ausführend (RA) für die Anwendungsprojekte, Business-Operatoren, CI/CD-Pipelines, Anwendungssicherungen. +- Grauzone: Anpassungen und Erweiterungen (IAM, spezifische Operatoren, Compliance- und Sicherheits-Härtung des Clusters) – projektbasiert abgerechnet. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_core_kubernetes.md b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_core_kubernetes.md index 0037218b..4b80434d 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_core_kubernetes.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_core_kubernetes.md @@ -13,66 +13,68 @@ import archiOverview from '@site/docs/managed_kubernetes/images/archi_overview.p Konzepte erkunden →
      -

      Erste Schritte

      -

      Starten Sie schnell mit klaren und einfachen Anweisungen.

      +

      Schnellstart-Anleitung

      +

      Starten Sie schnell, indem Sie klaren und einfachen Anweisungen folgen.

      Quickstart starten →

      Tutorials

      -

      Lernen Sie Schritt für Schritt die Konfiguration und Nutzung unserer Dienste mit detaillierten Anleitungen.

      +

      Lernen Sie Schritt für Schritt, unsere Dienste mit detaillierten Anleitungen zu konfigurieren und zu nutzen.

      Tutorials entdecken →
      -Managed **Core** Kubernetes von Cloud Temple ist eine Container-Orchestrierungslösung, die auf einer Auswahl Open-Source-Produkte basiert und darauf ausgelegt ist, eine sichere, resiliente und automatisierte Basis auf den SecNumCloud-Plattformen von Cloud Temple zu bieten. Jeder Cluster wird in einer vollständig dem Kunden gewidmeten IaaS-Umgebung von Cloud-Temple bereitgestellt. +Managed **Core** Kubernetes von Cloud Temple ist eine Container-Orchestrierungslösung, die auf einer Auswahl von Open-Source-Produkten basiert und darauf ausgelegt ist, eine sichere, resiliente und automatisierte Grundlage auf den SecNumCloud-Plattformen von Cloud Temple zu bieten. Jeder Cluster wird in einer vollständig dem Kunden gewidmeten IaaS-Umgebung von Cloud-Temple bereitgestellt. -Dieses Produkt ist für Teams konzipiert, die über hervorragende Kubernetes- und Cloud-Native-Tools-Kenntnisse verfügen und ihre eigene Plattform auf minimalistischen und robusten Grundlagen aufbauen möchten. Sie richtet sich an Open-Source-Enthusiasten, die eine aufgeräumte, portable Lösung ohne herstellerspezifische Aufschicht suchen, die auf einem minimalistischen und unveränderlichen Betriebssystem basiert, das für Automatisierung und Sicherheit konzipiert ist. +Dieses Produkt ist für Teams konzipiert, die über eine hervorragende Beherrschung von Kubernetes und Cloud-Native-Tools verfügen und ihre eigene Plattform auf minimalistischen und robusten Grundlagen aufbauen möchten. Es richtet sich an Open-Source-Enthusiasten, die eine schlanke, portable Lösung ohne herstellerspezifische Zusatzschichten auf einem minimalistischen und unveränderlichen Betriebssystem suchen, das für Automatisierung und Sicherheit konzipiert ist. -### Hauptvorteile +### Wichtige Vorteile -- **Souveränität und Reversibilität** : Die Lösung stützt sich ausschließlich auf Open-Source-Standards (Kubernetes CNCF), um technologische Abhängigkeiten zu vermeiden und die Portabilität Ihrer Anwendungen zu gewährleisten. -- **„Zero-Trust“-Sicherheit by design** : Die Architektur basiert auf Talos OS, einem unveränderlichen Betriebssystem ohne direkten Zugriff (weder Shell noch SSH), was die Angriffsfläche drastisch reduziert und eine solide Grundlage für eine „Zero-Trust“-Sicherheitsstrategie bildet. -- **Moderne Netzwerkinfrastruktur** : Die Integration von Cilium für das CNI und MetalLB für die Dienstexposition bietet eine leistungsstarke und standardisierte Netzwerkgrundlage, die bereit ist, Ihre eigenen Sicherheits- und Filterkomponenten aufzunehmen. +- **Souveränität und Reversibilität** : Die Lösung basiert ausschließlich auf Open-Source-Standards (Kubernetes CNCF), um technologische Abhängigkeiten zu vermeiden und die Portabilität Ihrer Anwendungen zu gewährleisten. +- **Sicherheit "Zero-Trust" by Design** : Die Architektur basiert auf Talos OS, einem unveränderlichen Betriebssystem ohne direkten Zugriff (ni shell, ni SSH), was die Angriffsfläche drastisch reduziert und eine solide Grundlage für eine "Zero-Trust"-Sicherheitsstrategie bildet. +- **Moderne Netzwerkgrundlagen** : Die Integration von Cilium für CNI und MetalLB zur Dienstbereitstellung bietet eine leistungsstarke und standardkonforme Netzwerkbasis, die bereit ist, Ihre eigenen Sicherheits- und Filterkomponenten aufzunehmen. ### Eine Basisplattform, bereit zur Erweiterung -Das "Managed Core"-Angebot enthält nativ einen minimalen und konsistenten Stack modernster Open-Source-Tools, der Ihnen die Grundlagen für einen Kubernetes-Cluster bietet: +Das "Managed Core"-Angebot enthält von Haus aus einen minimalen und konsistenten Stack modernster Open-Source-Tools, um Ihnen die Grundlage für einen Kubernetes-Cluster : - **Betriebssystem und Netzwerk** : Talos, Cilium, MetalLB -Auf dieser Grundlage können Sie frei Ihre eigenen Tools für Continuous Deployment, Observability, Backup und Kostenmanagement integrieren. +Auf dieser Grundlage sind Sie frei, Ihre eigenen Tools für kontinuierliche Bereitstellung, Observability, Sicherung und Kostenmanagement zu integrieren. --- -## Bereitstellungsarchitekturen +## Deployment-Architekturen -Wir bieten zwei verschiedene Architekturen an, um Ihren Anforderungen gerecht zu werden, sei es für Entwicklungs- oder kritische Produktionsumgebungen. +Wir bieten zwei unterschiedliche Architekturen an, um Ihren Anforderungen gerecht zu werden, sei es für Entwicklungsumgebungen oder kritische Produktionsumgebungen. ### Architektur "Dev/Test" -Ideal für POC-Umgebungen, stellt diese kompakte Architektur alle Ressourcen innerhalb einer einzigen Verfügbarkeitszone (AZ) bereit. +Ideal für POC-Umgebungen, bereitstellt diese kompakte Architektur alle Ressourcen innerhalb einer einzigen Verfügbarkeitszone (AZ). -- **Anwendungsfall** : Entwicklung, Tests, Proof-of-Concept (POC). -- **Schlüsselaspekte** : +- **Einsatzszenarien** : Entwicklung, Tests, Proof-of-Concept (POC). +- **Kernmerkmale** : - 1 Control-Plane-Knoten. - 3 Worker-Knoten (oder mehr). - - Kein SLA für Hochverfügbarkeit. - - Keine Sicherheitsbeschränkungen + - Kein SLA für hohe Verfügbarkeit. + - keine Sicherheitsbeschränkungen -Architecture Mono-AZ +Mono-AZ-Architektur ### Produktionsarchitektur (Multi-AZ) -Für den Produktivbetrieb und kritische Anwendungen konzipiert, verteilt diese Architektur die Ressourcen auf drei Verfügbarkeitszonen (AZ), um eine hohe Verfügbarkeit und maximale Resilienz gemäß den SecNumCloud-Anforderungen zu gewährleisten. +Entwickelt für Produktionsumgebungen und kritische Anwendungen verteilt diese Architektur die Ressourcen über drei Verfügbarkeitszonen (AZ), um hohe Verfügbarkeit und maximale Resilienz gemäß den SecNumCloud-Anforderungen zu gewährleisten. -- **Anwendungsfall** : Produktivanwendungen, kritische Dienste, Plattformen mit SLA-Anforderungen. -- **Schlüsselaspekte** : - - **Hohe Verfügbarkeit** : 3 Control-Plane-Knoten, verteilt auf 3 AZ. +- **Einsatzszenario** : Produktionsanwendungen, kritische Dienste, Plattformen, die ein SLA erfordern. +- **Kernmerkmale** : + - **Hohe Verfügbarkeit** : 3 Control-Plane-Knoten verteilt auf 3 AZ. + - **Dedizierter Speicher** : 3 dedizierte und verteilte Speicherknoten für Performance und Resilienz. - **Verteilte Worker** : Mindestens 3 Worker-Knoten, jeweils einer pro AZ. - - **Bare-Metal-Knoten (Optional)** : Möglichkeit zur Integration von Worker-Knoten vom Typ **"Bare Metal"** für spezifische Leistungsanforderungen, insbesondere die **GPU-Unterstützung**. - - **SLA von 99,90 %**, monatlich gemessen. + - **Bare-Metal-Knoten (Optional)** : Optionale Integration von Worker-Knoten vom Typ **"Bare Metal"** für spezifische Leistungsanforderungen, insbesondere zur **GPU-Unterstützung**. + - **SLA von 99,95%**, monatlich gemessen. -Multi-AZ-Architektur + +Architecture Multi-AZ --- diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md index 928dcc45..8d1a9f97 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md @@ -7,12 +7,12 @@ title: Übersicht

      Konzepte

      -

      Entdecken Sie die Grundlagen und wesentlichen Prinzipien, um unsere Infrastruktur zu meistern.

      +

      Entdecken Sie die Grundlagen und wesentlichen Prinzipien, um unsere Infrastruktur zu beherrschen.

      Konzepte erkunden →

      Erste Schritte

      -

      Starten Sie schnell mit klaren und einfachen Anweisungen.

      +

      Starten Sie schnell, indem Sie klaren und einfachen Anweisungen folgen.

      Quickstart starten →
      @@ -22,60 +22,60 @@ title: Übersicht
      -Managed Kubernetes von Cloud Temple ist eine auf Open-Source-Produkten basierende Container-Orchestrierungslösung, die entwickelt wurde, um auf den SecNumcloud-Plattformen von Cloud Temple ein hohes Maß an Sicherheit, Resilienz und Automatisierung zu bieten. Jeder Cluster wird in einer vollständig dem Kunden gewidmeten IaaS-Umgebung von Cloud-Temple bereitgestellt. +Managed Kubernetes von Cloud Temple ist eine Container-Orchestrierungslösung, die auf Open-Source-Produkten basiert und entwickelt wurde, um ein hohes Maß an Sicherheit, Resilienz und Automatisierung auf den SecNumcloud-Plattformen von Cloud Temple zu bieten. Jeder Cluster wird in einer vollständig dem Kunden gewidmeten IaaS-Umgebung von Cloud-Temple bereitgestellt. -Dieses Produkt ist für Teams mit fundierten Kubernetes-Kenntnissen sowie Open-Source-Enthusiasten konzipiert, die eine native, portierbare Lösung ohne herstellerspezifische Aufsatzschicht auf einem minimalistischen und unveränderlichen Betriebssystem suchen, das für Automatisierung und Sicherheit entwickelt wurde. +Dieses Produkt ist für Teams mit fundierten Kubernetes-Kenntnissen und Open-Source-Enthusiasten konzipiert, die eine native, portable Lösung ohne herstellerspezifische Schichten auf einem minimalistischen und unveränderlichen Betriebssystem suchen, das für Automatisierung und Sicherheit ausgelegt ist. -### Schlüsselvorteile +### Kernvorteile -- **Souveränität und Reversibilität** : Die Lösung stützt sich auf Open-Source-Standards (Kubernetes CNCF), um technologische Abhängigkeiten zu vermeiden und die Portabilität Ihrer Anwendungen zu gewährleisten. Das im Produkt enthaltene Backup-Tool Veeam Kasten wurde speziell entwickelt, um Migrationen von einer Cloud in eine andere zu erleichtern. -- **"Zero-Trust"-Sicherheit und Governance** : Die Architektur basiert auf Talos OS, einem unveränderlichen Betriebssystem ohne direkten Zugriff (weder Shell noch SSH), was die Angriffsfläche drastisch reduziert. Dieser Ansatz wird durch Governance-Tools wie Kyverno für die Richtlinienverwaltung und Capsule für die feingranulare Berechtigungsverwaltung ergänzt, was eine solide Grundlage für eine "Zero-Trust"-Sicherheitsstrategie bildet. -- **Kostenkontrolle und Integration** : Die Lösung integriert nativ FinOps-Tools wie OpenCost für eine präzise Verbrauchsanalyse. Das Kostenmodell ist transparent, basiert auf den verbrauchten IaaS-Ressourcen, und die Nutzung anerkannter Open-Source-Komponenten (Cilium, Ceph, ArgoCD) erleichtert die Integration in Ihre bestehenden Ökosysteme. +- **Souveränität und Reversibilität** : Die Lösung basiert auf Open-Source-Standards (Kubernetes CNCF), um technologische Abhängigkeiten zu vermeiden und die Portabilität Ihrer Anwendungen zu gewährleisten. Das im Produkt enthaltene Backup-Tool Veeam Kasten ist speziell dafür entwickelt, Migrationen von einer Cloud in eine andere zu erleichtern. +- **"Zero-Trust"-Sicherheit und Governance** : Die Architektur basiert auf Talos OS, einem unveränderlichen Betriebssystem ohne direkten Zugriff (weder Shell noch SSH), was die Angriffsfläche drastisch reduziert. Dieser Ansatz wird durch Governance-Tools wie Kyverno für das Policy-Management und Capsule für das feingranulare Rechte-Management ergänzt und bildet eine solide Grundlage für eine "Zero-Trust"-Sicherheitsstrategie. +- **Kostenkontrolle und Integration** : Die Lösung integriert nativ FinOps-Tools wie OpenCost für eine präzise Überwachung der Ressourcenverbräuche. Das Geschäftsmodell ist transparent und basiert auf den verbrauchten IaaS-Ressourcen. Der Einsatz anerkannter Open-Source-Komponenten (Cilium, Ceph, ArgoCD) erleichtert die Integration in Ihre bestehenden Ökosysteme. -### Eine vollständige und einsatzbereite Plattform +### Eine vollständige und sofort einsatzbereite Plattform -Die Lösung enthält nativ einen vollständigen und konsistenten Stack aus hochmodernen Open-Source-Tools, um alle Anforderungen des Anwendungslebenszyklus abzudecken: +Die Lösung enthält von Haus aus einen vollständigen und konsistenten Stack aus hochmodernen Open-Source-Tools, um alle Anforderungen des Anwendungslifecycles abzudecken: - **Netzwerk und Sicherheit** : Cilium, Hubble, MetalLB, Ingress Nginx, Kyverno, Capsule - **Speicher** : Rook-Ceph - **Kontinuierliche Bereitstellung (GitOps)** : ArgoCD -- **Observability** : Prometheus, Grafana, Loki +- **Observierbarkeit** : Prometheus, Grafana, Loki - **Sicherung und Migration** : Veeam Kasten - **Kostenmanagement (FinOps)** : OpenCost --- -## Bereitstellungsarchitekturen +## Deployment-Architekturen -Wir bieten zwei verschiedene Architekturen an, um Ihren Anforderungen gerecht zu werden, sei es für Entwicklungs- oder kritische Produktionsumgebungen. +Wir bieten zwei unterschiedliche Architekturen an, um Ihren Anforderungen gerecht zu werden, sei es für Entwicklungsumgebungen oder kritische Produktionsumgebungen. ### Architektur "Dev/Test" -Ideal für POC-Umgebungen, stellt diese kompakte Architektur alle Ressourcen innerhalb einer einzigen Verfügbarkeitszone (AZ) bereit. +Ideal für POC-Umgebungen, werden mit dieser kompakten Architektur alle Ressourcen innerhalb einer einzigen Verfügbarkeitszone (AZ) bereitgestellt. -- **Anwendungsfall** : Entwicklung, Tests, Proof-of-Concept (POC). -- **Wichtige Punkte** : +- **Einsatzszenarien** : Entwicklung, Tests, Proof-of-Concept (POC). +- **Kernmerkmale** : - 1 Control-Plane-Knoten. - 3 Worker-Knoten (oder mehr). - Der verteilte Speicher (Ceph) ist auf den Worker-Knoten ko-lokalisiert. - - Kein SLA für hohe Verfügbarkeit. - - Keine Sicherheitsbeschränkungen + - Bietet kein SLA für hohe Verfügbarkeit. + - keine Sicherheitsbeschränkungen Architecture Mono-AZ ### Produktionsarchitektur (Multi-AZ) -Für den Produktiveinsatz und kritische Anwendungen konzipiert, verteilt diese Architektur die Ressourcen auf drei Verfügbarkeitszonen (AZ), um eine hohe Verfügbarkeit und maximale Resilienz gemäß den SecNumCloud-Anforderungen zu gewährleisten. +Diese Architektur ist für Produktionsumgebungen und kritische Anwendungen konzipiert und verteilt die Ressourcen auf drei Verfügbarkeitszonen (AZ), um hohe Verfügbarkeit und maximale Resilienz gemäß den SecNumCloud-Anforderungen zu gewährleisten. -- **Anwendungsfall** : Produktivanwendungen, kritische Dienste, Plattformen mit SLA-Anforderungen. -- **Hauptmerkmale** : +- **Einsatzszenarien** : Produktionsanwendungen, kritische Dienste, Plattformen mit SLA-Anforderungen. +- **Kernmerkmale** : - **Hohe Verfügbarkeit** : 3 Control-Plane-Knoten, verteilt auf 3 AZ. - - **Dedizierter Speicher** : 3 dedizierte und verteilte Speicherknoten für Performance und Resilienz. - - **Verteilte Worker** : Mindestens 3 Worker-Knoten, jeweils einer pro AZ. - - **Bare-Metal-Knoten (Optionnel)** : Möglichkeit zur Integration von Worker-Knoten vom Typ **"Bare Metal"** für spezifische Leistungsanforderungen, insbesondere die **GPU-Unterstützung**. - - **SLA von 99,90 %**. + - **Dedizierter Speicher** : 3 dedizierte und verteilte Speicherknoten für Leistung und Resilienz. + - **Verteilte Worker** : Mindestens 3 Worker-Knoten, einer pro AZ. + - **Bare-Metal-Knoten (Optional)** : Optionale Integration von Worker-Knoten vom Typ **"Bare Metal"** für spezifische Leistungsanforderungen, insbesondere die **GPU-Unterstützung**. + - **SLA von 99,95 %**. -Multi-AZ-Architektur +Architecture Multi-AZ --- @@ -83,14 +83,14 @@ Für den Produktiveinsatz und kritische Anwendungen konzipiert, verteilt diese A Das Angebot umfasst im Detail die folgenden Komponenten: -- CNI Cilium mit Observability-Schnittstelle (Hubble) +- CNI Cilium, mit Observability-Oberfläche (Hubble) - Interne und externe Ingresses mit MetalLB und nginx -- Verteilter Speicher Rook-Ceph +- Verteilte Speicherung mit Rook-Ceph - Cert-Manager - ArgoCD - Prometheus-Stack (Prometheus, Grafana, Loki) - Container-Registry Harbor - Kostenmanagement mit OpenCost -- Erweiterte Sicherheitsrichtlinien mit Kyverno und Capsule -- Veeam Kasten (Sicherung, umgebungsübergreifende Automatisierungen und Wiederherstellbarkeit) +- Erweiterte Sicherheitsstrategien mit Kyverno und Capsule +- Veeam Kasten (Backup, Automatisierung über Umgebungen hinweg und Reversibilität) - SSO-Authentifizierung mit einem externen OIDC-Identity-Provider (Microsoft Entra, FranceConnect, Okta, AWS IAM, Google, Salesforce, ...) \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/concepts.md b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/concepts.md index fca33dce..1aad0ce3 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/concepts.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/concepts.md @@ -9,12 +9,12 @@ import archi_overview_1az from '@site/docs/managed_kubernetes/images/archi_overv ## Our Managed Kubernetes Offerings -Cloud Temple offers two distinct offerings to meet your container orchestration needs: +Cloud Temple offers two distinct solutions to meet your container orchestration needs: -- **Managed Core Kubernetes**: A minimalist product that provides you with a robust and secure Kubernetes foundation, based on cutting-edge open-source components. It is ideal for expert teams looking to build their own custom platform. -- **Managed Kubernetes**: A complete, out-of-the-box solution that includes a full stack of tools for networking, security, storage, continuous deployment, observability, backup, and cost management. +- **Managed Core Kubernetes** : A minimalist product that provides you with a robust and secure Kubernetes foundation, built on cutting-edge open-source components. It is ideal for expert teams looking to build their own custom platform. +- **Managed Kubernetes** : A comprehensive, out-of-the-box solution that includes a full stack of tools for networking, security, storage, continuous deployment, observability, backup, and cost management. -### Offerings Comparison Table +### Offer Comparison Table | Component | Managed Core Kubernetes | Managed Kubernetes | |---|---|---| @@ -22,7 +22,7 @@ Cloud Temple offers two distinct offerings to meet your container orchestration | **CNI** | Cilium | Cilium | | **CNI Observability** | ❌ | Hubble | | **Load Balancer** | MetalLB | MetalLB | -| **Ingress** | ❌ | Ingress Nginx | +| **Ingress** | ❌ | Nginx Ingress | | **Storage** | Rook-Ceph | Rook-Ceph | | **Continuous Deployment (GitOps)** | ❌ | ArgoCD | | **Observability** | ❌ | Prometheus, Grafana, Loki | @@ -33,100 +33,100 @@ Cloud Temple offers two distinct offerings to meet your container orchestration | **Certificate Management**| ❌ | Cert-Manager | | **SSO Authentication**| ❌ | OIDC Integration | -## Overview of the Managed Kubernetes product (complete) +## Managed Kubernetes Product Overview (Complete) -The **Managed Kubernetes** offering (aussi appelée "Kub Managé", ou "KM") is a Kubernetes containerization solution managed by Cloud-Temple, deployed as Virtual Machines running on Cloud-Temple OpenIaaS IaaS infrastructure. +The **Managed Kubernetes** offering (also referred to as "Managed Kub" or "MK") is a Cloud-Temple-managed Kubernetes containerization solution deployed as Virtual Machines running on Cloud-Temple OpenIaaS IaaS infrastructure. -**Managed Kubernetes** is based on Talos Linux ([https://www.talos.dev/](https://www.talos.dev/)), a lightweight and secure operating system dedicated to Kubernetes. It is immutable, with no shell or ssh access, and configured exclusively in a declarative manner via gRPC API. +**Managed Kubernetes** is built on Talos Linux ([https://www.talos.dev/](https://www.talos.dev/)), a lightweight and secure operating system dedicated to Kubernetes. It is immutable, has no shell or SSH access, and is configured exclusively in a declarative manner via the gRPC API. -The standardized installation includes a set of components, mostly OpenSource and validated by the CNCF: +The standardized installation includes a set of components, mostly Open Source and CNCF-certified: -- **CNI Cillium**, with observability interface (**Hubble**): Cillium is a Kubernetes container networking solution (*Container Network Interface*). It manages security, load balancing, service mesh, observability, encryption, etc... It is a fundamental networking component found in most Kubernetes distributions (OpenShift, AKS, GKE, EKS,...). We have included the **Hubble** graphical interface for Cillium traffic visualization. +- **CNI Cilium**, with observability interface (**Hubble**): Cilium is a networking solution for Kubernetes containers (*Container Network Interface*). It handles security, load balancing, service mesh, observability, encryption, etc. It is a fundamental networking component found in most Kubernetes distributions (OpenShift, AKS, GKE, EKS, etc.). We have included the **Hubble** GUI for visualizing Cilium traffic flows. -- **MetalLB** and **nginx**: To expose Web applications, 3 *ingress-class* **nginx** are integrated by default: - - *nginx-external-secured*: exposure on a public IP, filtered via firewall to only allow known IPs (utilisé pour les interfaces graphiques des différents produits, et l'API Kubernetes) - - *nginx-external*: exposure on a second unfiltered public IP (ou filtrage spécifique au client) +- **MetalLB** and **nginx**: For exposing web applications, 3 **nginx** *ingress-classes* are integrated by default: + - *nginx-external-secured*: exposure on a public IP, filtered at the firewall level to allow only known IPs (used for the GUIs of various products and the Kubernetes API) + - *nginx-external*: exposure on a second unfiltered public IP (or client-specific filtering) - *nginx-internal*: exposure on an internal IP only - For "non-web" services, a **MetalLB** load balancer allows exposing services internally or on public IPs. (ce qui permet de déployer des autres ingresses, comme par exemple un WAF) + For "non-web" services, a **MetalLB** load balancer allows exposing services internally or on public IPs. (This enables deploying other ingress controllers, such as a WAF) -- **Rook-Ceph distributed storage**: for persistent volume (PV) storage, an OpenSource **Ceph** distributed storage is integrated into the platform. It allows the use of *storage-classes* *ceph-block*, *ceph-bucket*, and *ceph-filesystem*. Storage with **7500 IOPS** is used, enabling high performance. In production deployments (sur 3 AZ), storage nodes are dedicated (1 noeud par AZ); in non-production deployments (1 AZ), storage is shared with worker nodes. +- **Distributed Rook-Ceph Storage**: For persistent volume (PV) storage, an Open Source distributed **Ceph** storage system is integrated into the platform. It supports the *ceph-block*, *ceph-bucket*, and *ceph-filesystem* *storage-classes*. Storage with **7500 IOPS** is used, enabling high performance. In production deployments (across 3 AZs), storage nodes are dedicated (1 node per AZ); in non-production deployments (1 AZ), storage is shared with worker nodes. -- **Cert-Manager**: the OpenSource certificate manager **Cert-Manager** is natively integrated into the platform. +- **Cert-Manager**: The Open Source certificate manager **Cert-Manager** is natively integrated into the platform. - **ArgoCD** is available for your automated deployments via a **CI/CD** pipeline. -- **Prometheus** stack (Prometheus, Grafana, Loki): Managed Kubernetes clusters are delivered by default with a complete OpenSource **Prometheus** stack for observability, including: +- **Prometheus Stack** (Prometheus, Grafana, Loki): Managed Kubernetes clusters come standard with a complete Open Source **Prometheus** stack for observability, including: - **Prometheus** - **Grafana**, with numerous dashboards - - **Loki**: platform logs are exported to Cloud-Temple S3 storage (et intégrés dans Grafana). + - **Loki**: Platform logs are exported to Cloud-Temple S3 storage (and integrated into Grafana). -- **Harbor** is a **Container registry** that allows you to store your container images or Helm charts directly in the cluster. It performs **vulnerability scans** on your images and can digitally sign them. **Harbor** also allows synchronization with other registries. ([https://goharbor.io/](https://goharbor.io/)) +- **Harbor** is a **Container registry** that allows you to store your container images or Helm charts directly within the cluster. It performs **vulnerability scanning** on your images and can digitally sign them. **Harbor** also supports synchronization with other registries. ([https://goharbor.io/](https://goharbor.io/)) -- **OpenCost** ([https://github.com/opencost/opencost](https://github.com/opencost/opencost)) is a cost management (Finops) tool for Kubernetes. It allows you to closely track Kubernetes resource consumption and perform chargeback by project/namespace. +- **OpenCost** ([https://github.com/opencost/opencost](https://github.com/opencost/opencost)) is a cost management (FinOps) tool for Kubernetes. It allows you to closely track Kubernetes resource consumption and perform cost allocation/showback by project/namespace. -- Advanced security strategies with **Kyverno** and **Capsule**: - - **Kyverno** ([https://kyverno.io/](https://kyverno.io/)) is a Kubernetes admission controller that enables policy enforcement. It is an essential tool for governance and security in Kubernetes. - - **Capsule** ([https://projectcapsule.dev/](https://projectcapsule.dev/)) is a permission management tool that simplifies rights management in Kubernetes. It introduces the concept of a *tenant*, which allows centralizing and delegating permissions across multiple namespaces. Through **Capsule**, users of the Managed Kubernetes platform therefore have restricted rights limited to their own namespaces. +- Advanced security policies with **Kyverno** and **Capsule**: + - **Kyverno** ([https://kyverno.io/](https://kyverno.io/)) is an admission controller for Kubernetes that enables policy enforcement. It is an essential tool for governance and security in Kubernetes. + - **Capsule** ([https://projectcapsule.dev/](https://projectcapsule.dev/)) is a permission management tool that simplifies rights management in Kubernetes. It introduces the concept of a *tenant*, allowing centralized and delegated permissions across multiple namespaces. Through **Capsule**, users of the Managed Kubernetes platform are granted permissions restricted to their own namespaces only. - **Veeam Kasten** (aka 'k10') is a solution for **backing up** Kubernetes workloads. - It allows backing up a complete deployment: manifests, volumes, etc... to Cloud-Temple S3 object storage. **Kasten** uses **Kanister** to enable consistent application backups, for example for databases ([https://docs.kasten.io/latest/usage/blueprints/](https://docs.kasten.io/latest/usage/blueprints/)). + It enables backing up complete deployments: manifests, volumes, etc., to Cloud-Temple S3 object storage. **Kasten** uses **Kanister** to enable application-consistent backups, for example for databases ([https://docs.kasten.io/latest/usage/blueprints/](https://docs.kasten.io/latest/usage/blueprints/)). - **Kasten** is a cross-platform tool that can work with other Kubernetes clusters (OpenShift, Hyperscaler,...). It can therefore be used for reversibility or migration scenarios (K10 gère les adaptations éventuelles via des *transformations*, par exemple un changement d'ingress-class), as well as for "refresh" scenarios (exemple : restauration planifiée d'un environnement de production en pré-production). + **Kasten** is a cross-platform tool that can work with other Kubernetes clusters (OpenShift, Hyperscalers, etc.). It can therefore be used for reversibility or migration scenarios (K10 handles potential adaptations via *transformations*, such as changing an ingress-class), as well as for "refresh" operations (e.g., scheduled restoration of a production environment to pre-production). - **SSO Authentication** with an External OIDC Identity Provider (Microsoft Entra, FranceConnect, Okta, AWS IAM, Google, Salesforce, ...) ## SLA & Support Information -- **Guaranteed Availability (3 AZ production)** : 99.90 % +- **Guaranteed availability (production 3 AZ)** : 99.95 % - **Support** : N1/N2/N3 included for the core scope (infrastructure and standard operators). -- **Recovery Time Commitment (RTC)** : according to the Cloud Temple master contract. -- **Maintenance (MCO)** : regular patching of Talos / Kubernetes / standard operators by the MSP, without service interruption (rolling upgrade). +- **Recovery Time Commitment (ETR)** : per Cloud Temple framework agreement. +- **Maintenance (MCO)** : regular patching of Talos / Kubernetes / standard operators by MSP, with no service interruption (rolling upgrade). Response and recovery times depend on the incident severity, in accordance with the support matrix (P1 to P4). ## Versioning Policy & Lifecycle -- **Supported Kubernetes:** N-2 (3 major releases per year, approximately every 4 months). Each release is officially supported for 12 months, ensuring a Cloud Temple support window of up to ~16 months per version. +- **Supported Kubernetes:** N-2 (3 major releases per year, approximately every 4 months). Each release is officially supported for 12 months, ensuring a Cloud Temple support window of ~16 months maximum per version. - **Talos OS:** aligned with stable Kubernetes versions. - Each branch is maintained for approximately 12 months (security patches included). - - Recommended upgrade cadence: 3 times per year, aligned with Kubernetes upgrades. + - Recommended upgrade cadence: 3 times per year, in alignment with Kubernetes upgrades. - Critical patches (CVE, kernel) are applied via rolling upgrade, with no service interruption. -- **Standard operators:** updated within 90 days of stable release. +- **Standard operators:** updated within 90 days following the stable release. - **Updates:** - - **Major** (Kubernetes N+1, Talos X+1): scheduled 3 times/year, using rolling updates. + - **Major** (Kubernetes N+1, Talos X+1): scheduled 3 times/year, via rolling update. - **Minor:** applied automatically within 30 to 60 days. -- **Deprecation:** version N-3 → end of support within 90 days after N's release. +- **Deprecation:** version N-3 → end of support within 90 days after the release of N. ## Kubernetes Nodes -### Production (multi-zonal) +### Production (multi-zone) -For a "production" (multi-zonal) deployment, the following machines are used: +For a "production" deployment (multi-zone), the following machines are used: | **AZ** | **Machine** | **vCores** | **RAM** | **Local Storage** | |---|---|---|---|---| -| AZ07 | Git Runner | 4 | 8 GB | OS: 64 GB | -| AZ05 | Control Plane 1 | 8 | 12 GB | OS: 64 GB | -| AZ06 | Control Plane 2 | 8 | 12 GB | OS: 64 GB | -| AZ07 | Control Plane 3 | 8 | 12 GB | OS: 64 GB | -| AZ05 | Storage Node 1 | 12 | 24 GB | OS: 64 GB + Ceph 500 GB minimum (*) | -| AZ06 | Storage Node 2 | 12 | 24 GB | OS: 64 GB + Ceph 500 GB minimum (*)| -| AZ07 | Storage Node 3 | 12 | 24 GB | OS: 64 GB + Ceph 500 GB minimum (*)| -| AZ05 | Worker Node 1 (**) | 12 | 24 GB | OS: 64 GB | -| AZ06 | Worker Node 2 (**) | 12 | 24 GB | OS: 64 GB | -| AZ07 | Worker Node 3 (**) | 12 | 24 GB | OS: 64 GB | +| AZ07 | Git Runner | 4 | 8 GB | OS: 256 GB | +| AZ05 | Control Plane 1 | 8 | 12 GB | OS: 128 GB | +| AZ06 | Control Plane 2 | 8 | 12 GB | OS: 128 GB | +| AZ07 | Control Plane 3 | 8 | 12 GB | OS: 128 GB | +| AZ05 | Storage Node 1 | 12 | 24 GB | OS: 128 GB + Ceph 500 GB minimum (*) | +| AZ06 | Storage Node 2 | 12 | 24 GB | OS: 128 GB + Ceph 500 GB minimum (*)| +| AZ07 | Storage Node 3 | 12 | 24 GB | OS: 128 GB + Ceph 500 GB minimum (*)| +| AZ05 | Worker Node 1 (**) | 12 | 24 GB | OS: 128 GB | +| AZ06 | Worker Node 2 (**) | 12 | 24 GB | OS: 128 GB | +| AZ07 | Worker Node 3 (**) | 12 | 24 GB | OS: 128 GB | -(*) : Each storage node is delivered with a minimum of 500 GB of disk space, providing 500 GB of usable distributed Ceph storage (data is replicated across each AZ, hence x3). The free space available to the client is approximately 350 GB. This initial size can be increased at provisioning time or later, depending on requirements. Quotas are applied on Ceph, with a Block/File split. +(*) : Each storage node comes with a minimum of 500 GB of disk space, providing 500 GB of usable distributed Ceph storage (data is replicated across each AZ, hence x3). The free space available to the client is approximately 350 GB. This initial size can be increased during initial provisioning, or later, depending on requirements. Quotas are applied on Ceph, with a Block/File allocation. -(**) : The size and number of Worker Nodes can be adjusted based on the client's compute capacity requirements. The minimum number of Worker Nodes is 3 (1 per AZ), and we recommend increasing their count in batches of 3 to maintain a consistent multi-zonal distribution. Worker Node sizing can be adjusted, with a minimum of 12 cores and 24 GB of RAM; the upper limit per Worker Node is determined by the size of the hypervisors used (thus potentially 112 cores/1536 GB of RAM with Performance 3 blades). The number of Worker Nodes is limited to 100. The CNCF recommends using Worker Nodes of identical size. The limit for the number of pods per Worker Node is 110. +(**) : The size and number of Worker Nodes can be adjusted based on the client's compute capacity requirements. The minimum number of Worker Nodes is 3 (1 per AZ), and we recommend increasing their number in batches of 3 to maintain a consistent multi-zone distribution. The size of Worker Nodes can be adjusted, with a minimum of 12 cores and 24 GB of RAM; the upper limit per Worker Node is determined by the size of the hypervisors used (thus potentially 112 cores/1536 GB of RAM with Performance 3 blades). The number of Worker Nodes is limited to 100. The CNCF recommends having Worker Nodes of identical size. The limit on the number of pods per Worker Node is 110. ### Dev/Test @@ -137,14 +137,14 @@ For a "dev/test" version, the following machines are deployed: | **AZ** | **Machine** | **vCores** | **RAM** | **Local Storage** | |---|---|---|---|---| | AZ0n | Git Runner | 4 | 8 GB | OS: 30 GB | -| AZ0n | Control Plane | 8 | 12 GB | OS: 64 GB | -| AZ0n | Worker Node 1 (**) | 12 | 24 GB | OS: 64 GB + Ceph 300 GB minimum (*) | -| AZ0n | Worker Node 2 (**) | 12 | 24 GB | OS: 64 GB + Ceph 300 GB minimum (*) | -| AZ0n | Worker Node 3 (**) | 12 | 24 GB | OS: 64 GB + Ceph 300 GB minimum (*) | +| AZ0n | Control Plane | 8 | 12 GB | OS: 128 GB | +| AZ0n | Worker Node 1 (**) | 12 | 24 GB | OS: 128 GB + Ceph 300 GB minimum (*) | +| AZ0n | Worker Node 2 (**) | 12 | 24 GB | OS: 128 GB + Ceph 300 GB minimum (*) | +| AZ0n | Worker Node 3 (**) | 12 | 24 GB | OS: 128 GB + Ceph 300 GB minimum (*) | -(*) : 3 Worker nodes are used as Storage nodes and are delivered with a minimum of 300 GB of disk space, for a distributed usable storage of 300 GB (data is replicated three times). The free space available to the client is approximately 150 GB. This initial size can be increased during provisioning, or later, depending on requirements. +(*) : 3 Worker nodes are used as Storage nodes and are provisioned with a minimum of 300 GB of disk space, providing 300 GB of usable distributed storage (data is replicated three times). The free space available to the client is approximately 150 GB. This initial size can be increased at deployment time, or later, depending on requirements. -(**) : The size and number of Worker Nodes can be adjusted based on the client's compute capacity requirements. The minimum number of Worker nodes is 3 (due to storage replication). The size of Worker Nodes can be adjusted, with a minimum of 12 cores and 24 GB of RAM; the upper limit per Worker node is determined by the size of the hypervisors used (thus potentially 112 cores/1536 GB of RAM with Performance 3 blades). The number of Worker Nodes is limited to 250. CNCF recommends having Worker nodes of identical size. The limit on the number of pods per Worker Node is 110. +(**) : The size and number of Worker Nodes can be adjusted based on the client's compute capacity requirements. The minimum number of Worker nodes is 3 (due to storage replication). The size of Worker Nodes can be adjusted, with a minimum of 12 cores and 24 GB of RAM; the upper limit per Worker node is determined by the size of the hypervisors used (thus potentially 112 cores/1536 GB of RAM with Performance 3 blades). The number of Worker Nodes is limited to 250. The CNCF recommends using worker nodes of identical size. The limit on the number of pods per Worker Node is 110. ## RACI @@ -152,11 +152,11 @@ For a "dev/test" version, the following machines are deployed: | **Activity** | **Client** | **Cloud Temple** | |---|---|---| -| Define the overall Kubernetes service architecture | C | RA | +| Define the overall architecture of the Kubernetes service | C | RA | | Size the Kubernetes service (number of nodes, resources) | C | RA | | Install the Kubernetes service with a default configuration | I | RA | -| Kubernetes service configuration | C | RA | -| Configure the underlying network of the Kubernetes service | I | RA | +| Configure the Kubernetes service | C | RA | +| Configure the base network of the Kubernetes service | I | RA | | Deploy the initial identity and access configuration | C | RA | | Define the scaling and high availability strategy | C | RA | @@ -177,10 +177,10 @@ For a "dev/test" version, the following machines are deployed: |---|---|---| | Monitor Kubernetes service performance | I | RA* | | Monitor application performance | RA | | -| Manage Kubernetes service alerts | I | RA* | -| Manage application alerts | RA | | +| Manage Kubernetes service-related alerts | I | RA* | +| Manage application-related alerts | RA | | -(*) : *Production cluster only. In Dev/Test, the client is fully autonomous and responsible.* +(*) : *Production Cluster only. In Dev/Test, the client is fully autonomous and responsible.* ### Infrastructure Maintenance and Updates @@ -196,12 +196,12 @@ For a "dev/test" version, the following machines are deployed: | **Activity** | **Client** | **Cloud Temple** | |---|---|---| -| Manage Kubernetes service security | RA | RA* | -| Configure and manage pod security policies | RA | I | -| Manage SSL/TLS certificates for the Kubernetes service | C | RA* | -| Manage SSL/TLS certificates for applications | RA | I | -| Implement and manage basic role-based access control (RBAC) | C | R* | -| Implement and manage client role-based access control (RBAC) | RA | I | +| Manage Kubernetes service security | RA | RA* | +| Configure and manage pod security policies | RA | I | +| Manage SSL/TLS certificates for the Kubernetes service | C | RA* | +| Manage SSL/TLS certificates for applications | RA | I | +| Implement and manage base role-based access control (RBAC)| C | R* | +| Implement and manage client role-based access control (RBAC) | RA | I | (*) : *Production cluster only. In Dev/Test, the client is fully autonomous and responsible.* @@ -211,10 +211,10 @@ For a "dev/test" version, the following machines are deployed: |---|---|---| | Define the backup strategy for the Kubernetes service | I | RA | | Implement and manage backups for the Kubernetes service | I | RA | -| Define the backup strategy for the applications | RA* | I* | -| Implement and manage backups for the applications | RA* | I* | +| Define the backup strategy for applications | RA* | I* | +| Implement and manage backups for applications | RA* | I* | | Test disaster recovery procedures for the Kubernetes service | CI | RA | -| Test disaster recovery procedures for the applications | RA* | CI* | +| Test disaster recovery procedures for applications | RA* | CI* | *may change to "CI | RA" depending on the managed services contract @@ -222,10 +222,10 @@ For a "dev/test" version, the following machines are deployed: | **Activity** | **Client** | **Cloud Temple** | |---|---|---| -| Provide Level 1 support for infrastructure | I | RA | -| Provide Level 2 and 3 support for infrastructure | I | RA | -| Resolve Kubernetes service issues | C | RA | -| Resolve application issues | RA | I | +| Provide level 1 support for the infrastructure | I | RA | +| Provide level 2 and 3 support for the infrastructure | I | RA | +| Resolve issues related to the Kubernetes service | C | RA | +| Resolve issues related to applications | RA | I | ### Capacity Management and Evolution @@ -233,63 +233,63 @@ For a "dev/test" version, the following machines are deployed: | **Activity** | **Client** | **Cloud Temple** | |---|---|---| -| Monitor Kubernetes resource usage | C | RA | +| Monitor Kubernetes resource utilization | C | RA | | Plan service capacity evolution | RA | C | | Implement capacity changes | I | RA | -| Manage application and resource evolution | RA | I | +| Manage application evolution and associated resources | RA | I | ### Documentation and Compliance | **Activity** | **Client** | **Cloud Temple** | |---|---|---| -| Maintain Kubernetes product documentation | I | RA | -| Maintain application documentation | RA | I | -| Ensure Kubernetes service compliance | I | RA | -| Ensure application compliance | RA | I | -| Conduct Kubernetes service audits | I | RA | -| Conduct application audits | RA | I | +| Maintain Kubernetes product documentation | I | RA | +| Maintain application documentation | RA | I | +| Ensure Kubernetes service compliance | I | RA | +| Ensure application compliance | RA | I | +| Conduct Kubernetes service audits | I | RA | +| Conduct application audits | RA | I | ### Kubernetes Operators/CRD Management (included in the product) | **Activity** | **Client** | **Cloud Temple** | |---|---|---| -| Provisioning of the default Operators catalog | CI | RA | -| Operators updates | CI | RA | -| Monitoring Operators status | CI | RA | -| Troubleshooting Operators issues | CI | RA | -| Managing Operators permissions | CI | RA | -| Managing Operators resources (add/remove) | CI | RA | -| Backing up Operators resources data | CI | RA | -| Supervising Operators resources | CI | RA | -| Restoring Operators resources data | CI | RA | -| Operators security audit | CI | RA | -| Operators support | CI | RA | -| Managing Operators licenses | CI | RA | -| Managing specific support plans for Operators | CI | RA | +| Provisioning of the default Operators catalog | CI | RA | +| Updating Operators | CI | RA | +| Monitoring Operators status | CI | RA | +| Troubleshooting Operators issues | CI | RA | +| Managing Operators permissions | CI | RA | +| Managing Operators resources (addition/removal) | CI | RA | +| Backing up Operators resources data | CI | RA | +| Monitoring Operators resources | CI | RA | +| Restoring Operators resources data | CI | RA | +| Security auditing of Operators | CI | RA | +| Operators support | CI | RA | +| Managing licenses for Operators | CI | RA | +| Managing specific support plans for Operators | CI | RA | *Operator package included on Managed Kube - see chapters: Managed Helm Packages -### Kubernetes application/operator/CRD management (client) +### Management of Kubernetes applications/operators/CRDs (client-side) -*Production cluster only. In Dev/Test, the client operates entirely independently and is fully responsible.* +*Production Cluster only. In Dev/Test, the client is fully autonomous and responsible.* | **Activity** | **Client** | **Cloud Temple** | |---|---|---| -| CRD deployment | I* | RA* | -| Operator updates | RA | I | -| Operator status monitoring | RA | I | -| Operator issue resolution | RA | I | -| Operator permissions management | RA | I | -| Operator resource management (add/remove) | RA | I | -| Operator resource data backup | RA | I | -| Operator resource supervision | RA | I | -| Operator resource data restoration | RA | I | -| Operator security audit | RA | I | -| Operator support | RA | I | -| Operator license management | RA | I | -| Management of specific support plans for operators | RA | I | - -Some operator services may be covered depending on the managed services contract. +| CRD Deployment | I* | RA* | +| Operator Updates | RA | I | +| Operator Status Monitoring | RA | I | +| Operator Issue Resolution | RA | I | +| Operator Permissions Management | RA | I | +| Operator Resources Management (addition/removal) | RA | I | +| Operator Resources Data Backup | RA | I | +| Operator Resources Monitoring | RA | I | +| Operator Resources Data Restoration | RA | I | +| Operator Security Auditing | RA | I | +| Operator Support | RA | I | +| Operator Licensing Management | RA | I | +| Specific Support Plans Management for Operators | RA | I | + +Certain operator services may be covered depending on the managed services contract. *may change to "A | RC" depending on the managed services contract @@ -299,10 +299,10 @@ Some operator services may be covered depending on the managed services contract |---|---|---| | Application support (external service) | RA | I | -Application support can be provided via a supplementary service. +Application support can be provided via a complementary service. ### RACI (summary) -- Cloud Temple: responsible and actor (RA) for the Kubernetes platform, cluster security, infrastructure backup, monitoring, CRD. -- Client: responsible and actor (RA) for application projects, business operators, CI/CD pipelines, application backups. -- "Gray" zone: adaptations and extensions (IAM, specific operators, cluster compliance/security hardening) - billed on a project basis. \ No newline at end of file +- Cloud Temple : Responsible and Accountable (RA) for the Kubernetes platform, cluster security, infrastructure backup, monitoring, CRD. +- Client : Responsible and Accountable (RA) for application projects, business operators, CI/CD pipelines, application backups. +- "Gray" area : adaptations and extensions (IAM, specific operators, cluster compliance/security hardening) - billed on a project basis. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_core_kubernetes.md b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_core_kubernetes.md index 8d404c56..d111a484 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_core_kubernetes.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_core_kubernetes.md @@ -14,33 +14,33 @@ import archiOverview from '@site/docs/managed_kubernetes/images/archi_overview.p

      Getting Started Guide

      -

      Get started quickly by following clear and simple instructions.

      - Launch Quickstart → +

      Get up and running quickly by following clear and simple instructions.

      + Launch the Quickstart →

      Tutorials

      -

      Learn step-by-step how to configure and use our services with detailed guides.

      +

      Learn step by step how to configure and use our services with detailed guides.

      Discover tutorials →
      -Managed **Core** Kubernetes by Cloud Temple is a container orchestration solution based on a selection of Open Source products, designed to provide a secure, resilient, and automated foundational layer on Cloud Temple's SecNumCloud platforms. Each cluster is deployed in a fully client-dedicated Cloud-Temple IaaS environment. +Managed **Core** Kubernetes by Cloud Temple is a container orchestration solution based on a selection of Open Source products, designed to provide a secure, resilient, and automated foundational layer on Cloud Temple's SecNumCloud platforms. Each cluster is deployed in a Cloud-Temple IaaS environment entirely dedicated to the client. -This product is designed for teams with excellent mastery of Kubernetes and Cloud Native tools, who wish to build their own platform on minimalist and robust foundations. It is aimed at open source enthusiasts looking for a streamlined, portable solution without proprietary management layers, running on a minimalist and immutable OS designed for automation and security. +This product is designed for teams with excellent mastery of Kubernetes and Cloud Native tools, who wish to build their own platform on minimalist and robust foundations. It targets open source enthusiasts looking for a streamlined, portable solution without vendor-specific layers, running on a minimalist and immutable OS designed for automation and security. ### Key Benefits -- **Sovereignty and Reversibility** : The solution relies exclusively on open source standards (Kubernetes CNCF) to avoid any technological dependency and ensure the portability of your applications. -- **"Zero-Trust" by design** : The architecture is built on Talos OS, an immutable operating system without direct access (ni shell, ni SSH), which drastically reduces the attack surface and provides a solid foundation for a "Zero-Trust" security strategy. -- **Modern Network Foundations** : The integration of Cilium for the CNI and MetalLB for service exposure delivers a high-performance, standard network foundation, ready to host your own security and filtering components. +- **Sovereignty and Reversibility** : The solution relies exclusively on open-source standards (Kubernetes CNCF) to avoid any technological dependency and ensure the portability of your applications. +- **"Zero-Trust" Security by Design** : The architecture is built on Talos OS, an immutable operating system with no direct access (no shell, no SSH), which drastically reduces the attack surface and provides a solid foundation for a "Zero-Trust" security strategy. +- **Modern Networking Foundations** : The integration of Cilium for CNI and MetalLB for service exposure provides a high-performance, standards-based networking foundation, ready to accommodate your own security and filtering components. ### A foundational platform ready to be extended -The "Managed Core" offering natively includes a minimal and consistent stack of cutting-edge open source tools to provide the foundations for a Kubernetes cluster: +The "Managed Core" offering natively includes a minimal and consistent stack of cutting-edge open-source tools to provide you with the foundations of a Kubernetes cluster: - **OS and Networking** : Talos, Cilium, MetalLB -From this foundation, you are free to integrate your own tools for continuous deployment, observability, backup, and cost management. +Building on this foundation, you are free to integrate your own tools for continuous deployment, observability, backup, and cost management. --- @@ -52,33 +52,35 @@ We offer two distinct architectures to meet your needs, whether for development Ideal for POC environments, this compact architecture deploys all resources within a single Availability Zone (AZ). -- **Use case**: Development, testing, proof-of-concept (POC). -- **Key points**: +- **Use cases** : Development, testing, proof-of-concept (POC). +- **Key points** : - 1 Control Plane node. - 3 Worker nodes (or more). - - Does not benefit from a high availability SLA. - - No security restrictions + - No high availability SLA. + - no security restrictions -Single-AZ Architecture +Architecture Mono-AZ ### Production Architecture (Multi-AZ) -Designed for production and critical applications, this architecture distributes resources across three Availability Zones (AZ) to ensure high availability and maximum resilience, in compliance with SecNumCloud requirements. +Designed for production and critical applications, this architecture distributes resources across three availability zones (AZ) to ensure high availability and maximum resilience, in compliance with SecNumCloud requirements. -- **Use Case** : Production applications, critical services, platforms requiring an SLA. -- **Key Points** : - - **High Availability** : 3 Control Plane nodes distributed across 3 AZs. +- **Use cases** : Production applications, critical services, platforms requiring an SLA. +- **Key points** : + - **High Availability** : 3 Control Plane nodes distributed across 3 AZ. + - **Dedicated Storage** : 3 dedicated and distributed storage nodes for performance and resilience. - **Distributed Workers** : At least 3 worker nodes, one per AZ. - - **Bare Metal Nodes (Optional)** : Possible integration of **"Bare Metal"** worker nodes for specific performance requirements, particularly **GPU support**. - - **99.90% SLA**, measured monthly. + - **Bare Metal Nodes (Optionnel)** : Possible integration of **"Bare Metal"** type worker nodes for specific performance needs, notably **GPU support**. + - **99.95% SLA**, measured monthly. -Multi-AZ Architecture + +Architecture Multi-AZ --- ### Technical Components Included -The "Managed Core" offer includes the following components: +The "Managed Core" offering includes the following components: - **Operating System** : Talos OS - **Storage** : Rook-Ceph diff --git a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md index f619a052..b43a7286 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md @@ -12,8 +12,8 @@ title: Overview

      Getting Started Guide

      -

      Get started quickly by following clear and simple instructions.

      - Start the Quickstart → +

      Get up and running quickly by following clear and straightforward instructions.

      + Launch Quickstart →

      Tutorials

      @@ -22,19 +22,19 @@ title: Overview
      -Managed Kubernetes by Cloud Temple is a container orchestration solution based on Open Source products, designed to provide a high level of security, resilience, and automation on Cloud Temple's SecNumcloud platforms. Each cluster is deployed in a fully client-dedicated Cloud-Temple IaaS environment. +Managed Kubernetes by Cloud Temple is a container orchestration solution based on Open Source products, designed to deliver a high level of security, resilience, and automation on Cloud Temple's SecNumCloud platforms. -This product is designed for teams with solid Kubernetes knowledge and open source enthusiasts seeking a native, portable, vendor-neutral solution on a minimalist, immutable OS designed for automation and security. +This product is designed for teams with a solid understanding of Kubernetes and open-source advocates seeking a native, portable solution without vendor lock-in, running on a minimalist and immutable OS built for automation and security. ### Key Benefits -- **Sovereignty and Reversibility** : The solution relies on open source standards (Kubernetes CNCF) to avoid technological lock-in and ensure the portability of your applications. The Veeam Kasten backup tool, included in the product, is specifically designed to facilitate migrations from one cloud to another. -- **"Zero-Trust" Security and Governance** : The architecture is built on Talos OS, an immutable operating system with no direct access (no shell, no SSH), which drastically reduces the attack surface. This approach is combined with governance tools such as Kyverno for policy management and Capsule for fine-grained rights management, forming a solid foundation for a "Zero-Trust" security strategy. -- **Cost Management and Integration** : The solution natively integrates FinOps tools such as OpenCost for precise consumption tracking. The pricing model is transparent, based on consumed IaaS resources, and the use of recognized open source components (Cilium, Ceph, ArgoCD) facilitates integration into your existing ecosystems. +- **Sovereignty and Reversibility**: The solution leverages open-source standards (CNCF Kubernetes) to avoid any technological dependency and ensure the portability of your applications. The Veeam Kasten backup tool, included in the product, is specifically designed to facilitate migrations from one cloud to another. +- **"Zero-Trust" Security and Governance**: The architecture is built on Talos OS, an immutable operating system with no direct access (no shell, no SSH), which drastically reduces the attack surface. This approach is coupled with governance tools such as Kyverno for policy management and Capsule for fine-grained rights management, providing a solid foundation for a "Zero-Trust" security strategy. +- **Cost Management and Integration**: The solution natively integrates FinOps tools such as OpenCost for precise consumption tracking. The pricing model is transparent, based on consumed IaaS resources, and the use of recognized open-source components (Cilium, Ceph, ArgoCD) facilitates integration into your existing ecosystems. ### A complete and ready-to-use platform -The solution natively includes a complete and coherent stack of cutting-edge open source tools to cover all application lifecycle requirements: +The solution natively includes a comprehensive and cohesive stack of cutting-edge open-source tools to cover all application lifecycle needs: - **Networking and Security** : Cilium, Hubble, MetalLB, Ingress Nginx, Kyverno, Capsule - **Storage** : Rook-Ceph @@ -49,48 +49,48 @@ The solution natively includes a complete and coherent stack of cutting-edge ope We offer two distinct architectures to meet your needs, whether for development environments or critical production environments. -### "Dev/Test" Architecture +### Architecture "Dev/Test" -Ideal for POC environments, this compact architecture deploys all resources within a single Availability Zone (AZ). +Ideal for POC environments, this compact architecture deploys all resources within a single availability zone (AZ). -- **Use Case** : Development, testing, proof-of-concept (POC). -- **Key Points** : +- **Use cases** : Development, testing, proof-of-concept (POC). +- **Key points** : - 1 Control Plane node. - 3 Worker nodes (or more). - Distributed storage (Ceph) is co-located on the worker nodes. - - Does not benefit from a high availability SLA. - - No security restrictions + - Does not include a high availability SLA. + - no security restrictions Single-AZ Architecture ### Production Architecture (Multi-AZ) -Designed for production and critical applications, this architecture distributes resources across three Availability Zones (AZ) to ensure high availability and maximum resilience, in compliance with SecNumCloud requirements. +Designed for production and critical applications, this architecture distributes resources across three availability zones (AZs) to ensure high availability and maximum resilience, in compliance with SecNumCloud requirements. -- **Use Case**: Production applications, critical services, platforms requiring an SLA. -- **Key Points**: - - **High Availability**: 3 Control Plane nodes distributed across 3 AZs. - - **Dedicated Storage**: 3 dedicated and distributed storage nodes for performance and resilience. - - **Distributed Workers**: At least 3 worker nodes, one per AZ. - - **Bare Metal Nodes (Optional)**: Integration of **"Bare Metal"** worker nodes is possible for specific performance requirements, particularly **GPU support**. - - **99.90% SLA**. +- **Use Case** : Production applications, critical services, platforms requiring an SLA. +- **Key Points** : + - **High Availability** : 3 Control Plane nodes distributed across 3 AZs. + - **Dedicated Storage** : 3 dedicated and distributed storage nodes for performance and resilience. + - **Distributed Workers** : At least 3 worker nodes, one per AZ. + - **Bare Metal Nodes (Optional)** : Possible integration of **"Bare Metal"** type worker nodes for specific performance needs, notably **GPU support**. + - **99.95% SLA**. Architecture Multi-AZ --- -### Detailed technical components +### Detailed Technical Components -The offer includes the following components in detail: +The offering includes the following components in detail: -- CNI Cilium, with observability interface (Hubble) -- Internal and external MetalLB and nginx Ingresses -- Distributed storage Rook-Ceph +- Cilium CNI, with observability interface (Hubble) +- Internal and external Ingresses with MetalLB and nginx +- Rook-Ceph distributed storage - Cert-Manager - ArgoCD - Prometheus stack (Prometheus, Grafana, Loki) -- Container registry Harbor +- Harbor container registry - Cost management with OpenCost - Advanced security policies with Kyverno and Capsule -- Veeam Kasten (backup, cross-environment automations, and reversibility) +- Veeam Kasten (backup, cross-environment automation, and rollback) - SSO authentication with an external OIDC Identity Provider (Microsoft Entra, FranceConnect, Okta, AWS IAM, Google, Salesforce, ...) \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/concepts.md b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/concepts.md index ee7644c0..816a060f 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/concepts.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/concepts.md @@ -9,12 +9,12 @@ import archi_overview_1az from '@site/docs/managed_kubernetes/images/archi_overv ## Nuestras ofertas Managed Kubernetes -Cloud Temple propone dos ofertas distintas para satisfacer sus necesidades en materia de orquestación de contenedores: +Cloud Temple ofrece dos ofertas distintas para satisfacer sus necesidades de orquestación de contenedores : -- **Managed Core Kubernetes** : Un producto minimalista que le proporciona una base Kubernetes robusta y segura, basada en componentes open-source de última generación. Es ideal para equipos expertos que desean construir su propia plataforma a medida. -- **Managed Kubernetes** : Una solución completa y lista para usar que incluye una pila completa de herramientas para la red, la seguridad, el almacenamiento, el despliegue continuo, la observabilidad, las copias de seguridad y la gestión de costos. +- **Managed Core Kubernetes** : Un producto minimalista que le proporciona una base Kubernetes robusta y segura, basada en componentes open source de vanguardia. Es ideal para equipos expertos que desean construir su propia plataforma a medida. +- **Managed Kubernetes** : Una solución completa y lista para usar que incluye un stack completo de herramientas para la red, la seguridad, el almacenamiento, el despliegue continuo, la observabilidad, la copia de seguridad y la gestión de costos. -### Tabla comparativa de ofertas +### Tabla comparativa de las ofertas | Componente | Managed Core Kubernetes | Managed Kubernetes | |---|---|---| @@ -26,107 +26,107 @@ Cloud Temple propone dos ofertas distintas para satisfacer sus necesidades en ma | **Almacenamiento** | Rook-Ceph | Rook-Ceph | | **Despliegue Continuo (GitOps)** | ❌ | ArgoCD | | **Observabilidad** | ❌ | Prometheus, Grafana, Loki | -| **Copia de seguridad y migración** | ❌ | Veeam Kasten | -| **Gestión de costos (FinOps)** | ❌ | OpenCost | -| **Gobernanza y seguridad**| ❌ | Kyverno, Capsule | -| **Registro de contenedores**| ❌ | Harbor | +| **Copia de seguridad y Migración** | ❌ | Veeam Kasten | +| **Gestión de Costos (FinOps)** | ❌ | OpenCost | +| **Gobernanza y Seguridad**| ❌ | Kyverno, Capsule | +| **Registro de Contenedores**| ❌ | Harbor | | **Gestión de certificados**| ❌ | Cert-Manager | | **Autenticación SSO**| ❌ | Integración OIDC | ## Presentación del producto Managed Kubernetes (completa) -La oferta **Managed Kubernetes** (también conocida como "Kub Managado", o "KM") es una solución de contenedorización de Kubernetes gestionada por Cloud-Temple, desplegada en forma de Máquinas Virtuales que funcionan sobre las infraestructuras IaaS Cloud-Temple OpenIaaS. +La oferta **Managed Kubernetes** (también llamada "Kub Gestionado", o "KM") es una solución de contenedorización Kubernetes gestionada por Cloud-Temple, desplegada en forma de Máquinas Virtuales que funcionan sobre las infraestructuras IaaS Cloud-Temple OpenIaaS. -**Managed Kubernetes** se basa en Talos Linux ([https://www.talos.dev/](https://www.talos.dev/)), un sistema operativo dedicado a Kubernetes que es ligero y seguro. Es inmutable, sin ningún shell ni acceso ssh, y se configura únicamente de manera declarativa a través de la API gRPC. +**Managed Kubernetes** se basa en Talos Linux ([https://www.talos.dev/](https://www.talos.dev/)), un sistema operativo dedicado a Kubernetes que es ligero y seguro. Es inmutable, sin ningún shell ni acceso SSH, y se configura únicamente de manera declarativa a través de la API gRPC. -La instalación estandarizada incluye un conjunto de componentes, en su mayoría OpenSource y validados por el CNCF: +La instalación estandarizada incluye un conjunto de componentes, mayoritariamente Open Source y validados por la CNCF: -- **CNI Cilium**, con interfaz de observabilidad (**Hubble**): Cilium es una solución de red para contenedores Kubernetes (*Container Network Interface*). Gestiona la seguridad, el balanceo de carga, el service mesh, la observabilidad, el cifrado, etc. Es un componente de red fundamental que se encuentra en la mayoría de las variantes de Kubernetes (OpenShift, AKS, GKE, EKS,...). Hemos incluido la interfaz gráfica **Hubble** para la visualización de los flujos de Cilium. +- **CNI Cillium**, con interfaz de observabilidad (**Hubble**): Cillium es una solución de networking para contenedores Kubernetes (*Container Network Interface*). Gestiona la seguridad, el balanceo de carga, el service mesh, la observabilidad, el cifrado, etc... Es un componente de red fundamental que se encuentra en la mayoría de las variantes de Kubernetes (OpenShift, AKS, GKE, EKS,...). Hemos incluido la interfaz gráfica **Hubble** para la visualización de los flujos de Cillium. -- **MetalLB** y **nginx**: Para la exposición de aplicaciones Web, se incluyen de base 3 *ingress-class* **nginx**: - - *nginx-external-secured*: exposición en una IP pública, filtrada en el firewall para permitir únicamente IPs conocidas (utilizado para las interfaces gráficas de los diferentes productos y la API de Kubernetes) - - *nginx-external*: exposición en una segunda IP pública no filtrada (o filtrado específico por cliente) - - *nginx-internal*: exposición en una IP interna únicamente +- **MetalLB** y **nginx**: Para la exposición de aplicaciones Web, se integran de base 3 *ingress-class* **nginx**: + - *nginx-external-secured*: exposición en una IP pública, filtrada en el firewall para permitir solo IPs conocidas (utilizado para las interfaces gráficas de los diferentes productos y la API de Kubernetes) + - *nginx-external*: exposición en una segunda IP pública no filtrada (o filtrado específico para el cliente) + - *nginx-internal*: exposición únicamente en una IP interna - Para los servicios "no web", un balanceador de carga **MetalLB** permite exponer servicios internamente o en IPs públicas (lo que permite desplegar otros ingress, como por ejemplo un WAF) + Para los servicios "no web", un load-balancer **metalLB** permite exponer servicios en interno o en IPs públicas. (lo que permite desplegar otras ingresses, como por ejemplo un WAF) -- **Almacenamiento distribuido Rook-Ceph**: para el almacenamiento de volúmenes persistentes (PV), se integra en la plataforma un almacenamiento distribuido **Ceph** OpenSource. Permite utilizar las *storage-classes* *ceph-block*, *ceph-bucket* y *ceph-filesystem*. Se utiliza un almacenamiento con **7500 IOPS**, lo que permite un alto rendimiento. En los despliegues de producción (en 3 AZ), los nodos de almacenamiento son dedicados (1 nodo por AZ); en los despliegues fuera de producción (1 AZ), el almacenamiento se comparte con los workers nodes. +- **Almacenamiento distribuido Rook-Ceph**: para el almacenamiento de volúmenes persistentes (PV), se integra en la plataforma un almacenamiento distribuido **Ceph** Open Source. Permite utilizar las *storage-classes* *ceph-block*, *ceph-bucket* y *ceph-filesystem*. Se utiliza un almacenamiento de **7500 IOPS**, lo que permite un alto rendimiento. En los despliegues de producción (en 3 AZ), los nodos de almacenamiento están dedicados (1 nodo por AZ); en los despliegues fuera de producción (1 AZ), el almacenamiento se comparte con los nodos workers. -- **Cert-Manager**: el gestor de certificados OpenSource **Cert-Manager** está integrado nativamente en la plataforma. +- **Cert-Manager**: el gestor de certificados Open Source **Cert-Manager** está integrado nativamente en la plataforma. - **ArgoCD** está a su disposición para sus despliegues automatizados a través de una cadena de **CI/CD**. -- Stack **Prometheus** (Prometheus, Grafana, Loki): los clusters de Kubernetes gestionados se entregan de serie con una stack OpenSource completa **Prometheus** para la observabilidad, que incluye: +- Stack **Prometheus** (Prometheus, Grafana, Loki): los clústeres Managed Kubernetes se entregan de serie con una stack Open Source completa de **Prometheus** para la observabilidad, que incluye: - **Prometheus** - **Grafana**, con numerosos dashboards - **Loki**: los registros de la plataforma se exportan al almacenamiento S3 Cloud-Temple (y se integran en Grafana). -- **Harbor** es un **Container registry** que le permite almacenar las imágenes de sus contenedores o sus charts helm directamente en el cluster. Realiza **escaneos de vulnerabilidad** en sus imágenes y puede firmarlas digitalmente. **Harbor** también permite sincronizaciones con otros registries. ([https://goharbor.io/](https://goharbor.io/)) +- **Harbor** es un **Container registry** que le permite almacenar las imágenes de sus contenedores o sus charts de Helm directamente en el clúster. Realiza **escaneos de vulnerabilidad** en sus imágenes y puede firmarlas digitalmente. **Harbor** también permite sincronizaciones con otros registros. ([https://goharbor.io/](https://goharbor.io/)) -- **OpenCost** ([https://github.com/opencost/opencost](https://github.com/opencost/opencost)) es una herramienta de gestión de costes (FinOps) para Kubernetes. Le permite seguir de cerca el consumo de recursos de Kubernetes y realizar una subfacturación por proyecto/namespace. +- **OpenCost** ([https://github.com/opencost/opencost](https://github.com/opencost/opencost)) es una herramienta de gestión de costos (FinOps) para Kubernetes. Le permite seguir detalladamente el consumo de recursos de Kubernetes y realizar subfacturación por proyecto/namespace. - Estrategias de seguridad avanzadas con **Kyverno** y **Capsule**: - **Kyverno** ([https://kyverno.io/](https://kyverno.io/)) es un controlador de admisión para Kubernetes que permite aplicar políticas. Es una herramienta esencial para la gobernanza y la seguridad en Kubernetes. - - **Capsule** ([https://projectcapsule.dev/](https://projectcapsule.dev/)) es una herramienta de gestión de permisos que facilita la administración de derechos en Kubernetes. Introduce el concepto de *tenant* que permite centralizar y delegar permisos en varios namespaces. Mediante **Capsule**, los usuarios de la plataforma Kubernetes gestionada disponen, por tanto, de derechos restringidos únicamente a sus propios namespaces. + - **Capsule** ([https://projectcapsule.dev/](https://projectcapsule.dev/)) es una herramienta de gestión de permisos que facilita la administración de derechos en Kubernetes. Introduce el concepto de *tenant* que permite centralizar y delegar permisos en varios namespaces. A través de **Capsule**, los usuarios de la plataforma Kubernetes Gestionado disponen, por tanto, de derechos restringidos únicamente a sus propios namespaces. -- **Veeam Kasten** (también conocido como 'k10') es una solución para la **copia de seguridad** de los workloads de Kubernetes. +- **Veeam Kasten** (también conocido como 'k10') es una solución para la **copia de seguridad** de las cargas de trabajo de Kubernetes. - Permite realizar una copia de seguridad de un despliegue completo: manifiestos, volúmenes, etc., hacia el almacenamiento de objetos S3 Cloud-Temple. **Kasten** utiliza **Kanister** para permitir copias de seguridad de aplicaciones coherentes, por ejemplo, para bases de datos ([https://docs.kasten.io/latest/usage/blueprints/](https://docs.kasten.io/latest/usage/blueprints/)). + Permite realizar copias de seguridad de un despliegue completo: manifiestos, volúmenes, etc... hacia el almacenamiento de objetos S3 Cloud-Temple. **Kasten** utiliza **Kanister** para permitir copias de seguridad aplicativas coherentes, por ejemplo para bases de datos ([https://docs.kasten.io/latest/usage/blueprints/](https://docs.kasten.io/latest/usage/blueprints/)). - **Kasten** es una herramienta cross-platform que puede funcionar con otros clusters de Kubernetes (OpenShift, Hyperscaler,...). Por lo tanto, puede utilizarse para escenarios de reversibilidad o migración (K10 gestiona las adaptaciones necesarias mediante *transformaciones*, por ejemplo, un cambio de ingress-class), así como para "refresh" (ejemplo: restauración planificada de un entorno de producción en preproducción). + **Kasten** es una herramienta multiplataforma que puede funcionar con otros clústeres de Kubernetes (OpenShift, hiperescaladores,...). Por lo tanto, puede utilizarse para escenarios de reversibilidad o migración (K10 gestiona las adaptaciones necesarias mediante *transformations*, por ejemplo un cambio de ingress-class), pero también para "refresh" (ejemplo: restauración planificada de un entorno de producción en preproducción). - **Autenticación SSO** con un Identity Provider Externo OIDC (Microsoft Entra, FranceConnect, Okta, AWS IAM, Google, Salesforce, ...) -## SLA & Información de soporte +## SLA e Información sobre el soporte -- **Disponibilidad garantizada (producción 3 AZ)** : 99.90 % -- **Soporte** : N1/N2/N3 incluidos para el perímetro base (infraestructura y operadores estándar). +- **Disponibilidad garantizada (producción 3 AZ)** : 99.95 % +- **Soporte** : N1/N2/N3 incluido para el perímetro base (infraestructura y operadores estándar). - **Compromiso de tiempo de recuperación (ETR)** : según contrato marco Cloud Temple. -- **Mantenimiento (MCO)** : parcheo regular de Talos / Kubernetes / operadores estándar por parte del MSP, sin interrupción del servicio (actualización progresiva). +- **Mantenimiento (MCO)** : aplicación regular de parches para Talos / Kubernetes / operadores estándar por parte del MSP, sin interrupción del servicio (rolling upgrade). -Los plazos de respuesta y recuperación dependen de la severidad del incidente, conforme a la matriz de soporte (P1 a P4). +Los plazos de atención y recuperación dependen de la gravedad del incidente, de acuerdo con la matriz de soporte (P1 a P4). ## Política de versiones y ciclo de vida -- **Kubernetes soportado :** N-2 (3 versiones principales al año, aproximadamente cada 4 meses). Cada versión se soporta oficialmente durante 12 meses, lo que garantiza una ventana de soporte de Cloud Temple de ~16 meses como máximo por versión. -- **Talos OS :** alineado con las versiones estables de Kubernetes. - - Cada rama se mantiene aproximadamente 12 meses (incluidos parches de seguridad). - - Frecuencia de actualización recomendada : 3 veces al año, en coherencia con las actualizaciones de Kubernetes. +- **Kubernetes soportado:** N-2 (3 versiones principales por año, aproximadamente cada 4 meses). Cada versión es soportada oficialmente durante 12 meses, lo que garantiza una ventana de soporte de Cloud Temple de ~16 meses como máximo por versión. +- **Talos OS:** alineado con las versiones estables de Kubernetes. + - Cada rama se mantiene durante aproximadamente 12 meses (incluidos los parches de seguridad). + - Ritmo de actualización recomendado: 3 veces al año, en coherencia con las actualizaciones de Kubernetes. - Los parches críticos (CVE, kernel) se aplican mediante rolling upgrade, sin interrupción del servicio. -- **Operadores estándar :** actualizados dentro de los 90 días siguientes a la versión estable. -- **Actualizaciones :** - - **Principales** (Kubernetes N+1, Talos X+1) : planificadas 3 veces al año, en rolling update. - - **Secundarias :** aplicadas automáticamente en un plazo de 30 a 60 días. -- **Deprecación :** versión N-3 → fin del soporte en un plazo de 90 días después del lanzamiento de N. +- **Operadores estándar:** actualizados en un plazo de 90 días tras la versión estable. +- **Actualizaciones:** + - **Principales** (Kubernetes N+1, Talos X+1): programadas 3 veces/año, mediante rolling update. + - **Menores:** aplicadas automáticamente en un plazo de 30 a 60 días. +- **Depreciación:** versión N-3 → fin de soporte en un plazo de 90 días tras el lanzamiento de N. -## Nodos Kubernetes +## Nodos de Kubernetes -### Producción (multi-zonal) +### Producción (multi-zona) -Para un despliegue "de producción" (multi-zonal), se utilizan las siguientes máquinas: +Para un despliegue "de producción" (multi-zona), se utilizan las siguientes máquinas: | **AZ** | **Máquina** | **vCores** | **RAM** | **Almacenamiento local** | |---|---|---|---|---| -| AZ07 | Git Runner | 4 | 8 Go | OS: 64 Go | -| AZ05 | Control Plane 1 | 8 | 12 Go | OS: 64 Go | -| AZ06 | Control Plane 2 | 8 | 12 Go | OS: 64 Go | -| AZ07 | Control Plane 3 | 8 | 12 Go | OS: 64 Go | -| AZ05 | Storage Node 1 | 12 | 24 Go | OS: 64 Go + Ceph 500 Go mínimo (*) | -| AZ06 | Storage Node 2 | 12 | 24 Go | OS: 64 Go + Ceph 500 Go mínimo (*)| -| AZ07 | Storage Node 3 | 12 | 24 Go | OS: 64 Go + Ceph 500 Go mínimo (*)| -| AZ05 | Worker Node 1 (**) | 12 | 24 Go | OS: 64 Go | -| AZ06 | Worker Node 2 (**) | 12 | 24 Go | OS: 64 Go | -| AZ07 | Worker Node 3 (**) | 12 | 24 Go | OS: 64 Go | +| AZ07 | Git Runner | 4 | 8 Go | SO: 256 Go | +| AZ05 | Control Plane 1 | 8 | 12 Go | SO: 128 Go | +| AZ06 | Control Plane 2 | 8 | 12 Go | SO: 128 Go | +| AZ07 | Control Plane 3 | 8 | 12 Go | SO: 128 Go | +| AZ05 | Storage Node 1 | 12 | 24 Go | SO: 128 Go + Ceph 500 Go mínimo (*) | +| AZ06 | Storage Node 2 | 12 | 24 Go | SO: 128 Go + Ceph 500 Go mínimo (*)| +| AZ07 | Storage Node 3 | 12 | 24 Go | SO: 128 Go + Ceph 500 Go mínimo (*)| +| AZ05 | Worker Node 1 (**) | 12 | 24 Go | SO: 128 Go | +| AZ06 | Worker Node 2 (**) | 12 | 24 Go | SO: 128 Go | +| AZ07 | Worker Node 3 (**) | 12 | 24 Go | SO: 128 Go | -(*) : Cada nodo de almacenamiento se entrega con un mínimo de 500 Go de espacio en disco, para un almacenamiento útil Ceph distribuido de 500 Go (les données sont répliquées sur chaque AZ, donc x3). El espacio libre disponible para el cliente es de aproximadamente 350 Go. Este tamaño inicial puede aumentarse en el momento de la construcción, o más tarde, según las necesidades. Se aplican cuotas en Ceph, con una distribución Block/File. +(*) : Cada nodo de almacenamiento se entrega con un mínimo de 500 Go de espacio en disco, para un almacenamiento útil Ceph distribuido de 500 Go (los datos se replican en cada AZ, por lo tanto x3). El espacio libre disponible para el cliente es de aproximadamente 350 Go. Este tamaño inicial puede aumentarse en el momento del despliegue, o más tarde, según sea necesario. Se aplican cuotas en Ceph, con una distribución Block/File. -(**) : El tamaño y la cantidad de Worker Nodes pueden adaptarse según la necesidad de capacidad de cómputo del cliente. La cantidad mínima de Worker nodes es de 3 (1 par AZ), y recomendamos aumentar su cantidad en lotes de 3 para mantener una distribución multi-zona coherente. El tamaño de los Worker Node puede adaptarse, con un mínimo de 12 cores y 24 Go de RAM ; el límite superior por Worker node está fijado por el tamaño de los hipervisores utilizados (donc potentiellement 112 cores/1536 Go de RAM avec des lames Performance 3). La cantidad de Worker Nodes está limitada a 100. El CNCF recomienda tener worker nodes de tamaño idéntico. El límite de la cantidad de pods por Worker Node es de 110. +(**) : El tamaño y la cantidad de Worker Nodes pueden adaptarse según la necesidad de capacidad de cálculo del cliente. La cantidad mínima de Worker nodes es de 3 (1 por AZ), y recomendamos aumentar su número en lotes de 3 para mantener una distribución multi-zona coherente. El tamaño de los Worker Node puede adaptarse, con un mínimo de 12 núcleos y 24 Go de RAM; el límite superior por Worker node está determinado por el tamaño de los hipervisores utilizados (por lo tanto, potencialmente 112 núcleos/1536 Go de RAM con blades Performance 3). La cantidad de Worker Nodes está limitada a 100. El CNCF recomienda tener worker nodes del mismo tamaño. El límite de pods por Worker Node es de 110. ### Dev/Test @@ -136,15 +136,15 @@ Para una versión "dev/test", se despliegan las siguientes máquinas: | **AZ** | **Máquina** | **vCores** | **RAM** | **Almacenamiento local** | |---|---|---|---|---| -| AZ0n | Git Runner | 4 | 8 Go | OS: 30 Go | -| AZ0n | Plano de control | 8 | 12 Go | OS: 64 Go | -| AZ0n | Nodo de trabajo 1 (**) | 12 | 24 Go | OS: 64 Go + Ceph 300 Go mínimo (*) | -| AZ0n | Nodo de trabajo 2 (**) | 12 | 24 Go | OS: 64 Go + Ceph 300 Go mínimo (*) | -| AZ0n | Nodo de trabajo 3 (**) | 12 | 24 Go | OS: 64 Go + Ceph 300 Go mínimo (*) | +| AZ0n | Git Runner | 4 | 8 Go | SO: 30 Go | +| AZ0n | Control Plane | 8 | 12 Go | SO: 128 Go | +| AZ0n | Worker Node 1 (**) | 12 | 24 Go | SO: 128 Go + Ceph 300 Go mínimo (*) | +| AZ0n | Worker Node 2 (**) | 12 | 24 Go | SO: 128 Go + Ceph 300 Go mínimo (*) | +| AZ0n | Worker Node 3 (**) | 12 | 24 Go | SO: 128 Go + Ceph 300 Go mínimo (*) | -(*) : 3 nodos de trabajo se utilizan como nodos de almacenamiento y se entregan con un mínimo de 300 Go de espacio en disco, para un almacenamiento útil distribuido de 300 Go (los datos se replican tres veces). El espacio libre disponible para el cliente es de aproximadamente 150 Go. Este tamaño inicial puede aumentarse en el momento de la construcción o más tarde, según las necesidades. +(*) : 3 Worker nodes se utilizan como Storage nodes y se entregan con un mínimo de 300 Go de espacio en disco, para un almacenamiento útil distribuido de 300 Go (los datos se replican tres veces). El espacio libre disponible para el cliente es de aproximadamente 150 Go. Este tamaño inicial puede aumentarse en el momento del despliegue, o más tarde, según las necesidades. -(**) : El tamaño y la cantidad de nodos de trabajo pueden adaptarse según la necesidad de capacidad de cómputo del cliente. El número mínimo de nodos de trabajo es de 3 (debido a la replicación del almacenamiento). El tamaño de los nodos de trabajo puede adaptarse, con un mínimo de 12 núcleos y 24 Go de RAM; el límite superior por nodo de trabajo está determinado por el tamaño de los hipervisores utilizados (por lo tanto, potencialmente 112 núcleos/1536 Go de RAM con láminas Performance 3). La cantidad de nodos de trabajo está limitada a 250. El CNCF recomienda tener nodos de trabajo de tamaño idéntico. El límite del número de pods por nodo de trabajo es de 110. +(**) : El tamaño y la cantidad de Worker Nodes pueden adaptarse según la necesidad de capacidad de cálculo del cliente. El número mínimo de Worker nodes es de 3 (debido a la replicación del almacenamiento). El tamaño de los Worker Nodes puede adaptarse, con un mínimo de 12 núcleos y 24 Go de RAM; el límite superior por Worker node está determinado por el tamaño de los hipervisores utilizados (por lo tanto, potencialmente 112 núcleos/1536 Go de RAM con blades Performance 3). La cantidad de Worker Nodes está limitada a 250. El CNCF recomienda tener worker nodes del mismo tamaño. El límite de pods por Worker Node es de 110. ## RACI @@ -153,42 +153,42 @@ Para una versión "dev/test", se despliegan las siguientes máquinas: | **Actividad** | **Cliente** | **Cloud Temple** | |---|---|---| | Definir la arquitectura global del servicio Kubernetes | C | RA | -| Dimensionar el servicio Kubernetes (número de nodos, recursos) | C | RA | +| Dimensionar el servicio Kubernetes (nombre de noeuds, ressources) | C | RA | | Instalar el servicio Kubernetes con una configuración predeterminada | I | RA | | Configuración del servicio Kubernetes | C | RA | | Configurar la red base del servicio Kubernetes | I | RA | -| Implementación de la configuración inicial de identidades y accesos | C | RA | +| Despliegue de la configuración inicial de identidades y accesos | C | RA | | Definir la estrategia de escalado y alta disponibilidad | C | RA | ### Gestión de proyectos y aplicaciones empresariales | **Actividad** | **Cliente** | **Cloud Temple** | |---|---|---| -| Crear y gestionar los proyectos de Kubernetes | RA | I* | -| Desplegar y gestionar las aplicaciones en Kubernetes | RA | I* | -| Configurar los pipelines CI/CD | RA | I* | -| Gestionar las imágenes de contenedores y los registros | RA | I* | +| Crear y gestionar los proyectos de Kubernetes | RA | I* | +| Desplegar y gestionar las aplicaciones en Kubernetes | RA | I* | +| Configurar los pipelines CI/CD | RA | I* | +| Gestionar las imágenes de contenedores y los registros | RA | I* | -*puede pasar a "C" según el contrato de gestión y operación +*puede cambiar a "C" según el contrato de outsourcing ### Monitoreo y rendimiento | **Actividad** | **Cliente** | **Cloud Temple** | |---|---|---| -| Supervisar el rendimiento del servicio de Kubernetes | I | RA* | -| Supervisar el rendimiento de las aplicaciones | RA | | +| Monitorear el rendimiento del servicio de Kubernetes | I | RA* | +| Monitorear el rendimiento de las aplicaciones | RA | | | Gestionar las alertas relacionadas con el servicio de Kubernetes | I | RA* | | Gestionar las alertas relacionadas con las aplicaciones | RA | | -(*) : *Solo en clúster de producción. En Dev/Test, el cliente tiene plena autonomía y responsabilidad.* +(*) : *Solo clúster de producción. En Dev/Test, el cliente tiene plena autonomía y responsabilidad.* -### Mantenimiento y actualizaciones de infraestructuras +### Mantenimiento y actualizaciones de Infraestructuras | **Actividad** | **Cliente** | **Cloud Temple** | |---|---|---| -| Actualizar el servicio de Kubernetes/SO | C | RA | -| Aplicar parches de seguridad a Kubernetes | C | RA | -| Actualizar las aplicaciones desplegadas (operadores*) | C | RA | +| Actualizar el servicio Kubernetes/OS | C | RA | +| Aplicar los parches de seguridad a Kubernetes | C | RA | +| Actualizar las aplicaciones desplegadas (opérateurs*) | C | RA | *Paquete de operador incluido en Managed Kube - ver capítulos: Paquetes Helm gestionados @@ -196,27 +196,27 @@ Para una versión "dev/test", se despliegan las siguientes máquinas: | **Actividad** | **Cliente** | **Cloud Temple** | |---|---|---| -| Gestionar la seguridad del servicio de Kubernetes | RA | RA* | -| Configurar y gestionar las políticas de seguridad de pods | RA | I | -| Gestionar los certificados SSL/TLS para el servicio de Kubernetes | C | RA* | +| Gestionar la seguridad del servicio Kubernetes | RA | RA* | +| Configurar y gestionar las políticas de seguridad de los pods | RA | I | +| Gestionar los certificados SSL/TLS para el servicio Kubernetes | C | RA* | | Gestionar los certificados SSL/TLS para las aplicaciones | RA | I | -| Implementar y gestionar el control de acceso basado en roles por defecto (RBAC)| C | R* | +| Implementar y gestionar el control de acceso basado en roles de base (RBAC)| C | R* | | Implementar y gestionar el control de acceso basado en roles del cliente (RBAC) | RA | I | -(*) : *Solo en clúster de producción. En Dev/Test, el cliente tiene plena autonomía y responsabilidad.* +(*) : *Solo clúster de producción. En Dev/Test el cliente tiene plena autonomía y responsabilidad.* ### Copia de seguridad y recuperación ante desastres | **Actividad** | **Cliente** | **Cloud Temple** | |---|---|---| -| Definir la estrategia de copia de seguridad para el servicio de Kubernetes | I | RA | -| Implementar y gestionar las copias de seguridad del servicio de Kubernetes | I | RA | +| Definir la estrategia de copia de seguridad para el servicio Kubernetes | I | RA | +| Implementar y gestionar las copias de seguridad del servicio Kubernetes | I | RA | | Definir la estrategia de copia de seguridad para las aplicaciones | RA* | I* | | Implementar y gestionar las copias de seguridad de las aplicaciones | RA* | I* | -| Probar los procedimientos de recuperación ante desastres para el servicio de Kubernetes | CI | RA | +| Probar los procedimientos de recuperación ante desastres para el servicio Kubernetes | CI | RA | | Probar los procedimientos de recuperación ante desastres para las aplicaciones | RA* | CI* | -*puede pasar a "CI | RA" en función del contrato de gestión externalizada +*puede cambiar a "CI | RA" según el contrato de externalización ### Soporte y resolución de problemas @@ -224,85 +224,85 @@ Para una versión "dev/test", se despliegan las siguientes máquinas: |---|---|---| | Proporcionar soporte de nivel 1 para la infraestructura | I | RA | | Proporcionar soporte de nivel 2 y 3 para la infraestructura | I | RA | -| Resolver problemas relacionados con el servicio de Kubernetes | C | RA | +| Resolver problemas relacionados con el servicio Kubernetes | C | RA | | Resolver problemas relacionados con las aplicaciones | RA | I | ### Gestión de capacidades y evolución -*Solo para clúster de producción. En Dev/Test, el cliente es totalmente autónomo y responsable.* +*Solo clúster de producción. En Dev/Test, el cliente es completamente autónomo y responsable.* -| **Actividad** | **Cliente** | **Cloud Temple** | +| **Actividad** | **Cliente** | **Cloud Temple** | |---|---|---| -| Supervisar el uso de los recursos de Kubernetes | C | RA | -| Planificar la evolución de las capacidades del servicio | RA | C | -| Implementar los cambios de capacidad | I | RA | +| Monitorear el uso de los recursos de Kubernetes | C | RA | +| Planificar la evolución de las capacidades del servicio | RA | C | +| Implementar los cambios de capacidad | I | RA | | Gestionar la evolución de las aplicaciones y sus recursos | RA | I | ### Documentación y cumplimiento -| **Actividad** | **Cliente** | **Cloud Temple** | +| **Actividad** | **Cliente** | **Cloud Temple** | |---|---|---| -| Mantener la documentación del producto Kubernetes | I | RA | -| Mantener la documentación de las aplicaciones | RA | I | -| Asegurar el cumplimiento del servicio Kubernetes | I | RA | -| Asegurar el cumplimiento de las aplicaciones | RA | I | -| Realizar auditorías del servicio Kubernetes | I | RA | -| Realizar auditorías de las aplicaciones | RA | I | +| Mantener la documentación del producto Kubernetes | I | RA | +| Mantener la documentación de las aplicaciones | RA | I | +| Garantir el cumplimiento del servicio Kubernetes | I | RA | +| Garantir el cumplimiento de las aplicaciones | RA | I | +| Realizar auditorías del servicio Kubernetes | I | RA | +| Realizar auditorías de las aplicaciones | RA | I | ### Gestión de operadores/CRD de Kubernetes (incluido en el producto) | **Actividad** | **Cliente** | **Cloud Temple** | |---|---|---| -| Puesta a disposición del catálogo de Operadores predeterminado | CI | RA | +| Disponibilidad del catálogo de Operadores predeterminado | CI | RA | | Actualización de los Operadores | CI | RA | | Monitoreo del estado de los Operadores | CI | RA | | Resolución de problemas relacionados con los Operadores | CI | RA | -| Gestión de permisos de los Operadores | CI | RA | -| Gestión de recursos de los Operadores (adición/eliminación) | CI | RA | -| Copia de seguridad de los datos de los recursos de los Operadores | CI | RA | +| Gestión de los permisos de los Operadores | CI | RA | +| Gestión de los recursos de los Operadores (ajout/suppression) | CI | RA | +| Respaldo de los datos de los recursos de los Operadores | CI | RA | | Supervisión de los recursos de los Operadores | CI | RA | | Restauración de los datos de los recursos de los Operadores | CI | RA | | Auditoría de seguridad de los Operadores | CI | RA | | Soporte de los Operadores | CI | RA | -| Gestión de licencias de los operadores | CI | RA | -| Gestión de planes de soporte específicos para los operadores | CI | RA | +| Gestión de licencias en los operadores | CI | RA | +| Gestión de planes de soporte específicos en los operadores | CI | RA | *Paquete de operador incluido en Managed Kube - ver capítulos: Paquetes Helm gestionados ### Gestión de aplicaciones/operadores/CRD de Kubernetes (del cliente) -*Solo en clúster de producción. En Dev/Test, el cliente es completamente autónomo y responsable.* +*Solo clúster de producción. En Dev/Test, el cliente tiene plena autonomía y responsabilidad.* | **Actividad** | **Cliente** | **Cloud Temple** | |---|---|---| | Despliegue de CRDs | I* | RA* | | Actualización de operadores | RA | I | -| Supervisión del estado de los operadores | RA | I | +| Monitoreo del estado de los operadores | RA | I | | Resolución de problemas relacionados con los operadores | RA | I | -| Gestión de permisos de los operadores | RA | I | -| Gestión de recursos de los operadores (añadir/eliminar) | RA | I | -| Copia de seguridad de los datos de los recursos de los operadores | RA | I | -| Supervisión de los recursos de los operadores | RA | I | -| Restauración de los datos de los recursos de los operadores | RA | I | +| Gestión de autorizaciones de los operadores | RA | I | +| Gestión de recursos de los operadores (agregado/eliminación) | RA | I | +| Copia de seguridad de datos de los recursos de los operadores | RA | I | +| Supervisión de recursos de operadores | RA | I | +| Restauración de datos de los recursos de los operadores | RA | I | | Auditoría de seguridad de los operadores | RA | I | -| Soporte de los operadores | RA | I | +| Soporte de operadores | RA | I | | Gestión de licencias de los operadores | RA | I | | Gestión de planes de soporte específicos para los operadores | RA | I | -Algunos servicios de operadores pueden ser gestionados según el contrato de externalización. +Algunos servicios de operadores pueden estar cubiertos según el contrato de outsourcing. -*puede cambiar a "A | RC" según el contrato de externalización +*puede cambiar a "A | RC" según el contrato de outsourcing -### Soporte de aplicaciones +### Asistencia de aplicaciones | **Actividad** | **Cliente** | **Cloud Temple** | |---|---|---| -| Soporte de aplicaciones (servicio externo) | RA | I | +| Asistencia de aplicaciones (servicio externo) | RA | I | -El soporte de aplicaciones puede proporcionarse mediante un servicio complementario. +Se puede proporcionar soporte de aplicaciones a través de un servicio complementario. -### RACI (sintético) +### RACI (resumido) -- Cloud Temple : responsable y actor (RA) de la plataforma Kubernetes, seguridad del clúster, copia de seguridad de la infraestructura, supervisión, CRD. -- Cliente : responsable y actor (RA) de los proyectos de aplicaciones, operadores de negocio, pipelines CI/CD, copias de seguridad de aplicaciones. -- Zona "gris" : adaptaciones y extensiones (IAM, operadores específicos, endurecimiento de cumplimiento/seguridad del clúster) - facturadas en modo proyecto. \ No newline at end of file +- Cloud Temple : responsable y actor (RA) de la base Kubernetes, seguridad del clúster, respaldo de infraestructura, supervisión, CRD. +- Cliente : responsable y actor (RA) de los proyectos de aplicaciones, operadores de negocio, pipelines CI/CD, respaldos de aplicaciones. +- Zona "gris" : adaptaciones y extensiones (IAM, operadores específicos, endurecimiento de cumplimiento/seguridad del clúster) - facturadas en modalidad de proyecto. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_core_kubernetes.md b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_core_kubernetes.md index e33fc78d..1b22fc96 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_core_kubernetes.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_core_kubernetes.md @@ -1,5 +1,5 @@ --- -title: Visión general +title: Vista general --- import archiOverview1az from '@site/docs/managed_kubernetes/images/archi_overview_1az.png' import archiOverview from '@site/docs/managed_kubernetes/images/archi_overview.png' @@ -9,11 +9,11 @@ import archiOverview from '@site/docs/managed_kubernetes/images/archi_overview.p

      Conceptos

      -

      Descubra las bases y los principios esenciales para dominar nuestra infraestructura.

      +

      Descubra los fundamentos y principios esenciales para dominar nuestra infraestructura.

      Explorar los conceptos →
      -

      Guía de inicio

      +

      Guía de inicio rápido

      Comience rápidamente siguiendo instrucciones claras y sencillas.

      Iniciar el Quickstart →
      @@ -24,19 +24,19 @@ import archiOverview from '@site/docs/managed_kubernetes/images/archi_overview.p
      -Managed **Core** Kubernetes by Cloud Temple es una solución de orquestación de contenedores basada en una selección de productos de código abierto, diseñada para ofrecer una base segura, resiliente y automatizada en las plataformas SecNumCloud de Cloud Temple. Cada clúster se despliega en un entorno IaaS de Cloud-Temple completamente dedicado al cliente. +Managed **Core** Kubernetes by Cloud Temple es una solución de orquestación de contenedores basada en una selección de productos de código abierto, diseñada para ofrecer una base segura, resiliente y automatizada en las plataformas SecNumCloud de Cloud Temple. Cada clúster se despliega en un entorno IaaS Cloud-Temple completamente dedicado al cliente. -Este producto está diseñado para equipos con un excelente dominio de Kubernetes y herramientas Cloud Native, que desean construir su propia plataforma sobre cimientos minimalistas y robustos. Está dirigida a los entusiastas del código abierto que buscan una solución depurada, portátil, sin capas adicionales del fabricante, sobre un sistema operativo minimalista e inmutable diseñado para la automatización y la seguridad. +Este producto está diseñado para equipos con un dominio excelente de Kubernetes y las herramientas Cloud Native, que desean construir su propia plataforma sobre cimientos minimalistas y robustos. Se dirige a los partidarios del código abierto que buscan una solución depurada, portátil, sin capas adicionales del fabricante, sobre un sistema operativo minimalista e inmutable diseñado para la automatización y la seguridad. ### Beneficios Clave - **Soberanía y Reversibilidad** : La solución se basa exclusivamente en estándares de código abierto (Kubernetes CNCF) para evitar cualquier dependencia tecnológica y garantizar la portabilidad de sus aplicaciones. -- **Seguridad "Zero-Trust" by design** : La arquitectura se basa en Talos OS, un sistema operativo inmutable sin acceso directo (ni shell, ni SSH), lo que reduce drásticamente la superficie de ataque y constituye una base sólida para una estrategia de seguridad "Zero-Trust". -- **Fundamentos de red modernos** : La integración de Cilium para CNI y MetalLB para la exposición de servicios proporciona una base de red de alto rendimiento y estándar, lista para alojar sus propios componentes de seguridad y filtrado. +- **Seguridad "Zero-Trust" por diseño** : La arquitectura se basa en Talos OS, un sistema operativo inmutable sin acceso directo (ni shell, ni SSH), lo que reduce drásticamente la superficie de ataque y constituye una base sólida para una estrategia de seguridad "Zero-Trust". +- **Fundamentos de red modernos** : La integración de Cilium para el CNI y MetalLB para la exposición de servicios proporciona una base de red de alto rendimiento y estándar, lista para acoger sus propios componentes de seguridad y filtrado. ### Una plataforma base lista para ser ampliada -La oferta "Managed Core" incluye de forma nativa una stack mínima y coherente de herramientas open source de última generación para proporcionarle las bases de un clúster de Kubernetes : +La oferta "Managed Core" incluye de forma nativa una stack mínima y coherente de herramientas open source de vanguardia para proporcionarle los fundamentos de un clúster de Kubernetes: - **SO y Red** : Talos, Cilium, MetalLB @@ -50,29 +50,31 @@ Proponemos dos arquitecturas distintas para satisfacer sus necesidades, ya sea p ### Arquitectura "Dev/Test" -Ideal para entornos de POC, esta arquitectura compacta despliega todos los recursos dentro de una única zona de disponibilidad (AZ). +Ideal para entornos de POC, esta arquitectura compacta despliega todos los recursos dentro de una sola zona de disponibilidad (AZ). -- **Caso de uso** : Desarrollo, pruebas, pruebas de concepto (POC). +- **Casos de uso** : Desarrollo, pruebas, proof-of-concept (POC). - **Puntos clave** : - 1 nodo Control Plane. - - 3 nodos Workers (o más). - - No cuenta con SLA de alta disponibilidad. - - sin restricciones de seguridad + - 3 nodos Workers (ou plus). + - No cuenta con un SLA de alta disponibilidad. + - ninguna restricción de seguridad -Architecture Mono-AZ +Arquitectura Mono-AZ ### Arquitectura de Producción (Multi-AZ) -Diseñada para producción y aplicaciones críticas, esta arquitectura distribuye los recursos en tres zonas de disponibilidad (AZ) para garantizar una alta disponibilidad y una resiliencia máxima, conforme a los requisitos de SecNumCloud. +Diseñada para producción y aplicaciones críticas, esta arquitectura distribuye los recursos en tres zonas de disponibilidad (AZ) para garantizar alta disponibilidad y máxima resiliencia, de conformidad con los requisitos de SecNumCloud. - **Caso de uso** : Aplicaciones de producción, servicios críticos, plataformas que requieren un SLA. - **Puntos clave** : - - **Alta Disponibilidad** : 3 nodos del Control Plane distribuidos en 3 AZ. - - **Workers Distribuidos** : Mínimo 3 nodos workers, uno por AZ. - - **Nodos Bare Metal (Opcional)** : Posibilidad de integrar nodos workers de tipo **"Bare Metal"** para necesidades de rendimiento específicas, especialmente el **soporte de GPU**. - - **SLA del 99.90%**, medido mensualmente. + - **Alta Disponibilidad** : 3 nodos Control Plane distribuidos en 3 AZ. + - **Almacenamiento Dedicado** : 3 nodos de almacenamiento dedicados y distribuidos para el rendimiento y la resiliencia. + - **Workers Distribuidos** : Al menos 3 nodos workers, uno por AZ. + - **Nodos Bare Metal (Opcional)** : Integración posible de nodos workers de tipo **"Bare Metal"** para necesidades de rendimiento específicas, especialmente el **soporte de GPU**. + - **SLA del 99.95%**, medido mensualmente. -Arquitectura Multi-AZ + +Architecture Multi-AZ --- diff --git a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md index 3b384ca0..7805a84c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md @@ -2,16 +2,16 @@ title: Visión general --- -# Kubernetes administrado +# Kubernetes Administrado

      Conceptos

      -

      Descubra las bases y principios esenciales para dominar nuestra infraestructura.

      +

      Descubra los fundamentos y principios esenciales para dominar nuestra infraestructura.

      Explorar los conceptos →
      -

      Guía de inicio

      +

      Guía de inicio rápido

      Comience rápidamente siguiendo instrucciones claras y sencillas.

      Iniciar el Quickstart →
      @@ -22,25 +22,25 @@ title: Visión general
      -Kubernetes administrado de Cloud Temple es una solución de orquestación de contenedores basada en productos de código abierto y diseñada para ofrecer un alto nivel de seguridad, resiliencia y automatización en las plataformas SecNumcloud de Cloud Temple. Cada clúster se implementa en un entorno IaaS de Cloud-Temple completamente dedicado al cliente. +Managed Kubernetes de Cloud Temple es una solución de orquestación de contenedores basada en productos Open Source y diseñada para ofrecer un alto nivel de seguridad, resiliencia y automatización en las plataformas SecNumcloud de Cloud Temple. Cada clúster se despliega en un entorno IaaS de Cloud-Temple totalmente dedicado al cliente. -Este producto está diseñado para equipos con un buen conocimiento de Kubernetes y para los entusiastas del código abierto que buscan una solución nativa, portátil, sin capa adicional del fabricante, sobre un sistema operativo minimalista e inmutable diseñado para la automatización y la seguridad. +Este producto está diseñado para equipos con un sólido conocimiento de Kubernetes y para los adeptos al código abierto que buscan una solución nativa, portátil, sin capas propietarias, sobre un sistema operativo minimalista e inmutable diseñado para la automatización y la seguridad. ### Beneficios Clave -- **Soberanía y Reversibilidad** : La solución se basa en estándares de código abierto (Kubernetes CNCF) para evitar cualquier dependencia tecnológica y garantizar la portabilidad de sus aplicaciones. La herramienta de copia de seguridad Veeam Kasten, incluida en el producto, está especialmente diseñada para facilitar las migraciones de una nube a otra. -- **Seguridad "Zero-Trust" y Gobernanza** : La arquitectura se basa en Talos OS, un sistema operativo inmutable sin acceso directo (ni shell, ni SSH), lo que reduce drásticamente la superficie de ataque. Este enfoque se complementa con herramientas de gobernanza como Kyverno para la gestión de políticas y Capsule para la gestión granular de permisos, constituyendo una base sólida para una estrategia de seguridad "Zero-Trust". -- **Control de Costes e Integración** : La solución integra nativamente herramientas de FinOps como OpenCost para un seguimiento preciso del consumo. El modelo económico es transparente, basado en los recursos IaaS consumidos, y el uso de componentes de código abierto reconocidos (Cilium, Ceph, ArgoCD) facilita la integración en sus ecosistemas existentes. +- **Soberanía y Reversibilidad** : La solución se basa en estándares de código abierto (Kubernetes CNCF) para evitar cualquier dependencia tecnológica y garantizar la portabilidad de sus aplicaciones. La herramienta de copia de seguridad Veeam Kasten, incluida en el producto, está diseñada específicamente para facilitar las migraciones de una nube a otra. +- **Seguridad "Zero-Trust" y Gobernanza** : La arquitectura se basa en Talos OS, un sistema operativo inmutable sin acceso directo (ni shell, ni SSH), lo que reduce drásticamente la superficie de ataque. Este enfoque se combina con herramientas de gobernanza como Kyverno para la gestión de políticas y Capsule para la gestión granular de permisos, constituyendo una base sólida para una estrategia de seguridad "Zero-Trust". +- **Control de Costos e Integración** : La solución integra nativamente herramientas de FinOps como OpenCost para un seguimiento preciso del consumo. El modelo económico es transparente, basado en los recursos de IaaS consumidos, y el uso de componentes de código abierto reconocidos (Cilium, Ceph, ArgoCD) facilita la integración en sus ecosistemas existentes. ### Una plataforma completa y lista para usar -La solución incluye nativamente una stack completa y coherente de herramientas open source de última generación para cubrir todas las necesidades del ciclo de vida de la aplicación: +La solución incluye nativamente un stack completo y coherente de herramientas open source de vanguardia para cubrir todas las necesidades del ciclo de vida de la aplicación: - **Red y Seguridad** : Cilium, Hubble, MetalLB, Ingress Nginx, Kyverno, Capsule - **Almacenamiento** : Rook-Ceph - **Despliegue Continuo (GitOps)** : ArgoCD - **Observabilidad** : Prometheus, Grafana, Loki -- **Copia de seguridad y Migración** : Veeam Kasten +- **Copia de Seguridad y Migración** : Veeam Kasten - **Gestión de Costos (FinOps)** : OpenCost --- @@ -51,31 +51,31 @@ Proponemos dos arquitecturas distintas para satisfacer sus necesidades, ya sea p ### Arquitectura "Dev/Test" -Ideal para entornos de POC, esta arquitectura compacta despliega todos los recursos dentro de una única zona de disponibilidad (AZ). +Ideal para entornos de POC, esta arquitectura compacta despliega todos los recursos dentro de una sola zona de disponibilidad (AZ). -- **Caso de uso** : Desarrollo, pruebas, proof-of-concept (POC). +- **Casos de uso** : Desarrollo, pruebas, prueba de concepto (POC). - **Puntos clave** : - 1 nodo Control Plane. - - 3 nodos Worker (o más). - - El almacenamiento distribuido (Ceph) está co-localizado en los nodos Worker. + - 3 nodos Workers (ou plus). + - El almacenamiento distribuido (Ceph) está co-localizado en los nodos workers. - No cuenta con un SLA de alta disponibilidad. - - Sin restricciones de seguridad + - ninguna restricción de seguridad -Arquitectura Mono-AZ +Architecture Mono-AZ ### Arquitectura de Producción (Multi-AZ) -Diseñada para producción y aplicaciones críticas, esta arquitectura distribuye los recursos en tres zonas de disponibilidad (AZ) para garantizar una alta disponibilidad y una resiliencia máxima, conforme a los requisitos SecNumCloud. +Diseñada para producción y aplicaciones críticas, esta arquitectura distribuye los recursos en tres zonas de disponibilidad (AZ) para garantizar una alta disponibilidad y una resiliencia máxima, conforme a los requisitos de SecNumCloud. -- **Caso de uso** : Aplicaciones de producción, servicios críticos, plataformas que requieren un SLA. +- **Casos de uso** : Aplicaciones de producción, servicios críticos, plataformas que requieren un SLA. - **Puntos clave** : - - **Alta disponibilidad** : 3 nodos Control Plane distribuidos en 3 AZ. - - **Almacenamiento dedicado** : 3 nodos de almacenamiento dedicados y distribuidos para el rendimiento y la resiliencia. - - **Workers distribuidos** : Al menos 3 nodos workers, uno por AZ. - - **Nodos Bare Metal (Opcional)** : Posibilidad de integrar nodos workers de tipo **"Bare Metal"** para necesidades de rendimiento específicas, especialmente el **soporte de GPU**. - - **SLA del 99.90%**. + - **Alta Disponibilidad** : 3 nodos de Control Plane distribuidos en 3 AZ. + - **Almacenamiento Dedicado** : 3 nodos de almacenamiento dedicados y distribuidos para el rendimiento y la resiliencia. + - **Workers Distribuidos** : Al menos 3 nodos worker, uno por AZ. + - **Nodos Bare Metal (Optionnel)** : Integración posible de nodos worker de tipo **"Bare Metal"** para necesidades de rendimiento específicas, en particular el **soporte de GPU**. + - **SLA del 99.95%**. -Architecture Multi-AZ +Arquitectura Multi-AZ --- @@ -84,13 +84,13 @@ Diseñada para producción y aplicaciones críticas, esta arquitectura distribuy La oferta incluye en detalle los siguientes componentes: - CNI Cillium, con interfaz de observabilidad (Hubble) -- Ingress internos y externos MetalLB y nginx +- Ingresses internos y externos MetalLB y nginx - Almacenamiento distribuido Rook-Ceph - Cert-Manager - ArgoCD -- Stack Prometheus (Prometheus, Grafana, Loki) +- Stack prometheus (Prometheus, Grafana, Loki) - Registro de contenedores Harbor - Gestión de costos con OpenCost -- Políticas de seguridad avanzadas con Kyverno y Capsule -- Veeam Kasten (copias de seguridad, automatizaciones entre entornos y reversibilidad) -- Autenticación SSO con un Proveedor de Identidad Externo OIDC (Microsoft Entra, FranceConnect, Okta, AWS IAM, Google, Salesforce, ...) \ No newline at end of file +- Estrategias de seguridad avanzadas con Kyverno y Capsule +- Veeam Kasten (sauvegarde, automatisations inter-environnements et réversibilité) +- Autenticación SSO con un Identity Provider Externe OIDC (Microsoft Entra, FranceConnect, Okta, AWS IAM, Google, Salesforce, ...) \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/concepts.md b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/concepts.md index f7400aa1..09e1b3d4 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/concepts.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/concepts.md @@ -11,8 +11,8 @@ import archi_overview_1az from '@site/docs/managed_kubernetes/images/archi_overv Cloud Temple propone due offerte distinte per soddisfare le vostre esigenze di orchestrazione dei container: -- **Managed Core Kubernetes** : Un prodotto minimalista che fornisce una base Kubernetes solida e sicura, basata su componenti open-source all'avanguardia. È ideale per team esperti che desiderano costruire la propria piattaforma su misura. -- **Managed Kubernetes** : Una soluzione completa e pronta all'uso che include una suite completa di strumenti per la rete, la sicurezza, lo storage, il deployment continuo, l'osservabilità, il backup e la gestione dei costi. +- **Managed Core Kubernetes** : Un prodotto minimalista che fornisce una base Kubernetes robusta e sicura, basata su componenti open-source all'avanguardia. È ideale per i team esperti che desiderano costruire la propria piattaforma su misura. +- **Managed Kubernetes** : Una soluzione completa e pronta all'uso che include una stack completa di strumenti per la rete, la sicurezza, lo storage, il deployment continuo, l'osservabilità, il backup e la gestione dei costi. ### Tabella comparativa delle offerte @@ -23,85 +23,85 @@ Cloud Temple propone due offerte distinte per soddisfare le vostre esigenze di o | **Osservabilità CNI** | ❌ | Hubble | | **Load Balancer** | MetalLB | MetalLB | | **Ingress** | ❌ | Ingress Nginx | -| **Archiviazione** | Rook-Ceph | Rook-Ceph | -| **Distribuzione Continua (GitOps)** | ❌ | ArgoCD | +| **Storage** | Rook-Ceph | Rook-Ceph | +| **Deployment Continuo (GitOps)** | ❌ | ArgoCD | | **Osservabilità** | ❌ | Prometheus, Grafana, Loki | | **Backup e Migrazione** | ❌ | Veeam Kasten | | **Gestione dei Costi (FinOps)** | ❌ | OpenCost | | **Governance e Sicurezza**| ❌ | Kyverno, Capsule | -| **Registro Container**| ❌ | Harbor | -| **Gestione dei certificati**| ❌ | Cert-Manager | +| **Container Registry**| ❌ | Harbor | +| **Gestione dei Certificati**| ❌ | Cert-Manager | | **Autenticazione SSO**| ❌ | Integrazione OIDC | -## Presentazione del prodotto Managed Kubernetes (complète) +## Presentazione del prodotto Managed Kubernetes (completa) L'offerta **Managed Kubernetes** (nota anche come "Kub Managé" o "KM") è una soluzione di containerizzazione Kubernetes gestita da Cloud-Temple, distribuita sotto forma di Macchine Virtuali che operano sulle infrastrutture IaaS Cloud-Temple OpenIaaS. -**Managed Kubernetes** si basa su Talos Linux ([https://www.talos.dev/](https://www.talos.dev/)), un sistema operativo dedicato a Kubernetes che è leggero e sicuro. È immutabile, senza alcun shell né accesso ssh, e configurato esclusivamente in modo dichiarativo tramite API gRPC. +**Managed Kubernetes** si basa su Talos Linux ([https://www.talos.dev/](https://www.talos.dev/)), un sistema operativo dedicato a Kubernetes che è leggero e sicuro. È immutabile, privo di shell o accesso SSH, e configurato esclusivamente in modo dichiarativo tramite API gRPC. -L'installazione standardizzata include un insieme di componenti, per lo più OpenSource e validati dal CNCF: +L'installazione standardizzata include un insieme di componenti, prevalentemente OpenSource e validati dal CNCF: -- **CNI Cillium**, con interfaccia di osservabilità (**Hubble**): Cillium è una soluzione di networking per i container Kubernetes (*Container Network Interface*). Gestisce la sicurezza, il load balancing, il service mesh, l'osservabilità, la crittografia, ecc... È un componente di rete fondamentale che si ritrova nella maggior parte delle distribuzioni di Kubernetes (OpenShift, AKS, GKE, EKS,...). Abbiamo incluso l'interfaccia grafica **Hubble** per la visualizzazione dei flussi Cillium. +- **CNI Cillium**, con interfaccia di osservabilità (**Hubble**): Cillium è una soluzione di networking per i container Kubernetes (*Container Network Interface*). Gestisce la sicurezza, il load balancing, il service mesh, l'osservabilità, la crittografia, ecc... È un componente di rete fondamentale presente nella maggior parte delle distribuzioni di Kubernetes (OpenShift, AKS, GKE, EKS,...). Abbiamo incluso l'interfaccia grafica **Hubble** per la visualizzazione dei flussi Cillium. -- **MetalLB** e **nginx**: Per l'esposizione delle applicazioni Web, sono integrate di base 3 *ingress-class* **nginx**: - - *nginx-external-secured*: esposizione su un'IP pubblica, filtrata sul firewall per autorizzare solo IP noti (utilisé pour les interfaces graphiques des différents produits, et l'API Kubernetes) - - *nginx-external*: esposizione su una seconda IP pubblica non filtrata (ou filtrage spécifique au client) - - *nginx-internal*: esposizione su un'IP interna esclusivamente +- **MetalLB** e **nginx**: Per l'esposizione delle applicazioni Web, 3 *ingress-class* **nginx** sono integrate di base: + - *nginx-external-secured*: esposizione su un IP pubblico, filtrato sul firewall per autorizzare solo IP noti (utilizzato per le interfacce grafiche dei vari prodotti e per l'API Kubernetes) + - *nginx-external*: esposizione su un secondo IP pubblico non filtrato (o con filtraggio specifico per il cliente) + - *nginx-internal*: esposizione su un IP interno esclusivamente - Per i servizi "non web", un load-balancer **metalLB** consente di esporre servizi internamente o su IP pubblici. (ce qui permet de déployer des autres ingresses, comme par exemple un WAF) + Per i servizi "non web", un load-balancer **metalLB** consente di esporre servizi in interno o su IP pubblici. (ciò permette di distribuire altri ingress, come ad esempio un WAF) -- **Storage distribuito Rook-Ceph**: per lo storage dei volumi persistenti (PV), è integrata nella piattaforma una soluzione di storage distribuito **Ceph** OpenSource. Consente di utilizzare le *storage-classes* *ceph-block*, *ceph-bucket* e *ceph-filesystem*. Viene utilizzato uno storage con **7500 IOPS**, che garantisce elevate prestazioni. Nei deployment di produzione (sur 3 AZ), i nodi di storage sono dedicati (1 noeud par AZ); nei deployment fuori produzione (1 AZ), lo storage è condiviso con i nodi worker. +- **Storage distribuito Rook-Ceph**: per lo storage dei volumi persistenti (PV), uno storage distribuito **Ceph** OpenSource è integrato nella piattaforma. Consente di utilizzare le *storage-classes* *ceph-block*, *ceph-bucket* e *ceph-filesystem*. Viene utilizzato uno storage da **7500 IOPS**, garantendo alte prestazioni. Nei deployment di produzione (su 3 AZ), i nodi di storage sono dedicati (1 nodo per AZ); nei deployment non di produzione (1 AZ), lo storage è condiviso con i worker node. - **Cert-Manager**: il gestore di certificati OpenSource **Cert-Manager** è integrato nativamente nella piattaforma. -- **ArgoCD** è a vostra disposizione per i vostri deployment automatizzati tramite una catena di **CI/CD**. +- **ArgoCD** è a vostra disposizione per i deployment automatizzati tramite una pipeline di **CI/CD**. -- Stack **Prometheus** (Prometheus, Grafana, Loki): i cluster Managed Kubernetes sono forniti in standard con una stack OpenSource completa **Prometheus** per l'osservabilità, includente: +- Stack **Prometheus** (Prometheus, Grafana, Loki): i cluster Managed Kubernetes sono forniti di serie con una stack OpenSource completa **Prometheus** per l'osservabilità, che include: - **Prometheus** - **Grafana**, con numerosi dashboard - - **Loki**: i log della piattaforma sono esportati verso lo storage S3 Cloud-Temple (et intégrés dans Grafana). + - **Loki**: i log della piattaforma vengono esportati nello storage S3 Cloud-Temple (e integrati in Grafana). -- **Harbor** è una **Container registry** che consente di memorizzare le immagini dei vostri container o i vostri chart helm direttamente nel cluster. Esegue **scan di vulnerabilità** sulle vostre immagini e può firmarle digitalmente. **Harbor** consente inoltre sincronizzazioni con altri registries. ([https://goharbor.io/](https://goharbor.io/)) +- **Harbor** è un **Container registry** che vi permette di memorizzare le immagini dei vostri container o i vostri chart Helm direttamente nel cluster. Esegue **scansioni di vulnerabilità** sulle vostre immagini e può firmarle digitalmente. **Harbor** consente anche sincronizzazioni con altri registry. ([https://goharbor.io/](https://goharbor.io/)) -- **OpenCost** ([https://github.com/opencost/opencost](https://github.com/opencost/opencost)) è uno strumento di gestione dei costi (Finops) per Kubernetes. Consente di monitorare finemente il consumo delle risorse Kubernetes e di effettuare una sotto-fatturazione per progetto/namespace. +- **OpenCost** ([https://github.com/opencost/opencost](https://github.com/opencost/opencost)) è uno strumento di gestione dei costi (FinOps) per Kubernetes. Vi permette di monitorare nel dettaglio il consumo delle risorse Kubernetes e di effettuare la rifatturazione per progetto/namespace. - Strategie di sicurezza avanzate con **Kyverno** e **Capsule**: - **Kyverno** ([https://kyverno.io/](https://kyverno.io/)) è un controller di ammissione per Kubernetes che consente di applicare policy. È uno strumento essenziale per la governance e la sicurezza in Kubernetes. - - **Capsule** ([https://projectcapsule.dev/](https://projectcapsule.dev/)) è uno strumento di gestione delle permessi che facilita la gestione dei diritti in Kubernetes. Introduce il concetto di *tenant* che consente di centralizzare e delegare le permessi su più namespace. Tramite **Capsule**, gli utenti della piattaforma Kubernetes Managé dispongono quindi di diritti limitati ai propri namespace. + - **Capsule** ([https://projectcapsule.dev/](https://projectcapsule.dev/)) è uno strumento di gestione delle autorizzazioni che semplifica la gestione dei diritti in Kubernetes. Introduce il concetto di *tenant* che permette di centralizzare e delegare le autorizzazioni su più namespace. Tramite **Capsule**, gli utenti della piattaforma Kubernetes Managé dispongono quindi di diritti limitati ai soli propri namespace. - **Veeam Kasten** (aka 'k10') è una soluzione per il **backup** dei workload Kubernetes. - Consente di eseguire il backup di un deployment completo: manifest, volumi, ecc... verso lo storage oggetto S3 Cloud-Temple. **Kasten** utilizza **Kanister** per consentire backup applicativi coerenti, ad esempio per i database ([https://docs.kasten.io/latest/usage/blueprints/](https://docs.kasten.io/latest/usage/blueprints/)). + Consente di eseguire il backup di un deployment completo: manifest, volumi, ecc... verso lo storage oggetto S3 Cloud-Temple. **Kasten** utilizza **Kanister** per permettere backup applicativi coerenti, ad esempio per i database ([https://docs.kasten.io/latest/usage/blueprints/](https://docs.kasten.io/latest/usage/blueprints/)). - **Kasten** è uno strumento cross-platform che può funzionare con altri cluster Kubernetes (OpenShift, Hyperscaler,...). Può quindi essere utilizzato per scenari di reversibilità o migrazione (K10 gère les adaptations éventuelles via des *transformations*, par exemple un changement d'ingress-class), ma anche per il "refresh" (exemple : restauration planifiée d'un environnement de production en pré-production). + **Kasten** è uno strumento cross-platform che può funzionare con altri cluster Kubernetes (OpenShift, Hyperscaler,...). Può quindi essere utilizzato per scenari di reversibilità o migrazione (K10 gestisce le eventuali adattamenti tramite *transformations*, ad esempio un cambio di ingress-class), ma anche per operazioni di "refresh" (esempio: ripristino pianificato di un ambiente di produzione in pre-produzione). - **Autenticazione SSO** con un Identity Provider Esterno OIDC (Microsoft Entra, FranceConnect, Okta, AWS IAM, Google, Salesforce, ...) ## SLA & Informazioni sul supporto -- **Disponibilità garantita (produzione 3 AZ)** : 99.90 % -- **Supporto** : N1/N2/N3 inclusi per l'ambito di base (infrastruttura e operatori standard). -- **Impegno sui tempi di ripristino (ETR)** : secondo il contratto quadro Cloud Temple. -- **Manutenzione (MCO)** : patching regolare di Talos / Kubernetes / operatori standard da parte del MSP, senza interruzione del servizio (rolling upgrade). +- **Disponibilità garantita (produzione 3 AZ)** : 99.95 % +- **Supporto** : N1/N2/N3 inclusi per il perimetro base (infrastruttura e operatori standard). +- **Impegno sul tempo di ripristino (ETR)** : secondo contratto quadro Cloud Temple. +- **Manutenzione (MCO)** : patching regolare Talos / Kubernetes / operatori standard da parte di MSP, senza interruzione del servizio (rolling upgrade). -I tempi di presa in carico e di ripristino dipendono dalla gravità dell’incidente, conformemente alla griglia di supporto (P1-P4). +I tempi di presa in carico e di ripristino dipendono dalla gravità dell'incidente, conformemente alla griglia di supporto (da P1 a P4). -## Politica delle versioni e ciclo di vita +## Politica delle versioni & ciclo di vita -- **Kubernetes supportato :** N-2 (3 release principali all'anno, circa ogni 4 mesi). Ogni release è supportata ufficialmente per 12 mesi, garantendo una finestra di supporto Cloud Temple di ~16 mesi massimo per versione. -- **Talos OS :** allineato alle versioni stabili di Kubernetes. - - Ogni branch è mantenuta per circa 12 mesi (patch di sicurezza inclusi). - - Frequenza di upgrade consigliata : 3 volte all'anno, in coerenza con gli upgrade di Kubernetes. - - I patch critici (CVE, kernel) vengono applicati in rolling upgrade, senza interruzione del servizio. -- **Operatori standard :** aggiornati entro 90 giorni dal rilascio della versione stabile. -- **Aggiornamenti :** - - **Principali** (Kubernetes N+1, Talos X+1) : pianificate 3 volte/anno, in rolling update. - - **Minori** : applicate automaticamente entro 30-60 giorni. -- **Deprecazione :** versione N-3 → fine del supporto entro 90 giorni dal rilascio di N. +- **Kubernetes supportato:** N-2 (3 release maggiori all'anno, circa ogni 4 mesi). Ogni release è supportata ufficialmente per 12 mesi, garantendo una finestra di supporto Cloud Temple di ~16 mesi massimo per versione. +- **Talos OS:** allineato alle versioni stabili di Kubernetes. + - Ogni branch è mantenuto per circa 12 mesi (inclusi i patch di sicurezza). + - Ritmo di upgrade raccomandato: 3 volte all'anno, in coerenza con gli upgrade di Kubernetes. + - I patch critici (CVE, kernel) vengono applicati tramite rolling upgrade, senza interruzione del servizio. +- **Operator standard:** aggiornati entro 90 giorni dalla release stabile. +- **Aggiornamenti:** + - **Maggiori** (Kubernetes N+1, Talos X+1): pianificati 3 volte/anno, tramite rolling update. + - **Minori:** applicati automaticamente entro 30-60 giorni. +- **Deprecazione:** versione N-3 → fine del supporto entro 90 giorni dall'uscita di N. ## Nodi Kubernetes @@ -111,22 +111,22 @@ I tempi di presa in carico e di ripristino dipendono dalla gravità dell’incid Per un deployment "di produzione" (multi-zonale), vengono utilizzate le seguenti macchine: -| **AZ** | **Macchina** | **vCores** | **RAM** | **Storage locale** | +| **AZ** | **Macchina** | **vCores** | **RAM** | **Archiviazione locale** | |---|---|---|---|---| -| AZ07 | Git Runner | 4 | 8 Go | OS: 64 Go | -| AZ05 | Control Plane 1 | 8 | 12 Go | OS: 64 Go | -| AZ06 | Control Plane 2 | 8 | 12 Go | OS: 64 Go | -| AZ07 | Control Plane 3 | 8 | 12 Go | OS: 64 Go | -| AZ05 | Storage Node 1 | 12 | 24 Go | OS: 64 Go + Ceph 500 Go minimum (*) | -| AZ06 | Storage Node 2 | 12 | 24 Go | OS: 64 Go + Ceph 500 Go minimum (*)| -| AZ07 | Storage Node 3 | 12 | 24 Go | OS: 64 Go + Ceph 500 Go minimum (*)| -| AZ05 | Worker Node 1 (**) | 12 | 24 Go | OS: 64 Go | -| AZ06 | Worker Node 2 (**) | 12 | 24 Go | OS: 64 Go | -| AZ07 | Worker Node 3 (**) | 12 | 24 Go | OS: 64 Go | +| AZ07 | Git Runner | 4 | 8 GB | OS: 256 GB | +| AZ05 | Control Plane 1 | 8 | 12 GB | OS: 128 GB | +| AZ06 | Control Plane 2 | 8 | 12 GB | OS: 128 GB | +| AZ07 | Control Plane 3 | 8 | 12 GB | OS: 128 GB | +| AZ05 | Storage Node 1 | 12 | 24 GB | OS: 128 GB + Ceph 500 GB minimo (*) | +| AZ06 | Storage Node 2 | 12 | 24 GB | OS: 128 GB + Ceph 500 GB minimo (*)| +| AZ07 | Storage Node 3 | 12 | 24 GB | OS: 128 GB + Ceph 500 GB minimo (*)| +| AZ05 | Worker Node 1 (**) | 12 | 24 GB | OS: 128 GB | +| AZ06 | Worker Node 2 (**) | 12 | 24 GB | OS: 128 GB | +| AZ07 | Worker Node 3 (**) | 12 | 24 GB | OS: 128 GB | -(*) : Ogni nodo di storage è fornito con un minimo di 500 Go di spazio disco, per uno spazio utile Ceph distribuito di 500 Go (i dati sono replicati su ogni AZ, quindi x3). Lo spazio libero disponibile per il cliente è di circa 350 Go. Questa dimensione iniziale può essere aumentata al momento della costruzione o in seguito, in base alle esigenze. Vengono applicati dei quota su Ceph, con una ripartizione Block/File. +(*) : Ogni nodo di storage viene fornito con un minimo di 500 GB di spazio su disco, per uno storage Ceph distribuito utile di 500 GB (i dati vengono replicati su ogni AZ, quindi x3). Lo spazio libero disponibile per il cliente è di circa 350 GB. Questa dimensione iniziale può essere aumentata al momento della configurazione, o in seguito, in base alle esigenze. Vengono applicati delle quote su Ceph, con una ripartizione Block/File. -(**) : La dimensione e il numero dei Worker Nodes possono essere adattati in base alle esigenze di capacità di calcolo del cliente. Il numero minimo di Worker Nodes è di 3 (1 per AZ), e consigliamo di aumentarne il numero a gruppi di 3 per mantenere una distribuzione multi-zonale coerente. La dimensione dei Worker Nodes può essere adattata, con un minimo di 12 core e 24 Go di RAM; il limite superiore per ogni Worker Node è determinato dalla dimensione degli hypervisor utilizzati (quindi potenzialmente 112 core/1536 Go di RAM con le lame Performance 3). Il numero di Worker Nodes è limitato a 100. Il CNCF consiglia di avere worker nodes di dimensioni identiche. Il limite del numero di pod per Worker Node è di 110. +(**) : La dimensione e il numero dei Worker Node possono essere adattati in base alle esigenze di capacità di calcolo del cliente. Il numero minimo di Worker Node è di 3 (1 per AZ) e consigliamo di aumentarne il numero a gruppi di 3 per mantenere una distribuzione multi-zonale coerente. La dimensione dei Worker Node può essere adattata, con un minimo di 12 core e 24 GB di RAM; il limite superiore per Worker Node è determinato dalla dimensione degli hypervisor utilizzati (quindi potenzialmente 112 core/1536 GB di RAM con blade Performance 3). La quantità di Worker Node è limitata a 100. Il CNCF consiglia di utilizzare worker node di dimensioni identiche. Il limite del numero di pod per Worker Node è di 110. ### Dev/Test @@ -134,17 +134,17 @@ Per un deployment "di produzione" (multi-zonale), vengono utilizzate le seguenti Per una versione "dev/test", vengono distribuite le seguenti macchine: -| **AZ** | **Macchina** | **vCores** | **RAM** | **Archiviazione locale** | +| **AZ** | **Macchina** | **vCores** | **RAM** | **Storage locale** | |---|---|---|---|---| | AZ0n | Git Runner | 4 | 8 Go | OS: 30 Go | -| AZ0n | Control Plane | 8 | 12 Go | OS: 64 Go | -| AZ0n | Worker Node 1 (**) | 12 | 24 Go | OS: 64 Go + Ceph 300 Go minimo (*) | -| AZ0n | Worker Node 2 (**) | 12 | 24 Go | OS: 64 Go + Ceph 300 Go minimo (*) | -| AZ0n | Worker Node 3 (**) | 12 | 24 Go | OS: 64 Go + Ceph 300 Go minimo (*) | +| AZ0n | Control Plane | 8 | 12 Go | OS: 128 Go | +| AZ0n | Worker Node 1 (**) | 12 | 24 Go | OS: 128 Go + Ceph 300 Go minimo (*) | +| AZ0n | Worker Node 2 (**) | 12 | 24 Go | OS: 128 Go + Ceph 300 Go minimo (*) | +| AZ0n | Worker Node 3 (**) | 12 | 24 Go | OS: 128 Go + Ceph 300 Go minimo (*) | -(*) : 3 Worker node vengono utilizzati come Storage node e sono forniti con un minimo di 300 Go di spazio su disco, per un'archiviazione utile distribuita di 300 Go (i dati sono replicati tre volte). Lo spazio libero disponibile per il cliente è di circa 150 Go. Questa dimensione iniziale può essere aumentata al momento della configurazione o in seguito, in base alle esigenze. +(*) : 3 Worker nodes sono utilizzati come Storage nodes e vengono forniti con un minimo di 300 Go di spazio su disco, per un'archiviazione distribuita effettiva di 300 Go (i dati vengono replicati tre volte). Lo spazio libero disponibile per il cliente è di circa 150 Go. Questa dimensione iniziale può essere aumentata al momento del provisioning, o in seguito, in base alle esigenze. -(**) : La dimensione e il numero dei Worker Node possono essere adattati in base alle esigenze di capacità di calcolo del cliente. Il numero minimo di Worker node è 3 (a causa della replicazione dell'archiviazione). La dimensione dei Worker Node può essere adattata, con un minimo di 12 core e 24 Go di RAM; il limite superiore per Worker node è determinato dalla dimensione degli hypervisor utilizzati (quindi potenzialmente 112 core/1536 Go di RAM con le lame Performance 3). La quantità di Worker Node è limitata a 250. Il CNCF consiglia di utilizzare worker node di dimensioni identiche. Il limite del numero di pod per Worker Node è 110. +(**) : Le dimensioni e il numero dei Worker Nodes possono essere adattati in base alle esigenze di capacità di calcolo del cliente. Il numero minimo di Worker nodes è 3 (a causa della replicazione dello storage). Le dimensioni dei Worker Node possono essere adattate, con un minimo di 12 core e 24 Go di RAM; il limite superiore per Worker node è determinato dalle dimensioni degli hypervisor utilizzati (quindi potenzialmente 112 core/1536 Go di RAM con blade Performance 3). La quantità di Worker Nodes è limitata a 250. Il CNCF consiglia di utilizzare worker nodes di dimensioni identiche. Il limite del numero di pod per Worker Node è di 110. ## RACI @@ -157,32 +157,32 @@ Per una versione "dev/test", vengono distribuite le seguenti macchine: | Installare il servizio Kubernetes con una configurazione predefinita | I | RA | | Configurazione del servizio Kubernetes | C | RA | | Configurare la rete di base del servizio Kubernetes | I | RA | -| Distribuzione della configurazione iniziale di identità e accessi | C | RA | -| Definire la strategia di scalabilità e alta disponibilità | C | RA | +| Distribuzione della configurazione iniziale delle identità e degli accessi | C | RA | +| Definire la strategia di scaling e di alta disponibilità | C | RA | -### Gestione dei progetti e delle applicazioni di business +### Gestione dei progetti e delle applicazioni aziendali | **Attività** | **Cliente** | **Cloud Temple** | |---|---|---| | Creare e gestire i progetti Kubernetes | RA | I* | -| Distribuire e gestire le applicazioni su Kubernetes | RA | I* | +| Distribuire e gestire le applicazioni in Kubernetes | RA | I* | | Configurare le pipeline CI/CD | RA | I* | | Gestire le immagini dei container e i registri | RA | I* | -*può passare a "C" in base al contratto di gestione +*può passare a "C" in base al contratto di outsourcing IT ### Monitoraggio e prestazioni | **Attività** | **Cliente** | **Cloud Temple** | |---|---|---| -| Monitorare le prestazioni del servizio Kubernetes | I | RA* | -| Monitorare le prestazioni delle applicazioni | RA | | -| Gestire gli alert relativi al servizio Kubernetes | I | RA* | -| Gestire gli alert relativi alle applicazioni | RA | | +| Monitorare le prestazioni del servizio Kubernetes | I | RA* | +| Monitorare le prestazioni delle applicazioni | RA | | +| Gestire le alert relative al servizio Kubernetes | I | RA* | +| Gestire le alert relative alle applicazioni | RA | | -(*) : *Solo cluster di produzione. In Dev/Test il cliente è completamente autonomo e responsabile.* +(*) : *Solo per il Cluster di Produzione. In Dev/Test il cliente è completamente autonomo e responsabile.* -### Manutenzione e aggiornamenti delle infrastrutture +### Manutenzione e aggiornamenti Infrastrutture | **Attività** | **Cliente** | **Cloud Temple** | |---|---|---| @@ -194,31 +194,31 @@ Per una versione "dev/test", vengono distribuite le seguenti macchine: ### Sicurezza -| **Attività** | **Client** | **Cloud Temple** | +| **Attività** | **Cliente** | **Cloud Temple** | |---|---|---| | Gestire la sicurezza del servizio Kubernetes | RA | RA* | | Configurare e gestire le politiche di sicurezza dei pod | RA | I | | Gestire i certificati SSL/TLS per il servizio Kubernetes | C | RA* | | Gestire i certificati SSL/TLS per le applicazioni | RA | I | | Implementare e gestire il controllo degli accessi basato sui ruoli di base (RBAC)| C | R* | -| Implementare e gestire il controllo degli accessi basato sui ruoli client (RBAC) | RA | I | +| Implementare e gestire il controllo degli accessi basato sui ruoli del cliente (RBAC) | RA | I | -(*) : *Solo cluster di produzione. In Dev/Test il cliente è completamente autonomo e responsabile.* +(*) : *Solo per il Cluster di Produzione. In Dev/Test il cliente è completamente autonomo e responsabile.* -### Backup e ripristino di emergenza +### Backup e disaster recovery | **Attività** | **Cliente** | **Cloud Temple** | |---|---|---| -| Definire la strategia di backup per il servizio Kubernetes | I | RA | -| Implementare e gestire i backup del servizio Kubernetes | I | RA | -| Definire la strategia di backup per le applicazioni | RA* | I* | -| Implementare e gestire i backup delle applicazioni | RA* | I* | -| Testare le procedure di ripristino di emergenza per il servizio Kubernetes | CI | RA | -| Testare le procedure di ripristino di emergenza per le applicazioni | RA* | CI* | +| Definire la strategia di backup per il servizio Kubernetes | I | RA | +| Implementare e gestire i backup del servizio Kubernetes | I | RA | +| Definire la strategia di backup per le applicazioni | RA* | I* | +| Implementare e gestire i backup delle applicazioni | RA* | I* | +| Testare le procedure di disaster recovery per il servizio Kubernetes | CI | RA | +| Testare le procedure di disaster recovery per le applicazioni | RA* | CI* | -*può passare a "CI | RA" in base al contratto di gestione +*può passare a "CI | RA" in base al contratto di managed service -### Supporto e risoluzione dei problemi +### Support e risoluzione dei problemi | **Attività** | **Cliente** | **Cloud Temple** | |---|---|---| @@ -227,82 +227,82 @@ Per una versione "dev/test", vengono distribuite le seguenti macchine: | Risolvere i problemi relativi al servizio Kubernetes | C | RA | | Risolvere i problemi relativi alle applicazioni | RA | I | -### Gestione delle capacità e dell'evoluzione +### Gestione delle capacità e evoluzione -*Solo per il cluster di produzione. In Dev/Test il cliente è completamente autonomo e responsabile.* +*Solo per il Cluster di Produzione. In Dev/Test il cliente è completamente autonomo e responsabile.* | **Attività** | **Cliente** | **Cloud Temple** | |---|---|---| | Monitorare l'utilizzo delle risorse Kubernetes | C | RA | -| Pianificare l'evoluzione delle capacità del servizio | RA | C | -| Implementare le modifiche alle capacità | I | RA | -| Gestire l'evoluzione delle applicazioni e delle relative risorse | RA | I | +| Pianificare l’evoluzione delle capacità del servizio | RA | C | +| Implementare le modifiche di capacità | I | RA | +| Gestire l’evoluzione delle applicazioni e delle relative risorse | RA | I | ### Documentazione e conformità | **Attività** | **Cliente** | **Cloud Temple** | |---|---|---| -| Mantenere la documentazione del prodotto Kubernetes | I | RA | -| Mantenere la documentazione delle applicazioni | RA | I | -| Garantire la conformità del servizio Kubernetes | I | RA | -| Garantire la conformità delle applicazioni | RA | I | -| Effettuare audit del servizio Kubernetes | I | RA | -| Effettuare audit delle applicazioni | RA | I | +| Mantenere la documentazione del prodotto Kubernetes | I | RA | +| Mantenere la documentazione delle applicazioni | RA | I | +| Garantire la conformità del servizio Kubernetes | I | RA | +| Garantire la conformità delle applicazioni | RA | I | +| Eseguire audit del servizio Kubernetes | I | RA | +| Eseguire audit delle applicazioni | RA | I | -### Gestione degli operatori/CRD Kubernetes (inclusi nel prodotto) +### Gestione degli operatori/CRD Kubernetes (incluso nel prodotto) | **Attività** | **Cliente** | **Cloud Temple** | |---|---|---| -| Fornitura del catalogo predefinito degli operatori | CI | RA | -| Aggiornamento degli operatori | CI | RA | -| Monitoraggio dello stato degli operatori | CI | RA | -| Risoluzione dei problemi relativi agli operatori | CI | RA | -| Gestione delle autorizzazioni degli operatori | CI | RA | -| Gestione delle risorse degli operatori (aggiunta/rimozione) | CI | RA | -| Backup dei dati delle risorse degli operatori | CI | RA | -| Supervisione delle risorse degli operatori | CI | RA | -| Ripristino dei dati delle risorse degli operatori | CI | RA | -| Audit di sicurezza degli operatori | CI | RA | -| Supporto degli operatori | CI | RA | -| Gestione delle licenze per gli operatori | CI | RA | -| Gestione dei piani di supporto specifici per gli operatori | CI | RA | +| Messa a disposizione del catalogo Operatori predefinito | CI | RA | +| Aggiornamento degli Operatori | CI | RA | +| Monitoraggio dello stato degli Operatori | CI | RA | +| Risoluzione dei problemi relativi agli Operatori | CI | RA | +| Gestione delle autorizzazioni degli Operatori | CI | RA | +| Gestione delle risorse degli Operatori (aggiunta/rimozione) | CI | RA | +| Backup dei dati delle risorse degli Operatori | CI | RA | +| Supervisione delle risorse Operatori | CI | RA | +| Ripristino dei dati delle risorse degli Operatori | CI | RA | +| Audit di sicurezza degli Operatori | CI | RA | +| Supporto per gli Operatori | CI | RA | +| Gestione delle licenze per gli operatori | CI | RA | +| Gestione dei piani di supporto specifici per gli operatori | CI | RA | *Pacchetto operatore incluso su Managed Kube - vedere capitoli: Pacchetti Helm gestiti ### Gestione delle applicazioni/operatori/CRD Kubernetes (del cliente) -*Solo cluster di produzione. In ambiente Dev/Test il cliente è completamente autonomo e responsabile.* +*Solo cluster di Produzione. In Dev/Test il cliente è completamente autonomo e responsabile.* | **Attività** | **Cliente** | **Cloud Temple** | |---|---|---| -| Distribuzione delle CRDs | I* | RA* | -| Aggiornamento degli Operatori | RA | I | -| Monitoraggio dello stato degli Operatori | RA | I | -| Risoluzione dei problemi legati agli Operatori | RA | I | -| Gestione delle autorizzazioni degli Operatori | RA | I | -| Gestione delle risorse degli Operatori (aggiunta/rimozione) | RA | I | -| Backup dei dati delle risorse degli Operatori | RA | I | -| Supervisione delle risorse degli Operatori | RA | I | -| Ripristino dei dati delle risorse degli Operatori | RA | I | -| Audit di sicurezza degli Operatori | RA | I | -| Supporto degli Operatori | RA | I | -| Gestione delle licenze per gli operatori | RA | I | +| Distribuzione dei CRD | I* | RA* | +| Aggiornamento degli Operatori | RA | I | +| Monitoraggio dello stato degli Operatori | RA | I | +| Risoluzione dei problemi relativi agli Operatori | RA | I | +| Gestione delle autorizzazioni degli Operatori | RA | I | +| Gestione delle risorse degli Operatori (aggiunta/rimozione) | RA | I | +| Backup dei dati delle risorse degli Operatori | RA | I | +| Supervisione delle risorse Operatori | RA | I | +| Ripristino dei dati delle risorse degli Operatori | RA | I | +| Audit di sicurezza degli Operatori | RA | I | +| Supporto degli Operatori | RA | I | +| Gestione delle licenze per gli operatori | RA | I | | Gestione dei piani di supporto specifici per gli operatori | RA | I | -Alcuni servizi relativi agli operatori possono essere assunti in base al contratto di gestione. +Alcuni servizi degli operatori possono essere gestiti in base al contratto di managed service. -*può passare a "A | RC" in base al contratto di gestione +*può passare a "A | RC" in base al contratto di managed service ### Assistenza applicativa | **Attività** | **Cliente** | **Cloud Temple** | |---|---|---| -| Assistenza applicativa (prestazione esterna) | RA | I | +| Assistenza applicativa (servizio esterno) | RA | I | -Un supporto applicativo può essere fornito tramite una prestazione aggiuntiva. +Un supporto applicativo può essere fornito tramite un servizio complementare. -### RACI (sintetica) +### RACI (sintetico) -- Cloud Temple : responsabile ed esecutore (RA) dell'infrastruttura Kubernetes, sicurezza del cluster, backup infrastrutturale, monitoraggio, CRD. -- Cliente : responsabile ed esecutore (RA) dei progetti applicativi, operatori di business, pipeline CI/CD, backup applicativi. -- Zona "grigia" : adattamenti ed estensioni (IAM, operatori specifici, hardening della conformità/sicurezza del cluster) - fatturate a progetto. \ No newline at end of file +- Cloud Temple : responsabile e attore (RA) della piattaforma Kubernetes, sicurezza del cluster, backup infrastrutturale, monitoraggio, CRD. +- Cliente : responsabile e attore (RA) dei progetti applicativi, operatori di business, pipeline CI/CD, backup applicativi. +- Zona "grigia" : adattamenti ed estensioni (IAM, operatori specifici, rafforzamento della conformità/sicurezza del cluster) - fatturate a progetto. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_core_kubernetes.md b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_core_kubernetes.md index e7e7c636..add8b13b 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_core_kubernetes.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_core_kubernetes.md @@ -4,12 +4,12 @@ title: Panoramica import archiOverview1az from '@site/docs/managed_kubernetes/images/archi_overview_1az.png' import archiOverview from '@site/docs/managed_kubernetes/images/archi_overview.png' -# Kubernetes Core Gestito +# Managed Core Kubernetes

      Concetti

      -

      Scopri i fondamenti e i principi essenziali per padroneggiare la nostra infrastruttura.

      +

      Scoprite le basi e i principi essenziali per padroneggiare la nostra infrastruttura.

      Esplora i concetti →
      @@ -24,55 +24,57 @@ import archiOverview from '@site/docs/managed_kubernetes/images/archi_overview.p
      -Managed **Core** Kubernetes di Cloud Temple è una soluzione di orchestrazione di container basata su una selezione di prodotti Open Source, progettata per offrire una piattaforma di base sicura, resiliente e automatizzata sulle piattaforme SecNumCloud di Cloud Temple. Ogni cluster viene distribuito in un ambiente IaaS Cloud-Temple interamente dedicato al cliente. +Managed **Core** Kubernetes by Cloud Temple è una soluzione di orchestrazione dei container basata su una selezione di prodotti Open Source, progettata per offrire una base sicura, resiliente e automatizzata sulle piattaforme SecNumCloud di Cloud Temple. Ogni cluster viene distribuito in un ambiente IaaS Cloud-Temple interamente dedicato al cliente. -Questo prodotto è progettato per team che padroneggiano eccellentemente Kubernetes e gli strumenti Cloud Native, che desiderano costruire la propria piattaforma su fondamenta minimaliste e robuste. Si rivolge agli appassionati di open source che cercano una soluzione pulita, portabile, senza layer costruttore, su un OS minimalista e immutabile progettato per l'automazione e la sicurezza. +Questo prodotto è progettato per i team che hanno un'ottima padronanza di Kubernetes e degli strumenti Cloud Native, e che desiderano costruire la propria piattaforma su fondamenta minimaliste e robuste. Si rivolge ai sostenitori dell'open source che cercano una soluzione essenziale, portabile, senza layer proprietari, su un OS minimalista e immutabile progettato per l'automazione e la sicurezza. ### Benefici Chiave - **Sovranità e Reversibilità** : La soluzione si basa esclusivamente su standard open source (Kubernetes CNCF) per evitare qualsiasi dipendenza tecnologica e garantire la portabilità delle vostre applicazioni. - **Sicurezza "Zero-Trust" by design** : L'architettura si basa su Talos OS, un sistema operativo immutabile senza accesso diretto (né shell, né SSH), il che riduce drasticamente la superficie di attacco e costituisce una base solida per una strategia di sicurezza "Zero-Trust". -- **Fondamenta di rete moderne** : L'integrazione di Cilium per il CNI e MetalLB per l'esposizione dei servizi fornisce una base di rete performante e standard, pronta ad accogliere i vostri componenti di sicurezza e filtraggio. +- **Fondazioni di rete moderne** : L'integrazione di Cilium per il CNI e MetalLB per l'esposizione dei servizi fornisce una base di rete performante e standard, pronta ad accogliere i vostri componenti di sicurezza e filtraggio. ### Una piattaforma di base pronta per essere estesa -L'offerta "Managed Core" include nativamente uno stack minimo e coerente di strumenti open source all'avanguardia per fornirti le fondamenta di un cluster Kubernetes : +L'offerta "Managed Core" include nativamente uno stack minimo e coerente di strumenti open source all'avanguardia per fornire le basi di un cluster Kubernetes : - **OS e Rete** : Talos, Cilium, MetalLB -A partire da questa base, sei libero di integrare i tuoi strumenti per il deployment continuo, l'osservabilità, il backup e la gestione dei costi. +Partendo da questa base, siete liberi di integrare i vostri strumenti per la distribuzione continua, l'osservabilità, il backup e la gestione dei costi. --- -## Architetture di Deploy +## Architetture di Deployment -Proponiamo due architetture distinte per soddisfare le vostre esigenze, sia per ambienti di sviluppo che di produzione critici. +Proponiamo due architetture distinte per soddisfare le vostre esigenze, sia per ambienti di sviluppo che per ambienti di produzione critici. ### Architettura "Dev/Test" -Ideale per gli ambienti POC, questa architettura compatta distribuisce tutte le risorse all'interno di una singola zona di disponibilità (AZ). +Ideale per gli ambienti di POC, questa architettura compatta distribuisce tutte le risorse all'interno di una singola zona di disponibilità (AZ). -- **Caso d'uso** : Sviluppo, test, proof-of-concept (POC). +- **Casi d'uso** : Sviluppo, test, proof-of-concept (POC). - **Punti chiave** : - 1 nodo Control Plane. - 3 nodi Workers (o più). - - Non beneficia di SLA di alta disponibilità. + - Non beneficia di un SLA di alta disponibilità. - nessuna restrizione di sicurezza Architecture Mono-AZ ### Architettura di Produzione (Multi-AZ) -Progettata per la produzione e le applicazioni critiche, questa architettura distribuisce le risorse su tre zone di disponibilità (AZ) per garantire un'alta disponibilità e una resilienza massima, in conformità con i requisiti SecNumCloud. +Progettata per la produzione e le applicazioni critiche, questa architettura distribuisce le risorse su tre zone di disponibilità (AZ) per garantire alta disponibilità e massima resilienza, in conformità ai requisiti SecNumCloud. -- **Caso d'uso** : Applicazioni di produzione, servizi critici, piattaforme che richiedono un SLA. +- **Casi d'uso** : Applicazioni di produzione, servizi critici, piattaforme che richiedono un SLA. - **Punti chiave** : - **Alta Disponibilità** : 3 nodi Control Plane distribuiti su 3 AZ. + - **Archiviazione Dedicata** : 3 nodi di archiviazione dedicati e distribuiti per garantire prestazioni e resilienza. - **Worker Distribuiti** : Almeno 3 nodi worker, uno per AZ. - - **Nodi Bare Metal (Optionnel)** : Possibilità di integrare nodi worker di tipo **"Bare Metal"** per esigenze di prestazioni specifiche, in particolare il **supporto GPU**. - - **SLA del 99.90%**, misurato mensilmente. + - **Nodi Bare Metal (Opzionale)** : Possibile integrazione di nodi worker di tipo **"Bare Metal"** per esigenze di prestazioni specifiche, in particolare il **supporto delle GPU**. + - **SLA del 99,95%**, misurato mensilmente. -Architecture Multi-AZ + +Architettura Multi-AZ --- @@ -83,4 +85,4 @@ L'offerta "Managed Core" include i seguenti componenti: - **Sistema operativo** : Talos OS - **Archiviazione** : Rook-Ceph - **CNI (Container Network Interface)** : Cilium -- **Bilanciamento del carico** : MetalLB \ No newline at end of file +- **Load Balancer** : MetalLB \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md index aea0b48b..80618164 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/managed_kubernetes.md @@ -2,12 +2,12 @@ title: Panoramica --- -# Kubernetes gestito +# Managed Kubernetes

      Concetti

      -

      Scopri le basi e i principi essenziali per padroneggiare la nostra infrastruttura.

      +

      Scoprite le basi e i principi essenziali per padroneggiare la nostra infrastruttura.

      Esplora i concetti →
      @@ -22,19 +22,19 @@ title: Panoramica
      -Kubernetes gestito da Cloud Temple è una soluzione di orchestrazione di container basata su prodotti open source e progettata per offrire un elevato livello di sicurezza, resilienza e automazione sulle piattaforme SecNumcloud di Cloud Temple. Ogni cluster viene distribuito in un ambiente IaaS Cloud-Temple interamente dedicato al cliente. +Managed Kubernetes by Cloud Temple è una soluzione di orchestrazione dei container basata su prodotti Open Source e progettata per offrire un alto livello di sicurezza, resilienza e automazione sulle piattaforme SecNumcloud di Cloud Temple. Ogni cluster viene distribuito in un ambiente IaaS Cloud-Temple interamente dedicato al cliente. -Questo prodotto è progettato per team con una buona conoscenza di Kubernetes e per gli appassionati di open source che cercano una soluzione nativa, portabile, senza layer proprietario, su un OS minimalista e immutabile progettato per automazione e sicurezza. +Questo prodotto è progettato per team con una solida conoscenza di Kubernetes e per gli appassionati di open source che cercano una soluzione nativa, portabile, senza strato proprietario del fornitore, su un OS minimalista e immutabile progettato per l'automazione e la sicurezza. ### Benefici Chiave -- **Sovranità e Reversibilità** : La soluzione si basa su standard open source (Kubernetes CNCF) per evitare qualsiasi dipendenza tecnologica e garantire la portabilità delle vostre applicazioni. Lo strumento di backup Veeam Kasten, incluso nel prodotto, è appositamente progettato per facilitare le migrazioni da un cloud all'altro. -- **Sicurezza "Zero-Trust" e Governance** : L'architettura si basa su Talos OS, un sistema operativo immutabile senza accesso diretto (né shell, né SSH), il che riduce drasticamente la superficie di attacco. Questo approccio è affiancato da strumenti di governance come Kyverno per la gestione delle policy e Capsule per la gestione fine dei permessi, costituendo una base solida per una strategia di sicurezza "Zero-Trust". +- **Sovranità e Reversibilità** : La soluzione si basa su standard open source (Kubernetes CNCF) per evitare qualsiasi dipendenza tecnologica e garantire la portabilità delle vostre applicazioni. Lo strumento di backup Veeam Kasten, incluso nel prodotto, è specificamente progettato per facilitare le migrazioni da un cloud all'altro. +- **Sicurezza "Zero-Trust" e Governance** : L'architettura si basa su Talos OS, un sistema operativo immutabile senza accesso diretto (ni shell, ni SSH), il che riduce drasticamente la superficie di attacco. Questo approccio è abbinato a strumenti di governance come Kyverno per la gestione delle policy e Capsule per la gestione granulare dei permessi, costituendo una base solida per una strategia di sicurezza "Zero-Trust". - **Controllo dei Costi e Integrazione** : La soluzione integra nativamente strumenti di FinOps come OpenCost per un monitoraggio preciso dei consumi. Il modello economico è trasparente, basato sulle risorse IaaS consumate, e l'utilizzo di componenti open source riconosciuti (Cilium, Ceph, ArgoCD) facilita l'integrazione nei vostri ecosistemi esistenti. ### Una piattaforma completa e pronta all'uso -La soluzione include nativamente uno stack completo e coerente di strumenti open source all'avanguardia per coprire tutte le esigenze del ciclo di vita delle applicazioni: +La soluzione include nativamente uno stack completo e coerente di strumenti open source all'avanguardia per coprire tutte le esigenze del ciclo di vita applicativo : - **Rete e Sicurezza** : Cilium, Hubble, MetalLB, Ingress Nginx, Kyverno, Capsule - **Archiviazione** : Rook-Ceph @@ -45,35 +45,35 @@ La soluzione include nativamente uno stack completo e coerente di strumenti open --- -## Architetture di Deploy +## Architetture di Deployment -Proponiamo due architetture distinte per soddisfare le vostre esigenze, sia per ambienti di sviluppo che di produzione critici. +Proponiamo due architetture distinte per soddisfare le vostre esigenze, sia per ambienti di sviluppo che per ambienti di produzione critici. ### Architettura "Dev/Test" -Ideale per gli ambienti POC, questa architettura compatta distribuisce tutte le risorse all'interno di una singola zona di disponibilità (AZ). +Ideale per gli ambienti di POC, questa architettura compatta distribuisce tutte le risorse all'interno di una singola zona di disponibilità (AZ). -- **Caso d'uso** : Sviluppo, test, proof-of-concept (POC). +- **Casi d'uso** : Sviluppo, test, proof-of-concept (POC). - **Punti chiave** : - 1 nodo Control Plane. - - 3 nodi Workers (ou plus). + - 3 nodi Workers (o più). - Lo storage distribuito (Ceph) è co-localizzato sui nodi workers. - Non beneficia di un SLA di alta disponibilità. - - Nessuna restrizione di sicurezza + - nessuna restrizione di sicurezza Architecture Mono-AZ ### Architettura di Produzione (Multi-AZ) -Progettata per la produzione e le applicazioni critiche, questa architettura distribuisce le risorse su tre zone di disponibilità (AZ) per garantire un'alta disponibilità e una resilienza massima, in conformità ai requisiti SecNumCloud. +Progettata per la produzione e le applicazioni critiche, questa architettura distribuisce le risorse su tre zone di disponibilità (AZ) per garantire alta disponibilità e massima resilienza, in conformità ai requisiti SecNumCloud. -- **Caso d'uso** : Applicazioni di produzione, servizi critici, piattaforme che richiedono un SLA. +- **Casi d'uso** : Applicazioni di produzione, servizi critici, piattaforme che richiedono un SLA. - **Punti chiave** : - **Alta Disponibilità** : 3 nodi Control Plane distribuiti su 3 AZ. - - **Archiviazione Dedicata** : 3 nodi di archiviazione dedicati e distribuiti per prestazioni e resilienza. - - **Nodi Worker Distribuiti** : Almeno 3 nodi worker, uno per AZ. - - **Nodi Bare Metal (Opzionale)** : Possibilità di integrare nodi worker di tipo **"Bare Metal"** per esigenze di prestazioni specifiche, in particolare il **supporto delle GPU**. - - **SLA del 99,90%**. + - **Storage Dedicato** : 3 nodi di storage dedicati e distribuiti per prestazioni e resilienza. + - **Worker Distribuiti** : Almeno 3 nodi worker, uno per AZ. + - **Nodi Bare Metal (Opzionale)** : Possibile integrazione di nodi worker di tipo **"Bare Metal"** per esigenze prestazionali specifiche, in particolare il **supporto delle GPU**. + - **SLA del 99.95%**. Architecture Multi-AZ @@ -85,12 +85,12 @@ L'offerta include in dettaglio i seguenti componenti: - CNI Cilium, con interfaccia di osservabilità (Hubble) - Ingress interni ed esterni MetalLB e nginx -- Storage distribuito Rook-Ceph +- Archiviazione distribuita Rook-Ceph - Cert-Manager - ArgoCD - Stack Prometheus (Prometheus, Grafana, Loki) -- Registro container Harbor +- Container registry Harbor - Gestione dei costi con OpenCost - Strategie di sicurezza avanzate con Kyverno e Capsule -- Veeam Kasten (backup, automazioni tra ambienti e reversibilità) -- Autenticazione SSO con un Identity Provider esterno OIDC (Microsoft Entra, FranceConnect, Okta, AWS IAM, Google, Salesforce, ...) \ No newline at end of file +- Veeam Kasten (sauvegarde, automatisations inter-environnements et réversibilité) +- Autenticazione SSO con un Identity Provider Esterno OIDC (Microsoft Entra, FranceConnect, Okta, AWS IAM, Google, Salesforce, ...) \ No newline at end of file diff --git a/memory-bank/core/activeDocumentation.md b/memory-bank/core/activeDocumentation.md index e61e8755..ff7fdace 100644 --- a/memory-bank/core/activeDocumentation.md +++ b/memory-bank/core/activeDocumentation.md @@ -217,10 +217,10 @@ 1. **Extensions tutoriels existants** : Cas d'usage sectoriels 2. **Amélioration continue traductions** : Qualité des traductions automatiques -## 🐍 Système de Traduction Python - ✅ CORRIGÉ (14/05/2026) +## 🐍 Système de Traduction Python - ✅ OPÉRATIONNEL (26/05/2026) **Localisation** : `scripts/translate_py/` -**Status** : Production Ready — bug chunking corrigé +**Status** : Production Ready — configuration CLI, dry-run sans token, build multilingue validé ### ✅ Correction majeure : chunking code-block-aware @@ -232,6 +232,15 @@ - ✅ **`_split_large_block()` corrigé** : Ne coupe jamais au milieu d'un bloc de code - ✅ **Test validé** : Blocs de code Python/Bash correctement préservés +### ✅ Configuration API sans `.env` + +- ✅ **Options CLI ajoutées** : `--token`, `--url`, `--model` +- ✅ **Priorité explicite** : les options CLI surchargent les variables d'environnement +- ✅ **Modèle par défaut** : `qwen3.6:27b` +- ✅ **Endpoint par défaut** : `https://api.ai.cloud-temple.com/v1/chat/completions` +- ✅ **Dry-run robuste** : `--dry-run` et `--init` sans `--translate-missing` restent utilisables sans token API +- ✅ **Validation build** : `npm run build` passe pour `fr`, `en`, `es`, `it`, `de` après installation des dépendances + --- -*État de la documentation au 14/05/2026 - Memory Bank Cloud Temple* +*État de la documentation au 26/05/2026 - Memory Bank Cloud Temple* diff --git a/memory-bank/core/translationGuidelines.md b/memory-bank/core/translationGuidelines.md index b21365ff..51bae58e 100644 --- a/memory-bank/core/translationGuidelines.md +++ b/memory-bank/core/translationGuidelines.md @@ -162,35 +162,37 @@ Ces termes restent en français ou anglais technique dans toutes les langues : - **Réglementations** : Mentionner équivalents locaux (GDPR, etc.) - **Support** : Références aux équipes régionales -## Intégration avec `/scripts/translate.js` +## Intégration avec `scripts/translate_py/translate.py` ### Configuration Automatique -Le script de traduction doit respecter : - -```javascript -// Termes à ne JAMAIS traduire -const INVARIANT_TERMS = [ - 'Cloud Temple', 'Console', 'SecNumCloud', 'ANSSI', - 'API', 'endpoint', 'cluster', 'namespace', 'container', - 'IaaS', 'PaaS', 'SaaS', 'DevOps', 'CI/CD' -]; - -// Termes techniques cloud (garder en anglais) -const TECHNICAL_TERMS = [ - 'pod', 'node', 'subnet', 'VLAN', 'VPN', 'SSH', 'SSL', 'TLS' -]; -``` +Le script Python de traduction doit respecter : + +- Les termes invariants : Cloud Temple, Console, SecNumCloud, ANSSI, API, endpoint, cluster, namespace, container, IaaS, PaaS, SaaS, DevOps, CI/CD. +- Les termes techniques cloud à conserver en anglais : pod, node, subnet, VLAN, VPN, SSH, SSL, TLS. +- La structure Markdown et MDX : front matter, admonitions, tableaux, liens, blocs de code et imports. +- Les fichiers sous `i18n/` ne doivent jamais être modifiés manuellement : ils sont générés par le script. +- Les répertoires contenant `.notranslation` sont copiés sans traduction et validés par hash. + +### Configuration API + +Le script accepte la configuration par options CLI, prioritaires sur l'environnement : + +- `--token` : token Bearer Cloud Temple LLMaaS, prioritaire sur `CLOUDTEMPLE_API_KEY`. +- `--url` : endpoint API, prioritaire sur `CLOUDTEMPLE_API_URL`, défaut `https://api.ai.cloud-temple.com/v1/chat/completions`. +- `--model` : modèle de traduction, prioritaire sur `TRANSLATION_MODEL`, défaut `qwen3.6:27b`. + +Le token n'est pas requis pour les commandes qui n'appellent pas l'API, notamment `--dry-run` et `--init` sans `--translate-missing`. ### Workflow Automatisé ```bash -# 1. Traduire nouveau contenu français -yarn translate:new +# 1. Vérifier ce qui serait traduit +python scripts/translate_py/translate.py --dry-run -# 2. Valider terminologie -yarn translate:validate +# 2. Traduire les fichiers modifiés +python scripts/translate_py/translate.py --token "$CLOUDTEMPLE_API_KEY" -# 3. Générer glossaire -yarn translate:glossary +# 3. Valider le build multilingue +npm run build ``` ## Processus de Validation @@ -339,5 +341,5 @@ yarn i18n:coverage-report --- -*Guidelines de traduction Cloud Temple - 05/06/2025* +*Guidelines de traduction Cloud Temple - mises à jour le 26/05/2026* *Référence pour maintenir la qualité multilingue* diff --git a/memory-bank/workflows/translation-workflow.md b/memory-bank/workflows/translation-workflow.md index 70c910d7..2ff5d0ce 100644 --- a/memory-bank/workflows/translation-workflow.md +++ b/memory-bank/workflows/translation-workflow.md @@ -17,12 +17,15 @@ Le script `scripts/translate_py/translate.py` est l'outil central de ce workflow ### Prérequis - Python 3.8+ - Les dépendances listées dans `scripts/translate_py/requirements.txt`. -- Un fichier `.env` correctement configuré dans `scripts/translate_py/`. Utilisez `scripts/translate_py/.env.example` comme modèle. +- Un token Cloud Temple LLMaaS pour les exécutions qui appellent l'API. Le token peut être fourni en CLI avec `--token` ou via `CLOUDTEMPLE_API_KEY`. -### Configuration Essentielle (`.env`) -- `CLOUDTEMPLE_API_KEY`: **Obligatoire**. Votre clé d'accès à l'API LLMaaS de Cloud Temple. -- `CLOUDTEMPLE_API_URL`: Optionnel. L'URL de l'endpoint de l'API. Par défaut : `https://api.ai.cloud-temple.com/v1/chat/completions`. -- `TRANSLATION_MODEL`: Optionnel. Le modèle LLM à utiliser pour la traduction. Par défaut : `qwen3:30b-a3b`. +### Configuration Essentielle + +Les options CLI sont prioritaires sur les variables d'environnement : + +- `--token` / `CLOUDTEMPLE_API_KEY`: token Bearer Cloud Temple LLMaaS. Requis pour une traduction réelle ou `--test-api`, non requis pour `--dry-run`. +- `--url` / `CLOUDTEMPLE_API_URL`: endpoint de l'API. Par défaut : `https://api.ai.cloud-temple.com/v1/chat/completions`. +- `--model` / `TRANSLATION_MODEL`: modèle LLM à utiliser pour la traduction. Par défaut : `qwen3.6:27b`. - `MODEL_TYPE`: Optionnel. Le type de modèle pour la gestion du tokenizer ('openai' ou 'other'). Par défaut : `other`. - `CONCURRENT_TRANSLATIONS`: Optionnel. Nombre de fichiers traités en parallèle. Par défaut : `4`. - `MAX_MODEL_CONTEXT_LENGTH`: Optionnel. La longueur maximale du contexte du modèle. Par défaut : `32768`. @@ -56,6 +59,9 @@ Le script `scripts/translate_py/translate.py` est l'outil central de ce workflow - `--translate-missing`: En mode de traduction normal, se concentre sur la traduction des fichiers qui n'ont pas encore de version traduite dans une langue cible, sans forcément retraduire ceux qui existent déjà (sauf si leur source a changé). - `--lang=`: Permet de cibler une seule langue pour la traduction (ex: `--lang=en`). - `--debug`: Active le mode de débogage avec des logs détaillés, y compris les payloads des requêtes API. +- `--token=`: Fournit le token Bearer Cloud Temple LLMaaS directement en CLI. +- `--url=`: Remplace l'endpoint API par défaut. +- `--model=`: Remplace le modèle de traduction par défaut. ### Langues Supportées - Source : Français (contenu dans `docs/`) @@ -76,7 +82,7 @@ Le script `scripts/translate_py/translate.py` est l'outil central de ce workflow - **Préservation du formatage** : Le prompt système de l'API est conçu pour préserver au maximum la structure Markdown, les blocs de code, et les éléments HTML. ## 📈 Suivi et Qualité -- Le fichier `scripts/translation-meta.json` est crucial et doit être versionné avec le code. +- Le fichier `scripts/translate_py/translation-meta.json` est crucial et doit être versionné avec le code. - Une relecture humaine des traductions générées est recommandée, surtout pour les contenus critiques ou complexes. - Les erreurs de traduction ou les problèmes de formatage doivent être signalés pour améliorer le prompt système ou le script. @@ -110,6 +116,19 @@ Depuis avril 2026, les images dans la documentation utilisent des chemins absolu **Modification** : Dans `file_manager.py`, la méthode `_needs_translation()` retourne maintenant `False` pour tous les fichiers non-Markdown (images, .docx, .pdf, etc.). Cela économise ~2500 fichiers inutiles (613 images × 4 langues). +## 🔧 Mise à jour du 26/05/2026 : configuration API en CLI + +Le script `translate.py` accepte désormais `--token`, `--url` et `--model`. Cette évolution évite de dépendre d'un fichier `.env` local pour lancer une traduction réelle depuis un poste de travail. + +Points opérationnels : + +- `--token` est prioritaire sur `CLOUDTEMPLE_API_KEY`. +- `--url` est prioritaire sur `CLOUDTEMPLE_API_URL`. +- `--model` est prioritaire sur `TRANSLATION_MODEL`. +- Le modèle par défaut est `qwen3.6:27b`. +- L'URL par défaut reste `https://api.ai.cloud-temple.com/v1/chat/completions`. +- `--dry-run` et `--init` sans `--translate-missing` ne nécessitent pas de token API. + ## 🚀 Prochaines Étapes / Améliorations Possibles - Relancer les traductions des fichiers modifiés avec le script corrigé. diff --git a/scripts/README.md b/scripts/README.md index 07b298ad..2bdc9774 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -67,18 +67,31 @@ Système de traduction Python avancé utilisant l'API Cloud Temple LLMaaS avec u # Installation des dépendances cd scripts/translate_py pip install -r requirements.txt +``` + +#### Configuration API -# Configuration (copier depuis .env.example) -cp .env.example .env -# Éditer .env avec vos paramètres +Le token peut être fourni directement en ligne de commande. C'est l'usage recommandé pour éviter de recréer un fichier `.env` local : + +```bash +python scripts/translate_py/translate.py --token "$CLOUDTEMPLE_API_KEY" ``` -#### Variables d'environnement (.env) +Les options CLI sont prioritaires sur les variables d'environnement : + +- `--token` : token Bearer Cloud Temple LLMaaS +- `--url` : URL API, par défaut `https://api.ai.cloud-temple.com/v1/chat/completions` +- `--model` : modèle de traduction, par défaut `qwen3.6:27b` + +Les commandes qui ne font pas d'appel API (`--dry-run`, `--init` sans `--translate-missing`) restent utilisables sans token. + +Les variables d'environnement restent supportées : + ```bash # API Configuration CLOUDTEMPLE_API_KEY=your_api_key_here CLOUDTEMPLE_API_URL=https://api.ai.cloud-temple.com/v1/chat/completions -TRANSLATION_MODEL=qwen3:30b-a3b +TRANSLATION_MODEL=qwen3.6:27b # Performance Settings CONCURRENT_TRANSLATIONS=8 # Nombre de traductions simultanées @@ -102,6 +115,7 @@ python translate.py --force # Force retraduction python translate.py --lang=en # Traduction anglaise uniquement python translate.py --debug # Mode debug avec logs détaillés python translate.py --test-api # Test de connexion API +python translate.py --token "$CLOUDTEMPLE_API_KEY" --model qwen3.6:27b ``` #### Options Disponibles @@ -113,6 +127,9 @@ python translate.py --test-api # Test de connexion API - `--debug` : Mode debug avec logs détaillés - `--no-debug-system-prompt` : Masque le prompt système en debug - `--test-api` : Test la connexion API et affiche le résultat +- `--token=` : Token Bearer Cloud Temple LLMaaS +- `--url=` : URL API de traduction +- `--model=` : Modèle de traduction #### Fonctionnalité .notranslation Placez un fichier `.notranslation` dans un répertoire pour forcer la **copie** (au lieu de la traduction) de tous les fichiers de ce répertoire : @@ -191,7 +208,7 @@ scripts/translate_py/ ├── translation-meta.json # 🔍 Métadonnées et hash SHA-256 ├── requirements.txt # 📦 Dépendances Python ├── .env.example # 📝 Template configuration -└── .env # 🔒 Configuration locale +└── .env # 🔒 Configuration locale optionnelle ``` #### Détection des Changements par Hash SHA-256 diff --git a/scripts/translate_py/config.py b/scripts/translate_py/config.py index 122df484..2d66455d 100644 --- a/scripts/translate_py/config.py +++ b/scripts/translate_py/config.py @@ -27,7 +27,7 @@ class TranslationConfig(BaseModel): # Configuration modèle model: str = Field( - default="qwen3:30b-a3b", + default="qwen3.6:27b", description="Modèle utilisé pour la traduction" ) model_type: str = Field( @@ -115,10 +115,19 @@ class LanguageConfig(BaseModel): COPYABLE_EXTENSIONS: set = {'.png', '.png', '.jpeg', '.gif', '.svg', '.docx', '.pdf'} -def load_config() -> TranslationConfig: +def load_config( + api_key: Optional[str] = None, + api_url: Optional[str] = None, + model: Optional[str] = None +) -> TranslationConfig: """ Charge la configuration depuis les variables d'environnement. + Args: + api_key: Clé API fournie en ligne de commande. Prioritaire sur l'environnement. + api_url: URL API fournie en ligne de commande. Prioritaire sur l'environnement. + model: Modèle fourni en ligne de commande. Prioritaire sur l'environnement. + Returns: TranslationConfig: Configuration chargée et validée @@ -139,9 +148,9 @@ def load_config() -> TranslationConfig: # Construction de la configuration depuis les variables d'environnement config_data = { - 'api_url': os.getenv('CLOUDTEMPLE_API_URL'), - 'api_key': os.getenv('CLOUDTEMPLE_API_KEY'), - 'model': os.getenv('TRANSLATION_MODEL'), + 'api_url': api_url or os.getenv('CLOUDTEMPLE_API_URL'), + 'api_key': api_key or os.getenv('CLOUDTEMPLE_API_KEY'), + 'model': model or os.getenv('TRANSLATION_MODEL'), 'model_type': os.getenv('MODEL_TYPE'), 'temperature': _get_float_env('TRANSLATION_TEMPERATURE'), 'top_p': _get_float_env('TRANSLATION_TOP_P'), diff --git a/scripts/translate_py/translate.py b/scripts/translate_py/translate.py index f75c894a..cb6e9b0e 100644 --- a/scripts/translate_py/translate.py +++ b/scripts/translate_py/translate.py @@ -520,6 +520,9 @@ async def process_file_init(file_path: Path) -> None: @click.option('--debug', is_flag=True, help='Mode debug avec logs détaillés') @click.option('--no-debug-system-prompt', is_flag=True, help='Masque le prompt système en mode debug') @click.option('--test-api', is_flag=True, help='Test la connexion API et sort') +@click.option('--token', help='Token Bearer Cloud Temple LLMaaS. Prioritaire sur CLOUDTEMPLE_API_KEY.') +@click.option('--url', 'api_url', default=None, help='URL de l’API de traduction. Par défaut: https://api.ai.cloud-temple.com/v1/chat/completions') +@click.option('--model', 'model_name', default=None, help='Modèle de traduction. Par défaut: qwen3.6:27b') @click.version_option(version="2.0.0", prog_name="Cloud Temple Translation System") def main( dry_run: bool, @@ -529,7 +532,10 @@ def main( lang: Optional[str], debug: bool, no_debug_system_prompt: bool, - test_api: bool + test_api: bool, + token: Optional[str], + api_url: Optional[str], + model_name: Optional[str] ) -> None: """ Système de traduction automatique pour la documentation Cloud Temple. @@ -545,7 +551,10 @@ def main( lang=lang, debug=debug, no_debug_system_prompt=no_debug_system_prompt, - test_api=test_api + test_api=test_api, + token=token, + api_url=api_url, + model_name=model_name )) @@ -557,7 +566,10 @@ async def _async_main( lang: Optional[str], debug: bool, no_debug_system_prompt: bool, - test_api: bool + test_api: bool, + token: Optional[str], + api_url: Optional[str], + model_name: Optional[str] ) -> None: """Version asynchrone du main.""" @@ -567,7 +579,7 @@ async def _async_main( try: # Chargement de la configuration - config = load_config() + config = load_config(api_key=token, api_url=api_url, model=model_name) require_api = test_api or (not dry_run and (not init or translate_missing)) validate_environment(config, require_api=require_api) diff --git a/scripts/translate_py/translation-meta.json b/scripts/translate_py/translation-meta.json index 6fdce144..9c246020 100644 --- a/scripts/translate_py/translation-meta.json +++ b/scripts/translate_py/translation-meta.json @@ -469,22 +469,22 @@ "it": "ffb7e6f257a44d999881f783ad0090f55ae9b5ca49ed68c49eba273e04553469" }, "managed_kubernetes/concepts.md": { - "en": "e635db629d8230906fd2c24abcbed41fc72c802b27cb5cedb37b4c43c0c3192f", - "de": "e635db629d8230906fd2c24abcbed41fc72c802b27cb5cedb37b4c43c0c3192f", - "es": "e635db629d8230906fd2c24abcbed41fc72c802b27cb5cedb37b4c43c0c3192f", - "it": "e635db629d8230906fd2c24abcbed41fc72c802b27cb5cedb37b4c43c0c3192f" + "en": "0d2394399e974f1d74c9a0f66bc4904c511f851e017bf17a5e95267cf8bdeb13", + "de": "0d2394399e974f1d74c9a0f66bc4904c511f851e017bf17a5e95267cf8bdeb13", + "es": "0d2394399e974f1d74c9a0f66bc4904c511f851e017bf17a5e95267cf8bdeb13", + "it": "0d2394399e974f1d74c9a0f66bc4904c511f851e017bf17a5e95267cf8bdeb13" }, "managed_kubernetes/managed_core_kubernetes.md": { - "en": "2b5bb0920aa123fedb3c3b32c045eebfca6d4246a8a63e9ee740892ffd4e2d4c", - "de": "2b5bb0920aa123fedb3c3b32c045eebfca6d4246a8a63e9ee740892ffd4e2d4c", - "es": "2b5bb0920aa123fedb3c3b32c045eebfca6d4246a8a63e9ee740892ffd4e2d4c", - "it": "2b5bb0920aa123fedb3c3b32c045eebfca6d4246a8a63e9ee740892ffd4e2d4c" + "en": "2d8a2aea25f008340b8b369075b6d5d7f13d3f0c743a8138b8c8a58d94a6b9c5", + "de": "2d8a2aea25f008340b8b369075b6d5d7f13d3f0c743a8138b8c8a58d94a6b9c5", + "es": "2d8a2aea25f008340b8b369075b6d5d7f13d3f0c743a8138b8c8a58d94a6b9c5", + "it": "2d8a2aea25f008340b8b369075b6d5d7f13d3f0c743a8138b8c8a58d94a6b9c5" }, "managed_kubernetes/managed_kubernetes.md": { - "en": "56f627452754875f65319e3a25da00a162bf722baed236d2ed6484d2b28624d0", - "de": "56f627452754875f65319e3a25da00a162bf722baed236d2ed6484d2b28624d0", - "es": "56f627452754875f65319e3a25da00a162bf722baed236d2ed6484d2b28624d0", - "it": "56f627452754875f65319e3a25da00a162bf722baed236d2ed6484d2b28624d0" + "en": "87f56bcd4457c7735cb09f10eb837394270ec728d77146ec87593619f2f0dd01", + "de": "87f56bcd4457c7735cb09f10eb837394270ec728d77146ec87593619f2f0dd01", + "es": "87f56bcd4457c7735cb09f10eb837394270ec728d77146ec87593619f2f0dd01", + "it": "87f56bcd4457c7735cb09f10eb837394270ec728d77146ec87593619f2f0dd01" }, "managed_kubernetes/quickstart.md": { "en": "fde0faf47a49061b775d46275863c709a0796bd4d2a1da3a6b0de0919296e198", @@ -943,6 +943,6 @@ "it": "1f532fe40db1196a2cc8a965bc05ccb1f311ef575e207f0d6ef3e47cc389bef0" } }, - "last_update": "2026-05-17T18:00:15.357380", + "last_update": "2026-05-26T22:36:02.595411", "version": "2.0" -} +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 50370027..41fc81bb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,6 +12,14 @@ "@algolia/requester-fetch" "5.44.0" "@algolia/requester-node-http" "5.44.0" +"@algolia/autocomplete-core@^1.19.2": + version "1.19.8" + resolved "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.19.8.tgz" + integrity sha512-3YEorYg44niXcm7gkft3nXYItHd44e8tmh4D33CTszPgP0QWkaLEaFywiNyJBo7UL/mqObA/G9RYuU7R8tN1IA== + dependencies: + "@algolia/autocomplete-plugin-algolia-insights" "1.19.8" + "@algolia/autocomplete-shared" "1.19.8" + "@algolia/autocomplete-core@1.19.2": version "1.19.2" resolved "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.19.2.tgz" @@ -20,14 +28,6 @@ "@algolia/autocomplete-plugin-algolia-insights" "1.19.2" "@algolia/autocomplete-shared" "1.19.2" -"@algolia/autocomplete-core@^1.19.2": - version "1.19.8" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.19.8.tgz#7c84c771d28643fb00d09026c05013fb97aeea23" - integrity sha512-3YEorYg44niXcm7gkft3nXYItHd44e8tmh4D33CTszPgP0QWkaLEaFywiNyJBo7UL/mqObA/G9RYuU7R8tN1IA== - dependencies: - "@algolia/autocomplete-plugin-algolia-insights" "1.19.8" - "@algolia/autocomplete-shared" "1.19.8" - "@algolia/autocomplete-plugin-algolia-insights@1.19.2": version "1.19.2" resolved "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.2.tgz" @@ -37,7 +37,7 @@ "@algolia/autocomplete-plugin-algolia-insights@1.19.8": version "1.19.8" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.8.tgz#f60d21edbe2a42e6d4e2215430733e3f51641471" + resolved "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.8.tgz" integrity sha512-ZvJWO8ZZJDpc1LNM2TTBdmQsZBLMR4rU5iNR2OYvEeFBiaf/0ESnRSSLQbryarJY4SVxtoz6A2ZtDMNM+iQEAA== dependencies: "@algolia/autocomplete-shared" "1.19.8" @@ -49,7 +49,7 @@ "@algolia/autocomplete-shared@1.19.8": version "1.19.8" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.8.tgz#5d723d8bdb448efbb1b0e1c7ff94cc18e5b1dc0e" + resolved "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.8.tgz" integrity sha512-h5hf2t8ejF6vlOgvLaZzQbWs5SyH2z4PAWygNAvvD/2RI29hdQ54ldUGwqVuj9Srs+n8XUKTPUqb7fvhBhQrnQ== "@algolia/client-abtesting@5.44.0": @@ -77,6 +77,11 @@ resolved "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.44.0.tgz" integrity sha512-1yyJm4OYC2cztbS28XYVWwLXdwpLsMG4LoZLOltVglQ2+hc/i9q9fUDZyjRa2Bqt4DmkIfezagfMrokhyH4uxQ== +"@algolia/client-common@5.52.1": + version "5.52.1" + resolved "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.52.1.tgz" + integrity sha512-qCDoZfx5MpX7XQzvQ3bC4tSEMkQWQMaF/ABtLuoze03Y/flR563CCSws02qIJ23oX7lxl92LsilZjINVyTdtLw== + "@algolia/client-insights@5.44.0": version "5.44.0" resolved "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.44.0.tgz" @@ -107,6 +112,16 @@ "@algolia/requester-fetch" "5.44.0" "@algolia/requester-node-http" "5.44.0" +"@algolia/client-search@>= 4.9.1 < 6": + version "5.52.1" + resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.52.1.tgz" + integrity sha512-gA8oJOV1LnQQkDf91iebNnFInHuW0gRPEgLSOQ7EfipCEjYTHm5swm1DlH9H5RaRw4RrHuzHBegnlzc0MAstcg== + dependencies: + "@algolia/client-common" "5.52.1" + "@algolia/requester-browser-xhr" "5.52.1" + "@algolia/requester-fetch" "5.52.1" + "@algolia/requester-node-http" "5.52.1" + "@algolia/client-search@5.44.0": version "5.44.0" resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.44.0.tgz" @@ -159,6 +174,13 @@ dependencies: "@algolia/client-common" "5.44.0" +"@algolia/requester-browser-xhr@5.52.1": + version "5.52.1" + resolved "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.52.1.tgz" + integrity sha512-CI7+/0I11QeZM59Uc8whd2or0kqzFVjpaPn9Qpwll/krHcBAxk24WkAQ6WX+IwDVMfpont4YGbKwAmCre3vE8Q== + dependencies: + "@algolia/client-common" "5.52.1" + "@algolia/requester-fetch@5.44.0": version "5.44.0" resolved "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.44.0.tgz" @@ -166,6 +188,13 @@ dependencies: "@algolia/client-common" "5.44.0" +"@algolia/requester-fetch@5.52.1": + version "5.52.1" + resolved "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.52.1.tgz" + integrity sha512-S6bDuw9byfOvm3T71cgdoZgrgnZq6hpdMLkx52Louh57nUAmvGQESz2aojOynQHjbTiV55smvAFbgn0qT4tJrg== + dependencies: + "@algolia/client-common" "5.52.1" + "@algolia/requester-node-http@5.44.0": version "5.44.0" resolved "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.44.0.tgz" @@ -173,6 +202,13 @@ dependencies: "@algolia/client-common" "5.44.0" +"@algolia/requester-node-http@5.52.1": + version "5.52.1" + resolved "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.52.1.tgz" + integrity sha512-tqZXM+54rWo4mk5jL5Z/flE11nPmNEdXwFBM5py9DkOmbjeCNemfVd45FyM97XdzfZ0dl9uOJC6PYn1FpkeyQg== + dependencies: + "@algolia/client-common" "5.52.1" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.27.1": version "7.27.1" resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz" @@ -187,7 +223,7 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz" integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA== -"@babel/core@^7.21.3", "@babel/core@^7.25.9": +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.0.0-0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.12.0", "@babel/core@^7.13.0", "@babel/core@^7.21.3", "@babel/core@^7.25.9", "@babel/core@^7.4.0 || ^8.0.0-0 <8.0.0": version "7.28.5" resolved "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz" integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw== @@ -1034,7 +1070,7 @@ "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.25.9": version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz" integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ== "@babel/template@^7.27.1", "@babel/template@^7.27.2": @@ -1450,17 +1486,17 @@ "@docsearch/core@4.6.2": version "4.6.2" - resolved "https://registry.yarnpkg.com/@docsearch/core/-/core-4.6.2.tgz#0a6fdc13b1eb12153cb19316f911479b67f7bd58" + resolved "https://registry.npmjs.org/@docsearch/core/-/core-4.6.2.tgz" integrity sha512-/S0e6Dj7Zcm8m9Rru49YEX49dhU11be68c+S/BCyN8zQsTTgkKzXlhRbVL5mV6lOLC2+ZRRryaTdcm070Ug2oA== "@docsearch/css@4.6.2": version "4.6.2" - resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-4.6.2.tgz#986776619dccbf798176c75e858cc22f5e710bb4" + resolved "https://registry.npmjs.org/@docsearch/css/-/css-4.6.2.tgz" integrity sha512-fH/cn8BjEEdM2nJdjNMHIvOVYupG6AIDtFVDgIZrNzdCSj4KXr9kd+hsehqsNGYjpUjObeKYKvgy/IwCb1jZYQ== "@docsearch/react@^3.9.0 || ^4.3.2": version "4.6.2" - resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-4.6.2.tgz#e6c65fb87fb943eefaa936debe6d31bb51b25056" + resolved "https://registry.npmjs.org/@docsearch/react/-/react-4.6.2.tgz" integrity sha512-/BbtGFtqVOGwZx0dw/UfhN/0/DmMQYnulY4iv0tPRhC2JCXv0ka/+izwt3Jzo1ZxXS/2eMvv9zHsBJOK1I9f/w== dependencies: "@algolia/autocomplete-core" "1.19.2" @@ -1469,7 +1505,7 @@ "@docusaurus/babel@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/babel/-/babel-3.10.0.tgz#819819f107233dfcf50b59cd51158f23fb04878a" + resolved "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.10.0.tgz" integrity sha512-mqCJhCZNZUDg0zgDEaPTM4DnRsisa24HdqTy/qn/MQlbwhTb4WVaZg6ZyX6yIVKqTz8fS1hBMgM+98z+BeJJDg== dependencies: "@babel/core" "^7.25.9" @@ -1489,7 +1525,7 @@ "@docusaurus/bundler@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/bundler/-/bundler-3.10.0.tgz#878c4c46bfa3434671ea37a43da184238a6aae26" + resolved "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.10.0.tgz" integrity sha512-iONUGZGgp+lAkw/cJZH6irONcF4p8+278IsdRlq8lYhxGjkoNUs0w7F4gVXBYSNChq5KG5/JleTSsdJySShxow== dependencies: "@babel/core" "^7.25.9" @@ -1517,9 +1553,9 @@ webpack "^5.95.0" webpackbar "^6.0.1" -"@docusaurus/core@3.10.0", "@docusaurus/core@^3.10.0": +"@docusaurus/core@^3.10.0", "@docusaurus/core@>=3.0.0", "@docusaurus/core@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.10.0.tgz#642e71a0209d62c3f5ef275ed9d74a881f40df39" + resolved "https://registry.npmjs.org/@docusaurus/core/-/core-3.10.0.tgz" integrity sha512-mgLdQsO8xppnQZc3LPi+Mf+PkPeyxJeIx11AXAq/14fsaMefInQiMEZUUmrc7J+956G/f7MwE7tn8KZgi3iRcA== dependencies: "@docusaurus/babel" "3.10.0" @@ -1567,7 +1603,7 @@ "@docusaurus/cssnano-preset@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.10.0.tgz#be1b435c33df09d743473d3fadda67b4568dfae3" + resolved "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.10.0.tgz" integrity sha512-qzSshTO1DB3TYW+dPUal5KHM7XPc5YQfzF3Kdb2NDACJUyGbNcFtw3tGkCJlYwhNCRKbZcmwraKUS1i5dcHdGg== dependencies: cssnano-preset-advanced "^6.1.2" @@ -1575,9 +1611,9 @@ postcss-sort-media-queries "^5.2.0" tslib "^2.6.0" -"@docusaurus/faster@^3.10.0": +"@docusaurus/faster@*", "@docusaurus/faster@^3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/faster/-/faster-3.10.0.tgz#0758a93196f685537aa7700bde62faf926e6c817" + resolved "https://registry.npmjs.org/@docusaurus/faster/-/faster-3.10.0.tgz" integrity sha512-GNPtVH14ISjHfSwnHu3KiFGf86ICmJSQDeSv/QaanpBgiZGOtgZaslnC5q8WiguxM1EVkwcGxPuD8BXF4eggKw== dependencies: "@docusaurus/types" "3.10.0" @@ -1593,15 +1629,23 @@ "@docusaurus/logger@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.10.0.tgz#2bacbd004dd78e3da926dbe8f6fa9a930856575d" + resolved "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.10.0.tgz" integrity sha512-9jrZzFuBH1LDRlZ7cznAhCLmAZ3HSDqgwdrSSZdGHq9SPUOQgXXu8mnxe2ZRB9NS1PCpMTIOVUqDtZPIhMafZg== dependencies: chalk "^4.1.2" tslib "^2.6.0" +"@docusaurus/logger@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.10.1.tgz" + integrity sha512-oPjNFnfJsRCkePVjkGrxWGq4MvJKRQT0r9jOP0eRBTZ7Wr9FAbzdP/Gjs0I2Ss6YRkPoEgygKG112OkE6skvJw== + dependencies: + chalk "^4.1.2" + tslib "^2.6.0" + "@docusaurus/mdx-loader@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.10.0.tgz#1d4b050d751389ecf38dee48bcb61e53df8ffb82" + resolved "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.10.0.tgz" integrity sha512-mQQV97080AH4PYNs087l202NMDqRopZA4mg5W76ZZyTFrmWhJ3mHg+8A+drJVENxw5/Q+wHMHLgsx+9z1nEs0A== dependencies: "@docusaurus/logger" "3.10.0" @@ -1629,9 +1673,9 @@ vfile "^6.0.1" webpack "^5.88.1" -"@docusaurus/module-type-aliases@3.10.0", "@docusaurus/module-type-aliases@^3.10.0": +"@docusaurus/module-type-aliases@^3.10.0", "@docusaurus/module-type-aliases@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.10.0.tgz#749928f104d563f11f046bf0c9ab6489a470c7c8" + resolved "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.10.0.tgz" integrity sha512-/1O0Zg8w3DFrYX/I6Fbss7OJrtZw1QoyjDhegiFNHVi9A9Y0gQ3jUAytVxF6ywpAWpLyLxch8nN8H/V3XfzdJQ== dependencies: "@docusaurus/types" "3.10.0" @@ -1644,7 +1688,7 @@ "@docusaurus/plugin-content-blog@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.10.0.tgz#10095291b637440847854ecb2c8afcd8746debd7" + resolved "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.10.0.tgz" integrity sha512-RuTz68DhB7CL96QO5UsFbciD7GPYq6QV+YMfF9V0+N4ZgLhJIBgpVAr8GobrKF6NRe5cyWWETU5z5T834piG9g== dependencies: "@docusaurus/core" "3.10.0" @@ -1667,9 +1711,9 @@ utility-types "^3.10.0" webpack "^5.88.1" -"@docusaurus/plugin-content-docs@3.10.0", "@docusaurus/plugin-content-docs@^3.10.0": +"@docusaurus/plugin-content-docs@*", "@docusaurus/plugin-content-docs@^3.10.0", "@docusaurus/plugin-content-docs@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.10.0.tgz#9c4ea1d5a405340f28c281d2e4586c695a7c65a5" + resolved "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.10.0.tgz" integrity sha512-9BjHhf15ct8Z7TThTC0xRndKDVvMKmVsAGAN7W9FpNRzfMdScOGcXtLmcCWtJGvAezjOJIm6CxOYCy3Io5+RnQ== dependencies: "@docusaurus/core" "3.10.0" @@ -1693,7 +1737,7 @@ "@docusaurus/plugin-content-pages@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.10.0.tgz#7670cbb3c849f434949f542bfdfded1580a13165" + resolved "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.10.0.tgz" integrity sha512-5amX8kEJI+nIGtuLVjYk59Y5utEJ3CHETFOPEE4cooIRLA4xM4iBsA6zFgu4ljcopeYwvBzFEWf5g2I6Yb9SkA== dependencies: "@docusaurus/core" "3.10.0" @@ -1707,7 +1751,7 @@ "@docusaurus/plugin-css-cascade-layers@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.10.0.tgz#71e318d842be95f92be6c3dca00ceea4971d0edb" + resolved "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.10.0.tgz" integrity sha512-6q1vtt5FJcg5osgkHeM1euErECNqEZ5Z1j69yiNx2luEBIso+nxCkS9nqj8w+MK5X7rvKEToGhFfOFWncs51pQ== dependencies: "@docusaurus/core" "3.10.0" @@ -1718,7 +1762,7 @@ "@docusaurus/plugin-debug@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.10.0.tgz#e77f924604e1e09d5d90fe0bdf23a3be8ea3307e" + resolved "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.10.0.tgz" integrity sha512-XcljKN+G+nmmK69uQA1d9BlYU3ZftG3T3zpK8/7Hf/wrOlV7TA4Ampdrdwkg0jElKdKAoSnPhCO0/U3bQGsVQQ== dependencies: "@docusaurus/core" "3.10.0" @@ -1730,7 +1774,7 @@ "@docusaurus/plugin-google-analytics@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.10.0.tgz#22c7e976fe4d970c7cd1c73c9723d9a5786c6e37" + resolved "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.10.0.tgz" integrity sha512-hTEoodatpBZnUat5nFExbuTGA1lhWGy7vZGuTew5Q3QDtGKFpSJLYmZJhdTjvCFwv1+qQ67hgAVlKdJOB8TXow== dependencies: "@docusaurus/core" "3.10.0" @@ -1740,7 +1784,7 @@ "@docusaurus/plugin-google-gtag@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.10.0.tgz#c38a2ba638257851cc845b934506b80c08d47f96" + resolved "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.10.0.tgz" integrity sha512-iB/Zzjv/eelJRbdULZqzWCbgMgJ7ht4ONVjXtN3+BI/muil6S87gQ1OJyPwlXD+ELdKkitC7bWv5eJdYOZLhrQ== dependencies: "@docusaurus/core" "3.10.0" @@ -1751,7 +1795,7 @@ "@docusaurus/plugin-google-tag-manager@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.10.0.tgz#5469c923cc1ad4608399d0b17e5fcacd8e030d56" + resolved "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.10.0.tgz" integrity sha512-FEjZxqKgLHa+Wez/EgKxRwvArNCWIScfyEQD95rot7jkxp6nonjI5XIbGfO/iYhM5Qinwe8aIEQHP2KZtpqVuA== dependencies: "@docusaurus/core" "3.10.0" @@ -1761,7 +1805,7 @@ "@docusaurus/plugin-sitemap@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.10.0.tgz#35d59d46803f279f22aa64fc1bd18c048f12662b" + resolved "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.10.0.tgz" integrity sha512-DVTSLjB97hIjmayGnGcBfognCeI7ZuUKgEnU7Oz81JYqXtVg94mVTthDjq3QHTylYNeCUbkaW8VF0FDLcc8pPw== dependencies: "@docusaurus/core" "3.10.0" @@ -1776,7 +1820,7 @@ "@docusaurus/plugin-svgr@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-svgr/-/plugin-svgr-3.10.0.tgz#8ada2e6dd8318d20206a9b044fc091a5794ba3f0" + resolved "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.10.0.tgz" integrity sha512-lNljBESaETZqVBMPqkrGchr+UPT1eZzEPLmJhz8I76BxbjqgsUnRvrq6lQJ9sYjgmgX52KB7kkgczqd2yzoswQ== dependencies: "@docusaurus/core" "3.10.0" @@ -1790,7 +1834,7 @@ "@docusaurus/preset-classic@^3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.10.0.tgz#74b6facdaf568bcd41ec90cae9aebb7ca0ac8619" + resolved "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.10.0.tgz" integrity sha512-kw/Ye02Hc6xP1OdTswy8yxQEHg0fdPpyWAQRxr5b2x3h7LlG2Zgbb5BDFROnXDDMpUxB7YejlocJIE5HIEfpNA== dependencies: "@docusaurus/core" "3.10.0" @@ -1809,9 +1853,9 @@ "@docusaurus/theme-search-algolia" "3.10.0" "@docusaurus/types" "3.10.0" -"@docusaurus/theme-classic@3.10.0", "@docusaurus/theme-classic@^3.10.0": +"@docusaurus/theme-classic@^3.10.0", "@docusaurus/theme-classic@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.10.0.tgz#d937915c691189f27ced649c822994d839ea565b" + resolved "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.10.0.tgz" integrity sha512-9msCAsRdN+UG+RwPwCFb0uKy4tGoPh5YfBozXeGUtIeAgsMdn6f3G/oY861luZ3t8S2ET8S9Y/1GnpJAGWytww== dependencies: "@docusaurus/core" "3.10.0" @@ -1843,7 +1887,7 @@ "@docusaurus/theme-common@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.10.0.tgz#70b419ccfdf62f092299354a72d1692e81be597d" + resolved "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.10.0.tgz" integrity sha512-Dkp1YXKn16ByCJAdIjbDIOpVb4Z66MsVD694/ilX1vAAHaVEMrVsf/NPd9VgreyFx08rJ9GqV1MtzsbTcU73Kg== dependencies: "@docusaurus/mdx-loader" "3.10.0" @@ -1861,7 +1905,7 @@ "@docusaurus/theme-search-algolia@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.10.0.tgz#0ff57fe58db6abde8f5ad2877e459cd2fa6e7464" + resolved "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.10.0.tgz" integrity sha512-f5FPKI08e3JRG63vR/o4qeuUVHUHzFzM0nnF+AkB67soAZgNsKJRf2qmUZvlQkGwlV+QFkKe4D0ANMh1jToU3g== dependencies: "@algolia/autocomplete-core" "^1.19.2" @@ -1884,7 +1928,7 @@ "@docusaurus/theme-translations@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.10.0.tgz#8fdc23d29bd7f907db49c36cf65e2123d96be300" + resolved "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.10.0.tgz" integrity sha512-L9IbFLwTc5+XdgH45iQYufLn0SVZd6BUNelDbKIFlH+E4hhjuj/XHWAFMX/w2K59rfy8wak9McOaei7BSUfRPA== dependencies: fs-extra "^11.1.1" @@ -1892,12 +1936,12 @@ "@docusaurus/tsconfig@^3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/tsconfig/-/tsconfig-3.10.0.tgz#f40a57248828f0503a5f355cf30aa59941c9baaa" + resolved "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.10.0.tgz" integrity sha512-TXdC3WXuPrdQAexLvjUJfnYf3YKEgEqAs5nK0Q88pRBCW7t7oN4ILvWYb3A5Z1wlSXyXGWW/mCUmLEhdWsjnDQ== -"@docusaurus/types@3.10.0", "@docusaurus/types@^3.10.0": +"@docusaurus/types@^3.10.0", "@docusaurus/types@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.10.0.tgz#a69232bba74b738fcf4671fd5f0f079366dd3d13" + resolved "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.0.tgz" integrity sha512-F0dOt3FOoO20rRaFK7whGFQZ3ggyrWEdQc/c8/UiRuzhtg4y1w9FspXH5zpCT07uMnJKBPGh+qNazbNlCQqvSw== dependencies: "@mdx-js/mdx" "^3.0.0" @@ -1911,17 +1955,55 @@ webpack "^5.95.0" webpack-merge "^5.9.0" +"@docusaurus/types@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.1.tgz" + integrity sha512-XYMK8k1szDCFMw2V+Xyen0g7Kee1sP3dtFnl7vkGkZOkeAJ/oPDQPL8iz4HBKOo/cwU8QeV6onVjMqtP+tFzsw== + dependencies: + "@mdx-js/mdx" "^3.0.0" + "@types/history" "^4.7.11" + "@types/mdast" "^4.0.2" + "@types/react" "*" + commander "^5.1.0" + joi "^17.9.2" + react-helmet-async "npm:@slorber/react-helmet-async@1.3.0" + utility-types "^3.10.0" + webpack "^5.95.0" + webpack-merge "^5.9.0" + "@docusaurus/utils-common@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.10.0.tgz#2a6dc76b312664fca7234d33607c085318ff1ae3" + resolved "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.10.0.tgz" integrity sha512-JyL7sb9QVDgYvudIS81Dv0lsWm7le0vGZSDwsztxWam1SPBqrnkvBy9UYL/amh6pbybkyYTd3CMTkO24oMlCSw== dependencies: "@docusaurus/types" "3.10.0" tslib "^2.6.0" +"@docusaurus/utils-common@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.10.1.tgz" + integrity sha512-5mFSgEADtnFxFH7RLw02QA5MpU5JVUCj0MPeIvi/aF4Fi45tQRIuTwXoXDqJ+1VfQJuYJGz3SI63wmGz4HvXzA== + dependencies: + "@docusaurus/types" "3.10.1" + tslib "^2.6.0" + +"@docusaurus/utils-validation@>=3.0.0": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.10.1.tgz" + integrity sha512-cRv1X69jwaWv47waglllgZVWzeBFLhl53XT/XED/83BerVBTC5FTP8WTcVl8Z6sZOegDSwitu/wpCSPCDOT6lg== + dependencies: + "@docusaurus/logger" "3.10.1" + "@docusaurus/utils" "3.10.1" + "@docusaurus/utils-common" "3.10.1" + fs-extra "^11.2.0" + joi "^17.9.2" + js-yaml "^4.1.0" + lodash "^4.17.21" + tslib "^2.6.0" + "@docusaurus/utils-validation@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.10.0.tgz#a2418d7f31980d991fd3a1f39c8aad8820b36812" + resolved "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.10.0.tgz" integrity sha512-c+6n2+ZPOJtWWc8Bb/EYdpSDfjYEScdCu9fB/SNjOmSCf1IdVnGf2T53o0tsz0gDRtCL90tifTL0JE/oMuP1Mw== dependencies: "@docusaurus/logger" "3.10.0" @@ -1933,9 +2015,36 @@ lodash "^4.17.21" tslib "^2.6.0" +"@docusaurus/utils@>=3.0.0", "@docusaurus/utils@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.10.1.tgz" + integrity sha512-3ojeJry9xBYdJO6qoyyzqeJFSJBVx2mXhyDzSdjwL2+URFQMf+h25gG38iswGImicK0ELjTd1EL2xzk8hf3QPw== + dependencies: + "@docusaurus/logger" "3.10.1" + "@docusaurus/types" "3.10.1" + "@docusaurus/utils-common" "3.10.1" + escape-string-regexp "^4.0.0" + execa "^5.1.1" + file-loader "^6.2.0" + fs-extra "^11.1.1" + github-slugger "^1.5.0" + globby "^11.1.0" + gray-matter "^4.0.3" + jiti "^1.20.0" + js-yaml "^4.1.0" + lodash "^4.17.21" + micromatch "^4.0.5" + p-queue "^6.6.2" + prompts "^2.4.2" + resolve-pathname "^3.0.0" + tslib "^2.6.0" + url-loader "^4.1.1" + utility-types "^3.10.0" + webpack "^5.88.1" + "@docusaurus/utils@3.10.0": version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.10.0.tgz#ea7d7b0d325b60f728decc00bb3908d00ef86faf" + resolved "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.10.0.tgz" integrity sha512-T3B0WTigsIthe0D4LQa2k+7bJY+c3WS+Wq2JhcznOSpn1lSN64yNtHQXboCj3QnUs1EuAZszQG1SHKu5w5ZrlA== dependencies: "@docusaurus/logger" "3.10.0" @@ -1960,28 +2069,6 @@ utility-types "^3.10.0" webpack "^5.88.1" -"@emnapi/core@^1.5.0": - version "1.8.1" - resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.8.1.tgz#fd9efe721a616288345ffee17a1f26ac5dd01349" - integrity sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg== - dependencies: - "@emnapi/wasi-threads" "1.1.0" - tslib "^2.4.0" - -"@emnapi/runtime@^1.5.0": - version "1.8.1" - resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.8.1.tgz#550fa7e3c0d49c5fb175a116e8cd70614f9a22a5" - integrity sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg== - dependencies: - tslib "^2.4.0" - -"@emnapi/wasi-threads@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz#60b2102fddc9ccb78607e4a3cf8403ea69be41bf" - integrity sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ== - dependencies: - tslib "^2.4.0" - "@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0": version "9.3.0" resolved "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz" @@ -2036,7 +2123,7 @@ "@jridgewell/source-map@^0.3.3": version "0.3.11" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.11.tgz#b21835cbd36db656b857c2ad02ebd413cc13a9ba" + resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz" integrity sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA== dependencies: "@jridgewell/gen-mapping" "^0.3.5" @@ -2044,7 +2131,7 @@ "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": version "1.5.5" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz" integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28": @@ -2144,12 +2231,12 @@ "@module-federation/error-codes@0.22.0": version "0.22.0" - resolved "https://registry.yarnpkg.com/@module-federation/error-codes/-/error-codes-0.22.0.tgz#31ccc990dc240d73912ba7bd001f7e35ac751992" + resolved "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.22.0.tgz" integrity sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug== "@module-federation/runtime-core@0.22.0": version "0.22.0" - resolved "https://registry.yarnpkg.com/@module-federation/runtime-core/-/runtime-core-0.22.0.tgz#7321ec792bb7d1d22bee6162ec43564b769d2a3c" + resolved "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.22.0.tgz" integrity sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA== dependencies: "@module-federation/error-codes" "0.22.0" @@ -2157,7 +2244,7 @@ "@module-federation/runtime-tools@0.22.0": version "0.22.0" - resolved "https://registry.yarnpkg.com/@module-federation/runtime-tools/-/runtime-tools-0.22.0.tgz#36f2a7cb267af208a9d1a237fe9a71b4bf31431e" + resolved "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.22.0.tgz" integrity sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA== dependencies: "@module-federation/runtime" "0.22.0" @@ -2165,7 +2252,7 @@ "@module-federation/runtime@0.22.0": version "0.22.0" - resolved "https://registry.yarnpkg.com/@module-federation/runtime/-/runtime-0.22.0.tgz#f789c9ef40d846d110711c8221ecc0ad938d43d8" + resolved "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.22.0.tgz" integrity sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA== dependencies: "@module-federation/error-codes" "0.22.0" @@ -2174,26 +2261,17 @@ "@module-federation/sdk@0.22.0": version "0.22.0" - resolved "https://registry.yarnpkg.com/@module-federation/sdk/-/sdk-0.22.0.tgz#6ad4c1de85a900c3c80ff26cb87cce253e3a2770" + resolved "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.22.0.tgz" integrity sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g== "@module-federation/webpack-bundler-runtime@0.22.0": version "0.22.0" - resolved "https://registry.yarnpkg.com/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.22.0.tgz#dcbe8f972d722fe278e6a7c21988d4bee53d401d" + resolved "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.22.0.tgz" integrity sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA== dependencies: "@module-federation/runtime" "0.22.0" "@module-federation/sdk" "0.22.0" -"@napi-rs/wasm-runtime@1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.7.tgz#dcfea99a75f06209a235f3d941e3460a51e9b14c" - integrity sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw== - dependencies: - "@emnapi/core" "^1.5.0" - "@emnapi/runtime" "^1.5.0" - "@tybys/wasm-util" "^0.10.1" - "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" @@ -2202,7 +2280,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -2238,64 +2316,17 @@ "@polka/url@^1.0.0-next.24": version "1.0.0-next.29" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.29.tgz#5a40109a1ab5f84d6fd8fc928b19f367cbe7e7b1" + resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz" integrity sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww== "@rspack/binding-darwin-arm64@1.7.11": version "1.7.11" - resolved "https://registry.yarnpkg.com/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.7.11.tgz#ea43ac25a9ff99a9faf6c820f5d174a32974e95c" + resolved "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.7.11.tgz" integrity sha512-oduECiZVqbO5zlVw+q7Vy65sJFth99fWPTyucwvLJJtJkPL5n17Uiql2cYP6Ijn0pkqtf1SXgK8WjiKLG5bIig== -"@rspack/binding-darwin-x64@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.7.11.tgz#5c724d91559d642d4a5e6aa4ed380c30bd0f64c0" - integrity sha512-a1+TtTE9ap6RalgFi7FGIgkJP6O4Vy6ctv+9WGJy53E4kuqHR0RygzaiVxCI/GMc/vBT9vY23hyrpWb3d1vtXA== - -"@rspack/binding-linux-arm64-gnu@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.7.11.tgz#429119939bbe9d51a72caf99cffb8febe0f870fe" - integrity sha512-P0QrGRPbTWu6RKWfN0bDtbnEps3rXH0MWIMreZABoUrVmNQKtXR6e73J3ub6a+di5s2+K0M2LJ9Bh2/H4UsDUA== - -"@rspack/binding-linux-arm64-musl@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.7.11.tgz#d939b8c2c5bf35380d3c860402f7063031ef469a" - integrity sha512-6ky7R43VMjWwmx3Yx7Jl7faLBBMAgMDt+/bN35RgwjiPgsIByz65EwytUVuW9rikB43BGHvA/eqlnjLrUzNBqw== - -"@rspack/binding-linux-x64-gnu@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.7.11.tgz#03567317a7e8cfc62d994dcf9683f932fd22054a" - integrity sha512-cuOJMfCOvb2Wgsry5enXJ3iT1FGUjdPqtGUBVupQlEG4ntSYsQ2PtF4wIDVasR3wdxC5nQbipOrDiN/u6fYsdQ== - -"@rspack/binding-linux-x64-musl@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.7.11.tgz#d93c93ea796eae1572b2353a50d58cc6218c53b6" - integrity sha512-CoK37hva4AmHGh3VCsQXmGr40L36m1/AdnN5LEjUX6kx5rEH7/1nEBN6Ii72pejqDVvk9anEROmPDiPw10tpFg== - -"@rspack/binding-wasm32-wasi@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.7.11.tgz#c90235032fb14de50baf535592069923c1308f4e" - integrity sha512-OtrmnPUVJMxjNa3eDMfHyPdtlLRmmp/aIm0fQHlAOATbZvlGm12q7rhPW5BXTu1yh+1rQ1/uqvz+SzKEZXuJaQ== - dependencies: - "@napi-rs/wasm-runtime" "1.0.7" - -"@rspack/binding-win32-arm64-msvc@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.7.11.tgz#0afcfde6a77cdf6fa6a85de4f8a39b94a593aab2" - integrity sha512-lObFW6e5lCWNgTBNwT//yiEDbsxm9QG4BYUojqeXxothuzJ/L6ibXz6+gLMvbOvLGV3nKgkXmx8GvT9WDKR0mA== - -"@rspack/binding-win32-ia32-msvc@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.7.11.tgz#46606834538e84cd0f95f19089695ab122d69586" - integrity sha512-0pYGnZd8PPqNR68zQ8skamqNAXEA1sUfXuAdYcknIIRq2wsbiwFzIc0Pov1cIfHYab37G7sSIPBiOUdOWF5Ivw== - -"@rspack/binding-win32-x64-msvc@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.7.11.tgz#e486a33fc1227ec9cbd70439ef1b32ead1faec68" - integrity sha512-EeQXayoQk/uBkI3pdoXfQBXNIUrADq56L3s/DFyM2pJeUDrWmhfIw2UFIGkYPTMSCo8F2JcdcGM32FGJrSnU0Q== - "@rspack/binding@1.7.11": version "1.7.11" - resolved "https://registry.yarnpkg.com/@rspack/binding/-/binding-1.7.11.tgz#30f3e87242d9dcb3744edc22752cf24a9ceb4d61" + resolved "https://registry.npmjs.org/@rspack/binding/-/binding-1.7.11.tgz" integrity sha512-2MGdy2s2HimsDT444Bp5XnALzNRxuBNc7y0JzyuqKbHBywd4x2NeXyhWXXoxufaCFu5PBc9Qq9jyfjW2Aeh06Q== optionalDependencies: "@rspack/binding-darwin-arm64" "1.7.11" @@ -2309,9 +2340,9 @@ "@rspack/binding-win32-ia32-msvc" "1.7.11" "@rspack/binding-win32-x64-msvc" "1.7.11" -"@rspack/core@^1.7.10": +"@rspack/core@^1.7.10", "@rspack/core@0.x || 1.x": version "1.7.11" - resolved "https://registry.yarnpkg.com/@rspack/core/-/core-1.7.11.tgz#8d7d77db3b71332afd22a9c90904fe18a6832e2c" + resolved "https://registry.npmjs.org/@rspack/core/-/core-1.7.11.tgz" integrity sha512-rsD9b+Khmot5DwCMiB3cqTQo53ioPG3M/A7BySu8+0+RS7GCxKm+Z+mtsjtG/vsu4Tn2tcqCdZtA3pgLoJB+ew== dependencies: "@module-federation/runtime-tools" "0.22.0" @@ -2418,7 +2449,7 @@ "@svgr/babel-plugin-transform-react-native-svg" "8.1.0" "@svgr/babel-plugin-transform-svg-component" "8.0.0" -"@svgr/core@8.1.0": +"@svgr/core@*", "@svgr/core@8.1.0": version "8.1.0" resolved "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz" integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA== @@ -2472,55 +2503,10 @@ "@swc/core-darwin-arm64@1.15.3": version "1.15.3" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.3.tgz#bd0bd3ab7730e3ffa64cf200c0ed7c572cbaba97" + resolved "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.3.tgz" integrity sha512-AXfeQn0CvcQ4cndlIshETx6jrAM45oeUrK8YeEY6oUZU/qzz0Id0CyvlEywxkWVC81Ajpd8TQQ1fW5yx6zQWkQ== -"@swc/core-darwin-x64@1.15.3": - version "1.15.3" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.15.3.tgz#502b1e1c680df6b962265ca81a0c1a23e6ff070f" - integrity sha512-p68OeCz1ui+MZYG4wmfJGvcsAcFYb6Sl25H9TxWl+GkBgmNimIiRdnypK9nBGlqMZAcxngNPtnG3kEMNnvoJ2A== - -"@swc/core-linux-arm-gnueabihf@1.15.3": - version "1.15.3" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.3.tgz#e32cc6a2e06a75060d6f598ba2ca6f96c5c0cc43" - integrity sha512-Nuj5iF4JteFgwrai97mUX+xUOl+rQRHqTvnvHMATL/l9xE6/TJfPBpd3hk/PVpClMXG3Uvk1MxUFOEzM1JrMYg== - -"@swc/core-linux-arm64-gnu@1.15.3": - version "1.15.3" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.3.tgz#9b9861bc44059e393d4baf98b3cd3d6c4ea6f521" - integrity sha512-2Nc/s8jE6mW2EjXWxO/lyQuLKShcmTrym2LRf5Ayp3ICEMX6HwFqB1EzDhwoMa2DcUgmnZIalesq2lG3krrUNw== - -"@swc/core-linux-arm64-musl@1.15.3": - version "1.15.3" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.3.tgz#f6388743e5a159018bd468e8f710940b2614384b" - integrity sha512-j4SJniZ/qaZ5g8op+p1G9K1z22s/EYGg1UXIb3+Cg4nsxEpF5uSIGEE4mHUfA70L0BR9wKT2QF/zv3vkhfpX4g== - -"@swc/core-linux-x64-gnu@1.15.3": - version "1.15.3" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.3.tgz#15fea551c7a3aeb1bdc3ad5c652d73c9321ddba8" - integrity sha512-aKttAZnz8YB1VJwPQZtyU8Uk0BfMP63iDMkvjhJzRZVgySmqt/apWSdnoIcZlUoGheBrcqbMC17GGUmur7OT5A== - -"@swc/core-linux-x64-musl@1.15.3": - version "1.15.3" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.3.tgz#d3f17bab4ffcadbb47f135e6a14d6f3e401af289" - integrity sha512-oe8FctPu1gnUsdtGJRO2rvOUIkkIIaHqsO9xxN0bTR7dFTlPTGi2Fhk1tnvXeyAvCPxLIcwD8phzKg6wLv9yug== - -"@swc/core-win32-arm64-msvc@1.15.3": - version "1.15.3" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.3.tgz#9da386df7fed00b3473bcf4281ff3fcd14726d2c" - integrity sha512-L9AjzP2ZQ/Xh58e0lTRMLvEDrcJpR7GwZqAtIeNLcTK7JVE+QineSyHp0kLkO1rttCHyCy0U74kDTj0dRz6raA== - -"@swc/core-win32-ia32-msvc@1.15.3": - version "1.15.3" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.3.tgz#c398d4f0f10ffec2151a79733ee1ce86a945a1ea" - integrity sha512-B8UtogMzErUPDWUoKONSVBdsgKYd58rRyv2sHJWKOIMCHfZ22FVXICR4O/VwIYtlnZ7ahERcjayBHDlBZpR0aw== - -"@swc/core-win32-x64-msvc@1.15.3": - version "1.15.3" - resolved "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.3.tgz" - integrity sha512-SpZKMR9QBTecHeqpzJdYEfgw30Oo8b/Xl6rjSzBt1g0ZsXyy60KLXrp6IagQyfTYqNYE/caDvwtF2FPn7pomog== - -"@swc/core@^1.7.39": +"@swc/core@^1.2.147", "@swc/core@^1.7.39": version "1.15.3" resolved "https://registry.npmjs.org/@swc/core/-/core-1.15.3.tgz" integrity sha512-Qd8eBPkUFL4eAONgGjycZXj1jFCBW8Fd+xF0PzdTlBCWQIV1xnUT7B93wUANtW3KGjl3TRcOyxwSx/u/jyKw/Q== @@ -2546,54 +2532,9 @@ "@swc/html-darwin-arm64@1.15.3": version "1.15.3" - resolved "https://registry.yarnpkg.com/@swc/html-darwin-arm64/-/html-darwin-arm64-1.15.3.tgz#87811153f2ebcb761d72553e3fe804f0ac0aa825" + resolved "https://registry.npmjs.org/@swc/html-darwin-arm64/-/html-darwin-arm64-1.15.3.tgz" integrity sha512-IIVuFRTr1exOX29lZ3RApa+5RYWSJir65eWKOM5OhqpBWlzdYVnbHaObrBCOYrIBL+BXGYySnbp72b79NggXDg== -"@swc/html-darwin-x64@1.15.3": - version "1.15.3" - resolved "https://registry.yarnpkg.com/@swc/html-darwin-x64/-/html-darwin-x64-1.15.3.tgz#e7dd5bb256c52df999c6f5f309ee935b79f143f7" - integrity sha512-gW1fu0etuFLQ23i5fm2XDc4xjOMXm0wi+EjezFzYooAvSyC5On0KCveTIxeXNnYKk2Q85IOC03PTjmVwkVKqeg== - -"@swc/html-linux-arm-gnueabihf@1.15.3": - version "1.15.3" - resolved "https://registry.yarnpkg.com/@swc/html-linux-arm-gnueabihf/-/html-linux-arm-gnueabihf-1.15.3.tgz#2e1c0738dc13ae4d9dd00c1b881427cd7776e9e3" - integrity sha512-JztA9n1zMM3kJKp99U2rRnXUfzTeETEgyeu+VArtaG0KXoP08tUVMC5QYCYOBW4vTBbs5SiLN+FCzB65y7UKLQ== - -"@swc/html-linux-arm64-gnu@1.15.3": - version "1.15.3" - resolved "https://registry.yarnpkg.com/@swc/html-linux-arm64-gnu/-/html-linux-arm64-gnu-1.15.3.tgz#369cb5eb38fa62589d4a16ddc87545d2726dca36" - integrity sha512-9dikO1z0IdfiB+gYXEReeUvurao7pruAVUB+lvn0824IoGFutUinLUnRJPqCDMT4f70J8xBZkHC4QIfO0N1lZQ== - -"@swc/html-linux-arm64-musl@1.15.3": - version "1.15.3" - resolved "https://registry.yarnpkg.com/@swc/html-linux-arm64-musl/-/html-linux-arm64-musl-1.15.3.tgz#78308b017b6db32e508dc145fbf0eb2a98e1c17f" - integrity sha512-ZmVYAP2xuzc8RN+jwJR84eMjgoWA0r20YL5Sb+hMo8p4+piOLPif0FjfTbRGy0iwz/lFY7Ml8Fent3I8kXjGig== - -"@swc/html-linux-x64-gnu@1.15.3": - version "1.15.3" - resolved "https://registry.yarnpkg.com/@swc/html-linux-x64-gnu/-/html-linux-x64-gnu-1.15.3.tgz#355e829ae20d8862881e667069e8770a48e20603" - integrity sha512-QqHhNedxWps0nzam5aNJ+vHet+EsFYW3FkjdqyUnfpJZdrvVudzfyNd4yxjo/nMeb5RsOb/fZlfp1cx26XB2LQ== - -"@swc/html-linux-x64-musl@1.15.3": - version "1.15.3" - resolved "https://registry.yarnpkg.com/@swc/html-linux-x64-musl/-/html-linux-x64-musl-1.15.3.tgz#973fcd401cbc1439e1ba1ab3b6b5bfdf0af78417" - integrity sha512-gwowjNEHMflw3Nu1P4MPpUHCeBbEWW8uwDtMsWARPGb9onBCyzMr7Z3m1jvuRVd/kd44o9VwWfh0AB4j26Y12w== - -"@swc/html-win32-arm64-msvc@1.15.3": - version "1.15.3" - resolved "https://registry.yarnpkg.com/@swc/html-win32-arm64-msvc/-/html-win32-arm64-msvc-1.15.3.tgz#578a4fc8c8f9e8411f8ebc270c2a81c0a8d69b9a" - integrity sha512-rxxvpXER5KuKSN6bI5zU3RXMu5jpTIgQdWLzBlMVjuhRWRNk14LMaoxKSRxGJ3k/i0qwQWaMA+8oPpcsTVguKw== - -"@swc/html-win32-ia32-msvc@1.15.3": - version "1.15.3" - resolved "https://registry.yarnpkg.com/@swc/html-win32-ia32-msvc/-/html-win32-ia32-msvc-1.15.3.tgz#0f2284141c7ee16b99d614caeaef34c13360da53" - integrity sha512-eWGVaOwksC9eJ7409DNgCWp0O4YmlO8OgToMWFozTzG3zEDCHpKjVhD/Fi8zUtdFkc/cuXrHmunmTfh62XTvZg== - -"@swc/html-win32-x64-msvc@1.15.3": - version "1.15.3" - resolved "https://registry.npmjs.org/@swc/html-win32-x64-msvc/-/html-win32-x64-msvc-1.15.3.tgz" - integrity sha512-PdTREP0388VJjgwoN/LbkZkfGkSFR7k7n4PMqpV7PHy8Gri8kOYewExlyxyLJ+lYi1MXZMkMUI8VJbZZFnaxIw== - "@swc/html@^1.13.5": version "1.15.3" resolved "https://registry.npmjs.org/@swc/html/-/html-1.15.3.tgz" @@ -2631,13 +2572,6 @@ resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== -"@tybys/wasm-util@^0.10.1": - version "0.10.1" - resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.1.tgz#ecddd3205cf1e2d5274649ff0eedd2991ed7f414" - integrity sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg== - dependencies: - tslib "^2.4.0" - "@types/body-parser@*": version "1.19.6" resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz" @@ -2700,7 +2634,7 @@ "@types/estree@*", "@types/estree@^1.0.0", "@types/estree@^1.0.8": version "1.0.8" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.21", "@types/express-serve-static-core@^4.17.33": @@ -2713,7 +2647,7 @@ "@types/range-parser" "*" "@types/send" "*" -"@types/express@*", "@types/express@^4.17.21": +"@types/express@*", "@types/express@^4.17.13", "@types/express@^4.17.21": version "4.17.25" resolved "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz" integrity sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw== @@ -2725,7 +2659,7 @@ "@types/gtag.js@^0.0.20": version "0.0.20" - resolved "https://registry.yarnpkg.com/@types/gtag.js/-/gtag.js-0.0.20.tgz#e47edabb4ed5ecac90a079275958e6c929d7c08a" + resolved "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.20.tgz" integrity sha512-wwAbk3SA2QeU67unN7zPxjEHmPmlXwZXZvQEpbEUQuMCRGgKyE1m6XDuTUA9b6pCGb/GqJmdfMOY5LuDjJSbbg== "@types/hast@^3.0.0": @@ -2822,7 +2756,7 @@ "@types/node@*": version "25.0.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-25.0.6.tgz#5ca3c46f2b256b59128f433426e42d464765dab1" + resolved "https://registry.npmjs.org/@types/node/-/node-25.0.6.tgz" integrity sha512-NNu0sjyNxpoiW3YuVFfNz7mxSQ+S4X2G28uqg2s+CzoqoQjLPsWSbsFFyztIAqt2vb8kfEAsJNepMGPTxFDx3Q== dependencies: undici-types "~7.16.0" @@ -2873,10 +2807,10 @@ "@types/history" "^4.7.11" "@types/react" "*" -"@types/react@*": - version "19.2.8" - resolved "https://registry.yarnpkg.com/@types/react/-/react-19.2.8.tgz#307011c9f5973a6abab8e17d0293f48843627994" - integrity sha512-3MbSL37jEchWZz2p2mjntRZtPt837ij10ApxKfgmXCTuHWagYg7iA5bqPw6C8BMPfwidlvfPI/fxOc42HLhcyg== +"@types/react@*", "@types/react@>= 16.8.0 < 20.0.0", "@types/react@>=16": + version "19.2.14" + resolved "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz" + integrity sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w== dependencies: csstype "^3.2.2" @@ -2964,7 +2898,7 @@ resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz" integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== -"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": +"@webassemblyjs/ast@^1.14.1", "@webassemblyjs/ast@1.14.1": version "1.14.1" resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz" integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== @@ -3032,7 +2966,7 @@ "@webassemblyjs/wasm-edit@^1.14.1": version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz" integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -3065,9 +2999,9 @@ "@webassemblyjs/wasm-gen" "1.14.1" "@webassemblyjs/wasm-parser" "1.14.1" -"@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1": +"@webassemblyjs/wasm-parser@^1.14.1", "@webassemblyjs/wasm-parser@1.14.1": version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz" integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -3105,7 +3039,7 @@ accepts@~1.3.4, accepts@~1.3.8: acorn-import-phases@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz#16eb850ba99a056cb7cbfe872ffb8972e18c8bd7" + resolved "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz" integrity sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ== acorn-jsx@^5.0.0: @@ -3120,10 +3054,10 @@ acorn-walk@^8.0.0: dependencies: acorn "^8.11.0" -acorn@^8.0.0, acorn@^8.0.4, acorn@^8.11.0, acorn@^8.15.0: - version "8.15.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" - integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.0.0, acorn@^8.0.4, acorn@^8.11.0, acorn@^8.14.0, acorn@^8.15.0: + version "8.16.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz" + integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== address@^1.0.1: version "1.2.2" @@ -3157,7 +3091,7 @@ ajv-keywords@^5.1.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.12.5: +ajv@^6.12.5, ajv@^6.9.1: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -3167,7 +3101,7 @@ ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.9.0: +ajv@^8.0.0, ajv@^8.8.2, ajv@^8.9.0: version "8.17.1" resolved "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz" integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== @@ -3184,7 +3118,7 @@ algoliasearch-helper@^3.26.0: dependencies: "@algolia/events" "^4.0.1" -algoliasearch@^5.37.0: +algoliasearch@^5.37.0, "algoliasearch@>= 3.1 < 6", "algoliasearch@>= 4.9.1 < 6": version "5.44.0" resolved "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.44.0.tgz" integrity sha512-f8IpsbdQjzTjr/4mJ/jv5UplrtyMnnciGax6/B0OnLCs2/GJTK13O4Y7Ff1AvJVAaztanH+m5nzPoUq6EAy+aA== @@ -3230,7 +3164,7 @@ ansi-regex@^5.0.1: ansi-regex@^6.0.1: version "6.2.2" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz" integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== ansi-styles@^4.0.0, ansi-styles@^4.1.0: @@ -3304,7 +3238,7 @@ autoprefixer@^10.4.19, autoprefixer@^10.4.21: axios@^1.9.0: version "1.13.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.2.tgz#9ada120b7b5ab24509553ec3e40123521117f687" + resolved "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz" integrity sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA== dependencies: follow-redirects "^1.15.6" @@ -3360,21 +3294,11 @@ balanced-match@^1.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -baseline-browser-mapping@^2.10.19: +baseline-browser-mapping@^2.10.19, baseline-browser-mapping@^2.9.0: version "2.10.19" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.19.tgz#7697721c22f94f66195d0c34299b1a91e3299493" + resolved "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.19.tgz" integrity sha512-qCkNLi2sfBOn8XhZQ0FXsT1Ki/Yo5P90hrkRamVFRS7/KV9hpfA4HkoWNU152+8w0zPjnxo5psx5NL3PSGgv5g== -baseline-browser-mapping@^2.8.25: - version "2.8.30" - resolved "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.30.tgz" - integrity sha512-aTUKW4ptQhS64+v2d6IkPzymEzzhw+G0bA1g3uBRV3+ntkH+svttKseW5IOR4Ed6NUVKqnY7qT3dKvzQ7io4AA== - -baseline-browser-mapping@^2.9.0: - version "2.9.14" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.14.tgz#3b6af0bc032445bca04de58caa9a87cfe921cbb3" - integrity sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg== - batch@0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz" @@ -3451,7 +3375,7 @@ boxen@^7.0.0: brace-expansion@^1.1.7: version "1.1.12" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz" integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== dependencies: balanced-match "^1.0.0" @@ -3464,20 +3388,9 @@ braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -browserslist@^4.0.0, browserslist@^4.23.0, browserslist@^4.24.0, browserslist@^4.24.2, browserslist@^4.26.0, browserslist@^4.27.0, browserslist@^4.28.0: - version "4.28.0" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz" - integrity sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ== - dependencies: - baseline-browser-mapping "^2.8.25" - caniuse-lite "^1.0.30001754" - electron-to-chromium "^1.5.249" - node-releases "^2.0.27" - update-browserslist-db "^1.1.4" - -browserslist@^4.28.1: +browserslist@^4.0.0, browserslist@^4.23.0, browserslist@^4.24.0, browserslist@^4.24.2, browserslist@^4.26.0, browserslist@^4.27.0, browserslist@^4.28.0, browserslist@^4.28.1, "browserslist@>= 4.21.0": version "4.28.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz" integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== dependencies: baseline-browser-mapping "^2.9.0" @@ -3585,14 +3498,9 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001754: - version "1.0.30001756" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001756.tgz" - integrity sha512-4HnCNKbMLkLdhJz3TToeVWHSnfJvPaq6vu/eRP0Ahub/07n484XHhBF5AJoSGHdVrS8tKFauUQz8Bp9P7LVx7A== - -caniuse-lite@^1.0.30001759: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001754, caniuse-lite@^1.0.30001759: version "1.0.30001764" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001764.tgz#03206c56469f236103b90f9ae10bcb8b9e1f6005" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001764.tgz" integrity sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g== ccount@^2.0.0: @@ -3610,7 +3518,7 @@ chalk@^4.0.0, chalk@^4.1.2: chalk@^5.0.1, chalk@^5.2.0: version "5.6.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea" + resolved "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz" integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== char-regex@^1.0.2: @@ -3650,22 +3558,9 @@ cheerio-select@^2.1.0: domhandler "^5.0.3" domutils "^3.0.1" -cheerio@1.0.0-rc.12: - version "1.0.0-rc.12" - resolved "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz" - integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== - dependencies: - cheerio-select "^2.1.0" - dom-serializer "^2.0.0" - domhandler "^5.0.3" - domutils "^3.0.1" - htmlparser2 "^8.0.1" - parse5 "^7.0.0" - parse5-htmlparser2-tree-adapter "^7.0.0" - cheerio@^1.0.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.1.2.tgz#26af77e89336c81c63ea83197f868b4cbd351369" + resolved "https://registry.npmjs.org/cheerio/-/cheerio-1.1.2.tgz" integrity sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg== dependencies: cheerio-select "^2.1.0" @@ -3680,6 +3575,19 @@ cheerio@^1.0.0: undici "^7.12.0" whatwg-mimetype "^4.0.0" +cheerio@1.0.0-rc.12: + version "1.0.0-rc.12" + resolved "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz" + integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.0.1" + htmlparser2 "^8.0.1" + parse5 "^7.0.0" + parse5-htmlparser2-tree-adapter "^7.0.0" + chokidar@^3.5.3, chokidar@^3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" @@ -3912,7 +3820,7 @@ cookie@0.7.1: copy-text-to-clipboard@^3.2.0: version "3.2.2" - resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.2.tgz#99bc79db3f2d355ec33a08d573aff6804491ddb9" + resolved "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.2.tgz" integrity sha512-T6SqyLd1iLuqPA90J5N4cTalrtovCySh58iiZDGJ6FGznbclKh4UI+FGacQSgFzwKG77W7XT5gwbVEbd9cIH1A== copy-webpack-plugin@^11.0.0: @@ -3936,7 +3844,7 @@ core-js-compat@^3.43.0: core-js@^3.31.1: version "3.47.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.47.0.tgz#436ef07650e191afeb84c24481b298bd60eb4a17" + resolved "https://registry.npmjs.org/core-js/-/core-js-3.47.0.tgz" integrity sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg== core-util-is@~1.0.0: @@ -4035,7 +3943,7 @@ css-select@^4.1.3: css-select@^5.1.0: version "5.2.2" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.2.2.tgz#01b6e8d163637bb2dd6c982ca4ed65863682786e" + resolved "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz" integrity sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw== dependencies: boolbase "^1.0.0" @@ -4062,7 +3970,7 @@ css-tree@~2.2.0: css-what@^6.0.1, css-what@^6.1.0: version "6.2.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.2.2.tgz#cdcc8f9b6977719fdfbd1de7aec24abf756b9dea" + resolved "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz" integrity sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA== cssdb@^8.4.2: @@ -4146,7 +4054,7 @@ csso@^5.0.5: csstype@^3.2.2: version "3.2.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz" integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== debounce@^1.2.1: @@ -4154,6 +4062,13 @@ debounce@^1.2.1: resolved "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz" integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== +debug@^4.0.0, debug@^4.1.0, debug@^4.3.1, debug@^4.3.4, debug@^4.4.1, debug@4: + version "4.4.3" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + debug@2.6.9: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" @@ -4161,16 +4076,9 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.3.1, debug@^4.3.4, debug@^4.4.1: - version "4.4.3" - resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz" - integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== - dependencies: - ms "^2.1.3" - decode-named-character-reference@^1.0.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz#25c32ae6dd5e21889549d40f676030e9514cc0ed" + resolved "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz" integrity sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q== dependencies: character-entities "^2.0.0" @@ -4243,16 +4151,16 @@ delayed-stream@~1.0.0: resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -depd@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - depd@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== +depd@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + dequal@^2.0.0: version "2.0.3" resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz" @@ -4396,7 +4304,7 @@ dot-prop@^6.0.1: dotenv@^16.4.7: version "16.6.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz" integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow== dunder-proto@^1.0.1: @@ -4423,14 +4331,9 @@ ee-first@1.1.1: resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.5.249: - version "1.5.259" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.259.tgz" - integrity sha512-I+oLXgpEJzD6Cwuwt1gYjxsDmu/S/Kd41mmLA3O+/uH2pFRO/DvOjUyGozL8j3KeLV6WyZ7ssPwELMsXCcsJAQ== - electron-to-chromium@^1.5.263: version "1.5.267" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz#5d84f2df8cdb6bfe7e873706bb21bd4bfb574dc7" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz" integrity sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw== emoji-regex@^8.0.0: @@ -4470,7 +4373,7 @@ encodeurl@~2.0.0: encoding-sniffer@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz#396ec97ac22ce5a037ba44af1992ac9d46a7b819" + resolved "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz" integrity sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw== dependencies: iconv-lite "^0.6.3" @@ -4478,7 +4381,7 @@ encoding-sniffer@^0.2.1: enhanced-resolve@^5.17.4: version "5.18.4" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz#c22d33055f3952035ce6a144ce092447c525f828" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz" integrity sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q== dependencies: graceful-fs "^4.2.4" @@ -4496,7 +4399,7 @@ entities@^4.2.0, entities@^4.4.0: entities@^6.0.0: version "6.0.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.1.tgz#c28c34a43379ca7f61d074130b2f5f7020a30694" + resolved "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz" integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g== error-ex@^1.3.1: @@ -4518,7 +4421,7 @@ es-errors@^1.3.0: es-module-lexer@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.0.0.tgz#f657cd7a9448dcdda9c070a3cb75e5dc1e85f5b1" + resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz" integrity sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw== es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: @@ -4659,7 +4562,7 @@ estree-util-to-js@^2.0.0: estree-util-value-to-estree@^3.0.1: version "3.5.0" - resolved "https://registry.yarnpkg.com/estree-util-value-to-estree/-/estree-util-value-to-estree-3.5.0.tgz#cd70cf37e7f78eae3e110d66a3436ce0d18a8f80" + resolved "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.5.0.tgz" integrity sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ== dependencies: "@types/estree" "^1.0.0" @@ -4714,7 +4617,7 @@ events@^3.2.0: execa@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" @@ -4783,7 +4686,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0: version "3.3.3" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -4804,7 +4707,7 @@ fast-uri@^3.0.1: fastq@^1.6.0: version "1.20.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.20.1.tgz#ca750a10dc925bc8b18839fd203e3ef4b3ced675" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz" integrity sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw== dependencies: reusify "^1.0.4" @@ -4837,7 +4740,7 @@ figures@^3.2.0: dependencies: escape-string-regexp "^1.0.5" -file-loader@^6.2.0: +file-loader@*, file-loader@^6.2.0: version "6.2.0" resolved "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz" integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== @@ -4888,7 +4791,7 @@ flat@^5.0.2: follow-redirects@^1.0.0, follow-redirects@^1.15.6: version "1.15.11" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz" integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== form-data-encoder@^2.1.2: @@ -4898,7 +4801,7 @@ form-data-encoder@^2.1.2: form-data@^4.0.4: version "4.0.5" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz" integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== dependencies: asynckit "^0.4.0" @@ -4938,7 +4841,7 @@ fs-extra@^10.1.0: fs-extra@^11.1.1, fs-extra@^11.2.0, fs-extra@^11.3.0: version "11.3.3" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.3.tgz#a27da23b72524e81ac6c3815cc0179b8c74c59ee" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz" integrity sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg== dependencies: graceful-fs "^4.2.0" @@ -4947,7 +4850,7 @@ fs-extra@^11.1.1, fs-extra@^11.2.0, fs-extra@^11.3.0: fsevents@~2.3.2: version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.2: @@ -5075,16 +4978,16 @@ got@^12.1.0: p-cancelable "^3.0.0" responselike "^3.0.0" -graceful-fs@4.2.10: - version "4.2.10" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== +graceful-fs@4.2.10: + version "4.2.10" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + gray-matter@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz" @@ -5176,7 +5079,7 @@ hast-util-from-html@^2.0.0: hast-util-from-parse5@^8.0.0: version "8.0.3" - resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz#830a35022fff28c3fea3697a98c2f4cc6b835a2e" + resolved "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz" integrity sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg== dependencies: "@types/hast" "^3.0.0" @@ -5223,7 +5126,7 @@ hast-util-raw@^9.0.0: hast-util-to-estree@^3.0.0: version "3.1.3" - resolved "https://registry.yarnpkg.com/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz#e654c1c9374645135695cc0ab9f70b8fcaf733d7" + resolved "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz" integrity sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w== dependencies: "@types/estree" "^1.0.0" @@ -5245,7 +5148,7 @@ hast-util-to-estree@^3.0.0: hast-util-to-jsx-runtime@^2.0.0: version "2.3.6" - resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz#ff31897aae59f62232e21594eac7ef6b63333e98" + resolved "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz" integrity sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg== dependencies: "@types/estree" "^1.0.0" @@ -5296,7 +5199,7 @@ hast-util-whitespace@^3.0.0: hastscript@^9.0.0: version "9.0.1" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-9.0.1.tgz#dbc84bef6051d40084342c229c451cd9dc567dff" + resolved "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz" integrity sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w== dependencies: "@types/hast" "^3.0.0" @@ -5382,7 +5285,7 @@ html-void-elements@^3.0.0: html-webpack-plugin@^5.6.0: version "5.6.5" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.5.tgz#d57defb83cabbf29bf56b2d4bf10b67b650066be" + resolved "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.5.tgz" integrity sha512-4xynFbKNNk+WlzXeQQ+6YYsH2g7mpfPszQZUi3ovKlj+pDmngQ7vRXjrrmGROabmKwyQkcgcX5hqfOwHbFmK5g== dependencies: "@types/html-minifier-terser" "^6.0.0" @@ -5393,7 +5296,7 @@ html-webpack-plugin@^5.6.0: htmlparser2@^10.0.0: version "10.0.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-10.0.0.tgz#77ad249037b66bf8cc99c6e286ef73b83aeb621d" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz" integrity sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g== dependencies: domelementtype "^2.3.0" @@ -5423,7 +5326,7 @@ htmlparser2@^8.0.1: http-cache-semantics@^4.1.1: version "4.2.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz" integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== http-deceiver@^1.2.7: @@ -5431,6 +5334,16 @@ http-deceiver@^1.2.7: resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + http-errors@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" @@ -5442,16 +5355,6 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - http-parser-js@>=0.5.1: version "0.5.10" resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz" @@ -5495,6 +5398,13 @@ hyperdyperid@^1.2.0: resolved "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz" integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A== +iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" @@ -5502,7 +5412,7 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@0.6.3, iconv-lite@^0.6.3: +iconv-lite@0.6.3: version "0.6.3" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== @@ -5552,29 +5462,34 @@ infima@0.2.0-alpha.45: resolved "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.45.tgz" integrity sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw== +inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + inherits@2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== -inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +ini@^1.3.4: + version "1.3.8" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== ini@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== -ini@^1.3.4, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - inline-style-parser@0.2.7: version "0.2.7" - resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.7.tgz#b1fc68bfc0313b8685745e4464e37f9376b9c909" + resolved "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz" integrity sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA== invariant@^2.2.4: @@ -5584,16 +5499,16 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - ipaddr.js@^2.1.0: version "2.2.0" resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz" integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + is-alphabetical@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz" @@ -5771,16 +5686,16 @@ is-yarn-global@^0.4.0: resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz" integrity sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ== -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - isarray@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" @@ -5890,7 +5805,7 @@ json5@^2.1.2, json5@^2.2.3: jsonfile@^6.0.1: version "6.2.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz" integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg== dependencies: universalify "^2.0.0" @@ -5948,61 +5863,11 @@ leven@^3.1.0: resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== -lightningcss-android-arm64@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz#6966b7024d39c94994008b548b71ab360eb3a307" - integrity sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A== - lightningcss-darwin-arm64@1.30.2: version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz#a5fa946d27c029e48c7ff929e6e724a7de46eb2c" + resolved "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz" integrity sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA== -lightningcss-darwin-x64@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz#5ce87e9cd7c4f2dcc1b713f5e8ee185c88d9b7cd" - integrity sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ== - -lightningcss-freebsd-x64@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz#6ae1d5e773c97961df5cff57b851807ef33692a5" - integrity sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA== - -lightningcss-linux-arm-gnueabihf@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz#62c489610c0424151a6121fa99d77731536cdaeb" - integrity sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA== - -lightningcss-linux-arm64-gnu@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz#2a3661b56fe95a0cafae90be026fe0590d089298" - integrity sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A== - -lightningcss-linux-arm64-musl@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz#d7ddd6b26959245e026bc1ad9eb6aa983aa90e6b" - integrity sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA== - -lightningcss-linux-x64-gnu@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz#5a89814c8e63213a5965c3d166dff83c36152b1a" - integrity sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w== - -lightningcss-linux-x64-musl@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz#808c2e91ce0bf5d0af0e867c6152e5378c049728" - integrity sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA== - -lightningcss-win32-arm64-msvc@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz#ab4a8a8a2e6a82a4531e8bbb6bf0ff161ee6625a" - integrity sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ== - -lightningcss-win32-x64-msvc@1.30.2: - version "1.30.2" - resolved "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz" - integrity sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw== - lightningcss@^1.27.0: version "1.30.2" resolved "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz" @@ -6034,7 +5899,7 @@ lines-and-columns@^1.1.6: loader-runner@^4.3.1: version "4.3.1" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.1.tgz#6c76ed29b0ccce9af379208299f07f876de737e3" + resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz" integrity sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q== loader-utils@^2.0.0: @@ -6416,7 +6281,7 @@ methods@~1.1.2: micromark-core-commonmark@^2.0.0: version "2.0.3" - resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz#c691630e485021a68cf28dbc2b2ca27ebf678cd4" + resolved "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz" integrity sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg== dependencies: decode-named-character-reference "^1.0.0" @@ -6553,7 +6418,7 @@ micromark-extension-math@^3.0.0: micromark-extension-mdx-expression@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz#43d058d999532fb3041195a3c3c05c46fa84543b" + resolved "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz" integrity sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q== dependencies: "@types/estree" "^1.0.0" @@ -6567,7 +6432,7 @@ micromark-extension-mdx-expression@^3.0.0: micromark-extension-mdx-jsx@^3.0.0: version "3.0.2" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz#ffc98bdb649798902fa9fc5689f67f9c1c902044" + resolved "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz" integrity sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ== dependencies: "@types/estree" "^1.0.0" @@ -6638,7 +6503,7 @@ micromark-factory-label@^2.0.0: micromark-factory-mdx-expression@^2.0.0: version "2.0.3" - resolved "https://registry.yarnpkg.com/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz#bb09988610589c07d1c1e4425285895041b3dfa9" + resolved "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz" integrity sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ== dependencies: "@types/estree" "^1.0.0" @@ -6751,7 +6616,7 @@ micromark-util-encode@^2.0.0: micromark-util-events-to-acorn@^2.0.0: version "2.0.3" - resolved "https://registry.yarnpkg.com/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz#e7a8a6b55a47e5a06c720d5a1c4abae8c37c98f3" + resolved "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz" integrity sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg== dependencies: "@types/estree" "^1.0.0" @@ -6792,7 +6657,7 @@ micromark-util-sanitize-uri@^2.0.0: micromark-util-subtokenize@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz#d8ade5ba0f3197a1cf6a2999fbbfe6357a1a19ee" + resolved "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz" integrity sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA== dependencies: devlop "^1.0.0" @@ -6817,12 +6682,12 @@ micromark-util-types@^1.0.0: micromark-util-types@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz#f00225f5f5a0ebc3254f96c36b6605c4b393908e" + resolved "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz" integrity sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA== micromark@^4.0.0: version "4.0.2" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.2.tgz#91395a3e1884a198e62116e33c9c568e39936fdb" + resolved "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz" integrity sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA== dependencies: "@types/debug" "^4.0.0" @@ -6851,12 +6716,12 @@ micromatch@^4.0.2, micromatch@^4.0.5, micromatch@^4.0.8: braces "^3.0.3" picomatch "^2.3.1" -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== +mime-db@^1.54.0: + version "1.54.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== -"mime-db@>= 1.43.0 < 2", mime-db@^1.54.0: +"mime-db@>= 1.43.0 < 2": version "1.54.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz" integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== @@ -6866,14 +6731,19 @@ mime-db@~1.33.0: resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz" integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== -mime-types@2.1.18, mime-types@^2.1.12, mime-types@~2.1.17: +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@2.1.18: version "2.1.18" resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz" integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== dependencies: mime-db "~1.33.0" -mime-types@^2.1.27, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.27: version "2.1.35" resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -6887,6 +6757,20 @@ mime-types@^3.0.1: dependencies: mime-db "^1.54.0" +mime-types@~2.1.24: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + mime@1.6.0: version "1.6.0" resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" @@ -6922,7 +6806,7 @@ minimalistic-assert@^1.0.0: minimatch@3.1.5: version "3.1.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz" integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== dependencies: brace-expansion "^1.1.7" @@ -6934,19 +6818,19 @@ minimist@^1.2.0: mrmime@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.1.tgz#bc3e87f7987853a54c9850eeb1f1078cd44adddc" + resolved "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz" integrity sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ== +ms@^2.1.3, ms@2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -ms@2.1.3, ms@^2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - multicast-dns@^7.2.5: version "7.2.5" resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz" @@ -6960,16 +6844,16 @@ nanoid@^3.3.11: resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz" integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - negotiator@~0.6.4: version "0.6.4" resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz" integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + neo-async@^2.6.2: version "2.6.2" resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" @@ -7015,7 +6899,7 @@ normalize-range@^0.1.2: normalize-url@^8.0.0: version "8.1.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.1.1.tgz#751a20c8520e5725404c06015fea21d7567f25ef" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.1.tgz" integrity sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ== npm-run-path@^4.0.1: @@ -7077,7 +6961,7 @@ obuf@^1.0.0, obuf@^1.1.2: resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -on-finished@2.4.1, on-finished@^2.4.1: +on-finished@^2.4.1, on-finished@2.4.1: version "2.4.1" resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== @@ -7245,7 +7129,7 @@ parse5-parser-stream@^7.1.2: parse5@^7.0.0, parse5@^7.3.0: version "7.3.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.3.0.tgz#d7e224fa72399c7a175099f45fc2ad024b05ec05" + resolved "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz" integrity sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw== dependencies: entities "^6.0.0" @@ -7295,6 +7179,13 @@ path-root@^0.1.1: dependencies: path-root-regex "^0.1.0" +path-to-regexp@^1.7.0: + version "1.9.0" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz" + integrity sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g== + dependencies: + isarray "0.0.1" + path-to-regexp@0.1.12: version "0.1.12" resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz" @@ -7305,13 +7196,6 @@ path-to-regexp@3.3.0: resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz" integrity sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw== -path-to-regexp@^1.7.0: - version "1.9.0" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz" - integrity sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g== - dependencies: - isarray "0.0.1" - path-type@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" @@ -7885,7 +7769,7 @@ postcss-zindex@^6.0.2: resolved "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-6.0.2.tgz" integrity sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg== -postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.33, postcss@^8.5.4: +"postcss@^7.0.0 || ^8.0.1", postcss@^8, postcss@^8.0.3, postcss@^8.0.9, postcss@^8.1.0, postcss@^8.2.2, postcss@^8.4, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.24, postcss@^8.4.31, postcss@^8.4.33, postcss@^8.4.6, postcss@^8.5.4: version "8.5.6" resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz" integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== @@ -7909,7 +7793,7 @@ pretty-time@^1.1.0: prism-react-renderer@^2.3.0: version "2.4.1" - resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz#ac63b7f78e56c8f2b5e76e823a976d5ede77e35f" + resolved "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz" integrity sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig== dependencies: "@types/prismjs" "^1.26.0" @@ -7917,7 +7801,7 @@ prism-react-renderer@^2.3.0: prismjs@^1.29.0: version "1.30.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.30.0.tgz#d9709969d9d4e16403f6f348c63553b19f0975a9" + resolved "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz" integrity sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw== process-nextick-args@~2.0.0: @@ -7949,7 +7833,7 @@ property-information@^6.0.0: property-information@^7.0.0: version "7.1.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.1.0.tgz#b622e8646e02b580205415586b40804d3e8bfd5d" + resolved "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz" integrity sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ== proto-list@~1.2.1: @@ -8006,16 +7890,21 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" -range-parser@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz" - integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== +range-parser@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -range-parser@^1.2.1, range-parser@~1.2.1: +range-parser@~1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== +range-parser@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz" + integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== + raw-body@2.5.2: version "2.5.2" resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz" @@ -8036,7 +7925,7 @@ rc@1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-dom@^18.0.0: +react-dom@*, "react-dom@^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", react-dom@^18.0.0, "react-dom@^18.0.0 || ^19.0.0", "react-dom@>= 16.8.0 < 20.0.0", react-dom@>=18.2.0: version "18.3.1" resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz" integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== @@ -8072,12 +7961,12 @@ react-json-view-lite@^2.3.0: react-loadable-ssr-addon-v5-slorber@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.3.tgz#bb3791bf481222c63a5bc6b96ee23f68cb5614b9" + resolved "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.3.tgz" integrity sha512-GXfh9VLwB5ERaCsU6RULh7tkemeX15aNh6wuMEBtfdyMa7fFG8TXrhXlx1SoEK2Ty/l6XIkzzYIQmyaWW3JgdQ== dependencies: "@babel/runtime" "^7.10.3" -"react-loadable@npm:@docusaurus/react-loadable@6.0.0": +react-loadable@*, "react-loadable@npm:@docusaurus/react-loadable@6.0.0": version "6.0.0" resolved "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz" integrity sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ== @@ -8104,7 +7993,7 @@ react-router-dom@^5.3.4: tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react-router@5.3.4, react-router@^5.3.4: +react-router@^5.3.4, react-router@>=5, react-router@5.3.4: version "5.3.4" resolved "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz" integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== @@ -8119,7 +8008,7 @@ react-router@5.3.4, react-router@^5.3.4: tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react@^18.0.0: +react@*, "react@^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", react@^18.0.0, "react@^18.0.0 || ^19.0.0", react@^18.3.1, "react@>= 16.8.0 < 20.0.0", react@>=15, react@>=16, react@>=16.0.0, react@>=18.2.0: version "18.3.1" resolved "https://registry.npmjs.org/react/-/react-18.3.1.tgz" integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== @@ -8166,7 +8055,7 @@ recma-build-jsx@^1.0.0: recma-jsx@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/recma-jsx/-/recma-jsx-1.0.1.tgz#58e718f45e2102ed0bf2fa994f05b70d76801a1a" + resolved "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz" integrity sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w== dependencies: acorn-jsx "^5.0.0" @@ -8221,7 +8110,7 @@ regexpu-core@^6.3.1: registry-auth-token@^5.0.1: version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.1.0.tgz#3c659047ecd4caebd25bc1570a3aa979ae490eca" + resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz" integrity sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw== dependencies: "@pnpm/npm-conf" "^2.1.0" @@ -8354,7 +8243,7 @@ remark-parse@^11.0.0: remark-rehype@^11.0.0: version "11.1.2" - resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-11.1.2.tgz#2addaadda80ca9bd9aa0da763e74d16327683b37" + resolved "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz" integrity sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw== dependencies: "@types/hast" "^3.0.0" @@ -8448,7 +8337,7 @@ retry@^0.13.1: reusify@^1.0.4: version "1.1.0" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz" integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== rtlcss@^4.1.0: @@ -8473,7 +8362,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: +safe-buffer@^5.1.0, safe-buffer@>=5.1.0, safe-buffer@~5.2.0, safe-buffer@5.2.1: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -8524,6 +8413,11 @@ schema-utils@^4.0.0, schema-utils@^4.0.1, schema-utils@^4.2.0, schema-utils@^4.3 ajv-formats "^2.1.1" ajv-keywords "^5.1.0" +"search-insights@>= 1 < 3": + version "2.17.3" + resolved "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz" + integrity sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ== + section-matter@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz" @@ -8559,7 +8453,7 @@ semver@^6.3.1: semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.4: version "7.7.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" + resolved "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz" integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== send@0.19.0: @@ -8590,7 +8484,7 @@ serialize-javascript@^6.0.0, serialize-javascript@^6.0.1, serialize-javascript@^ serve-handler@^6.1.7: version "6.1.7" - resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.7.tgz#e9bb864e87ee71e8dab874cde44d146b77e3fb78" + resolved "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.7.tgz" integrity sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg== dependencies: bytes "3.0.0" @@ -8796,16 +8690,21 @@ source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@~0.6.0: +source-map@^0.6.0: version "0.6.1" resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@^0.7.0: version "0.7.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.6.tgz#a3658ab87e5b6429c8a1f3ba0083d4c61ca3ef02" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz" integrity sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== +source-map@~0.6.0: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + space-separated-tokens@^2.0.0: version "2.0.2" resolved "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz" @@ -8844,22 +8743,45 @@ srcset@^4.0.0: resolved "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz" integrity sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw== -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - "statuses@>= 1.4.0 < 2": version "1.5.0" resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + std-env@^3.7.0: version "3.10.0" resolved "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz" integrity sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg== -string-width@^4.1.0, string-width@^4.2.0: +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +string-width@^4.1.0: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.2.0: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -8877,20 +8799,6 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - stringify-entities@^4.0.0: version "4.0.4" resolved "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz" @@ -8944,14 +8852,14 @@ strip-json-comments@~2.0.1: style-to-js@^1.0.0: version "1.1.21" - resolved "https://registry.yarnpkg.com/style-to-js/-/style-to-js-1.1.21.tgz#2908941187f857e79e28e9cd78008b9a0b3e0e8d" + resolved "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz" integrity sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ== dependencies: style-to-object "1.0.14" style-to-object@1.0.14: version "1.0.14" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.14.tgz#1d22f0e7266bb8c6d8cae5caf4ec4f005e08f611" + resolved "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz" integrity sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw== dependencies: inline-style-parser "0.2.7" @@ -9010,12 +8918,12 @@ swc-loader@^0.2.6: tapable@^2.0.0, tapable@^2.2.0, tapable@^2.2.1, tapable@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6" + resolved "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz" integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg== terser-webpack-plugin@^5.3.16, terser-webpack-plugin@^5.3.9: version "5.3.16" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz#741e448cc3f93d8026ebe4f7ef9e4afacfd56330" + resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz" integrity sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q== dependencies: "@jridgewell/trace-mapping" "^0.3.25" @@ -9026,7 +8934,7 @@ terser-webpack-plugin@^5.3.16, terser-webpack-plugin@^5.3.9: terser@^5.10.0, terser@^5.15.1, terser@^5.31.1: version "5.44.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.44.1.tgz#e391e92175c299b8c284ad6ded609e37303b0a9c" + resolved "https://registry.npmjs.org/terser/-/terser-5.44.1.tgz" integrity sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw== dependencies: "@jridgewell/source-map" "^0.3.3" @@ -9091,7 +8999,7 @@ trough@^2.0.0: resolved "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz" integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.4.0, tslib@^2.6.0: +tslib@^2, tslib@^2.0.0, tslib@^2.0.3, tslib@^2.6.0, tslib@2: version "2.8.1" resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -9126,19 +9034,19 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@~5.6.2: +typescript@>=4.9.5, typescript@~5.6.2: version "5.6.3" resolved "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz" integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== undici-types@~7.16.0: version "7.16.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz" integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== undici@^7.12.0: version "7.18.2" - resolved "https://registry.yarnpkg.com/undici/-/undici-7.18.2.tgz#6cf724ef799a67d94fd55adf66b1e184176efcdf" + resolved "https://registry.npmjs.org/undici/-/undici-7.18.2.tgz" integrity sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw== unicode-canonical-property-names-ecmascript@^2.0.0: @@ -9255,22 +9163,14 @@ universalify@^2.0.0: resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0, unpipe@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -update-browserslist-db@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz" - integrity sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A== - dependencies: - escalade "^3.2.0" - picocolors "^1.1.1" - update-browserslist-db@^1.2.0: version "1.2.3" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz" integrity sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w== dependencies: escalade "^3.2.0" @@ -9365,7 +9265,7 @@ vfile-location@^5.0.0: vfile-message@^4.0.0: version "4.0.3" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.3.tgz#87b44dddd7b70f0641c2e3ed0864ba73e2ea8df4" + resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz" integrity sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw== dependencies: "@types/unist" "^3.0.0" @@ -9381,7 +9281,7 @@ vfile@^6.0.0, vfile@^6.0.1: watchpack@^2.4.4: version "2.5.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.5.0.tgz#fa115d5ccaa4bf3aa594f586257c0bc4768939fd" + resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.5.0.tgz" integrity sha512-e6vZvY6xboSwLz2GD36c16+O/2Z6fKvIf4pOXptw2rY9MVwE/TXc6RGqxD3I3x0a28lwBY7DE+76uTPSsBrrCA== dependencies: glob-to-regexp "^0.4.1" @@ -9483,12 +9383,12 @@ webpack-merge@^6.0.1: webpack-sources@^3.3.3: version "3.3.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.3.tgz#d4bf7f9909675d7a070ff14d0ef2a4f3c982c723" + resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz" integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== -webpack@^5.88.1, webpack@^5.95.0: +"webpack@^4.0.0 || ^5.0.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.20.0, webpack@^5.88.1, webpack@^5.95.0, webpack@>=2, "webpack@>=4.41.1 || 5.x", webpack@>=5, "webpack@3 || 4 || 5": version "5.104.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.104.1.tgz#94bd41eb5dbf06e93be165ba8be41b8260d4fb1a" + resolved "https://registry.npmjs.org/webpack/-/webpack-5.104.1.tgz" integrity sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA== dependencies: "@types/eslint-scope" "^3.7.7" @@ -9531,7 +9431,7 @@ webpackbar@^6.0.1: std-env "^3.7.0" wrap-ansi "^7.0.0" -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: +websocket-driver@^0.7.4, websocket-driver@>=0.5.1: version "0.7.4" resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== From 5edeed0957cc5cb7e146a34bcbe6015fb4679a79 Mon Sep 17 00:00:00 2001 From: Alexandre LEPETIT <10155402+aelttil@users.noreply.github.com> Date: Tue, 26 May 2026 22:59:35 +0200 Subject: [PATCH 11/15] docs(readme): consolidate translation docs + add Python venv setup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - README.md: collapse the duplicated Translation System section to a short pitch + one critical warning (never edit i18n/ manually) + a link to scripts/README.md (single source of truth). - scripts/README.md: add a Python venv step in the Installation section to avoid polluting the system Python, and a new "Règles importantes" block grouping the warnings previously duplicated in the main README (i18n manual edits, absolute @site/docs image paths, .notranslation). Co-Authored-By: Claude Opus 4.7 (1M context) --- README.md | 66 +++-------------------------------------------- scripts/README.md | 18 ++++++++++++- 2 files changed, 20 insertions(+), 64 deletions(-) diff --git a/README.md b/README.md index 31bf6780..75920222 100644 --- a/README.md +++ b/README.md @@ -177,70 +177,10 @@ python scripts/generate_models_doc/generate_models_doc.py ## 🌍 Translation System -This documentation supports 5 languages: __French (source)__, English, German, Spanish, and Italian. The primary content is written in French (in the `/docs/` directory) and automatically translated using an advanced Python system powered by the __Cloud Temple LLMaaS API__. +The documentation supports 5 languages: __French (source)__, English, German, Spanish, and Italian. The French content in `/docs/` is the source — translations are generated automatically via the **Cloud Temple LLMaaS API**, with SHA-256 change detection so only modified files are re-translated. The API token is passed via the `--token` CLI flag (recommended) or environment variables. -The system uses SHA-256 hashing to intelligently detect modified files, ensuring that only new or changed content is sent for translation. It features a modern command-line interface with real-time progress and detailed statistics. +> ⚠️ **Never edit files in `i18n/` manually** — they are overwritten on each translation run. Always edit the French source in `/docs/`. -### Quick Start - -1. __Install Dependencies__: - - ```bash - cd scripts/translate_py - pip install -r requirements.txt - ``` - -2. __Configure API Access__: - Pass the Cloud Temple LLMaaS token directly on the command line, or keep using environment variables if preferred. The CLI options take precedence over environment variables. - - ```bash - python scripts/translate_py/translate.py --token "$CLOUDTEMPLE_API_KEY" - ``` - - The default API URL is `https://api.ai.cloud-temple.com/v1/chat/completions` and the default translation model is `qwen3.6:27b`. Both can be overridden with `--url` and `--model`. - -3. __Run Translation__: - After adding or modifying content in the `/docs` directory, run the translation from the project root. - - ```bash - # Translate all modified files to all supported languages - python scripts/translate_py/translate.py --token "$CLOUDTEMPLE_API_KEY" - - # Perform a dry run to see what would be translated - python scripts/translate_py/translate.py --dry-run - - # Translate only one language - python scripts/translate_py/translate.py --lang=en --token "$CLOUDTEMPLE_API_KEY" - - # Force retranslation of all files - python scripts/translate_py/translate.py --force --token "$CLOUDTEMPLE_API_KEY" - - # Test API connection - python scripts/translate_py/translate.py --test-api --token "$CLOUDTEMPLE_API_KEY" - ``` - -### How It Works - -The translation system tracks changes via SHA-256 hashes stored in `scripts/translate_py/translation-meta.json`: - -1. When you modify a file in `docs/`, its hash changes -2. `translate.py` detects the mismatch and sends only modified files to the LLMaaS API -3. After successful translation, the new hash is saved → file is marked as "up to date" - -### Important Rules - -> ⚠️ **Never edit files in `i18n/` manually.** Always modify the French source in `docs/` and run `translate.py`. Manual edits in `i18n/` will be overwritten on the next translation run. - -> 🖼️ **Image paths must use absolute Docusaurus paths.** Always reference images with `@site/docs//images/file.png` instead of relative paths (`./images/` or `../images/`). This ensures images resolve correctly in all languages without needing copies in `i18n/`. - -> 💡 **Excluding directories from translation:** Place a `.notranslation` file in any directory under `docs/` to force file **copying** instead of translation (useful for license files, code snippets, etc.). - -### Scripts Overview - -| Script | Purpose | Updates hash? | -|--------|---------|:---:| -| `scripts/translate_py/translate.py` | Main translation (FR → EN/DE/ES/IT via LLMaaS API) | ✅ | -| `scripts/extract_changelog.py` | Generate product changelog in all languages from `maj.js` | ✅ | -| `scripts/generate_models_doc/generate_models_doc.py` | Generate LLMaaS models doc (FR source only) | N/A (triggers retranslation) | +➡️ **Full setup (venv, install, token, usage, rules and troubleshooting):** see the [__Scripts Documentation__](./scripts/README.md). > For a complete list of commands, advanced features, and troubleshooting, please see the detailed [__Scripts Documentation__](./scripts/README.md). diff --git a/scripts/README.md b/scripts/README.md index 2bdc9774..c39bc583 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -63,9 +63,17 @@ Système de traduction Python avancé utilisant l'API Cloud Temple LLMaaS avec u - ✅ **Mode initialisation** : Génération et gestion des métadonnées #### Installation et Configuration + +> 💡 **Recommandé** : créer un environnement virtuel Python pour ne pas polluer le Python système. Le dossier `.venv/` est déjà ignoré par git. Pensez à réactiver le venv à chaque nouvelle session terminal. + ```bash -# Installation des dépendances +# 1. Création d'un environnement virtuel Python (recommandé) cd scripts/translate_py +python3 -m venv .venv +source .venv/bin/activate # macOS / Linux +# .venv\Scripts\activate # Windows (PowerShell / cmd) + +# 2. Installation des dépendances (venv activé, le prompt affiche (.venv)) pip install -r requirements.txt ``` @@ -131,6 +139,14 @@ python translate.py --token "$CLOUDTEMPLE_API_KEY" --model qwen3.6:27b - `--url=` : URL API de traduction - `--model=` : Modèle de traduction +#### ⚠️ Règles importantes + +> ❌ **Ne jamais éditer les fichiers dans `i18n/` manuellement.** Toujours modifier la source française dans `docs/` puis lancer `translate.py`. Toute modification manuelle dans `i18n/` sera **écrasée** au prochain run de traduction. + +> 🖼️ **Chemins d'images en absolu Docusaurus.** Toujours référencer les images via `@site/docs//images/file.png` au lieu de chemins relatifs (`./images/` ou `../images/`). Cela garantit que les images se résolvent correctement dans toutes les langues sans avoir à dupliquer les fichiers dans `i18n/`. + +> 💡 **Exclure un répertoire de la traduction :** placez un fichier `.notranslation` dans le répertoire concerné (voir ci-dessous). + #### Fonctionnalité .notranslation Placez un fichier `.notranslation` dans un répertoire pour forcer la **copie** (au lieu de la traduction) de tous les fichiers de ce répertoire : From acc742e119eec30c9f28610083b6be45b224c893 Mon Sep 17 00:00:00 2001 From: Alexandre LEPETIT <10155402+aelttil@users.noreply.github.com> Date: Wed, 20 May 2026 16:18:29 +0200 Subject: [PATCH 12/15] =?UTF-8?q?fix(openiaas):=20RPO=20r=C3=A9plication?= =?UTF-8?q?=20minimum=2015=20min=20+=20avertissement=20absence=20SLA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Intervalle minimum de réplication passé de 1 minute à 15 minutes - Ajout d'un avertissement expliquant que le RPO est un objectif best effort - Le RPO effectif dépend du taux de changement (change rate) des données - Aucun SLA contractuel n'est associé au RPO --- docs/iaas_opensource/concepts.md | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/docs/iaas_opensource/concepts.md b/docs/iaas_opensource/concepts.md index 42628679..ed2f5685 100644 --- a/docs/iaas_opensource/concepts.md +++ b/docs/iaas_opensource/concepts.md @@ -402,7 +402,7 @@ La réplication Cloud Temple s'appuie sur une infrastructure __qualifiée SecNum |-------------------------|------------------------------------------------------------------------------------------------------------------------------------------------| | Continuité d'activité | Protection de vos services critiques en cas d'incident majeur sur le site principal. | | Protection géographique | Réplication vers une zone de disponibilité distincte, protégeant contre les sinistres localisés. | -| Flexibilité temporelle | Choix de l'intervalle de réplication selon vos besoins : de 1 minute à 24 heures. | +| Flexibilité temporelle | Choix de l'intervalle de réplication selon vos besoins : de 15 minutes à 24 heures. | | Simplicité de gestion | Configuration et surveillance entièrement intégrées à la Console Cloud Temple. | | Conformité SecNumCloud | Infrastructure qualifiée garantissant le plus haut niveau de sécurité pour vos données sensibles. | @@ -420,9 +420,21 @@ La création d'une politique de réplication définit les paramètres de protect | Intervalle | Usage recommandé | RPO (Perte de données max) | |-------------------------|--------------------------------------------|-----------------------------| -| __1 à 59 minutes__ | Applications critiques temps réel | < 1 heure | +| __15 à 59 minutes__ | Applications critiques temps réel | < 1 heure | | __1 à 24 heures__ | Applications métier et environnements standard | < 24 heures | +:::warning[RPO : objectif non garanti contractuellement] +L'intervalle de réplication configuré (par exemple 15 minutes) constitue un **objectif de RPO (Recovery Point Objective)**, et non un engagement contractuel. + +Le RPO effectivement atteint dépend directement du **taux de changement (change rate)** des données sur les machines virtuelles répliquées. Si le volume de données modifiées entre deux cycles de réplication est trop important, le transfert peut ne pas se terminer dans l'intervalle configuré. Dans ce cas, le cycle suivant ne démarrera qu'une fois le précédent achevé, ce qui allonge de facto le RPO réel. + +**En résumé :** +- Le RPO minimum configurable est de **15 minutes**. +- Ce RPO est atteignable uniquement si le taux de changement des données reste compatible avec la bande passante de réplication disponible. +- **Aucun SLA n'est associé au RPO** : il s'agit d'un objectif « best effort » dont le respect dépend des caractéristiques de la charge de travail. +- Pour les charges à fort taux d'écriture (bases de données, journaux transactionnels, etc.), il est recommandé de prévoir un intervalle de réplication plus large et de compléter avec une stratégie de sauvegarde applicative. +::: + #### Association des machines virtuelles Une fois la politique créée, vous pouvez associer vos machines virtuelles à protéger : @@ -455,7 +467,7 @@ Le tableau des réplicas vous permet de visualiser : #### Recommandations par type de charge -- __Applications critiques__ : Réplication toutes les 1-30 minutes pour minimiser la perte de données +- __Applications critiques__ : Réplication toutes les 15-30 minutes pour minimiser la perte de données - __Applications métier__ : Réplication horaire ou bi-horaire selon les besoins - __Environnements de développement__ : Réplication quotidienne généralement suffisante From c9babb6ea76e8c0a6b97d0846268c470a95ae19e Mon Sep 17 00:00:00 2001 From: Alexandre LEPETIT <10155402+aelttil@users.noreply.github.com> Date: Wed, 27 May 2026 00:23:59 +0200 Subject: [PATCH 13/15] chore(i18n): translate changelog + iaas_opensource/concepts to en/de/es/it - changelog.md: resync with FR source (debt from recent dev commits) - iaas_opensource/concepts.md: translate RPO 15 min change from fix(openiaas) commit on this branch - translation-meta.json: update SHA-256 hashes accordingly Co-Authored-By: Claude Opus 4.7 (1M context) --- .../current/changelog.md | 190 ++++---- .../current/iaas_opensource/concepts.md | 431 +++++++++--------- .../current/changelog.md | 180 ++++---- .../current/iaas_opensource/concepts.md | 310 +++++++------ .../current/changelog.md | 194 ++++---- .../current/iaas_opensource/concepts.md | 326 ++++++------- .../current/changelog.md | 163 +++---- .../current/iaas_opensource/concepts.md | 325 ++++++------- scripts/translate_py/translation-meta.json | 18 +- 9 files changed, 1105 insertions(+), 1032 deletions(-) diff --git a/i18n/de/docusaurus-plugin-content-docs/current/changelog.md b/i18n/de/docusaurus-plugin-content-docs/current/changelog.md index fad7c6ca..d5e9f7ef 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/changelog.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/changelog.md @@ -3,164 +3,170 @@ title: Änderungsverfolgung sidebar_position: 2 --- -# Änderungsverfolgung +# Änderungsverlauf -### 4 Mai 2026 : Sicherheitsupdates — Docker-Image (CVE Alpine) +### 26 Mai 2026 : Verbesserung des Übersetzungs-Workflows -- **Sicherheit (Docker)** : Aufnahme von `apk upgrade --no-cache` in die finale Stage `nginx:stable-alpine` der Produktions-Dockerfiles (`Dockerfile` und `Dockerfile.prebuilt`). Dieses Update behebt sämtliche von Harbor/Trivy auf dem Image `3.24.3` erkannten CVEs der Schweregrade Critical und High, die mit den eingefrorenen Alpine-Paketen zusammenhängen: `libcrypto3`, `libssl3`, `libxml2`, `libxslt`, `libexpat`, `libpng`, `zlib`, `c-ares`, `musl`, `xz-libs`, `busybox`, `curl`. Der nächste Build erstellt ein Image, das alle diese Pakete in ihrer jeweils neuesten, gepatchten Version enthält. +- **Übersetzung (Tooling)** : Hinzufügen der Optionen `--token`, `--url` und `--model` zum Python-Skript `scripts/translate_py/translate.py`. Das API-Token kann nun direkt über die Befehlszeile angegeben werden, ohne eine `.env`-Datei neu erstellen zu müssen. CLI-Optionen haben Vorrang vor Umgebungsvariablen. +- **Übersetzung (Konfiguration)** : Aktualisierung des Standard-Übersetzungsmodells auf `qwen3.6:27b`, wobei der Standard-Endpoint für Cloud Temple LLMaaS `https://api.ai.cloud-temple.com/v1/chat/completions` beibehalten wird. +- **Übersetzung (Dry-Run)** : Der Simulations-Workflow bleibt auch ohne API-Token nutzbar, um die zu übersetzenden Dateien vor der tatsächlichen Ausführung zu überprüfen. -### 30. April 2026 : Präzisierungen zur Speicherperformance +### 4. Mai 2026: Sicherheitspatches — Docker-Image (Alpine CVEs) -- **Speicher (IaaS VMware, OpenSource, Bare Metal)** : Hinzufügen der absoluten Obergrenzen für IOPS und maximale Bandbreite für alle Speicherklassen. Diese Informationen ermöglichen eine bessere Dimensionierung der Umgebungen entsprechend den Leistungsanforderungen. +- **Sicherheit (Docker)**: Hinzufügen von `apk upgrade --no-cache` in die finale Stage `nginx:stable-alpine` der Produktions-Dockerfiles (`Dockerfile` und `Dockerfile.prebuilt`). Dieses Update behebt alle von Harbor/Trivy im Image `3.24.3` erkannten Critical- und High-CVEs, die mit den eingefrorenen Alpine-Paketen zusammenhängen: `libcrypto3`, `libssl3`, `libxml2`, `libxslt`, `libexpat`, `libpng`, `zlib`, `c-ares`, `musl`, `xz-libs`, `busybox`, `curl`. Der nächste Build wird ein Image mit allen diesen Paketen in ihrer jeweils neuesten gepatchten Version erzeugen. -### 24. April 2026: Erweiterung der IaaS OpenSource-Sicherungsdokumentation +### 30. April 2026 : Details zu den Speicherleistungen -- **IaaS OpenSource (Sauvegarde)** : Erweiterung des Sicherungsabschnitts mit Details zur technischen Architektur (sauvegarde incrémentale, impact du Thick provisioning sur le stockage), Sicherheit (chiffrement AES-256, isolation réseau), Monitoring und Zeitplanung. Übersetzungen verfügbar in EN/DE/ES/IT. +- **Speicher (IaaS VMware, OpenSource, Bare Metal)** : Hinzufügen der absoluten IOPS- und maximalen Bandbreitengrenzen für alle Speicherklassen. Diese Informationen ermöglichen eine bessere Dimensionierung der Umgebungen entsprechend den Leistungsanforderungen. -### 20. April 2026: Aktualisierung der Dimensionierung für Managed Database +### 24. April 2026: Erweiterung der IaaS OpenSource-Dokumentation zur Sicherung -- **Managed MariaDB & PostgreSQL** : Aktualisierung der verfügbaren maximalen Dimensionierungsprofile für verwaltete Datenbankdienste. +- **IaaS OpenSource (Sicherung)** : Ergänzung des Sicherungsabschnitts um Details zur technischen Architektur (inkrementelle Sicherung, Auswirkungen von Thick Provisioning auf den Speicher), Sicherheit (AES-256-Verschlüsselung, Netzwerkisolation), Monitoring und Zeitplanbeschränkungen. Übersetzungen verfügbar: EN/DE/ES/IT. + +### 20. April 2026 : Aktualisierung der Dimensionierung für Managed Database + +- **Managed MariaDB & PostgreSQL** : Aktualisierung der maximal verfügbaren Dimensionierungsvorlagen für die verwalteten Datenbankdienste. ### 17. April 2026: VM-Instanzen — illustrierte Dokumentation, Tutorials und Übersetzungen -- **VM-Instanzen — Dokumentationserweiterung**: Vollständige Überarbeitung und Illustration der VM-Instanzen-Dokumentation. Der Schnellstartleitfaden (`quickstart.md`) deckt nun den gesamten illustrierten Benutzerpfad ab: Zugriff auf den Bereich, VM-Liste, 9-Schritte-Erstellungsassistent (Instanzfamilie, Verfügbarkeitszone, OS-Vorlage, Layout, Name/Sicherung, Cloud Init, Festplatten, Netzwerk, Übersicht) und Verwaltung der 4 Registerkarten (Informationen, Festplatten, Netzwerk, Snapshots). -- **VM-Instanzen — Tutorials**: Erstellung von 3 dedizierten Tutorials in einem `tutorials/`-Ordner: (1) **Erstellen Ihrer ersten VM** (vollständiger illustrierter Assistent + Cloud Init + zusätzliche Festplatte), (2) **Verwalten von Festplatten** (Hinzufügen über die Konsole + Linux-Partitionierung), (3) **Erstellen und Verwalten von Snapshots** (Erstellung, Wiederherstellung, Löschung + Best Practices und Snapshot/Sicherungs-Vergleich). Die Seitennavigation wird um 3 einzelne Einträge in der Kategorie Tutorials aktualisiert. +- **VM-Instanzen — Dokumentationserweiterung** : Vollständige Überarbeitung und Illustration der VM-Instanzen-Dokumentation. Der Schnellstart-Leitfaden (`quickstart.md`) deckt nun den gesamten illustrierten Benutzerpfad ab: Zugriff auf den Bereich, VM-Liste, 9-Schritte-Erstellungs-Assistent (Instanzfamilie, Verfügbarkeitszone, OS-Vorlage, Schema, Name/Sicherung, Cloud-Init, Datenträger, Netzwerk, Zusammenfassung) und Verwaltung der 4 Registerkarten (Informationen, Datenträger, Netzwerk, Snapshots). +- **VM-Instanzen — Tutorials** : Erstellung von 3 dedizierten Tutorials in einem `tutorials/`-Verzeichnis: (1) **Erste VM erstellen** (vollständiger illustrierter Assistent + Cloud-Init + zusätzlicher Datenträger), (2) **Datenträger verwalten** (Hinzufügen über die Konsole + Linux-Partitionierung), (3) **Snapshots erstellen und verwalten** (Erstellung, Wiederherstellung, Löschung + Best Practices und Vergleich Snapshot/Sicherung). Die Seitennavigation wurde mit 3 einzelnen Einträgen in der Kategorie Tutorials aktualisiert. -### 17. April 2026: Vertragsdokumente, Übersetzungen und terminologische Harmonisierung +### 17. April 2026 : Vertragsdokumente, Übersetzungen und terminologische Harmonisierung -- **Vertragsdokumente — Neustrukturierung** : Die Seite `contracts.md` wurde neu strukturiert, wobei die Hierarchie der Vertragsdokumente an den Seitenanfang gestellt wurde. Dies umfasst die Prioritätsliste der 6 Dokumente (CGVU, Convention SecNumCloud, spezifisches Übereinkommen ¹, PAS ², CPU, DPA) sowie eine Hinweisbox mit vertragsrechtlichen Präzisierungen. +- **Vertragsdokumente — Umstrukturierung** : Die Seite `contracts.md` wurde mit der Hierarchie der Vertragsdokumente am Seitenanfang neu organisiert, einschließlich der Prioritätsliste der 6 Dokumente (CGVU, Convention SecNumCloud, Convention spécifique ¹, PAS ², CPU, DPA) und einem Hinweiskasten mit vertraglichen Präzisierungen. -### 16. April 2026 : Neugestaltung der Navigation, Vertragsdokumente und Updates +### 16. April 2026 : Überarbeitung der Navigation, Vertragsdokumente und Updates - **Navigation — Compute** : Zusammenfassung von VM-Instanzen (Vorschau), IaaS OpenSource und IaaS VMware unter einer einzigen Kategorie **Compute** in der Navigation (PR #277). -- **Navigation — Network** : Zusammenfassung von VPC (Vorschau) und Private Backbone unter einer einzigen Kategorie **Network** in der Navigation. -- **Vertragsdokumente** : Vollständige Neustrukturierung der Vertragsdokumentation – Erstellung einer Hub-Seite `/contracts` (Allgemeine Geschäftsbedingungen, Besondere Bedingungen, SecNumCloud-Servicevereinbarungen, SLA VM-Instanzen) und einer Hub-Seite `/shared-responsibility` (RACI-Matrizen pro Dienst: IaaS, S3, PaaS, Kubernetes, LLMaaS, Netzwerk). Das seitliche Vertragsmenü wird durch eine dedizierte Spalte **Vertraglich** im Footer ersetzt. Übersetzungen verfügbar EN/DE/ES/IT. -- **VM-Instanzen** : Aktualisierung des Service-Level-Agreements (SLA) von 99,9 % auf 99,95 %. -- **IaaS OpenSource** : Hinzufügung eines Hinweises zur maximalen Aufbewahrungsdauer von Backups (maximal 24 Monate, Migration zu Glacier im T1 2027 geplant). +- **Navigation — Netzwerk** : Zusammenfassung von VPC (Vorschau) und Private Backbone unter einer einzigen Kategorie **Netzwerk** in der Navigation. +- **Vertragsdokumente** : Vollständige Neustrukturierung der Vertragsdokumentation — Erstellung einer Hub-Seite `/contracts` (Allgemeine Geschäftsbedingungen, besondere Bedingungen, SecNumCloud-Servicevereinbarungen, SLA für VM-Instanzen) und einer Hub-Seite `/shared-responsibility` (RACI-Matrizen pro Dienst: IaaS, S3, PaaS, Kubernetes, LLMaaS, Netzwerk). Das vertragliche Seitenmenü wird durch eine dedizierte Spalte **Verträge** im Footer ersetzt. Übersetzungen verfügbar in EN/DE/ES/IT. +- **VM-Instanzen** : Aktualisierung der Service-Level-Vereinbarung (SLA) von 99,9 % auf 99,95 %. +- **IaaS OpenSource** : Hinzufügen eines Hinweises zur maximalen Aufbewahrungsdauer von Backups (maximal 24 Monate, Migration zu Glacier geplant für Q1 2027). -### 15. April 2026: Neue Dokumentation zu VM-Instanzen (Cloud Public) +### 15. April 2026: Neue Dokumentation für VM-Instanzen (Cloud Public) -- **VM-Instanzen**: Veröffentlichung der Erstdokumentation zum Dienst VM-Instanzen (en preview), das neue Angebot für geteilte virtuelle Maschinen von Cloud Temple. Die Dokumentation umfasst einen Überblick über den Dienst, technische Konzepte (Service-Klassen Development/General Purpose/Performance, vordefinierte und benutzerdefinierte Vorlagen, Speicher, VPC-Netzwerk, Sicherung) sowie einen vollständigen Schnellstartleitfaden. Der Dienst ist in der Navigation unter der neuen Kategorie **Cloud Public** eingeordnet. +- **VM-Instanzen**: Veröffentlichung der ersten Dokumentation für den Dienst VM-Instanzen (in der Vorschau), ein neues Angebot für gemeinsam genutzte virtuelle Maschinen von Cloud Temple. Die Dokumentation umfasst einen Überblick über den Dienst, technische Konzepte (Serviceklassen Development/General Purpose/Performance, vordefinierte und benutzerdefinierte Vorlagen, Speicher, VPC-Netzwerk, Sicherung) sowie einen vollständigen Einstiegsleitfaden. Der Dienst ist in der Navigation unter einer neuen Kategorie **Cloud Public** organisiert. ### 15. April 2026: Verbesserung der IaaS VMware-Dokumentation — Cluster-Metriken -- **IaaS VMware** : Hinzufügen einer detaillierten Dokumentation zu den Metriken, die in der Ansicht eines VMware-Clusters über die Cloud Temple Console angezeigt werden. Deckt die drei Speicherdiagramme des Clusters ab: **Allozierter Speicher** (quantité totale allouée aux VMs), **Verbrauchter Speicher** (mémoire physique réellement utilisée par les VMs) und **Zuweisung im Worst-Case** (projection de consommation maximale simultanée), mit einer genauen Beschreibung der Bedeutung jedes Indikators zur Vorausplanung des Ressourcenbedarfs. +- **IaaS VMware**: Hinzufügen einer detaillierten Dokumentation zu den Metriken, die in der Ansicht eines VMware-Clusters über die Cloud Temple-Konsole angezeigt werden. Umfasst die drei Speicherdiagramme des Clusters: **Zugewiesener Speicher** (Gesamtmenge, die den VMs zugewiesen ist), **Verbrauchter Speicher** (physischer Speicher, der tatsächlich von den VMs genutzt wird) und **Worst-Case-Zuweisung** (Projektion des maximalen gleichzeitigen Verbrauchs), mit einer präzisen Beschreibung der Bedeutung jedes Indikators zur vorausschauenden Planung des Ressourcenbedarfs. -### 15. April 2026 : Dokumentation zu Managed MariaDB, Managed PostgreSQL und mehrsprachige Korrekturen +### 15. April 2026 : Dokumentation Managed MariaDB, Managed PostgreSQL und mehrsprachige Korrekturen -- **Managed MariaDB** : Veröffentlichung der ersten Dokumentation für den Managed MariaDB-Service (Preview) : Service-Übersicht, technische Konzepte (StandAlone- und Distributed-Architekturen), Schnellstartanleitung. -- **Managed PostgreSQL** : Veröffentlichung der ersten Dokumentation für den Managed PostgreSQL-Service (Preview) : Service-Übersicht, technische Konzepte, Schnellstartanleitung. -- **Mehrsprachige Korrekturen (Bilder)** : Korrektur der Bildreferenzen in den Übersetzungen der Abschnitte Managed Kubernetes und Managed MariaDB für alle Sprachen (EN, DE, ES, IT) — Umstellung von relativen Pfaden `./images/` auf absolute Pfade `@site/docs/...`, um eine korrekte Darstellung in allen Sprachen zu gewährleisten. +- **Managed MariaDB** : Veröffentlichung der Erstdokumentation für den Managed MariaDB-Dienst (in der Vorschau): Vorstellung des Dienstes, technische Konzepte (StandAlone- und Distributed-Architekturen), Schnellstart-Anleitung. +- **Managed PostgreSQL** : Veröffentlichung der Erstdokumentation für den Managed PostgreSQL-Dienst (in der Vorschau): Vorstellung des Dienstes, technische Konzepte, Schnellstart-Anleitung. +- **Mehrsprachige Korrekturen (Bilder)** : Korrektur der Bildreferenzen in den Übersetzungen der Abschnitte Managed Kubernetes und Managed MariaDB für alle Sprachen (EN, DE, ES, IT) — Konvertierung relativer Pfade `./images/` in absolute Pfade `@site/docs/...` zur Sicherstellung einer korrekten Darstellung in allen Sprachen. - **Korrekturen defekter Links** : Behebung mehrerer defekter Links in der Dokumentation: Verweise auf LLMaaS-Lizenzen, Link zur Konsole im rclone-Tutorial (OSS), IAM-Link in der Netzwerkdokumentation (EN), relative Links im Terraform-Abschnitt (EN). -### 15. April 2026 : Neues Modul Kostenmanager +### 15. April 2026 : Neuer Kostenmanager-Modul -- **Konsole (Kostenmanager)** : Hinzufügen der vollständigen Dokumentation des neuen Verbrauchsverfolgungsmoduls, das über die Cloud Temple-Konsole zugänglich ist. Deckt das Dashboard, den Gesamtverbrauch (mit Monatsendprognose), die Aufschlüsselung nach Produkt und Dienstleistung, die zeilenweisen Abrechnungsdetails sowie den Preiskatalog ab. +- **Konsole (Kostenmanager)** : Hinzufügen der vollständigen Dokumentation des neuen Verbrauchsüberwachungsmoduls, das über die Cloud Temple-Konsole zugänglich ist. Umfasst das Dashboard, den Gesamtverbrauch (mit Monatsendprognose), die Aufschlüsselung nach Produkt und Service, die zeilenweisen Abrechnungsdetails und den Preiskatalog. -### 26. März 2026 : Aktualisierung der Liste der Unterauftragnehmer (DPA) +### 26. März 2026 : Aktualisierung der Liste der Auftragsverarbeiter (DPA) -- **Vertraglich** : Aktualisierung der Vertragsanlage zu personenbezogenen Daten (DPA) - Überarbeitung der Liste der Unterauftragnehmer (Streichung von Microsoft Azure und Amazon Web Services, Änderung der Tätigkeit für Iron Mountain) und Ergänzung des Genehmigungsdatums. +- **Vertraglich** : Aktualisierung der vertraglichen Anlage zum Schutz personenbezogener Daten (DPA) - Überarbeitung der Liste der Auftragsverarbeiter (Entfernung von Microsoft Azure und Amazon Web Services, Änderung der Tätigkeit für Iron Mountain) und Hinzufügung des Genehmigungsdatums. -### 19. März 2026: Verbesserungen der IaaS- und Terraform-Dokumentation +### 19. März 2026 : Verbesserungen der IaaS- und Terraform-Dokumentation -- **IaaS OpenSource** : Neuer vollständiger Leitfaden zum Erstellen einer virtuellen Maschine. Das Tutorial deckt die drei verfügbaren Bereitstellungsmethoden (Vorlage, XVA-Import, Marketplace) mit schrittweisen Anleitungen und Empfehlungen für Best Practices ab. -- **IaaS VMware** : Neue Seite, die alle verfügbaren Tutorials zusammenfasst, um die Navigation und das Auffinden der Leitfäden zu erleichtern. -- **Terraform** : Neuer Abschnitt, der erklärt, wie automatisch Benachrichtigungen über neue Versionen des Terraform-Providers über GitHub empfangen werden. +- **IaaS OpenSource** : Hinzufügen eines umfassenden Leitfadens zur Erstellung einer virtuellen Maschine. Das Tutorial deckt die drei verfügbaren Bereitstellungsmethoden ab (Vorlage, XVA-Import, Marketplace) mit Schritt-für-Schritt-Anweisungen und Empfehlungen für bewährte Verfahren. +- **IaaS VMware** : Hinzufügen einer Seite, die alle verfügbaren Tutorials zusammenfasst, um die Navigation und das Auffinden der Leitfäden zu erleichtern. +- **Terraform** : Neuer Abschnitt, der erklärt, wie man automatisch Benachrichtigungen über neue Versionen des Terraform-Providers über GitHub erhält. -### 19. März 2026: DPA-Aktualisierung und HDS-Konformität +### 19. März 2026 : Aktualisierung der DPA und HDS-Konformität -- **Vertraglich** : Aktualisierung des Vertragsanhangs für personenbezogene Daten (DPA) auf Version 1.0. Integration der neuesten Anforderungen der HDS-Zertifizierung (Hébergeur de Données de Santé) und Aktualisierung der Liste der zugelassenen Subunternehmer. Vollständige Übersetzung ins Englische, Deutsche, Spanische und Italienische. +- **Vertraglich** : Aktualisierung der Vertraglichen Anlage zu personenbezogenen Daten (DPA) auf Version 1.0. Integration der neuesten Anforderungen der HDS-Zertifizierung (Hébergeur de Données de Santé) und Aktualisierung der Liste der autorisierten Unterauftragnehmer. Vollständige Übersetzung ins Englische, Deutsche, Spanische und Italienische. -### 21. Februar 2026 : SEO-Optimierung +### 21. Februar 2026 : Verbesserung der Suchmaschinenoptimierung (SEO) -- **SEO** : Korrektur der Produktions-URL (`https://docs.cloud-temple.com`) und des Basispfads (`/`) in der Docusaurus-Konfiguration, um korrekte kanonische URLs für die Google-Indexierung zu gewährleisten. -- **Sitemap** : Aktivierung der automatischen Generierung der Sitemap (`/sitemap.xml`), um das Crawling und die Indexierung durch Suchmaschinen zu verbessern. +- **SEO** : Korrektur der Produktions-URL (`https://docs.cloud-temple.com`) und des Basispfads (`/`) in der Docusaurus-Konfiguration, um korrekte kanonische URLs für die Google-Indizierung zu gewährleisten. +- **Sitemap** : Aktivierung der automatischen Sitemap-Generierung (`/sitemap.xml`) zur Verbesserung des Crawlings und der Indizierung durch Suchmaschinen. - **Robots.txt** : Hinzufügen einer `robots.txt`-Datei, die das vollständige Crawling der Website erlaubt und auf die Sitemap verweist. ### 21. Februar 2026 : Erweiterte Netzwerkkonzepte und mehrsprachige Verbesserungen -- **Netzwerk (Internet)** : Neue Seite zu **erweiterten Konzepten**, die BGP-Communities und die Steuerung der Local Preference im Internet-Backbone von Cloud Temple (AS33930) dokumentiert. Enthält eine Konfigurationsanleitung mit einem Bird-Beispiel. -- **LLMaaS** : Aktualisierung des Modellkatalogs und Hinzufügung des Modell-Lebenszyklus. Aufnahme von LTS-Modellen (Long Term Support). -- **Konsole (Sicherheit)** : Verbesserung der Übersetzungsqualität von Sicherheitswarnungen (anglais, allemand, espagnol, italien). -- **Mehrsprachigkeit** : Übersetzung der neuen Seite zu erweiterten Netzwerkkonzepten in die 4 Sprachen (en, de, es, it) sowie umfassende Verbesserung der Qualität bestehender Übersetzungen. -- **IaaS Bare Metal** : Präzisierungen zum BFS-Volume (Boot from SAN) im Quickstart-Leitfaden hinzugefügt: Volume 1 ist ausschließlich für die OS-Installation vorgesehen, nicht innerhalb derselben AZ teilbar; es wird empfohlen, Daten auf einem zusätzlichen LUN-Volume zu speichern. -- **Objektspeicher (OSS)** : Hinzufügung einer **FAQ**-Seite, die den S3-Zugriff, IP-Whitelists, signierte URLs und empfohlene Anwendungsszenarien abdeckt. +- **Netzwerk (Internet)** : Neue Seite zu **erweiterten Konzepten**, die BGP-Communities und die Steuerung der Local Preference im Internet-Backbone von Cloud Temple (AS33930) dokumentiert. Enthält einen Konfigurationsleitfaden mit einem Bird-Beispiel. +- **LLMaaS** : Aktualisierung des Modellkatalogs und Einführung des Modell-Lebenszyklus. Hinzufügen von LTS-Modellen (Long Term Support). +- **Konsole (Sicherheit)** : Verbesserung der Übersetzungsqualität für Sicherheitswarnungen (Englisch, Deutsch, Spanisch, Italienisch). +- **Mehrsprachigkeit** : Übersetzung der neuen Seite zu erweiterten Netzwerkkonzepten in die 4 Sprachen (en, de, es, it) und allgemeine Verbesserung der Qualität bestehender Übersetzungen. +- **IaaS Bare Metal** : Präzisierungen zum BFS-Volumen (Boot from SAN) im Startleitfaden hinzugefügt: Volume 1 ist der OS-Installation vorbehalten, nicht innerhalb derselben AZ teilbar, mit der Empfehlung, Daten auf einem zusätzlichen LUN-Volumen zu speichern. +- **Objektspeicher (OSS)** : Hinzufügen einer **FAQ**-Seite, die S3-Zugriff, IP-Whitelists, vorab signierte Links und empfohlene Anwendungsszenarien abdeckt. -### 10. Februar 2026 : Preisanpassung LLMaaS +### 10. Februar 2026: Aktualisierung der LLMaaS-Preise -- **LLMaaS** : Globale Aktualisierung der API-Preise (Input : 1,9€/M, Output : 8€/M, Raisonneur : 8€/M) in der gesamten technischen und kommerziellen Dokumentation. +- **LLMaaS** : Umfassende Aktualisierung der API-Preise (Input : 1,9€/M, Output : 8€/M, Raisonneur : 8€/M) in der gesamten technischen und kommerziellen Dokumentation. -### 5. Februar 2026 : Klarstellungen zu den Service-Level-Agreements (SLA) +### 5. Februar 2026: Präzisierungen zu den Service-Level-Vereinbarungen (SLA) -- **Managed Kubernetes** : Vollständige Aktualisierung und Abschluss der Service-Level-Agreements (SLA) für das Managed-Kubernetes-Angebot. +- **Managed Kubernetes**: Vollständige Aktualisierung und Finalisierung der Service-Level-Vereinbarungen (SLA) für das Managed Kubernetes-Angebot. -### 21. Januar 2026: Sicherheitsverbesserungen und Übersetzungen +### 21. Januar 2026 : Sicherheitsverbesserungen und -übersetzungen -- **Console Management** : Aktualisierung der internationalen Übersetzungen (Englisch, Deutsch, Spanisch, Italienisch) für Sicherheitswarnungen in der Management-Konsole. +- **Console Management** : Aktualisierung der internationalen Übersetzungen (anglais, allemand, espagnol, italien) für die Sicherheitswarnungen in der Management-Konsole. ### 19. Januar 2026 : Erweiterung Managed Kubernetes und VPC -- **Managed Kubernetes** : Unterstützung für Knoten **Bare Metal** und **GPUs** (NVIDIA) hinzugefügt. +- **Managed Kubernetes** : Hinzufügen der Unterstützung für **Bare-Metal**-Knoten und **GPUs** (NVIDIA). - **Managed Kubernetes** : Neues Tutorial zur Verwendung von GPUs in einem Kubernetes-Cluster. -- **Managed Kubernetes** : KubeCost wurde durch einen aktuelleren Leitfaden zu **OpenCost** ersetzt. -- **Network (VPC)** : Vollständige Dokumentation des Virtual Private Cloud (VPC)-Diensts, einschließlich High-Availability-Konzepten (HA), Schnellstartanleitungen und Tutorials. -- **Mehrsprachig** : Vollständige Übersetzung des VPC-Diensts und der neuen Kubernetes-Inhalte ins Englische, Deutsche, Spanische und Italienische. +- **Managed Kubernetes** : Ersatz von KubeCost durch einen aktuelleren Leitfaden zu **OpenCost**. +- **Network (VPC)** : Vollständige Dokumentation des Virtual Private Cloud (VPC)-Diensts, einschließlich der Konzepte für hohe Verfügbarkeit (HA), Einstiegsleitfäden und Tutorials. +- **Multilingue** : Vollständige Übersetzung des VPC-Diensts und der neuen Kubernetes-Inhalte ins Englische, Deutsche, Spanische und Italienische. -### 15. Dezember 2025: Stabilisierung und mehrsprachige Korrekturen +### 15. Dezember 2025 : Stabilisierung und mehrsprachige Korrekturen -- **Mehrsprachig (Terraform, LLMaaS, Harbor)** : Wesentliche Korrektur der spanischen, italienischen und deutschen Übersetzungen. Behebung von MDX-Syntaxproblemen (leere Codeblöcke, nicht maskierte Tags), die die Kompilierung der Website verhinderten. -- **Mehrsprachig (Bilder)** : Wiederherstellung der korrekten Bildpfade in der italienischen und deutschen Version für die Abschnitte Bastion und IaaS VMware. -- **Build** : Validierung des Deployments für alle 5 unterstützten Sprachen. +- **Mehrsprachigkeit (Terraform, LLMaaS, Harbor)** : Umfassende Korrektur der Übersetzungen ins Spanische, Italienische und Deutsche. Behebung von MDX-Syntaxproblemen (blocs de code vides, balises non échappées), die die Generierung der Website verhinderten. +- **Mehrsprachigkeit (Images)** : Wiederherstellung der korrekten Bildpfade in den italienischen und deutschen Versionen für die Abschnitte Bastion und IaaS VMware. +- **Build** : Validierung der Bereitstellung für alle 5 unterstützten Sprachen. -### 11. Dezember 2025: Neuerungen im Managed Kubernetes +### 11. Dezember 2025 : Neuigkeiten zu Managed Kubernetes -- **Managed Kubernetes** : Hinzufügen eines neuen Tutorials zur Verwendung der **Gateway API** für das fortgeschrittene Traffic-Management. -- **Managed Kubernetes** : Aktualisierung der Dokumentation zur Quota-Verwaltung (Ceph) und Optimierung der Tools zur Kostenverwaltung (OpenCost). +- **Managed Kubernetes** : Hinzufügen eines neuen Tutorials zur Verwendung von **Gateway API** für das erweiterte Traffic-Management. +- **Managed Kubernetes** : Aktualisierung der Dokumentation zur Quotaverwaltung (Ceph) und Optimierung der Kostenmanagement-Tools (OpenCost). -### 22. November 2025: Neue Funktionen in LLMaaS und globale Verbesserungen +### 22. November 2025: LLMaaS-Neuigkeiten und allgemeine Verbesserungen -- **LLMaaS (OCR)** : Hinzufügen einer vollständigen Dokumentation für **DeepSeek-OCR**, unser neues Modell, das auf die Dokumentenanalyse (PDF, Bilder) spezialisiert ist und strukturierten Text, Tabellen sowie mathematische Formeln extrahieren kann. -- **Mehrsprachig** : Behebung von Barrierefreiheitsproblemen in der italienischen und deutschen Version der Dokumentation. -- **Qualité** : Korrektur der Anzeige von Codeblöcken in den LLMaaS-Tutorials und Wiederherstellung der fehlenden Bilder in der Schnellstartanleitung für VMware IaaS (italienische Version). +- **LLMaaS (OCR)**: Hinzufügen einer vollständigen Dokumentation für **DeepSeek-OCR**, unser neues Modell, das auf die Dokumentenanalyse (PDF, Bilder) spezialisiert ist und strukturierten Text, Tabellen sowie mathematische Formeln extrahieren kann. +- **Mehrsprachigkeit**: Behebung von Zugänglichkeitsproblemen in den italienischen und deutschen Versionen der Dokumentation. +- **Qualität**: Korrektur der Codeblock-Darstellung in den LLMaaS-Tutorials und Wiederherstellung der fehlenden Bilder im IaaS-VMware-Einstiegshandbuch (italienische Version). -### 20. November 2025: Großes PaaS OpenShift-Update +### 20. November 2025: Wichtige PaaS OpenShift-Aktualisierung -- **PaaS OpenShift (PR #194)**: Neugestaltung und vollständige Aktualisierung der OpenShift-Dokumentation, einschließlich neuer Screenshots sowie einer vollständigen Übersetzung ins Englische, Spanische, Deutsche und Italienische zur Unterstützung unserer internationalen Expansion. +- **PaaS OpenShift (PR #194)** : Vollständige Überarbeitung und Aktualisierung der OpenShift-Dokumentation, einschließlich neuer Screenshots und einer vollständigen Übersetzung ins Englische, Spanische, Deutsche und Italienische zur Unterstützung unserer internationalen Expansion. ### 3. November 2025: Verbesserung der Kubernetes-Tutorials -- **Managed Kubernetes** : Hinzufügung eines neuen Tutorials zum Continuous Deployment mit **ArgoCD** und dem GitOps-Ansatz. -- **Managed Kubernetes** : Überarbeitung und Verbesserung bestehender Tutorials. Die Anleitungen zu Bereitstellung, Netzwerk, Berechtigungsverwaltung (Capsule) und Sicherung (Kasten) wurden erweitert, um den Themen Sicherheit, Governance und Kosten besser gerecht zu werden, in Reaktion auf die Erwartungen von CISO- und Einkäuferprofilen. +- **Managed Kubernetes** : Hinzufügen eines neuen Tutorials zur kontinuierlichen Bereitstellung mit **ArgoCD** und dem GitOps-Ansatz. +- **Managed Kubernetes** : Überarbeitung und Verbesserung der bestehenden Tutorials. Die Anleitungen zur Bereitstellung, zum Netzwerk, zur Berechtigungsverwaltung (Capsule) und zur Sicherung (Kasten) wurden erweitert, um Fragen zu Sicherheit, Governance und Kosten besser zu adressieren, als Reaktion auf die Erwartungen der Profile IT-Sicherheitsverantwortlicher (CISO) und Einkäufer. -### 28. Oktober 2025: Neue Managed-Kubernetes-Dokumentation und diverse Verbesserungen +### 28. Oktober 2025 : Neue Managed Kubernetes-Dokumentation und weitere Verbesserungen -- **Managed Kubernetes (PR #193 & Verbesserungen)**: Ergänzung um eine vollständige Dokumentation für den neuen Managed-Kubernetes-Dienst. Der Abschnitt umfasst eine Präsentation des Dienstes, die technischen Konzepte, eine Schnellstartanleitung, ein erstes Tutorial sowie die Verantwortlichkeitsmatrix (RACI). Der Inhalt wurde erweitert, um den Erwartungen verschiedener Nutzerprofile besser gerecht zu werden. -- **Objektspeicher (PR #190, #189)**: Zwei neue Tutorials für den Objektspeicherdienst wurden hinzugefügt: eines zur Verwaltung von S3-Bucket-Zugriffen und eines zur Nutzung von Restic für Backups. -- **Verträge (PR #191)**: Korrektur und Aktualisierung des Dokuments „Data Processing Agreement“ (DPA). +- **Managed Kubernetes (PR #193 & Verbesserungen)**: Hinzufügen einer umfassenden Dokumentation für den neuen Managed Kubernetes-Dienst. Der Abschnitt enthält eine Vorstellung des Dienstes, technische Konzepte, einen Einstiegsleitfaden, ein erstes Tutorial sowie die Verantwortlichkeitsmatrix (RACI). Der Inhalt wurde erweitert, um den Anforderungen verschiedener Nutzerprofile besser gerecht zu werden. +- **Objektspeicher (PR #190, #189)**: Hinzufügen von zwei neuen Tutorials für den Objektspeicher: eines zur Verwaltung des Zugriffs auf S3-Buckets und eines zur Nutzung von Restic für Backups. +- **Vertragliches (PR #191)**: Korrektur und Aktualisierung des Dokuments "Data Processing Agreement" (DPA). -### 18. Oktober 2025 : Wartung und neue Dokumentationen +### 18. Oktober 2025: Wartung und neue Dokumentationen -- **LLMaaS** : Hinzufügen einer neuen Frage zur FAQ zur Vorstellung der öffentlichen Statusseite ([llmaas.status.cloud-temple.app](https://llmaas.status.cloud-temple.app/)), die eine Echtzeitüberwachung der Verfügbarkeit und Leistung jedes Modells ermöglicht. -- **Contractuel** : Wesentliche Aktualisierung des Data Processing Agreement (DPA v2), um den neuesten gesetzlichen und Compliance-Anforderungen zu entsprechen. -- **Console** : Verbesserung und Präzisierung der Dokumentation zur Auftragsverwaltung. -- **Marketplace** : Hinzufügen eines detaillierten Tutorials zur Anpassung von Virtual-Machine-Images (VM), um wiederverwendbare Templates zu erstellen. -- **LLMaaS** : Hinzufügen einer Anleitung zur Konfiguration der VSCode-CLINE-Erweiterung, um die Sprachmodelle von Cloud Temple direkt aus dem Editor heraus zu nutzen. -- **Objektspeicher (OSS)** : Hinzufügen von Erläuterungen zur Lifecycle-Richtlinie (Lifecycle) für die Datenlöschung. +- **LLMaaS** : Hinzufügen einer neuen Frage zur FAQ zur Vorstellung der öffentlichen Statusseite ([llmaas.status.cloud-temple.app](https://llmaas.status.cloud-temple.app/)), um die Verfügbarkeit und Leistung jedes Modells in Echtzeit zu verfolgen. +- **Vertraglich** : Wesentliche Aktualisierung des Data Processing Agreement (DPA v2), um die neuesten gesetzlichen und Compliance-Anforderungen widerzuspiegeln. +- **Konsole** : Verbesserung und Klarstellung der Dokumentation zur Bestellverwaltung. +- **Marketplace** : Hinzufügen eines detaillierten Tutorials zur Anpassung von virtuellen Maschinen-Images (VM) zur Erstellung wiederverwendbarer Vorlagen. +- **LLMaaS** : Hinzufügen eines Leitfadens zur Konfiguration der VSCode-Erweiterung CLINE, um die Sprachmodelle von Cloud Temple direkt aus dem Editor heraus zu nutzen. +- **Objektspeicher (OSS)** : Hinzufügen von Präzisierungen zur Lebenszyklusrichtlinie (Lifecycle) für die Datenlöschung. - **Objektspeicher (OSS)** : Hinzufügen einer Fehlerbehebungsanleitung für Checksummenfehler (`XAmzContentSHA256Mismatch`) mit AWS CLI und Terraform. -- **LLMaaS** : Aktualisierung der Liste verfügbarer Modelle und Übersetzung von über 50 Dokumenten zur Sicherstellung der Konsistenz. +- **LLMaaS** : Aktualisierung der Liste der verfügbaren Modelle und Übersetzung von über 50 Dokumenten, um die Konsistenz zu gewährleisten. ### 14. August 2025 : Verbesserungen und Korrekturen -- **LLMaaS** : Aktualisierung und Präzisierung der FAQ-Antworten, um technische und strategische Fragen besser zu beantworten. Integration der FAQ in die Navigation. -- **Allgemein** : Korrektur mehrerer interner Navigationslinks in der gesamten Dokumentation für eine flüssigere Nutzererfahrung. +- **LLMaaS** : Aktualisierung und Präzisierung der FAQ-Antworten, um technische und strategische Fragen besser zu beantworten. Hinzufügen der FAQ zur Navigation. +- **Allgemein** : Korrektur mehrerer interner Navigationslinks in der gesamten Dokumentation für ein reibungsloseres Nutzererlebnis. -### Juli 2025 : Wichtige Neuerungen und Updates +### Juli 2025: Neuigkeiten und wichtige Updates - **Objektspeicher (OSS)** : - - Komplette Überarbeitung des Tutorial-Bereichs mit dedizierten Anleitungen für beliebte Tools : AWS CLI, Minio Client (`mc mirror`), Cloudberry Explorer und das Python Boto3 SDK. - - Hinzufügen von Erläuterungen zu den Konzepten von Speicherkonten und Objektsperrung (Object Lock). + - Vollständige Überarbeitung des Tutorial-Bereichs mit dedizierten Anleitungen für beliebte Tools: AWS CLI, Minio Client (`mc mirror`), Cloudberry Explorer und das Python-SDK Boto3. + - Hinzufügen von Details zu den Konzepten von Speicherkonten und der Objektsperrung (Object Lock). - **Open-Source-IaaS** : - - Hinzufügen einer detaillierten Dokumentation zum Management der Hochverfügbarkeit (HA) für Ressourcenpools und virtuelle Maschinen. + - Hinzufügen einer detaillierten Dokumentation zur Verwaltung der Hochverfügbarkeit (HA) für Ressourcenpools und virtuelle Maschinen. - **Konsole** : - Aktualisierung der Seite für Sicherheitswarnungen mit den neuesten Schwachstellen. - **Netzwerk** : @@ -171,9 +177,9 @@ sidebar_position: 2 - Validierung der vollständigen Testsuite. - Korrektur und Validierung der RAG-Pipelines mit FAISS und Qdrant. - Erweiterung der Tutorials um detailliertere technische Erklärungen. -- Hinzufügen eines Abschnitts zur Prompt-Sicherheit und zum Modelllebenszyklus in den Konzepten. -- Verbesserung der RAG-Erklärungsseite mit Diagrammen und Details zu den Embedding-Modellen. -- Aktualisierung der API-Dokumentation, der Schnellstartanleitung und der Servicepräsentation. -- Hinzufügen des Pricings für den Audio-Transkriptions-Endpoint. -- Hinzufügen des voraussichtlichen Zeitplans für den Modelllebenszyklus. +- Hinzufügen eines Abschnitts zur Prompt-Sicherheit und zum Lebenszyklus der Modelle in den Konzepten. +- Verbesserung der RAG-Erklärungsseite mit Diagrammen und Details zu Embedding-Modellen. +- Aktualisierung der API-Dokumentation, des Startguides und der Service-Präsentation. +- Hinzufügen der Preisgestaltung für das Audio-Transkriptions-Endpoint. +- Hinzufügen des vorausschauenden Zeitplans für den Lebenszyklus der Modelle. - Hinzufügen der Verantwortlichkeitsmatrix für das LLMaaS-Angebot. \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md b/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md index 87cfcf90..c820f369 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md @@ -2,494 +2,505 @@ title: Konzepte --- -Das __IaaS (Infrastructure As A Service)__ von Cloud Temple wurde entwickelt, um den kritischen Anforderungen an Geschäftskontinuität und Disaster Recovery gerecht zu werden, mit besonderem Fokus auf anspruchsvolle Branchen wie Industrie, Banken und Versicherungswesen. Basierend auf modernsten Technologien gewährleistet diese Infrastruktur maximale Verfügbarkeit und optimale Leistung für Ihre kritischen Workloads. +Das __IaaS (Infrastructure As A Service)__-Angebot von Cloud Temple wurde entwickelt, um kritische Anforderungen an die Geschäftskontinuität und Notfallwiederherstellung zu erfüllen, mit besonderem Fokus auf anspruchsvolle Branchen wie Industrie, Banken und Versicherungen. Auf Basis modernster Technologien garantiert diese Infrastruktur eine maximale Verfügbarkeit und optimale Leistung für Ihre kritischen Workloads. ## Eine vertrauenswürdige Technologieplattform -Die IaaS-Plattform von Cloud Temple basiert auf international renommierten Technologiepartnern: +Die IaaS-Plattform von Cloud Temple stützt sich auf international renommierte Technologiepartner: -- Computing : __CISCO UCS__. -- Storage : __IBM Spectrum Virtualize__, __IBM FlashSystem__ für den Blockspeicher und __DELL ECS__ für den Objektspeicher. -- Netzwerk : __JUNIPER__. -- Virtualisierung : __Stack Opensource__, das eine zuverlässige und bewährte Grundlage für die Verwaltung Ihrer Cloud-Umgebungen bietet. +- Rechenleistung: __CISCO UCS__. +- Speicher: __IBM Spectrum Virtualize__, __IBM FlashSystem__ für Blockspeicher und __DELL ECS__ für Objektspeicher. +- Netzwerk: __JUNIPER__. +- Virtualisierung: __OpenStack__, das eine zuverlässige und erprobte Grundlage für die Verwaltung Ihrer Cloud-Umgebungen bietet. -Diese Architektur basiert auf dem __VersaStack__-Modell, einer Partnerschaft zwischen Cisco und IBM, die eine umfassende Kompatibilität mit den führenden Softwareherstellern gewährleistet. +Diese Architektur basiert auf dem __VersaStack__-Modell, einer Allianz zwischen Cisco und IBM, die eine breite Kompatibilität mit führenden Softwareherstellern gewährleistet. ## Eine dedizierte und automatisierte Infrastruktur -Obwohl sie vollständig durch APIs und einen Terraform-Provider automatisiert ist, bietet das IaaS-Produkt von Cloud Temple eine einzigartige Infrastruktur: +Obwohl vollständig automatisiert dank APIs und einem Terraform-Provider, bietet das IaaS-Produkt von Cloud Temple eine einzigartige Infrastruktur: -- __Dedizierte Ressourcen__: Compute-Blades, Speichervolumes und Software-Stacks (Virtualisierung, Backup, Firewalling usw.) werden niemals zwischen Kunden gemeinsam genutzt. -- __Maximale Vorhersagbarkeit__: Sie haben die Kontrolle über die Virtualisierungsraten, die IOPS-Belastung des Speichers und profitieren von einer klaren, monatlichen verbrauchsabhängigen Abrechnung. +- __Dedizierte Ressourcen__ : Die Compute-Blades, Speichervolumes und Software-Stacks (Virtualisierung, Backup, Firewalling usw.) werden niemals zwischen Kunden gemeinsam genutzt. +- __Maximale Vorhersehbarkeit__ : Sie behalten die Virtualisierungsquoten, die IOPS-Belastung auf dem Speicher im Blick und profitieren von einer transparenten, monatlichen Verbrauchsabrechnung. -Die Plattform ist von der [ANSSI](https://www.ssi.gouv.fr/) mit dem __SecNumCloud__-Label zertifiziert, was ein hohes Maß an Automatisierung und Sicherheit garantiert. +Die Plattform ist von der [ANSSI](https://www.ssi.gouv.fr/) als __SecNumCloud__ zertifiziert, was ein hohes Maß an Automatisierung und Sicherheit garantiert. ## Hauptfunktionen -- Dedizierte und On-Demand-Rechenressourcen (CPU, RAM). -- On-Demand-Speicher (mehrere Klassen verfügbar). +- Dedizierte und bedarfsgerechte Rechenressourcen (CPU, RAM). +- Bedarfsgerechter Speicher (mehrere Klassen verfügbar). - Netzwerkressourcen (Internet, private Netzwerke). -- Cross-Backups mit konfigurierbarer Aufbewahrungsfrist. +- Cross-Region-Backups mit konfigurierbarer Aufbewahrungsfrist. - Asynchrone Replikation für Speicher oder virtuelle Maschinen. -- Steuerung über die [Console](../console/console.md) oder im Infrastructure-as-Code-Modell über APIs und den Terraform-Provider. +- Steuerung über die [Console](../console/console.md) oder im Infrastructure-as-Code-Modus dank APIs und dem Terraform-Provider. ## Vorteile | Vorteil | Beschreibung | |---------------------|------------------------------------------------------------------------------------------------------------------------------------------------| | Digitales Vertrauen | Datenhosting in Frankreich und DSGVO-Konformität. | -| Sicherheit | Hochsichere Plattform, qualifiziert nach __SecNumCloud__, __HDS__ (Hosting von Gesundheitsdaten), __ISO 27001__ und __ISAE 3402 Typ II__. | -| Hohe Verfügbarkeit | Verfügbarkeitsrate der Plattform von 99,99 %, monatlich gemessen, inklusive Wartungsfenster. | -| Resilienz | Umsetzung von Plänen zur Geschäftskontinuität oder zum Business Continuity Management je nach Bedarf. | -| Automatisierung | Vollständig automatisierte Plattform, konzipiert für die Integration in ein Programm zur digitalen Transformation. | -| On-Demand | Ressourcen bei Bedarf verfügbar. | +| Sicherheit | Hochsichere Plattform, zertifiziert nach __SecNumCloud__, __HDS__ (Hébergement des Données de Santé), __ISO 27001__ und __ISAE 3402 Type II__. | +| Hohe Verfügbarkeit | Plattformverfügbarkeit von 99,99 %, monatlich gemessen, einschließlich Wartungsfenster. | +| Resilienz | Implementierung von Betriebskontinuitäts- oder Disaster-Recovery-Plänen nach Bedarf. | +| Automatisierung | Vollständig automatisierte Plattform, konzipiert zur Integration in ein Digitalisierungsprogramm. | +| On-Demand | Ressourcen bedarfsgerecht verfügbar. | ## Regionen und Verfügbarkeitszonen Das Produkt OpenIaaS wird in einer Verfügbarkeitszone bereitgestellt. Eine Verfügbarkeitszone ist Teil einer Region. -Diese Bereitstellungsart ermöglicht die Auswahl des Standorts der Cluster und deren Verteilung auf verschiedene Verfügbarkeitszonen (AZ). -Dies bietet eine bessere Lastverteilung, maximiert die Redundanz und erleichtert die Einrichtung eines Disaster-Recovery-Plans (DRP) im Falle eines Vorfalls. +Diese Bereitstellungsart ermöglicht die Auswahl des Cluster-Standorts und deren Verteilung auf verschiedene Verfügbarkeitszonen (AZ). +Dies bietet eine bessere Lastverteilung, maximiert die Redundanz und erleichtert die Implementierung eines Notfallwiederherstellungsplans (DRP) im Störungsfall. --- ## Compute-Blade-Klassen -Die für das Bare-Metal-Angebot verfügbaren Compute-Blades bieten ein Leistungsspektrum, um unterschiedliche Anforderungen zu erfüllen: +Die für das Bare-Metal-Angebot verfügbaren Compute Blades bieten eine Reihe von Leistungsvarianten, um verschiedenen Anforderungen gerecht zu werden: | Referenz | RAM __(1)__ | Taktfrequenz __(2)__ | Anzahl der Kerne / Threads | Konnektivität __(3)__ | GPU __(4)__ | |-----------------------|--------------|-------------------------------------------|---------------------------|----------------------|----------------------| -| __ECO__ | 384 GB | 2,20/3,0 GHz (Silver 4114 oder gleichwertig) | 20 / 40 Threads | 2 X 10 Gbit/s | - | -| __STANDARD__ | 384 GB | 2,40/3,4 GHz (Silver 4314 oder gleichwertig) | 32 / 64 Threads | 2 X 25 Gbit/s | - | -| __ADVANCE__ | 768 GB | 2,80/3,5 GHz (Gold 6342 oder gleichwertig) | 48 / 96 Threads | 2 X 25 Gbit/s | - | -| __PERFORMANCE 1__ | 384 GB | 3,20/3,6 GHz (Xeon E-53I5Y oder gleichwertig) | 16 / 32 Threads | 2 X 25 Gbit/s | - | -| __PERFORMANCE 2__ | 768 GB | 3,00/3,6 GHz (Gold 6354 oder gleichwertig) | 36 / 72 Threads | 2 X 25 Gbit/s | - | -| __PERFORMANCE 3__ | 1536 GB | 2,60/3,5 GHz (Gold 6348 oder gleichwertig) | 56 / 112 Threads | 2 X 25 Gbit/s | - | -| __PERFORMANCE 4__ | 512 GB | 2,50/4,1 GHz (Intel 6426Y oder gleichwertig) | 32 / 64 Threads | 2 X 25 Gbit/s | 2 x NVIDIA L40S 48 GB | +| __ECO__ | 384 GB | 2.20/3.0 GHz (Silver 4114 oder äquivalent) | 20 / 40 Threads | 2 X 10 Gbit/s | - | +| __STANDARD__ | 384 GB | 2.40/3.4 GHz (Silver 4314 oder äquivalent) | 32 / 64 Threads | 2 X 25 Gbit/s | - | +| __ADVANCE__ | 768 GB | 2.80/3.5 GHz (Gold 6342 oder äquivalent) | 48 / 96 Threads | 2 X 25 Gbit/s | - | +| __PERFORMANCE 1__ | 384 GB | 3.20/3.6 GHz (Xeon E-53I5Y oder äquivalent) | 16 / 32 Threads | 2 X 25 Gbit/s | - | +| __PERFORMANCE 2__ | 768 GB | 3.00/3.6 GHz (Gold 6354 oder äquivalent) | 36 / 72 Threads | 2 X 25 Gbit/s | - | +| __PERFORMANCE 3__ | 1536 GB | 2.60/3.5 GHz (Gold 6348 oder äquivalent) | 56 / 112 Threads | 2 X 25 Gbit/s | - | +| __PERFORMANCE 4__ | 512 GB | 2.50/4.1 GHz (Intel 6426Y oder äquivalent) | 32 / 64 Threads | 2 X NVIDIA L40S 48 GB | ### Hinweise -- __(1)__ Die Speicherkapazität entspricht dem physisch auf den Blades verfügbaren Speicher und kann nicht geändert werden. +- __(1)__ Die Speichermenge entspricht dem physisch auf den Blades verfügbaren Speicher und kann nicht geändert werden. - __(2)__ Die angegebenen Frequenzen entsprechen der minimalen Basisfrequenz und der Turbofrequenz. -- __(3)__ Die physische Konnektivität wird für den Netzwerkzugriff und den Block-Speicherzugriff gemeinsam genutzt, dank einer konvergierten Cisco UCS-Architektur. -- __(4)__ Die verfügbaren GPUs richten sich nach den neuesten Technologien. Stand 1. Mai 2024 umfasst das Produkt NVIDIA LOVELACE L40S-GPUs. -- __(5)__ Hohe Verfügbarkeit in einem Cluster ist erst ab 2 Knoten verfügbar. +- __(3)__ Die physische Konnektivität wird für den Netzwerkzugriff und den Blockspeicherzugriff über eine konvergierte Cisco-UCS-Architektur gemeinsam genutzt. +- __(4)__ Die verfügbaren GPUs entwickeln sich entsprechend den neuesten Technologien weiter. Zum 1. Mai 2024 umfasst das Produkt NVIDIA LOVELACE L40S-GPUs. +- __(5)__ Die hohe Verfügbarkeit in einem Cluster ist erst ab 2 Knoten verfügbar. -Die Verfügbarkeit der Infrastruktur ist mit 99,9 % garantiert, monatlich gemessen, inklusive Wartungsfenster. Alle SLA-bezogenen Anfragen müssen über ein Incident-Ticket gemeldet werden. +Die Verfügbarkeit der Infrastruktur wird mit 99,9 % garantiert, monatlich gemessen, inklusive Wartungsfenster. Alle SLA-bezogenen Anfragen müssen über ein Incident-Ticket gemeldet werden. --- -## Speicherklassen im Blockmodus +## Blockspeicherklassen -Der verteilte Blockspeicher, basierend auf __IBM Spectrum Virtualize__, bietet ein Leistungsangebot, das auf verschiedene Anwendungsfälle zugeschnitten ist: +Der verteilte Blockspeicher, basierend auf __IBM Spectrum Virtualize__, bietet ein Leistungsspektrum, das an verschiedene Anwendungsfälle angepasst ist: -| Referenz | IOPS/To | Max. IOPS / Volume | Max. Durchsatz / Volume | Hauptanwendung | +| Bezeichnung | IOPS/To | Max. IOPS pro Volume | Maximale Bandbreite pro Volume | Hauptanwendungsbereich | |-----------------------------------|----------------|---------------------------|-----------------------------|----------------------------------------| -| **FLASH - Essential** | 500 | 10 000 IOPS | 512 MB/s | Leichte Workloads | -| **FLASH - Standard** | 1500 | 30 000 IOPS | 1024 MB/s | Standard-Workloads | -| **FLASH - Premium** | 3000 | 30 000 IOPS | 1024 MB/s | Intensive Workloads | -| **FLASH - Enterprise** | 7500 | 30 000 IOPS | 1024 MB/s | Kritische Workloads | -| **FLASH - Ultra** | 15000 | 30 000 IOPS | 1024 MB/s | Ultra-intensive Workloads | -| **MASS STORAGE - Archivierung** | Nicht zutreffend | Nicht garantiert | Nicht garantiert | Kostengünstiger Speicher für die Archivierung | +| **FLASH - Essential** | 500 | 10 000 IOPS | 512 MB/s | Leichte Workloads | +| **FLASH - Standard** | 1500 | 30 000 IOPS | 1024 MB/s | Standard-Workloads | +| **FLASH - Premium** | 3000 | 30 000 IOPS | 1024 MB/s | Intensive Workloads | +| **FLASH - Enterprise** | 7500 | 30 000 IOPS | 1024 MB/s | Kritische Workloads | +| **FLASH - Ultra** | 15000 | 30 000 IOPS | 1024 MB/s | Ultra-intensive Workloads | +| **MASS STORAGE - Archivierung** | Nicht anwendbar | Nicht garantiert | Nicht garantiert | Kostengünstiger Speicher für die Archivierung | -### Eigenschaften +### Merkmale -- **Performance** : Die effektive Performance steigt linear mit dem zugewiesenen Volumen (gemäß dem IOPS/TB-Verhältnis), **bis zur oben definierten absoluten Hardware-Obergrenze**. (Beispielsweise ist ein 10-TB-Volumen der Ultra-Klasse physisch auf 30.000 IOPS und 1024 MB/s begrenzt). -- __Technologie__ : NVMe-Flash mit __Distributed RAID 6__ für eine erhöhte Resilienz. -- __Verfügbarkeit__ : 99,99 %, monatlich gemessen. -- __Einschränkungen__ : Keine Begrenzung bei Lese- oder Schreibvorgängen. Keine automatische Komprimierung oder Deduplizierung, um die vollständige Nutzung der reservierten Volumes zu gewährleisten. +- **Leistung** : Die effektive Leistung steigt linear mit der zugewiesenen Kapazität (gemäß dem IOPS/To-Verhältnis), **bis zur absoluten Hardware-Obergrenze, die oben definiert ist**. (Beispielsweise ist ein 10-To-Volumen in der Ultra-Klasse physisch auf 30 000 IOPS und 1024 MB/s begrenzt). +- __Technologie__ : NVMe-Flash mit __Distributed RAID 6__ für erhöhte Resilienz. +- __Verfügbarkeit__ : 99.99 %, monatlich gemessen. +- __Einschränkungen__ : Keine Begrenzung für Lese- oder Schreibvorgänge. Keine automatische Komprimierung oder Deduplizierung, was die vollständige Nutzung der reservierten Volumes garantiert. -### Sicherheit und Verschlüsselung des Blockspeichers +### Sicherheit und Verschlüsselung des Block-Speichers -Um die Vertraulichkeit Ihrer Daten im Ruhezustand zu gewährleisten, ist unsere gesamte Blockspeicher-Infrastruktur mit einer robusten Hardware-Verschlüsselung ausgestattet. +Um die Vertraulichkeit Ihrer Daten im Ruhezustand zu gewährleisten, integriert unsere gesamte Block-Speicher-Infrastruktur eine robuste Hardwareverschlüsselung. -- __Verschlüsselungstyp__: Die Daten werden direkt auf den Festplatten (`Data At Rest`) unter Verwendung des __XTS-AES 256__-Algorithmus verschlüsselt. -- __Konformität__: Diese Verschlüsselungsmethode entspricht dem __FIPS 1-40-2__-Standard und gewährleistet ein hohes, validiertes Sicherheitsniveau. -- __Funktionsweise__: Die Verschlüsselung wird zum Zeitpunkt des Schreibens der Daten auf das physische Speichermedium angewendet. +- __Verschlüsselungstyp__ : Die Daten werden direkt auf den Festplatten verschlüsselt (`Data At Rest`) unter Verwendung des Algorithmus __XTS-AES 256__. +- __Konformität__ : Diese Verschlüsselungsmethode entspricht dem Standard __FIPS 1-40-2__ und gewährleistet ein validiertes hohes Sicherheitsniveau. +- __Funktionsweise__ : Die Verschlüsselung wird beim Schreiben der Daten auf das physische Speichermedium angewendet. :::warning[Hinweis zur Replikation] -Es ist wichtig zu beachten, dass diese Verschlüsselung die auf den Festplatten gespeicherten Daten schützt. Sie ist nicht "on-the-fly" aktiv, was bedeutet, dass die Daten während der Speicherreplikationsvorgänge zwischen Verfügbarkeitszonen nicht verschlüsselt werden. Die Sicherheit der Übertragungen wird durch dedizierte und gesicherte Kommunikationskanäle gewährleistet. +Es ist wichtig zu beachten, dass diese Verschlüsselung die auf den Festplatten gespeicherten Daten schützt. Sie ist nicht "on-the-fly" aktiv, was bedeutet, dass die Daten während der Speicherreplikationsvorgänge zwischen den Verfügbarkeitszonen nicht verschlüsselt werden. Die Sicherheit der Übertragungen wird durch dedizierte und gesicherte Kommunikationskanäle gewährleistet. ::: --- ## Netzwerke -Das OpenIaaS-Produkt ist kompatibel mit [privaten Netzwerken](../network/private_network) und [Internetzugriff](../network/internet). +Das Produkt OpenIaaS ist kompatibel mit [privaten Netzwerken](../network/private_network) und [Internetzugriff](../network/internet). -Zwei Netzwerktypen stehen bei der Konfiguration einer virtuellen Maschine zur Verfügung. +Zwei Netzwerktypen sind über die Konfiguration einer virtuellen Maschine verfügbar. ### VLAN-Netzwerke -VLAN-Netzwerke werden im Verhältnis von einem VLAN pro Netzwerkkarte bereitgestellt. Wenn Sie mehrere Netzwerke verwenden möchten, genügt es, mehrere Netzwerkkarten zu erstellen. +VLAN-Netzwerke werden mit einem VLAN pro Netzwerkkarte bereitgestellt. Wenn Sie mehrere Netzwerke verwenden möchten, erstellen Sie einfach mehrere Netzwerkkarten. -Die maximale Anzahl von Netzwerkkarten, die auf einer VM erstellt werden können, ist auf 7 beschränkt. +Es gibt eine Begrenzung für die maximale Anzahl von Netzwerkkarten, die auf einer VM erstellt werden können; diese beträgt 7. ### Der VLAN-Trunk -Falls Sie mehr als 7 VLANs durchreichen müssen, müssen Sie den VLAN-Trunk verwenden. -Der VLAN-Trunk überträgt alle Ihre VLANs über eine einzelne Karte. Die Konfiguration der VLAN-IDs erfolgt über virtuelle VLAN-Schnittstellen im Betriebssystem der VM. Die VLAN-IDs sind dieselben, die in der Konsole angezeigt werden. +Falls Sie mehr als 7 VLANs weiterleiten müssen, müssen Sie den VLAN-Trunk verwenden. +Der VLAN-Trunk transportiert alle Ihre VLANs über eine einzige Netzwerkkarte. Die Konfiguration der VLAN-IDs erfolgt über virtuelle VLAN-Schnittstellen im Betriebssystem der VM. Die VLAN-IDs entsprechen denen, die in der Konsole vorhanden und sichtbar sind. ## Sicherung virtueller Maschinen -Das OpenIaaS-Angebot integriert __eine native, nicht deaktivierbare verteilte Backup-Architektur__, die im Rahmen der französischen SecNumCloud-Qualifikation zwingend erforderlich ist. +Das OpenIaaS-Angebot integriert __eine native, verteilte und nicht deaktivierbare Sicherungsarchitektur__, ein obligatorisches Element im Rahmen der französischen SecNumCloud-Qualifikation. -Die Backups werden im [SecNumCloud-zertifizierten Objektspeicher](../storage/oss) gespeichert, was einen optimalen Schutz bei einem schwerwiegenden Ausfall des Produktionsrechenzentrums gewährleistet. Dieser Ansatz ermöglicht die Wiederherstellung Ihrer Daten in einem sekundären Rechenzentrum, selbst bei einem kritischen Vorfall wie einem Brand. +Die Sicherungen werden im [Stockage Objet qualifié SecNumCloud](../storage/oss) gespeichert, was einen optimalen Schutz im Falle eines schwerwiegenden Ausfalls des Produktionsrechenzentrums gewährleistet. Dieser Ansatz ermöglicht die Wiederherstellung Ihrer Daten in einem sekundären Rechenzentrum, selbst bei kritischen Vorfällen wie einem Brand. ### Verfügbare Datensicherungsdienste | Dienst | Beschreibung | |---|---| -| **Inkrementelle Sicherung (Agentless)** | Agentenlose Sicherung über die nativen Mechanismen des Hypervisors in ein entferntes S3-Repository. | -| **Metadatensicherung** | Schutz der Konfigurationen des Virtualisierungspools und des Sicherungsorchestrators — unverzichtbar für das Disaster Recovery. | +| **Inkrementelle Sicherung (Agentless)** | Agentlose Sicherung über die nativen Mechanismen des Hypervisors in ein entferntes S3-Repository. | +| **Sicherung von Metadaten** | Schutz der Konfigurationen des Virtualisierungspools und des Sicherungsorchestrators — unverzichtbar für das Disaster Recovery. | | **Granulare Wiederherstellung** | Wiederherstellung auf Ebene der vollständigen VM, einzelner virtueller Festplatten oder einzelner Dateien möglich. | -| **S3 Multi-AZ-Offloading** | Auslagerung in das Cloud Temple S3-Objektspeicher, der zwischen Verfügbarkeitszonen repliziert wird. | +| **S3 Multi-AZ Offloading** | Auslagerung in den replizierten S3-Objektspeicher von Cloud Temple über Verfügbarkeitszonen hinweg. | -Die Sicherungs- und Wiederherstellungsgeschwindigkeiten hängen von der Änderungsrate in den Umgebungen ab. Die Sicherungsrichtlinie ist für jede virtuelle Maschine vollständig über [die Cloud Temple-Konsole](../console/console.md) konfigurierbar. +Die Sicherungs- und Wiederherstellungsgeschwindigkeiten hängen von der Änderungsrate in den Umgebungen ab. Die Sicherungsrichtlinie ist über [la Console Cloud Temple](../console/console.md) für jede virtuelle Maschine vollständig konfigurierbar. -| Référence | Unité | SKU | +| Referenz | Einheit | SKU | | ---------------------------------------------| ----- | ------------------------------ | -| SICHERUNG - Dienstzugriff | 1 VM | csp:(region):openiaas:backup:vm:v1 | +| SICHERUNG - Servicezugang | 1 VM | csp:(region):openiaas:backup:vm:v1 | --- -### Technische Architektur des Backups +### Technische Architektur der Datensicherung #### Gesamtübersicht -Die Architektur basiert auf einer strikten Trennung zwischen der **Kontrollplane** und der **Datenebene**: Der Backup-Orchestrator wird im Management-Cluster von Cloud Temple gehostet (getrennt und für den Kunden nicht zugänglich), während die Sicherungsdaten in einem entfernten S3-Repository gespeichert werden, das physisch von der Produktionsinfrastruktur getrennt ist. Die Daten werden verschlüsselt zwischen den beiden Komponenten übertragen. +Die Architektur basiert auf einer strikten Trennung zwischen der **Steuerungsebene** und der **Datenebene**: Der Sicherungsorchestrator wird im Management-Cluster von Cloud Temple gehostet (vom Kunden getrennt und für diesen nicht zugänglich), während die Sicherungsdaten in einem entfernten S3-Bucket gespeichert werden, der physisch von der Produktionsinfrastruktur getrennt ist. Die Daten werden zwischen den beiden Komponenten verschlüsselt übertragen. -#### Backup-Orchestrator +#### Sicherungs-Orchestrator -Der Orchestrator wird im Management-Cluster von Cloud Temple bereitgestellt, **der für den Kunden nicht direkt zugänglich ist**. Er orchestriert alle Backup-Jobs und verwaltet die Verschlüsselung. +Der Orchestrator ist im Management-Cluster von Cloud Temple bereitgestellt, **für den Kunden nicht direkt zugänglich**. Er orchestriert alle Sicherungsjobs und verwaltet die Verschlüsselung. -- **Standardrichtlinien** : Auf jeden Tenant werden standardmäßig Backup-Richtlinien angewendet. -- **Benutzerdefinierte Richtlinien** : Der Kunde kann über ein Support-Ticket in der Cloud Temple-Konsole spezifische Frequenzen oder Aufbewahrungsfristen anfordern. +- **Standardrichtlinien** : Sicherungsrichtlinien werden standardmäßig für jeden Tenant angewendet. +- **Benutzerdefinierte Richtlinien** : Der Kunde kann über ein Support-Ticket in der Cloud Temple-Konsole spezifische Intervalle oder Aufbewahrungsfristen anfordern. -#### S3-Fernspeicher +#### Remotespeicher S3 -Sicherungen werden an den [Qualifizierten SecNumCloud-Objektspeicher](../storage/oss) von Cloud Temple gesendet, mit Multi-AZ-Replikation, um die Resilienz gegenüber dem Verlust eines gesamten physischen Standorts zu gewährleisten. +Die Sicherungen werden an den [SecNumCloud-qualifizierten Objektspeicher](../storage/oss) von Cloud Temple gesendet, mit Multi-AZ-Replikation, um die Resilienz gegenüber dem Ausfall eines gesamten physischen Standorts zu gewährleisten. --- -### Sicherungsmechanismus: Inkrementelles Backup +### Sicherungsmechanismus: Incremental Backup -Der Dienst verwendet einen **inkrementellen** Sicherungsmodus. Dieser Modus zielt auf ein **Backup-Repository** (le stockage S3 distant) ab und exportiert nach dem ersten Durchlauf niemals ein vollständiges Backup: Es werden bei jedem Zyklus ausschließlich die **geänderten Datenblöcke** übertragen. +Der Dienst verwendet einen **inkrementellen** Sicherungsmodus. Dieser Modus zielt auf ein **Backup Repository** (den entfernten S3-Speicher) ab und exportiert nach der ersten Sicherung niemals eine vollständige Sicherung: Nur die **geänderten Datenblöcke** werden in jedem Zyklus übertragen. -:::info[Sauvegarde incrémentale vs Réplication] -Die **inkrementelle Sicherung** zielt auf ein entferntes S3-Repository ab und ist für den **langfristigen Schutz** optimiert. Sie darf nicht mit der **Replikation** (Disaster Recovery à chaud) verwechselt werden, die ein lokales Storage-Repository anvisiert — dieser Modus wird durch die Funktion der [réplication de machines virtuelles](#réplication-de-machines-virtuelles) abgedeckt. +:::info[Inkrementelle Sicherung vs. Replikation] +Die **inkrementelle Sicherung** zielt auf ein entferntes S3-Repository ab und ist für den **langfristigen Schutz** optimiert. Sie ist nicht mit der **Replikation** (Hot Disaster Recovery) zu verwechseln, die auf ein lokales Storage Repository abzielt — dieser Modus wird durch die Funktion [réplication de machines virtuelles](#réplication-de-machines-virtuelles) abgedeckt. ::: -#### Technischer Lebenszyklus einer inkrementellen Sicherung +#### Technischer Lebenszyklus eines inkrementellen Backups -Dies sind die aufeinanderfolgenden Schritte, die bei jeder Ausführung eines Sicherungsjobs ausgelöst werden: +Dies sind die aufeinanderfolgenden Schritte, die bei jeder Ausführung eines Backup-Jobs ausgelöst werden: **1. Erstellung des lokalen Snapshots (Quelle)** -Bei Start des Jobs fordert der Orchestrator den Hypervisor auf, einen Snapshot der VM zu erstellen. Dieser Snapshot dient als Vergleichspunkt, um das Delta im Verhältnis zum vorherigen Referenz-Snapshot zu berechnen. +Beim Start des Jobs fordert der Orchestrator den Hypervisor auf, einen Snapshot der VM zu erstellen. Dieser Snapshot dient als Vergleichspunkt zur Berechnung des Deltas im Verhältnis zum vorherigen Referenz-Snapshot. **2. Differenzieller Export über Changed Block Tracking (CBT)** -Der Orchestrator vergleicht den neuen Snapshot mit dem vorherigen Referenz-Snapshot über die CBT-Metadaten. Es werden nur die Datenblöcke extrahiert, die sich seit der letzten Sicherung geändert haben — nicht die gesamte Festplatte. +Der Orchestrator vergleicht den neuen Snapshot mit dem vorherigen Referenz-Snapshot über die CBT-Metadaten. Nur die Datenblöcke, die sich seit dem letzten Backup geändert haben, werden extrahiert — nicht die gesamte Festplatte. -**3. Verschlüsselung und Übertragung zu S3** +**3. Verschlüsselung und Übertragung nach S3** -Die geänderten Blöcke werden **on-the-fly vom Orchestrator verschlüsselt** und anschließend über HTTPS/TLS 1.3 an das entfernte S3-Bucket gesendet. +Die geänderten Blöcke werden **vom Orchestrator in Echtzeit verschlüsselt** und anschließend via HTTPS/TLS 1.3 an den entfernten S3-Bucket gesendet. -**4. Rotation der Snapshots (Coalesce)** +**4. Snapshot-Rotation (Coalesce)** -Nach erfolgreicher Bestätigung des Transfers wird der alte Referenz-Snapshot gelöscht, und der neue Snapshot wird zur Referenz für den nächsten Zyklus. Der Hypervisor löst daraufhin einen **Coalesce**-Prozess (Verschmelzung) aus, um die Daten des alten Deltas wieder in die Kette der virtuellen Festplatten zu integrieren. +Sobald die Übertragung bestätigt ist, wird der alte Referenz-Snapshot gelöscht und der neue Snapshot wird zur Referenz für den nächsten Zyklus. Der Hypervisor löst dann einen **Coalesce**-Prozess (Zusammenführung) aus, um die Daten des alten Deltas wieder in die Kette der virtuellen Festplatten zu integrieren. -:::warning[I/O-Auswirkung des Coalesce] -Der Coalesce-Vorgang ist **I/O-intensiv** auf dem Produktionsspeicher. Er wird automatisch nach jeder erfolgreichen Sicherung ausgelöst. Es wird empfohlen, die Sicherungsfenster in Zeiten geringer Anwendungsbelastung zu planen. +:::warning[I/O-Auswirkung von Coalesce] +Der Coalesce-Vorgang ist **I/O-intensiv** auf dem Produktions-Speicher. Er wird automatisch nach jedem erfolgreichen Backup ausgelöst. Es wird empfohlen, die Backup-Fenster während Zeiten geringer Anwendungslast zu planen. ::: **5. Verwaltung der Aufbewahrung auf S3 (Merge) und Key Backup Interval** -Auf dem S3-Speicher verwaltet der Orchestrator die Rotation der Sicherungen durch **Verschmelzung** (*Merge*) der alten Deltas in die älteste aufbewahrte Vollsicherung gemäß der Aufbewahrungsrichtlinie. +Auf dem S3-Speicher verwaltet der Orchestrator die Backup-Rotation durch **Zusammenführung** (*merge*) der alten Deltas in das älteste gemäß der Aufbewahrungsrichtlinie beibehaltene Vollbackup. -Um die Integrität der Sicherungskette zu gewährleisten, wird regelmäßig eine **Vollsicherung erzwungen** (typischerweise alle 20 Inkrementalsicherungen — *Key Backup Interval*). Dies erstellt einen neuen sauberen Ausgangspunkt und begrenzt die Auswirkungen einer möglichen Beschädigung eines Glieds der Kette. +Um die Integrität der Backup-Kette zu gewährleisten, wird ein Vollbackup **periodisch erzwungen** (typischerweise alle 20 Inkremente — *Key Backup Interval*). Dies erstellt einen neuen, sauberen Startpunkt und begrenzt die Auswirkungen einer möglichen Beschädigung eines Glieds in der Kette. --- -### Auswirkung auf die Dimensionierung des Produktionsspeichers +### Auswirkung auf die Dimensionierung des Produktions-Speichers -:::warning[Kritischer Hinweis — Blockspeicher (Thick Provisioning)] -Das OpenIaaS-Angebot basiert auf hochleistungsfähigem Blockspeicher (Fibre Channel / LVM). Die für die inkrementelle Sicherung verwendeten Snapshots werden im **Thick**-Modus bereitgestellt: Jeder Snapshot verbraucht auf dem Storage Repository (SR) die **vollständige Nenngröße der VM-Festplatte** und nicht nur das tatsächliche Delta. +:::warning[Kritischer Hinweis — Block-Speicher (Thick Provisioning)] +Das OpenIaaS-Angebot basiert auf Hochleistungs-Block-Speicher (Fibre Channel / LVM). Die für die inkrementelle Sicherung verwendeten Snapshots werden im **Thick**-Modus provisioniert: Jeder Snapshot verbraucht im Storage Repository (SR) die **vollständige Nenngröße der VM-Festplatte** und nicht nur das tatsächliche Delta. **Beispiel für den Verbrauch bei einer VM mit einer 50-GB-Festplatte:** -| Komponente | Verbrauch auf dem SR | +| Komponente | Verbrauch im SR | |---|---| | Aktive VM-Festplatte | 50 GB | -| Dauerhafter Referenz-Snapshot (für die Delta-Berechnung) | 50 GB | -| Während des Exports erstellter temporärer Snapshot | 50 GB | -| **Gesamtbedarf während des Sicherungsfensters** | **bis zu 150 GB** | +| Permanenter Referenz-Snapshot (zur Deltaberechnung) | 50 GB | +| Temporärer Snapshot, der während des Exports erstellt wird | 50 GB | +| **Während des Sicherungsfensters erforderlicher Gesamtbedarf** | **bis zu 150 GB** | -**Empfohlene Dimensionierungsregel**: Auf dem Produktionsspeicher sollte im Verhältnis zum Gesamtvolumen der gesicherten VMs **mindestens 50 % freier Speicherplatz** vorgesehen sein, um diese inhärente Mehrbelastung durch den hochleistungsfähigen Blockspeicher zu bewältigen. +**Empfohlene Dimensionierungsregel**: Im Produktions-Speicher sollten **mindestens 50 % Freispeicher** im Verhältnis zum Gesamtvolumen der gesicherten VMs eingeplant werden, um diesen dem Hochleistungs-Block-Speicher inhärenten zusätzlichen Speicherbedarf zu decken. ::: --- -### Sicherheit und Verschlüsselung der Sicherungen +### Sicherheit und Verschlüsselung der Backups -#### Transportverschlüsselung +#### Verschlüsselung während der Übertragung -Alle Kommunikationen zwischen dem Backup-Orchestrator und dem S3-Speicher werden über **HTTPS / TLS 1.3** verschlüsselt. +Alle Kommunikationen zwischen dem Sicherungsorchestrator und dem S3-Speicher werden über **HTTPS / TLS 1.3** verschlüsselt. -#### Verschlüsselung in Ruhe (At Rest) und Schlüsselverwaltung +#### Verschlüsselung im Ruhezustand (At Rest) und Schlüsselverwaltung -Die Verschlüsselung wird vom Backup-Orchestrator **vor** dem Senden der Daten an S3 angewendet. +Die Verschlüsselung wird vom Sicherungsorchestrator **vor** dem Übertragen der Daten an S3 angewendet. | Parameter | Wert | |---|---| | **Algorithmus** | AES-256 oder ChaCha20-Poly1305 | -| **Schlüsselgenerierung** | Automatisch bei der Bereitstellung des Backup-Orchestrators | -| **Schlüsselspeicherung** | Zentrales Cloud Temple Vault (nicht in der Client-Oberfläche sichtbar) | -| **Resilienz** | Bei Verlust des Orchestrators wird der Schlüssel aus dem Vault zurückgespielt, um den Dienst wiederherzustellen | +| **Schlüsselerzeugung** | Automatisch bei der Bereitstellung des Sicherungsorchestrators | +| **Schlüsselspeicherung** | Zentrales Cloud Temple Vault (niemals in der Client-Oberfläche exponiert) | +| **Resilienz** | Im Falle eines Ausfalls des Orchestrators wird der Schlüssel aus dem Vault erneut injiziert, um den Dienst wiederherzustellen | #### Netzwerkisolation (SecNumCloud-Architektur) -Die Backup-Infrastruktur ist so konzipiert, dass sie **strikt abgekapselt** gegenüber den Client-Umgebungen ist : +Die Backup-Infrastruktur ist so konzipiert, dass sie **strikt isoliert** gegenüber den Kundenumgebungen ist : - **Physische Trennung** : Die Netzwerke *Client*, *Administration* und *Backup* basieren auf separaten physischen Backbones und getrennten Routing-Kontexten (VRF). -- **Unmöglichkeit einer lateralen Infektion** : Eine kompromittierte VM kann weder auf den S3-Speicher noch auf den Backup-Orchestrator zugreifen — es existiert kein Netzwerkpfad zwischen ihnen. Der S3 wird niemals in der VM « gemountet ». +- **Unmöglichkeit einer lateralen Infektion** : Eine kompromittierte VM kann weder den S3-Speicher noch den Backup-Orchestrator erreichen — es existiert kein Netzwerkpfad zwischen ihnen. S3 wird niemals in der VM « gemountet ». #### Sichere Administration -Die Administration der Backup-Plattform ist **den Backup-Teams von Cloud Temple vorbehalten** und unterliegt den SecNumCloud-Anforderungen: +Die Administration der Backup-Plattform ist **ausschließlich den Backup-Teams von Cloud Temple vorbehalten** und unterliegt den SecNumCloud-Anforderungen: | Kontrolle | Maßnahme | |---|---| -| **Zugangsbastion** | Zwingender Zugriff über eine gehärtete interne Verwaltungsbastion (Ubuntu Hardened) | -| **Workstation** | Zugang ausschließlich von dedizierten und gesicherten Admin-Laptops | -| **Authentifizierung** | Erforderliche MFA über ein dediziertes Admin-LDAP-Verzeichnis (getrennt vom Büro-LDAP) | +| **Zugriffs-Bastion** | Obligatorischer Zugriff über einen gehärteten internen Administrations-Bastion-Host (Ubuntu Hardened) | +| **Arbeitsstation** | Zugriff ausschließlich über dedizierte und gesicherte Administrations-Laptops | +| **Authentifizierung** | Obligatorische MFA über ein dediziertes Administrations-LDAP-Verzeichnis (getrennt vom Office-LDAP) | --- ### Monitoring und Audit -- **Backup-Protokolle** : für den Kunden direkt in der Cloud Temple Console sichtbar — Status (succès/échec), Datenvolumen, Zeitstempel. -- **Administrator-Zugriffsprotokolle** : Zugriffe auf die Backup-Infrastrukturen (orchestrateur, S3) werden protokolliert und **monatlich auditiert**, um Anomalien zu erkennen. -- **Penetrationstests (Pentests PASSI)** : Die Infrastruktur wird regelmäßig von qualifizierten PASSI-Dienstleistern Penetrationstests unterzogen, um die SecNumCloud-Zertifizierung aufrechtzuerhalten. -- **Physische Sicherheit** : Alle Geräte befinden sich in den SecNumCloud-Zonen (cages physiques dédiées avec contrôle d'accès biométrique) der Cloud Temple Rechenzentren. +- **Sicherungsprotokolle** : für den Kunden direkt in der Cloud Temple-Konsole einsehbar — Status (Erfolg/Fehler), Datenvolumen, Zeitstempel. +- **Administrator-Zugriffsprotokolle** : Zugriffe auf die Backup-Infrastrukturen (Orchestrator, S3) werden protokolliert und **monatlich auditiert**, um jegliche Anomalien zu erkennen. +- **Penetrationstests (Pentests PASSI)** : Die Infrastruktur unterliegt regelmäßigen Penetrationstests durch qualifizierte PASSI-Dienstleister im Rahmen der Aufrechterhaltung der SecNumCloud-Zertifizierung. +- **Physische Sicherheit** : Alle Geräte werden in den SecNumCloud-Zonen (dedizierte physische Käfige mit biometrischer Zugangskontrolle) der Cloud Temple-Rechenzentren beherbergt. --- ### Kompatibilität und Sonderfälle -:::warning[VMs mit kontinuierlichen Festplattenschreibzugriffen] -Bestimmte virtuelle Maschinen sind mit dieser Sicherungstechnologie nicht kompatibel, wenn ihre **Festplattenschreiblast konstant ist** (aktive Datenbanken, Transaktionsprotokolle usw.). Der Hypervisor kann den Snapshot dann nicht abschließen, ohne die VM einzufrieren, was mehrere Stunden dauern kann. +:::warning[VMs à écritures disque continues] +Bestimmte virtuelle Maschinen sind mit dieser Backup-Technologie nicht kompatibel, wenn ihre **Festplattenschreiblasten konstant sind** (bases de données actives, journaux transactionnels, etc.). Der Hypervisor kann den Snapshot dann nicht abschließen, ohne die VM einzufrieren, was mehrere Stunden dauern kann. -Für diese Workloads empfehlen wir, die **Hypervisor-Sicherung durch eine Anwendungssicherung zu ergänzen oder zu ersetzen**: Datenbank-Dumps (pg_dump, mysqldump…), agentenbasierte Sicherungen oder nativer Anwendungsexport. +Für diese Workloads empfehlen wir, das **Hypervisor-Backup durch ein anwendungsbasiertes Backup zu ergänzen oder zu ersetzen** : Datenbank-Dumps (pg_dump, mysqldump…), Agent-Backups oder native Anwendungsexporte. ::: --- ### Erstellen einer Sicherungsrichtlinie -Das Erstellen einer Sicherungsrichtlinie ist eine Verwaltungsaufgabe, die **ausschließlich über eine Supportanfrage** durchgeführt wird, die über das Rettungsring-Symbol oben rechts in der Benutzeroberfläche aufgerufen werden kann. +Das Erstellen einer Sicherungsrichtlinie ist eine administrative Aufgabe, die **ausschließlich über einen Supportantrag** durchgeführt wird, der über das Rettungszeichen-Icon oben rechts in der Benutzeroberfläche zugänglich ist. Die Anfrage muss folgende Angaben enthalten: - Der Name Ihrer Organisation -- Kontaktdaten einer Ansprechperson (E-Mail und Telefonnummer) zur Fertigstellung der Konfiguration +- Die Kontaktdaten einer Ansprechperson (E-Mail und Telefon) zur Finalisierung der Konfiguration - Der Name des Tenants - Der Name der Sicherungsrichtlinie -- Gewünschte Eigenschaften: Häufigkeit, Aufbewahrungsfrist (x Tage, y Wochen, z Monate…) +- Die gewünschten Parameter: Häufigkeit, Retentionszeitraum (x Tage, y Wochen, z Monate…) #### Planungsbeschränkungen -| Beschränkung | Wert | +| Einschränkung | Wert | |---|---| | **Mindestintervall zwischen zwei Ausführungen** | 24 Stunden | -| **Maximale Aufbewahrungsdauer** | 24 Monate | -| **Gleichzeitige Ausführungen pro Richtlinie** | 1 gleichzeitig | +| **Maximale Aufbewahrungsfrist** | 24 Monate | +| **Gleichzeitige Ausführungen pro Richtlinie** | Nur 1 gleichzeitig | :::warning[Eine Richtlinie kann nur einmal gleichzeitig ausgeführt werden] -Jede Backup-Richtlinie ist **mono-instanzig** : Es kann nur eine Ausführung gleichzeitig aktiv sein. +Jede Sicherungsrichtlinie ist **mono-instanzfähig**: nur eine Ausführung kann gleichzeitig aktiv sein. -**Praktische Konsequenz** : Wenn Sie viele virtuelle Maschinen zu einer bestehenden Richtlinie hinzufügen und das Backup vom Vortag zum geplanten Auslösezeitpunkt noch nicht abgeschlossen ist, **wird der neue Zyklus nicht gestartet** — er wird bis zum nächsten Auslösezeitpunkt ignoriert. +**Praktische Auswirkung**: Wenn Sie einer bestehenden Richtlinie viele virtuelle Maschinen hinzufügen und das Backup vom Vortag zum geplanten Startzeitpunkt noch nicht abgeschlossen ist, **startet der neue Zyklus nicht** — er wird bis zur nächsten geplanten Ausführung ignoriert. Um dies zu vermeiden: -- überprüfen Sie die **Ausführungsdauern** Ihrer Jobs in den Protokollen der Cloud Temple Console, -- passen Sie die **Häufigkeit** oder den **Umfang der Richtlinie** an, wenn Sicherungen regelmäßig in das nächste Zeitfenster überlaufen, -- erwägen Sie, **VMs auf mehrere Richtlinien** mit versetzten Zeitplänen aufzuteilen, um große Umfänge zu bewältigen. +- überprüfen Sie die **Laufzeiten** Ihrer Jobs in den Protokollen der Cloud Temple-Konsole, +- passen Sie die **Häufigkeit** oder den **Umfang der Richtlinie** an, wenn die Backups regelmäßig in das nächste Zeitfenster überlaufen, +- erwägen Sie, **VMs auf mehrere Richtlinien zu verteilen** mit versetzten Zeitplänen für große Umfänge. ::: -:::info[Langzeit-Aufbewahrung — zukünftige Verfügbarkeit] -**Die maximale Aufbewahrungsdauer beträgt derzeit 24 Monate.** Eine Langzeit-Aufbewahrung (bis zu 10 Jahre) wird mit dem Launch unseres Produkts **Glacier** eingeführt, der für das **erste Quartal 2027** geplant ist, als Zusatzabonnement. +:::info[Lange Aufbewahrungsfrist — künftige Verfügbarkeit] +**Die maximale Aufbewahrungsfrist beträgt derzeit 24 Monate.** Eine langfristige Aufbewahrung (bis zu 10 Jahre) wird mit der Einführung unseres Produkts **Glacier**, geplant für das **erste Quartal 2027**, als Zusatzabonnement integriert. -Bei derart langen Aufbewahrungsdauern empfehlen wir, **ausschließlich flache Dateien** (Rohdateien, statische Dokumente) sowie **Datenbank-Dumps** zu sichern. Die Wiederherstellung eines vollständigen Servers nach 10 Jahren ist mit erheblichen Risiken verbunden: Viele Dienste oder Abhängigkeiten könnten veraltet oder mit der aktuellen Umgebung inkompatibel sein. +Für derart lange Aufbewahrungsfristen empfehlen wir, **ausschließlich flache Dateien** (Rohdateien, statische Dokumente) sowie **Datenbank-Dumps** zu sichern. Die Wiederherstellung eines vollständigen Servers nach 10 Jahren birgt nämlich erhebliche Risiken: Viele Dienste oder Abhängigkeiten können veraltet oder mit der aktuellen Umgebung inkompatibel geworden sein. -**Sofort verfügbare Alternative** : der Dienst der **agentgestützten Sicherung**, ebenfalls als Zusatzabonnement verfügbar. Wenden Sie sich für weitere Informationen an den Support. +**Sofort verfügbare Alternative**: Der Dienst zur **Agent-basierten Sicherung**, verfügbar als Zusatzabonnement. Wenden Sie sich für weitere Informationen an den Support. ::: -## virtuelle Maschinen +## Virtuelle Maschinen -### Verwaltung von vCPU-Ressourcen +### Verwaltung der vCPU-Ressourcen -Änderungen an den vCPU-Ressourcen erfolgen im kalten Zustand (Maschine ausgeschaltet). Die Plattform unterstützt bis zu 254 vCPUs pro virtuelle Maschine (theoretisches Limit), wobei erfolgreiche Tests mit Linux-VMs mit 128 vCPUs durchgeführt wurden. +Änderungen an den vCPU-Ressourcen erfolgen im kalten Zustand (bei ausgeschalteter Maschine). Die Plattform unterstützt bis zu 254 vCPUs pro virtueller Maschine (theoretisches Limit), wobei erfolgreiche Tests mit Linux-VMs mit 128 vCPUs durchgeführt wurden. -Wichtig ist zu beachten, dass die Unterstützung des Gast-Betriebssystems ein entscheidender Faktor bei der Ressourcenallokation darstellt. Eine Allokation, die die vom Betriebssystem unterstützten Grenzen überschreitet, kann zu erheblichen Performance-Problemen führen. +Es ist wichtig zu beachten, dass die Unterstützung durch das Gastbetriebssystem ein entscheidender Faktor bei der Ressourcenallokation ist. Eine Zuweisung, die die vom Betriebssystem unterstützten Grenzen überschreitet, kann zu erheblichen Leistungsproblemen führen. ### Verwaltung der Speicherressourcen -Speicheranpassungen erfolgen ebenfalls offline. Die folgenden Grenzen gelten: +Änderungen am Speicher erfolgen ebenfalls cold. Die Limits sind wie folgt: -- 1,5 TiB mit Unterstützung von Speicher-Snapshots -- 8 TiB ohne Unterstützung von Speicher-Snapshots -- 16 TiB (theoretisches Limit ohne Sicherheitsunterstützung, abzüglich des Xen und der Kontrolldomäne zugewiesenen RAM) +- 1,5 TiB mit Unterstützung von Speichersnapshots +- 8 TiB ohne Unterstützung von Speichersnapshots +- 16 TiB (theoretisches Limit ohne Sicherheitsunterstützung, abzüglich des für Xen und die Control Domain zugewiesenen RAMs) -Der tatsächlich nutzbare Speicher kann durch das Gastbetriebssystem begrenzt sein. Das Überschreiten der vom Gast-Betriebssystem unterstützten Grenzen kann zu Performanceeinbußen führen. +Der tatsächlich nutzbare Speicher kann durch das Gastbetriebssystem begrenzt sein. Das Überschreiten der vom Gast-OS unterstützten Grenzen kann zu Leistungseinbußen führen. -### Datenträgerverwaltung +### Festplattenverwaltung -- Die maximale Größe eines Datenträgers beträgt 2 TB -- Datenträger verwenden das Standard-VHD-Format -- Die maximale Anzahl virtueller Datenträger pro virtueller Maschine, einschließlich CD-ROM-Laufwerken, beträgt 24 +- Die maximale Größe einer Festplatte beträgt 2 TB +- Die Festplatten verwenden das Standard-VHD-Format +- Die maximale Anzahl virtueller Festplatten pro virtueller Maschine, einschließlich CD-ROM-Laufwerken, beträgt 24 -Datenträger können nach der Erstellung nicht vergrößert werden. Um die Speicherkapazität zu erweitern, muss ein neuer Datenträger erstellt werden. +Eine Größenänderung der Festplatten ist nach der Erstellung nicht möglich. Um die Speicherkapazität zu erweitern, muss eine neue Festplatte erstellt werden. ### Tools für virtuelle Maschinen -Diese Tools werden verwendet, um einen optimalen Betrieb der virtuellen Maschinen zu gewährleisten. Wenn Sie eine Aktion durchführen möchten und eines dieser Tools erforderlich ist, wird auf der Cloud Temple-Konsole eine Meldung angezeigt. - -Um diese Tools zu installieren, können Sie die offiziellen Xen Server-Websites konsultieren, um eine genaue Vorgehensweise für Ihr Betriebssystem zu erhalten. +Diese Tools werden verwendet, um einen optimalen Betrieb der virtuellen Maschinen zu gewährleisten. Wenn Sie eine Aktion ausführen möchten und eines dieser Tools erforderlich ist, wird eine Meldung in der Cloud Temple-Konsole angezeigt. +Um diese Tools zu installieren, können Sie die offiziellen Websites von Xen Server konsultieren, um genaue Anweisungen für Ihr Betriebssystem zu erhalten. #### Management Agent -Der Management Agent ist eine Komponente, die in jeder virtuellen Maschine installiert wird. Er ermöglicht dem Hypervisor eine effizientere Verwaltung der Maschine durch den Zugriff auf mehr Informationen und erlaubt die sauberere Ausführung bestimmter Aktionen. +Der Management-Agent ist eine Komponente, die auf jeder virtuellen Maschine installiert wird. Er ermöglicht dem Hypervisor eine bessere Verwaltung der Maschine durch Zugriff auf zusätzliche Informationen und erlaubt die sauberere Ausführung bestimmter Aktionen. #### PV-Treiber (Paravirtualisierungstreiber) PV-Treiber sind Treiber, die in der virtuellen Maschine installiert werden, um deren Leistung zu verbessern. -Ohne diese Treiber funktioniert die Maschine, jedoch langsamer. Darüber hinaus ermöglichen sie bestimmte erweiterte Funktionen. -PV-Treiber sind nativ in den meisten aktuellen Linux-Kernels installiert. +Ohne diese Treiber funktioniert die Maschine zwar, jedoch langsamer. Darüber hinaus ermöglichen sie bestimmte erweiterte Funktionen. +PV-Treiber sind standardmäßig in den meisten aktuellen Linux-Kerneln enthalten. #### Tools -Die Tools sind eine Reihe von Softwarekomponenten, die die Integration der virtuellen Maschine in die Virtualisierungsinfrastruktur verbessern. +Tools sind eine Sammlung von Softwarekomponenten, die die Integration der virtuellen Maschine mit der Virtualisierungsinfrastruktur verbessern. ## Kataloge Der Katalog ermöglicht die Verwaltung von drei wesentlichen Elementtypen: -- Festplatten-Images (ISO) +- Festplattenimages (ISO) - Konfigurationsvorlagen -- Vorinstallierte Vorlagen für virtuelle Maschinen +- Vorinstallierte VM-Vorlagen -In der Detailansicht einer Vorlage für virtuelle Maschinen können Sie wichtige Informationen wie den Speicherort, die Anzahl der Festplatten oder die Anzahl der Netzwerkadapter einsehen. +In der Detailansicht einer VM-Vorlage können Sie wichtige Informationen wie den Speicherort, die Anzahl der Festplatten oder die Anzahl der Netzwerkadapter einsehen. -Wenn die Anzahl der virtuellen Festplatten als 0 angegeben ist, handelt es sich um eine Konfigurationsvorlage ohne vorinstalliertes Betriebssystem, sodass Sie Ihre eigene benutzerdefinierte Umgebung bereitstellen können. +Wenn die Anzahl der virtuellen Festplatten mit 0 angegeben ist, handelt es sich um eine Konfigurationsvorlage ohne vorinstalliertes Betriebssystem, sodass Sie Ihre eigene benutzerdefinierte Umgebung bereitstellen können. ## Replikation virtueller Maschinen -Die __Replikation virtueller Maschinen__ von Cloud Temple gewährleistet den Schutz und die Kontinuität Ihrer kritischen Daten durch eine automatisierte Kopie Ihrer Umgebungen in eine separate Verfügbarkeitszone. Diese Funktion, die nativ in das IaaS Open Source Produkt integriert ist, erfüllt die strengsten Anforderungen an Geschäftskontinuität und Disaster Recovery. +Die __Replikation virtueller Maschinen__ von Cloud Temple gewährleistet den Schutz und die Kontinuität Ihrer kritischen Daten durch eine automatisierte Kopie Ihrer Umgebungen in eine separate Verfügbarkeitszone. Diese Funktion, die nativ in das Open-Source-IaaS-Produkt integriert ist, erfüllt die strengsten Anforderungen an Geschäftskontinuität und Disaster Recovery. -### Automatisierter und sicherer Schutz +### Automatischer und sicherer Schutz -Die Cloud-Temple-Replikation basiert auf einer __SecNumCloud-zertifizierten Infrastruktur__, die folgende Aspekte gewährleistet: +Die Cloud Temple-Replikation basiert auf einer __SecNumCloud-zertifizierten__ Infrastruktur, die Folgendes garantiert : -- __Asynchrone Replikation__: Kontinuierliche Kopie Ihrer virtuellen Maschinen ohne Beeinträchtigung der Produktionsleistung -- __Geografische Trennung__: Speicherung der Replikate in einer anderen Verfügbarkeitszone als der Quelle -- __Vollständige Automatisierung__: Vollständig automatisierter Prozess über die [Cloud-Temple-Konsole](../console/console.md) -- __Regulatorische Konformität__: Einhaltung der Anforderungen an Datensicherung und Geschäftskontinuität +- __Asynchrone Replikation__ : Kontinuierliche Kopie Ihrer virtuellen Maschinen ohne Beeinträchtigung der Produktionsleistung +- __Geografische Trennung__ : Speicherung der Replikate in einer anderen Verfügbarkeitszone als der Quelle +- __Vollständige Automatisierung__ : Vollständig automatisierter Prozess über die [Console Cloud Temple](../console/console.md) +- __Regulatorische Konformität__ : Einhaltung der Anforderungen an Datensicherung und Geschäftskontinuität ### Vorteile der Replikation -| Vorteil | Beschreibung | -|-------------------------|------------------------------------------------------------------------------------------------------------------------------------------------| -| Geschäftskontinuität | Schutz Ihrer kritischen Dienste bei einem schwerwiegenden Vorfall auf dem primären Standort. | -| Geografischer Schutz | Replikation in eine separate Verfügbarkeitszone zum Schutz vor lokalen Katastrophen. | -| Zeitliche Flexibilität | Wahl des Replikationsintervalls nach Ihren Anforderungen: von 1 Minute bis zu 24 Stunden. | -| Einfache Verwaltung | Konfiguration und Überwachung vollständig in die Cloud Temple Console integriert. | -| SecNumCloud-Konformität | Qualifizierte Infrastruktur, die das höchste Sicherheitsniveau für Ihre sensiblen Daten gewährleistet. | +| Vorteil | Beschreibung | +|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------| +| Geschäftskontinuität | Schutz Ihrer kritischen Dienste im Falle eines schwerwiegenden Vorfalls am Hauptsitz. | +| Geografischer Schutz | Replikation in eine separate Verfügbarkeitszone, die vor lokalen Störungen schützt. | +| Zeitliche Flexibilität | Wahl des Replikationsintervalls nach Ihren Anforderungen: von 15 Minuten bis 24 Stunden. | +| Einfache Verwaltung | Konfiguration und Überwachung sind vollständig in der Cloud Temple-Konsole integriert. | +| SecNumCloud-Konformität| Zertifizierte Infrastruktur, die das höchste Sicherheitsniveau für Ihre sensiblen Daten garantiert. | ### Konfiguration der Replikation #### Replikationsrichtlinien -Die Erstellung einer Replikationsrichtlinie definiert die Schutzeinstellungen für Ihre virtuellen Maschinen: +Die Erstellung einer Replikationsrichtlinie definiert die Schutzparameter für Ihre virtuellen Maschinen: -- __Ziel__ : Auswahl des Zielspeichers in der Verfügbarkeitszone für die Replikation -- __Häufigkeit__ : Replikationsintervall, angepasst an Ihre Wiederherstellungsanforderungen (RPO) -- __Aufbewahrung__ : Anzahl der aufbewahrten Wiederherstellungspunkte +- __Ziel__ : Auswahl des Ziel-Speichers in der Replikations-Verfügbarkeitszone +- __Häufigkeit__ : Replikationsintervall, das an Ihre Wiederherstellungsanforderungen (RPO) angepasst ist +- __Aufbewahrung__ : Anzahl der gespeicherten Wiederherstellungspunkte #### Verfügbare Intervalle -| Intervall | Empfohlene Verwendung | RPO (Maximaler Datenverlust) | +| Intervall | Empfohlene Verwendung | RPO (Perte de données max) | |-------------------------|--------------------------------------------|-----------------------------| -| __1 bis 59 Minuten__ | Kritische Echtzeitanwendungen | < 1 Stunde | -| __1 bis 24 Stunden__ | Geschäftsanwendungen und Standardumgebungen | < 24 Stunden | +| __15 bis 59 Minuten__ | Kritische Echtzeitanwendungen | < 1 Stunde | +| __1 bis 24 Stunden__ | Geschäftsanwendungen und Standardumgebungen | < 24 Stunden | + +:::warning[RPO : objectif non garanti contractuellement] +Das konfigurierte Replikationsintervall (par exemple 15 minutes) stellt ein **RPO-Ziel (Recovery Point Objective)** dar und keine vertragliche Verpflichtung. + +Das tatsächlich erreichte RPO hängt direkt von der **Änderungsrate (change rate)** der Daten auf den replizierten virtuellen Maschinen ab. Wenn das Volumen der zwischen zwei Replikationszyklen geänderten Daten zu groß ist, kann die Übertragung innerhalb des konfigurierten Intervalls nicht abgeschlossen werden. In diesem Fall startet der nächste Zyklus erst nach Abschluss des vorherigen, was das tatsächliche RPO de facto verlängert. + +**Zusammenfassend:** +- Das minimal konfigurierbare RPO beträgt **15 Minuten**. +- Dieses RPO ist nur erreichbar, wenn die Änderungsrate der Daten mit der verfügbaren Replikationsbandbreite kompatibel bleibt. +- **Dem RPO ist kein SLA zugeordnet**: Es handelt sich um ein „Best-Effort“-Ziel, dessen Einhaltung von den Eigenschaften der Arbeitslast abhängt. +- Für Workloads mit hoher Schreibrate (bases de données, journaux transactionnels, etc.) wird empfohlen, ein größeres Replikationsintervall vorzusehen und dies durch eine anwendungsspezifische Backup-Strategie zu ergänzen. +::: -#### Zuordnung der virtuellen Maschinen +#### Zuordnung virtueller Maschinen -Sobald die Richtlinie erstellt wurde, können Sie Ihre zu schützenden virtuellen Maschinen zuordnen: +Sobald die Richtlinie erstellt wurde, können Sie die zu schützenden virtuellen Maschinen zuordnen: -- __Einfache Auswahl__ : Auswahl der VMs über die Konsole -- __Automatische Validierung__ : Überprüfung der Kompatibilität und Voraussetzungen +- __Einfache Auswahl__ : Auswahl der VMs über die Konsolenschnittstelle +- __Automatische Validierung__ : Überprüfung der Kompatibilität und der Voraussetzungen - __Sofortige Aktivierung__ : Automatischer Start der Replikation nach der Konfiguration -### Replikmanagement +### Verwaltung der Replikate -#### Richtlinienübersicht +#### Ansicht der Richtlinien -Die Cloud Temple-Konsole bietet eine zentralisierte Übersicht Ihrer Replikationsrichtlinien mit: +Die Cloud Temple-Konsole bietet eine zentrale Ansicht Ihrer Replikationsrichtlinien mit: - Name und Häufigkeit jeder Richtlinie - Ziel-Verfügbarkeitszone - Zugehöriger Pool und Speicher - Verfügbare Verwaltungsaktionen -#### Replikatsansicht +#### Ansicht der Replikate -Die Replikattabelle ermöglicht es Ihnen, Folgendes anzuzeigen: +Die Replikat-Tabelle ermöglicht es Ihnen, Folgendes anzuzeigen: - Name der replizierten virtuellen Maschinen - Quell- und Zielstandort - Zugehörige Replikationsrichtlinie -- Export der Daten im CSV-Format +- Datenexport im CSV-Format ### Best Practices #### Empfehlungen nach Workload-Typ -- __Kritische Anwendungen__ : Replikation alle 1-30 Minuten, um Datenverlust zu minimieren +- __Kritische Anwendungen__ : Replikation alle 15-30 Minuten zur Minimierung von Datenverlusten - __Geschäftsanwendungen__ : Stündliche oder zweistündliche Replikation je nach Bedarf - __Entwicklungsumgebungen__ : Tägliche Replikation ist in der Regel ausreichend -#### Richtlinienplanung +#### Planung der Richtlinien -- Erstellen Sie separate Richtlinien basierend auf der Kritikalität Ihrer Anwendungen -- Benennen Sie Ihre Richtlinien klar, um das Management zu erleichtern +- Erstellen Sie separate Richtlinien entsprechend der Kritikalität Ihrer Anwendungen +- Benennen Sie Ihre Richtlinien eindeutig, um die Verwaltung zu erleichtern - Überprüfen Sie regelmäßig den Status Ihrer Replikate über die Konsole - Dokumentieren Sie Ihre Replikationsstrategie für Ihre Teams -__Wichtiger Hinweis:__ +__Wichtiger Hinweis :__ -*Die Replikation ersetzt keine vollständige Backup-Strategie. Sie ist eine wesentliche Ergänzung, um die Geschäftskontinuität im Falle eines schwerwiegenden Vorfalls auf Ihrem primären Standort sicherzustellen.* +*Replikation ersetzt keine umfassende Sicherungsstrategie. Sie stellt eine wesentliche Ergänzung dar, um die Geschäftskontinuität im Falle eines schwerwiegenden Vorfalls an Ihrem Hauptstandort sicherzustellen.* -## Hohe Verfügbarkeit +## Hochverfügbarkeit -Die hohe Verfügbarkeit gewährleistet die Betriebskontinuität virtueller Maschinen (VMs) im Falle eines Ausfalls eines physischen Hosts innerhalb eines OpenIaaS-Pools. -Bei hoher Verfügbarkeit (HA) sendet jeder Host im Pool regelmäßig Lebenssignale an seine Peer-Hosts über den gemeinsamen Speicher (Block Storage Heartbeat). Bei ausbleibenden Antworten über einen längeren Zeitraum gilt der Host als ausgefallen. +Die Hochverfügbarkeit gewährleistet die Servicekontinuität virtueller Maschinen (VM) im Falle eines Ausfalls eines physischen Hosts innerhalb eines OpenIaaS-Pools. +Mit der Hochverfügbarkeit (HA) sendet jeder Host im Pool regelmäßig Heartbeat-Signale an seine Peers über den gemeinsamen Speicher (Block Storage Heartbeat). Bei längerem Ausbleiben einer Antwort wird der Host als ausgefallen eingestuft. -Ein als Heartbeat konfiguriertes Block Storage dient als Grundlage zur Überprüfung von Hosts, die nicht mehr antworten. +Ein als Heartbeat ausgewiesener Block Storage dient als Grundlage zur Überprüfung der Hosts, die nicht mehr antworten. -Für eine korrekte Konfiguration der hohen Verfügbarkeit in einem OpenIaaS-Pool ist zwingend erforderlich, dass __mindestens zwei Hosts__ verbunden sind. +Damit die Hochverfügbarkeit in einem OpenIaaS-Pool korrekt konfiguriert werden kann, ist es zwingend erforderlich, __mindestens zwei verbundene Hosts__ vorzuhalten. -Jede VM muss mit einer Prioritätsstufe für den Neustart im Rahmen der hohen Verfügbarkeit konfiguriert werden: +Jede VM muss mit einer Neustart-Prioritätsstufe für die Hochverfügbarkeit konfiguriert werden: -#### Disabled +#### Deaktiviert - Die Hochverfügbarkeit ist nicht konfiguriert. Bei einem Ausfall des Hosts wird die virtuelle Maschine nicht neu gestartet. + Die hohe Verfügbarkeit ist nicht konfiguriert. Im Falle eines Host-Ausfalls wird die virtuelle Maschine nicht neu gestartet. -#### Restart +#### Neustart - Bei einem Host-Ausfall wird die virtuelle Maschine automatisch neu gestartet, sobald im Pool Ressourcen verfügbar sind. Virtuelle Maschinen, die im Modus "restart" konfiguriert sind, werden vorrangig behandelt, vor denen, die im Modus "best-effort" konfiguriert sind. + Im Falle eines Host-Ausfalls wird die virtuelle Maschine automatisch neu gestartet, sobald Ressourcen im Pool verfügbar sind. Virtuelle Maschinen, die im Modus "restart" konfiguriert sind, werden vorrangig behandelt, bevor solche im Modus "best-effort" berücksichtigt werden. #### Best-Effort - Im Falle eines Host-Ausfalls wird die virtuelle Maschine nur dann automatisch neu gestartet, wenn nach der Verarbeitung aller im Modus "restart" konfigurierten virtuellen Maschinen noch Ressourcen verfügbar sind. Der Modus "Best-Effort" unternimmt nur einen Versuch, daher wird die virtuelle Maschine nicht neu gestartet, wenn die Ressourcen nicht ausreichen. \ No newline at end of file + Im Falle eines Host-Ausfalls wird die virtuelle Maschine nur automatisch neu gestartet, wenn nach der Verarbeitung aller im Modus "restart" konfigurierten virtuellen Maschinen noch Ressourcen verfügbar sind. Der Modus "Best-effort" unternimmt nur einen einzigen Versuch, daher wird die virtuelle Maschine nicht neu gestartet, wenn die Ressourcen unzureichend sind. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/changelog.md b/i18n/en/docusaurus-plugin-content-docs/current/changelog.md index 2429e0e2..8ebc8394 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/changelog.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/changelog.md @@ -5,100 +5,106 @@ sidebar_position: 2 # Change Tracking -### May 4, 2026: Security Patches — Docker Image (Alpine CVE) +### May 26, 2026: Translation Workflow Enhancement -- **Security (Docker)**: Added `apk upgrade --no-cache` to the final stage `nginx:stable-alpine` of the production Dockerfiles (`Dockerfile` and `Dockerfile.prebuilt`). This update fixes all Critical and High CVEs detected by Harbor/Trivy on image `3.24.3`, related to the pinned Alpine packages: `libcrypto3`, `libssl3`, `libxml2`, `libxslt`, `libexpat`, `libpng`, `zlib`, `c-ares`, `musl`, `xz-libs`, `busybox`, `curl`. The next build will produce an image with all these packages at their latest patched version. +- **Translation (tooling)** : Added `--token`, `--url`, and `--model` options to the Python script `scripts/translate_py/translate.py`. The API token can now be provided directly via the command line, without recreating a `.env` file. CLI options take precedence over environment variables. +- **Translation (configuration)** : Updated the default translation model to `qwen3.6:27b`, while retaining the default Cloud Temple LLMaaS endpoint `https://api.ai.cloud-temple.com/v1/chat/completions`. +- **Translation (dry-run)** : The simulation workflow remains usable without an API token, to verify files to be translated before any actual execution. -### April 30, 2026: Clarifications on Storage Performance +### May 4, 2026 : Security Patches — Docker Image (Alpine CVEs) -- **Storage (IaaS VMware, OpenSource, Bare Metal)** : Added absolute IOPS and maximum bandwidth caps for all storage classes. This information enables better environment sizing based on performance requirements. +- **Security (Docker)** : Added `apk upgrade --no-cache` to the final `nginx:stable-alpine` stage in the production Dockerfiles (`Dockerfile` and `Dockerfile.prebuilt`). This update fixes all Critical and High CVEs detected by Harbor/Trivy on the `3.24.3` image, related to the pinned Alpine packages: `libcrypto3`, `libssl3`, `libxml2`, `libxslt`, `libexpat`, `libpng`, `zlib`, `c-ares`, `musl`, `xz-libs`, `busybox`, `curl`. The next build will produce an image with all these packages at their latest patched versions. + +### April 30, 2026: Storage Performance Details + +- **Storage (IaaS VMware, OpenSource, Bare Metal)**: Added absolute IOPS and maximum bandwidth caps for all storage classes. This information enables better environment sizing based on performance requirements. ### April 24, 2026: Enrichment of the IaaS OpenSource backup documentation -- **IaaS OpenSource (Backup)**: Enrichment of the backup section with details on the technical architecture (incremental backup, impact of Thick provisioning on storage), security (AES-256 encryption, network isolation), monitoring, and scheduling constraints. Translations available in EN/DE/ES/IT. +- **IaaS OpenSource (Sauvegarde)** : Enhancement of the backup section with details on the technical architecture (sauvegarde incrémentale, impact du Thick provisioning sur le stockage), security (chiffrement AES-256, isolation réseau), monitoring, and scheduling constraints. Translations available in EN/DE/ES/IT. ### April 20, 2026: Managed Database Sizing Update - **Managed MariaDB & PostgreSQL**: Update to the maximum available sizing templates for managed database services. -### April 17, 2026: VM Instances — Illustrated documentation, tutorials, and translations +### April 17, 2026: VM Instances — illustrated documentation, tutorials, and translations -- **VM Instances — Documentation Enhancement**: Complete overhaul and illustration of the VM Instances documentation. The quickstart guide (`quickstart.md`) now covers the entire illustrated user journey: accessing the section, VM list, 9-step creation wizard (instance family, availability zone, OS template, template, name/backup, Cloud Init, disks, network, summary), and management of the 4 tabs (Information, Disks, Network, Snapshots). -- **VM Instances — Tutorials**: Creation of 3 dedicated tutorials in a `tutorials/` folder: (1) **Create your first VM** (complete illustrated wizard + Cloud Init + additional disk), (2) **Manage disks** (addition from the console + Linux partitioning), (3) **Create and manage snapshots** (creation, restoration, deletion + best practices and snapshot/backup comparison). The sidebar navigation is updated with 3 individual entries in the Tutorials category. +- **VM Instances — Documentation Enhancement** : Complete overhaul and illustration of the VM Instances documentation. The getting started guide (`quickstart.md`) now covers the entire illustrated user journey: accessing the section, VM list, 9-step creation wizard (instance family, availability zone, OS template, template, name/backup, Cloud Init, disks, network, summary), and management of the 4 tabs (Information, Disks, Network, Snapshots). +- **VM Instances — Tutorials** : Creation of 3 dedicated tutorials in a `tutorials/` folder : (1) **Create your first VM** (complete illustrated wizard + Cloud Init + additional disk), (2) **Manage disks** (adding from the console + Linux partitioning), (3) **Take and manage snapshots** (creation, restoration, deletion + best practices and snapshot/backup comparison). The sidebar navigation is updated with 3 individual entries in the Tutorials category. -### April 17, 2026: Contractual documents, translations, and terminology harmonization +### April 17, 2026: Contractual Documents, Translations, and Terminology Harmonization -- **Contractual Documents — Restructuring** : The `contracts.md` page is reorganized with the hierarchy of contractual documents at the top of the page, including the priority list of the 6 documents (CGVU, SecNumCloud Agreement, Specific Agreement ¹, PAS ², CPU, DPA) and a contractual details box. +- **Contractual Documents — Restructuring** : The `contracts.md` page has been reorganized with the hierarchy of contractual documents at the top of the page, including the priority list of the 6 documents (CGVU, SecNumCloud Agreement, Specific Agreement ¹, PAS ², CPU, DPA) and a contractual clarifications box. -### April 16, 2026: Navigation overhaul, contractual documents, and updates +### April 16, 2026: Navigation redesign, contractual documents, and updates -- **Navigation — Compute** : Grouping of VM Instances (preview), Open Source IaaS, and VMware IaaS under a single **Compute** category in the navigation (PR #277). +- **Navigation — Compute** : Grouping of VM Instances (preview), OpenSource IaaS, and VMware IaaS under a single **Compute** category in the navigation (PR #277). - **Navigation — Network** : Grouping of VPC (preview) and Private Backbone under a single **Network** category in the navigation. -- **Contractual Documents** : Complete restructuring of contractual documentation — creation of a hub page `/contracts` (General Terms and Conditions, Specific Terms, SecNumCloud Service Agreements, VM Instances SLA) and a hub page `/shared-responsibility` (RACI matrices per service: IaaS, S3, PaaS, Kubernetes, LLMaaS, Network). The contractual sidebar menu is replaced by a dedicated **Contractual** column in the footer. Translations available in EN/DE/ES/IT. -- **VM Instances** : Update of the Service Level Agreement (SLA) commitment from 99.9% to 99.95%. -- **Open Source IaaS** : Addition of a note regarding the maximum backup retention period (maximum 24 months, migration to Glacier scheduled for Q1 2027). +- **Contractual Documents** : Complete restructuring of contractual documentation — creation of a hub page `/contracts` (conditions générales, conditions particulières, conventions de service SecNumCloud, SLA VM instances) and a hub page `/shared-responsibility` (matrices RACI par service : IaaS, S3, PaaS, Kubernetes, LLMaaS, Réseau). The contractual sidebar menu is replaced by a dedicated **Contractual** column in the footer. Translations available in EN/DE/ES/IT. +- **VM Instances** : Service Level Agreement (SLA) updated from 99.9% to 99.95%. +- **OpenSource IaaS** : Added a note regarding the maximum backup retention period (24 mois maximum, migration vers Glacier prévue au T1 2027). ### April 15, 2026: New VM instances documentation (Cloud Public) -- **VM instances** : Initial documentation for the VM instances service (in preview), a new shared virtual machine offering from Cloud Temple. The documentation covers the service overview, technical concepts (Development/General Purpose/Performance service tiers, predefined and custom templates, storage, VPC networking, backup), as well as a complete getting started guide. The service is organized under a new **Cloud Public** category in the navigation. +- **VM instances**: The initial documentation for the VM instances service (in preview) is now live, a new shared virtual machine offering from Cloud Temple. The documentation covers an overview of the service, technical concepts (Development/General Purpose/Performance service classes, predefined and custom templates, storage, VPC networking, backup), as well as a complete getting started guide. The service is organized under a new **Cloud Public** category in the navigation. ### April 15, 2026: IaaS VMware Documentation Improvement — Cluster Metrics -- **IaaS VMware**: Added detailed documentation on the metrics displayed in the VMware cluster view from the Cloud Temple Console. Covers the cluster's three memory graphs: **Allocated Memory** (total amount allocated to VMs), **Consumed Memory** (physical memory actually used by VMs), and **Worst-case Allocation** (projection of maximum simultaneous consumption), with a precise description of what each indicator represents to anticipate resource requirements. +- **IaaS VMware**: Added detailed documentation on the metrics displayed in the VMware cluster view from the Cloud Temple Console. Covers the three cluster memory charts: **Allocated Memory** (total amount allocated to VMs), **Consumed Memory** (physical memory actually used by VMs), and **Worst-Case Allocation** (projection of maximum simultaneous consumption), with a precise description of what each metric represents to anticipate resource needs. -### April 15, 2026: Managed MariaDB and Managed PostgreSQL Documentation and Multilingual Fixes +### April 15, 2026: Managed MariaDB, Managed PostgreSQL Documentation and Multilingual Fixes -- **Managed MariaDB**: Initial documentation for the Managed MariaDB service (in preview) has been published: service overview, technical concepts (StandAlone and Distributed architectures), getting started guide. -- **Managed PostgreSQL**: Initial documentation for the Managed PostgreSQL service (in preview) has been published: service overview, technical concepts, getting started guide. -- **Multilingual fixes (images)**: Fixed image references in the translations of the Managed Kubernetes and Managed MariaDB sections for all languages (EN, DE, ES, IT) — converted relative paths `./images/` to absolute paths `@site/docs/...` to ensure correct rendering across all languages. -- **Broken link fixes**: Resolved several broken links in the documentation: LLMaaS license references, console link in the rclone (OSS) tutorial, IAM link in the networking documentation (EN), relative links in the Terraform section (EN). +- **Managed MariaDB** : Initial documentation for the Managed MariaDB service (in preview) published: service overview, technical concepts (StandAlone and Distributed architectures), getting started guide. +- **Managed PostgreSQL** : Initial documentation for the Managed PostgreSQL service (in preview) published: service overview, technical concepts, getting started guide. +- **Multilingual Fixes (Images)** : Corrected image references in the translations of the Managed Kubernetes and Managed MariaDB sections for all languages (EN, DE, ES, IT) — converted relative paths `./images/` to absolute paths `@site/docs/...` to ensure proper rendering across all languages. +- **Broken Link Fixes** : Resolved several broken links in the documentation: references to LLMaaS licenses, link to the console in the rclone tutorial (OSS), IAM link in the networking documentation (EN), relative links in the Terraform section (EN). ### April 15, 2026: New Cost Manager Module -- **Console (Cost Manager)**: Added complete documentation for the new usage tracking module accessible from the Cloud Temple Console. Covers the dashboard, overall consumption (with end-of-month projection), breakdown by product and service, line-by-line billing details, and the price catalog. +- **Console (Cost Manager)** : Added complete documentation for the new usage tracking module accessible from the Cloud Temple Console. Covers the dashboard, overall consumption (with end-of-month projection), breakdown by product and service, line-by-line billing details, and the price catalog. -### March 26, 2026: Update of the Subcontractor List (DPA) +### March 26, 2026: Update to the Subprocessor List (DPA) -- **Contractual**: Update of the Contractual Annex on Personal Data (DPA) - revision of the subcontractor list (removal of Microsoft Azure and Amazon Web Services, modification of the activity for Iron Mountain) and addition of the authorization date. +- **Contractual** : Update to the Data Processing Agreement (DPA) Contractual Annex - revision of the subprocessor list (removal of Microsoft Azure and Amazon Web Services, modification of the activity for Iron Mountain) and addition of the authorization date. ### March 19, 2026: IaaS and Terraform Documentation Improvements -- **Open Source IaaS** : Added a comprehensive guide for creating a virtual machine. The tutorial covers the three available deployment methods (template, XVA import, Marketplace) with step-by-step instructions and best practices recommendations. -- **VMware IaaS** : Added a page consolidating all available tutorials to facilitate navigation and guide discovery. -- **Terraform** : New section explaining how to automatically receive notifications for new versions of the Terraform Provider via GitHub. +- **Open Source IaaS**: Added a comprehensive guide for creating a virtual machine. The tutorial covers the three available deployment methods (template, XVA import, Marketplace) with step-by-step instructions and best practice recommendations. +- **VMware IaaS**: Added a page aggregating all available tutorials to facilitate navigation and guide discovery. +- **Terraform**: New section explaining how to automatically receive notifications for new versions of the Terraform Provider via GitHub. -### March 19, 2026: DPA Update and HDS Compliance +### March 19, 2026 : DPA Update and HDS Compliance -- **Contractual** : Update of the Contractual Annex on Personal Data (DPA) to version 1.0. Integration of the latest HDS (Health Data Hosting) certification requirements and update of the list of authorized subcontractors. Full translation into English, German, Spanish, and Italian. +- **Contractual** : Update of the Data Processing Agreement (DPA) Contractual Annex to version 1.0. Integration of the latest requirements of the HDS (Health Data Hosting) certification and update of the list of authorized sub-processors. Full translation into English, German, Spanish, and Italian. -### February 21, 2026: SEO Improvement +### February 21, 2026: SEO Improvements -- **SEO** : Fixed the production URL (`https://docs.cloud-temple.com`) and base path (`/`) in the Docusaurus configuration, ensuring correct canonical URLs for Google indexing. -- **Sitemap** : Enabled automatic sitemap generation (`/sitemap.xml`) to improve crawling and indexing by search engines. -- **Robots.txt** : Added a `robots.txt` file allowing full site crawling and pointing to the sitemap. +- **SEO**: Corrected the production URL (`https://docs.cloud-temple.com`) and base path (`/`) in the Docusaurus configuration, ensuring correct canonical URLs for Google indexing. +- **Sitemap**: Enabled automatic sitemap generation (`/sitemap.xml`) to improve crawling and indexing by search engines. +- **Robots.txt**: Added a `robots.txt` file allowing full site crawling and pointing to the sitemap. -### February 21, 2026: Advanced networking concepts and multilingual improvements +### February 21, 2026: Advanced Network Concepts and Multilingual Improvements -- **Networking (Internet)** : New **advanced concepts** page documenting BGP communities and Local Preference control on the Cloud Temple Internet backbone (AS33930). Includes a configuration guide with a Bird example. -- **LLMaaS** : Updated model catalog and added model lifecycle. Added LTS (Long Term Support) models. -- **Console (Security)** : Improved translation quality for security alerts (English, German, Spanish, Italian). -- **Multilingual** : Translation of the new advanced networking concepts page into the 4 languages (en, de, es, it) and overall improvement of existing translation quality. -- **IaaS Bare Metal** : Added clarifications regarding the BFS (Boot from SAN) volume in the getting started guide: Volume 1 is dedicated to OS installation, not shareable within the same AZ, with a recommendation to store data on an additional LUN volume. -- **Object Storage (OSS)** : Added a **FAQ** page covering S3 access, IP whitelists, pre-signed links, and recommended usage scenarios. +- **Network (Internet)**: New **advanced concepts** page documenting BGP communities and Local Preference control on the Cloud Temple Internet backbone (AS33930). Includes a configuration guide with a Bird example. +- **LLMaaS**: Updated model catalog and added model lifecycle. Added LTS (Long Term Support) models. +- **Console (Security)**: Improved translation quality for security alerts (anglais, allemand, espagnol, italien). +- **Multilingual**: Translated the new advanced network concepts page into 4 languages (en, de, es, it) and overall improved the quality of existing translations. +- **IaaS Bare Metal**: Added details on the BFS volume (Boot from SAN) in the boot guide: Volume 1 is dedicated to OS installation, not shareable within the same AZ, with a recommendation to store data on an additional LUN volume. +- **Object Storage (OSS)**: Added a **FAQ** page covering S3 access, IP whitelists, pre-signed links, and recommended use cases. ### February 10, 2026: LLMaaS Pricing Update -- **LLMaaS**: Global API pricing update (Input: 1.9€/M, Output: 8€/M, Reasoner: 8€/M) across all technical and commercial documentation. +- **LLMaaS**: Comprehensive update to API pricing (Input: €1.9/M, Output: €8/M, Reasoner: €8/M) across all technical and commercial documentation. -### February 5, 2026 : Clarifications on Service Level Agreements (SLA) +### February 5, 2026: Details on Service Level Agreements (SLA) -- **Managed Kubernetes** : Complete update and finalization of Service Level Agreements (SLA) for the Managed Kubernetes offering. +- **Managed Kubernetes**: Complete update and finalization of the Service Level Agreements (SLA) for the Managed Kubernetes offering. -### January 21, 2026: Security Improvements and Translations +### January 21, 2026: Security Enhancements and Translations -- **Console Management** : Updated international translations (English, German, Spanish, Italian) for security alerts in the management console. +- **Console Management**: Updated international translations (English, German, Spanish, Italian) for security alerts in the management console. -### January 19, 2026: Managed Kubernetes and VPC Extension +### January 19, 2026: Managed Kubernetes and VPC Expansion - **Managed Kubernetes**: Added support for **Bare Metal** nodes and **GPUs** (NVIDIA). - **Managed Kubernetes**: New tutorial on using GPUs in a Kubernetes cluster. @@ -106,74 +112,74 @@ sidebar_position: 2 - **Network (VPC)**: Complete documentation for the Virtual Private Cloud (VPC) service, including high availability (HA) concepts, getting started guides, and tutorials. - **Multilingual**: Full translation of the VPC service and new Kubernetes content into English, German, Spanish, and Italian. -### December 15, 2025: Stabilization and Multilingual Fixes +### December 15, 2025: Stabilization and Multilingual Corrections -- **Multilingual (Terraform, LLMaaS, Harbor)**: Major fix for Spanish, Italian, and German translations. Resolved MDX syntax issues (empty code blocks, unescaped tags) that were preventing site compilation. -- **Multilingual (Images)**: Restored correct image paths in the Italian and German versions for the Bastion and VMware IaaS sections. -- **Build**: Deployment validation for all 5 supported languages. +- **Multilingual (Terraform, LLMaaS, Harbor)** : Major correction of Spanish, Italian, and German translations. Resolved MDX syntax issues (blocs de code vides, balises non échappées) that prevented site compilation. +- **Multilingual (Images)** : Restored correct image paths in the Italian and German versions for the Bastion and VMware IaaS sections. +- **Build** : Deployment validation completed for all 5 supported languages. ### December 11, 2025: Managed Kubernetes Updates -- **Managed Kubernetes**: Added a new tutorial on using **Gateway API** for advanced traffic management. -- **Managed Kubernetes**: Updated documentation on quota management (Ceph) and optimization of cost management tools (OpenCost). +- **Managed Kubernetes** : Added a new tutorial on using **Gateway API** for advanced traffic management. +- **Managed Kubernetes** : Updated documentation on quota management (Ceph) and optimization of cost management tools (OpenCost). -### November 22, 2025: LLMaaS Updates and Global Improvements +### November 22, 2025: LLMaaS Updates and General Improvements -- **LLMaaS (OCR)**: Added comprehensive documentation for **DeepSeek-OCR**, our new model specialized in document analysis (PDFs, images), capable of extracting structured text, tables, and mathematical formulas. +- **LLMaaS (OCR)**: Added comprehensive documentation for **DeepSeek-OCR**, our new model specialized in document analysis (PDF, images), capable of extracting structured text, tables, and mathematical formulas. - **Multilingual**: Resolved accessibility issues on the Italian and German versions of the documentation. -- **Quality**: Fixed code block display in LLMaaS tutorials and restored missing images in the VMware IaaS quick start guide (Italian version). +- **Quality**: Fixed code block rendering in LLMaaS tutorials and restored missing images in the VMware IaaS getting started guide (Italian version). -### November 20, 2025: Major PaaS OpenShift Update +### November 20, 2025: Major OpenShift PaaS Update -- **PaaS OpenShift (PR #194)** : Complete overhaul and update of the OpenShift documentation, including new screenshots and a full translation into English, Spanish, German, and Italian to support our international expansion. +- **OpenShift PaaS (PR #194)**: Complete overhaul and update of the OpenShift documentation, including new screenshots and full translation into English, Spanish, German, and Italian to support our international expansion. -### November 3, 2025: Kubernetes Tutorial Improvements +### November 3, 2025: Kubernetes Tutorials Enhancement -- **Managed Kubernetes**: Added a new tutorial on continuous deployment with **ArgoCD** and the GitOps approach. -- **Managed Kubernetes**: Review and enhancement of existing tutorials. The guides on deployment, networking, permission management (Capsule), and backup (Kasten) have been enhanced to better address security, governance, and cost concerns, in response to the expectations of CISO and Buyer profiles. +- **Managed Kubernetes** : Added a new tutorial on continuous deployment with **ArgoCD** and the GitOps approach. +- **Managed Kubernetes** : Review and improvement of existing tutorials. The guides on deployment, networking, permission management (Capsule), and backup (Kasten) have been enhanced to better address security, governance, and cost concerns, in response to the expectations of CISO and Procurement roles. -### October 28, 2025: New Managed Kubernetes documentation and various improvements +### October 28, 2025: New Managed Kubernetes Documentation and Various Improvements -- **Managed Kubernetes (PR #193 & improvements)**: Added comprehensive documentation for the new Managed Kubernetes service. The section includes a service presentation, technical concepts, a getting started guide, a first tutorial, and the responsibilities matrix (RACI). The content has been enriched to better meet the expectations of different user profiles. +- **Managed Kubernetes (PR #193 & improvements)**: Added comprehensive documentation for the new Managed Kubernetes service. The section includes a service overview, technical concepts, a getting started guide, an introductory tutorial, and a responsibility matrix (RACI). The content has been enhanced to better meet the expectations of different user profiles. - **Object Storage (PR #190, #189)**: Added two new tutorials for the Object Storage service: one on managing S3 bucket access and another on using Restic for backups. -- **Contractual (PR #191)**: Correction and update of the "Data Processing Agreement" (DPA) document. +- **Contractual (PR #191)**: Corrected and updated the "Data Processing Agreement" (DPA) document. -### October 18, 2025: Maintenance and new documentation +### October 18, 2025: Maintenance and New Documentation -- **LLMaaS**: Added a new FAQ question to introduce the public status page ([llmaas.status.cloud-temple.app](https://llmaas.status.cloud-temple.app/)), allowing real-time monitoring of each model's availability and performance. -- **Contractuel**: Major update to the Data Processing Agreement (DPA v2) to reflect the latest legal and compliance requirements. -- **Console**: Improved and clarified documentation regarding order management. -- **Marketplace**: Added a detailed tutorial on customizing virtual machine (VM) images to create reusable templates. -- **LLMaaS**: Added a guide for configuring the VSCode CLINE extension to use Cloud Temple's language models directly from the editor. -- **Object Storage (OSS)**: Added clarifications on the lifecycle policy for data deletion. -- **Object Storage (OSS)**: Added a troubleshooting guide for checksum errors (`XAmzContentSHA256Mismatch`) with AWS CLI and Terraform. -- **LLMaaS**: Updated the list of available models and retranslated over 50 documents to ensure consistency. +- **LLMaaS** : Added a new FAQ question to introduce the public status page ([llmaas.status.cloud-temple.app](https://llmaas.status.cloud-temple.app/)), allowing you to monitor the availability and performance of each model in real time. +- **Contractual** : Major update to the Data Processing Agreement (DPA v2) to reflect the latest legal and compliance requirements. +- **Console** : Improved and clarified documentation regarding order management. +- **Marketplace** : Added a detailed tutorial on customizing virtual machine (VM) images to create reusable templates. +- **LLMaaS** : Added a guide to configure the CLINE VSCode extension to use Cloud Temple language models directly from the editor. +- **Object Storage (OSS)** : Added details on the Lifecycle policy for data deletion. +- **Object Storage (OSS)** : Added a troubleshooting guide for checksum errors (`XAmzContentSHA256Mismatch`) with AWS CLI and Terraform. +- **LLMaaS** : Updated the list of available models and retranslated over 50 documents to ensure consistency. -### August 14, 2025: Improvements and fixes +### August 14, 2025: Improvements and Fixes -- **LLMaaS**: Updated and clarified FAQ responses to better address technical and strategic questions. Added FAQ to navigation. -- **General**: Fixed several internal navigation links throughout the documentation for a smoother experience. +- **LLMaaS** : Updated and clarified FAQ answers to better address technical and strategic questions. Added the FAQ to the navigation. +- **General** : Fixed several internal navigation links throughout the documentation for a smoother experience. -### July 2025: New Features and Major Updates +### July 2025: Major Features and Updates -- **Object Storage (OSS)**: - - Complete overhaul of the tutorials section with dedicated guides for popular tools: AWS CLI, Minio Client (`mc mirror`), Cloudberry Explorer, and the Boto3 Python SDK. - - Added details on storage account concepts and object locking (Object Lock). -- **Open Source IaaS**: - - Added detailed documentation on managing High Availability (HA) for resource pools and virtual machines. -- **Console**: +- **Object Storage (OSS)** : + - Complete overhaul of the tutorials section with dedicated guides for popular tools: AWS CLI, Minio Client (`mc mirror`), Cloudberry Explorer, and the Python Boto3 SDK. + - Added clarifications on storage account concepts and Object Lock. +- **OpenSource IaaS** : + - Added detailed documentation on High Availability (HA) management for resource pools and virtual machines. +- **Console** : - Updated the security alerts page with the latest vulnerabilities. -- **Networking**: +- **Network** : - Added new screenshots to illustrate IPv6 connectivity configuration. ### June 29, 2025: Finalization of LLMaaS Documentation - Validation of the complete test suite. -- Correction and validation of the RAG with FAISS and Qdrant pipelines. +- Fixes and validation of RAG pipelines with FAISS and Qdrant. - Enrichment of tutorials with more detailed technical explanations. - Addition of a section on prompt security and model lifecycle in the concepts. -- Improvement of the RAG explanation page with diagrams and details on embedding models. -- Update of the API documentation, getting started guide, and service presentation. +- Enhancement of the RAG explanation page with diagrams and details on embedding models. +- Update of the API documentation, getting started guide, and service overview. - Addition of pricing for the Audio Transcription endpoint. - Addition of the projected model lifecycle schedule. - Addition of the responsibility matrix for the LLMaaS offering. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md b/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md index 3d7e49c5..3529bc24 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md +++ b/i18n/en/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md @@ -4,27 +4,27 @@ title: Concepts Cloud Temple's __IaaS (Infrastructure As A Service)__ offering is designed to meet critical business continuity and disaster recovery needs, with a particular focus on demanding sectors such as industry, banking, and insurance. Built on cutting-edge technologies, this infrastructure ensures maximum availability and optimal performance for your critical workloads. -## A trusted technology platform +## A Trusted Technology Platform Cloud Temple's IaaS platform relies on internationally renowned technology partners: - Compute: __CISCO UCS__. - Storage: __IBM Spectrum Virtualize__, __IBM FlashSystem__ for block storage, and __DELL ECS__ for object storage. -- Network: __JUNIPER__. -- Virtualization: __Stack Opensource__, providing a reliable and proven foundation for managing your cloud environments. +- Networking: __JUNIPER__. +- Virtualization: __Open Source Stack__, providing a reliable and proven foundation for managing your cloud environments. -This architecture is based on the __VersaStack__ model, a partnership between Cisco and IBM, ensuring extensive compatibility with major software vendors. +This architecture is based on the __VersaStack__ model, a partnership between Cisco and IBM, ensuring broad compatibility with major software vendors. ## A dedicated and automated infrastructure Although fully automated via APIs and a Terraform provider, Cloud Temple's IaaS product offers a unique infrastructure: -- __Dedicated resources__: Compute blades, storage volumes, and software stacks (virtualization, backup, firewalling, etc.) are never shared among customers. -- __Maximum predictability__: You control virtualization ratios, IOPS load on storage, and benefit from clear, monthly consumption-based billing. +- __Dedicated resources__ : Compute blades, storage volumes, and software stacks (virtualization, backup, firewalling, etc.) are never shared between clients. +- __Maximum predictability__ : You control virtualization ratios, IOPS load on storage, and benefit from clear, monthly consumption-based billing. -The platform is certified __SecNumCloud__ by [ANSSI](https://www.ssi.gouv.fr/), ensuring a high level of automation and security. +The platform is certified __SecNumCloud__ by the [ANSSI](https://www.ssi.gouv.fr/), ensuring a high level of automation and security. -## Key features +## Key Features - Dedicated and on-demand compute resources (CPU, RAM). - On-demand storage (multiple classes available). @@ -37,19 +37,19 @@ The platform is certified __SecNumCloud__ by [ANSSI](https://www.ssi.gouv.fr/), | Advantage | Description | |---------------------|------------------------------------------------------------------------------------------------------------------------------------------------| -| Digital Trust | Data hosting in France and GDPR compliance. | -| Security | Highly secure platform, certified __SecNumCloud__, __HDS__ (Hébergement des Données de Santé), __ISO 27001__ and __ISAE 3402 type II__. | -| High Availability | Platform availability rate of 99.99%, measured monthly, maintenance windows included. | -| Resilience | Implementation of business continuity or disaster recovery plans as needed. | -| Automation | Fully automated platform designed to integrate into a digital transformation program. | -| On Demand | Resources available on demand. | +| Digital trust | Data hosting in France and GDPR compliance. | +| Security | Highly secure platform, certified __SecNumCloud__, __HDS__ (Health Data Hosting), __ISO 27001__ and __ISAE 3402 type II__. | +| High availability | Platform availability rate of 99.99%, measured monthly, including maintenance windows. | +| Resilience | Implementation of business continuity or disaster recovery plans as needed. | +| Automation | Fully automated platform designed to integrate into a digital transformation program. | +| On demand | Resources available on demand. | ## Regions and Availability Zones The OpenIaaS product is deployed in an availability zone. An availability zone is part of a region. -This deployment type allows you to choose the location of the clusters and distribute them across different availability zones (AZ). +This type of deployment allows you to choose the location of the clusters and distribute them across different availability zones (AZ). This provides better load distribution, maximizes redundancy, and facilitates the implementation of a disaster recovery plan (DRP) in the event of an incident. --- @@ -60,23 +60,23 @@ The compute blades available for the Bare Metal offering provide a range of perf | Reference | RAM __(1)__ | Frequency __(2)__ | Number of cores / threads | Connectivity __(3)__ | GPU __(4)__ | |-----------------------|--------------|-------------------------------------------|---------------------------|----------------------|----------------------| -| __ECO__ | 384 GB | 2.20/3.0 GHz (Silver 4114 or equivalent) | 20 / 40 threads | 2 X 10 Gbit/s | - | -| __STANDARD__ | 384 GB | 2.40/3.4 GHz (Silver 4314 or equivalent) | 32 / 64 threads | 2 X 25 Gbit/s | - | -| __ADVANCE__ | 768 GB | 2.80/3.5 GHz (Gold 6342 or equivalent) | 48 / 96 threads | 2 X 25 Gbit/s | - | -| __PERFORMANCE 1__ | 384 GB | 3.20/3.6 GHz (Xeon E-53I5Y or equivalent) | 16 / 32 threads | 2 X 25 Gbit/s | - | -| __PERFORMANCE 2__ | 768 GB | 3.00/3.6 GHz (Gold 6354 or equivalent) | 36 / 72 threads | 2 X 25 Gbit/s | - | -| __PERFORMANCE 3__ | 1536 GB | 2.60/3.5 GHz (Gold 6348 or equivalent) | 56 / 112 threads | 2 X 25 Gbit/s | - | -| __PERFORMANCE 4__ | 512 GB | 2.50/4.1 GHz (Intel 6426Y or equivalent) | 32 / 64 threads | 2 X 25 Gbit/s | 2 x NVIDIA L40S 48 GB | +| __ECO__ | 384 GB | 2.20/3.0 GHz (Silver 4114 ou équivalent) | 20 / 40 threads | 2 X 10 Gbit/s | - | +| __STANDARD__ | 384 GB | 2.40/3.4 GHz (Silver 4314 ou équivalent) | 32 / 64 threads | 2 X 25 Gbit/s | - | +| __ADVANCE__ | 768 GB | 2.80/3.5 GHz (Gold 6342 ou équivalent) | 48 / 96 threads | 2 X 25 Gbit/s | - | +| __PERFORMANCE 1__ | 384 GB | 3.20/3.6 GHz (Xeon E-53I5Y ou équivalent) | 16 / 32 threads | 2 X 25 Gbit/s | - | +| __PERFORMANCE 2__ | 768 GB | 3.00/3.6 GHz (Gold 6354 ou équivalent) | 36 / 72 threads | 2 X 25 Gbit/s | - | +| __PERFORMANCE 3__ | 1536 GB | 2.60/3.5 GHz (Gold 6348 ou équivalent) | 56 / 112 threads | 2 X 25 Gbit/s | - | +| __PERFORMANCE 4__ | 512 GB | 2.50/4.1 GHz (Intel 6426Y ou équivalent) | 32 / 64 threads | 2 X 25 Gbit/s | 2 x NVIDIA L40S 48GB | ### Notes -- __(1)__ The memory capacity is the physical amount available on the blades and cannot be modified. +- __(1)__ The amount of memory is the physical capacity available on the blades and cannot be modified. - __(2)__ The indicated frequencies correspond to the minimum base frequency and the turbo frequency. -- __(3)__ Physical connectivity is shared for network access and block storage access, thanks to a converged Cisco UCS architecture. -- __(4)__ Available GPUs evolve based on the latest technologies. As of May 1, 2024, the product includes NVIDIA LOVELACE L40S GPUs. +- __(3)__ Physical connectivity is shared for network access and block storage access, thanks to a Cisco UCS converged architecture. +- __(4)__ Available GPUs evolve according to the latest technologies. As of May 1, 2024, the product includes NVIDIA LOVELACE L40S GPUs. - __(5)__ High availability on a cluster is available only with a minimum of 2 nodes. -Infrastructure availability is guaranteed at 99.9%, measured monthly, including maintenance windows. Any request related to the SLA must be submitted via an incident ticket. +Infrastructure availability is guaranteed at 99.9%, measured monthly, including maintenance windows. Any SLA-related request must be reported via an incident ticket. --- @@ -84,32 +84,32 @@ Infrastructure availability is guaranteed at 99.9%, measured monthly, including Distributed block storage, based on __IBM Spectrum Virtualize__, offers a range of performance levels tailored to various use cases: -| Reference | IOPS/To | Max IOPS Ceiling / Volume | Max Bandwidth / Volume | Primary Use Case | +| Reference | IOPS/TB | Max IOPS Cap / Volume | Max Bandwidth / Volume | Primary Use | |-----------------------------------|----------------|---------------------------|-----------------------------|----------------------------------------| -| **FLASH - Essential** | 500 | 10 000 IOPS | 512 MB/s | Light workloads | -| **FLASH - Standard** | 1500 | 30 000 IOPS | 1024 MB/s | Standard workloads | -| **FLASH - Premium** | 3000 | 30 000 IOPS | 1024 MB/s | Intensive workloads | -| **FLASH - Enterprise** | 7500 | 30 000 IOPS | 1024 MB/s | Critical workloads | -| **FLASH - Ultra** | 15000 | 30 000 IOPS | 1024 MB/s | Ultra-intensive workloads | -| **MASS STORAGE - Archiving** | Not applicable | Not guaranteed | Not guaranteed | Cost-effective storage for archiving | +| **FLASH - Essential** | 500 | 10 000 IOPS | 512 MB/s | Light workloads | +| **FLASH - Standard** | 1500 | 30 000 IOPS | 1024 MB/s | Standard workloads | +| **FLASH - Premium** | 3000 | 30 000 IOPS | 1024 MB/s | Heavy workloads | +| **FLASH - Enterprise** | 7500 | 30 000 IOPS | 1024 MB/s | Critical workloads | +| **FLASH - Ultra** | 15000 | 30 000 IOPS | 1024 MB/s | Ultra-intensive workloads | +| **MASS STORAGE - Archive** | Not applicable | Not guaranteed | Not guaranteed | Cost-effective storage for archiving | -### Characteristics +### Features -- **Performance** : Effective performance scales linearly with allocated capacity (according to the IOPS/TB ratio), **up to the absolute hardware limit defined above**. (For example, a 10 TB Ultra class volume will be physically limited to 30,000 IOPS and 1024 MB/s). +- **Performance** : Effective performance scales linearly with allocated capacity (based on the IOPS/TB ratio), **up to the absolute hardware limit defined above**. (For example, a 10 TB volume in the Ultra tier will be physically capped at 30,000 IOPS and 1024 MB/s). - __Technology__ : NVMe Flash with __Distributed RAID 6__ for enhanced resilience. - __Availability__ : 99.99%, measured monthly. -- __Restrictions__ : No limits on reads or writes. No automatic compression or deduplication, ensuring full utilization of reserved volumes. +- __Restrictions__ : No limits on read or write operations. No automatic compression or deduplication, ensuring full utilization of reserved volumes. ### Block Storage Security and Encryption -To ensure the confidentiality of your data at rest, our entire block storage infrastructure incorporates robust hardware encryption. +To ensure the confidentiality of your data at rest, our entire block storage infrastructure integrates robust hardware encryption. -- __Encryption Type__: Data is encrypted directly on the disks (`Data At Rest`) using the __XTS-AES 256__ algorithm. -- __Compliance__: This encryption method complies with the __FIPS 140-2__ standard, ensuring a validated high level of security. -- __Operation__: Encryption is applied at the time of writing data to the physical storage medium. +- __Encryption Type__ : Data is encrypted directly on the disks (`Data At Rest`) using the __XTS-AES 256__ algorithm. +- __Compliance__ : This encryption method complies with the __FIPS 1-40-2__ standard, ensuring a validated high level of security. +- __Operation__ : Encryption is applied at the time data is written to the physical storage medium. -:::warning[Replication Considerations] -It is important to note that this encryption protects data stored on disks. It is not active "on-the-fly", which means that data is not encrypted during storage replication operations between availability zones. Transfer security is ensured by dedicated and secure communication channels. +:::warning[Note on Replication] +It is important to note that this encryption protects data stored on the disks. It is not active "on-the-fly", meaning that data is not encrypted during storage replication operations between availability zones. Transfer security is ensured through dedicated and secure communication channels. ::: --- @@ -118,129 +118,129 @@ It is important to note that this encryption protects data stored on disks. It i The OpenIaaS product is compatible with [private networks](../network/private_network) and [internet access](../network/internet). -Two types of networks are available from the virtual machine configuration. +Two types of networks are available from a virtual machine configuration. -### VLAN Networks +### VLAN-type networks -VLAN networks should be configured with one VLAN per network interface. If you want to use multiple networks, simply create multiple network interfaces. +VLAN-type networks should be configured with one VLAN per network interface. If you wish to use multiple networks, simply create multiple network interfaces. There is a limitation on the maximum number of network interfaces that can be created on a VM, which is 7. -### VLAN Trunk +### VLAN TRUNK -In cases where you need to carry more than 7 VLANs, you must use a VLAN Trunk. -A VLAN Trunk allows all your VLANs to pass through a single card. The VLAN ID configuration must be done via VLAN-type virtual interfaces from the VM OS. The VLAN IDs are the same as those present and visible from the console. +If you need to carry more than 7 VLANs, you must use a VLAN Trunk. +The VLAN Trunk allows all your VLANs to pass through a single network adapter. VLAN ID configuration must be performed via VLAN virtual interfaces from the VM's OS. The VLAN IDs are the same as those present and visible from the console. ## Virtual Machine Backup -The OpenIaaS offering integrates __a native distributed backup architecture that cannot be bypassed__, a mandatory requirement for the French SecNumCloud certification. +The OpenIaaS offering integrates __a native, non-removable distributed backup architecture__, a mandatory requirement for the French SecNumCloud certification. -Backups are stored on the [SecNumCloud qualified Object Storage](../storage/oss), ensuring optimal protection in the event of a major production datacenter failure. This approach allows you to restore your data to a secondary datacenter, even in the event of a critical incident such as a fire. +Backups are stored on the [SecNumCloud-certified Object Storage](../storage/oss), ensuring optimal protection in the event of a major production datacenter failure. This approach enables data restoration to a secondary datacenter, even in the event of a critical incident such as a fire. ### Available Data Protection Services | Service | Description | |---|---| -| **Incremental Backup (Agentless)** | Agentless backup via hypervisor native mechanisms, to a remote S3 repository. | +| **Incremental Backup (Agentless)** | Agentless backup via the hypervisor's native mechanisms, to a remote S3 repository. | | **Metadata Backup** | Protection of virtualization pool and backup orchestrator configurations — essential for Disaster Recovery. | -| **Granular Restoration** | Restoration possible at the full VM, individual virtual disk, or single file level. | +| **Granular Restore** | Restoration possible at the full VM level, individual virtual disk, or single file. | | **S3 Multi-AZ Offloading** | Offloading to Cloud Temple S3 object storage replicated across availability zones. | -Backup and restoration speeds depend on the change rate across environments. The backup policy is fully configurable from [the Cloud Temple Console](../console/console.md) for each virtual machine. +Backup and restore speeds depend on the change rate in the environments. The backup policy is fully configurable from [la Console Cloud Temple](../console/console.md) for each virtual machine. | Reference | Unit | SKU | | ---------------------------------------------| ----- | ------------------------------ | -| BACKUP - Service Access | 1 VM | csp:(region):openiaas:backup:vm:v1 | +| BACKUP - Service Access | 1 VM | csp:(region):openiaas:backup:vm:v1 | --- -### Technical architecture of backup +### Backup Technical Architecture -#### Overview +#### High-Level View -The architecture relies on a strict separation between the **control plane** and the **data plane**: the backup orchestrator is hosted in the Cloud Temple management cluster (distinct and inaccessible to the client), while backup data is stored on a remote S3 repository, physically separated from the production infrastructure. Data is transmitted encrypted between the two components. +The architecture relies on a strict separation between the **control plane** and the **data plane**: the backup orchestrator is hosted in the Cloud Temple management cluster (distinct and inaccessible to the client), while backup data is stored in a remote S3 bucket, physically separated from the production infrastructure. Data transits encrypted between the two components. #### Backup Orchestrator The orchestrator is deployed in the Cloud Temple management cluster, **directly inaccessible to the client**. It orchestrates all backup jobs and manages encryption. -- **Standard policies** : backup policies are applied by default to each tenant. -- **Custom policies** : the client can request specific frequencies or retention periods via a support ticket in the Cloud Temple console. +- **Standard policies**: backup policies are applied by default to each tenant. +- **Custom policies**: the client can request specific frequencies or retention periods via a support ticket in the Cloud Temple console. #### Remote S3 Storage -Backups are sent to Cloud Temple's [SecNumCloud Qualified Object Storage](../storage/oss), with Multi-AZ replication to ensure resilience against the loss of an entire physical site. +Backups are sent to the [Stockage Objet qualifié SecNumCloud](../storage/oss) of Cloud Temple, with Multi-AZ replication to ensure resilience against the loss of an entire physical site. --- ### Backup Mechanism: Incremental Backup -The service uses an **incremental** backup mode. This mode targets a **Backup Repository** (the remote S3 storage) and never exports a full backup after the first one: only the **modified data blocks** are transferred each cycle. +The service uses an **incremental** backup mode. This mode targets a **Backup Repository** (remote S3 storage) and never exports a full backup after the first one: only the **modified data blocks** are transferred in each cycle. :::info[Incremental Backup vs Replication] -**Incremental backup** targets a remote S3 repository and is optimized for **long-term protection**. It should not be confused with **replication** (Hot Disaster Recovery) which targets a local Storage Repository — this mode is covered by the [virtual machine replication](#virtual-machine-replication) feature. +**Incremental backup** targets a remote S3 repository and is optimized for **long-term protection**. It should not be confused with **replication** (hot Disaster Recovery) which targets a local Storage Repository — this mode is covered by the [réplication de machines virtuelles](#réplication-de-machines-virtuelles) feature. ::: -#### Technical lifecycle of an incremental backup +#### Technical Lifecycle of an Incremental Backup -The following are the successive steps triggered with each backup job execution: +Here are the successive steps triggered at each execution of a backup job : -**1. Local snapshot creation (Source)** +**1. Local Snapshot Creation (Source)** -Upon job launch, the orchestrator requests the hypervisor to create a VM snapshot. This snapshot serves as a comparison point to calculate the delta relative to the previous reference snapshot. +Upon job launch, the orchestrator requests the hypervisor to create a snapshot of the VM. This snapshot serves as a comparison point to calculate the delta relative to the previous reference snapshot. -**2. Differential export via Changed Block Tracking (CBT)** +**2. Differential Export via Changed Block Tracking (CBT)** -The orchestrator compares the new snapshot with the previous reference snapshot using CBT metadata. Only data blocks that have changed since the last backup are extracted — not the entire disk. +The orchestrator compares the new snapshot with the previous reference snapshot via CBT metadata. Only the data blocks that have changed since the last backup are extracted — not the entire disk. -**3. Encryption and transfer to S3** +**3. Encryption and Transfer to S3** The modified blocks are **encrypted on the fly by the orchestrator** and then sent via HTTPS/TLS 1.3 to the remote S3 bucket. -**4. Snapshot rotation (Coalesce)** +**4. Snapshot Rotation (Coalesce)** -Once the transfer is validated, the old reference snapshot is deleted, and the new snapshot becomes the reference for the next cycle. The hypervisor then triggers a **coalesce** process to reintegrate the old delta's data into the virtual disk chain. +Once the transfer is validated, the old reference snapshot is deleted, and the new snapshot becomes the reference for the next cycle. The hypervisor then triggers a **coalesce** (fusion) process to reintegrate the old delta's data into the virtual disk chain. :::warning[Impact I/O du Coalesce] -The coalesce operation is **I/O intensive** on the production storage. It is triggered automatically after each successful backup. It is recommended to schedule backup windows during periods of low application load. +The coalesce operation is **I/O intensive** on production storage. It is triggered automatically after each successful backup. It is recommended to schedule backup windows during periods of low application load. ::: -**5. S3 retention management (Merge) and Key Backup Interval** +**5. Retention Management on S3 (Merge) and Key Backup Interval** -On S3 storage, the orchestrator manages backup rotation by **merging** (*merge*) old deltas into the oldest retained full backup according to the retention policy. +On S3 storage, the orchestrator manages backup rotation by **merging** (*merge*) old deltas into the oldest full backup retained according to the retention policy. -To ensure backup chain integrity, a full backup is **forced periodically** (typiquement tous les 20 incréments — *Key Backup Interval*). This creates a clean new starting point and limits the impact of potential corruption in any link of the chain. +To ensure the integrity of the backup chain, a full backup is **forced periodically** (typiquement tous les 20 incréments — *Key Backup Interval*). This creates a clean new starting point and limits the impact of potential corruption in any link of the chain. --- ### Impact on Production Storage Sizing :::warning[Critical Consideration — Block Storage (Thick provisioning)] -The OpenIaaS offering relies on high-performance Block Storage (Fibre Channel / LVM). The snapshots used by incremental backup are provisioned in **Thick** mode: each snapshot consumes on the Storage Repository (SR) the **full nominal size of the VM disk**, and not just the actual delta. +The OpenIaaS offering relies on high-performance Block Storage (Fibre Channel / LVM). Snapshots used by incremental backups are provisioned in **Thick** mode: each snapshot consumes on the Storage Repository (SR) the **full nominal size of the VM disk**, and not just the actual delta. **Consumption example for a VM with a 50 GB disk:** -| Item | SR Consumption | +| Element | Consumption on the SR | |---|---| | Active VM disk | 50 GB | | Permanent reference snapshot (for delta calculation) | 50 GB | | Temporary snapshot created during export | 50 GB | | **Total required during the backup window** | **up to 150 GB** | -**Recommended sizing rule**: allocate **at least 50% free space** on production storage relative to the total volume of backed-up VMs, to accommodate this overhead inherent to high-performance block storage. +**Recommended sizing rule**: plan for **at least 50% free space** on production storage relative to the total volume of backed-up VMs, to support this overhead inherent to high-performance block storage. ::: --- -### Security and Encryption of Backups +### Backup Security and Encryption -#### Encryption in transit +#### Encryption in Transit All communications between the backup orchestrator and S3 storage are encrypted via **HTTPS / TLS 1.3**. #### Encryption at Rest and Key Management -Encryption is applied by the backup orchestrator, **before** data is sent to S3. +Encryption is applied by the backup orchestrator, **before** sending data to S3. | Parameter | Value | |---|---| @@ -249,35 +249,35 @@ Encryption is applied by the backup orchestrator, **before** data is sent to S3. | **Key Storage** | Centralized Cloud Temple Vault (never exposed in the client interface) | | **Resilience** | In the event of orchestrator loss, the key is re-injected from the Vault to restore the service | -#### Network isolation (architecture SecNumCloud) +#### Network isolation (SecNumCloud architecture) The backup infrastructure is designed to be **strictly isolated** from client environments: -- **Physical separation**: the *Client*, *Administration*, and *Backup* networks rely on distinct physical backbones and separate routing contexts (VRF). -- **No lateral infection risk**: a compromised VM cannot reach S3 storage or the backup orchestrator — no network path exists between them. S3 is never "mounted" in the VM. +- **Physical separation**: the *Client*, *Administration*, and *Backup* networks rely on distinct physical backbones and separate routing contexts (VRFs). +- **Prevention of lateral infection**: a compromised VM cannot reach the S3 storage or the backup orchestrator — no network path exists between them. S3 is never "mounted" in the VM. #### Secure Administration -The administration of the backup platform is **reserved for the Cloud Temple Backup teams** and subject to SecNumCloud requirements: +Administration of the backup platform is **restricted to Cloud Temple's Backup teams** and subject to SecNumCloud requirements: | Control | Measure | |---|---| -| **Access Bastion** | Mandatory access through a hardened internal administration bastion (Ubuntu Hardened) | -| **Workstation** | Access only from dedicated and secure administration laptops | -| **Authentication** | Mandatory MFA via a dedicated administration LDAP directory (distinct from the office LDAP) | +| **Access Bastion** | Mandatory routing through a hardened internal administration bastion (Ubuntu Hardened) | +| **Workstation** | Access only from dedicated and secured administration laptops | +| **Authentication** | Mandatory MFA via a dedicated administration LDAP directory (separate from the office LDAP) | --- -### Monitoring and Audit +### Monitoring and auditing -- **Backup logs** : visible to the client directly in the Cloud Temple Console — status (success/failure), volume, timestamp. -- **Administrator access logs** : access to backup infrastructure (orchestrator, S3) is logged and **audited monthly** to detect any anomalies. -- **Penetration tests (PASSI Pentests)** : the infrastructure undergoes regular penetration tests by qualified PASSI providers as part of maintaining SecNumCloud certification. -- **Physical security** : all equipment is hosted in SecNumCloud zones (dedicated physical cages with biometric access control) within Cloud Temple data centers. +- **Backup logs**: visible to the client directly in the Cloud Temple Console — status (success/failure), data volume, timestamp. +- **Administrator access logs**: access to backup infrastructure (orchestrator, S3) is logged and **audited monthly** to detect any anomalies. +- **Penetration tests (PASSI Pentests)**: the infrastructure undergoes regular pentests by qualified PASSI providers as part of maintaining the SecNumCloud qualification. +- **Physical security**: all equipment is hosted in SecNumCloud zones (dedicated physical cages with biometric access control) within Cloud Temple data centers. --- -### Compatibility and Edge Cases +### Compatibility and Special Cases :::warning[VMs with Continuous Disk Writes] Some virtual machines are not compatible with this backup technology when their **disk write loads are constant** (active databases, transaction logs, etc.). The hypervisor cannot then finalize the snapshot without freezing the VM, which can take several hours. @@ -299,44 +299,44 @@ The request must specify: - The backup policy name - Desired characteristics: frequency, retention (x days, y weeks, z months…) -#### Planning Constraints +#### Scheduling Constraints | Constraint | Value | |---|---| | **Minimum interval between two executions** | 24 hours | | **Maximum retention** | 24 months | -| **Concurrent executions per policy** | 1 at a time | +| **Simultaneous executions per policy** | 1 at a time | :::warning[A policy can only run once at a time] -Each backup policy is **single-instance** : only one execution can be active simultaneously. +Each backup policy is **single-instance**: only one execution can be active simultaneously. -**Practical consequence** : if you add many virtual machines to an existing policy and yesterday's backup is not yet completed at the scheduled trigger time, **the new cycle will not start** — it will be ignored until the next occurrence. +**Practical consequence**: if you add many virtual machines to an existing policy and yesterday's backup is not yet complete at the scheduled trigger time, **the new cycle will not start** — it will be skipped until the next occurrence. To avoid this scenario: - check the **execution durations** of your jobs from the Cloud Temple Console logs, - adjust the **frequency** or **policy size** if backups regularly overflow into the next window, -- consider **distributing VMs across multiple policies** with staggered schedules for large environments. +- consider **distributing VMs across multiple policies** with staggered schedules for large scopes. ::: :::info[Long-term retention — future availability] -**Maximum retention is currently 24 months.** Long-term retention (up to 10 years) will be integrated with the launch of our **Glacier** product, scheduled for the **first quarter of 2027**, as an add-on subscription. +**The maximum retention is currently 24 months.** Long-term retention (up to 10 years) will be integrated with the launch of our **Glacier** product, scheduled for **Q1 2027**, as an add-on subscription. -For such long retention periods, we recommend backing up **flat files exclusively** (raw files, static documents) as well as **database dumps**. Restoring a complete server after 10 years indeed carries significant risks: many services or dependencies may have become obsolete or incompatible with the current environment. +For retention periods this long, we recommend backing up **flat files only** (raw files, static documents) as well as **database dumps**. Restoring a full server after 10 years carries significant risks: many services or dependencies may have become obsolete or incompatible with the current environment. -**Alternative available now** : the **agent-based backup** service, available as an add-on subscription. Contact support for more information. +**Alternative available now**: the **agent-based backup** service, available as an add-on subscription. Contact support for more information. ::: ## Virtual machines ### vCPU Resource Management -vCPU resource modifications are performed offline (with the machine powered off). The platform supports up to 254 vCPUs per virtual machine (theoretical limit), with successful tests conducted on Linux VMs equipped with 128 vCPUs. +vCPU resource modifications are performed cold (machine powered off). The platform supports up to 254 vCPUs per virtual machine (theoretical limit), with successful tests conducted on Linux VMs equipped with 128 vCPUs. It is important to note that guest operating system support is a critical factor during resource allocation. An allocation exceeding the limits supported by the operating system can lead to significant performance issues. ### Memory Resource Management -Memory modifications are also performed offline. The limits are as follows: +Memory modifications are also performed cold. The limits are as follows: - 1.5 TiB with memory snapshot support - 8 TiB without memory snapshot support @@ -346,65 +346,65 @@ The actually usable memory may be limited by the guest operating system. Exceedi ### Disk Management -- The maximum size of a disk is 2 TB +- The maximum disk size is 2 TB - Disks use the standard VHD format - The maximum number of virtual disks per virtual machine, including CD-ROM drives, is 24 -Disks cannot be resized once created. To expand storage capacity, it is necessary to create a new disk. +Disks cannot be resized once created. To expand storage capacity, a new disk must be created. ### Tools for Virtual Machines -These tools are used to ensure optimal operation of virtual machines. When you need to perform an action that requires one of these tools, a message will appear on the Cloud Temple console. -To install these tools, you can consult the official XenServer websites to obtain detailed instructions based on your OS. +These tools are used to ensure optimal performance of virtual machines. When you wish to perform an action and one of these tools is required, a message will appear on the Cloud Temple console. +To install these tools, you can consult the official Xen Server websites to obtain specific instructions for your OS. #### Management Agent -The Management Agent is a component installed in each virtual machine. It enables the hypervisor to better manage the machine by providing access to additional information and allows certain operations to be executed more cleanly. +The Management Agent is a component installed in each virtual machine. It enables the hypervisor to better manage the machine by having access to more information and allows certain actions to be performed more cleanly. #### PV Drivers (Paravirtualization Drivers) -PV Drivers are drivers installed in the virtual machine to improve its performance. -Without these drivers, the machine runs, but more slowly. Additionally, they enable certain advanced operations. +PV Drivers are drivers installed within the virtual machine to enhance its performance. +Without these drivers, the machine operates, but at a slower pace. Additionally, they enable certain advanced operations. PV Drivers are natively installed on the majority of current Linux kernels. #### Tools -Tools are a set of software components that improve the integration of the virtual machine with the virtualization infrastructure. +Tools are a set of software components that enhance the integration of the virtual machine with the virtualization infrastructure. ## Catalogs -The catalog allows you to manage three essential types of elements: +The catalog allows you to manage three types of essential elements: - Disk images (ISO) - Configuration templates -- Pre-installed virtual machine templates +- Preinstalled virtual machine templates -In the detailed view of a virtual machine template, you can access crucial information such as the location, the number of disks, or the number of network adapters. +In the detailed view of a virtual machine template, you can view crucial information such as the location, the number of disks, or the number of network adapters. -When the number of virtual disks is indicated as 0, it means that it is a configuration template without a pre-installed operating system, allowing you to deploy your own custom environment. +When the number of virtual disks is indicated as 0, this means it is a configuration template without a preinstalled operating system, allowing you to deploy your own custom environment. ## Virtual Machine Replication -Cloud Temple's __virtual machine replication__ ensures the protection and continuity of your critical data through an automated copy of your environments to a distinct availability zone. This feature, natively integrated into the Open Source IaaS product, meets the strictest requirements for business continuity and disaster recovery. +The __virtual machine replication__ of Cloud Temple ensures the protection and continuity of your critical data through automated copying of your environments to a separate availability zone. This feature, natively integrated into the Open Source IaaS product, meets the strictest requirements for business continuity and disaster recovery. -### Automated and secure protection +### Automated and Secure Protection -Cloud Temple replication relies on a __SecNumCloud-certified infrastructure__, ensuring: +Cloud Temple replication relies on a __SecNumCloud-certified__ infrastructure, ensuring: - __Asynchronous replication__ : Continuous copying of your virtual machines without impacting production performance -- __Geographical separation__ : Storage of replicas in a different availability zone from the source -- __Full automation__ : Fully automated process via the [Cloud Temple Console](../console/console.md) -- __Regulatory compliance__ : Compliance with backup and business continuity requirements +- __Geographic separation__ : Storage of replicas in an availability zone different from the source +- __Full automation__ : Fully automated process via the [Console Cloud Temple](../console/console.md) +- __Regulatory compliance__ : Adherence to backup and business continuity requirements ### Advantages of Replication -| Advantage | Description | +| Advantage | Description | |-------------------------|------------------------------------------------------------------------------------------------------------------------------------------------| -| Business Continuity | Protection of your critical services in the event of a major incident at the primary site. | -| Geographic Protection | Replication to a distinct availability zone, protecting against localized disasters. | -| Time Flexibility | Choose the replication interval according to your needs: from 1 minute to 24 hours. | -| Ease of Management | Configuration and monitoring fully integrated into the Temple Cloud Console. | -| SecNumCloud Compliance | Qualified infrastructure ensuring the highest level of security for your sensitive data. | +| Business Continuity | Protection of your critical services in the event of a major incident at the primary site. | +| Geographic Protection | Replication to a distinct availability zone, protecting against localized disasters. | +| Temporal Flexibility | Choice of replication interval according to your needs: from 15 minutes to 24 hours. | +| Ease of Management | Configuration and monitoring fully integrated into the Cloud Temple Console. | +| SecNumCloud Compliance | Qualified infrastructure guaranteeing the highest level of security for your sensitive data. | ### Replication Configuration @@ -412,28 +412,40 @@ Cloud Temple replication relies on a __SecNumCloud-certified infrastructure__, e Creating a replication policy defines the protection settings for your virtual machines: -- __Destination__ : Select the target storage in the replication availability zone -- __Frequency__ : Replication interval tailored to your recovery requirements (RPO) +- __Destination__ : Selection of the target storage in the replication availability zone +- __Frequency__ : Replication interval tailored to your recovery needs (RPO) - __Retention__ : Number of recovery points retained #### Available Intervals -| Interval | Recommended Use | RPO (Maximum Data Loss) | +| Interval | Recommended Usage | RPO (Max Data Loss) | |-------------------------|--------------------------------------------|-----------------------------| -| __1 to 59 minutes__ | Real-time critical applications | < 1 hour | +| __15 to 59 minutes__ | Real-time critical applications | < 1 hour | | __1 to 24 hours__ | Business applications and standard environments | < 24 hours | -#### Virtual Machine Association +:::warning[RPO: Objective Not Contractually Guaranteed] +The configured replication interval (e.g., 15 minutes) constitutes a **RPO (Recovery Point Objective) target**, and not a contractual commitment. -Once the policy is created, you can associate your virtual machines to protect: +The actual RPO achieved depends directly on the **change rate** of the data on the replicated virtual machines. If the volume of modified data between two replication cycles is too large, the transfer may not complete within the configured interval. In this case, the next cycle will not start until the previous one is completed, which de facto extends the actual RPO. -- __Simple selection__: Select VMs from the Console interface -- __Automatic validation__: Compatibility and prerequisites verification -- __Immediate activation__: Automatic replication startup after configuration +**In summary:** +- The minimum configurable RPO is **15 minutes**. +- This RPO is achievable only if the data change rate remains compatible with the available replication bandwidth. +- **No SLA is associated with the RPO**: it is a "best effort" objective whose compliance depends on the workload characteristics. +- For workloads with high write rates (databases, transaction logs, etc.), it is recommended to configure a wider replication interval and supplement it with an application-level backup strategy. +::: + +#### Associating Virtual Machines + +Once the policy is created, you can associate the virtual machines to protect: + +- __Simple selection__ : Select VMs from the Console interface +- __Automatic validation__ : Verification of compatibility and prerequisites +- __Immediate activation__ : Automatic start of replication after configuration ### Replica Management -#### Policies View +#### Policy View The Cloud Temple Console provides a centralized view of your replication policies with: @@ -446,8 +458,8 @@ The Cloud Temple Console provides a centralized view of your replication policie The replicas table allows you to view: -- Name of replicated virtual machines -- Source and target location +- Names of replicated virtual machines +- Source and target locations - Associated replication policy - Data export in CSV format @@ -455,27 +467,27 @@ The replicas table allows you to view: #### Recommendations by workload type -- __Critical applications__ : Replication every 1-30 minutes to minimize data loss -- __Business applications__ : Hourly or every two hours replication depending on requirements +- __Critical applications__ : Replication every 15-30 minutes to minimize data loss +- __Business applications__ : Hourly or bi-hourly replication as needed - __Development environments__ : Daily replication is generally sufficient #### Policy Planning -- Create separate policies based on the criticality of your applications -- Name your policies clearly to facilitate management +- Create distinct policies based on the criticality of your applications +- Clearly name your policies to facilitate management - Regularly check the status of your replicas from the console - Document your replication strategy for your teams -__Important Note:__ +__Important Note :__ *Replication does not replace a comprehensive backup strategy. It serves as an essential complement to ensure business continuity in the event of a major incident at your primary site.* -## High availability +## High Availability High availability ensures service continuity for virtual machines (VMs) in the event of a physical host failure within an OpenIaaS pool. -With high availability (HA), each host in the pool regularly sends heartbeat signals to its peers via shared storage (Block Storage Heartbeat). In the event of a prolonged lack of response, the host is considered failed. +With high availability (HA), each host in the pool regularly sends heartbeat signals to its peers via shared storage (Block Storage Heartbeat). If a response is absent for an extended period, the host is considered failed. -A Block Storage designated as a heartbeat means it will serve as the basis for verifying the status of hosts that no longer respond. +A Block Storage designated as a heartbeat means it will serve as the basis for verifying hosts that stop responding. For high availability to be properly configured in an OpenIaaS pool, it is essential to have __at least two hosts__ connected. @@ -487,7 +499,7 @@ Each VM must be configured with a high availability restart priority level: #### Restart - In the event of a host failure, the virtual machine will be automatically restarted as soon as resources are available in the pool. Virtual machines configured in "restart" mode take priority over those configured in "best-effort" mode. + In the event of a host failure, the virtual machine will be automatically restarted as soon as resources become available in the pool. Virtual machines configured in "restart" mode are prioritized over those configured in "best-effort" mode. #### Best-Effort diff --git a/i18n/es/docusaurus-plugin-content-docs/current/changelog.md b/i18n/es/docusaurus-plugin-content-docs/current/changelog.md index 9e550e84..4c31feef 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/changelog.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/changelog.md @@ -1,179 +1,185 @@ --- -title: Seguimiento de Cambios +title: Control de Cambios sidebar_position: 2 --- -# Registro de Cambios +# Seguimiento de Cambios -### 4 de mayo de 2026 : Parches de seguridad — imagen Docker (CVE Alpine) +### 26 de mayo de 2026: Mejora del flujo de trabajo de traducción -- **Seguridad (Docker)** : Adición de `apk upgrade --no-cache` en la etapa final `nginx:stable-alpine` de los Dockerfiles de producción (`Dockerfile` y `Dockerfile.prebuilt`). Esta actualización corrige todas las CVE Críticas y Altas detectadas por Harbor/Trivy en la imagen `3.24.3`, relacionadas con los paquetes Alpine congelados: `libcrypto3`, `libssl3`, `libxml2`, `libxslt`, `libexpat`, `libpng`, `zlib`, `c-ares`, `musl`, `xz-libs`, `busybox`, `curl`. El próximo build generará una imagen con todos estos paquetes en su última versión corregida. +- **Traducción (herramientas)** : Adición de las opciones `--token`, `--url` y `--model` al script de Python `scripts/translate_py/translate.py`. El token de API ahora puede proporcionarse directamente desde la línea de comandos, sin necesidad de recrear el archivo `.env`. Las opciones de CLI tienen prioridad sobre las variables de entorno. +- **Traducción (configuración)** : Actualización del modelo de traducción predeterminado a `qwen3.6:27b`, manteniendo el endpoint predeterminado de Cloud Temple LLMaaS `https://api.ai.cloud-temple.com/v1/chat/completions`. +- **Traducción (dry-run)** : El flujo de trabajo de simulación sigue siendo utilizable sin token de API, para verificar los archivos a traducir antes de cualquier ejecución real. -### 30 de abril de 2026: Aclaraciones sobre el rendimiento del almacenamiento +### 4 de mayo de 2026: Parches de seguridad — imagen Docker (CVE Alpine) -- **Almacenamiento (IaaS VMware, OpenSource, Bare Metal)** : Se han añadido límites absolutos de IOPS y ancho de banda máximo para todas las clases de almacenamiento. Esta información permite dimensionar mejor los entornos en función de los requisitos de rendimiento. +- **Seguridad (Docker)** : Adición de `apk upgrade --no-cache` en la etapa final `nginx:stable-alpine` de los Dockerfiles de producción (`Dockerfile` y `Dockerfile.prebuilt`). Esta actualización corrige todas las CVE Critical y High detectadas por Harbor/Trivy en la imagen `3.24.3`, relacionadas con los paquetes Alpine fijados: `libcrypto3`, `libssl3`, `libxml2`, `libxslt`, `libexpat`, `libpng`, `zlib`, `c-ares`, `musl`, `xz-libs`, `busybox`, `curl`. La próxima compilación generará una imagen con todos estos paquetes en su última versión corregida. -### 24 de abril de 2026 : Enriquecimiento de la documentación de copia de seguridad IaaS OpenSource +### 30 de abril de 2026: Detalles sobre el rendimiento del almacenamiento -- **IaaS OpenSource (Sauvegarde)** : Enriquecimiento de la sección de copia de seguridad con detalles sobre la arquitectura técnica (sauvegarde incrémentale, impact du Thick provisioning sur le stockage), la seguridad (chiffrement AES-256, isolation réseau), el monitoreo y las restricciones de planificación. Traducciones disponibles EN/DE/ES/IT. +- **Almacenamiento (IaaS VMware, OpenSource, Bare Metal)** : Adición de límites absolutos de IOPS y ancho de banda máximo para todas las clases de almacenamiento. Esta información permite dimensionar mejor los entornos según las necesidades de rendimiento. -### 20 de abril de 2026 : Actualización del dimensionamiento de Managed Database +### 24 de abril de 2026: Enriquecimiento de la documentación de copia de seguridad IaaS OpenSource -- **MariaDB y PostgreSQL gestionados** : Actualización de los perfiles de dimensionamiento máximo disponibles para los servicios de bases de datos gestionadas. +- **IaaS OpenSource (Copia de seguridad)** : Enriquecimiento de la sección de copia de seguridad con precisiones sobre la arquitectura técnica (copia de seguridad incremental, impacto del Thick provisioning en el almacenamiento), la seguridad (cifrado AES-256, aislamiento de red), el monitoreo y las restricciones de planificación. Traducciones disponibles EN/DE/ES/IT. -### 17 de abril de 2026 : VM Instances — documentación ilustrada, tutoriales y traducciones +### 20 de abril de 2026: Actualización del dimensionamiento de Managed Database -- **VM Instances — Enriquecimiento documental** : Rediseño completo e ilustración de la documentación de VM Instances. La guía de inicio rápido (`quickstart.md`) cubre ahora todo el recorrido ilustrado del usuario: acceso a la sección, lista de VMs, asistente de creación en 9 pasos (familia de instancia, zona de disponibilidad, plantilla SO, diseño, nombre/copia de seguridad, Cloud Init, discos, red, resumen), y gestión de las 4 pestañas (Información, Discos, Red, Instantáneas). -- **VM Instances — Tutoriales** : Creación de 3 tutoriales dedicados en un directorio `tutorials/` : (1) **Crear su primera VM** (asistente completo ilustrado + Cloud Init + disco adicional), (2) **Gestionar los discos** (adición desde la consola + particionado de Linux), (3) **Crear y gestionar instantáneas** (creación, restauración, eliminación + buenas prácticas y comparación instantánea/copia de seguridad). La navegación lateral se actualiza con 3 entradas individuales en la categoría Tutoriales. +- **Managed MariaDB & PostgreSQL**: Actualización de las plantillas de dimensionamiento máximo disponibles para los servicios de bases de datos gestionadas. -### 17 de abril de 2026: Documentos contractuales, traducciones y armonización terminológica +### 17 de abril de 2026: VM Instances — documentación ilustrada, tutoriales y traducciones -- **Documentos contractuales — Reestructuración** : La página `contracts.md` se reorganiza con la jerarquía de los documentos contractuales en la parte superior de la página, incluyendo la lista de prioridad de los 6 documentos (CGVU, Convención SecNumCloud, Convención específica ¹, PAS ², CPU, DPA) y un recuadro de precisiones contractuales. +- **VM Instances — Enriquecimiento de la documentación** : Reestructuración completa e ilustración de la documentación de VM Instances. La guía de inicio rápido (`quickstart.md`) cubre ahora todo el recorrido del usuario ilustrado: acceso a la sección, lista de VMs, asistente de creación en 9 pasos (familia de instancia, zona de disponibilidad, plantilla de SO, esquema, nombre/copia de seguridad, Cloud Init, discos, red, resumen) y gestión de las 4 pestañas (Información, Discos, Red, Instantáneas). +- **VM Instances — Tutoriales** : Creación de 3 tutoriales dedicados en un directorio `tutorials/` : (1) **Crear su primera VM** (asistente completo ilustrado + Cloud Init + disco adicional), (2) **Gestionar los discos** (agregado desde la consola + particionamiento en Linux), (3) **Crear y gestionar instantáneas** (creación, restauración, eliminación + mejores prácticas y comparación entre instantánea y copia de seguridad). La navegación lateral se ha actualizado con 3 entradas individuales en la categoría Tutoriales. -### 16 de abril de 2026: Rediseño de la navegación, documentos contractuales y actualizaciones +### 17 de abril de 2026 : Documentos contractuales, traducciones y armonización terminológica + +- **Documentos contractuales — Reestructuración** : La página `contracts.md` se ha reorganizado con la jerarquía de los documentos contractuales en la parte superior de la página, incluyendo la lista de prioridad de los 6 documentos (CGVU, Convention SecNumCloud, Convention spécifique ¹, PAS ², CPU, DPA) y un recuadro de aclaraciones contractuales. + +### 16 de abril de 2026 : Rediseño de la navegación, documentos contractuales y actualizaciones - **Navegación — Compute** : Agrupación de VM Instances (preview), IaaS OpenSource e IaaS VMware bajo una única categoría **Compute** en la navegación (PR #277). - **Navegación — Network** : Agrupación de VPC (preview) y Private Backbone bajo una única categoría **Network** en la navegación. -- **Documentos contractuels** : Reestructuración completa de la documentación contractual — creación de una página central `/contracts` (condiciones generales, condiciones particulares, convenios de servicio SecNumCloud, SLA de VM instances) y de una página central `/shared-responsibility` (matrices RACI por servicio: IaaS, S3, PaaS, Kubernetes, LLMaaS, Red). El menú lateral contractual se reemplaza por una columna dedicada **Contractuel** en el pie de página. Traducciones disponibles EN/DE/ES/IT. -- **VM Instances** : Actualización del compromiso de nivel de servicio (SLA) del 99,9 % al 99,95 %. -- **IaaS OpenSource** : Adición de una nota sobre la duración máxima de retención de las copias de seguridad (máximo 24 meses, migración a Glacier prevista para el T1 2027). +- **Documentos contractuales** : Reestructuración completa de la documentación contractual — creación de una página hub `/contracts` (condiciones generales, condiciones particulares, acuerdos de servicio SecNumCloud, SLA de instancias VM) y de una página hub `/shared-responsibility` (matrices RACI por servicio : IaaS, S3, PaaS, Kubernetes, LLMaaS, Red). El menú lateral contractual es reemplazado por una columna dedicada **Contractual** en el footer. Traducciones disponibles EN/DE/ES/IT. +- **VM Instances** : Actualización del acuerdo de nivel de servicio (SLA) del 99,9 % al 99,95 %. +- **IaaS OpenSource** : Adición de una nota sobre el período máximo de retención de las copias de seguridad (24 meses como máximo, migración a Glacier prevista para el T1 2027). -### 15 de abril de 2026 : Nueva documentación de instancias VM (Cloud Public) +### 15 de abril de 2026: Nueva documentación de instancias VM (Cloud Public) -- **instancias VM** : Publicación de la documentación inicial del servicio de instancias VM (en vista previa), nueva oferta de máquinas virtuales compartidas de Cloud Temple. La documentación cubre la visión general del servicio, los conceptos técnicos (clases de servicio Development/General Purpose/Performance, plantillas predefinidas y personalizadas, almacenamiento, red VPC, copia de seguridad), así como una guía de inicio completa. El servicio está organizado bajo una nueva categoría **Cloud Public** en la navegación. +- **Instancias VM** : Publicación de la documentación inicial del servicio de instancias VM (en vista previa), nueva oferta de máquinas virtuales compartidas de Cloud Temple. La documentación cubre la visión general del servicio, los conceptos técnicos (clases de servicio Development/General Purpose/Performance, plantillas predefinidas y personalizadas, almacenamiento, red VPC, copia de seguridad), así como una guía de inicio completa. El servicio está organizado bajo una nueva categoría **Cloud Public** en la navegación. ### 15 de abril de 2026 : Mejora de la documentación de IaaS VMware — métricas de clúster -- **IaaS VMware** : Se ha añadido documentación detallada sobre las métricas mostradas en la vista de un clúster VMware desde la Consola Cloud Temple. Cubre los tres gráficos de memoria del clúster : **Memoria asignada** (cantidad total asignada a las VMs), **Memoria consumida** (memoria física realmente utilizada por las VMs) y **Asignación en el peor de los casos** (proyección del consumo máximo simultáneo), con la descripción precisa de lo que representa cada indicador para anticipar las necesidades de recursos. +- **IaaS VMware** : Adición de documentación detallada sobre las métricas mostradas en la vista de un clúster VMware desde la Consola Cloud Temple. Cubre los tres gráficos de memoria del clúster : **Memoria asignada** (cantidad total asignada a las VMs), **Memoria consumida** (memoria física realmente utilizada por las VMs) y **Asignación en el peor de los casos** (proyección de consumo máximo simultáneo), con la descripción precisa de lo que representa cada indicador para anticipar las necesidades de recursos. -### 15 de abril de 2026: Documentación de Managed MariaDB, Managed PostgreSQL y correcciones multilingües +### 15 de abril de 2026 : Documentación de Managed MariaDB, Managed PostgreSQL y correcciones multilingües -- **Managed MariaDB** : Publicación de la documentación inicial del servicio Managed MariaDB (en vista previa) : presentación del servicio, conceptos técnicos (arquitecturas StandAlone y Distributed), guía de inicio. -- **Managed PostgreSQL** : Publicación de la documentación inicial del servicio Managed PostgreSQL (en vista previa) : presentación del servicio, conceptos técnicos, guía de inicio. -- **Correcciones multilingües (imágenes)** : Corrección de las referencias de imágenes en las traducciones de las secciones Managed Kubernetes y Managed MariaDB para todos los idiomas (EN, DE, ES, IT) — conversión de las rutas relativas `./images/` a rutas absolutas `@site/docs/...` para garantizar un renderizado correcto en todos los idiomas. +- **Managed MariaDB** : Publicación de la documentación inicial del servicio Managed MariaDB (en preview) : presentación del servicio, conceptos técnicos (architectures StandAlone et Distributed), guía de inicio. +- **Managed PostgreSQL** : Publicación de la documentación inicial del servicio Managed PostgreSQL (en preview) : presentación del servicio, conceptos técnicos, guía de inicio. +- **Correcciones multilingües (images)** : Corrección de las referencias de imágenes en las traducciones de las secciones Managed Kubernetes y Managed MariaDB para todos los idiomas (EN, DE, ES, IT) — conversión de rutas relativas `./images/` a rutas absolutas `@site/docs/...` para garantizar una visualización correcta en todos los idiomas. - **Corrección de enlaces rotos** : Resolución de varios enlaces rotos en la documentación : referencias a las licencias LLMaaS, enlace a la consola en el tutorial de rclone (OSS), enlace IAM en la documentación de red (EN), enlaces relativos en la sección de Terraform (EN). -### 15 de abril de 2026 : Nuevo módulo Gestor de costos +### 15 de abril de 2026: Nuevo módulo Gestor de costos -- **Consola (Gestionnaire des coûts)** : Se añade la documentación completa del nuevo módulo de seguimiento de consumo accesible desde la Consola Cloud Temple. Cubre el panel de control, el consumo global (avec projection de fin de mois), la distribución por producto y por servicio, los detalles de facturación línea por línea y el catálogo de precios. +- **Consola (Gestor de costos)** : Se ha añadido la documentación completa del nuevo módulo de seguimiento del consumo accesible desde la Consola Cloud Temple. Cubre el panel de control, el consumo global (con proyección de fin de mes), el desglose por producto y por servicio, los detalles de facturación línea por línea y el catálogo de precios. ### 26 de marzo de 2026 : Actualización de la lista de subprocesadores (DPA) -- **Contractual** : Actualización del Anexo Contractual sobre Datos Personales (DPA) - revisión de la lista de subprocesadores (retiro de Microsoft Azure y Amazon Web Services, modificación de la actividad para Iron Mountain) y adición de la fecha de autorización. +- **Contractual** : Actualización del Anexo Contractual sobre Datos de Carácter Personal (DPA) - revisión de la lista de subprocesadores (retiro de Microsoft Azure y Amazon Web Services, modificación de la actividad para Iron Mountain) y adición de la fecha de autorización. ### 19 de marzo de 2026 : Mejoras en la documentación de IaaS y Terraform -- **IaaS OpenSource** : Se ha añadido una guía completa para crear una máquina virtual. El tutorial cubre los tres métodos de despliegue disponibles (plantilla, importación XVA, Marketplace) con instrucciones paso a paso y recomendaciones de buenas prácticas. -- **IaaS VMware** : Se ha añadido una página que agrupa todos los tutoriales disponibles para facilitar la navegación y el descubrimiento de las guías. -- **Terraform** : Nueva sección que explica cómo recibir automáticamente las notificaciones de las nuevas versiones del proveedor de Terraform a través de GitHub. +- **IaaS OpenSource** : Adición de una guía completa para crear una máquina virtual. El tutorial cubre los tres métodos de despliegue disponibles (modèle, import XVA, Marketplace) con instrucciones paso a paso y recomendaciones de buenas prácticas. +- **IaaS VMware** : Adición de una página que agrupa todos los tutoriales disponibles para facilitar la navegación y el descubrimiento de las guías. +- **Terraform** : Nueva sección que explica cómo recibir automáticamente las notificaciones de las nuevas versiones del Proveedor de Terraform a través de GitHub. ### 19 de marzo de 2026: Actualización del DPA y cumplimiento HDS -- **Contractual**: Actualización del Anexo Contractual sobre Datos Personales (DPA) a la versión 1.0. Integración de los últimos requisitos de la certificación HDS (Proveedor de Servicios de Alojamiento de Datos de Salud) y actualización de la lista de subcontratistas autorizados. Traducción completa en inglés, alemán, español e italiano. +- **Contractual** : Actualización del Anexo Contractual sobre Datos de Carácter Personal (DPA) a la versión 1.0. Integración de los últimos requisitos de la certificación HDS (Hospedador de Datos de Salud) y actualización de la lista de subcontratistas autorizados. Traducción completa al inglés, alemán, español e italiano. -### 21 de febrero de 2026: Mejora del SEO +### 21 de febrero de 2026: Mejora del posicionamiento SEO -- **SEO**: Corrección de la URL de producción (`https://docs.cloud-temple.com`) y de la ruta base (`/`) en la configuración de Docusaurus, garantizando URLs canónicas correctas para la indexación en Google. -- **Sitemap**: Activación de la generación automática del sitemap (`/sitemap.xml`) para mejorar el rastreo y la indexación por parte de los motores de búsqueda. -- **Robots.txt**: Adición de un archivo `robots.txt` que permite el rastreo completo del sitio y apunta al sitemap. +- **SEO** : Corrección de la URL de producción (`https://docs.cloud-temple.com`) y de la ruta base (`/`) en la configuración de Docusaurus, garantizando URLs canónicas correctas para la indexación de Google. +- **Sitemap** : Activación de la generación automática del sitemap (`/sitemap.xml`) para mejorar el rastreo y la indexación por parte de los motores de búsqueda. +- **Robots.txt** : Adición de un archivo `robots.txt` que autoriza el rastreo completo del sitio y apunta al sitemap. -### 21 de febrero de 2026: Conceptos avanzados de red y mejoras multilingües +### 21 de febrero de 2026 : Conceptos avanzados de red y mejoras multilingües -- **Red (Internet)** : Nueva página de **conceptos avanzados** que documenta las comunidades BGP y el control de la Local Preference en el backbone de Internet Cloud Temple (AS33930). Incluye una guía de configuración con un ejemplo de Bird. -- **LLMaaS** : Actualización del catálogo de modelos y adición del ciclo de vida de los modelos. Inclusión de modelos LTS (Long Term Support). -- **Consola (Seguridad)** : Mejora de la calidad de las traducciones de las alertas de seguridad (inglés, alemán, español, italiano). +- **Red (Internet)** : Nueva página de **conceptos avanzados** que documenta las comunidades BGP y el control de la Local Preference en el backbone de Internet Cloud Temple (AS33930). Incluye una guía de configuración con ejemplo de Bird. +- **LLMaaS** : Actualización del catálogo de modelos y adición del ciclo de vida de los modelos. Adición de modelos LTS (Long Term Support). +- **Consola (Seguridad)** : Mejora de la calidad de las traducciones de las alertas de seguridad (anglais, allemand, espagnol, italien). - **Multilingüe** : Traducción de la nueva página de conceptos avanzados de red a los 4 idiomas (en, de, es, it) y mejora general de la calidad de las traducciones existentes. -- **IaaS Bare Metal** : Adición de aclaraciones sobre el volumen BFS (Boot from SAN) en la guía de inicio: el Volumen 1 está dedicado a la instalación del SO, no compartible dentro de una misma AZ, con recomendación de almacenar los datos en un volumen LUN adicional. -- **Almacenamiento de Objetos (OSS)** : Adición de una página **FAQ** que cubre el acceso S3, las listas blancas IP, los enlaces prefirmados y los escenarios de uso recomendados. +- **IaaS Bare Metal** : Adición de precisiones sobre el volumen BFS (Boot from SAN) en la guía de arranque : el Volumen 1 está dedicado a la instalación del SO, no es compartible dentro de la misma AZ, con recomendación de almacenar los datos en un volumen LUN adicional. +- **Almacenamiento de Objetos (OSS)** : Adición de una página **FAQ** que cubre el acceso S3, las listas blancas de IP, los enlaces prefirmados y los escenarios de uso recomendados. -### 10 de febrero de 2026 : Actualización de tarifas de LLMaaS +### 10 de febrero de 2026: Actualización de tarifas de LLMaaS -- **LLMaaS** : Actualización global de las tarifas de la API (Input : 1,9€/M, Output : 8€/M, Raisonneur : 8€/M) en toda la documentación técnica y comercial. +- **LLMaaS**: Actualización global de las tarifas de la API (Input : 1,9€/M, Output : 8€/M, Raisonneur : 8€/M) en toda la documentación técnica y comercial. ### 5 de febrero de 2026: Aclaraciones sobre los acuerdos de nivel de servicio (SLA) - **Managed Kubernetes**: Actualización completa y finalización de los acuerdos de nivel de servicio (SLA) para la oferta Managed Kubernetes. -### 21 de enero de 2026: Mejoras y traducciones de seguridad +### 21 de enero de 2026 : Mejoras y traducciones de seguridad -- **Gestión de la consola** : Actualización de las traducciones internacionales (inglés, alemán, español, italiano) para las alertas de seguridad en la consola de gestión. +- **Console Management** : Actualización de las traducciones internacionales (inglés, alemán, español, italiano) para las alertas de seguridad en la consola de gestión. -### 19 de enero de 2026 : Extensión Managed Kubernetes y VPC +### 19 de enero de 2026: Extensión de Managed Kubernetes y VPC -- **Managed Kubernetes** : Se añade soporte para los nodos **Bare Metal** y los **GPUs** (NVIDIA). -- **Managed Kubernetes** : Nuevo tutorial sobre el uso de GPUs en un clúster de Kubernetes. -- **Managed Kubernetes** : Se reemplaza KubeCost por una guía más reciente sobre **OpenCost**. -- **Network (VPC)** : Documentación completa del servicio Virtual Private Cloud (VPC), que incluye los conceptos de alta disponibilidad (HA), las guías de inicio y los tutoriales. -- **Multilingüe** : Traducción completa del servicio VPC y de los nuevos contenidos de Kubernetes al inglés, alemán, español e italiano. +- **Managed Kubernetes**: Adición del soporte para nodos **Bare Metal** y **GPUs** (NVIDIA). +- **Managed Kubernetes**: Nuevo tutorial sobre el uso de GPUs en un clúster de Kubernetes. +- **Managed Kubernetes**: Reemplazo de KubeCost por una guía más reciente sobre **OpenCost**. +- **Network (VPC)**: Documentación completa del servicio Virtual Private Cloud (VPC), que incluye conceptos de alta disponibilidad (HA), guías de inicio y tutoriales. +- **Multilingüe**: Traducción completa del servicio VPC y de los nuevos contenidos de Kubernetes al inglés, alemán, español e italiano. ### 15 de diciembre de 2025 : Estabilización y correcciones multilingües -- **Multilingüe (Terraform, LLMaaS, Harbor)** : Corrección importante de las traducciones al español, italiano y alemán. Resolución de problemas de sintaxis MDX (blocs de code vides, balises non échappées) que impedían la compilación del sitio. -- **Multilingüe (Images)** : Restauración de las rutas de imágenes correctas en las versiones italiana y alemana para las secciones Bastión e IaaS VMware. -- **Build** : Validación del despliegue para las 5 idiomas admitidas. +- **Multilingüe (Terraform, LLMaaS, Harbor)** : Corrección importante de las traducciones al español, italiano y alemán. Resolución de problemas de sintaxis MDX (bloques de código vacíos, etiquetas no escapadas) que impedían la compilación del sitio. +- **Multilingüe (Imágenes)** : Restauración de las rutas de imágenes correctas en las versiones italiana y alemana para las secciones Bastion e IaaS VMware. +- **Build** : Validación del despliegue para el conjunto de los 5 idiomas soportados. -### 11 de diciembre de 2025 : Novedades de Managed Kubernetes +### 11 de diciembre de 2025: Novedades de Managed Kubernetes -- **Managed Kubernetes** : Añadido un nuevo tutorial sobre el uso de **Gateway API** para la gestión avanzada del tráfico. +- **Managed Kubernetes** : Añadido de un nuevo tutorial sobre el uso de **Gateway API** para la gestión avanzada del tráfico. - **Managed Kubernetes** : Actualización de la documentación sobre la gestión de cuotas (Ceph) y optimización de las herramientas de gestión de costos (OpenCost). -### 22 Noviembre 2025 : Novedades LLMaaS y mejoras globales +### 22 de noviembre de 2025: Novedades de LLMaaS y mejoras generales -- **LLMaaS (OCR)** : Adición de documentación completa para **DeepSeek-OCR**, nuestro nuevo modelo especializado en el análisis de documentos (PDF, imágenes), capaz de extraer texto estructurado, tablas y fórmulas matemáticas. -- **Multilingüe** : Resolución de problemas de accesibilidad en las versiones italiana y alemana de la documentación. -- **Calidad** : Corrección de la visualización de bloques de código en los tutoriales LLMaaS y restauración de imágenes faltantes en la guía de inicio IaaS VMware (versión italiana). +- **LLMaaS (OCR)**: Adición de documentación completa para **DeepSeek-OCR**, nuestro nuevo modelo especializado en el análisis de documentos (PDF, imágenes), capaz de extraer texto estructurado, tablas y fórmulas matemáticas. +- **Multilingüe**: Resolución de problemas de accesibilidad en las versiones italiana y alemana de la documentación. +- **Calidad**: Corrección de la visualización de los bloques de código en los tutoriales de LLMaaS y restauración de las imágenes faltantes en la guía de inicio rápido de IaaS VMware (versión italiana). -### 20 Noviembre 2025 : Actualización principal PaaS OpenShift +### 20 de noviembre de 2025 : Actualización importante de PaaS OpenShift -- **PaaS OpenShift (PR #194)** : Rediseño y actualización completa de la documentación de OpenShift, que incluye nuevas capturas de pantalla y una traducción completa al inglés, español, alemán e italiano para acompañar nuestra expansión internacional. +- **PaaS OpenShift (PR #194)** : Rediseño y actualización completa de la documentación de OpenShift, incluyendo nuevas capturas de pantalla y una traducción integral al inglés, español, alemán e italiano para acompañar nuestra expansión internacional. ### 3 de noviembre de 2025: Mejora de los tutoriales de Kubernetes -- **Managed Kubernetes** : Se ha añadido un nuevo tutorial sobre el despliegue continuo con **ArgoCD** y el enfoque GitOps. -- **Managed Kubernetes** : Revisión y mejora de los tutoriales existentes. Las guías sobre despliegue, red, gestión de permisos (Capsule) y copia de seguridad (Kasten) se han enriquecido para abordar mejor las cuestiones de seguridad, gobernanza y coste, en respuesta a las expectativas de los perfiles CISO y Comprador. +- **Managed Kubernetes** : Adición de un nuevo tutorial sobre despliegue continuo con **ArgoCD** y el enfoque GitOps. +- **Managed Kubernetes** : Revisión y mejora de los tutoriales existentes. Las guías sobre despliegue, red, gestión de permisos (Capsule) y copia de seguridad (Kasten) se han enriquecido para abordar mejor las cuestiones de seguridad, gobernanza y coste, en respuesta a las expectativas de los perfiles de CISO y Comprador. -### 28 de octubre de 2025 : Nueva documentación de Managed Kubernetes y mejoras varias +### 28 de octubre de 2025 : Nueva documentación de Managed Kubernetes y diversas mejoras -- **Managed Kubernetes (PR #193 & améliorations)**: Se ha añadido una documentación completa para el nuevo servicio Managed Kubernetes. La sección incluye una presentación del servicio, los conceptos técnicos, una guía de inicio, un primer tutorial y la matriz de responsabilidades (RACI). El contenido se ha enriquecido para responder mejor a las expectativas de los diferentes perfiles de usuarios. -- **Almacenamiento de Objetos (PR #190, #189)**: Se han añadido dos nuevos tutoriales para el servicio de Almacenamiento de Objetos: uno sobre la gestión de accesos a los buckets S3 y otro sobre el uso de Restic para las copias de seguridad. +- **Managed Kubernetes (PR #193 y mejoras)**: Adición de una documentación completa para el nuevo servicio Managed Kubernetes. La sección incluye una presentación del servicio, los conceptos técnicos, una guía de inicio, un primer tutorial y la matriz de responsabilidades (RACI). El contenido se ha enriquecido para responder mejor a las expectativas de los diferentes perfiles de usuarios. +- **Almacenamiento de Objetos (PR #190, #189)**: Adición de dos nuevos tutoriales para el servicio de Almacenamiento de Objetos: uno sobre la gestión de accesos a los buckets S3 y otro sobre el uso de Restic para las copias de seguridad. - **Contractual (PR #191)**: Corrección y actualización del documento "Data Processing Agreement" (DPA). -### 18 de octubre de 2025 : Mantenimiento y nuevas documentaciones +### 18 de octubre de 2025: Mantenimiento y nueva documentación -- **LLMaaS** : Se ha añadido una nueva pregunta a la FAQ para presentar la página de estado pública ([llmaas.status.cloud-temple.app](https://llmaas.status.cloud-temple.app/)), que permite seguir en tiempo real la disponibilidad y el rendimiento de cada modelo. -- **Contractuel** : Actualización importante del Acuerdo de Tratamiento de Datos (DPA v2) para reflejar los últimos requisitos legales y de cumplimiento. -- **Console** : Mejora y aclaración de la documentación sobre la gestión de pedidos. -- **Marketplace** : Se ha añadido un tutorial detallado sobre la personalización de imágenes de máquinas virtuales (VM) para crear plantillas reutilizables. -- **LLMaaS** : Se ha añadido una guía para configurar la extensión CLINE de VSCode con el fin de utilizar los modelos de lenguaje de Cloud Temple directamente desde el editor. -- **Almacenamiento de Objetos (OSS)** : Se han añadido aclaraciones sobre la política de ciclo de vida (Lifecycle) para la eliminación de datos. -- **Almacenamiento de Objetos (OSS)** : Se ha añadido una guía de resolución de problemas para los errores de checksum (`XAmzContentSHA256Mismatch`) con AWS CLI y Terraform. +- **LLMaaS** : Adición de una nueva pregunta a la FAQ para presentar la página de estado pública ([llmaas.status.cloud-temple.app](https://llmaas.status.cloud-temple.app/)), permitiendo seguir en tiempo real la disponibilidad y el rendimiento de cada modelo. +- **Contratos** : Actualización importante del Acuerdo de Tratamiento de Datos (DPA v2) para reflejar los últimos requisitos legales y de cumplimiento. +- **Consola** : Mejora y aclaración de la documentación sobre la gestión de comandos. +- **Marketplace** : Adición de un tutorial detallado sobre la personalización de imágenes de máquinas virtuales (VM) para crear plantillas reutilizables. +- **LLMaaS** : Adición de una guía para configurar la extensión VSCode CLINE para utilizar los modelos de lenguaje de Cloud Temple directamente desde el editor. +- **Almacenamiento de Objetos (OSS)** : Adición de aclaraciones sobre la política de ciclo de vida (Lifecycle) para la eliminación de datos. +- **Almacenamiento de Objetos (OSS)** : Adición de una guía de solución de problemas para errores de checksum (`XAmzContentSHA256Mismatch`) con AWS CLI y Terraform. - **LLMaaS** : Actualización de la lista de modelos disponibles y retraducción de más de 50 documentos para garantizar la coherencia. -### 14 de agosto de 2025 : Mejoras y correcciones +### 14 de agosto de 2025: Mejoras y correcciones -- **LLMaaS** : Actualización y aclaración de las respuestas de la FAQ para abordar mejor las preguntas técnicas y estratégicas. Se ha añadido la FAQ a la navegación. -- **General** : Corrección de varios enlaces de navegación internos en toda la documentación para una experiencia más fluida. +- **LLMaaS** : Actualización y aclaración de las respuestas de la FAQ para abordar mejor las preguntas técnicas y estratégicas. Adición de la FAQ a la navegación. +- **General** : Corrección de varios enlaces de navegación interna a lo largo de la documentación para una experiencia más fluida. -### Julio de 2025 : Novedades y actualizaciones principales +### Julio 2025: Novedades y actualizaciones principales -- **Almacenamiento de Objetos (OSS)** : - - Rediseño completo de la sección de tutoriales con guías dedicadas para herramientas populares: AWS CLI, Minio Client (`mc mirror`), Cloudberry Explorer y el SDK de Python Boto3. - - Añadidas aclaraciones sobre los conceptos de cuentas de almacenamiento y el bloqueo de objetos (Object Lock). -- **IaaS OpenSource** : - - Añadida documentación detallada sobre la gestión de la Alta Disponibilidad (HA) para los grupos de recursos y las máquinas virtuales. -- **Consola** : +- **Almacenamiento de Objetos (OSS)**: + - Rediseño completo de la sección de tutoriales con guías dedicadas para herramientas populares: AWS CLI, Minio Client (`mc mirror`), Cloudberry Explorer y el SDK Python Boto3. + - Adición de aclaraciones sobre los conceptos de cuentas de almacenamiento y bloqueo de objetos (Object Lock). +- **IaaS OpenSource**: + - Adición de documentación detallada sobre la gestión de Alta Disponibilidad (HA) para los pools de recursos y las máquinas virtuales. +- **Consola**: - Actualización de la página de alertas de seguridad con las últimas vulnerabilidades. -- **Red** : - - Añadidas nuevas capturas de pantalla para ilustrar la configuración de la conectividad IPv6. +- **Red**: + - Adición de nuevas capturas de pantalla para ilustrar la configuración de la conectividad IPv6. -### 29 de junio de 2025 : finalización de la documentación de LLMaaS +### 29 de junio de 2025: finalización de la documentación de LLMaaS -- Validación del conjunto completo de pruebas. -- Corrección y validación de los pipelines de RAG con FAISS y Qdrant. +- Validación de la suite de pruebas completa. +- Corrección y validación de los pipelines RAG con FAISS y Qdrant. - Enriquecimiento de los tutoriales con explicaciones técnicas más detalladas. - Adición de una sección sobre la seguridad de los prompts y el ciclo de vida de los modelos en los conceptos. - Mejora de la página de explicación del RAG con diagramas y detalles sobre los modelos de embedding. -- Actualización de la documentación de la API, la guía de inicio y la presentación del servicio. -- Adición de los precios para el endpoint de Transcripción de Audio. +- Actualización de la documentación de la API, de la guía de inicio y de la presentación del servicio. +- Adición de la información de precios para el endpoint Transcription Audio. - Adición de la planificación prevista del ciclo de vida de los modelos. - Adición de la matriz de responsabilidades para la oferta LLMaaS. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md b/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md index 412b0225..4b5aeb35 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md @@ -2,14 +2,14 @@ title: Conceptos --- -La oferta __IaaS (Infrastructure As A Service)__ de Cloud Temple está diseñada para satisfacer las necesidades críticas de continuidad y recuperación de la actividad, con un enfoque particular en los sectores exigentes como la industria, la banca y los seguros. Basada en tecnologías de vanguardia, esta infraestructura garantiza una disponibilidad máxima y un rendimiento óptimo para sus cargas de trabajo críticas. +La oferta __IaaS (Infrastructure As A Service)__ de Cloud Temple está diseñada para satisfacer las necesidades críticas de continuidad y recuperación de la actividad, con un énfasis especial en sectores exigentes como la industria, la banca y los seguros. Basada en tecnologías de vanguardia, esta infraestructura garantiza una disponibilidad máxima y un rendimiento óptimo para sus cargas de trabajo críticas. ## Una plataforma tecnológica de confianza -La plataforma IaaS de Cloud Temple se apoya en socios tecnológicos de renombre internacional : +La plataforma IaaS de Cloud Temple se basa en socios tecnológicos de renombre internacional : -- Cálculo : __CISCO UCS__. -- Almacenamiento : __IBM Spectrum Virtualize__, __IBM FlashSystem__ para almacenamiento de bloques, y __DELL ECS__ para almacenamiento de objetos. +- Cómputo : __CISCO UCS__. +- Almacenamiento : __IBM Spectrum Virtualize__, __IBM FlashSystem__ para el almacenamiento en bloque, y __DELL ECS__ para el almacenamiento de objetos. - Red : __JUNIPER__. - Virtualización : __Stack Opensource__, que ofrece una base fiable y probada para gestionar sus entornos cloud. @@ -17,39 +17,39 @@ Esta arquitectura se basa en el modelo __VersaStack__, una alianza entre Cisco e ## Una infraestructura dedicada y automatizada -Aunque totalmente automatizada gracias a APIs y un proveedor de Terraform, el producto IaaS de Cloud Temple ofrece una infraestructura única: +Aunque está completamente automatizada gracias a APIs y un proveedor de Terraform, el producto IaaS de Cloud Temple ofrece una infraestructura única: -- __Recursos dedicados__ : Los nodos de cálculo, volúmenes de almacenamiento y stacks de software (virtualización, copias de seguridad, firewall, etc.) nunca se comparten entre los clientes. -- __Predictibilidad máxima__ : Usted controla los ratios de virtualización, la presión de IOPS en el almacenamiento y cuenta con una facturación clara, basada en el consumo mensual. +- __Recursos dedicados__ : Los servidores blade, los volúmenes de almacenamiento y las pilas de software (virtualización, copia de seguridad, cortafuegos, etc.) nunca se comparten entre clientes. +- __Previsibilidad máxima__ : Controla las tasas de virtualización, la carga de IOPS en el almacenamiento y cuenta con una facturación clara, basada en el consumo mensual. -La plataforma está certificada __SecNumCloud__ por la [ANSSI](https://www.ssi.gouv.fr/), garantizando un alto nivel de automatización y seguridad. +La plataforma está certificada como __SecNumCloud__ por la [ANSSI](https://www.ssi.gouv.fr/), garantizando un alto nivel de automatización y seguridad. -## Principales funcionalidades +## Principales características -- Recursos de cálculo (CPU, RAM) dedicados y bajo demanda. -- Almacenamiento bajo demanda (varias clases disponibles). +- Recursos de computación (CPU, RAM) dedicados y bajo demanda. +- Almacenamiento bajo demanda (plusieurs classes disponibles). - Recursos de red (Internet, redes privadas). - Copias de seguridad cruzadas con retención configurable. -- Replicación asíncrona para almacenamiento o máquinas virtuales. -- Gestión mediante la [Consola](../console/console.md) o en modo Infraestructura como Código gracias a las APIs y al proveedor de Terraform. +- Replicación asíncrona para el almacenamiento o las máquinas virtuales. +- Gestión a través de la [Console](../console/console.md) o en modo Infraestructura como Código gracias a las APIs y al proveedor de Terraform. ## Ventajas | Ventaja | Descripción | |---------------------|------------------------------------------------------------------------------------------------------------------------------------------------| -| Confianza digital | Alojamiento de datos en Francia y cumplimiento del RGPD. | -| Seguridad | Plataforma altamente segura, certificada __SecNumCloud__, __HDS__ (Hébergement des Données de Santé), __ISO 27001__ e __ISAE 3402 tipo II__. | -| Alta disponibilidad | Tasa de disponibilidad de la plataforma del 99,99%, medida mensualmente, incluidos los períodos de mantenimiento. | -| Resiliencia | Implementación de planes de continuidad o de recuperación ante desastres según las necesidades. | -| Automatización | Plataforma totalmente automatizada diseñada para integrarse en un programa de transformación digital. | -| Bajo demanda | Recursos disponibles bajo demanda. | +| Confianza digital | Alojamiento de datos en Francia y cumplimiento del RGPD. | +| Seguridad | Plataforma altamente segura, certificada __SecNumCloud__, __HDS__ (Alojamiento de Datos de Salud), __ISO 27001__ y __ISAE 3402 tipo II__. | +| Alta disponibilidad| Tasa de disponibilidad de la plataforma del 99,99%, medida mensualmente, incluidas las ventanas de mantenimiento. | +| Resiliencia | Implementación de planes de continuidad o recuperación de actividad según las necesidades. | +| Automatización | Plataforma completamente automatizada diseñada para integrarse en un programa de transformación digital. | +| Bajo demanda | Recursos disponibles bajo demanda. | ## Regiones y zonas de disponibilidad El producto OpenIaaS se despliega en una zona de disponibilidad. Una zona de disponibilidad forma parte de una región. -Este tipo de despliegue permite elegir la ubicación de los clústeres y distribuirlos entre diferentes zonas de disponibilidad (AZ). +Este tipo de despliegue permite elegir la ubicación de los clústeres y distribuirlos en diferentes zonas de disponibilidad (AZ). Esto ofrece una mejor distribución de la carga, maximiza la redundancia y facilita la implementación de un plan de recuperación ante desastres (DRP) en caso de incidente. --- @@ -58,7 +58,7 @@ Esto ofrece una mejor distribución de la carga, maximiza la redundancia y facil Las blades de cálculo disponibles para la oferta Bare Metal ofrecen una gama de rendimiento para satisfacer diversas necesidades: -| Référence | RAM __(1)__ | Fréquence __(2)__ | Nombre de cœurs / threads | Connectivité __(3)__ | GPU __(4)__ | +| Referencia | RAM __(1)__ | Frecuencia __(2)__ | Número de núcleos / hilos | Conectividad __(3)__ | GPU __(4)__ | |-----------------------|--------------|-------------------------------------------|---------------------------|----------------------|----------------------| | __ECO__ | 384 GB | 2.20/3.0 GHz (Silver 4114 ou équivalent) | 20 / 40 hilos | 2 X 10 Gbit/s | - | | __STANDARD__ | 384 GB | 2.40/3.4 GHz (Silver 4314 ou équivalent) | 32 / 64 hilos | 2 X 25 Gbit/s | - | @@ -70,46 +70,46 @@ Las blades de cálculo disponibles para la oferta Bare Metal ofrecen una gama de ### Notas -- __(1)__ La cantidad de memoria es la físicamente disponible en las láminas y no puede modificarse. +- __(1)__ La cantidad de memoria es la físicamente disponible en los servidores blade y no puede ser modificada. - __(2)__ Las frecuencias indicadas corresponden a la frecuencia base mínima y a la frecuencia turbo. -- __(3)__ La conectividad física se comparte para el acceso a la red y al almacenamiento en bloque, gracias a una arquitectura convergente Cisco UCS. +- __(3)__ La conectividad física está compartida para el acceso a la red y el acceso a almacenamiento en bloque, gracias a una arquitectura convergente Cisco UCS. - __(4)__ Los GPU disponibles evolucionan en función de las últimas tecnologías. Al 1 de mayo de 2024, el producto incluye GPU NVIDIA LOVELACE L40S. - __(5)__ La alta disponibilidad en un clúster está disponible únicamente a partir de 2 nodos. -La disponibilidad de la infraestructura está garantizada al 99.9%, medida mensualmente, incluidas las ventanas de mantenimiento. Cualquier solicitud relacionada con el SLA debe declararse mediante un ticket de incidencia. +La disponibilidad de la infraestructura está garantizada al 99.9%, medida mensualmente, incluidas las ventanas de mantenimiento. Cualquier solicitud relacionada con el SLA debe declararse a través de un ticket de incidente. --- ## Clases de almacenamiento en modo bloque -El almacenamiento en bloque distribuido, basado en __IBM Spectrum Virtualize__, ofrece una gama de rendimiento adaptada a diversos casos de uso: +El almacenamiento distribuido en bloque, basado en __IBM Spectrum Virtualize__, ofrece un rango de rendimiento adaptado a diversos casos de uso: -| Referencia | IOPS/To | Límite máximo de IOPS / Volumen | Ancho de banda máximo / Volumen | Uso principal | +| Referencia | IOPS/TB | Límite máximo de IOPS / Volumen | Ancho de banda máximo / Volumen | Uso principal | |-----------------------------------|----------------|---------------------------------|---------------------------------|--------------------------------------| -| **FLASH - Esencial** | 500 | 10 000 IOPS | 512 Mo/s | Cargas de trabajo ligeras | -| **FLASH - Estándar** | 1500 | 30 000 IOPS | 1024 Mo/s | Cargas de trabajo estándar | -| **FLASH - Premium** | 3000 | 30 000 IOPS | 1024 Mo/s | Cargas intensivas | -| **FLASH - Enterprise** | 7500 | 30 000 IOPS | 1024 Mo/s | Cargas críticas | -| **FLASH - Ultra** | 15000 | 30 000 IOPS | 1024 Mo/s | Cargas ultra intensivas | -| **ALMACENAMIENTO MASIVO - Archivado** | No aplicable | No garantizado | No garantizado | Almacenamiento económico para archivado | +| **FLASH - Esencial** | 500 | 10 000 IOPS | 512 MB/s | Cargas de trabajo ligeras | +| **FLASH - Estándar** | 1500 | 30 000 IOPS | 1024 MB/s | Cargas de trabajo estándar | +| **FLASH - Premium** | 3000 | 30 000 IOPS | 1024 MB/s | Cargas intensivas | +| **FLASH - Enterprise** | 7500 | 30 000 IOPS | 1024 MB/s | Cargas críticas | +| **FLASH - Ultra** | 15000 | 30 000 IOPS | 1024 MB/s | Cargas ultra intensivas | +| **MASS STORAGE - Archivado** | No aplicable | No garantizado | No garantizado | Almacenamiento económico para archivado | ### Características -- **Rendimiento** : El rendimiento efectivo crece de manera lineal en función del volumen asignado (según la relación IOPS/TB), **dentro del límite absoluto de hardware definido anteriormente**. (Por ejemplo, un volumen de 10 TB en la clase Ultra estará físicamente limitado a 30 000 IOPS y 1024 MB/s). -- __Tecnología__ : Flash NVMe con __RAID 6 Distribuido__ para una mayor resiliencia. +- **Rendimiento** : El rendimiento efectivo aumenta de forma lineal en función de la capacidad asignada (según la relación IOPS/TB), **dentro del límite del techo de hardware absoluto definido anteriormente**. (Por ejemplo, un volumen de 10 TB en clase Ultra estará físicamente limitado a 30 000 IOPS y 1024 MB/s). +- __Tecnología__ : Flash NVMe con __Distributed RAID 6__ para una mayor resiliencia. - __Disponibilidad__ : 99.99%, medida mensualmente. -- __Restricciones__ : Sin limitación en las lecturas o escrituras. Sin compresión ni deduplicación automática, garantizando el uso integral de los volúmenes reservados. +- __Restricciones__ : Sin limitaciones en las lecturas o escrituras. Sin compresión o deduplicación automática, garantizando el uso integral de los volúmenes reservados. -### Seguridad y Cifrado del Almacenamiento de Bloques +### Seguridad y Cifrado del Almacenamiento en Bloque -Para garantizar la confidencialidad de sus datos en reposo, toda nuestra infraestructura de almacenamiento de bloques integra un cifrado hardware robusto. +Para garantizar la confidencialidad de sus datos en reposo, toda nuestra infraestructura de almacenamiento en bloque integra un cifrado por hardware robusto. - __Tipo de Cifrado__ : Los datos se cifran directamente en los discos (`Data At Rest`) utilizando el algoritmo __XTS-AES 256__. -- __Conformidad__ : Este método de cifrado cumple con la norma __FIPS 1-40-2__, garantizando un alto nivel de seguridad validado. -- __Funcionamiento__ : El cifrado se aplica en el momento de la escritura de los datos en el soporte de almacenamiento físico. +- __Cumplimiento__ : Este método de cifrado cumple con la norma __FIPS 1-40-2__, garantizando un alto nivel de seguridad validado. +- __Funcionamiento__ : El cifrado se aplica en el momento de la escritura de los datos en el medio de almacenamiento físico. -:::warning[Punto de atención sobre la replicación] -Es importante destacar que este cifrado protege los datos almacenados en los discos. No está activo "on-the-fly", lo que significa que los datos no se cifran durante las operaciones de replicación de almacenamiento entre las zonas de disponibilidad. La seguridad de las transferencias está garantizada por canales de comunicación dedicados y seguros. +:::warning[Point d'attention sur la réplication] +Es importante tener en cuenta que este cifrado protege los datos almacenados en los discos. No está activo "on-the-fly", lo que significa que los datos no se cifran durante las operaciones de replicación de almacenamiento entre las zonas de disponibilidad. La seguridad de las transferencias está garantizada mediante canales de comunicación dedicados y seguros. ::: --- @@ -122,54 +122,54 @@ Dos tipos de redes están disponibles desde la configuración de una máquina vi ### Las redes de tipo VLAN -Las redes de tipo VLAN deben asignarse a razón de un VLAN por tarjeta de red. Si desea utilizar varias redes, basta con crear varias tarjetas de red. +Las redes de tipo VLAN se propagan a razón de un VLAN por tarjeta de red. Si desea utilizar varias redes, basta con crear varias tarjetas de red. -Existe una limitación en el número máximo de tarjetas que se pueden crear en una VM, y es de 7. +Existe una limitación en el número máximo de tarjetas que se pueden crear en una VM, que es de 7. -### La Troncal VLAN +### El VLAN TRUNK -En el caso de que deba propagar más de 7 VLANs, debe utilizar la Troncal VLAN. -La Troncal VLAN permite el paso de todas sus VLANs a través de una sola tarjeta. La configuración de los ID de VLAN debe realizarse mediante interfaces virtuales de tipo VLAN desde el sistema operativo de la VM. Los ID de VLAN son los mismos que los presentes y visibles desde la consola. +En caso de que deba propagar más de 7 VLANs, debe utilizar el VLAN Trunk. +El VLAN Trunk permite el paso de todos sus VLANs a través de una única tarjeta. La configuración de los IDs de VLAN debe realizarse mediante interfaces virtuales de tipo VLAN desde el sistema operativo de la VM. Los IDs de VLAN son los mismos que los presentes y visibles desde la consola. ## Copia de seguridad de máquinas virtuales La oferta OpenIaaS integra __una arquitectura de copia de seguridad distribuida nativa y no desactivable__, elemento obligatorio en el marco de la certificación SecNumCloud francesa. -Las copias de seguridad se almacenan en el [Almacenamiento de Objetos certificado SecNumCloud](../storage/oss), garantizando una protección óptima en caso de fallo grave del centro de datos de producción. Este enfoque permite restaurar sus datos en un centro de datos secundario, incluso en caso de un incidente crítico como un incendio. +Las copias de seguridad se almacenan en el [Almacenamiento de Objetos certificado SecNumCloud](../storage/oss), garantizando una protección óptima en caso de fallo mayor del centro de datos de producción. Este enfoque permite restaurar sus datos en un centro de datos secundario, incluso en caso de un incidente crítico como un incendio. ### Servicios de protección de datos disponibles | Servicio | Descripción | |---|---| -| **Copia de seguridad incremental (Agentless)** | Copia de seguridad sin agente a través de los mecanismos nativos del hipervisor, hacia un repositorio S3 remoto. | -| **Copia de seguridad de metadatos** | Protección de las configuraciones del grupo de virtualización y del orquestador de copias de seguridad — indispensable para la Recuperación ante Desastres. | -| **Restauración granular** | Restauración posible a nivel de VM completa, disco virtual individual o archivo unitario. | -| **Offloading S3 Multi-AZ** | Externalización al almacenamiento de objetos S3 Cloud Temple replicado entre zonas de disponibilidad. | +| **Copia de seguridad incremental (Agentless)** | Copia de seguridad sin agente mediante los mecanismos nativos del hipervisor, hacia un repositorio S3 remoto. | +| **Copia de seguridad de metadatos** | Protección de las configuraciones del pool de virtualización y del orquestador de copias de seguridad — indispensable para la Recuperación ante Desastres. | +| **Restauración granular** | Restauración posible a nivel de VM completa, disco virtual individual o archivo único. | +| **Offloading S3 Multi-AZ** | Externalización hacia el almacenamiento de objetos S3 Cloud Temple replicado entre zonas de disponibilidad. | -Las velocidades de copia de seguridad y restauración dependen de la tasa de cambio en los entornos. La política de copia de seguridad es totalmente configurable desde [la Consola Cloud Temple](../console/console.md) para cada máquina virtual. +Las velocidades de copia de seguridad y restauración dependen de la tasa de cambios en los entornos. La política de copia de seguridad es completamente configurable desde [la Console Cloud Temple](../console/console.md) para cada máquina virtual. -| Referencia | Unidad | SKU | +| Referencia | Unidad | SKU | | ---------------------------------------------| ----- | ------------------------------ | -| COPIA DE SEGURIDAD - Acceso al servicio | 1 VM | csp:(region):openiaas:backup:vm:v1 | +| COPIA DE SEGURIDAD - Acceso al servicio | 1 VM | csp:(region):openiaas:backup:vm:v1 | --- ### Arquitectura técnica de la copia de seguridad -#### Visión general +#### Vista general -La arquitectura se basa en una separación estricta entre el **plano de control** y el **plano de datos**: el orquestador de copias de seguridad se aloja en el cluster de gestión de Cloud Temple (distinto e inaccesible para el cliente), mientras que los datos de copia de seguridad se almacenan en un repositorio S3 remoto, físicamente separado de la infraestructura de producción. Los datos se transmiten cifrados entre ambos componentes. +La arquitectura se basa en una separación estricta entre el **plan de control** y el **plan de datos** : el orquestador de copias de seguridad está alojado en el clúster de gestión de Cloud Temple (distinto e inaccesible para el cliente), mientras que los datos de copia de seguridad se almacenan en un repositorio S3 remoto, físicamente separado de la infraestructura de producción. Los datos transitan cifrados entre ambos componentes. #### Orquestador de copias de seguridad El orquestador se despliega en el clúster de gestión de Cloud Temple, **inaccesible directamente para el cliente**. Orquesta todos los trabajos de copia de seguridad y gestiona el cifrado. -- **Políticas estándar** : se aplican políticas de copia de seguridad por defecto a cada tenant. -- **Políticas personalizadas** : el cliente puede solicitar frecuencias o retenciones específicas mediante un ticket de soporte en la consola de Cloud Temple. +- **Políticas estándar**: se aplican políticas de copia de seguridad por defecto a cada tenant. +- **Políticas personalizadas**: el cliente puede solicitar frecuencias o periodos de retención específicos mediante un ticket de soporte en la consola de Cloud Temple. #### Almacenamiento remoto S3 -Las copias de seguridad se envían al [Almacenamiento de Objetos certificado SecNumCloud](../storage/oss) de Cloud Temple, con replicación Multi-AZ para garantizar la resiliencia frente a la pérdida de un sitio físico completo. +Las copias de seguridad se envían al [Almacenamiento de Objetos calificado SecNumCloud](../storage/oss) de Cloud Temple, con replicación Multi-AZ para garantizar la resiliencia ante la pérdida de un sitio físico completo. --- @@ -178,56 +178,56 @@ Las copias de seguridad se envían al [Almacenamiento de Objetos certificado Sec El servicio utiliza un modo de copia de seguridad **incremental**. Este modo apunta a un **Backup Repository** (el almacenamiento S3 remoto) y nunca exporta una copia de seguridad completa después de la primera: solo se transfieren los **bloques de datos modificados** en cada ciclo. :::info[Copia de seguridad incremental vs Replicación] -La **copia de seguridad incremental** apunta a un repositorio S3 remoto y está optimizada para la **protección a largo plazo**. No debe confundirse con la **replicación** (Recuperación ante Desastres en caliente) que apunta a un Storage Repository local — este modo está cubierto por la funcionalidad de [réplication de machines virtuelles](#réplication-de-machines-virtuelles). +La **copia de seguridad incremental** apunta a un depósito S3 remoto y está optimizada para la **protección a largo plazo**. No debe confundirse con la **replicación** (Disaster Recovery en caliente) que apunta a un Storage Repository local — este modo está cubierto por la funcionalidad de [replicación de máquinas virtuales](#réplication-de-machines-virtuelles). ::: #### Ciclo de vida técnico de una copia de seguridad incremental -A continuación se muestran las etapas sucesivas que se activan en cada ejecución de un trabajo de copia de seguridad: +A continuación se presentan las etapas sucesivas que se desencadenan en cada ejecución de un trabajo de copia de seguridad: **1. Creación de la instantánea local (Source)** -Al iniciar el trabajo, el orquestador solicita al hipervisor que cree una instantánea de la VM. Esta instantánea sirve como punto de comparación para calcular el delta con respecto a la instantánea de referencia anterior. +Al iniciar el trabajo, el orquestador solicita al hipervisor que cree una instantánea de la VM. Esta instantánea sirve como punto de comparación para calcular el delta en relación con la instantánea de referencia anterior. **2. Exportación diferencial mediante Changed Block Tracking (CBT)** -El orquestador compara la nueva instantánea con la instantánea de referencia anterior mediante los metadatos CBT. Solo se extraen los bloques de datos que han cambiado desde la última copia de seguridad, no el disco completo. +El orquestador compara la nueva instantánea con la instantánea de referencia anterior mediante los metadatos CBT. Solo se extraen los bloques de datos que han cambiado desde la última copia de seguridad, no la totalidad del disco. **3. Cifrado y transferencia a S3** -Los bloques modificados son **cifrados en tiempo real por el orquestador** y luego enviados a través de HTTPS/TLS 1.3 hacia el bucket S3 remoto. +Los bloques modificados se **cifran en tiempo real por el orquestador** y luego se envían mediante HTTPS/TLS 1.3 al bucket S3 remoto. **4. Rotación de instantáneas (Coalesce)** -Una vez validada la transferencia, se elimina la antigua instantánea de referencia y la nueva instantánea se convierte en la referencia para el siguiente ciclo. El hipervisor activa entonces un proceso de **coalesce** (fusion) para reintegrar los datos del antiguo delta en la cadena de discos virtuales. +Una vez validada la transferencia, la antigua instantánea de referencia se elimina y la nueva instantánea se convierte en la referencia para el siguiente ciclo. El hipervisor entonces desencadena un proceso de **coalesce** (fusion) para reintegrar los datos del delta anterior en la cadena de discos virtuales. -:::warning[Impact I/O du Coalesce] -La operación de coalesce es **intensiva en E/S** en el almacenamiento de producción. Se activa automáticamente después de cada copia de seguridad exitosa. Se recomienda programar las ventanas de copia de seguridad durante los períodos de baja carga de aplicaciones. +:::warning[Impacto de I/O del Coalesce] +La operación de coalesce es **intensiva en I/O** en el almacenamiento de producción. Se desencadena automáticamente después de cada copia de seguridad exitosa. Se recomienda programar las ventanas de copia de seguridad durante períodos de baja carga de la aplicación. ::: **5. Gestión de la retención en S3 (Merge) y Key Backup Interval** -En el almacenamiento S3, el orquestador gestiona la rotación de las copias de seguridad mediante la **fusión** (*merge*) de los antiguos deltas en la copia de seguridad completa más antigua conservada según la política de retención. +En el almacenamiento S3, el orquestador gestiona la rotación de las copias de seguridad mediante la **fusión** (*merge*) de los deltas antiguos en la copia de seguridad completa más antigua conservada según la política de retención. -Para garantizar la integridad de la cadena de copias de seguridad, una copia de seguridad completa se **fuerza periódicamente** (típicamente cada 20 incrementos — *Key Backup Interval*). Esto crea un nuevo punto de partida limpio y limita el impacto de una posible corrupción de un eslabón de la cadena. +Para garantizar la integridad de la cadena de copias de seguridad, se **fuerza periódicamente** una copia de seguridad completa (típicamente cada 20 incrementos — *Key Backup Interval*). Esto crea un nuevo punto de partida limpio y limita el impacto de una posible corrupción de un eslabón de la cadena. --- ### Impacto en el dimensionamiento del almacenamiento de producción -:::warning[Punto de atención crítico — Almacenamiento en bloque (Thick provisioning)] -La oferta OpenIaaS se basa en almacenamiento en bloque de alto rendimiento (Fibre Channel / LVM). Las instantáneas (snapshots) utilizadas en la copia de seguridad incremental se provisionan en modo **Thick**: cada instantánea consume en el Repositorio de almacenamiento (SR) el **tamaño nominal completo del disco de la VM**, y no únicamente el delta real. +:::warning[Punto de atención crítico — Almacenamiento en Bloque (Thick provisioning)] +La oferta OpenIaaS se basa en almacenamiento en bloque de alto rendimiento (Fibre Channel / LVM). Los snapshots utilizados por la copia de seguridad incremental se provisionan en modo **Thick**: cada snapshot consume en el Storage Repository (SR) el **tamaño nominal completo del disco de la VM**, y no solo el delta real. -**Ejemplo de consumo para una VM con un disco de 50 Go:** +**Ejemplo de consumo para una VM con un disco de 50 GB:** | Elemento | Consumo en el SR | |---|---| -| Disco VM activo | 50 Go | -| Instantánea de referencia permanente (para el cálculo del delta) | 50 Go | -| Instantánea temporal creada durante la exportación | 50 Go | -| **Total requerido durante la ventana de copia de seguridad** | **hasta 150 Go** | +| Disco VM activo | 50 GB | +| Snapshot de referencia permanente (para el cálculo del delta) | 50 GB | +| Snapshot temporal creado durante la exportación | 50 GB | +| **Total requerido durante la ventana de copia de seguridad** | **hasta 150 GB** | -**Regla de dimensionamiento recomendada** : reservar **al menos un 50% de espacio libre** en el almacenamiento de producción con respecto al volumen total de las VMs respaldadas, para soportar esta sobrecarga inherente al almacenamiento en bloque de alto rendimiento. +**Regla de dimensionamiento recomendada**: prever **al menos un 50% de espacio libre** en el almacenamiento de producción en relación con el volumen total de las VMs respaldadas, para soportar esta sobrecarga inherente al almacenamiento en bloque de alto rendimiento. ::: --- @@ -236,105 +236,105 @@ La oferta OpenIaaS se basa en almacenamiento en bloque de alto rendimiento (Fibr #### Cifrado en tránsito -Todas las comunicaciones entre el orquestador de copias de seguridad y el almacenamiento S3 están cifradas mediante **HTTPS / TLS 1.3**. +Todas las comunicaciones entre el orquestador de copia de seguridad y el almacenamiento S3 están cifradas mediante **HTTPS / TLS 1.3**. #### Cifrado en reposo (At Rest) y gestión de claves -El cifrado es aplicado por el orquestador de respaldo, **antes** del envío de los datos hacia S3. +El cifrado es aplicado por el orquestador de copias de seguridad, **antes** del envío de los datos a S3. | Parámetro | Valor | |---|---| | **Algoritmo** | AES-256 o ChaCha20-Poly1305 | -| **Generación de la clave** | Automática al desplegar el orquestador de respaldo | -| **Almacenamiento de la clave** | Vault centralizado Cloud Temple (nunca expuesto en la interfaz del cliente) | -| **Resiliencia** | En caso de pérdida del orquestador, la clave se reintroduce desde el Vault para restaurar el servicio | +| **Generación de la clave** | Automática al desplegar el orquestador de copias de seguridad | +| **Almacenamiento de la clave** | Vault centralizado Cloud Temple (nunca expuesto en la interfaz de cliente) | +| **Resiliencia** | En caso de pérdida del orquestador, la clave se reinyecta desde el Vault para restaurar el servicio | #### Aislamiento de red (arquitectura SecNumCloud) -La infraestructura de copias de seguridad está diseñada para ser **estrictamente estanca** con respecto a los entornos cliente : +La infraestructura de copia de seguridad está diseñada para ser **estrictamente aislada** respecto a los entornos de los clientes: -- **Separación física** : las redes *Cliente*, *Administración* y *Copia de seguridad* se apoyan en backbones físicos distintos y contextos de enrutamiento (VRF) separados. -- **Imposibilidad de infección lateral** : una VM comprometida no puede acceder al almacenamiento S3 ni al orquestor de copias de seguridad — no existe ninguna ruta de red entre ellos. El S3 nunca se «monta» en la VM. +- **Separación física**: las redes *Cliente*, *Administración* y *Backup* se basan en backbones físicos distintos y contextos de enrutamiento (VRF) separados. +- **Imposibilidad de infección lateral**: una VM comprometida no puede alcanzar el almacenamiento S3 ni el orquestador de copias de seguridad — no existe ninguna ruta de red entre ellos. El S3 nunca se « monta » en la VM. #### Administración segura -La administración de la plataforma de copia de seguridad está **reservada a los equipos Backup de Cloud Temple** y sujeta a los requisitos SecNumCloud: +La administración de la plataforma de copia de seguridad está **reservada a los equipos de Backup de Cloud Temple** y sujeta a los requisitos de SecNumCloud: | Control | Medida | |---|---| -| **Bastión de acceso** | Paso obligatorio por un bastión de administración interno endurecido (Ubuntu Hardened) | -| **Equipo de trabajo** | Acceso únicamente desde portátiles de administración dedicados y seguros | -| **Autenticación** | MFA obligatorio mediante un directorio LDAP de administración dedicado (distinto del LDAP de oficina) | +| **Bastión de acceso** | Paso obligatorio a través de un bastión de administración interno endurecido (Ubuntu Hardened) | +| **Estación de trabajo** | Acceso únicamente desde laptops de administración dedicados y seguros | +| **Autenticación** | MFA obligatorio a través de un directorio LDAP de administración dedicado (distinto del LDAP corporativo) | --- -### Monitorización y auditoría +### Monitoreo y auditoría - **Registros de copia de seguridad** : visibles por el cliente directamente en la Consola Cloud Temple — estado (éxito/fallo), volumen, marca de tiempo. -- **Registros de acceso de administrador** : los accesos a las infraestructuras de copia de seguridad (orquestador, S3) se registran y **auditan mensualmente** para detectar cualquier anomalía. -- **Pruebas de intrusión (Pentests PASSI)** : la infraestructura es objeto de pentests regulares por parte de proveedores cualificados PASSI en el marco del mantenimiento de la certificación SecNumCloud. -- **Seguridad física** : todos los equipos están alojados en las zonas SecNumCloud (jaulas físicas dedicadas con control de acceso biométrico) de los centros de datos Cloud Temple. +- **Registros de acceso de administrador** : los accesos a las infraestructuras de copia de seguridad (orquestador, S3) se registran y **se auditan mensualmente** para detectar cualquier anomalía. +- **Pruebas de intrusión (Pentests PASSI)** : la infraestructura está sujeta a pruebas de intrusión regulares por parte de proveedores cualificados PASSI en el marco del mantenimiento de la calificación SecNumCloud. +- **Seguridad física** : todo el equipo está alojado en las zonas SecNumCloud (jaulas físicas dedicadas con control de acceso biométrico) de los centros de datos Cloud Temple. --- ### Compatibilidad y casos particulares -:::warning[VMs con escrituras en disco continuas] -Algunas máquinas virtuales no son compatibles con esta tecnología de copia de seguridad cuando sus **cargas de escritura en disco son constantes** (bases de datos activas, registros transaccionales, etc.). El hipervisor no puede entonces finalizar la instantánea sin congelar la VM, lo que puede tardar varias horas. +:::warning[VMs à écritures disque continues] +Algunas máquinas virtuales no son compatibles con esta tecnología de copia de seguridad cuando sus **cargas de escritura de disco son constantes** (bases de données actives, journaux transactionnels, etc.). El hipervisor no puede entonces finalizar la instantánea sin congelar la VM, lo cual puede durar varias horas. -Para estas cargas de trabajo, recomendamos **complementar o reemplazar la copia de seguridad del hipervisor por una copia de seguridad a nivel de aplicación** : volcado de base de datos (pg_dump, mysqldump…), copia de seguridad mediante agente o exportación nativa de la aplicación. +Para estas cargas de trabajo, recomendamos **completar o reemplazar la copia de seguridad del hipervisor con una copia de seguridad a nivel de aplicación** : volcado de base de datos (pg_dump, mysqldump…), copia de seguridad mediante agente, o exportación nativa de la aplicación. ::: --- ### Creación de una política de copia de seguridad -La creación de una política de copia de seguridad es una operación de administración realizada **exclusivamente a través de una solicitud de soporte**, accesible mediante el icono de salvavidas en la esquina superior derecha de la interfaz. +La creación de una política de copia de seguridad es una operación de administración realizada **exclusivamente a través de una solicitud de soporte**, accesible mediante el icono de ayuda en la parte superior derecha de la interfaz. La solicitud debe especificar: - El nombre de su Organización -- Los datos de contacto de un contacto (correo electrónico y teléfono) para finalizar la configuración +- Los datos de contacto de un responsable (correo electrónico y teléfono) para finalizar la configuración - El nombre del tenant - El nombre de la política de copia de seguridad - Las características deseadas: frecuencia, retención (x días, y semanas, z meses…) -#### Restricciones de planificación +#### Restricciones de programación | Restricción | Valor | |---|---| | **Intervalo mínimo entre dos ejecuciones** | 24 horas | | **Retención máxima** | 24 meses | -| **Ejecuciones simultáneas por política** | 1 a la vez | +| **Ejecuciones simultáneas por política** | 1 sola a la vez | :::warning[Una política solo puede ejecutarse una vez a la vez] -Cada política de copia de seguridad es **mono-instancia** : solo puede haber una ejecución activa simultáneamente. +Cada política de copia de seguridad es **mono-instancia**: solo una ejecución puede estar activa simultáneamente. -**Consecuencia práctica** : si agrega muchas máquinas virtuales a una política existente y la copia de seguridad del día anterior aún no ha terminado en el momento de la ejecución programada, **el nuevo ciclo no se iniciará** — se omitirá hasta la próxima ocurrencia. +**Consecuencia práctica**: si agrega muchas máquinas virtuales a una política existente y la copia de seguridad del día anterior aún no ha finalizado en el momento del disparo programado, **el nuevo ciclo no comenzará** — se ignorará hasta la siguiente ocurrencia. -Para evitar este escenario : -- verifique las **duraciones de ejecución** de sus trabajos desde los registros de la Console Cloud Temple, -- ajuste la **frecuencia** o el **tamaño de la política** si las copias de seguridad se desbordan regularmente en la ventana siguiente, -- considere **distribuir las VMs en varias políticas** con horarios escalonados para ámbitos grandes. +Para evitar esta situación: +- verifique las **duraciones de ejecución** de sus trabajos desde los registros de la Consola Cloud Temple, +- ajuste la **frecuencia** o el **tamaño de la política** si las copias de seguridad se desbordan regularmente en la siguiente ventana, +- considere **distribuir las VM en varias políticas** con horarios escalonados para perímetros grandes. ::: :::info[Retención a largo plazo — disponibilidad futura] -**La retención máxima es actualmente de 24 meses.** Una retención a largo plazo (hasta 10 años) se integrará con el lanzamiento de nuestro producto **Glacier**, previsto para el **primer trimestre de 2027**, como suscripción complementaria. +**La retención máxima es actualmente de 24 meses.** Una retención a largo plazo (hasta 10 años) se integrará con el lanzamiento de nuestro producto **Glacier**, previsto para el **primer trimestre de 2027**, en forma de suscripción complementaria. -Para duraciones de retención tan largas, recomendamos respaldar **exclusivamente archivos planos** (archivos sin formato, documentos estáticos) así como **volcados de bases de datos**. La restauración de un servidor completo después de 10 años implica de hecho riesgos importantes : muchos servicios o dependencias pueden haberse vuelto obsoletos o incompatibles con el entorno actual. +Para períodos de retención tan largos, recomendamos respaldar **exclusivamente archivos planos** (archivos crudos, documentos estáticos) así como **volcados de bases de datos**. La restauración de un servidor completo después de 10 años conlleva importantes riesgos: muchos servicios o dependencias pueden haberse vuelto obsoletos o incompatibles con el entorno actual. -**Alternativa disponible desde ahora** : el servicio de **copia de seguridad mediante agente**, disponible como suscripción complementaria. Contacte al soporte para más información. +**Alternativa disponible ahora mismo**: el servicio de **copia de seguridad mediante agente**, disponible como suscripción complementaria. Contacte al soporte para obtener más información. ::: ## Las máquinas virtuales -### Gestión de recursos vCPU +### Gestión de los recursos vCPU -Las modificaciones de recursos vCPU se realizan en frío (máquina apagada). La plataforma soporta hasta 254 vCPUs por máquina virtual (límite teórico), con pruebas satisfactorias realizadas en VMs Linux equipadas con 128 vCPUs. +Las modificaciones de recursos vCPU se realizan en frío (máquina apagada). La plataforma soporta hasta 254 vCPUs por máquina virtual (límite teórico), con pruebas exitosas realizadas en VMs Linux equipadas con 128 vCPUs. -Es importante tener en cuenta que el soporte del sistema operativo invitado constituye un factor determinante durante la asignación de recursos. Una asignación que supere los límites admitidos por el sistema operativo puede provocar problemas de rendimiento significativos. +Es importante tener en cuenta que el soporte del sistema operativo invitado constituye un factor determinante durante la asignación de recursos. Una asignación que supere los límites soportados por el sistema operativo puede provocar problemas de rendimiento significativos. -### Gestión de recursos de memoria +### Gestión de los recursos de memoria Las modificaciones de memoria también se realizan en frío. Los límites son los siguientes: @@ -342,34 +342,34 @@ Las modificaciones de memoria también se realizan en frío. Los límites son lo - 8 TiB sin soporte para instantáneas de memoria - 16 TiB (límite teórico sin soporte de seguridad, menos la RAM asignada a Xen y al dominio de control) -La memoria realmente utilizable puede estar limitada por el sistema operativo invitado. Superar los límites admitidos por el SO invitado puede provocar una degradación del rendimiento. +La memoria realmente utilizable puede estar limitada por el sistema operativo invitado. Superar los límites admitidos por el SO invitado puede provocar una disminución del rendimiento. ### Gestión de discos -- El tamaño máximo de un disco es de 2 TB +- El tamaño máximo de un disco es de 2 To - Los discos utilizan el formato VHD estándar -- El número máximo de discos virtuales por máquina virtual, incluidos los lectores de CD-ROM, es de 24 +- El número máximo de discos virtuales por máquina virtual, incluidas las unidades de CD-ROM, es de 24 No es posible redimensionar los discos una vez creados. Para ampliar la capacidad de almacenamiento, es necesario crear un nuevo disco. -### Herramientas para máquinas virtuales +### Herramientas para las máquinas virtuales -Estas herramientas se utilizan para garantizar el funcionamiento óptimo de las máquinas virtuales. Cuando desee realizar una acción y sea necesario una de estas herramientas, aparecerá un mensaje en la consola de Cloud Temple. -Para instalar estas herramientas, puede consultar los sitios oficiales de Xen Server para obtener instrucciones precisas según su sistema operativo. +Estas herramientas se utilizan para garantizar un funcionamiento óptimo de las máquinas virtuales. Cuando desee realizar una acción y alguna de estas herramientas sea necesaria, se mostrará un mensaje en la consola de Cloud Temple. +Para instalar estas herramientas, puede consultar los sitios oficiales de Xen Server para obtener un procedimiento específico según su sistema operativo. -#### Agente de gestión +#### Agente de Gestión -El Agente de gestión es un componente instalado en cada máquina virtual. Permite al hipervisor gestionar mejor la máquina al tener acceso a más información y permite realizar ciertas acciones de manera más eficiente. +El Agente de Gestión es un componente instalado en cada máquina virtual. Permite al hipervisor gestionar mejor la máquina al tener acceso a más información y permite realizar ciertas acciones de manera más limpia. -#### Controladores PV (Controladores de Paravirtualización) +#### Controladores PV (Paravirtualization Drivers) Los controladores PV son controladores instalados en la máquina virtual para mejorar su rendimiento. -Sin estos controladores, la máquina funciona, pero más lentamente. Además, permiten realizar ciertas operaciones avanzadas. -Los controladores PV están instalados de forma nativa en la mayoría de los kernels Linux actuales. +Sin estos controladores, la máquina funciona, pero más lentamente. Además, permiten realizar ciertas acciones avanzadas. +Los controladores PV se instalan de forma nativa en la mayoría de los kernels Linux actuales. -#### Tools +#### Herramientas -Las Tools son un conjunto de componentes de software que mejoran la integración de la máquina virtual con la infraestructura de virtualización. +Las herramientas son un conjunto de componentes de software que mejoran la integración de la máquina virtual con la infraestructura de virtualización. ## Catálogos @@ -383,28 +383,28 @@ En la vista detallada de una plantilla de máquina virtual, puede consultar info Cuando el número de discos virtuales se indica como 0, significa que se trata de una plantilla de configuración sin sistema operativo preinstalado, lo que le permite desplegar su propio entorno personalizado. -## Replicación de máquinas virtuales +## Réplication de máquinas virtuales -La __replicación de máquinas virtuales__ de Cloud Temple garantiza la protección y la continuidad de sus datos críticos mediante una copia automatizada de sus entornos a una zona de disponibilidad distinta. Esta funcionalidad, integrada nativamente en el producto IaaS Open Source, satisface los requisitos más estrictos de continuidad del negocio y recuperación ante desastres. +La __réplication de máquinas virtuales__ de Cloud Temple garantiza la protección y la continuidad de sus datos críticos mediante una copia automatizada de sus entornos hacia una zona de disponibilidad distinta. Esta funcionalidad, integrada nativamente en el producto IaaS de código abierto, cumple con los requisitos más estrictos de continuidad del negocio y recuperación ante desastres. -### Protección automatizada y segura +### Una protección automatizada y segura -La replicación de Cloud Temple se basa en una infraestructura __cualificada SecNumCloud__, que garantiza: +La replicación de Cloud Temple se basa en una infraestructura __cualificada SecNumCloud__, garantizando : - __Replicación asíncrona__ : Copia continua de sus máquinas virtuales sin impacto en el rendimiento de producción -- __Separación geográfica__ : Almacenamiento de las réplicas en una zona de disponibilidad diferente a la de origen -- __Automatización completa__ : Proceso totalmente automatizado a través de la [Consola Cloud Temple](../console/console.md) -- __Conformidad normativa__ : Cumplimiento de los requisitos de copia de seguridad y continuidad del negocio +- __Separación geográfica__ : Almacenamiento de los réplicas en una zona de disponibilidad diferente a la de origen +- __Automatización completa__ : Proceso completamente automatizado a través de la [Console Cloud Temple](../console/console.md) +- __Cumplimiento normativo__ : Cumplimiento de los requisitos de copia de seguridad y continuidad del negocio ### Ventajas de la replicación | Ventaja | Descripción | -|-------------------------|------------------------------------------------------------------------------------------------------------------------------------------------| -| Continuidad operativa | Protección de sus servicios críticos en caso de un incidente grave en el sitio principal. | -| Protección geográfica | Replicación hacia una zona de disponibilidad distinta, protegiendo contra siniestros localizados. | -| Flexibilidad temporal | Elección del intervalo de replicación según sus necesidades: de 1 minuto a 24 horas. | -| Facilidad de gestión | Configuración y supervisión completamente integradas en la Consola Cloud Temple. | -| Cumplimiento SecNumCloud | Infraestructura cualificada que garantiza el más alto nivel de seguridad para sus datos sensibles. | +|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------| +| Continuidad del negocio | Protección de sus servicios críticos en caso de un incidente mayor en el sitio principal. | +| Protección geográfica | Replicación hacia una zona de disponibilidad distinta, protegiendo contra desastres localizados. | +| Flexibilidad temporal | Elección del intervalo de replicación según sus necesidades: de 15 minutos a 24 horas. | +| Simplicidad de gestión | Configuración y supervisión completamente integradas en la Consola Cloud Temple. | +| Cumplimiento SecNumCloud | Infraestructura certificada que garantiza el más alto nivel de seguridad para sus datos sensibles. | ### Configuración de la replicación @@ -418,22 +418,34 @@ La creación de una política de replicación define los parámetros de protecci #### Intervalos disponibles -| Intervalo | Uso recomendado | RPO (Pérdida máxima de datos) | +| Intervalo | Uso recomendado | RPO (Pérdida máxima de datos) | |-------------------------|--------------------------------------------|-----------------------------| -| __1 a 59 minutos__ | Aplicaciones críticas en tiempo real | < 1 hora | -| __1 a 24 horas__ | Aplicaciones empresariales y entornos estándar | < 24 horas | +| __15 a 59 minutos__ | Aplicaciones críticas en tiempo real | < 1 hora | +| __1 a 24 horas__ | Aplicaciones empresariales y entornos estándar | < 24 horas | + +:::warning[RPO : objectif non garanti contractuellement] +El intervalo de replicación configurado (par exemple 15 minutes) constituye un **objetivo de RPO (Recovery Point Objective)**, y no un compromiso contractual. + +El RPO efectivamente alcanzado depende directamente de la **tasa de cambio (change rate)** de los datos en las máquinas virtuales replicadas. Si el volumen de datos modificados entre dos ciclos de replicación es demasiado grande, la transferencia puede no finalizar dentro del intervalo configurado. En este caso, el siguiente ciclo no comenzará hasta que se complete el anterior, lo que alarga de facto el RPO real. + +**En resumen:** +- El RPO mínimo configurable es de **15 minutos**. +- Este RPO es alcanzable únicamente si la tasa de cambio de los datos permanece compatible con el ancho de banda de replicación disponible. +- **Ningún SLA está asociado al RPO** : se trata de un objetivo de « mejor esfuerzo » cuyo cumplimiento depende de las características de la carga de trabajo. +- Para cargas con alta tasa de escritura (bases de données, journaux transactionnels, etc.), se recomienda prever un intervalo de replicación más amplio y complementarlo con una estrategia de respaldo a nivel de aplicación. +::: #### Asociación de máquinas virtuales -Una vez creada la política, puede asociar sus máquinas virtuales a proteger : +Una vez creada la política, puede asociar las máquinas virtuales que desea proteger: -- __Selección simple__ : Selección de VMs desde la interfaz de la Consola +- __Selección simple__ : Selección de las VM desde la interfaz de la Consola - __Validación automática__ : Verificación de la compatibilidad y los requisitos previos - __Activación inmediata__ : Inicio automático de la replicación después de la configuración ### Gestión de réplicas -#### Vista de las políticas +#### Vista de políticas La consola Cloud Temple ofrece una vista centralizada de sus políticas de replicación con: @@ -455,40 +467,40 @@ La tabla de réplicas le permite visualizar: #### Recomendaciones por tipo de carga -- __Aplicaciones críticas__ : Replicación cada 1-30 minutos para minimizar la pérdida de datos +- __Aplicaciones críticas__ : Replicación cada 15-30 minutos para minimizar la pérdida de datos - __Aplicaciones empresariales__ : Replicación horaria o cada dos horas según las necesidades - __Entornos de desarrollo__ : Replicación diaria generalmente suficiente #### Planificación de políticas -- Cree políticas diferenciadas según el grado de criticidad de sus aplicaciones -- Asigne nombres claros a sus políticas para facilitar la gestión +- Cree políticas distintas según la criticidad de sus aplicaciones +- Nombre claramente sus políticas para facilitar la gestión - Verifique periódicamente el estado de sus réplicas desde la consola - Documente su estrategia de replicación para sus equipos -__Nota importante:__ +__Nota importante :__ -*La replicación no sustituye a una estrategia de copia de seguridad integral. Constituye un complemento esencial para garantizar la continuidad del negocio en caso de un incidente grave en su sitio principal.* +*La replicación no reemplaza una estrategia de copia de seguridad completa. Constituye un complemento esencial para garantizar la continuidad del negocio en caso de un incidente mayor en su sitio principal.* ## Alta disponibilidad La alta disponibilidad permite garantizar la continuidad del servicio de las máquinas virtuales (VM) en caso de fallo de un host físico dentro de un pool OpenIaaS. -Con la alta disponibilidad (HA), cada host en el pool envía regularmente señales de vida a sus pares a través del almacenamiento compartido (Block Storage Heartbeat). En caso de ausencia prolongada de respuesta, el host se considera defectuoso. +Con la alta disponibilidad (HA), cada host en el pool envía regularmente señales de vida a sus pares a través del almacenamiento compartido (Block Storage Heartbeat). En caso de ausencia prolongada de respuesta, el host se considera fallido. -Un Block Storage designado como heartbeat significa que servirá como base para verificar los hosts que ya no respondan. +Un Block Storage designado como heartbeat significa que servirá como base para autenticar los hosts que no respondan. Para que la alta disponibilidad esté correctamente configurada en un pool OpenIaaS, es indispensable contar con __al menos dos hosts__ conectados. -Cada VM debe configurarse con un nivel de prioridad de reinicio en alta disponibilidad: +Cada VM debe configurarse con un nivel de prioridad de reinicio en alta disponibilidad : -#### Deshabilitado +#### Disabled La alta disponibilidad no está configurada. En caso de fallo del host, la máquina virtual no se reiniciará. -#### Reinicio +#### Restart - En caso de fallo del host, la máquina virtual se reiniciará automáticamente tan pronto como haya recursos disponibles en el pool. Las máquinas virtuales configuradas en modo "restart" se tratan con prioridad, antes que las configuradas en modo "best-effort". + En caso de fallo del host, la máquina virtual se reiniciará automáticamente en cuanto haya recursos disponibles en el pool. Las máquinas virtuales configuradas en modo "restart" se procesarán con prioridad, antes que aquellas configuradas en modo "best-effort". #### Best-Effort - En caso de fallo del host, la máquina virtual solo se reiniciará automáticamente si quedan recursos disponibles después de procesar todas las máquinas virtuales configuradas en modo "restart". El modo "Best-effort" realiza un único intento, por lo que si los recursos son insuficientes, la máquina virtual no se reiniciará. \ No newline at end of file + En caso de fallo del host, la máquina virtual solo se reiniciará automáticamente si quedan recursos disponibles después de procesar todas las máquinas virtuales configuradas en modo "restart". El modo "Best-effort" solo realiza un intento, por lo que si los recursos son insuficientes, la máquina virtual no se reiniciará. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/changelog.md b/i18n/it/docusaurus-plugin-content-docs/current/changelog.md index 5c5e5910..b0693ff9 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/changelog.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/changelog.md @@ -5,144 +5,151 @@ sidebar_position: 2 # Tracciamento delle Modifiche -### 4 maggio 2026 : Patch di sicurezza — immagine Docker (CVE Alpine) +### 26 Maggio 2026 : Miglioramento del workflow di traduzione -- **Sicurezza (Docker)** : Aggiunta di `apk upgrade --no-cache` nello stage finale `nginx:stable-alpine` dei Dockerfile di produzione (`Dockerfile` e `Dockerfile.prebuilt`). Questo aggiornamento corregge tutte le CVE Critical e High rilevate da Harbor/Trivy sull'immagine `3.24.3`, relative ai pacchetti Alpine congelati: `libcrypto3`, `libssl3`, `libxml2`, `libxslt`, `libexpat`, `libpng`, `zlib`, `c-ares`, `musl`, `xz-libs`, `busybox`, `curl`. Il prossimo build produrrà un'immagine con tutti questi pacchetti alla loro ultima versione corretta. +- **Traduzione (strumentazione)** : Aggiunta delle opzioni `--token`, `--url` e `--model` allo script Python `scripts/translate_py/translate.py`. Il token API può ora essere fornito direttamente da riga di comando, senza dover ricreare il file `.env`. Le opzioni CLI hanno la precedenza sulle variabili d'ambiente. +- **Traduzione (configurazione)** : Aggiornamento del modello di traduzione predefinito a `qwen3.6:27b`, con mantenimento dell'endpoint predefinito Cloud Temple LLMaaS `https://api.ai.cloud-temple.com/v1/chat/completions`. +- **Traduzione (dry-run)** : Il workflow di simulazione rimane utilizzabile senza token API, per verificare i file da tradurre prima di qualsiasi esecuzione effettiva. -### 30 Aprile 2026 : Specifiche sulle prestazioni di storage +### 4 Maggio 2026 : Patch di sicurezza — immagine Docker (CVE Alpine) -- **Storage (IaaS VMware, OpenSource, Bare Metal)** : Aggiunta di limiti assoluti di IOPS e di larghezza di banda massima per tutte le classi di storage. Queste informazioni consentono di dimensionare meglio gli ambienti in base alle esigenze di prestazioni. +- **Sicurezza (Docker)** : Aggiunta di `apk upgrade --no-cache` nello stage finale `nginx:stable-alpine` dei Dockerfile di produzione (`Dockerfile` e `Dockerfile.prebuilt`). Questo aggiornamento corregge tutte le CVE Critical e High rilevate da Harbor/Trivy sull'immagine `3.24.3`, legate ai pacchetti Alpine bloccati : `libcrypto3`, `libssl3`, `libxml2`, `libxslt`, `libexpat`, `libpng`, `zlib`, `c-ares`, `musl`, `xz-libs`, `busybox`, `curl`. La prossima build produrrà un'immagine con tutti questi pacchetti alla loro ultima versione corretta. -### 24 Aprile 2026 : Arricchimento della documentazione di backup IaaS OpenSource +### 30 Aprile 2026 : Dettagli sulle prestazioni di storage -- **IaaS OpenSource (Backup)** : Arricchimento della sezione backup con precisazioni sull'architettura tecnica (backup incrementale, impatto del Thick provisioning sullo storage), la sicurezza (crittografia AES-256, isolamento di rete), il monitoraggio e i vincoli di pianificazione. Traduzioni disponibili EN/DE/ES/IT. +- **Storage (IaaS VMware, OpenSource, Bare Metal)** : Aggiunta dei limiti assoluti d'IOPS e della banda passante massima per tutte le classi di storage. Queste informazioni consentono di dimensionare meglio gli ambienti in base alle esigenze di prestazioni. -### 20 Aprile 2026 : Aggiornamento del dimensionamento Database gestito +### 24 Aprile 2026 : Arricchimento della documentazione backup IaaS OpenSource -- **MariaDB & PostgreSQL gestiti** : Aggiornamento dei modelli di dimensionamento massimi disponibili per i servizi di database gestiti. +- **IaaS OpenSource (Sauvegarde)** : Arricchimento della sezione backup con dettagli sull'architettura tecnica (sauvegarde incrémentale, impact du Thick provisioning sur le stockage), la sicurezza (chiffrement AES-256, isolation réseau), il monitoring e i vincoli di pianificazione. Traduzioni disponibili EN/DE/ES/IT. -### 17 Aprile 2026 : Istanze VM — documentazione illustrata, tutorial e traduzioni +### 20 Aprile 2026 : Aggiornamento del dimensionamento Managed Database -- **Istanze VM — Arricchimento documentale** : Rifacimento completo e illustrazione della documentazione Istanze VM. La guida di avvio rapido (`quickstart.md`) copre ora l'intero percorso utente illustrato: accesso alla sezione, elenco delle VM, procedura guidata di creazione in 9 passaggi (famiglia di istanze, zona di disponibilità, template OS, modello, nome/backup, Cloud Init, dischi, rete, riepilogo) e gestione delle 4 schede (Informazioni, Dischi, Rete, Snapshot). -- **Istanze VM — Tutorial** : Creazione di 3 tutorial dedicati in una cartella `tutorials/`: (1) **Creare la propria prima VM** (procedura guidata completa illustrata + Cloud Init + disco aggiuntivo), (2) **Gestire i dischi** (aggiunta dalla console + partizionamento Linux), (3) **Creare e gestire gli snapshot** (creazione, ripristino, eliminazione + best practice e confronto snapshot/backup). La barra di navigazione laterale viene aggiornata con 3 voci individuali nella categoria Tutorial. +- **Managed MariaDB & PostgreSQL** : Aggiornamento delle configurazioni di dimensionamento massimo disponibili per i servizi di database gestiti. -### 17 Aprile 2026 : Documenti contrattuali, traduzioni e armonizzazione terminologica +### 17 Aprile 2026: VM Instances — documentazione illustrata, tutorial e traduzioni -- **Documenti contrattuali — Ristrutturazione** : La pagina `contracts.md` è riorganizzata con la gerarchia dei documenti contrattuali in alto nella pagina, inclusa la lista di priorità dei 6 documenti (CGVU, Convenzione SecNumCloud, Convenzione specifica ¹, PAS ², CPU, DPA) e un riquadro di precisazioni contrattuali. +- **VM Instances — Arricchimento della documentazione** : Ristrutturazione completa e illustrazione della documentazione VM Instances. La guida introduttiva (`quickstart.md`) copre ora l'intero percorso utente illustrato: accesso alla sezione, elenco delle VM, procedura guidata di creazione in 9 passaggi (famiglia di istanze, zona di disponibilità, template OS, modello, nome/backup, Cloud Init, dischi, rete, riepilogo) e gestione delle 4 schede (Informazioni, Dischi, Rete, Snapshot). +- **VM Instances — Tutorial** : Creazione di 3 tutorial dedicati in una cartella `tutorials/` : (1) **Creare la propria prima VM** (procedura guidata completa illustrata + Cloud Init + disco aggiuntivo), (2) **Gestire i dischi** (aggiunta dalla console + partizionamento Linux), (3) **Creare e gestire gli snapshot** (creazione, ripristino, eliminazione + best practice e confronto snapshot/backup). La navigazione laterale è stata aggiornata con 3 voci individuali nella categoria Tutorial. -### 16 aprile 2026 : Riprogettazione della navigazione, documenti contrattuali e aggiornamenti +### 17 Aprile 2026: Documenti contrattuali, traduzioni e armonizzazione terminologica -- **Navigazione — Compute** : Raggruppamento di VM Instances (preview), IaaS OpenSource e IaaS VMware in un'unica categoria **Compute** nella navigazione (PR #277). -- **Navigazione — Network** : Raggruppamento di VPC (preview) e Private Backbone in un'unica categoria **Network** nella navigazione. -- **Documenti contrattuali** : Ristrutturazione completa della documentazione contrattuale — creazione di una pagina hub `/contracts` (condizioni generali, condizioni particolari, convenzioni di servizio SecNumCloud, SLA VM instances) e di una pagina hub `/shared-responsibility` (matrici RACI per servizio: IaaS, S3, PaaS, Kubernetes, LLMaaS, Rete). Il menu laterale contrattuale è sostituito da una colonna dedicata **Contrattuale** nel footer. Traduzioni disponibili EN/DE/ES/IT. +- **Documenti contrattuali — Ristrutturazione**: La pagina `contracts.md` è stata riorganizzata con la gerarchia dei documenti contrattuali in alto nella pagina, inclusa la lista di priorità dei 6 documenti (CGVU, Convenzione SecNumCloud, Convenzione specifica ¹, PAS ², CPU, DPA) e un riquadro di precisazioni contrattuali. + +### 16 Aprile 2026 : Ristrutturazione della navigazione, documenti contrattuali e aggiornamenti + +- **Navigazione — Compute** : Raggruppamento di VM Instances (preview), IaaS OpenSource e IaaS VMware sotto un'unica categoria **Compute** nella navigazione (PR #277). +- **Navigazione — Network** : Raggruppamento di VPC (preview) e Private Backbone sotto un'unica categoria **Network** nella navigazione. +- **Documenti contrattuali** : Ristrutturazione completa della documentazione contrattuale — creazione di una pagina hub `/contracts` (condizioni generali, condizioni particolari, accordi di servizio SecNumCloud, SLA istanze VM) e di una pagina hub `/shared-responsibility` (matrici RACI per servizio: IaaS, S3, PaaS, Kubernetes, LLMaaS, Rete). Il menu laterale contrattuale viene sostituito da una colonna dedicata **Contrattuale** nel footer. Traduzioni disponibili EN/DE/ES/IT. - **VM Instances** : Aggiornamento dell'impegno di livello di servizio (SLA) dal 99,9 % al 99,95 %. -- **IaaS OpenSource** : Aggiunta di una nota sulla durata massima di conservazione dei backup (massimo 24 mesi, migrazione verso Glacier prevista nel T1 2027). +- **IaaS OpenSource** : Aggiunta di una nota sulla durata massima di conservazione dei backup (massimo 24 mesi, migrazione verso Glacier prevista per il T1 2027). ### 15 Aprile 2026 : Nuova documentazione VM instances (Cloud Public) -- **VM instances** : Pubblicazione della documentazione iniziale del servizio VM instances (in anteprima), nuova offerta di macchine virtuali condivise di Cloud Temple. La documentazione copre la panoramica del servizio, i concetti tecnici (classi di servizio Development/General Purpose/Performance, modelli predefiniti e personalizzati, storage, rete VPC, backup), nonché una guida introduttiva completa. Il servizio è organizzato in una nuova categoria **Cloud Public** nella navigazione. +- **VM instances** : Pubblicazione della documentazione iniziale del servizio VM instances (en preview), nuova offerta di macchine virtuali condivise di Cloud Temple. La documentazione copre la panoramica del servizio, i concetti tecnici (classi di servizio Development/General Purpose/Performance, template predefiniti e personalizzati, archiviazione, rete VPC, backup), nonché una guida completa all'avvio. Il servizio è organizzato sotto una nuova categoria **Cloud Public** nella navigazione. ### 15 Aprile 2026 : Miglioramento della documentazione IaaS VMware — metriche del cluster -- **IaaS VMware** : Aggiunta di una documentazione dettagliata sulle metriche visualizzate nella vista di un cluster VMware dalla Console Cloud Temple. Copre i tre grafici della memoria del cluster: **Memoria allocata** (quantità totale allocata alle VM), **Memoria consumata** (memoria fisica effettivamente utilizzata dalle VM) e **Allocazione nel caso peggiore** (proiezione del consumo massimo simultaneo), con la descrizione precisa di ciò che ciascun indicatore rappresenta per anticipare le esigenze di risorse. -### 15 Aprile 2026 : Documentazione Managed MariaDB, Managed PostgreSQL e correzioni multilingue +- **IaaS VMware** : Aggiunta di una documentazione dettagliata sulle metriche visualizzate nella vista di un cluster VMware dalla Console Cloud Temple. Copre i tre grafici di memoria del cluster : **Memoria allocata** (quantità totale allocata alle VM), **Memoria consumata** (memoria fisica effettivamente utilizzata dalle VM) e **Allocazione nel caso peggiore** (proiezione del consumo massimo simultaneo), con la descrizione precisa di ciò che ogni indicatore rappresenta per anticipare le esigenze di risorse. + +### 15 Aprile 2026 : Documentazione Managed MariaDB, Managed PostgreSQL e correzioni multilingua -- **Managed MariaDB** : Pubblicazione della documentazione iniziale del servizio Managed MariaDB (en preview) : presentazione del servizio, concetti tecnici (architectures StandAlone et Distributed), guida introduttiva. -- **Managed PostgreSQL** : Pubblicazione della documentazione iniziale del servizio Managed PostgreSQL (en preview) : presentazione del servizio, concetti tecnici, guida introduttiva. -- **Corrections multilingues (images)** : Correzione dei riferimenti alle immagini nelle traduzioni delle sezioni Managed Kubernetes e Managed MariaDB per tutte le lingue (EN, DE, ES, IT) — conversione dei percorsi relativi `./images/` in percorsi assoluti `@site/docs/...` per garantire un rendering corretto in tutte le lingue. -- **Corrections liens brisés** : Risoluzione di diversi link interrotti nella documentazione : riferimenti alle licenze LLMaaS, link alla console nel tutorial rclone (OSS), link IAM nella documentazione di rete (EN), link relativi nella sezione Terraform (EN). +- **Managed MariaDB** : Messa online della documentazione iniziale del servizio Managed MariaDB (en preview) : panoramica del servizio, concetti tecnici (architetture StandAlone e Distributed), guida introduttiva. +- **Managed PostgreSQL** : Messa online della documentazione iniziale del servizio Managed PostgreSQL (en preview) : panoramica del servizio, concetti tecnici, guida introduttiva. +- **Correzioni multilingua (immagini)** : Correzione dei riferimenti alle immagini nelle traduzioni delle sezioni Managed Kubernetes e Managed MariaDB per tutte le lingue (EN, DE, ES, IT) — conversione dei percorsi relativi `./images/` in percorsi assoluti `@site/docs/...` per garantire una visualizzazione corretta in tutte le lingue. +- **Correzioni link interrotti** : Risoluzione di diversi link interrotti nella documentazione : riferimenti alle licenze LLMaaS, link alla console nel tutorial rclone (OSS), link IAM nella documentazione di rete (EN), link relativi nella sezione Terraform (EN). ### 15 Aprile 2026 : Nuovo modulo Gestore dei costi -- **Console (Gestore dei costi)** : Aggiunta della documentazione completa del nuovo modulo di monitoraggio dei consumi accessibile dalla Console Cloud Temple. Include la dashboard, il consumo globale (con proiezione a fine mese), la ripartizione per prodotto e per servizio, i dettagli di fatturazione riga per riga e il catalogo dei prezzi. +- **Console (Gestore dei costi)** : Aggiunta della documentazione completa del nuovo modulo di monitoraggio dei consumi accessibile dalla Console Cloud Temple. Copre la dashboard, il consumo globale (con previsione di fine mese), la ripartizione per prodotto e per servizio, i dettagli di fatturazione riga per riga e il catalogo dei prezzi. -### 26 Marzo 2026 : Aggiornamento dell'elenco dei subappaltatori (DPA) +### 26 Marzo 2026: Aggiornamento dell'elenco dei subappaltatori (DPA) -- **Contrattuale** : Aggiornamento dell'Allegato Contrattuale sui Dati Personali (DPA) - revisione dell'elenco dei subappaltatori (retrait de Microsoft Azure et Amazon Web Services, modification de l'activité pour Iron Mountain) e aggiunta della data di autorizzazione. +- **Contrattuale**: Aggiornamento dell'Allegato Contrattuale sui Dati Personali (DPA) - revisione dell'elenco dei subappaltatori (rimozione di Microsoft Azure e Amazon Web Services, modifica dell'attività per Iron Mountain) e aggiunta della data di autorizzazione. -### 19 marzo 2026 : Miglioramenti alla documentazione IaaS e Terraform +### 19 Marzo 2026 : Miglioramenti documentazione IaaS e Terraform -- **IaaS OpenSource** : Aggiunta di una guida completa per creare una macchina virtuale. Il tutorial copre i tre metodi di distribuzione disponibili (modello, importazione XVA, Marketplace) con istruzioni passo passo e raccomandazioni sulle migliori pratiche. +- **IaaS OpenSource** : Aggiunta di una guida completa per creare una macchina virtuale. Il tutorial copre i tre metodi di deployment disponibili (template, importazione XVA, Marketplace) con istruzioni passo passo e raccomandazioni sulle migliori pratiche. - **IaaS VMware** : Aggiunta di una pagina che raccoglie tutti i tutorial disponibili per facilitare la navigazione e la scoperta delle guide. -- **Terraform** : Nuova sezione che spiega come ricevere automaticamente le notifiche delle nuove versioni del Provider Terraform tramite GitHub. +- **Terraform** : Nuova sezione che spiega come ricevere automaticamente le notifiche sui nuovi rilasci del Provider Terraform tramite GitHub. ### 19 Marzo 2026 : Aggiornamento DPA e conformità HDS -- **Contrattuale** : Aggiornamento dell'Allegato Contrattuale sui Dati Personali (DPA) alla versione 1.0. Integrazione degli ultimi requisiti della certificazione HDS (Hosting di Dati Sanitari) e aggiornamento dell'elenco dei sub-fornitori autorizzati. Traduzione completa in inglese, tedesco, spagnolo e italiano. +- **Contrattuale** : Aggiornamento dell'Allegato Contrattuale sui Dati Personali (DPA) alla versione 1.0. Integrazione dei requisiti più recenti della certificazione HDS (Hosting Dati Sanitari) e aggiornamento dell'elenco dei subappaltatori autorizzati. Traduzione completa in inglese, tedesco, spagnolo e italiano. -### 21 Febbraio 2026 : Miglioramento del SEO +### 21 Febbraio 2026 : Miglioramento del posizionamento SEO -- **SEO** : Correzione dell'URL di produzione (`https://docs.cloud-temple.com`) e del percorso di base (`/`) nella configurazione di Docusaurus, garantendo URL canonici corretti per l'indicizzazione su Google. -- **Sitemap** : Abilitazione della generazione automatica della sitemap (`/sitemap.xml`) per migliorare il crawling e l'indicizzazione da parte dei motori di ricerca. -- **Robots.txt** : Aggiunta di un file `robots.txt` che consente il crawling completo del sito e punta alla sitemap. +- **SEO** : Correzione dell'URL di produzione (`https://docs.cloud-temple.com`) e del percorso di base (`/`) nella configurazione Docusaurus, garantendo URL canonici corretti per l'indicizzazione su Google. +- **Sitemap** : Attivazione della generazione automatica della sitemap (`/sitemap.xml`) per migliorare il crawling e l'indicizzazione da parte dei motori di ricerca. +- **Robots.txt** : Aggiunta di un file `robots.txt` che autorizza il crawling completo del sito e punta alla sitemap. -### 21 Febbraio 2026 : Concetti di rete avanzati e miglioramenti multilingue +### 21 Febbraio 2026 : Concetti avanzati di rete e miglioramenti multilingue -- **Rete (Internet)** : Nuova pagina di **concetti avanzati** che documenta le comunità BGP e il controllo della Local Preference sul backbone Internet Cloud Temple (AS33930). Include una guida alla configurazione con esempio Bird. +- **Rete (Internet)** : Nuova pagina di **concetti avanzati** che documenta le comunità BGP e il controllo della Local Preference sul backbone Internet Cloud Temple (AS33930). Include una guida di configurazione con esempio Bird. - **LLMaaS** : Aggiornamento del catalogo dei modelli e aggiunta del ciclo di vita dei modelli. Aggiunta dei modelli LTS (Long Term Support). -- **Console (Sicurezza)** : Miglioramento della qualità delle traduzioni degli avvisi di sicurezza (inglese, tedesco, spagnolo, italiano). -- **Multilingue** : Traduzione della nuova pagina concetti avanzati di rete nelle 4 lingue (en, de, es, it) e miglioramento globale della qualità delle traduzioni esistenti. -- **IaaS Bare Metal** : Aggiunta di maggiori dettagli sul volume BFS (Boot from SAN) nella guida di avvio : il Volume 1 è dedicato all'installazione del SO, non condivisibile all'interno della stessa AZ, con raccomandazione di memorizzare i dati su un volume LUN aggiuntivo. -- **Storage Oggetti (OSS)** : Aggiunta di una pagina **FAQ** che copre l'accesso S3, le whitelist IP, i link pre-firmati e gli scenari di utilizzo consigliati. +- **Console (Sicurezza)** : Miglioramento della qualità delle traduzioni delle alert di sicurezza (inglese, tedesco, spagnolo, italiano). +- **Multilingue** : Traduzione della nuova pagina sui concetti avanzati di rete nelle 4 lingue (en, de, es, it) e miglioramento globale della qualità delle traduzioni esistenti. +- **IaaS Bare Metal** : Aggiunta di precisazioni sul volume BFS (Boot from SAN) nella guida di avvio: il Volume 1 è dedicato all'installazione del SO, non condivisibile all'interno della stessa AZ, con raccomandazione di memorizzare i dati su un volume LUN aggiuntivo. +- **Object Storage (OSS)** : Aggiunta di una pagina **FAQ** che copre l'accesso S3, le whitelist IP, i link pre-firmati e gli scenari d'uso consigliati. ### 10 Febbraio 2026 : Aggiornamento delle tariffe LLMaaS - **LLMaaS** : Aggiornamento globale delle tariffe dell'API (Input : 1,9€/M, Output : 8€/M, Raisonneur : 8€/M) in tutta la documentazione tecnica e commerciale. -### 5 Febbraio 2026 : Chiarimenti sugli impegni di servizio (SLA) +### 5 Febbraio 2026 : Dettagli sugli impegni di servizio (SLA) - **Managed Kubernetes** : Aggiornamento completo e finalizzazione degli impegni di livello di servizio (SLA) per l'offerta Managed Kubernetes. -### 21 gennaio 2026 : Miglioramenti e traduzioni di sicurezza +### 21 Gennaio 2026 : Miglioramenti e traduzioni di sicurezza -- **Console Management** : Aggiornamento delle traduzioni internazionali (inglese, tedesco, spagnolo, italiano) per gli avvisi di sicurezza nella console di gestione. +- **Console Management** : Aggiornamento delle traduzioni internazionali (anglais, allemand, espagnol, italien) per gli avvisi di sicurezza nella console di gestione. ### 19 Gennaio 2026 : Estensione Managed Kubernetes e VPC - **Managed Kubernetes** : Aggiunta del supporto per i nodi **Bare Metal** e le **GPU** (NVIDIA). -- **Managed Kubernetes** : Nuova guida sull'utilizzo delle GPU in un cluster Kubernetes. +- **Managed Kubernetes** : Nuovo tutorial sull'utilizzo delle GPU in un cluster Kubernetes. - **Managed Kubernetes** : Sostituzione di KubeCost con una guida più recente su **OpenCost**. -- **Network (VPC)** : Documentazione completa del servizio Virtual Private Cloud (VPC), inclusi i concetti di alta disponibilità (HA), le guide di avvio e i tutorial. -- **Multilingue** : Traduzione completa del servizio VPC e dei nuovi contenuti Kubernetes in inglese, tedesco, spagnolo e italiano. +- **Rete (VPC)** : Documentazione completa del servizio Virtual Private Cloud (VPC), inclusi i concetti di alta disponibilità (HA), le guide introduttive e i tutorial. +- **Multilingue** : Traduzione integrale del servizio VPC e dei nuovi contenuti Kubernetes in inglese, tedesco, spagnolo e italiano. -### 15 Dicembre 2025 : Stabilizzazione e correzioni multilingue +### 15 Dicembre 2025 : Stabilizzazione e correzioni multilingua -- **Multilingue (Terraform, LLMaaS, Harbor)** : Correzione importante delle traduzioni in spagnolo, italiano e tedesco. Risoluzione dei problemi di sintassi MDX (blocchi di codice vuoti, tag non sfuggiti) che impedivano la compilazione del sito. -- **Multilingue (Immagini)** : Ripristino dei percorsi delle immagini corretti nelle versioni italiana e tedesca per le sezioni Bastion e IaaS VMware. +- **Multilingua (Terraform, LLMaaS, Harbor)** : Correzione significativa delle traduzioni in Spagnolo, Italiano e Tedesco. Risoluzione dei problemi di sintassi MDX (blocchi di codice vuoti, tag non escapati) che impedivano la compilazione del sito. +- **Multilingua (Immagini)** : Ripristino dei percorsi delle immagini corretti nelle versioni italiana e tedesca per le sezioni Bastion e IaaS VMware. - **Build** : Validazione del deployment per tutte le 5 lingue supportate. -### 11 Dicembre 2025: Novità Managed Kubernetes +### 11 Dicembre 2025 : Novità Managed Kubernetes -- **Managed Kubernetes**: Aggiunta di un nuovo tutorial sull'utilizzo di **Gateway API** per la gestione avanzata del traffico. -- **Managed Kubernetes**: Aggiornamento della documentazione sulla gestione delle quote (Ceph) e ottimizzazione degli strumenti di gestione dei costi (OpenCost). +- **Managed Kubernetes** : Aggiunta di un nuovo tutorial sull'utilizzo di **Gateway API** per la gestione avanzata del traffico. +- **Managed Kubernetes** : Aggiornamento della documentazione sulla gestione delle quote (Ceph) e ottimizzazione degli strumenti di gestione dei costi (OpenCost). -### 22 Novembre 2025 : Novità LLMaaS e miglioramenti globali +### 22 Novembre 2025 : Novità LLMaaS e miglioramenti generali -- **LLMaaS (OCR)** : Aggiunta di una documentazione completa per **DeepSeek-OCR**, il nostro nuovo modello specializzato nell'analisi dei documenti (PDF, immagini), in grado di estrarre testo strutturato, tabelle e formule matematiche. -- **Multilingue** : Risoluzione di problemi di accessibilità nelle versioni italiana e tedesca della documentazione. -- **Qualità** : Correzione della visualizzazione dei blocchi di codice nei tutorial LLMaaS e ripristino delle immagini mancanti nella guida di avvio IaaS VMware (versione italiana). +- **LLMaaS (OCR)** : Aggiunta della documentazione completa per **DeepSeek-OCR**, il nostro nuovo modello specializzato nell'analisi di documenti (PDF, images), in grado di estrarre testo strutturato, tabelle e formule matematiche. +- **Multilingue** : Risoluzione di problemi di accessibilità sulle versioni italiana e tedesca della documentazione. +- **Qualità** : Correzione della visualizzazione dei blocchi di codice nei tutorial LLMaaS e ripristino delle immagini mancanti nella guida introduttiva IaaS VMware (version italienne). -### 20 novembre 2025 : Aggiornamento maggiore PaaS OpenShift +### 20 Novembre 2025 : Aggiornamento maggiore PaaS OpenShift -- **PaaS OpenShift (PR #194)** : Ristrutturazione e aggiornamento completo della documentazione OpenShift, che include nuovi screenshot e una traduzione integrale in inglese, spagnolo, tedesco e italiano per supportare la nostra espansione internazionale. +- **PaaS OpenShift (PR #194)** : Ristrutturazione e aggiornamento completo della documentazione OpenShift, con nuove schermate e una traduzione integrale in inglese, spagnolo, tedesco e italiano per supportare la nostra espansione internazionale. ### 3 Novembre 2025 : Miglioramento dei tutorial Kubernetes -- **Managed Kubernetes** : Aggiunta di un nuovo tutorial sul deployment continuo con **ArgoCD** e l'approccio GitOps. -- **Managed Kubernetes** : Revisione e miglioramento dei tutorial esistenti. Le guide sul deployment, sulla rete, sulla gestione dei permessi (Capsule) e sul backup (Kasten) sono state arricchite per affrontare meglio le tematiche di sicurezza, governance e costi, in risposta alle aspettative dei profili CISO e Acquirente. +- **Managed Kubernetes** : Aggiunta di un nuovo tutorial sulla distribuzione continua con **ArgoCD** e l'approccio GitOps. +- **Managed Kubernetes** : Revisione e miglioramento dei tutorial esistenti. Le guide sulla distribuzione, sulla rete, sulla gestione dei permessi (Capsule) e sul backup (Kasten) sono state arricchite per affrontare meglio le questioni relative a sicurezza, governance e costi, in risposta alle aspettative dei profili CISO e Responsabile acquisti. -### 28 Ottobre 2025 : Nuova documentazione per Managed Kubernetes e miglioramenti vari +### 28 Ottobre 2025 : Nuova documentazione Managed Kubernetes e miglioramenti vari -- **Managed Kubernetes (PR #193 & améliorations)**: Aggiunta di una documentazione completa per il nuovo servizio Managed Kubernetes. La sezione include una presentazione del servizio, i concetti tecnici, una guida di avvio, un primo tutorial e la matrice di responsabilità (RACI). Il contenuto è stato arricchito per rispondere meglio alle aspettative dei diversi profili di utenti. -- **Archiviazione Oggetti (PR #190, #189)**: Aggiunta di due nuovi tutorial per il servizio di Archiviazione Oggetti: uno sulla gestione degli accessi ai bucket S3 e un altro sull'utilizzo di Restic per i backup. +- **Managed Kubernetes (PR #193 & miglioramenti)**: Aggiunta di una documentazione completa per il nuovo servizio Managed Kubernetes. La sezione include una presentazione del servizio, i concetti tecnici, una guida introduttiva, un primo tutorial e la matrice delle responsabilità (RACI). Il contenuto è stato arricchito per rispondere meglio alle aspettative dei diversi profili di utenti. +- **Object Storage (PR #190, #189)**: Aggiunta di due nuovi tutorial per il servizio Object Storage: uno sulla gestione degli accessi ai bucket S3 e un altro sull'utilizzo di Restic per i backup. - **Contrattuale (PR #191)**: Correzione e aggiornamento del documento "Data Processing Agreement" (DPA). ### 18 Ottobre 2025 : Manutenzione e nuove documentazioni -- **LLMaaS** : Aggiunta di una nuova domanda alla FAQ per presentare la pagina di stato pubblica ([llmaas.status.cloud-temple.app](https://llmaas.status.cloud-temple.app/)), che consente di monitorare in tempo reale la disponibilità e le prestazioni di ciascun modello. -- **Contrattuale** : Aggiornamento significativo del Data Processing Agreement (DPA v2) per riflettere gli ultimi requisiti legali e di conformità. -- **Console** : Miglioramento e chiarimento della documentazione relativa alla gestione degli ordini. -- **Marketplace** : Aggiunta di un tutorial dettagliato sulla personalizzazione delle immagini delle macchine virtuali (VM) per creare template riutilizzabili. +- **LLMaaS** : Aggiunta di una nuova domanda alla FAQ per presentare la pagina di stato pubblica ([llmaas.status.cloud-temple.app](https://llmaas.status.cloud-temple.app/)), consentendo di monitorare in tempo reale la disponibilità e le prestazioni di ogni modello. +- **Contrattuale** : Aggiornamento maggiore del Data Processing Agreement (DPA v2) per riflettere i più recenti requisiti legali e di conformità. +- **Console** : Miglioramento e chiarimento della documentazione relativa alla gestione dei comandi. +- **Marketplace** : Aggiunta di un tutorial dettagliato sulla personalizzazione delle immagini delle macchine virtuali (VM) per creare modelli riutilizzabili. - **LLMaaS** : Aggiunta di una guida per configurare l'estensione VSCode CLINE per utilizzare i modelli linguistici di Cloud Temple direttamente dall'editor. - **Archiviazione Oggetti (OSS)** : Aggiunta di precisazioni sulla politica del ciclo di vita (Lifecycle) per l'eliminazione dei dati. - **Archiviazione Oggetti (OSS)** : Aggiunta di una guida alla risoluzione dei problemi per gli errori di checksum (`XAmzContentSHA256Mismatch`) con AWS CLI e Terraform. @@ -151,19 +158,19 @@ sidebar_position: 2 ### 14 Agosto 2025 : Miglioramenti e correzioni - **LLMaaS** : Aggiornamento e chiarimento delle risposte della FAQ per rispondere meglio alle domande tecniche e strategiche. Aggiunta della FAQ alla navigazione. -- **Generale** : Correzione di diversi link di navigazione interni in tutta la documentazione per un'esperienza più fluida. +- **Generale** : Correzione di diversi link di navigazione interna in tutta la documentazione per un'esperienza più fluida. -### Luglio 2025 : Novità e aggiornamenti principali +### Luglio 2025: Novità e aggiornamenti principali - **Archiviazione Oggetti (OSS)** : - - Rifacimento completo della sezione tutorial con guide dedicate per strumenti popolari : AWS CLI, Minio Client (`mc mirror`), Cloudberry Explorer e il SDK Python Boto3. - - Aggiunta di precisazioni sui concetti di account di archiviazione e blocco degli oggetti (Object Lock). -- **IaaS OpenSource** : + - Ristrutturazione completa della sezione tutorial con guide dedicate per strumenti popolari: AWS CLI, Minio Client (`mc mirror`), Cloudberry Explorer e SDK Python Boto3. + - Aggiunta di chiarimenti sui concetti di account di archiviazione e blocco degli oggetti (Object Lock). +- **IaaS Open Source** : - Aggiunta di una documentazione dettagliata sulla gestione dell'Alta Disponibilità (HA) per i pool di risorse e le macchine virtuali. - **Console** : - Aggiornamento della pagina degli avvisi di sicurezza con le ultime vulnerabilità. - **Rete** : - - Aggiunta di nuovi screenshot per illustrare la configurazione della connettività IPv6. + - Aggiunta di nuove schermate per illustrare la configurazione della connettività IPv6. ### 29 Giugno 2025 : finalizzazione della documentazione LLMaaS @@ -171,8 +178,8 @@ sidebar_position: 2 - Correzione e validazione dei pipeline RAG con FAISS e Qdrant. - Arricchimento dei tutorial con spiegazioni tecniche più dettagliate. - Aggiunta di una sezione sulla sicurezza dei prompt e sul ciclo di vita dei modelli nei concetti. -- Miglioramento della pagina di spiegazione del RAG con diagrammi e dettagli sui modelli di embedding. +- Miglioramento della pagina di spiegazione del RAG con schemi e dettagli sui modelli di embedding. - Aggiornamento della documentazione dell'API, della guida introduttiva e della presentazione del servizio. -- Aggiunta del pricing per l'endpoint di trascrizione audio. +- Aggiunta del pricing per l'endpoint Transcription Audio. - Aggiunta del piano previsionale del ciclo di vita dei modelli. -- Aggiunta della matrice di responsabilità per l'offerta LLMaaS. \ No newline at end of file +- Aggiunta della matrice delle responsabilità per l'offerta LLMaaS. \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md b/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md index 76405a48..bf573441 100644 --- a/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md +++ b/i18n/it/docusaurus-plugin-content-docs/current/iaas_opensource/concepts.md @@ -2,61 +2,61 @@ title: Concetti --- -L'offerta __IaaS (Infrastructure As A Service)__ di Cloud Temple è progettata per rispondere alle esigenze critiche di continuità e ripresa dell'attività, con un'attenzione particolare ai settori esigenti come l'industria, il settore bancario e quello assicurativo. Basata su tecnologie all'avanguardia, questa infrastruttura garantisce una disponibilità massima e prestazioni ottimali per i vostri carichi di lavoro critici. +L'offerta __IaaS (Infrastructure As A Service)__ di Cloud Temple è progettata per soddisfare le esigenze critiche di continuità e ripresa delle attività, con un focus particolare su settori esigenti come l'industria, il settore bancario e quello assicurativo. Basata su tecnologie all'avanguardia, questa infrastruttura garantisce una massima disponibilità e prestazioni ottimali per i vostri carichi di lavoro critici. ## Una piattaforma tecnologica affidabile La piattaforma IaaS di Cloud Temple si basa su partner tecnologici di fama internazionale: -- Calcolo: __CISCO UCS__. -- Archiviazione: __IBM Spectrum Virtualize__, __IBM FlashSystem__ per lo storage a blocchi e __DELL ECS__ per lo storage a oggetti. -- Rete: __JUNIPER__. -- Virtualizzazione: __Stack Opensource__, che offre una base affidabile e collaudata per gestire i vostri ambienti cloud. +- Calcolo : __CISCO UCS__. +- Archiviazione : __IBM Spectrum Virtualize__, __IBM FlashSystem__ per l'archiviazione a blocchi, e __DELL ECS__ per l'archiviazione di oggetti. +- Rete : __JUNIPER__. +- Virtualizzazione : __Stack Opensource__, che offre una base affidabile e collaudata per gestire i vostri ambienti cloud. -Questa architettura si basa sul modello __VersaStack__, un'alleanza tra Cisco e IBM, che garantisce un'ampia compatibilità con i principali produttori di software. +Questa architettura si basa sul modello __VersaStack__, un'alleanza tra Cisco e IBM, che garantisce un'ampia compatibilità con i principali editori di software. ## Un'infrastruttura dedicata e automatizzata -Sebbene completamente automatizzata grazie a API e un provider Terraform, il prodotto IaaS di Cloud Temple offre un'infrastruttura unica: +Sebbene completamente automatizzata grazie ad API e un provider Terraform, il prodotto IaaS di Cloud Temple offre un'infrastruttura unica: -- __Risorse dedicate__ : I blade di calcolo, i volumi di archiviazione e gli stack software (virtualizzazione, backup, firewalling, ecc.) non sono mai condivisi tra i clienti. -- __Massima prevedibilità__ : Hai il controllo sui tassi di virtualizzazione, sul carico IOPS dell'archiviazione e benefici di una fatturazione chiara, a consumo mensile. +- __Risorse dedicate__ : Le blade di calcolo, i volumi di archiviazione e gli stack software (virtualizzazione, backup, firewalling, ecc.) non sono mai condivisi tra i clienti. +- __Massima prevedibilità__ : Controllate i rapporti di virtualizzazione, il carico di IOPS sull'archiviazione e beneficiate di una fatturazione chiara, a consumo mensile. -La piattaforma è certificata __SecNumCloud__ da [ANSSI](https://www.ssi.gouv.fr/), garantendo un elevato livello di automazione e sicurezza. +La piattaforma è certificata __SecNumCloud__ dall'[ANSSI](https://www.ssi.gouv.fr/), garantendo un alto livello di automazione e sicurezza. ## Principali funzionalità -- Risorse di calcolo (CPU, RAM) dedicate e su richiesta. -- Storage su richiesta (plusieurs classes disponibles). +- Risorse di calcolo (CPU, RAM) dedicate e on-demand. +- Archiviazione on-demand (plusieurs classes disponibles). - Risorse di rete (Internet, réseaux privés). - Backup incrociati con retention configurabile. -- Replicazione asincrona per lo storage o le macchine virtuali. -- Gestione tramite la [Console](../console/console.md) o in modalità Infrastructure as Code grazie alle API e al provider Terraform. +- Replicazione asincrona per l'archiviazione o le macchine virtuali. +- Gestione tramite [Console](../console/console.md) o in modalità Infrastructure as Code grazie alle API e al provider Terraform. ## Vantaggi -| Vantaggio | Descrizione | -|----------------------|------------------------------------------------------------------------------------------------------------------------------------------------| -| Fiducia digitale | Hosting dei dati in Francia e conformità al GDPR. | -| Sicurezza | Piattaforma altamente sicura, certificata __SecNumCloud__, __HDS__ (Hosting dei Dati Sanitari), __ISO 27001__ e __ISAE 3402 tipo II__. | -| Alta disponibilità | Tasso di disponibilità della piattaforma del 99,99%, misurato mensilmente, finestre di manutenzione incluse. | -| Resilienza | Implementazione di piani di continuità operativa o di ripristino delle attività in base alle esigenze. | -| Automazione | Piattaforma completamente automatizzata progettata per integrarsi in un programma di trasformazione digitale. | -| Su richiesta | Risorse disponibili su richiesta. | +| Vantaggio | Descrizione | +|---------------------|------------------------------------------------------------------------------------------------------------------------------------------------| +| Fiducia digitale | Hosting dei dati in Francia e conformità al GDPR. | +| Sicurezza | Piattaforma altamente sicura, qualificata __SecNumCloud__, __HDS__ (Hébergement des Données de Santé), __ISO 27001__ e __ISAE 3402 type II__. | +| Alta disponibilità | Tasso di disponibilità della piattaforma del 99,99%, misurato mensilmente, finestre di manutenzione incluse. | +| Resilienza | Implementazione di piani di continuità operativa o di ripristino in base alle esigenze. | +| Automazione | Piattaforma completamente automatizzata progettata per integrarsi in un programma di trasformazione digitale. | +| On demand | Risorse disponibili su richiesta. | ## Regioni e zone di disponibilità Il prodotto OpenIaaS è distribuito in una zona di disponibilità. Una zona di disponibilità fa parte di una regione. -Questo tipo di distribuzione consente di scegliere la posizione dei cluster e di poterli distribuire su diverse zone di disponibilità (AZ). -Ciò offre una migliore distribuzione del carico, massimizza la ridondanza e facilita l'implementazione di un piano di ripristino di attività (DRP) in caso di incidente. +Questo tipo di distribuzione consente di scegliere la posizione dei cluster e di ripartirli su diverse zone di disponibilità (AZ). +Ciò offre un migliore bilanciamento del carico, massimizza la ridondanza e facilita l'implementazione di un piano di ripristino (DRP) in caso di incidente. --- ## Classi di blade di calcolo -I blade di calcolo disponibili per l'offerta Bare Metal offrono una gamma di prestazioni per soddisfare diverse esigenze: +Le blade di calcolo disponibili per l'offerta Bare Metal offrono una gamma di prestazioni per soddisfare diverse esigenze: | Riferimento | RAM __(1)__ | Frequenza __(2)__ | Numero di core / thread | Connettività __(3)__ | GPU __(4)__ | |-----------------------|--------------|-------------------------------------------|---------------------------|----------------------|----------------------| @@ -66,49 +66,50 @@ I blade di calcolo disponibili per l'offerta Bare Metal offrono una gamma di pre | __PERFORMANCE 1__ | 384 Go | 3.20/3.6 GHz (Xeon E-53I5Y o equivalente) | 16 / 32 thread | 2 X 25 Gbit/s | - | | __PERFORMANCE 2__ | 768 Go | 3.00/3.6 GHz (Gold 6354 o equivalente) | 36 / 72 thread | 2 X 25 Gbit/s | - | | __PERFORMANCE 3__ | 1536 Go | 2.60/3.5 GHz (Gold 6348 o equivalente) | 56 / 112 thread | 2 X 25 Gbit/s | - | -| __PERFORMANCE 4__ | 512 Go | 2.50/4.1 GHz (Intel 6426Y o equivalente) | 32 / 64 thread | 2 X 25 Gbit/s | 2 x NVIDIA L40S 48Go | +| __PERFORMANCE 4__ | 512 Go | 2.50/4.1 GHz (Intel 6426Y o equivalente) | 32 / 64 thread | 2 x NVIDIA L40S 48Go | ### Note -- __(1)__ La quantità di memoria è quella fisicamente disponibile sulle lame e non può essere modificata. + +- __(1)__ La quantità di memoria è quella fisicamente disponibile sulle blade e non può essere modificata. - __(2)__ Le frequenze indicate corrispondono alla frequenza base minima e alla frequenza turbo. -- __(3)__ La connettività fisica è condivisa per l'accesso di rete e l'accesso allo storage block, grazie a un'architettura convergente Cisco UCS. +- __(3)__ La connettività fisica è condivisa per l'accesso di rete e l'accesso allo storage a blocchi, grazie a un'architettura convergente Cisco UCS. - __(4)__ I GPU disponibili evolvono in base alle ultime tecnologie. Al 1° maggio 2024, il prodotto include GPU NVIDIA LOVELACE L40S. - __(5)__ L'alta disponibilità su un cluster è disponibile solo a partire da 2 nodi. -La disponibilità dell'infrastruttura è garantita al 99,9%, misurata mensilmente, finestre di manutenzione incluse. Qualsiasi richiesta relativa al SLA deve essere segnalata tramite un ticket di incidente. +La disponibilità dell'infrastruttura è garantita al 99.9%, misurata mensilmente, finestre di manutenzione incluse. Qualsiasi richiesta relativa al SLA deve essere segnalata tramite un ticket di incidente. --- ## Classi di storage in modalità block -Lo storage block distribuito, basato su __IBM Spectrum Virtualize__, offre una gamma di prestazioni adattate a diversi casi d'uso: +Lo storage a blocchi distribuito, basato su __IBM Spectrum Virtualize__, offre una gamma di prestazioni adatte a diversi casi d'uso: -| Riferimento | IOPS/To | Limite IOPS max / Volume | Larghezza di banda max / Volume | Utilizzo principale | -|-----------------------------------|----------------|---------------------------|---------------------------------|--------------------------------------------| -| **FLASH - Essenziale** | 500 | 10 000 IOPS | 512 MB/s | Carichi di lavoro leggeri | -| **FLASH - Standard** | 1500 | 30 000 IOPS | 1024 MB/s | Carichi di lavoro standard | -| **FLASH - Premium** | 3000 | 30 000 IOPS | 1024 MB/s | Carichi intensivi | -| **FLASH - Enterprise** | 7500 | 30 000 IOPS | 1024 MB/s | Carichi critici | -| **FLASH - Ultra** | 15000 | 30 000 IOPS | 1024 MB/s | Carichi ultra-intensivi | -| **MASS STORAGE - Archiviazione** | Non applicabile | Non garantito | Non garantito | Storage economico per l'archiviazione | +| Riferimento | IOPS/TB | IOPS massime / Volume | Larghezza di banda massima / Volume | Utilizzo principale | +|-----------------------------------|----------------|---------------------------|-------------------------------------|----------------------------------------| +| **FLASH - Essenziale** | 500 | 10 000 IOPS | 512 MB/s | Carichi di lavoro leggeri | +| **FLASH - Standard** | 1500 | 30 000 IOPS | 1024 MB/s | Carichi di lavoro standard | +| **FLASH - Premium** | 3000 | 30 000 IOPS | 1024 MB/s | Carichi di lavoro intensivi | +| **FLASH - Enterprise** | 7500 | 30 000 IOPS | 1024 MB/s | Carichi di lavoro critici | +| **FLASH - Ultra** | 15000 | 30 000 IOPS | 1024 MB/s | Carichi di lavoro ultra-intensivi | +| **MASS STORAGE - Archiviazione** | Non applicabile| Non garantito | Non garantito | Storage economico per l'archiviazione | ### Caratteristiche -- **Prestazioni** : Le prestazioni effettive crescono linearmente in base al volume allocato (secondo il rapporto IOPS/TB), **entro il limite massimo hardware assoluto definito sopra**. (Ad esempio, un volume da 10 TB di classe Ultra sarà fisicamente limitato a 30.000 IOPS e 1024 MB/s). -- __Tecnologia__ : Flash NVMe con __RAID 6 distribuito__ per una maggiore resilienza. -- __Disponibilità__ : 99,99%, misurata mensilmente. -- __Limitazioni__ : Nessuna limitazione sulle letture o scritture. Nessuna compressione o deduplicazione automatica, garantendo l'utilizzo integrale dei volumi riservati. +- **Prestazioni** : Le prestazioni effettive crescono in modo lineare in base alla capacità allocata (secondo il rapporto IOPS/TB), **entro il limite del massimo hardware assoluto definito sopra**. (Ad esempio, un volume da 10 TB in classe Ultra sarà fisicamente limitato a 30.000 IOPS e 1024 MB/s). +- __Tecnologia__ : Flash NVMe con __Distributed RAID 6__ per una maggiore resilienza. +- __Disponibilità__ : 99.99%, misurata mensilmente. +- __Limitazioni__ : Nessun limite per le operazioni di lettura o scrittura. Nessuna compressione o deduplicazione automatica, garantendo l'utilizzo completo dei volumi riservati. -### Sicurezza e Cifratura dell'Archiviazione a Blocchi +### Sicurezza e Crittografia dello Storage a Blocchi -Per garantire la riservatezza dei vostri dati a riposo, l'intera nostra infrastruttura di archiviazione a blocchi integra una robusta cifratura hardware. +Per garantire la riservatezza dei vostri dati a riposo, l'intera infrastruttura di storage a blocchi integra una crittografia hardware robusta. -- __Tipo di Cifratura__ : I dati sono cifrati direttamente sui dischi (`Data At Rest`) utilizzando l'algoritmo __XTS-AES 256__. -- __Conformità__ : Questo metodo di cifratura è conforme alla norma __FIPS 1-40-2__, garantendo un elevato livello di sicurezza convalidato. -- __Funzionamento__ : La cifratura viene applicata al momento della scrittura dei dati sul supporto di archiviazione fisico. +- __Tipo di Crittografia__ : I dati vengono crittografati direttamente sui dischi (`Data At Rest`) utilizzando l'algoritmo __XTS-AES 256__. +- __Conformità__ : Questo metodo di crittografia è conforme allo standard __FIPS 1-40-2__, garantendo un elevato livello di sicurezza validato. +- __Funzionamento__ : La crittografia viene applicata al momento della scrittura dei dati sul supporto di archiviazione fisico. -:::warning[Point d'attention sur la réplication] -È importante notare che questa cifratura protegge i dati archiviati sui dischi. Non è attiva "on-the-fly", il che significa che i dati non vengono cifrati durante le operazioni di replicazione dell'archiviazione tra le zone di disponibilità. La sicurezza dei trasferimenti è garantita da canali di comunicazione dedicati e sicuri. +:::warning[Attenzione alla replicazione] +È importante notare che questa crittografia protegge i dati archiviati sui dischi. Non è attiva "on-the-fly", il che significa che i dati non vengono crittografati durante le operazioni di replicazione dello storage tra le zone di disponibilità. La sicurezza dei trasferimenti è garantita da canali di comunicazione dedicati e sicuri. ::: --- @@ -117,24 +118,24 @@ Per garantire la riservatezza dei vostri dati a riposo, l'intera nostra infrastr Il prodotto OpenIaaS è compatibile con [le reti private](../network/private_network) e [l'accesso a Internet](../network/internet). -Due tipi di reti sono disponibili dalla configurazione di una macchina virtuale. +Due tipi di reti sono disponibili nella configurazione di una macchina virtuale. ### Le reti di tipo VLAN -Le reti di tipo VLAN devono essere configurate con un VLAN per scheda di rete. Se si desidera utilizzare più reti, è sufficiente creare più schede di rete. +Le reti di tipo VLAN devono essere propagate con un VLAN per scheda di rete. Se si desidera utilizzare più reti, è sufficiente creare più schede di rete. -Esiste un limite al numero massimo di schede che possono essere create su una VM, fissato a 7. +È presente un limite sul numero massimo di schede che è possibile creare su una VM, pari a 7. ### Il VLAN TRUNK -Nel caso in cui sia necessario propagare più di 7 VLAN, è necessario utilizzare il VLAN Trunk. -Il VLAN Trunk consente il passaggio di tutte le VLAN su una singola scheda. La configurazione degli ID VLAN deve essere effettuata tramite interfacce virtuali di tipo VLAN dall'OS della VM. Gli ID VLAN sono gli stessi presenti e visibili dalla console. +Nel caso in cui dobbiate trasportare più di 7 VLAN, è necessario utilizzare il VLAN Trunk. +Il VLAN Trunk consente di far transitare tutti i VLAN su una singola scheda di rete. La configurazione degli ID VLAN deve essere effettuata tramite interfacce virtuali di tipo VLAN dall'OS della VM. Gli ID VLAN sono gli stessi di quelli presenti e visibili dalla console. -## Backup di macchine virtuali +## Backup delle macchine virtuali -L'offerta OpenIaaS integra __un'architettura di backup distribuita nativa e non disattivabile__, elemento obbligatorio nel quadro della qualifica francese SecNumCloud. +L'offerta OpenIaaS integra __un'architettura di backup distribuita nativa e non disattivabile__, elemento obbligatorio nell'ambito della qualificazione SecNumCloud francese. -I backup sono archiviati su [Archiviazione Oggetti qualificata SecNumCloud](../storage/oss), garantendo una protezione ottimale in caso di guasto maggiore del datacenter di produzione. Questo approccio consente di ripristinare i dati su un datacenter secondario, anche in caso di incidente critico come un incendio. +I backup vengono memorizzati sul [Stockage Objet qualifié SecNumCloud](../storage/oss), garantendo una protezione ottimale in caso di guasto grave del datacenter di produzione. Questo approccio consente di ripristinare i vostri dati su un datacenter secondario, anche in caso di incidente critico come un incendio. ### Servizi di protezione dei dati disponibili @@ -142,14 +143,14 @@ I backup sono archiviati su [Archiviazione Oggetti qualificata SecNumCloud](../s |---|---| | **Backup incrementale (Agentless)** | Backup senza agente tramite i meccanismi nativi dell'ipervisore, verso un repository S3 remoto. | | **Backup dei metadati** | Protezione delle configurazioni del pool di virtualizzazione e dell'orchestratore di backup — indispensabile per il Disaster Recovery. | -| **Ripristino granulare** | Ripristino possibile a livello di VM completa, disco virtuale singolo o file unitario. | -| **Offloading S3 Multi-AZ** | Trasferimento verso lo storage oggetto S3 Cloud Temple replicato tra zone di disponibilità. | +| **Ripristino granulare** | Ripristino possibile a livello di VM completa, disco virtuale individuale o file singolo. | +| **Offloading S3 Multi-AZ** | Esternalizzazione verso lo storage a oggetti S3 Cloud Temple replicato tra zone di disponibilità. | -Le velocità di backup e ripristino dipendono dal tasso di cambiamento negli ambienti. La politica di backup è completamente configurabile dalla [Console Cloud Temple](../console/console.md) per ogni macchina virtuale. +Le velocità di backup e ripristino dipendono dal tasso di cambiamento negli ambienti. La politica di backup è completamente configurabile da [la Console Cloud Temple](../console/console.md) per ogni macchina virtuale. | Riferimento | Unità | SKU | | ---------------------------------------------| ----- | ------------------------------ | -| BACKUP - Accesso al servizio | 1 VM | csp:(region):openiaas:backup:vm:v1 | +| BACKUP - Accesso al servizio | 1 VM | csp:(region):openiaas:backup:vm:v1 | --- @@ -157,65 +158,65 @@ Le velocità di backup e ripristino dipendono dal tasso di cambiamento negli amb #### Panoramica -L'architettura si basa su una netta separazione tra il **piano di controllo** e il **piano dati**: l'orchestratore di backup è ospitato nel cluster di gestione di Cloud Temple (distinto e inaccessibile al cliente), mentre i dati di backup sono archiviati su un archivio S3 remoto, fisicamente separato dall'infrastruttura di produzione. I dati transitano cifrati tra i due componenti. +L'architettura si basa su una separazione rigorosa tra il **piano di controllo** e il **piano dati** : l'orchestratore di backup è ospitato nel cluster di gestione di Cloud Temple (distinto e inaccessibile al cliente), mentre i dati di backup sono archiviati in un repository S3 remoto, fisicamente separato dall'infrastruttura di produzione. I dati transitano crittografati tra i due componenti. #### Orchestratore di backup -L'orchestratore è distribuito nel cluster di management di Cloud Temple, **inaccessibile direttamente al cliente**. Orchestra tutti i job di backup e gestisce la crittografia. +L'orchestratore è distribuito nel cluster di gestione di Cloud Temple, **inaccessibile direttamente al cliente**. Esso orchestra tutti i job di backup e gestisce la crittografia. -- **Politiche standard** : le politiche di backup vengono applicate per impostazione predefinita a ogni tenant. -- **Politiche personalizzate** : il cliente può richiedere frequenze o retention specifiche tramite un ticket di supporto nella console Cloud Temple. +- **Politiche standard** : le politiche di backup vengono applicate per impostazione predefinita a ciascun tenant. +- **Politiche personalizzate** : il cliente può richiedere frequenze o ritenzioni specifiche tramite un ticket di supporto nella console Cloud Temple. #### Archiviazione remota S3 -I backup vengono inviati all'[Archiviazione Oggetti qualificata SecNumCloud](../storage/oss) di Cloud Temple, con replicazione Multi-AZ per garantire la resilienza in caso di perdita di un intero sito fisico. +I backup vengono inviati al [Stockage Objet qualifié SecNumCloud](../storage/oss) di Cloud Temple, con replicazione Multi-AZ per garantire la resilienza in caso di perdita di un intero sito fisico. --- ### Meccanismo di backup: Incremental Backup -Il servizio utilizza una modalità di backup **incrementale**. Questa modalità indirizza un **Backup Repository** (l'archiviazione S3 remota) e non esporta mai un backup completo dopo il primo: vengono trasferiti solo i **blocchi di dati modificati** ad ogni ciclo. +Il servizio utilizza una modalità di backup **incrementale**. Questa modalità punta a un **Backup Repository** (lo storage S3 remoto) e non esporta mai un backup completo dopo il primo: solo i **blocchi di dati modificati** vengono trasferiti a ogni ciclo. :::info[Backup incrementale vs Replicazione] -Il **backup incrementale** punta a un archivio S3 remoto ed è ottimizzato per la **protezione a lungo termine**. Non deve essere confusa con la **replicazione** (Disaster Recovery in caldo) che punta a un Storage Repository locale — questa modalità è coperta dalla funzionalità di [replicazione di macchine virtuali](#réplication-de-machines-virtuelles). +Il **backup incrementale** punta a un repository S3 remoto ed è ottimizzato per la **protezione a lungo termine**. Non deve essere confuso con la **replicazione** (Disaster Recovery a caldo) che punta a un Storage Repository locale — questa modalità è coperta dalla funzionalità di [replicazione delle macchine virtuali](#réplication-de-machines-virtuelles). ::: #### Ciclo di vita tecnico di un backup incrementale -Ecco le fasi successive attivate ad ogni esecuzione di un job di backup: +Di seguito sono riportati i passaggi successivi attivati ad ogni esecuzione di un job di backup: **1. Creazione dello snapshot locale (Source)** -All'avvio del job, l'orchestratore richiede all'iperviseur di creare uno snapshot della VM. Questo snapshot funge da punto di riferimento per calcolare il delta rispetto allo snapshot di riferimento precedente. +All'avvio del job, l'orchestratore richiede all'ipervisore di creare uno snapshot della VM. Questo snapshot funge da punto di confronto per calcolare il delta rispetto allo snapshot di riferimento precedente. **2. Esportazione differenziale tramite Changed Block Tracking (CBT)** -L'orchestratore confronta il nuovo snapshot con lo snapshot di riferimento precedente tramite le metadati CBT. Vengono estratti solo i blocchi di dati modificati dall'ultimo backup — non l'intero disco. +L'orchestratore confronta il nuovo snapshot con lo snapshot di riferimento precedente tramite i metadati CBT. Vengono estratti solo i blocchi di dati modificati dall'ultimo backup — non l'intero disco. **3. Crittografia e trasferimento verso S3** -I blocchi modificati vengono **crittografati al volo dall'orchestratore** e inviati tramite HTTPS/TLS 1.3 al bucket S3 remoto. +I blocchi modificati vengono **crittografati in tempo reale dall'orchestratore** e quindi inviati tramite HTTPS/TLS 1.3 al bucket S3 remoto. **4. Rotazione degli snapshot (Coalesce)** -Una volta validato il trasferimento, lo snapshot di riferimento precedente viene eliminato e il nuovo snapshot diventa il riferimento per il ciclo successivo. L'iperviseur attiva quindi un processo di **coalesce** (fusion) per reintegrare i dati del vecchio delta nella catena di dischi virtuali. +Una volta convalidato il trasferimento, il vecchio snapshot di riferimento viene eliminato e il nuovo snapshot diventa il riferimento per il ciclo successivo. L'ipervisore attiva quindi un processo di **coalesce** (fusion) per reintegrare i dati del vecchio delta nella catena dei dischi virtuali. -:::warning[Impatto I/O del Coalesce] -L'operazione di coalesce è **intensiva in I/O** sullo storage di produzione. Viene attivata automaticamente dopo ogni backup riuscito. Si consiglia di pianificare le finestre di backup durante i periodi di basso carico applicativo. +:::warning[Impact I/O du Coalesce] +L'operazione di coalesce è **intensiva in termini di I/O** sullo storage di produzione. Viene attivata automaticamente dopo ogni backup riuscito. Si consiglia di pianificare le finestre di backup durante i periodi di basso carico applicativo. ::: -**5. Gestione della retention su S3 (Merge) e Key Backup Interval** +**5. Gestione della ritenzione su S3 (Merge) e Key Backup Interval** -Sullo storage S3, l'orchestratore gestisce la rotazione dei backup tramite **fusione** (*merge*) dei vecchi delta nel backup completo più vecchio conservato in base alla politica di retention. +Sullo storage S3, l'orchestratore gestisce la rotazione dei backup tramite **fusione** (*merge*) dei vecchi delta nel backup completo più antico conservato in base alla politica di ritenzione. -Per garantire l'integrità della catena di backup, un backup completo viene **forzato periodicamente** (tipicamente ogni 20 incrementi — *Key Backup Interval*). Questo crea un nuovo punto di partenza pulito e limita l'impatto di un'eventuale corruzione di un anello della catena. +Per garantire l'integrità della catena di backup, un backup completo viene **forzato periodicamente** (typiquement tous les 20 incréments — *Key Backup Interval*). Questo crea un nuovo punto di partenza pulito e limita l'impatto di una potenziale corruzione di un anello della catena. --- ### Impatto sul dimensionamento dello storage di produzione :::warning[Punto di attenzione critico — Storage a blocchi (Thick provisioning)] -L'offerta OpenIaaS si basa su storage a blocchi ad alte prestazioni (Fibre Channel / LVM). Gli snapshot utilizzati dal backup incrementale sono provisionati in modalità **Thick** : ogni snapshot consuma sul Storage Repository (SR) la **dimensione nominale completa del disco della VM**, e non solo il delta reale. +L'offerta OpenIaaS si basa su storage a blocchi ad alte prestazioni (Fibre Channel / LVM). I snapshot utilizzati dal backup incrementale sono provisionati in modalità **Thick** : ogni snapshot consuma sul Storage Repository (SR) la **dimensione nominale completa del disco della VM**, e non solo il delta effettivo. **Esempio di consumo per una VM con un disco da 50 Go :** @@ -223,10 +224,10 @@ L'offerta OpenIaaS si basa su storage a blocchi ad alte prestazioni (Fibre Chann |---|---| | Disco VM attivo | 50 Go | | Snapshot di riferimento permanente (per il calcolo del delta) | 50 Go | -| Snapshot temporaneo creato durante l'export | 50 Go | +| Snapshot temporaneo creato durante l'esportazione | 50 Go | | **Totale richiesto durante la finestra di backup** | **fino a 150 Go** | -**Regola di dimensionamento consigliata** : prevedere **al minimo il 50% di spazio libero** sullo storage di produzione rispetto al volume totale delle VM backuppate, per supportare questo sovraccarico intrinseco allo storage a blocchi ad alte prestazioni. +**Regola di dimensionamento consigliata** : prevedere **almeno il 50% di spazio libero** sullo storage di produzione rispetto al volume totale delle VM sottoposte a backup, per supportare questo sovraccarico intrinseco allo storage a blocchi ad alte prestazioni. ::: --- @@ -235,7 +236,7 @@ L'offerta OpenIaaS si basa su storage a blocchi ad alte prestazioni (Fibre Chann #### Crittografia in transito -Tutte le comunicazioni tra l'orchestratore di backup e lo storage S3 sono crittografate tramite **HTTPS / TLS 1.3**. +Tutte le comunicazioni tra l'orchestratore di backup e l'archiviazione S3 sono crittografate tramite **HTTPS / TLS 1.3**. #### Crittografia a riposo (At Rest) e gestione delle chiavi @@ -246,57 +247,57 @@ La crittografia viene applicata dall'orchestratore di backup, **prima** dell'inv | **Algoritmo** | AES-256 o ChaCha20-Poly1305 | | **Generazione della chiave** | Automatica al deployment dell'orchestratore di backup | | **Archiviazione della chiave** | Vault centralizzato Cloud Temple (mai esposto nell'interfaccia client) | -| **Resilienza** | In caso di perdita dell'orchestratore, la chiave viene reiniettata dal Vault per ripristinare il servizio | +| **Resilienza** | In caso di perdita dell'orchestratore, la chiave viene reimpostata dal Vault per ripristinare il servizio | #### Isolamento di rete (architettura SecNumCloud) -L'infrastruttura di backup è progettata per essere **completamente isolata** rispetto agli ambienti client : +L'infrastruttura di backup è progettata per essere **strettamente isolata** rispetto agli ambienti client : -- **Separazione fisica** : le reti *Client*, *Amministrazione* e *Backup* si basano su backbone fisici distinti e contesti di routing (VRF) separati. -- **Impossibilità di infezione laterale** : una VM compromessa non può raggiungere lo storage S3 né l'orchestratore di backup — non esiste alcun percorso di rete tra di essi. S3 non viene mai « montato » nella VM. +- **Separazione fisica** : le reti *Client*, *Amministrazione* e *Backup* si basano su backbones fisici distinti e contesti di routing (VRF) separati. +- **Impossibilità di infezione laterale** : una VM compromessa non può raggiungere lo storage S3 né l'orchestratore di backup — non esiste alcun percorso di rete tra di essi. Lo S3 non viene mai « montato » nella VM. #### Amministrazione sicura -L'amministrazione della piattaforma di backup è **riservata ai team Backup di Cloud Temple** ed è soggetta ai requisiti SecNumCloud: +L'amministrazione della piattaforma di backup è **riservata ai team Backup di Cloud Temple** e soggetta ai requisiti SecNumCloud: | Controllo | Misura | |---|---| -| **Bastion di accesso** | Passaggio obbligatorio tramite un bastion di amministrazione interno hardeningizzato (Ubuntu Hardened) | -| **Postazione di lavoro** | Accesso consentito esclusivamente da laptop di amministrazione dedicati e sicuri | -| **Autenticazione** | MFA obbligatoria tramite un annuario LDAP di amministrazione dedicato (distinto dal LDAP per ufficio) | +| **Bastione di accesso** | Transito obbligatorio tramite un bastione di amministrazione interno hardened (Ubuntu Hardened) | +| **Postazione di lavoro** | Accesso esclusivamente da laptop di amministrazione dedicati e sicuri | +| **Autenticazione** | MFA obbligatorio tramite un directory LDAP di amministrazione dedicato (distinto dall'LDAP aziendale) | --- ### Monitoraggio e audit -- **Log di backup** : visibili dal cliente direttamente nella Console Cloud Temple — stato (successo/errore), volumetria, timestamp. -- **Log di accesso amministratore** : gli accessi alle infrastrutture di backup (orchestratore, S3) sono registrati e **sottoposti ad audit mensilmente** per rilevare eventuali anomalie. -- **Test di intrusione (Pentest PASSI)** : l'infrastruttura è oggetto di pentest regolari da parte di fornitori qualificati PASSI nell'ambito del mantenimento della qualifica SecNumCloud. -- **Sicurezza fisica** : tutte le apparecchiature sono ospitate nelle zone SecNumCloud (gabbie fisiche dedicate con controllo accessi biometrico) dei datacenter Cloud Temple. +- **Log di backup** : visibili al cliente direttamente nella Console Cloud Temple — stato (successo/fallimento), volumetria, timestamp. +- **Log di accesso amministratore** : gli accessi alle infrastrutture di backup (orchestratore, S3) vengono registrati e **sottoposti a audit mensili** per rilevare eventuali anomalie. +- **Test di intrusione (Pentest PASSI)** : l'infrastruttura è sottoposta a pentest regolari da parte di fornitori qualificati PASSI nell'ambito del mantenimento della qualificazione SecNumCloud. +- **Sicurezza fisica** : tutti gli equipment sono ospitati nelle zone SecNumCloud (gabbie fisiche dedicate con controllo degli accessi biometrico) dei datacenter Cloud Temple. --- ### Compatibilità e casi particolari -:::warning[VMs con scritture disco continue] -Alcune macchine virtuali non sono compatibili con questa tecnologia di backup quando i loro **carichi di scrittura su disco sono costanti** (database attivi, log transazionali, ecc.). L'iperviseur non può quindi completare l'istantanea senza congelare la VM, operazione che può durare diverse ore. +:::warning[VM con scritture su disco continue] +Alcune macchine virtuali non sono compatibili con questa tecnologia di backup quando i loro **carichi di scrittura su disco sono costanti** (bases de données actives, journaux transactionnels, etc.). L'ipervisore non può quindi finalizzare lo snapshot senza congelare la VM, il che può richiedere diverse ore. -Per questi carichi di lavoro, consigliamo di **completare o sostituire il backup a livello di iperviseur con un backup applicativo**: dump del database (pg_dump, mysqldump...), backup tramite agent, o esportazione nativa dell'applicazione. +Per questi carichi di lavoro, consigliamo di **completare o sostituire il backup dell'ipervisore con un backup applicativo** : dump del database (pg_dump, mysqldump…), backup tramite agente, o export nativo dell'applicazione. ::: --- ### Creazione di una politica di backup -La creazione di una politica di backup è un'operazione di amministrazione eseguita **esclusivamente tramite una richiesta di supporto**, accessibile tramite l'icona del salvagente in alto a destra nell'interfaccia. +La creazione di una politica di backup è un'operazione di amministrazione eseguita **esclusivamente tramite una richiesta di supporto**, accessibile tramite l'icona del salvagente in alto a destra dell'interfaccia. -La richiesta deve specificare: +La richiesta deve specificare : - Il nome della vostra Organizzazione -- I dati di contatto (email et téléphone) di un referente per completare la configurazione +- I recapiti di un contatto (email e telefono) per finalizzare la configurazione - Il nome del tenant - Il nome della politica di backup -- Le caratteristiche desiderate: frequenza, conservazione (x jours, y semaines, z mois…) +- Le caratteristiche desiderate : frequenza, ritenzione (x giorni, y settimane, z mesi…) #### Vincoli di pianificazione @@ -306,69 +307,69 @@ La richiesta deve specificare: | **Ritenzione massima** | 24 mesi | | **Esecuzioni simultanee per policy** | 1 sola alla volta | -:::warning[Una policy può essere eseguita una sola volta alla volta] -Ogni policy di backup è **mono-istanza** : una sola esecuzione può essere attiva contemporaneamente. +:::warning[Une politique ne peut tourner qu'une seule fois à la fois] +Ogni policy di backup è **mono-istanza**: una sola esecuzione può essere attiva contemporaneamente. -**Conseguenza pratica** : se si aggiungono molte macchine virtuali a una policy esistente e il backup della notte precedente non è ancora terminato al momento dell'avvio pianificato, **il nuovo ciclo non partirà** — verrà ignorato fino alla prossima occorrenza. +**Conseguenza pratica**: se si aggiungono numerose macchine virtuali a una policy esistente e il backup del giorno precedente non è ancora terminato al momento dell'attivazione pianificata, **il nuovo ciclo non partirà** — verrà ignorato fino alla prossima occorrenza. -Per evitare questo scenario : +Per evitare questa situazione: - verificare le **durate di esecuzione** dei propri job dai log della Console Cloud Temple, -- regolare la **frequenza** o le **dimensioni della policy** se i backup si sovrappongono regolarmente alla finestra successiva, -- valutare di **distribuire le VM su più policy** con orari sfalsati per i grandi perimetri. +- regolare la **frequenza** o la **dimensione della policy** se i backup si sovrappongono regolarmente alla finestra successiva, +- valutare di **distribuire le VM su più policy** con orari sfalsati per i perimetri più ampi. ::: -:::info[Ritenzione a lungo termine — disponibilità futura] -**La ritenzione massima è attualmente di 24 mesi.** Una ritenzione a lungo termine (fino a 10 anni) sarà integrata con il lancio del nostro prodotto **Glacier**, previsto per il **primo trimestre 2027**, sotto forma di abbonamento aggiuntivo. +:::info[Rétention longue durée — disponibilité future] +**La ritenzione massima è attualmente di 24 mesi.** Una ritenzione a lungo termine (fino a 10 anni) verrà integrata con il lancio del nostro prodotto **Glacier**, previsto per il **primo trimestre 2027**, sotto forma di abbonamento aggiuntivo. -Per durate di ritenzione così lunghe, consigliamo di eseguire il backup **esclusivamente di file piatti** (file grezzi, documenti statici) nonché di **dump di database**. Il ripristino di un server completo dopo 10 anni comporta infatti rischi significativi : molti servizi o dipendenze potrebbero essere diventati obsoleti o incompatibili con l'ambiente attuale. +Per durate di ritenzione così lunghe, raccomandiamo di eseguire il backup **esclusivamente di file piatti** (file grezzi, documenti statici) nonché di **dump dei database**. Il ripristino di un server completo dopo 10 anni comporta infatti rischi significativi: molti servizi o dipendenze potrebbero essere diventati obsoleti o incompatibili con l'ambiente attuale. -**Alternativa disponibile da subito** : il servizio di **backup tramite agent**, disponibile in abbonamento aggiuntivo. Contattare il supporto per ulteriori informazioni. +**Alternativa disponibile subito**: il servizio di **backup tramite agente**, disponibile come abbonamento aggiuntivo. Contattare il supporto per ulteriori informazioni. ::: ## Le macchine virtuali ### Gestione delle risorse vCPU -Le modifiche alle risorse vCPU vengono effettuate a freddo (macchina spenta). La piattaforma supporta fino a 254 vCPU per macchina virtuale (limite teorico), con test positivi eseguiti su VM Linux dotate di 128 vCPU. +Le modifiche alle risorse vCPU vengono eseguite a freddo (macchina spenta). La piattaforma supporta fino a 254 vCPU per macchina virtuale (limite teorico), con test soddisfacenti eseguiti su VM Linux dotate di 128 vCPU. È importante notare che il supporto del sistema operativo guest costituisce un fattore determinante durante l'allocazione delle risorse. Un'allocazione che supera i limiti supportati dal sistema operativo può causare problemi di prestazioni significativi. ### Gestione delle risorse di memoria -Le modifiche alla memoria avvengono anche a freddo. I limiti sono i seguenti: +Le modifiche alla memoria vengono eseguite anche a freddo. I limiti sono i seguenti: - 1,5 TiB con supporto per gli snapshot di memoria - 8 TiB senza supporto per gli snapshot di memoria -- 16 TiB (limite teorico senza supporto di sicurezza, meno la RAM assegnata a Xen e al dominio di controllo) +- 16 TiB (limite teorico senza supporto di sicurezza, meno la RAM allocata a Xen e al dominio di controllo) -La memoria effettivamente utilizzabile può essere limitata dal sistema operativo guest. Superare i limiti supportati dall'OS guest può causare un calo delle prestazioni. +La memoria effettivamente utilizzabile può essere limitata dal sistema operativo guest. Superare i limiti supportati dal sistema operativo guest può causare un calo delle prestazioni. ### Gestione dei dischi - La dimensione massima di un disco è di 2 TB - I dischi utilizzano il formato VHD standard -- Il numero massimo di dischi virtuali per macchina virtuale, inclusi i lettori CD-ROM, è 24 +- Il numero massimo di dischi virtuali per macchina virtuale, inclusi i lettori CD-ROM, è di 24 Non è possibile ridimensionare i dischi una volta creati. Per estendere la capacità di archiviazione, è necessario creare un nuovo disco. ### Strumenti per le macchine virtuali -Questi strumenti sono utilizzati per garantire un funzionamento ottimale delle macchine virtuali. Quando si desidera eseguire un'azione e uno di questi strumenti è necessario, verrà visualizzato un messaggio sulla console Cloud Temple. -Per installare questi strumenti, è possibile consultare i siti ufficiali di Xen Server per ottenere una procedura dettagliata in base al proprio sistema operativo. +Questi strumenti vengono utilizzati per garantire un funzionamento ottimale delle macchine virtuali. Quando si desidera eseguire un'azione e uno di questi strumenti è necessario, verrà visualizzato un messaggio sulla console Cloud Temple. +Per installare questi strumenti, è possibile consultare i siti ufficiali di Xen Server per ottenere una procedura dettagliata in base al proprio OS. #### Management Agent -Il Management Agent è un componente installato in ogni macchina virtuale. Consente all'iperviseur di gestire meglio la macchina disponendo di maggiori informazioni e permette di eseguire determinate operazioni in modo più efficiente. +L'Agente di gestione è un componente installato in ogni macchina virtuale. Consente all'ipervisore di gestire meglio la macchina grazie all'accesso a ulteriori informazioni e permette di eseguire determinate azioni in modo più pulito. -#### Driver PV (Driver di paravirtualizzazione) +#### PV Drivers (Paravirtualization Drivers) -I driver PV sono driver installati nella macchina virtuale per migliorarne le prestazioni. -Senza questi driver, la macchina funziona, ma più lentamente. Inoltre, consentono alcune operazioni avanzate. +I driver PV sono dei driver installati nella macchina virtuale per migliorarne le prestazioni. +Senza questi driver, la macchina funziona, ma più lentamente. Inoltre, consentono determinate operazioni avanzate. I driver PV sono installati nativamente sulla maggior parte dei kernel Linux attuali. #### Strumenti -I Tools sono un insieme di componenti software che migliorano l'integrazione della macchina virtuale con l'infrastruttura di virtualizzazione. +Gli Strumenti sono un insieme di componenti software che migliorano l'integrazione della macchina virtuale con l'infrastruttura di virtualizzazione. ## Cataloghi @@ -378,20 +379,20 @@ Il catalogo consente di gestire tre tipi di elementi essenziali: - I template di configurazione - I template preinstallati di macchine virtuali -Nella vista dettagliata di un template di macchina virtuale, è possibile consultare informazioni cruciali come la posizione, il numero di dischi o il numero di adattatori di rete. +Nella vista dettagliata di un template di macchina virtuale, è possibile consultare informazioni cruciali come l'ubicazione, il numero di dischi o ancora il numero di adattatori di rete. -Quando il numero di dischi virtuali è indicato come 0, ciò significa che si tratta di un template di configurazione senza sistema operativo preinstallato, consentendoti così di distribuire il tuo ambiente personalizzato. +Quando il numero di dischi virtuali è indicato come 0, ciò significa che si tratta di un template di configurazione senza sistema operativo preinstallato, permettendovi così di distribuire il vostro ambiente personalizzato. -## Replicazione delle macchine virtuali +## Replicazione di macchine virtuali -La __replicazione delle macchine virtuali__ di Cloud Temple garantisce la protezione e la continuità dei tuoi dati critici grazie a una copia automatizzata dei tuoi ambienti verso una zona di disponibilità separata. Questa funzionalità, integrata nativamente nel prodotto IaaS Open Source, soddisfa i requisiti più rigorosi di continuità operativa e disaster recovery. +La __replicazione di macchine virtuali__ di Cloud Temple garantisce la protezione e la continuità dei vostri dati critici grazie a una copia automatizzata dei vostri ambienti verso una zona di disponibilità separata. Questa funzionalità, integrata nativamente nel prodotto IaaS Open Source, soddisfa i requisiti più rigorosi di continuità operativa e disaster recovery. ### Una protezione automatizzata e sicura -La replicazione Cloud Temple si basa su un'infrastruttura __qualificata SecNumCloud__, garantendo: +La replicazione Cloud Temple si basa su un'infrastruttura __qualificata SecNumCloud__, garantendo : -- __Replicazione asincrona__ : Copia continua delle tue macchine virtuali senza impatto sulle prestazioni di produzione -- __Separazione geografica__ : Archiviazione delle repliche in una zona di disponibilità diversa da quella di origine +- __Replicazione asincrona__ : Copia continua delle vostre macchine virtuali senza impatto sulle prestazioni di produzione +- __Separazione geografica__ : Archiviazione dei replicati in una zona di disponibilità diversa dalla sorgente - __Automazione completa__ : Processo interamente automatizzato tramite la [Console Cloud Temple](../console/console.md) - __Conformità normativa__ : Rispetto dei requisiti di backup e continuità operativa @@ -399,28 +400,40 @@ La replicazione Cloud Temple si basa su un'infrastruttura __qualificata SecNumCl | Vantaggio | Descrizione | |-------------------------|------------------------------------------------------------------------------------------------------------------------------------------------| -| Continuità operativa | Protezione dei servizi critici in caso di incidente maggiore sul sito principale. | -| Protezione geografica | Replicazione verso una zona di disponibilità distinta, che protegge da disastri localizzati. | -| Flessibilità temporale | Scelta dell'intervallo di replicazione in base alle proprie esigenze: da 1 minuto a 24 ore. | +| Continuità operativa | Protezione dei vostri servizi critici in caso di incidente maggiore sul sito principale. | +| Protezione geografica | Replicazione verso una zona di disponibilità separata, a protezione da disastri localizzati. | +| Flessibilità temporale | Scelta dell'intervallo di replicazione in base alle vostre esigenze: da 15 minuti a 24 ore. | | Semplicità di gestione | Configurazione e monitoraggio completamente integrati nella Console Cloud Temple. | -| Conformità SecNumCloud | Infrastruttura qualificata che garantisce il più alto livello di sicurezza per i dati sensibili. | +| Conformità SecNumCloud | Infrastruttura qualificata che garantisce il più alto livello di sicurezza per i vostri dati sensibili. | -### Configurazione della replica +### Configurazione della replicazione #### Politiche di replicazione -La creazione di una politica di replicazione definisce i parametri di protezione delle tue macchine virtuali: +La creazione di una politica di replicazione definisce i parametri di protezione delle vostre macchine virtuali : - __Destinazione__ : Selezione dell'archiviazione di destinazione nella zona di disponibilità di replicazione -- __Frequenza__ : Intervallo di replicazione adattato alle tue esigenze di recupero (RPO) -- __Ritenzione__ : Numero di punti di recupero conservati +- __Frequenza__ : Intervallo di replicazione adattato alle vostre esigenze di recupero (RPO) +- __Retenzione__ : Numero di punti di recupero conservati #### Intervalli disponibili | Intervallo | Utilizzo consigliato | RPO (Perdita massima di dati) | |-------------------------|--------------------------------------------|-----------------------------| -| __1-59 minuti__ | Applicazioni critiche in tempo reale | < 1 ora | -| __1-24 ore__ | Applicazioni aziendali e ambienti standard | < 24 ore | +| __15 a 59 minuti__ | Applicazioni critiche in tempo reale | < 1 ora | +| __1 a 24 ore__ | Applicazioni aziendali e ambienti standard | < 24 ore | + +:::warning[RPO: obiettivo non garantito contrattualmente] +L'intervallo di replica configurato (ad esempio 15 minuti) costituisce un **obiettivo RPO (Recovery Point Objective)**, e non un impegno contrattuale. + +L'RPO effettivamente raggiunto dipende direttamente dal **tasso di cambiamento (change rate)** dei dati sulle macchine virtuali replicate. Se il volume di dati modificati tra due cicli di replica è troppo elevato, il trasferimento potrebbe non completarsi entro l'intervallo configurato. In tal caso, il ciclo successivo non inizierà fino al completamento di quello precedente, prolungando di fatto l'RPO reale. + +**In sintesi:** +- L'RPO minimo configurabile è di **15 minuti**. +- Questo RPO è raggiungibile solo se il tasso di cambiamento dei dati rimane compatibile con la banda di replica disponibile. +- **Nessun SLA è associato all'RPO**: si tratta di un obiettivo « best effort » il cui rispetto dipende dalle caratteristiche del carico di lavoro. +- Per i carichi di lavoro con elevato tasso di scrittura (database, log transazionali, ecc.), si consiglia di prevedere un intervallo di replica più ampio e di integrarlo con una strategia di backup applicativo. +::: #### Associazione delle macchine virtuali @@ -428,15 +441,15 @@ Una volta creata la policy, è possibile associare le macchine virtuali da prote - __Selezione semplice__ : Scelta delle VMs dall'interfaccia della Console - __Validazione automatica__ : Verifica della compatibilità e dei prerequisiti -- __Attivazione immediata__ : Avvio automatico della replica dopo la configurazione +- __Attivazione immediata__ : Avvio automatico della replicazione dopo la configurazione ### Gestione delle repliche -#### Vista delle politiche +#### Vista delle policy -La Console Cloud Temple offre una visualizzazione centralizzata delle tue politiche di replica con: +La Console Cloud Temple offre una vista centralizzata delle vostre policy di replica con: -- Nome e frequenza di ciascuna politica +- Nome e frequenza di ciascuna policy - Zona di disponibilità di destinazione - Pool e storage associati - Azioni di gestione disponibili @@ -446,47 +459,47 @@ La Console Cloud Temple offre una visualizzazione centralizzata delle tue politi La tabella delle repliche consente di visualizzare: - Nome delle macchine virtuali replicate -- Posizione di origine e destinazione +- Posizione di origine e di destinazione - Politica di replica associata - Esportazione dei dati in formato CSV ### Buone pratiche -#### Raccomandazioni per tipo di carico di lavoro +#### Raccomandazioni per tipo di carico -- __Applicazioni critiche__ : Replicazione ogni 1-30 minuti per minimizzare la perdita di dati -- __Applicazioni aziendali__ : Replicazione oraria o ogni due ore in base alle esigenze +- __Applicazioni critiche__ : Replicazione ogni 15-30 minuti per minimizzare la perdita di dati +- __Applicazioni aziendali__ : Replicazione oraria o bis-oraria in base alle esigenze - __Ambienti di sviluppo__ : Replicazione giornaliera generalmente sufficiente #### Pianificazione delle politiche - Create politiche distinte in base alla criticità delle vostre applicazioni -- Assegnate nomi chiari alle politiche per facilitarne la gestione +- Denominate chiaramente le vostre politiche per facilitarne la gestione - Verificate regolarmente lo stato delle vostre repliche dalla console -- Documentate la vostra strategia di replica per i vostri team +- Documentate la vostra strategia di replicazione per i vostri team __Nota importante :__ -*La replica non sostituisce una strategia di backup completa. Costituisce un complemento essenziale per garantire la continuità operativa in caso di incidente maggiore sul vostro sito principale.* +*La replicazione non sostituisce una strategia di backup completa. Costituisce un complemento essenziale per garantire la continuità operativa in caso di incidente maggiore sul sito principale.* ## Alta disponibilità L'alta disponibilità consente di garantire la continuità del servizio delle macchine virtuali (VM) in caso di guasto di un host fisico all'interno di un pool OpenIaaS. -Con l'alta disponibilità (HA), ogni host nel pool invia regolarmente segnali di vita ai propri peer tramite lo storage condiviso (Block Storage Heartbeat). In caso di assenza prolungata di risposta, l'host è considerato guasto. +Con l'alta disponibilità (HA), ogni host nel pool invia regolarmente segnali di vita ai suoi pari tramite lo storage condiviso (Block Storage Heartbeat). In caso di assenza prolungata di risposta, l'host viene considerato guasto. -Un Block Storage designato come heartbeat significa che fungerà da base per verificare gli host che non rispondono più. +Un Block Storage designato come heartbeat significa che fungerà da riferimento per verificare lo stato degli host che non dovessero più rispondere. Affinché l'alta disponibilità sia configurata correttamente in un pool OpenIaaS, è indispensabile disporre di __almeno due host__ connessi. -Ogni VM deve essere configurata con un livello di priorità di riavvio in alta disponibilità: +Ogni VM deve essere configurata con un livello di priorità di riavvio per l'alta disponibilità: -#### Disabilitato +#### Disabled L'alta disponibilità non è configurata. In caso di guasto dell'host, la macchina virtuale non verrà riavviata. #### Riavvio - In caso di guasto dell'host, la macchina virtuale verrà riavviata automaticamente non appena saranno disponibili risorse nel pool. Le macchine virtuali configurate in modalità "riavvio" vengono gestite con priorità, prima di quelle configurate in modalità "best-effort". + In caso di guasto dell'host, la macchina virtuale verrà riavviata automaticamente non appena saranno disponibili risorse nel pool. Le macchine virtuali configurate in modalità "restart" vengono gestite con priorità, prima di quelle configurate in modalità "best-effort". #### Best-Effort diff --git a/scripts/translate_py/translation-meta.json b/scripts/translate_py/translation-meta.json index 9c246020..e39fdb56 100644 --- a/scripts/translate_py/translation-meta.json +++ b/scripts/translate_py/translation-meta.json @@ -37,10 +37,10 @@ "it": "efab3a71c16c98efecf08fdd9ce316df25d4990992dba6dc0c2ed94d418e736e" }, "changelog.md": { - "en": "6b284748931f088016bf25e781f554f2799fe0978a5fa4ba72d078fe299c20b8", - "de": "6b284748931f088016bf25e781f554f2799fe0978a5fa4ba72d078fe299c20b8", - "es": "6b284748931f088016bf25e781f554f2799fe0978a5fa4ba72d078fe299c20b8", - "it": "6b284748931f088016bf25e781f554f2799fe0978a5fa4ba72d078fe299c20b8" + "en": "b52ad8a4ecffb0dddf70c9b6cefd156e032ba71942c24b0b5d26253b8a82f316", + "de": "b52ad8a4ecffb0dddf70c9b6cefd156e032ba71942c24b0b5d26253b8a82f316", + "es": "b52ad8a4ecffb0dddf70c9b6cefd156e032ba71942c24b0b5d26253b8a82f316", + "it": "b52ad8a4ecffb0dddf70c9b6cefd156e032ba71942c24b0b5d26253b8a82f316" }, "changelog_produits.md": { "en": "0639e259b6d1d05d0b13fabbd35ad14d5bfe4b4e24f8ce7323ecd024ac5b896b", @@ -313,10 +313,10 @@ "it": "ea2704db25b3315a99e4bdeb594d743d88f73da8e62a9fe353088a673131f852" }, "iaas_opensource/concepts.md": { - "en": "804add592e311cd56bae2a60480fbc9431f1e28ac5c07c9477db517d797d0236", - "de": "804add592e311cd56bae2a60480fbc9431f1e28ac5c07c9477db517d797d0236", - "es": "804add592e311cd56bae2a60480fbc9431f1e28ac5c07c9477db517d797d0236", - "it": "804add592e311cd56bae2a60480fbc9431f1e28ac5c07c9477db517d797d0236" + "en": "bc465ec35458a22da2e944ba5774c740b19e7f103f2254c0d5444a958e06d1d3", + "de": "bc465ec35458a22da2e944ba5774c740b19e7f103f2254c0d5444a958e06d1d3", + "es": "bc465ec35458a22da2e944ba5774c740b19e7f103f2254c0d5444a958e06d1d3", + "it": "bc465ec35458a22da2e944ba5774c740b19e7f103f2254c0d5444a958e06d1d3" }, "iaas_opensource/iaas_opensource.md": { "en": "4d27fd397c405d991e5198494e7d40b293a2eb2223c26e7d55a4371e2c796d87", @@ -943,6 +943,6 @@ "it": "1f532fe40db1196a2cc8a965bc05ccb1f311ef575e207f0d6ef3e47cc389bef0" } }, - "last_update": "2026-05-26T22:36:02.595411", + "last_update": "2026-05-27T00:23:26.332082", "version": "2.0" } \ No newline at end of file From a708a2be08c6d5ddd8e4afc71b9a709e7156cc45 Mon Sep 17 00:00:00 2001 From: Alexandre LEPETIT <10155402+aelttil@users.noreply.github.com> Date: Wed, 27 May 2026 00:24:00 +0200 Subject: [PATCH 14/15] docs(translate_py): adopt .env.example as single source of truth for config The README and .env.example previously duplicated the env vars list, which had silently drifted from config.py defaults: - TRANSLATION_MODEL was still qwen3:30b-a3b (obsolete, causes HTTP 404) - CONCURRENT_TRANSLATIONS doc said 8 but real default is 4 - MAX_TOKENS_PER_BLOCK doc said 5000 but real default is 4000 - MODEL_TYPE / MAX_MODEL_CONTEXT_LENGTH / BUFFER_TOKENS were undocumented scripts/translate_py/.env.example: - Rewritten as self-documenting with inline comments (role, default, valid range) for every variable supported by config.py - TRANSLATION_MODEL updated to qwen3.6:27b (current default) - Added MODEL_TYPE, MAX_MODEL_CONTEXT_LENGTH, BUFFER_TOKENS - Documented TRANSLATION_LOCAL_MODE and DOC_BASE_PATH scripts/README.md: - Removed the duplicated env vars block - Points to .env.example as the single source of truth - Adds a note explaining why duplication was removed Co-Authored-By: Claude Opus 4.7 (1M context) --- scripts/README.md | 23 ++++----- scripts/translate_py/.env.example | 79 ++++++++++++++++++++++++++++--- 2 files changed, 80 insertions(+), 22 deletions(-) diff --git a/scripts/README.md b/scripts/README.md index c39bc583..10253b5e 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -93,25 +93,18 @@ Les options CLI sont prioritaires sur les variables d'environnement : Les commandes qui ne font pas d'appel API (`--dry-run`, `--init` sans `--translate-missing`) restent utilisables sans token. -Les variables d'environnement restent supportées : +Les variables d'environnement restent supportées (groupes : API, modèle, performance, mode debug). **Pour la liste complète, les valeurs par défaut et les plages valides, voir [`translate_py/.env.example`](./translate_py/.env.example)** — chaque variable y est documentée inline. + +Pour démarrer rapidement : ```bash -# API Configuration -CLOUDTEMPLE_API_KEY=your_api_key_here -CLOUDTEMPLE_API_URL=https://api.ai.cloud-temple.com/v1/chat/completions -TRANSLATION_MODEL=qwen3.6:27b - -# Performance Settings -CONCURRENT_TRANSLATIONS=8 # Nombre de traductions simultanées -MAX_TOKENS_PER_BLOCK=5000 # Taille max des blocs de traduction -MAX_RETRIES=5 # Nombre de tentatives par traduction -RETRY_DELAY=5.0 # Délai entre tentatives (secondes) - -# Model Parameters -TRANSLATION_TEMPERATURE=0.1 # Créativité du modèle (0.0-2.0) -TRANSLATION_TOP_P=1.0 # Nucleus sampling (0.0-1.0) +cd scripts/translate_py +cp .env.example .env +# Renseigner CLOUDTEMPLE_API_KEY puis lancer translate.py depuis la racine du projet ``` +> 💡 **Source unique** : le fichier `.env.example` est la référence pour les noms de variables, leurs défauts et leurs plages valides. Ne pas dupliquer cette liste dans le README pour éviter les divergences avec le code (`config.py`). + #### Utilisation ```bash # Depuis le répertoire racine ou scripts/translate_py/ diff --git a/scripts/translate_py/.env.example b/scripts/translate_py/.env.example index 7e61779e..d7956874 100644 --- a/scripts/translate_py/.env.example +++ b/scripts/translate_py/.env.example @@ -1,18 +1,83 @@ -# Configuration API Cloud Temple LLMaaS +# ============================================================================= +# Configuration du script de traduction Cloud Temple +# ----------------------------------------------------------------------------- +# Copier ce fichier en `.env` et renseigner au minimum CLOUDTEMPLE_API_KEY. +# Toutes les autres variables sont OPTIONNELLES : les valeurs ci-dessous sont +# les defauts du code (voir scripts/translate_py/config.py). Les options CLI +# (--token, --url, --model) sont prioritaires sur ces variables. +# ============================================================================= + + +# ============================================================================= +# API Cloud Temple LLMaaS +# ============================================================================= + +# Token Bearer Cloud Temple LLMaaS (obligatoire pour les appels API reels). +# Alternative : passer --token "$CLOUDTEMPLE_API_KEY" en ligne de commande. CLOUDTEMPLE_API_KEY=your_api_key_here + +# URL de l'endpoint chat completions. +# Defaut : https://api.ai.cloud-temple.com/v1/chat/completions CLOUDTEMPLE_API_URL=https://api.ai.cloud-temple.com/v1/chat/completions -# Configuration du modèle de traduction -TRANSLATION_MODEL=qwen3:30b-a3b + +# ============================================================================= +# Modele de traduction +# ============================================================================= + +# Modele LLM utilise pour la traduction. Defaut : qwen3.6:27b +TRANSLATION_MODEL=qwen3.6:27b + +# Type de tokenizer pour le decoupage des blocs. Valeurs : "openai" ou "other". +# Defaut : other +MODEL_TYPE=other + +# Creativite du modele (0.0 = deterministe, 2.0 = tres aleatoire). +# Plage : 0.0-2.0. Defaut : 0.1 TRANSLATION_TEMPERATURE=0.1 + +# Nucleus sampling. Plage : 0.0-1.0. Defaut : 1.0 TRANSLATION_TOP_P=1.0 -# Configuration système -DOC_BASE_PATH=../.. + +# ============================================================================= +# Performance & decoupage +# ============================================================================= + +# Nombre de traductions simultanees (pool de workers async). +# Plage : 1-20. Defaut : 4 CONCURRENT_TRANSLATIONS=4 + +# Taille maximale d'un bloc de traduction en tokens. +# Plage : 500-5000. Defaut : 4000 +MAX_TOKENS_PER_BLOCK=4000 + +# Longueur maximale du contexte du modele en tokens (input + output). +# Plage : >= 1024. Defaut : 32768 +MAX_MODEL_CONTEXT_LENGTH=32768 + +# Marge de securite reservee pour la completion (tokens). +# Plage : >= 0. Defaut : 200 +BUFFER_TOKENS=200 + +# Nombre max de tentatives par bloc en cas d'echec API. +# Plage : 1-10. Defaut : 5 MAX_RETRIES=5 + +# Delai entre tentatives (secondes). +# Plage : 1.0-60.0. Defaut : 5.0 RETRY_DELAY=5.0 -MAX_TOKENS_PER_BLOCK=4000 -# Mode debug (optionnel) + +# ============================================================================= +# Avance / debug (rarement necessaire) +# ============================================================================= + +# Chemin de base vers le projet. Le script auto-detecte la racine en remontant +# jusqu'a un dossier contenant docs/ et scripts/. A definir uniquement si +# l'auto-detection echoue. Defaut : "." +# DOC_BASE_PATH=../.. + +# Active le mode local (skip la verification de CLOUDTEMPLE_API_KEY). +# Utile pour tests offline. Defaut : non defini. # TRANSLATION_LOCAL_MODE=true From 033ec4460301894062738951469ee8d0a75e4580 Mon Sep 17 00:00:00 2001 From: Alexandre LEPETIT <10155402+aelttil@users.noreply.github.com> Date: Fri, 12 Jun 2026 15:07:04 +0200 Subject: [PATCH 15/15] Add files via upload --- static/mail/console_s3_hoststyle.png | Bin 0 -> 219537 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 static/mail/console_s3_hoststyle.png diff --git a/static/mail/console_s3_hoststyle.png b/static/mail/console_s3_hoststyle.png new file mode 100644 index 0000000000000000000000000000000000000000..4557252da3aab88b3197c38da6242be8885a01ee GIT binary patch literal 219537 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

      )x<{7Ayj_ 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%0DT_nSQpGVp?pW$Kv@Zde1KT_igFv(_*^4K88G&Q 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%0Dq{P7tRqo~eU}Q%gH}8BMyUd^?Qx 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 Nr)7A(

      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ʻTC*{GziX=r)w9c( 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 diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/k10dashboard.png b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/k10dashboard.png deleted file mode 100644 index d836a1536129b67fcf461f9bd7bbd85726adb041..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153879 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 z 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�qlGZm^ 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 iXLGgi5t$cuYOCGIIj54_}X z=L_S}Heh`*SNR0x-skio|E$t#?(K78eoFijZ+pP)IO&#$K;_cWeYoMn7oAf7elytCAoE*Qz-*MaAeO9kF|F6+FJ2^!O<#6iUL4s}9FJmQ zN8mr-0iV@&HP#8vOipUS$`!Tca~+(V0*VKN`Azv}{_#0wz~?p(H!)KbrdL>bSb3dx zaFfO0`p^tUszwrtr!0moR4LkX9;=WTlcnC{l|_ETn){AFLGa_|mUd1snb^E2w9|U8 zannh_o{AsqSiu(!^yCQ#q@7)>-orBvIYd4oB`r{DP$N_Gsx0~b2#Odyl1g+|6!yZF z;`x`kW36bzD{k9)+mqHH_BN7e~X`;v%WpAVwb(Uj$|3I@ot#@S{T z^4W3d8BkoFIP^v`vGW$lP*KRq4dx2qlfarp!E<@^=-evJJ+#(8#9M`tG` zaLM|{t}{SaOM7YXc}-Kyjq|-(2_LLfvT%Fm_jtyBzB7+T-DWDVl}zyAplVK5*b^Nf z%)770J4;>bbd&muZ*%KM!sgw${LUSQ8hW;G*~vJ~XtsRsq7^B<{;tAl5)7K0J_AT- zS)b^1i+NO>EzbCI0Sr)KwHA-u8%zCleDx!`jFAml+w4h$ue+mrFtZ#twGQ{ZH-tNn&+4pH*AqsK1qjjuenA5IJCeeS zOWFB>a?Jqf*LesllgA%i9DV@+kBZ}!artLO0LG!?6&bwk{ot#U_RJGaij;E$egBc> zv&QF6BaT_i8a1YblPgdZ_qMvuUE9Zm&!5Mv*qV1sE9y}J-e(wHqq#*GK<=PCI!sy> ztxq`0G4hWl%YXLW9950)c2+%Zc6(#fpdo7(OLopoSP^n7o2&j5w^v^~`Z2TIs%7Mv z($ZE}kG>u(2t&^o?y%Ll?tNkJv&Z@1VjY@A4Yy|Hm6jfy!<23G=3{vYcsXjAznoaI zMazOCOYDMbz#%{)p-CFdoY`0Xyy){qn=L6Dunh&@T`~`E?^Qde@Zrlr>xfGL8vPu% zvdeo56q^8FKeu5Uo&lx+ig6v8MdbI^+5$riM8Mn7KuC;A_;>+SnW8|30GJ~SodkRo zshY!kwbtTEa3?_gzhPso8Ff;1z36K#n>xJ$Jt@_gG1EN*K&wVE=v@1$F^rn`GIwTh z;z@^Ht!GuDbg`7D)L=Tj4J@KA3FFTnZqRM>pI=UWIfU;7^ylI!CdFi=O}D@4jE>jH zzXnKm$J>(JC5#!Rv*viw;uS~y0pI-?GiH*qd>uFdilcPm5(*?XHYnC{(CXbzMbxB$sf?Oiayv(DXsC+k58ax{L+ur!_!L(ZVR(i z`}6;>_trsK|KHmn2m&GqNJ@t&1|{7}DqSL-BHi5}DJdeL(jWrTUD5&~QUW(!(%oHq zZa=@zcYiz2?(DO(vw!T&<2a5Y-0yhRb#T89f3nd*4()ih0di>HzEBML^ZU_J zxfyPRT5$TGcNp_83(KQ;UcxvzkkdTZ8d5+Mx(vN8w4s=rTWB%;)_dpY&j*yqFb9wKF$R0HI=NU}*ycoGY{C`no^1tJ&VLJTIpSTV8OgM3ok zj8S{^$E2_eFZW>+o9KmtS|maH*f_ypjCG~L2}^d5`-S=@U+D8)pwHZ5^U zKRPSXwFb;_yAx%C>H|^J!i4l7E(&ao+vf!{kOQjF@@t<5vv|mC7qm;bJ}9XwhkpHP zo?!MW`|vEmB8-%fXbBHA1eQ~EH12iOn)x>b4k%5Fx}U0?9B%l*@IsJD2E5liajbf! zn?SRe*!0jBr_!F%0$J(R*k|%}kL=W#ps+|$@pQiLA}kU41_vt+)7{sF7z9Yq-7E9z zco0F1H=ku#9T^G=j`u+|HMix+oAJ@|)0Lr&nu-eRU1y7i7Y+G?LSa-MHy&q|3WgLk`RMep_`wrmr|an0}STrW0Wq~6;Y!L=sUFe+xeee)T|;*xn1`Cx%_&Dg=jDL(n{ z?oZyu_IV2Q(Wwv~LPYho<6!EyH@5%}-m92v;Hv;)%Fvba#q;1OE()TWo5+7kOS7J8 zJ9+6l80#166>c!yd(ggd9t^1kB*C?>g4fA_~O0`6>y!*TW!#iK}8Y*7dU^uv8Q^ zP*h1vS8|S&qy=WbCAX1&!{k%Bp6`7}$lMy_AwGXG;XZchkKH-g5kF*!9I zKJ)js?0YL;@H{oo@=#NKP6v=5ra<-aF=UkW!w|16GIdZR!7fHm<23H zJ&i7#mS$!mt=apAzj@)=?><}?2ey3ema9dJ5_uPLPq_9WkMC3lfm;A+=l%XI=l`nSCx|Jk%z~br@OaE+vs^_EC2?6yn~??1^^n*_Xb6*iyi5TlLzEUqJ1ADP6cD5+#f7H+U3 z&i~eq1f`~bC2wHX3B-k|!Pz>ZDdSD*p87)z60U14>hVuR=I83(}sCn-Kw-Y z^SqB63vdAWMN-NgUT$nTL_*o9u6S%36{KRol9?Hh_ z?7jB44{A(r@pjB(Sxsa9A$bg|C}2Jc(@br&AMGTi;;@5~f2gJk>UODr!O1?*4ZS&#|5e zYHauyl|X>uP`$r;{VO!*b&-IjQ4@lt&0tW8z*1?hbh5~sD#Lv+q`MSlNH5SdF@Xef z(T*pSae3-S%>6YIX#!4I7WibQ^Rp3aYTMt3$j|a8BMaR%P`4l)$Ri{vBV-<*PFG-kwPHP3TpBCIl*FxTs<{yZ zFADfT+mki7a0)I;2x3smSp}CU2_nnDP{e-E(M3$0p+68gg`j}bwUsKoMvpBovM zBR*_Ky`@_5quv#iokMx;U#y(YE%k`v-=|9rvApekX}Ufe0ZYNKt1Tb$U1S4=Jj%Zx z<*$#7^`j{z@xwXI!?bvENKG~!_3esG(sF-)h5Vf);V@yL+L1h~z|m-vj+|R^$$*Ns z(%Y}YwEu<^8j4H|t$I5Fi0h?$NCXUgS;cDaTjvj+o#>#ev3=J`Fg=B#<+9NV6ujN^ z7W>{B32wf8RLGX%k*mjGg&x(#nMGaZc~E7rOI`E;p z?-dD0qtq;6FJlQIY#A$RRV6c^ETw#ibCcjV3zi?M zx2>HLBqBZ5#!IIbI5HgCZ)|Pvl(~7sB?x8=e*EleDS5tHR8WBzwnpZ+^6ArP$tE@= zai%Mt@KRDl5nJ#Wwom$F!JcRmNO%S9;d*6i5tazEX3*d&kI`y(9T;C#?N%gA&#qsM z8ok))8I0Rm!6$hQkG^Hm-}Zab;_?EnAr{|FHM6jwS-9?0tXnFX(K>G9BW|yWVVKU( zV~Xdrv$MJ)_kzhh#pm2a`S3U<{)O)wo+zpIQFk34O^f+Y5y(XbW5n*N55pLT%%iRr zuO!Mm6LWIHb$497k|ZCMvHb@0Q^f}(+Eo=lf8IZCb|RSR-6sj5yBQ}>u7C887Jps2IhWCY0+V7G^-7D?qaaZevwyyNSb55dBd zaJH_WSKm)IQS_y8tpuGyKjyzEN7RHq2xe6`@=BXMz;inDe4939Ik`+BHs z&dwWp0*(xI&jQYUsG=j_8`j1>@Oy-g-*(aeL@Gd$zZ}mw&k8O75y-)xm@WTJJtruC z_iuqF@_&Qdqt*ZU332hc|CjE4H|YY36h7xZfR)>+mhTUGtZ7s)yLKxc&B{#Um-Nef zeBo4l07362oG&#n!*>B%BV&J=dVc4h`%J$~Y_Pfw@klE$*J6LwLO!uDP?p0rXfZZP zzO2HDe#H#Ih8Kqo`fzNb`2IK1)v8nJt64Rq7{F_%K@))JWRei+v#jn>8+)>mYPYA) zWH4D~+@0Ko>W@yOEXT@wya{#Efm=01B)UPiw_-}%rxZrQ2tNC9ZvTkQ-#be8DPAQ3 z(+vw&g!SmFl(WJY%4#=Iu<&sGRPP5uk}BC}#{hPoU&0S`#18g*AfoEm^C8el=O3AK zP-U*uH3Gbl{`-_b#q1gxTignzV@G;=_WXjhn19neGq`o}cXThyN=z+a5(V>VwA`0ri`T;k24+HfLZKgVM6HoLIR>` z)AA`o3qW;7Y!uH%)xIQ>#lgQ)dqDMlVci3gwJjYT*Sy@FTR&^v8J3k0B#-xY{j5>rWuLm$8^IA|%D3t@mB>eiD3 zNTQ2=+FR>^b7#t(0f-Ht6Q_gq;`NtOFNTYZr80Vc>H@I>C!K$3M-Ie&Sk@FFS=7}u zCOuiSFuMWNH0=yhq$=Or-sz8mvoXKJ9@Q5#BI?Dj&~~sxQBVN%Z8ho;&iqL?FT0Sd z-g-fpAH4A~d{U@p^mG156)}cC0fs*+ z+%hUkbQ1rxp8)d^I?D4wE;&R}jS&$M$;_MJ4G9gmz^?uD19!E&5nl+CASaJQ-AhW? zhSMHD#rhqlN8XTQwbc(@nS#n~*A9g+coWCKI{&9|VM zg=-QY%GMB5HIEs=&0%fr2HGSbet;U2#^)k%%$hPxYNHknl7vXbEqs1ZgAE08I(ye! zZ8fXl8G-V3X}lN>&_SxLee>^F3&jk?bgT(YdsVa;GKp{=Y}8k3!3o0PuKoE1Qhi8k zz%^P+qeOfGqs?eblf%+C=r z*RK{uW~VHU5s~6Zx)z}BK=?yhw`H?%N_VuxIeX9p_$K5&;Fkzs;Aucv{y4HUmMZ{X zznv`TkE>NNyN$WoBot%q7oUZxmNyZy)vFI{P=6Mo7rZz+lU^lBy$pXmxwmMg}}enCH3O$>;?n8v9$Q+>Qf>t2b%k^(1@1fkDkp z21HU+E|jQ9PJ-3@~%YVC~* z5hI?DNarqgn|O0q3cTYDckmf9ni1Eull*g1ImNpB|!Yu zl;V@$j^?899eMAvFHI~b>nYqbP-oVeo7Rzg_^;!a;{wOr<3h_M0YPPAPitvEzj`^d zAD`ToPuQluDy}p39);HtmU1^E&xqbSpDlWa*|O{L$X(mcBPCeBwoXbj%k9*rj^E#U zB?;NDi6)f~nT|+js#pB{-BWiKo|)45b$!wOyEq-N?EuZ&X7R?Y`t<_Ju8Z1^(SA05 zHM>uG5v*lXHg1DVvTK*&WCY{25#mkwL(c7wsV6-I`n`-_31N(p#}rcXZ9a@I=(+ha zAUNo8;n3{j)MWtVa|I8-ivi@JMaHGlpNvILX%DLBRM$pbu!L%yn=Z}A+Gd7lfBfu_ zh|iV>z3>r))}TsoJ^t9v?!CvRI;6g$DXVId{a!jzMqa{64i^U2PtC;b%kkAf*S-2$ zTL4?l{rzb01ft@uOvp6Y?0Vo%DE7DG6$df_d((_2uD{5}-gC%`-$2FPc@=QDJ}}t< zf#?jpO!&7n_)vTS79n*BkhlZaBw9ec`~gA0a=mx*d4mo_Fc{xpVQ=}@COm*V>D$bnrn818K~ zDGqoy_5AD*gQLKjoaZKx{d4ww0G7~S#9o(Aw)S36Z^NRq<=o)4UYf#O_a765yMdh% z5{`B(d|jUkS=go_E$?iFwo2914D0NECdUpoHYy72%~I`KiXXb}z$pj`*3v~45M`w9 ztD_=?2$gr?D%z^|k+e9xw%%n&c;Eh#8BHHXJzSJ>*i0YOd^R!8_`1^U{sa~Pp2!pe zsU>-{hR(zD0zOcya>y)iT=Upft6`1*0a2CNIMeEn*tqv$QI(`%H1+s?Y%|z$z;;JO zq$ycd_Wr-PdUyq}4V|CviAxwWLLL-&28c=tfSCqe1pHj%)X+^+D``bv5u|DaRP>NW zlqKV!%(a}JR z2%8a9aBNOPJJmRZ!X}`#X*DZ%0J*mM3JVb|ErtOhM#2sJF_3zhRXeS()fe{}nW+e7(zXuve6?AmDp{hLm|3OdB1SLR9y2&` zbADGgks$Op^7Z%yaaMO?smS}mw|?i-n?r2{muBA@?jq-Ty3dyep%CIFn~$LZ zqpaD=Ip6t-vmiQ^`g0RmBa$xyf5{6wj)d$16rUI^NTnFT2H$JWybPig0Lm@xAlTYC z+#a`4eEu94Dm{esyr?%exGx1Zk;FZhy{A^?>x9)n)+6|STRS_L^0i!YX^M@5&y97i zuPU25@xy^-2x51{s`q~WArzyamP`8okA!}Pp6hdIMkHbOtNNvBnI>?nsTT1}WjouF znvx_)wjl0BDnz2I!n(;DiuYK@8^C~h zdyns(3bT#FE)cfAa#+XKcuWvwl0zqUoQG3x9{wKn#%HDwY>f+A6HR_R!5+oH(7$-C zS7f_w4?)tYSgJ$2EfG;H?E?WITyD{=zs3iKUOt&Gc>LQHEV^Fq#*%tj8F^*TEp7FHq=xreH0uFv`7GwKwb(8jT2BKs6q6OB)zR!SP&BLS=**6aXHDEvBL_x z2NK(U=JSz0h;L2@yGqyTpo_XRTl?49R6@?>^Q0sO`ct|e4z~q9oOdUX33(QEg%Ekn z69b#fI*Xj@a1xMU7#EgB9n1T+G}FuiX4@n;1j zBUU*d4-|Agzl?APP?@u=v30l`_=wZtAKU??R@n5 zhtodUv#DK$G^h12x;0{w*v9?|G_=$G62!=kOkOFZIUnDT0V1-;J0{}fTtZ&gJLCK+ z%29=xRgTL3>pz*s^K1#ST?a@49Vi`^9G@!Fv0hV{@LlD6e-Hl?ms;y54>LPTgx3jd>}xpRkj$9S9dabsr(18V z!&I*6&$0L}&Bl;ORKl1T2~hLZFkyp}8*@&JjjG)5vWU25Mj8N91}TpKvp-HVfAQUVX~ompR1{Y?H^Yf9 z>ktY+h|ct|WFX=T=L;6#VDINXTt)fV_3HcG@AK#EHq&8!xn702$F$rs88pwKV~QYs02K^f-6Ze(Y`CgStt6(z@hQ z@O2Zu3c+&(0HP*9CdiT`4Aww=Af}Ks7>E&yHx(aB|NM!sQtNvJEDyu-o(A%C7sZ;J zCpFxSoLK75)hg|$Od`gHWw-iCHJ$@E|8p4*e-d?fH||(Q-F2sm0Zo&h(ZP|h?JZk4 zj+G!Kao65rXd`#3hYO(xkgkd;7IE5D=+Xch$;Zz$fW6|q0%HpxEN`j=&0yVsX6Q@# z`EvfsNw8BwrIvp?=_<`bD~9e-ZXk=owho%Ot&F-bIuo8oNHRe1j+ZYV#uA;hhBrw6 zm%t|fhrs3`$N78I(zmK`0sF!PQW$=$+jzJ}~mI0YXL1nqE}O3zjNGjkEhTs*`wY@Z+9OXrv1#G0I2AWbdG zM$gxDGn)BBjAYv&rnS9Hs?=&YLing?QvrvREl&kWfS{?kg60J(kJSFpT$_j>WIw^WhQU*fDA*>%7tdC*1rzF>lJdAf$N8pEzPd>wHz2iD-$k4>jl3 zN2EFsVKo^kR&2MmV=E=@YULs@oFu^yFoFcMJmF+rEex>&gADD^l>#Xc^!;xZV|85paaM&z+Q5-jhQI&Iu zP%pfPi=2?J&<`SmKR4gu6OP=n;I?Z0S)QP%s{Ojwrr{RAM-*R35pG#ckUto*M%Ez_ zcnA`lyB{_J;)5`g;=K{o{~3>!P)SHF6z6-;wf6$%9#qij57x*b9}KCBfMHBkX}^I0 zxtYEMTo{zYicln1yQavLsLx4m$H{^Ufyn54fYB1b zq(ETEwM4@o5ZEld;89Rv^DJQ6EmnUmJu~y23NK~wUXb&c?u5zBo<&??sJ8S za*V4-us`yY0FHo+ERsdp05-bD2oIS|q-O6^yiZXt^zQG$N*N`-)$o~sA|(U}g+JAI zX-YIKAtwOkNI(L&XW)$+#S|qz#(e2{YmX zG=kq9Im^Qp4y?$v{z3V#`5;&mMD||;Ta4U6Bx4dH^YnF-zAun~=>jg_^9dz0oF34e zuIKqS7TYbkgN_$e|Bt(h=?u}v;a>s225`vr)wO}&MG6=wszcd@%PR-};W&p2 zEbt%j30>E6rUB_v=~TeE6rt_3db-ymPED$cHQ|7{y@#iA|9<-(jh&9adfVs_GkLh= zsT|uUSvGR=FGKVBWAXnr5Fr;H@QIyDNUsQ}sHcXixvMC7K+jzASdjqBv{s7jhk*R0 z!yX~&??l04H03A8_L0&gwL6WWSiR1g0c;B?z3*i;ForPZ9NN&K11 z71RA)-B8f|H|`cHR33liUL}N-LgO=*VC_5ppWkG>7#f)FXC-CJ{-^2NC6>p*di&d% zj6U|S4}_2R9LOj>o{J7mO?sWOJANl~3||QaW2(}Rv5qIdG|rB8MF$23hSzo#oWP;& ztl06Yw_XWl1FJ?Pu}{9(_%LPVEgpH>m8geTT~rD$$EqWIBJfZur|NT9m=>VK25D%No@OBP?OkncuB=B3r#&#)D2b zs&ENysPSHq5})j?1&wUhzX8(npcVxQjg>TYt^do1F{RRF3U&Onv4!d0z4EDmLyc**VyZl5zvw6~9cc6PFFcG_$qC<K3bB^YRrT{J|DJuF3c^sbSz8386#@<`$!$mtieDZ+CCXvtO#$Ea3`mg7W zQ_nI64KJG*pnaJ55R1~%R3*^m=2w&C@!ovie)4E26#vTAs}e7?6)w$Qa+q`{nx(kr zgTNu9s*KWr&I&9vP*4C7zwgF|_}c1x+hP{Y#H7<1;NL(v)$_hE~S%RSF z0--nx>P0;?`wEFr_#T|%b9D-lk54uo3_Jm-R-Zt^9tkqRz5tDj%bYSaqP;C&ApaQh zF`&sFs0u_OoX+ywTmtlA9^1-T?-ABLFP2#3MYM2NSIq{ zy2gr)dQjiLk4;k%=S7;$81v-TAmuwKfz2Hdz{V~7_3^1uwJrcF`QQy{OO$$XC^U{bEyukMC-!@DUl;~iNOtI3ZT|=^FX18<`PVUq=tzx_I@E{ZB z=#?!xF0!w+);C{hDJii>w$il!24}!Bo~%EU9vjUaF?Wl%hCr(BNd|RkET`X=Z+#pt zb|9s$y3_@=vS_BV!C4ji(qujbMoZ6tA_o%9bm)&tONu=Q(>>2|^x+v#3{GP8bcaD4kXGBRB5K@-_}_m8JNHc@x? z*4~zBZ;z^)+Ki|Deg1%8dj78*kR)fgUBwK7ul)6A8GX~XmXrrWwe4#8o=~R;>jT{2 zP{F6y*$RpM6S`P)geIehT`74z(XZW=hiY21$>d~Sx08n;LsnE%^ZTq~@-|-2H?mq-S@7+Xk0;oc7e#YUC3Tah(6J~3dzl%1vXp3M^kWbiEy~Y zi2_buXkQm`nXrT5t+OZKzE1(BsbsSCtHOy2@)eQbM#R$e;F9NRQhF`;Fuvbk931+> z{ox`*Ef@AnKbnS1jK1h-(({|poUdTQgUxWyHNYiQa`S>``jo~yK;FcS!o!H+(@It= zby$lKo?t)&B2VIQ@|@jqjtm6%++-Taj~SYBy{=PpC@KCDXQO`e$*R!CcsWI-Tn*uN zdz8^uky6#6Uob^@>et#rn)*|6xZqpexq6m6%X9a}xtHaU$Jz&KudVJpyu2Q~^2O7o z7=^w%7awTA&^%0G^TggBI{<$etW&MOInnb=I!UMwB_G)yWc8YtKkfO^ScfMZ5Rp)! z57$}h%M$tX=MQsJwG@q%TlIW0w0jdyIc2Ol+=xQHm8xUz1Ogucm-RMqR{Y*PMUv)n zNr4Y-BA>ZThB++u@GuRv!SepIoRu5^idJiRmH~4vUDxI3U`UHuSbu@R@3I^TZNzRs zt2C%-m34CWt#b2+$hL@u&u0HJN}Rl1)X*Dxn@6n#~C! ziOjs%`3lDnFcCAwbKICYEN_NNRl%*$^TcGNsKe zslo8TYehw=k(3y=`73*?xew-v{-0y+DrsvQ;woE>f4c>TRbW(n9;1CN>(X=;9^tA*yqCZeMh02++*OKsnp%6lF>z=5@DaeHYpO2O2?ajdNVK zw9|B(v(0x;Oi=X*?TP^ZRQ$~5C)@`6?1YA^4?=*~sp}w2@1>2Gk;&hx7E_8`p3e9uk{xTvPzz$haM` z)L68_HzsNgHVdqfjXbB9m(3iKPY#VQEm@w!iq-YrcM{xd^g?zjni#80%_}2vSoFE- z--JSkzTkDtC7;9}A-AeFJDwwccF-9GomhfE%oe=G=6Sg9nfQ!9GCu)9$HH=>)_GIH zw$}N`@}PZbvX0_lZ9M2GBe=KJ1TSHgSX6)G8!Lg&883JPNA%zQv;9+sb=p7b)$HEK zQiN~Imr?#=qfW`h5Rp*fI*&hKGFtAsey{EcUQ7p$*?M*on1Xq3_1*ozW{o3%hq6Ts zZyXa;TW0+xC@2T(qe1Y2>;`AN-}Vn==N3uzm)Y18!PC}U}u{mN$DB`S1wT`Lt3q(cX2tf;FN2}kENxTb+*9?a-M zR>rSE_Kw$s~Dm-Y^iy_N?t0$0=a)b7oThi zoD^OUl;Kp>)&i2l1PfqVIN-kt3cmfA)UQwe85D)k(gJLNuc{SJ1$bfJ$VlI5F4wDS zk2LMC;kt5mjt{FCZjY(33V$izC}B$Z&i*bbaeQiaHW@ez)AN^bG>- zQVEFs0^TaGI_*kYwdYQ_q0&DUm7YhWzk9T_U$N`WQL^(kdBm3aA%q^VAv8@@&R`;1 zhYR0uK_2t;A#+@83?}T$dhvNh7_D*nnwSP8+{6NnQ>3s{A|NlefjY&VU*tHi`Rizl z1I*yYOb6;11;@479Urq|p?KVAP5aum(}aWaoXdQTj|dZ0f5}&O%hsWMCo-%9im<7uZacYShGpUVfjHbRsgx1;xAv`21IyrupBr&txp*yaswJD zBKKGZ20~FRN!oo)$n&V&kF8p6y9T|6 z#f_hH!RaHPBpgA|64cz)h0DUi0)1nM;48QhUuKv>Wt3d>c;v{UgzMa&fW!Lj+hnln zIV-Hk5c-@0^U}|rNxYIINd|Lu7pB(6~b*kXNyDiXqcahnTree)~ylOKgCkhGc!o}1N0geUq$5G9WC{d zOelCkkDaHy(E;r=Ug)~Ix`@^8PF8Ve`IbJn$gf}u$hFEd6P5X($YknC*|t?gflfNG z*ibNaEv7F3EjUu0)K|oIi%IrQshp6rlbspcR_nw>*J$O_&&rQcUcr$_q4-<}m&c{@ zx(vy)%&on>fF}I_%?v+qKtL{(m;~500=}JH`7!?p{ph&Klr!yX4LP#w>Glx+S^Z1C zxI%6J^glO0P-wUyYrP;~vi`_M0tFZh0KzG_ZCY|l7lAqg9r3l&zc*yKT~gx#B}sjc z$h$7?#l28%w*1=JQ1avgI376v;1DQ5DQnVy{9FzoqRhR- zM5vn}1@jF;q?Se8HQOsrCLM%?NcFGFl;_|H$9g#_{%@8a!nw~O(*3r*Q|fv&DUhnj zYtRwOb>!3$+Iiz;b!`oDZJ_v0U`C~Vm5lgG&gD!ah%tasG_IqwcJNP@)*a4%_EaAc z%h3|hx}sitb9Z`XAt>a=3~s%t87Db(`ha#bn{??8q{u#7FJJowr zBRGokiJTm6erUX`Iyd&cSQn#}aOgp<$tP4(}MMCf&`P z0Fl->QCKIrVj>YKvz!u;eg&WIcdC$CZikF=dyRwS1ZGS#t ze%P-lY8Qsz9KX~0Oj(Xyed22ZCyde==v>}`PYE7&Yv6nU2%|7?*P_O(lYPf*stGEm z>=~?+*+{H3^_ZjrOaHtZin5M`iaqGE4IY;1;HWCm+KLPnhuo(U(9X_nJ0oU6PJGJD zldhMNET;<&7ovsK6Sn`+hRKQ~7-Fkp&;@~E29ALGEnHVV!zt{UxkvIyA=67&M{ z{-bmC*XxS~zPy=HqqY2VX*Ntuo-y-=_n z6*2k!pfHz=L3*=p9qg1{xVmYkZ*)aVXD$s2Vc68~P$DI6plny=dPG%}xq?|zu^}9g zUyFx|qmRtV^*M2RF5!R9%3|Pna9yjyy5%jM|IAF^o{wM;vbJdsHX>;QqtyN#z)w^5)oQWq#%4j2K|xyN;e2~;gS;*kE-pI#^<$3iZ}MNcB5$b4Wf~QGJt`U5PF=siN?P>^Mhfx)y^Q=fo1Q!Yy+1i| zY+QLR)R5B#+yc5DY)owJl$u&4uEt8cjT~kv@-~5|#o+V7-ob)gW7tBJlu+;91r=Oe z>k14UurQ$8@Y~tJMjv3=(X9mUM38+O*4+V-8BsYy?WYXooawPIT(@t^oTYA1=b8^h zOlEkIzUtDOaP?Mj;USZ|qdHJZESA&RSGS6jqhgYuwEYT#Ws?Xe!bfK)&0$3Gif&wN2KNW$90euT+Fg| zdDgp`j#RNECsP9?>MgO;xvGxbz1~@DRA*h02qT$~*Ly)o;`}bID?w*plv5#DP&G$2 zdR@TTptcP^7n}HJOyaxdQK!{wSWNQK^np3V>M=`8WZYI4{-S}{x;(VC$-~3yJM*2L zk<1C#MjH|oM3SGTiSqfZ9G63zPsMa`l+y#6M(YN9J2&A+*e<2FSQQF$gRHOdxN+2G zH;5FI8dc-3fA9$}yVlr~EFh)iH%H*&v-hqv*5d4?S8MZ=i4= zs>uhYbUXJ^dGZDX?XT`Oo*&LEFF&)lf7JJJawy{Hn7HXxIRQ0w@-}%38?W~t^otAc z7v~;REE4DE)vmEUjP&ac)gxB-l;}}PN0NFo+U>nUme#>lN>abe+||{!$Yay{A<1=b z3GCU;O({iNtR_0CkUFCF4wV`7t2Et@ich-$)~GV+#RYu64QYwaH!)emF4OokCf&+k zUtZgpv)ikBs7@<#^*YHMKy-NN%HK?t#>dAW>85;m|Gk2$me)o2UH0`pN?sz_mji*8 zR=dAOu+$256nbayo8<#bFB|D1DFyrr3t1;8lW%RZ^NxAo(CyzRtTlP)bF|V)dQbTS zeIR!6r9NBmYdia}RyE%nMvG&}?$?lm!nb4D`4ZfCp;hA3S@jm9JXfVqjSJ;x9CoTxnB*nzS;w1| z=lA={41`1@sZBP9!meTSfx?DI0dGkx!aP=^&YN)dZkPVDLW4b@@Fe@4L-JqNuedEQ z!nR{xvAHc=qWIU>xxZ!IjJ?Ztp|kApa$>5iexdPi>t*fv_4O_<=1;|@9WF%olmi|a z7vOB$Bg$7>&dQx0SomlKw;DE?m)kEX;x95Vu;ZXL&`U5WedE1O%Cg{hx&bxVDg#p~ zhOMF7v!St^mc6u{TjdD^-Y1-DVf!?AG>)$xeOx+!s^G0v=_i-KV^liA>$XFb(v>KY z6-mXUnoSEc;Y|o{ds?c#B{#+0=H?^AjTah0J#HQzgbv&E(a`BEA7M$__57>qmsk3@ zuYM)AX3E4DY34t?*zkbVi|Od+?dSe2V>vow+=+s>x=ZFCJe8AUgds@j`XuLn;&e}? zhO;%4B-3s-=+~JiH+s zd@t_m%IjP!G{)AFE)n)SM@#^D?d5(Gxb|6vHI;zN#uqqst4A|(?dPS@F%Z+GJtl+{ z6k&tr#vO+;Z^FVdp3O?~oL3XwR}GP;8e=~V?cSFDfAi5l*3MN#o7!HoXIZT@(Cz7w#E zzfrq_Vx76MIVR$VDIqmA_51r8uRni&c@|34HZ~^ExthRb{S+4Bs?XG~Q74LPG6@+y z8k67ZK{$0lgY&1Sp@M+&rt}+MLr${++Wf2-OgRd!RPB%8L`KuSM@`s)zvyfd&Qj!XD15Lc@L1U%n^7h%)onKD zcGhR@{qu2^G|J}>Ui^{$4yxShtGR=cT`SKWoGy>0!nKKr+{e{VcKK(2&$}+(H|pBd ziYRZeabn?S(TU`VyZF|Pg)Ow9&G;AHU8ZNWM^bcY3Y$JWH>fr!9eMPVAtOE9I%<#m zU~R+#Mzn$3-Y>@C7VR7>z&z`=95=4o{!yV%h}orFR>wE zd9=c1ZoW2I*IqQXE-5Pdx^J^1D}2xbLC&4frQTqW(dW`g%W&{JGknTxYnm=&jG-=~ z-=v4!xpsn=nA*B*y|*=6vARa7UYRSyaPU)GSc@LJp`qa;T?ekhy6p;f2Lx%*pt)1Q zPs7v5B*}KrbQ9ly!GpZ!uM@+_=)^=zvLFMvX``8RM#(x!xxaTiL9=dze7fzkx1fwjNN4?p~85P@#wULtI->bt9Q&{Nen#e?E7&2ZZok+HR<%-btIw4P!ihTJn zeml7*vEx9~q_BbSBxuv(JSakPex*EoC-$rH@!{&%!Jw{J9P$Byx1xmD8?&|R;*?6| zy^MZ&(7gOc!{Fs{*V}TSVCV;vUe2e#mwRfOZMXcJ(P+-XhU~fd0Qc9clNR9#TgBUh zXII-6OBcyV!dl_=wS7C*qwqWAW+Ue`vtFC1oKmm!_J{ZRq^&iqI4Jty@Wg)dEWE+& zR348a;qr(h<2-+=h~4Tq?ADmWlH%LG^S<`*t^TaibFYFICZFr#QT>y-p}ktnx=q|g zHTtU)ZBbD%4unIwQ`Y4K6B85Rwf#n%9c7l*I1EHca2Z_-2OOIlYzLZ|%57JlCkwhUy{NFPNHeFW z|8ru`_5G`Q0jJf5MR?RFz!RHFNW2>yPyAEE%ZaGMfy+R zWL~g+%H&*2l{@%zGl6?|mo>MlQht54+v)*5eZk!q!G!;`+n6J1VLNi#Cl?0idHJB= zSvY;yHOtAici70evkTJ#c2crt0_-2mx7msY{)H=Wk;^C8#dB&uBk*O;P5z;h#l^qR z-~0YAdrc6Zg)j3jEv}s``Vjeq@QjyC2@{bC2^7w?UpnI&daQZaYNsxOjhX)a!Q-e$ zwbe7r26q^_2CJoSw<{~F*!Be8t-t@DZ@>dcut8UB}6;Y=!1>I&@ovzMXQZfE^QdjK(bLV{6I%D+!QP|ZxF+aVIm_p2u9KR*>B z`tW$n+Ql_io-XcRqQ6Q|C`s{ud;<3I9;k4MYe4BuQtENm5 zx0k+8k~>(f`R@a3zYVSx0P*(R{(c+u<*Poa__>e2D*B7@-8+>ZDLte#HVT5{6F|{+ zhyB-xgoIoN&=EE$ZEt_yZu<=Y=|3-+dfA3`O29ekH%^*|>`!p%F0@=0Xcb}x; z_>#aTwk`N~7Do%H&b&T;_DqfuIUQHxI%Dxy?LBWE?;cMch|B-`N%m14FX{Dk_5KjP ztDf*bw`cq=E&r?)@{ZO2sg>Wb1s(V2&zeN7|u(FNN65D`p4Eg6MgqgkL@_)O~{-BWKd~qM%%Zk6`j3<0o)wl3T_Rh}n3BF<(mYe6dq}+d3`W%UX+k#*w+L@h0t=D;` zw(xgpS?N1_-_1O~2?8bBKKIIA_xAM`YyD!)XVT9y?T?kQOa6UZ)}`ZE#nw}wY@$Pc zm?FP_Z?DS0_o}`<2Sg5jQSo;PqWiiB|7-oy+hf`v!#fwf2|0`IR-U<;jqdq?+lz+J zN_XO)pVheMI~0e6j2j$K;VkGYhQL4OdN0I+`N)XuTkbs&zmUTmkl(zI`C62hjOg`* zwM)UxXbRh7{7$xT%Kb+BSN0ssv_80D^{0L=A|D!;if7f&&hd~Jx5vCD593mTP+_=RwM3ZX?$8UxXQri+{!}30a?e z#}O}>e=9b>rx07G+_v~c)|<_$c%LC>YfYNz6h|cAE1LYHo($FG#2&L(m;lKHZwWtI zyjVoE#nEz(azM{=lNX^shqsZto4n`wx*>G-5R@6oZ3*5sjk4AN%LeTrFOkwoZMhi} zy)+XI!aKgHnc+uG38a&2kFUnOamc;HVeL;!B`G8`)*NZvo&V`ql>;7IrjM2EtwYfR z4vPVI>H0l-DzqDH9s|lZzIfrf6Je!#C+G?yQj2C?P!hFzYEv#ET~TiR3Fq7HBO z>}cdw>${lqu(H*7u`A2xnQWwsTzgZlUsbL0O;Rd(Lxt3*6rS!2o3|LJGuqZKnM_0! z$6Wop&r?$l10KJ<=Qzrk|HSnNd|w{JW1+t z*$zsL@_=I>Y6k9B6a^o1r{$JZ3<=w@OJ>${W#6=nQI)2yVy`D*!un}LgyCkM;dUzY zrl(CtoFSt>PT{h@tx-0Ph**34lRSDW45?+mgX3 zmd}=4a?KD`>9yg?xA8+q9O;8@!pAH`xy-xCYH#kg?Wg(G-m2WCaP`^QbQNR^Ajl8n zt)R<)_^7Unlu04j``oqY{l{!BmE$dKnLENt2_L4u7@tkGcpCd0|B2Wq@~J2NB2lVN zVeGJ$YldC9CLe(&a?|Y+E7{^bX{pvj3KLmlmE$b844vY#h9}(*b+)f_CnQnp@axN; z)}HZDz3fhq;nOdUuEtX-*R|Q*tD~-xvYPh4*D&inbv@j4J-BvcZjao>GjwonJB#{G zk?$>@cYGxa0wh+~816T{p4pHqmW*Qisv=>CkTYoxx~~3vRAnZvhkf`=D27|-o`Y(c z{#*#=y?KM~?P8PVP`%<2%e|%F)TJY9+RXOtzZ2D6%Jkdhw4Wt9u%q0|yRc*Av=*O; z5h-2y-aFob%;A&%IyX=kCut)>?b-6~9_0>$U!?gG~_4bS{y=3J0@G@T*F5edhHrOc#*A zM*gFsL90R2&ehmWq=5P{4f|S)!#o)!&OvgZUbVM~~m7V}BsjsnNDVO;{_!-6$ zF}Z?|$}5qeoiL?m+;E@cBum%)rw+z}kOE=^U%tF2^V57a^4=7DS$+)5rwyCz`A&k~AG&5#GDVUV!J02eZ00VH z^`=UlB~Xs{4Gi6yOE))d51)8YbR=S%r}7jr7b{^6*{qVw*ByGb?cb55@R@R$i;=W( zo^j_7BEuTiM*Rg$IYv7r6~F$b|>@_aR_-imj{{1`f$ zPmYF^%~P(H6lhMxJL8Q%@%aXks4bku$WFm8$ncT7Z=BK)Uy42T8V>Sv8VE{SKd-@4 z>$nO1`Z33p@vY8Td2pKpLk(Mu#%inFlLI<`@C6`ZO}E;G$>*m`Rv`E0mZ9_l$_x3d zKq(x|jGw2CqSaMQ)=Pb>g#-Z-Ko?zUbQj)B|3gvtZ!heozXs=;c*Ywke_kei!sPk2JlGCHEP zT6a>ND`u#FZ9Y)Bpg1tLT0k&w+S4vyuxpwx2dla~X)6O652ASqKb|SW%8}Mx z_H(Ctyvb5K7vhghM zN?yPMVu!aiGT2|b5cf{Lf;^->{ID|0p;IZWVfk>+NjIF6J&5^6 zjU;Ku1T|rz|933TXkU{@pq@Y7wT{g>j>>xZ_GWkcWYlEmqV7B_p};V%+rxL>{N#yf z>yO1Dj??(`C+~8Dla8USk(JNANwB|1#2)i$XUx=uk3Qtwn5kefVrqs982Smc^M4?? zE;q11izMZ6oWJnSzon|rEM9-*3wn=M^$APVH25`0UpQR-B1H0}=p8zkcyUklP&#PE zrr#5Xw7G56$5EX<*@B&vmi8!xtJK39opEnpt=B9o=FDhfc%EPfzmrEZ*XR$)*}ftU zQX0Q>q3*dyuK{Y_5*pRcN*|E3^Ysa(-`87uE(;z`o6!Z(pY6hrB2W zRT_MOT^Iou`_oHh3H}u_7hIhwE}~t`#yH1!o`v&WtKS=cry;@=OS%%?3u6m0a=hPZ z?FbB&@=Prly?eM-{karn;rlAhC)FZe9k2fQLQL}}K=RM@=*xS_JEOm;=>?`iG~Z)HLmQw}yBynmTJaoOfR!qQ-hP%yW_K@k^k-sKPI#g9 z>nEtXn)wV-LiY=W%BAnAQiE;sRN2t=E~1*UpcBIvldc)`9mW>+%sPi>@;jB5#j3hZ z@#F44w*vw}LnZhwQY9A3oqW(AS2AN$wUL~Wto84frn^-s23V`b# zOIC14n0f5yd8dX69M1Nyvx^R^9v_|s|I!&SZC*m#Ij)0rb|{bjEWy&R3SIZ_5Mucz z<&<1_!m*9%T=;5`=1+uf!$(zYHPa4{_RbF8>p~|{=Z#XgXILNc`L}zWA|k(zf9`K$ z;wCr=%D5V4zi>YBX5yHaeV_b8Rn1Nz`lbIGN-x69avuo#2pvoA*2@+tSz ze;L(j!g1? z+}}=rF3j|zaT%^oux_E!%$|A>C>#+0q>5!xyG!)Z3v9xiFiT#-|d?aF7xur)n+YZhCpO+`+Nt zTIj7IT#An6McrPCD0SGkd}Ie{?Jv+bx)d9)srRBq;flZZi&Za|!#lFruk~`1#xHMj zc6d(8Efei0F;#ZUA}2Q^)jH`^-y026UELmi=6%xgq^cD9{`KDed&tFjw63|G(xjYE zS2s)gRJF)@pK;gSrxtAoD7@(^8Hbk)K7I@ROk)wWq$j{)6h?aPTW;>RKD0sCq)OeZ z?4)M)wLpT~oh7BwsJT$6Y&&*s2fi zLCu*an5US733OgTn}QCr8%oWLbjz-6qd#fv=SX`78h#}H_T%p0eLdnR1Z;uYXvNni zr)oZqfg|pQh&ffgIKohkL)gE=&S&3$DFN`DZ%r1XGsO4g8aL z6_hGp@k${)p@k!HlH>F`WfsENasxtjJ}a2+Huq26nsi&2hH@wnM*u&QdVNYHR%NGp z+=(Y3HPOUs%qS*#%a&b#_}Egd*ko_L7wLzV%U{>F)~gGpRZ#5wNZSz&UHd-n%i}Xk zEN~LBR^Bl)tQLP(YTER9)Gq&E`Ik*ml#(Ut3@yeez$&6{@v-UFDP>zCWFH}=42Gz* zVP_Y)B}Jc}EQRJ=E+Qx1_m8pvIJo8JS^MLesHpTp^p;};7sAD8;VZ!a)%pHQs^h_L zf!s11f*|yLYt)jNfc-{L+js2c$Y_2R(x<`Zv!?mLo%F1?YF5bAF6;xi%~pz6bDMO5 z`fSXW2pV(V?ESueix46hsaKTQm8psZo4iQ!sW-6&(oc8(72L<5L7S+8PX{6pMM~;SZJw=ES{35C*jV67N>U%yEENfc30LrVRqq@$JiK(-h z=jMZyzd!;lEC%YA4`vy4ZasM!9V8EzJKY>95yVO6aP!YfjS)8vJf_~&o0A6`;M6B- zHTW!krofwEKA_-vI1|`Z))!eL$bo!fDCvd%79lfvAlKi^p;MjAjz*w7yxO8(6u9r8 z1=&)lE3^cV!F%4d?TKb)dx`B>QmE&gw8_Wn-5G4W4{g_fXJ5-Y`3>`FBQO1?;@#m8 z8m*t70+$dCR$GF<@LlSV?ztj{3(kEIL5JmDcYKl73F>aq>R*RYmroA{>@VUt$vDY_ z8SU|Ks&s#OI9Wn@-_MWj%_sLTPaMF_Idoz`Q{}94;#DirJ~-Io&jyB9O#7~mC~H0K zWeTs;HkYrBJ>uM;D`is;7al}irpPB{Q z8<;X4J6Z!br)Y(Pq&e?yGtiCRHmsl}N*)j^x0Ud{*Yxmbli#5dksgUecLTjG-YgAE^KAZaWz@aW1H_7^iD6 zZGE$~QBiXocI;e0yfd4bV)@v3$!gaou{vbGiqQnFo%fCtd{$!E@neGoQMN)#%f(;U z^!KK=z1jd*^pq5CAE!S@I1VPAp4EiQ-RYP_+qPr@T^JiD>2G|v3e zM3*7tHf#iz7MYTHEo%6K>nl#K@zZBNjrt$N*w3lCpCwsn{2|mN&Sg1YO*7>+jao5oc=xrgW3{Q^3~X@u*;lT$FG<*OTX(+yFg!f*r7Z7%U@Y%bQY8B&S=v4&kgQGSG~(anD|0O`hT*n zP$3}uu?dr~2aTJE5TGp=bSVyFrQGD5wkFMYIMF5@{+7SdnwpPNN1iAKBjo@bA&k2slko)c`wF@4e9X+-cph z%6~m4Hi@tFW;G4iuJ$Xk|0|}49eXnonCB6$Rv{iB)kFQ>R#N@5xaYW@RnGVypf@Q%*=(N`Uy@?8=!NDczE{`aOwD@X z>JT>fLU3GKU5V|X>}iF>{|2Aq>Oy+Y+aDY4L0PD_%5j>QQ{)S*? z9{lwWP8}CSC+urBNBAEENXdT#z5js5ZyX8#MIX^EAN`v=iRjh%H@3|M{*OC={%0>x z2{R=h_*^v|dGHuT_fN%Yq7ylFafPd9CXLwuB7vymCL{WvDy?!kbMd8(FhLhCI3P@tu*UPAp!_KlIrb=D{Q zxj)&XgecyUIQP6a{0+_UY4 z%ffI9J%#&m-jajY57viVUb;9I5!jxpGzKQ@|e0B0M|E!#GU-9Xsn$XR%0W%ui*Qx+S0yAn=mYwI9j@rwlb zIi{-ZdqKRqkPcf$R?#HaylD0=BEp(p6>-Vv`^+?e?J{#lJ_H$_DbA{{bM!JG<1a2} zZMk%Q`sB~P8eov;`7n5#p&V%;15YA3W67}eiJR$ntU6wamEyIW#vPE)f*Li{)?W|I z0J<%jgzh&}-3j%_dwx4pWeGp;?r^D(0Bx$Izdrbp>>Yq4`46JtO^dTWh*DB87)%pX zBupRH6pG9^)#0L})3&anY-cuVA|tgqHqDF?iJfzN%l4fd(ANz_TO5OZ&DZ22Jgz7F zqu+G2F9Vf>LJ@dq91jxGv4K9)zg{9TYM6?cj?OD#JZ}4Pq2Q9_oU8N3&-&QE23n4x z^FY#y);D>l2fl{s!X)}Jq%M2KK#9Rgn@09!tTX`W&T0XACGTo|@I2KmzGq!#ByEg& zi?&-0R2oCYrb?_giLe-h|a&cN|(d%^B|kPLe7JbC+SlX~ed)dfD%LPmKM*52M;BD-Py z6HDbamgYyL(Vyw{u8;9THMXG3_8S@i(T@-2Wd5)1sGDcfEITXyX3g_l#sF5 z!k8}sMbR+U&N{Q0wk|#MKNxvYd%C4uWfZV^dZMqg;B)9?^rb7v(BB_q=m+WYj zlu$Pn8K|MusQFvjtuw{FRwt9BMrt&eV`vF-?5gAe#f7^OhrIfrgXKUSY`6-R!|Aon z|BV^I%Nbv@PTh}VHpHghW?OrH+s&_{f4R!s*>FQL=Lg--cH#?=$Mr-r`=oVvsLwre zeOOUzN(&d+I8wdGuL)>0td8jX`kZI=Gm6Eih+H;`#B`{c*=FPyp>m^sRKMq~DK9e9 z^3MFUfFi}y(GV^)o+hcVKiOzHiJ_mra;DZPT$3F+bGP~VI=kKoM&K5!S88Y{f$}Q# zpK~D^J8;aw3B73?tvTQ-Pv5+qH&LAOm`=SxAsttEJ8k((E^}qH7mr>hhs5R3=nSYh z=2H%2Cv6YhwW6YPehGPlG^A47t{PhEeQU}>l9sAxUgo92m#@9Um!bVuSY&tWH+~BwuGFkl z`T{pfPKCbxn*!d1uOF;o!QHQ2C4I}$2>v+8LSMr8OWB-{1l|o4cCWV99)c!*E+w6+ z&Z_k+ac_({5WS|dGQ&db`+DRYv&+8Oqmhy=X&vqVgzCksH6?$R?9HYeJYM7Nhu?`& zw%3}!y|DOLw7sRZcw?mK1pqJaggDh~y+8DNpMAF^SPPzu%d?iR_yaHM=R+v>Sv=IW%~f_AfKZvS&O;v^^o1CEB{{W$tfz< zVmBU02Zs+B>Q>&!+fEd3nyHEQI+Y+yLiQZ^*(ZWXM(@S4EonuX z9Jsh8k+FLXS0i=`>+@hj4(d~}1!}35SeqvEG4A21FNP|c$70H@u#Fm&?Q~Tl}8G#ke7Fv>!z4fo7*sY$c;da2wOcsvC|ew|kkkWSI7r zzEsF#x~VXvt8O(^fU z35DJDT|lxu?PoNc_}skg2g09B)9IX@!N1&aeR*H_up6qwe`|<&qI^x`vqT@Lw4fcr zpDt4Dms5F7>1WE*^v`)#bsvnO_cDSB(~oM@z)-83kGYK1UPwxYl#W`L zp%!s?q1$&=0L3(pAJhWhhqV>9xobJze9l|J)PNc(?kU0sFC5jDTF)$tK##`jD%SM^ zo~YlE%T$q(xzx%@NnTkHX&CRS^-e!KU|UFs&D&rkqL7!{Q}r&?PQosMep1N-i)&@>oVlr81(oU5j<}j4kf0rL=d-;SEDd~at_yPpK^+kImKcVM-OmVj{T@A zo6a0u&0^B`)<;MIz>1w5@E+{b>^SUnbkXcex=bAjIGfpHa|GqYqy6! zzomm5re7cOH@Y?E$V3b-g?HejoMuP`)k{Sh=iq&DYvS_>c^wO;@`$!>K#V%{YILFR zqz$GRj(al}L;II)xR2a-2tft#IhqbiPU!jWE?M*vf!#PDp$AIiFGvJz_)VJTMNU!1S z_dTHPbQ{xHygC}LKW|GkY6=7PQ(_N!mnM}jiOAQZJ-8l_K;NGknC_;x(VC|gCicG6 z%)8c?I-I-9v$6Jz8!08Gb?W_%ThU|k4zT{&)04@`lcv(()bQfe)+aUk z4a3C(SxEedO*)+hu8=dQ!PUCYZmGAqQb7R%NyhY}GrBZNg1(7W*8bfi9XJ=ZZ#+Ii z{dDJe3OIDDgFE2!D5M;Q%U}la4Dbgo*{jXpKj9W&i;#~=2-#K1 zc8e2o3S6J6g!YuX^$2KXf*ZCZziB?2v5vL=928`tu0sK-Xwl`){$O++Na9@unfzyj>QejZ0T&FjV$6 zX}HftCIYW`^`j&^p~e9n1jkHA&PUSocUOx^CXNX0zL>`BDyzWm5hv)eZ$GiWkQebg z($nb%jn(P`C49r`W}631>WN3}il>#gKKDpc10T6%E2HAgYWS#Gm(zR7dz^(c_EaCd zR0ET>SxbYih4ff!+#ebhea`Z2#xD7XO2Vkzdvb(mx5gIc!77_7bAVrI*dZowV$VE$sQK(zB6(Y zzy?~dfyrDFD+kguEOFby2s!0h?%053h|Ywp5Nx?7dje`fe)CTQg6U&dtqjaFQzqEYWQZGt&C5{5?x1 zTv2>&VYtBDFHpDUBPz=$4ajZa|8M{YiEh}aWs9~gzDB#egwk$~)Qk$E`g$UVh~;^e zAl2)5<+#?uWo-4L0oU)L-@>s$H#UF?SVOBw@=s>BEx z4Ndy6BJM7id&jZwE-Y#MEcv3VvY3!IA9MJ7=f9)OZ#O1_L}+R3y7XZc&@aec%mCpv z&nt&H-`ew?4&^p^lRtWwSLsgVcRhd~Y&og$ZhQKcFwpSNRW|s@D39%rD&ZS>V>?GO zZbaGWj_h5O=C8%{GlzE-Pw?2*5HslBNr2d&EtE&bxXi z;or0;;ECG%R4Ju<5ulqzdB{Y5MvH@&ng^rLHG!#ZpG^8`>R{TCMkJmzC)aiFa?N3w}!66p9)d+ z=#T9?q=@R9T#8PI;Yo_(c;y#boibA`y z1Nt$gh00Fw(VIm@A*a~d7LY17RoXd?+cK@y&L|%1YFwZ_*Q>nemR;MHt)W=5+vw_S z%T(5QD@qSC1Mw3Pu}YRW%bvyDi4jsd)bpY9u@lXMy?6=Xv;-a>zFZG9P?hJM2iHSN zV#fe=0VR{$!!6KQ$_PRR8we7pH%#qzzdcJRu`hUVw06wsWMm91+C%j52e@5p_kyDB zoaQorDF)3u?a2?Fl#JO-M{AQgprn(rVZRSonG;g3x*6v8QnMH2J-?q)rq^7}?zQY7 zF$A0xa)RdT^xmw-B-y)xe$i*kH*%~c`R^~a*_ubf+j*S_ad2m^AC)ERbZYuB=U{1x zrN_aUi%E(mV+-7%e3kk>YFsq^=7V2R5RFOdQ16aQI8~Kao+}3GiAVs`NA)E3rRuT4 z9S$g%BGg}$!@PXUu_26)eF}h02&4X3I3pO=@c@n&3^|@m9b=zShcd&oX1mir$sJ73 zex-_0>#wzSQIwRN$ECb_Bz0er;cD6Yw$`0ht3;>s0Ak!eDI9yeEX*nSvZW@Xcob`h zz9B#rxmP_T;+8y$y-hyK?2sY{YjpSX!ULxDHGIKk=#0wJ>sH&QmW>$SIZm$;58&>b>e(1I@F?_l~#$S+s+LrrKeQ z$vZ+Z`(y*w$jR(uBRIVZ`IThT8_Valj5UtC(+l2-jMtZvT3MY7%3$Z4zY#f|nC!k9d$WbpLCpjWoZj_;BRv?Sg3 zCAoi3uz%M|zTsU=~LxppMXz!v`H z0^YO>lQ8X-S_xuC+nj^*T{=C@w21?iqXVqc(Di4Hs#Np@jgh~09~KYTl*bwVMU z9qWf$X^pxpYIu-7-*sY9aBJ2!bjh!8%QtR)&^{Cbz^f2>ZmLg>vZ)~Z_GPyHA z{;c2QGTs4un-uU-@!mqbL2?7w5kSTzZtu8JMbNw5M%VQd9C6 zKaFzu#}L!{t@rb7DL)Hn!ko&!)VC~Pl~+6|AjGIY@=;L4eLnl_>pxxn!2NsEN7JtmAdv6Pt)B!V3>H9i>1q zQmGShTi-NYt;Epi{RL9S2ssa-kIvs?oB?2hU^qN?cJ?h9fJ(pR2jT;Le-MX;5btbzRzb)nJQX}!wjbA^$ z1SH%!TE)SMS>Hcfwa@H1&J@GmaRp}Agh_Us6)%T7(_gP{q-vJDS&J|^YZuX8eUJV7 z{pnhB%VH2u_`3&;%55Pz%=evQpkD^JSrxbZ;SG#yQp$r{k<xE_=YlFYm*Ft)fZIJ{0i##d9fSPKBYoo`lc)HPtBx9h&M{d)tlTx(kh z_si=_|CU1IyVgp2vTElup7gWKhj6LO(XB8R!|`)~Wj-*0yf%byIS4**%EenA#ZOFe41# zeUt1G4Peko^2(lw&`8>WlIpEB+v8T%4@MVT;OZ2YWgISD?$OGPPXn5|?KCspA*JZ* zqmKBwo#?##;hd`ldU5J0ESkSL@&kg(L_2wNxlgCmCH0eRh`ikb^dvr*c91Q&fx6$N zJ@-gH?tZ&<7yirDnV0|m3uDIv4s0qZRLU`1sUcaELsoCbE*Z6l5DqGKXYGPWoNw>PQX;^JcGTgF{<~gUs~EVKirD!gW@15>cVs#My2e&qgj9r zo$@`fkMTPmx1Whz4hrlB3ZkgyR40G#0@{tt5FNf~(bCZl>TbWECqJT5f1@Ug2?dgJ}cW_ff=DyW+fQi^VVB zAo0Gq?r!J>aJpIVteHhotN%nEA`JrJMk|jD_t>O9>%%B3?2Rv}vHm`Tl*{2V9^<-q z_~*NKeU6Q*{b=$Z3B;M$!7(OnH>XtmB`3?a?)PX@LFt3>If^=XFD@ThbLCn|RAN=E z6^Cd}iP+(buTZz0DBe(lVZcJGkxj00tyt- zOD4s;b($6Lsw0(=t6)C7rYOR#G7&slOh-}4f8>rg6IN*OPJuygWzBqllX^u-$mb|j zk_UfQZjp~XVg1qsz$HEh{bZCs2SUBiD#)AR5I!(((pVxM zo1Tt6SV*;yK`lWzkQ$*dkQKe!b(kPb^?P^8v9o`-bNg1f=4|32lL~oIP78%6{Y>VC z!Mn$5K@u?!=k$hus&eOtYAqtUJ4f3H>Xm&6|JaMQ$>Ca0MJ&}@!tW5gVy{;+Lh9Kjna4TGSb8U>MPTu(Z? z7dlSG@^aFph}u7$^TV^4BH{<*eaNuP47o+{mA3|Vg63i!fwAxW>;6=>y$Ok9hrUx4 z(7@Uob9LNvR|J;J(+UV|%gD3(>-B&)oGOLe$GG&3v#-CHJ|MIQLJ}ITPxAC(A)sRq z4ublTPp^cDb7|JDU4Vl09;Qv+u?<9^^fg$pyw(}KfTWM*eeJ|UU}4iLpAZq-q?O&s zPDD(6d6CfVFLG!eMZzTwXdT?#t4^N~*q+f2TB9kseCU3YwYB{rdhSZH?V{fbK%l{t zOpCAQpojziLx(Q`OuO$^2EkUyNRkr%xAcWXyFRF|*O5k`c*#wN^Pri?##Fbet$0R~CYrP%G^`Hy7Sc$C0pum>yS{PtBQk|UxDNcz(;szzwykWQD ze4Y+QSs5Zx_<>fFQcFoes}RWZr#iidi@C{QH4FLX$69xwEUYMlfR88DXl|SLZ;5|T z0t^%>xRhfNty98)>fCpbw_wmG-_usEznSzT4TWGQrpf>2m%sGqlE(B#8ROz^Qwx2< zR-sT4vdQoFNJ7alz}uu7Va*4#4bC$W0ZSk&YXag3Zs_04H>rXK ze50AK&T{^KOcLBtOfoe2$>9{jPlodEb5<8bVjjkxudHROC75}j=3hG<8$?Q|kc&n9 zowjY)C~`=orR+8=;DH+I9lZm;WyGsok=d#%DV^L__OYOnyLO_j~;c>B)JjwS=DlIqks7LA`NZb^VW@5h<3SQh~6sJFwP^4o#)Gr$xm z+43o>TPzq>>{_{CR(A+-b(2E$wyX|aRmUN*=@)NHhL=BnkZ>8KyrVb%p%H!t(2O*D z6KHjF14p!t2>ZWg<|e+S9B@Qb)KAwuC4aF^`W^_oS6jk+LT$mVKf(%1N@gR>v`c$| zD=*pF$2JZ(%7g|3^L97tcb;BtvC zUNw}yaij+-7%O$xKDNm(;&lf)-5Ot;^O|2@TY>?Kg>3&DLfS9)->Ahsm-kVK(wE#r z#WQVHrwnfygn>i~3GP_$XN7{+;0TP1)g0^!yBWD%O1L3o@=>50u}may=soN`w%^EZZN6DtVKk zXcnH#CO|1nCwS9tO5tzMdYFzD3KwRe0c@@#i$GYBl>%=haa~n5uB(ZDOT7e%DUJA3eyJ{9B zSJ3DROZHj0vHP0j{g*h%6_2#;^PhK=Ixc(Ko`%yhzi)e}e?8b=u3#BSYy^7qPU!pO z$;j%Dzi{5EWbtLLv1qCAX*IaNl+gW>$0{K;e*PiJ0m~xr0+q%5&NzVV3m_S#{jWmn&1ycdf-Tab z1Y}m}bIm+dUZx7P;Pk^W0eB>Vp?dvfJ$@A(}5 z;vaXj0#|QwAG5YJhZkI2E4}|eEyjS52acrX5!IekuOTw?@$>lxD0H~~d3Kz*!S9YJ z2vj_OCf#&REh32l^Ab3LR?L&Rp|+2B|$;0%;b;mzx~MV7&Ym0hi6AGfRanj&ku}OjW-ef zW9bKe!Y{L%`~P-N6Z|V}fbjniQ}BQ7p8l6Y>iEy(s}i G+5ZdL1}U!q diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/nvidiasmi.png b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/nvidiasmi.png deleted file mode 100644 index 54abb537c84e9be00586ff9fb7f5b02c2a8d3d4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19640 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 I&MBb@07n5-pa1{> diff --git a/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencost.png b/i18n/it/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencost.png deleted file mode 100644 index d845e487f63f4e593888c05bacfd628f393e566d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89375 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�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 hH(? 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 z zV)&#H-PXe17g__#wG6@GF4}7p4)c)s$P5H+Vi>zv?0oa+qVv?el(Z(Fri` z?IY6{ho*9tJ=%W^(AE6b-kBpgg&n++bF(t-N>hiptbGyhe|fDz?Jd&7d3K$|WJ+~< zKrHVnNj^Q2B1yER!xf4^rE+Di22F}8t&@8(`|KPkj-7l?o9m6`FnXk7MR6$YqP$J= zuKdc5z>785Xo%h}5KdS%_`bfTRbL$r`rN9J`&0?c-Nie18jAi1q@xqT6Iprh^{1tr zz(}g-1SQ0h$KH;OVq%Xsfsqn25^QaH>a9K6603Bh@WcL4i&tUhXm?ql_llNoNS4xD%2rlL~}aR6BAI9D#eP?_a=)g!{CKj8HTnW+9YF8NDTpZ{Yi#U zviIoZ{P7}NC<2As;G?;;x!EYHTzBIYA_L0e>CEdQ`YSq*%ClYY%idnKn~fs1QeO-9 z;g=ik!EknU#w_Y|8F`@r0Q1W_fXzU$d~7iI6)}<_B0F1|6Bzh|mVWg|lZbSGC&{Sq zxX+Q^JsPuU+Gy#7>FJfqrS00d?hB|}!NwH!R9raZN7e>oAyD$Jt^6iVl#1K*CF|sr zU_QzIQWc~$$iYv^nw%=g22l9&&0lx850^*CK-I87?v>7h#0+D-H_5N4`Vc0f*up=f zd#QeXEm%VMZWO~F4QEzCFEex_Ee3ieaCNX%?G?6>X{*vQPUCLFY0bh>XQWpt zG4rQ%vG+R6APX|t@?;J7?r_6_9KPR!=%=s}1J<^a;gTC?k}%4Kl%2CpuFH&u5{2TX z>K2_9*md5TqY4$U;e#IEa=Wf&R9)Vx?u5%UgUeEugP@rFc72H$ zH~G~0^wy&%F_Hua{~Jmn__l=WjQ8ju^8<^2v~?blgSwS$ZeO8LoSsjDTXjB{s4XK^ z>m_|ZPxFeqy?xbfoFnu&27}7Ep^_LWuHTpiFJ@L_NG4hKv`*I5fg-%YOR$>CD};zG zsx6S44Mz8yN^7Vbr7dS~c|6Z_K!G8SPt|7}lsV>jgenD}R)+`}i)0?jJuToQg(i2XVLZ<}X@C5Y3uUQkVi%9FpG7J;?8j=v*rm>t8Udxkj$@ySt{`f+g26Au7 zNaaz#(%pT^8@(9hs?GP4*3e1ty981+=0zI9go_Jj!Gp4kLx-pLqkUO8s2EiOf{Lf9 zd(bFIaF{Gy%WEy?WCMpxbOsDK7=%P~Zk%XX0}N9!3HU5ajIURrU3Ee0?E33cgLbeU zquv&^aDu``D#kL%j?C^R)qFz8*g!~xu{M3KF2?*2S)yTnvHzO2$Zw7L3Yl|jDCzE z?as!`vT{-7@<)Jl$(~4uT6z^EF1&)DaBVKkP(|-e2B zH8BcVmHn0A+B_+Lx~zS|Cxvw-vm+@L=@Px3DSVvqwU6S$*57UTKwNd6ZT3cuTqF%& zmkHi0l6}ahq%hhc!1rTco}VS@qaV#yOnkTannS?jaWvuvW3vT8ukA4G*t%_zKja$1 zM>J{@7*L(TzdBR-+5d4scsKt~=j@2M4J~&d07+A!>oFdgrx_n6b07}*m)^0Fz+a^k zI=3e^HGE;1#*C!xN|Ug^P8WCX-&oLhR$d=VxXXEYSEb<@=3IF=Y@u)i14W|;I=0Me zAYb89;>(stCbZWa$D4eTHdLVg(zB0T5!-v@la@!OlBLT+Tb9}1v?casC7zU!-wG*I zm1ejttGfi=j5G06BKdRe`sY*ju+k$_3uGl3W#`F`=5<01>?XcnO?6inmmO7I4F+`Q z$2r@VJfDf!4i2WFXa6!!sb9=78EH3!rt&0KBF?&5(wuo*TFg9#-K1x3MfYc>Ln~=` zu8_Naerf=FIWRa-Li)qR3LbwYpFI`T9#kk1`8K*S%%^Vx%k1Gie(ckyF?yKOv-KmY z*?9fYJKS(SwMQ+umFK&-p+V_J{>7Q~0oPRJj1e#0F`E;1?p+h=2<7ODb{R0`?Bun= z#pHCD>D*MH5moxEMmyQidDlH~qS}J#pf`al{<6#xCs-Avi3Vn_%d~Q^qboPOxl6s z=q}bH^;B1oP3uU@=nwC7nZfTfYPfR)n)4+FO`X;I9iUz_>nc|+?loF*KOOt(qD1v7 zxYx|je;I);cfCLDrF!|Qod!)4*%AH=QX`V|LuLHz6x=jeOR>65K5MV6)0|NN&`sdC z^xjjY9eV=nvGDo@TO-N39e{nxb5p(#rb*VsYrd)3U^WWu9qY}x^In2i?L4Y~9kaI9&&{-dzyxlU-^ z;z@B3b&7o?B2*ZF8^3M&T|XDk@5_ zAy%R}93|$Ze_}&LMfI%*8)UP31aNNaDYMb=x=L|ez;@)Cy#yz=ng&u8b>!<`2k0+l z=)2c-EMlA@IoOhW-L}_VmJX#7hZ)5Ydbj;ra^U=m%`m{6q+3ilZOi2rOeCfuk^eeA zP&$d@D5F1|m=m%S#kO+7nU!2Mb-WlB$G??>&GYzOyN}2(xh` z`trw++{ziA?FpWxZ*9U0`?dr*`H@vVsH#6LKL<)cltnYZ52N zs3u(^QCv06cAYmLyiZuCOa<_{Odo|&ruXOK<|I3gdJ>8VM&hVEvlP>isnRv_UrW9m zC}v6HOFhB$&U4wW<5vGrX4!VD^K~_)=9N!Py;{I{o;_ka0VhIwjLqAtE^*7MLXHLr28~uB z&P)LKr|kr$$~LJ%G8Rcs-AxnD#b(^XN@&fQVeq3kDTQ0cHc% zysmCO%BlU=aiZ}|q)c<}7GdZ;{H@Kej%yKF4dBCFfO?-d->NQpz*X~m87e0$Z9zc^ z!rs$5iHw_g#N45&0BkIOrSb_OU6p4$g|MD?w(ef?G8d(OQ|y~0{(P1z-^+~5!CY&g z_e5@4EDdEVFb8@-!D`;Q+LdaV$Zoj0{^63a{rYV;;N5AM;@Mr9c!%`x#@9N)MyWBl zqR<~DD`$P}^&IdWA(;{Uq24d4RFcdUFax}`>$!ABl@j6|9sEm)T*J$lOPiJ;K8pjn1aAEC9A<9_PpjBcu!i`8LUjFY^sqv)bgu@@?53@m zY<9%XQd^GEtC1jVXh|`1Tz}W^tCjOzXsW;e1dyC;Pk4NB(%Iep70BDJvbgv-lJ=U* znrVC$ihl`2-`oPni;KlbJow_k%*1~f92vqgD88O4RyUj!?j}`Ktx~-!$0>^7RJvZY zkL9agvQO;h`q^zHCN4-A3$89Z1oqK=hmqBkcK{{dECg+5Tkdq_Mt+@w%L+}8A< zso1S4AF{|YGhJSMz&)i`?wuYivL9mksutSbGGogA@I=E-P$F1!)GW;D;3Bkgya|dA z;7N9S`DhZAVrNn`S})Za#~qA|M1t5<=aRn+Utm^eM*LSuPtzj2UQG;h0;Sk$Udf9? zAae$PI{X2Bb5DUx z_8n5segK*xFVD$KAYe0tf0?4L6J~@sush%732mWJ(exf=ZJJqj;pMRbj7}a)H@ngp z9Y-D&Bf}jYn#kxHlX-zsNB2Xq=iMLw)dMAP978TKGiH0n4B&l{mjYry{;OIf-9O*w zXwb_K1A(6Z;xXFA`xCBZ4H_AeSM+SlwT^aMmesqO6Q9y5SPJWN>&d8}E?J#zgR-P> zVzf3%fOT))IEXEpfT?MGY+2dLcw!%MCvtdvr*f0#J3H)vvfM7rh)Zfc_gMWGDyL)S zVH72E>6LYu^XeJw?hNa&3?-^Voq{}ZS{6Or4F_fA+uRBQXtYDrxj`FSbi@L^IvfJi4D z6|?vh^_+vZ=$-V9u4qg zdSJtWRxj`Gcc|i*tsOQVb^~?W0LqKVOc_32t0%g|?%l>^4MhWM-#pxw4~3Fv%5#7! z?G-IudajQ|vV|Vuc=t<|H5l@*Af5jo6jLX!suaf7Kylgk%u1bq-VcpOhNkasP?9O9t>}@bKEac?uU>*?D^Qk&3-_a8x=Cm5d9L`mKhC_h8 zl;p98o&s3YZvTgv!^98%>~Bj$2NQP#>+MKh_279Y9kssD&VzMntz%H@gAxON^Us1f{5H>p#IzQ0|F; z7t;K<&?2%PdKp984*<9x`vTZE-CvH~{rz21w>R7t>jXWU^4o97oGG)~=zV|pjpIFl zmKwVqH2HH67TdEhkn|Cckx$Ne!Pc_y6&-Hs47S6D{kh82PDg|F?=NRRTj4(-l)C>L zp@d8nl{(OcuIuNO#`zQvTIyK}sg-m(5dZRpk7h6|+v7Lu3`TGD_W=)u`ripPUP3a0 z8}jSX#l%FqC!sW3avjOcZujY<+b`69CF8x7k$H8*b{)tJH$D{wDkfh zHnz+B!a@VQ44!PeK{s1t-kG%?0F*=dS?M-0>z2l%!vR-)J*a4WJy>47-#DsSUH!3v z!Vm>UQ(;D>&!*J@IHZQBsn|?)zu_wouprWsu9>*A?!yzZv!1FRp({MNs;qc`8qkqOU%xh+jBskbwDfnm44u z2XE*0Uw8{UJ|=2axEf3R@mBx&I84nAbIoJ1KZM+D;uqJg{TT1 z?eCYgvomp*1gLa$ewTVAfXryT9-GTzx%Ea6IE@ji<12mQDSpz&x-8c%CTz#~PPyMa zjA1>!NRCjTB`zMUju3Lm);Gfeam7Jf*IqGt%}z|@ky(k1MmvAW*?`duYXJNX4wM-m z>^^YP)6)yT+48n`sE!!^TWE4)fKKMBXn@{F5+k=2suavrS>ZE)@FmuQ9`JHjvo$Mi z?E?ZVY*d`zDk??*aN}!7amq&Y~E|eZ1t|Sy?GxC0lG`3dj&dLGEYxg zkj!hM*+sGff0eW+%P;35O;-<=g1*>%j1!GKqNAV7#L5xEm0|iYfE+`}z|0&5sXjF5 zDFF&KXx_*Z{k1*Bi=yv)n~*;n<;Djp6sQXV z!_RKBut)k*+o2XGNKtgbL4HDcPg1fsr1P1ru5Zv7*xVyU#?m9?t z2(E+6nfF`g=A8fLpSxbGXS%1ms-9g{yY_ReCE?^eBJ`!AiT7rzv`R5(l=b1JFPe9Q zGoSgeDeuwesb^f0ztyFv4OtOi>U*M?JE`m^8tDaBNCD{o^HD{p4&n>W;lx>+m|4kl zKVQ3EzwC_BzzKp`cPV-NIuch(SgFgD))EZQ>qJ2pBVcC0``b6_IxS;1}yv_VG?yvV`7cDAk}x~6HY*Ay?B7A2uQ4eQ?cjb>IH zK1w=QMq=UQgy&QkodS_0iH87}YzGLO84C6K4>>gN{6}4#<}X=!Yy+GaK{P>QvZBJJ zIrRnf9bG*7rv}ZdFwoJVlFB(0J36-y?W?fR%R9La-dH@e*6`^6E4RwmV81bW<$6?%~Axr&gw(VAQVz>u||fNog4hhLw%k zf;s~_W-p<;=Rta?!hGO|k=jmfzs+tZFzvRyA*fV@dA9I}IyF$m!On5L}m z7|Q-D=03vC$I>HP4_hT(OI{|S{wC{e^`{9#PGFz~l+4;HEn4Nf6%=!pgSzg2)2Y=YHC4+bm zd5`Fxbwi=e4P5*d-_iuQ=_!?dgP{1IiuKiox@KQofSn$+24V(KJZka7*U6^3b8RD) zYErm9OkYaOY;}BWN_=Zv#w8i-5?!p-02`tL)>;Qde`{g0zccL0n|=667uNsB+gi#~ zlVT4PtGMfSJ=3lueu<*BnPgSrb%3w}o%Q*(-q7mRIFDXFS@9I6ubF}%NrdhvH^hZ4 zJ@L$9_j4E-MOii+ekv-4XtR;|=;0|jDN>5s6UkO2-)rY;>w*#t#bRQUk$K;<7uGye zv*tp1COG-XqOEVlS8lcMZc#1`yjOcDE!}y;h8c^Q^z2A6yykrZqVMts1?>&k`-lIM2K%1j2Ue5Z8 zqdXKAc6>X1f&wXZlGh)Ukr2j<3pgWOg}nE7&Y|OZyzcXu9IE95Pg}$bOTG`fNTiof z+ZyLyb;YdqGZmY*9~`YarrG73J$r@6TQIwo9MzVjD;ra;?`l*kf@@1xo5kbxxBTn9 zlO=7?FXC{|nCykzbNyT>8%Ys9Tz04+;EmVML?KDejZjI)>(yyE`1Fd)j{|cT<0URX zgSEbwb}mfF|L_^Si*jCh?`!xtB#0t5bEette;;zAC!TCho?av5a_rM)P#DN<1GdN7 zf#(To>(PhwF+?4ak8G0jYVBmrClayPhzaAG#%dnb{S05{NbalL?#4qi(vQN>&g~c+ zpd$3N*|>+b*RIBA_7Ij9k1Af*ZG9L+&fs~|n9k!Kvhh^*czu2u`3&;Q6p?ai%DPx8 z*{bPR5|&OwL!t)O9OrOL0SueRxyk0l81j9`(hZX7s9N`DCr(Wc6Nbu)Lezv6gVB)9 zZpX$sVy2}&vjRzl4brrd{5H)Bk-f}Lev!S-+0Ily={Hl|iIZBlT>eaGbl^O^^2n;0 zmVfoD&qtv+imgN2t*^BYgrQ0a8BmdK)JXedxmd;Ta$!kvaW1!Yak2D4t5wMJ0oTh2 z8cMx9<>I?Yo&Alj6=v+dAEIPce>;Wj<~Q{PaysdWQtvdEVoilww$d)bsdn$iTwu@l zju4jpza+t)1oRbJ*||fgNbZUA$*|gPuZCE}iu++!_wgsAD+Uo{Q?Y_hwK^lslG}@v z!GUUppRa3n;1(bzPyBaAS1Jw(wl#n5>xUYiAqr8vMA$>!$z?)z1$Q_8+U{WK?~xrYK9)eF2hhB zW==Va+~`I3Z5872E@S^$N2DEipNk{0KZz2t?7mYg2cyB`+21Jzglv~2l6)Zl-4p#7z+HdROH($XC7PKl zSg+tTB|?oGR65LBR0|61(SjvvY({)PwfK6jqR?d*q^+4B`*t157st3#^yXx(8VQgD zM*ym?GqDC|Sw$3PQLS~}nk|zMRZHL3+VKXHpZ`nEt*!AO(#9ujQwb`KIe)7?tR!En znG?M_-8y)0`G1*{# zZWQaL{fDm(d zDTSumzzVGe(3_zdr$P`)NY$x}<*hxl74+z6=BG|c`T`iI-s+E&zj z!aj7@zJf$}`V32JOY$RfqSupx@;5?KlmNPg)xYv>ltg)4z|72McQCcBr?q=^Bz7DXt4+{R(1+5;v28EOxiidZPcqyXBz=h{gj>+oe2AiuLjm?ZDE#^xZFA&ST z?kEa#vHnP-y!-`E!wt!7br4b-=WAWOH z?EX`sFZn&XhrB7ZEmP@cgw7m4s#pfH8u8#lRwH@14>#IEsg}V);H9CP?hXdp=%+z} z(X~w3mQBiK3)Wpy-|#CJ7RkkO;T`$ebe1(K%aty4z z;gA4la8ySJ&+0?P5vyL7$ecbGu=aT^rJS>l9&B|ZQ4c@7kaKTxr^T*$38`Puyy?;p-Ue8?c) z{6u{Q@5!0|JuAdLo_}zNxcQxTjL=H8XU$w+N&gXMRYEp{G`aaB7V{#eUH0(T2K%di z=?OqwX(dqGL@JtA$e^$MwSeG)Lh$1Sv&RE$rR~sI-=^w>UV4K>Td{LtsHV+PNc=W+ zg8ko;>w?)qc%1;>rg5@2?dzqQY@5q+Rg4SlcF zZRW4`Fd}hsu0PC)nRE1&yvA@((f9;s?=ih+wR9Ok`VH#<*Ri6cYNI3fQZDLGv59yQ zsA7UcN^;8Hi#rMR4F`p6et9@-7qTKz)%zMSiL8LB=LvZ-hQ^Q7SVzLpLHvkDS+M4x z&VD(4BlP1)CA^E=k3^ubb^Q`4{ozJKC?x;w)=?*{Z;_zYP{dU(d_M?Lk4A!KmBmcZ z`|NKsHAP-mv>$QILGeOmsVz_6#S%p26~TC*Qwq&wkPj2xxH2hY=EA?)a)H{c9r=JJ zjjO>qN~xsbI7g6ZHCawYX!|_q@|($!K8a#o4BcWRs_ju>SQ4SN?mEGJTy<|;D^gFI z_$)tpFqy~cgRCTl(d4R_rJVy;4ZE1+BY_<8-j0N$)Sid9+~8u$f3at{8OTDL`B}{l zRT=xp%Ej21LWb^rNC9Q=>%P72Ooh?LXHo)5b8hDK-xjvm?}=tT%{wnldC4O|E3-Rc2uTVM@e0#{CYi8RQ%Np_H9{LC&coL zL(=Q@O9^kVXn4T7Pjhhi6M?(Yu6{3m!Y}?)jBgtxmTUK@B~l+~>%C?)s8_??oq#x< zc?!5t>#N4+nyHE zLQI&dIK4k@WpFe}JDfy0D9f@6dF|*gc*?BWykrBwQo)?zTqTdXy%$@>oF+<1POt1b z&NoNs<6bN04x5A=XYNb$Bv?6uOr{9S{pyxds@A9O*?E>DNW_kzj>-kV=T|8+ZTb-)QeUx(KyM@OfAr&9l^wvB0 z3Jqf`%@e3?k(t&+QqM1Au(=O^#udGYC~1tV-(WqAC-aG+m*E^x-!mTh^~zsvp8D_r z)wTIqwk@Cyy`{vSncU)7R?}B~Pw~4MwdD?4*3rB~Skmg12}M{7j{2)_HlG(dUkjmN zd^NvpEZ#R}|k<$pBqf6^F-87l|fp=3nMY*Wc^{0gr*T77Gs} z2l^`dmHzsb5PUwm(GjMQr^RbH@dB%5Al=*3lDK}}6*@QY41neaQ-7b-KEYE{=0ClL z?=)4idutXXdTy2#Z7%0LY(w)h!nJVud;!_7AUV_o5;OmsI_A)G`)ngQRn2ad%NFh= zX7_c6Xmw0Wi7Fu{?%+q$FsdH_rbK^IS!dS@$u3-K7q7*(1 zCN2mPzi(ie;TC-1`;!z$vVzhW)AOj+|{@nrrR&IvJ(l(ipdhR3E=eHbOt zOoU6#?DgS|rUGo1hQQNAdt^W_C)P?}&p(FtdPeYC{+IXM z>}#CKd|uV1Iiu{xwAF25&TOS3+Y!$|M8Uu4x#&D;r@xE#Jl`nW{ElntQPO z>9pMq6fowd{<%w8^uCtx=^nvIa>MA^TT3Q_>?jf9cO}twV3RM#eG{RVLO-0Cybbkc zLNzRUk0IGwJA+Vh*T<(yAx6LoYdExv*Lu3eSgcEFIHKfC%usr&p-c213dLwVW8yqj z;kVF~ORY|m!SH{R|JqeTAM8esstdP4l=y3#t4HG&4~@bNKSt0(r_V*|SU+>q zL|}U?ldRi*_+cfypL=O`X%5z^x@|=)&{cIb-fzkBdYnbrMFQN3j=Br+Jp8Q&FS)Ra z&rFs!#OEuI$9aY&*q)gP*{?Vj>(%U3Geju$shX7!1pbQJ9j!M30nWmbu{W(3dVDNG zznGr)AYunKDb1AtefCc*+aZ3gEhln|&P<FV@+ z*hJC~8&%Qgf@TH-d$anM0G5K?=n##^Pnh=dF!|y8N?eQSa4?QGPdGx2*O?_qd}y`| zO~dW$u`{W8FNkwU{v3mW1AzE`R6>8skmx>b615=58);K zpxx<9lZ8p}3O|+SuB3{`P))6|)cA!Vt#H%0$_wBmv?b#2@#QxIFT$5Zs4UBnNgP+@ zb+&|xl+UkhvYlGpYcq1%6x`0DRrXhS5n@TUUHc|ZOydG%Ve)rd&6lW8&5^fA0+(^y z?C`NH9BjJ!^hBTi{kOx;myyrB zH~HAwcTIgR79`xONA!)T9js1!RsJ(zoiVEq#Uu4We^&AD>A)~OBXzR8&5x)2n*vb< zl+p(GXI;X#yk*y(qQm#Nm09CTDm2B?E3+8Zpa!1$X-j{KveuZkg}xvfN$uXtJMk9I zafuKzimJpPWVh=^07V#Rp6tnr728+KU+{C*@%6K#;z!WSy`&Po4ptfpGGxiVG=~>d zOWGF%;-zxYAr#1$`an(=blx$(&qa@Y?m}5=z8Huc?jvK&mX~_`ET=XiI>yrB zR7J;Y#}tIzF$JhMY(9Q4@qg$|JaK(9XV#hF22^j=mrHRMP(&BEaQgb|7rjsG=o2oD zedo=0^{GmAkqJ;h&<0y~fLXC|@}BM|7X^}2yK06^bzs3XUesUK=nddXprIKxo%<+&5YKk*ZX`kojQq2d#fmof=(o8 zm6j3>2KK%!ujltWSX*8DEqdJU&OBIP2{mcZnRe6yM^6@5l?MVZ25*~PrN`ADe*J#Y z&g0XxARx6b#7vnE4WV;CyYzAIHKEMNZwb!oKt!UNJUOxYjPSSB!)Ag4WpaH0davsM znN3@{F?F##HFdDEwAYPoVC>D-^(Ws3#r>-TY6j3$$!Kkv$Dk0EH4U${i-FwY2?qnf zKlX`s+;ngr>vR$n#vd!spP zRe7(^p#9{X3)=Oc1p}6~^gG--&%0VrjU7JpZ&Ht&Tc*=XuOGyR)q>y`_teeyK*3%@ z0KsVcnc0vV^|+1ij*mN2gM&^+vX;B<){~9ZfI^O|M`Mo|7v)3t#*23RlLd5b&kAlS6(=-t9oZ%!u!2hQl za|c4U&T~kZzWCN`ga@@f0{d#er@vOY99u3dqA3??(RiDq&Ocoo*hJ;-!2Pb-LQOXR zeLj+-%>{oYJZfKbuU;*Ax^`wMbz8F})6Y`*fxxI)vjpHhyS~cI-<3sr-X5^=2j<`6 z(zCPrVTBRM^k|Fbwzqe!&1oX4EVx7BL-H~%iX*@Udj*D~%D+{~ZcDCUiS?)6T&Xw6 zYRTf7=4U{CRUoIEf3;9WdjjX}h@ksj#MGmn!Bt@LB_L0NShg3l)4y40&kb;7;OiXU zB)#0*1?j}{3`{Mw*g$!R&^qmHXH>;PL$nK}(}jr~ubk9RoPG zk#)}?z_9qyU*I%k+vikX=ecirg2E-v-+TLZclIwWa;|mz#kHCDP6x`Xy?NtJ7^;EG zuxCw~7L_}VrV4NCI;a;1RE;YM=8*-iE!B+|ZA%_?etO79fVUtfbhvm44Y%bE<*qr8S-B(2_dI+613VArT&T8nRX*JX-_VG@B5BE>)Ka6FZgd#3$_V-2-$K1%ecuxLH`<@YWzC|ZA#pT@Jd$X&q)-OHpiWhF4 zlWyCC{gjr342)puDSVf7g)*DN)cFy#Bu+-6dt=0S!Q2SXmH^L?m2duN-0ERv8Mkq>qot9=rCJ6P3`rR;H-d-Fy<*0etmPod+D)*~tKFK*aAaZlq*Y$GMN()VqK_kbda{5+l=8H- z#L&Kj6g4vP;ao%sFY&be`;?Q8E7t-v$efO5)(~EZOBPTN$8~*uPR~dhr<3=n(cre? z06lg}1d@`V@^g42us0wQXs-$ZNy5yOcT3qAG=gY7Za<&GMc29CGj6FtgyqUFR)Lc) zB6GIUk!IelhCcYKsf4=tdP{#&=#lvDOwH7Z2s>R(0$n%_h-pX-FIQ6@x?;NRcvsdq zw96(f7dR$(+V?|KY|C~E9Qq`dVLi%E6RYB?2`uW5g~Yl#-lRG&9Ve9(^m*U<~RMVWc4Gi-hO zR+wq9I~T~@nQH%Gp+{O%Mjg6&vJ%3~@4nq*b5b0bL2$MIP>8JgR`(5cjXT{Cf-)<3 zD|L((*kqCSH^8iuu86HYqv;(>)BIx-Ma)VKxq@Y8o$z@kpP@XGG=iK|rt!sODEV@x zL;Y*ahbdkxCjoRdj!3)R)AhD-k!EITHC-16vUX3QIN4pE->Ph1>QDr<6$CE+5e(4~ zciu#L|0X{0Cjv728DM{F9LK|T(4HY7ltDzMt{nwltI8J=w=;5}_q5G+_-pJ+voLu) za{xaV*r=zi{A87=0|0g^{zzcG`1azl_EvIkxC^I1%NxB zCVAf7@?!9@&rJ(%b8xj8tJ9v&sonYGSC@=osxcjSvt?DAUz!M7m@K_p3x6;1{IOF2 zkvi~20*;zpuvQZDT1Z-TK8ou#rcPW1^M!O({i_Wd13BUszAe95R|dIAI92EWW6%*V zD&JqnD|3D*&dE8|UY2T!8A@O_bU6zi8Ivq+T=kM4ON{wuec}u~VAAbdorHCx#@qH+ zTN^2hCanifBZYzz5G;68(!Rt2~FgLGJz7@A9?`g=XI%FLz~CkkcN(?7n- zT6>%3pQt`gq!SHpm*zOr^9r7w+>FtnnWo#)CtYn^w~ zqFzlYa2|3|z$=ki2K|NROP5zk3zOzA$zdtB>Y0x$h(5z_wp?TgrOgbKY)uJ05cQ8x z)UlCMdcF#7cKVTChU<7e#v;|njzPx7M~M^nt3tICl1sT~dNj=}3X6o74r*+%#ro<; zGwnFlLWRqT-1=W&!{Iow5&vblqj;ffg6*^IgdyPGMMzQ$WSf|K>*(}^yOf@8pL zMd+Mk?zuoDST~c?0Sig$a!uAh$!f+HUCyVgFrAAg?{N4lW3=Okt4v}UpO|5yLB8gR zx|Lt^(!rbeQ&If4qMc~7@Xm^7meco~;`T-}ddKavC(`AnCxj#@I(CAn5!Coj7yhEx0@@kNm` z_s_H6dcI;5MfQ#6(UbdPo@A&XP;JO{Tn=Qzg`psLf9N~2CJJmM`O_5sV#3shZ}yWo z=b1H!+9;$X0sIiT4ezhTlQjI`?Y}#32WWeG=q3_^WfD>mxNrb*H;#eQkT%KQ{<$*= zc4YxjO2x9=^=;ciT>+i6&z*-27s_l=GYf&8K()SW%H=UU#m&Nh#4C@!S$B3cRrbkO z=h&vcBw8`sf&H2usYe%b9t=ADhB3*AMwQX(s?i?Q=|TTE29z~(!ehm?b4K#E|2+U3 zLUD;qp2pMa^riCh0DeqA?LYU%`?Dlj;t{dE8#VZwV;*yj>4N=WFz9A)uxf$`uP=hGJI*< za$V-HB8X&QoOw}VqA3HMnmB4rI<8FJ5|qNN3Bh`VvYGIA!IXW1m27r&G@Gu5M7jI- z?;jlPXe{jrg+_Q|`&v?LCV%T9M~c#63RNd%&C6Gz+$FiX% z$&AIO4v&7~%%;pbNFUMDb^H6NaHR;~=OE0CKF8u#Sf8B37& zdtHZVth}DSL%gl}EX&Q9#_Z&9@4P+i^Ov{BYLPX2#cs0D;G0UzAK`5vG4 z4vdY!uZNS>=P&{6XZ&4B>xwCkc-mU=;|d6|%204{a4w}z?1h@e{z+#8qEINf`w3!% z`W3I`d>!tlx_|hO>G<10UOxI~@jXxJF;U5u1sC|^@iK?Nx9)eYgste(pU??kyC*b< z>dgtz2ZuEwa__58_P*276}STBSsJ|&OiA(6A+HgTFK5tQG@=eeeL8PdiJS|g}FGk zb}M}R4~wXOmPU%r-kvJwrGv*0V=-M`Xejzi z-HCchjZ($IKri88MQ;^U_O3Z-^RPsY0{?n|MKbzJ|H{JsOhQsAF1gqX>qUrXsC<)u z@aD4mzjl1LPVTcI)>D*pPy$^PAi>&f?Ye{Ew@ECxwO!#9{+;cUQUfcYv@XRuk#6F^ zXa@RU!#;d>3nD9nrHaP(SDywn$8QD8l?+z2wD3x4^K`p>UY-l+JUZ$^VWxz+NHGO_ zAgt6P^PE7B^`fn?E z1(cKN(a`99W5HS@EW0FlV?{KSpV@NdIcWk-?g)(qa=)xT{C4{i8=}ZnLNPPSD3{8L z?z#d+Eyx?-*WFbivuYiqXN<~XO5`=``8+N37jI-@0W~-U^FX|;r+0E`_ zLfKXf1J%p#0fn{-IzEv>S9lQb3U9M9Bj9Pz{7iy2h|N62y(O|*!S|vC98ocB&U1nD zLRUps5(~#WReRyGTbth`rWFD{gchw2md4gsB0An5?XGn!3=e0+ueGPVcQapK^(Too zOqf~Gvm^0^Y-hB_`RCCp;3V*AH^-d=@oAtO$<5EuYTmZUcBxyGx z0ew(4ZLOJE(DK#SIU8};+&VMxiBIS57}bf7gg?aLST%hkC{TQU{Ykyu301i}##yEz z;6tu~{+hlLH)?|spTmbRds$9Cg!fWds`mKwWMlcy_6M|oB*iKo0}4$e&787kNV$iy zMHRmJX`I7swX8rEp6F4&`;alJe+NJGFR7>5_@o=(<%s!PF(rQtn~YD2Z{3y`M8lj8 zMti7wLZC5=k9Edi@|n2pNEviEgwtEzjrptjRT{XOFIQGDb_!&J8#*F zJ4aT8ACI+T<%8{->>}v@X(#_Fa%46_>5OPBKmAPmw!h{So~i<3G~PSr^gSJ&m_CYA510vB;O*ozp-27$)S{U8tH z-(fZg>Hh>uNfUsz?+pmRoO>C>1mVobup-se**>INon8W|R#pJZA+UEkv=e>S5 zDK>k9JjnB02~Q1$lC-=k|CGwv5l=D*3FaaRsral2#xf87cH&K%?x>pY-C25{i@p+= zI)r`kR8mCbh@ z26wcY_}t-EsDAeOcN^b!aHTm0N$J3C6C{Cd;fT5I_0q+%V4Up3t%t8)i#pX zPfJrk38*A&o*H`BSw_FlaVqsU_iyotGYh8KCsI1Vm%X&{tZ_lmcfM!S!)1i@DqwwX zdz|8n66wf-{nYl3wGtf72LuNmJ6D{uD}_R%D&3kGgzWZEl)aO+4Va*W8>jGPPo|MQ zD!1aHyo><8`R%%j7s1iQ13aD26-UZ(SCNl+X=v)VN9@1Q*{#sT#@FL6qn{i#n@5yB zX>r3qDdw4$*2n5&+(KW!b?}(HZfXTe$n2) zs4#Kv%ti;h`sU6{u%H zmIhaxz#HE?M`6icmP7#Qsg!xZ&cmte_tPVLr&pNYzvUrapG8mTOqhEHr3zNRHUl3K z3m<|Dv#J&>yvbRF-S6vhUxEy{m{}nLV9DgR187qp1ZTJXinvn8pBp6d?69sB#9;valkftHGewdnQ*b6?h zHY}G188~uN*DQ*;XD)q94(*=U9-*Yt+oU=b-7k{nS9(@(&Hej3-o`H|yP`9s8HJ!$ zZ4(}sMz$1CdCZqEmO&qF0Ux!{a`OQD0?N+m?=kCqdb!w2SA%JD-R?JLcAj@<8wBR5 zXJ!=Gwg|MPGP=jAw}bx~v}Z3Gki)q_7%9!@^*kwiqLbNvt~GM3p19$oL%_4c% zTuiB^B{B=Htaq*3ZGnL5KHu-9!P73g|Lok>O9l1+`KbAu6406eU1c~ZX*3LpzRPY5 z%(u5#?KUjJThRoFDz4f1w44n@jb*q4`3iUUHd?IM^B_{lJ7<(ttDU({$4@^1hi=gY z-j#bk?zAbFG3zo(bkDA^dEHs2Ib^TH^gNDk)n`3=X3%HWs=t*nu<0T)F|4+Nb4}6K$r7M z%8WaCqPG&b)$H6Ybck{77FI?USU^F2+{uWGsQcT~@D8T8fe2drphP=9r3mrq&Wvkj z`v>JjXNr5PoxVBUpHbn&1TIUKhA=vw$caNZJz}Ni>yGNyr6hrwhHm@}>0=UycZEjXwF1w@glY-?{=t@yk?EFAM>G5W$8L$^nvQ#(*cb%X&DSD}*%S@UIkY zwuW%fnjU4ECeGx$JD!ANd@A6;ucZrLgXK*3t#Ujq3&D&#KYe)$V_ z0@5owv#WK~HoS&rYfoHoAgm!9Sfk0u3TM)($G{XL>Llyi3vBi|k6~>k(u=ac3DI4Q zRW}|qkT&ZfC<)FqjD0w}=nifzH~Y_^m2*ZyOPop=s`Ep+C<^RbHwFGF(o5pQ&Bxj1 zFMaic_rB}6zPbr&M2aY+-5?~U;N9FqRi=#gaB_-pq@YoX%0a%MUg6bHcG$^2S{A>pTHM++p`*#0$(x+ZU(*i)GeMCv zvPejhIy#H(8__J?L3xx5QJ~9`i-yKV}dweEM;dY89QuIC6+6wPx5j z6(nmjt?=fGO3}KH$%KCnHz6xsn5>t0CIUwHat1{4*`_&a_4btK{H}k9zS2McA^)|2 zJ{bAqt7EaxkC_&qfLhI!s3#A13J;nb6Wx-`>J?}t?)RAy*oK)aT}6#g*HHBI@Y04_ z{xWn#xxHcCVaQ#^&`9be)rdqS139E|JGt0`i2w2hG+Fdz)G5N2UnR_Kd-^{SXD-4~ zEK8uf%?AHo{=!{@)ypxAX9!dpIA?2DiML?W{<2GqT+)rXdRJ>m#jP&&t=0#kLYFN&W19Pd~wz z!PIntS4%IekB+|-udh)2JcSegdA`*vVWUkFqb{Y^(ZMxY%_V@Gjq}BRP$# zERSl=&o&@?Pa0Jns>@^jMnEpMkjohiAf%?6MW~#RDQdBmlCE>EjCj2N<1xde0hs&t zI;xe|J(I~;T6swmjMhvWA#47T#1CrV%Y0m<=tl7MDkr)oAsG|Px}XjgHWIt&ha1RSA5P6fSiKqQX%L06u<&MN*c3p_We+NM__S-Wy(A&)&RF?H=1T#^<4(jN z(VGx#^YTM86AhnwNEw9Qz6YH>Cp)H9rbnmP!h|=Kh2x=b_fO3iV<# z&hp0}8VX@b>jt9d<;iL?fRE*+=AVw|vHcKyY`dST*NuBlxB_ZB!fy2Fy}RS+zy6`4 z__buhC8(php9#2Hw-3xIWzJ`gG2NvwB8pM)=6hk=-(!{cClB794xI@ozqz9^zhEix z$B?W;AMS+*Op1CEfA2aBVFfpuM5pgN3}IAqJ)(TsnZ~xboI<8IZSu&EyVuA|Sro4= zw^A$-<892zY@1QgDuQomQitA8DtSrL;vRd*ECEIWpjM5wbR-Oio?^UL@0>ZV5pL5wXUviKTa4$MOPP0X{f6^PU=rIFff2YO1fp!+U^98@y~8JWnYlWYHb&P zR;&Ft3Sn=ceAlJZ;go+W?}I`~Z{Bj}nQ-D5s=Sr<)eq`vuhgTXjj4F@g$&RbzPe$s z;1yz0SQG5C^T^OkTcHPN>NQl}>To{+&K-ZMDJ<{csXdPU{GQ2zrv5wctlR$ALxGNf zr#PX3Av992xau}x@}cTNEHK26anDTl%sN-^Er^_sT) z^ZMCHPtMzCB$Ul>7|*h*xAE-KOb|98o{|7j?G3(RhhPB}vyw#aZ4@)tlRi zFP}-)`+=VjK%Lxy`vjKAs;WbpUi%#v+UD_%-;gBMkU+0jHu)mRPlU zvAc_$xS=h85zO(d$gF~Wakd1x`^M`XVp|xuSy(f>7*JB0O{d{A&F0H_ zLgUYqfX60eQwiV0ZCnlK@ksqvp{|%1xq;8Z+0wGe?Az*Afo82F^7{DEt$`A46)OE3 zx3Z`{IpBlc;-B;E($Na!tXv`ci#{CBi8y+=L5E+hUJLo8>X82wyuor8qWy*XPSerD z9*u7DoTkM{H%W8q0|F%DWr^7LEKA^|jQ`ELrhmcfdJXDVSA^@umek6@TsnaLph-Rl z=NG(ToaCZa=vG=xB~)=2G}lLCiwA+VWE;+F*0KHv>|`RWlHw>fj0 zwGtrulnI?pg4{vg7}zF+1uT++y~F*I_EWjEMC)*Y?pWgI-4Lvt6|<-jL4W+`ahjiB zBLE61J(P@v>XY{gDLKU(>Y&53jR5-BXk&I3D5VK?CK4G6it8_2e+>{-E{Yg`vbmIe z9o)M4;zVQCW(tb!f0(w^AGtY?y=Vg8mCnS!w;ko~T;8UQjmwksmcq#*wIyat>y{8W z4o@v$w%*Wf6X`Y&FSIh7g+8gKqlw*N%dOq#jy92B9C+Bu&B(;D)s*69CMRX{Wrf_@ zJ+S@xO=G8btk}*duEupy(+Rrkt!}!l)r}roS&54w^xMCPc+gzeS|m3TTfXp&?ZJ@I zA5O_4;5=@g#wi#uGp8LSyrZlxRwCQWn`6%bbSqXZF#sM|f76S&tcauK-?rg2q26k8 zrP5Pu^?@;vclLiJNhVV6uHKsnv~%`?IO&<^>E;@3#mb%9Q%N8|;^dDv#(I&An-J@- z6)0~QqLkBNJ(jidGt7+ST5pUBO~x~wla<)ikfTSQW>XnF+>U0rnvxrJ5!O8OB4-@O zmgO|YsFE@&&a{2bxwAL6{06jgD)!EMkf^P}KX&FKKiI91F(MAvh=f;H6oLr%Jg_>`l%iMBpefKfy=ld!JA^c6@2$7>vkpqRJ`f(s%SvF!#%i&Kh zba1x)OXq_bF(HW&lyqt{Oyd%m-%YFre zv^}vMywaFS&EJE5=IChIOlV|LA2h^&Qjr3w2j9gREy-&D5Nxl{KM)Ew#`f_Fs?dlP{gwoa--HD#@dk6(ASB6Buf?=4_d};xvi>2IL=y7s2HJky$inEGwA+HJxPMPa7Uke06QqV|?*0^Een?rCT zxZc3l=Z0*j^p1hkJ+wv$B$SKI7k^t{-DCaKe%p&Vyv?3(bvFEzB(S^sdEXG=x znEB6*o8J6%zQ@3jJ`Qj~C2uIAPmxF{PgU%1cd^+B}-9PT>^_Kkyw|Hyd zLQ$$(tWJzb8!c~{&)ylc%aUGJb4o%JiFW;7QebIn)z@2Pzl`)gqUu48je7Ou#5=Ha z{SE+2ZK&Uhej}Ho8`ayN)}FnedoRB^h5|SRHOMpTHoe{BU5_a~yxt7D)|-Yq74%Zy z0H4as=^$x_LVG8Rrr#HThSfpf$bG$sLq{&@PbloaYAMca3B=}AsB4+;r+F88KCM; zwm#~#EoS|BT~(my$2@9*4n5DC2gsJZmgrkUC^)4aOm@cWzxlh+S>n^Pu#t{bv;gfo zv6054)>y8l0l;gYP>S<=`n6iO>x&P>F2LG+5=pfmw3Ykn46N7V%ewy$ZEqD8SC<5e zCc!PZyE_DT2^I+M&{%MnMnZ5B+}%C62Y2@dn&9s4?sl5_=RVw-`Oe#U;e+nY+O=xc zDwp1@*_IA#U-Z6B29FO(YFT#d?$d@w$V}{N3#l1jCtNz~gkVvg9O;|{T;p&huzHNs$)(&vB{`p`69bsi5E%7*SPTknyvLZJ z)Av^U^{nrO7!x0ASqasKWwr&xMMB?cRdp9)3eU#PN5>Dvgzn&AC=!a#be&a~Dy~LM zhzz2x;dGuAT0iQ!QbBk(5}FF{(}wVkJ*XVOp99e`1UBdHdq4l4OdzGeB*tBh7yHpu zL<5Zp;LFy}iC8bLpQ5WYq#>6RD zVM#aPQKS32W0oURJ#33u9am7z@q3?a;aW-PZLZLndb;M|vrxAL$HfwvOvq7|Px2sD z8*93LYTl0j%c$7AeDea6^t=Dn*5wKD@g0!E|?t=He=`d9{r2Z*>VrzI6Yi zl2^oWT`U}&3s5O*Ok7&u1W#hkRm8S#Tk7z}t4GY!6YNuT$ic;>jJ{JmbJUTcy?;AY znuc>n<@*pFb04XZ!xD4ED%f-_*&;(*uoHcMh8hfSvQ%jG=!!niJY(VMSG6xZ&mFKX zmeYU+fM%S%4P1D1yx3iwz;H>Sbt+1Mgt(ojV9@Fc#IO%Z(7ZYnp7nGD6?7F9rX{J- zV(V@d9$A0e?uxe~C%QQ8y}9waZ_R+?j*pEe8rvY~=es_yI_z}Hyvd^-IJ2m0U`)yr z>|9C6XJ9O7bpMM!NMA8v-)7#qcQ`DiTx+?skq9YZziVAQ}3lhXYBLHcE}u}j`JZ?c(I{uo)mQD5@0 z4+`PDvU!3Gs0uYp#4Kazl}Z5MWzU`zeX&{%IeuxITPY@H)={c&jej|r?F@~2YEI0k zl>@V6#T1P!v>sLCN2ed*TkQ{8n0wH%l+{OB7;(N4fzcwRz+AJCxa%h*!Vd!v2gseA zd_436bc0i)?@(U7HFvji1u$h~$`75nK90t4E~i9V4XLNa3;zsvo9ejm_k>VY3vvcR zDeS9)z}UR?x6O%!v6d^N7DZa`Ln06sE@NZn(2T5RNhlxkr>Sy|&5ZS_zM57SJ!|p% zBT8msy%bx^KBtOuOBussO%cR6dcGLxJExYpyYCRQV}huK1y>G-{lL6u+{R#wH) z4NV*s6@ZwfCHGhWC8-29BN1fA&SLLtS?B@?Hx^p%4cH5GoUkuOYDQ2OtyNr-7sjT8XXPq(M zf~x<)>oH!HFQhxRYtwBoGQz&`r8)qKw9Y%fI(-&deu$lO*vDRL zT^Hw`fH=w5+DO77s4lH?cz?1RmsVs`nkKcXB1{t5Jf@90?f*@zwjz?5_j~*^P2+*H z?E%6|M!F0-POZ(pV8#)^LYv{4Uq6mJp^a+MwWo9HkZ++kdhG<4-gLdDK+Wq0( z&u#m*s)NO{GW~j^WCSwwO@!U^^*V}~ho=Ei>&Da(d;Pn3sZ@1#Y=44kP8LRC9qjT2 zz9kkG{>>ZTXZEe{X-cau4^iere~P{-L&hi4v03XhwEbFfW}(Yjh$!2&5E5ype>bNk zs*I>(oU5Jv$f3=Vz%#titQ=3$r^+uPHvc5RmO=6Ov6YC^mlm+-#I=cB>b!~!gi4U0 z{=wR)WvM8c@c>?Vc@8 zLVeF)#gnx6x}UP0i_>J#@1Va6TMnPDG)7^XfbxDC(Xn)kM0jup7UjwM{L1Vvba|<6 zCC#7Ph(PS(_f*(47vG-vVnb!SW+Ec(PJU>89-l@k6LR|L!+2Q_kZw0`50A38ntEW7 z7%UrOGMoLo=lS;-IPKb24ho3Ie+k`qrP$!<<9up(qG8~Rk=u%Wwn?pvh+wteE(mk2 zI{!)h^oK08v1fW<9nhe>6MVm=#&S9*A)|{KF?iQ#MxdQF5L0H8huz+jVB2r;X8B%$ zVI8@C=AxvaK!5r0uoszaO3Ww!yL~k`H9dHmC5)!*o%3Njx9rsAZ zBqa0|*uM_<%O769*go8Jn3$UbAJ3FQX=%{{ zwz}%#+sbravp^m8?RsO)r>;)QO)d1)y5w-?f{#`iE_M4+=3Y|${uUI~H8t80ON{Bq zxs2mg#xpKWLMx-ptx0+fM|r%h3k0iou_QkZ=|6?|1CrJJ9~pwhKCQTa}-;1TivBtvr(%VpJd#4d<(8#j|dC5}}^P*=QJ zgF1m*zX4RM98OYwT!TZ+Rk+CeLg_?{A)SdJDZ&pVZE^UAD0d#@qC8+|XvP~tDF+l> z!)17C89c)6 zk73WBl^q%!=^QNwN6A0mqjs-u6BM6!II^w(npv&v&DZN06~S6&E1V<}NDB}jhzUPY z;Z8`7SQS0-GI@V_%AB^Hr;*6bJ5%!`)8DT*AF$4|_Fn21rMps=4)gRhjNJ#)L~{rX zrV!AX;hh*BMOYnbhgN&E&iCjvEt-6&0CC3_^7JGzc$d9b!o0mlr|7nhJPsU>c2wrM zcd${9(tljsD;6u?{`!2zw2Wx(fx1B8amL@8U}pm!+X&74S=(PgupMxr8}eY|{;X)j zW2WNO7N0R2I`3YtcIxYsQK5Q!Oz?oW5vX*1uF@-G@Bwz8 zg>#dlsii!Pb9I(%`~!ap83E%nbBv=O0Gs(7jR}1T1-yf&1rr>NDzX&|SiFxIYToRc zad8GItHmFF;c<4EyidrRuzp(=>`nr}!%%F}zroYF&ZNfV0utqghqd3`6u)|8#To9& zD1AwHXhAzrzh!G9?EZQ4I6O~} znP3_Cqeq7L+QVqKMLld?pXNOQb>2Sxl${tvmvXlnfv{}?PX3zf8OIonj8u(wjigjF zsQbsq2dZ{J^Zfp^7k#-Rdt!9%u3#Ls28f0_#CkNaO52BvAR_SOvye-opYn?f>OqK< zs{%*d{@)s6a4OZti;~?>5u-Rd;C}B~B#7C;a#rz3_7Bxwg}Iwym(h+QexSJ_=VSd# z{!(2trR|E z_^hm$1SWKBZ4`sn`^#~Um&asXK^rxecs}I-=KkyPHipd_GD-tVj}PJrmtBx-`y@L8 zb3E+#s@J;s6B2P&hQdb=uFAbbB>oB)Q>yT0c(ksRcEvn)yb~pb7s2H$EVZ_UX-2DO zZ=9L^1z$*#j2aU52*AWGT~Z>oV#$~$=5#>iWU2oZTA$&ZNq@j8Zb13wh^{dWn5iwW zdynjc{d~aZt3RGR5 z8Op4%k66nbD|rowR6o%S@~&vEw6<-sQjNtQt1!O>{&C!w!Cr~`h48mH5ND^~IFFs> z=Gz)^|4V@;&@R7l@KWkTIZDa-ot@C6s(^u<^7D!N@ZB6cP+xxF0nXqL zQ@dv2cu@#CPs!W)jiKoa<@i-xdmz5EeyiF>?)o4w+l0{R9==ma9AX0a9*%BsS~brq zcqhKH=^g{4AkB~K2REAPrLC4QGq8ML)!R7yV!L^aA<0*!IbK?3i0jSC_2|7S5BU`% zjzz=n)p6Mzq8W@dm7iXofKZ6k?cUv4L!FlY$YM7CxffBUTlMQSmyw$W=zPhr^0=qk zes2eLD69kWu=d_M4P|4@cpk=B4qJ=U({GyX9BDC!7B#16s#xUCR@R$C&0JUveUk!xVX{ z)lT|HAszH;UOa;gDmn3s0`BvbQ#{g(@v! zP^nzzjyv zti@;GjLzhj{3_2`jAKT9`#ZC=NN{n2Ty)+7-lJ7uzkeE zDb13G(Xxr)vd?P--$rgL!b@68Gchq{>DZeQWhFbIeKIh^BDCSN(&7tkKJ2=utM$XM z+M5!_W8t}*6m}opzxQ{UdH!axK{;>p%Vq6)y!T6$izPe3MTi@1^8s{=lSiP4?UT9W z5&;2g#ru>Ys=X1C#n2N}{7X0Waqlv_81Zu13ohEi>cPMJUl>2o?2|Oi7Ab0q#T&b% zniz2(E&<~xf$~#da{IUE~w1Hbr!w{f$_vv*Z<#5Vw!*@8W$@kd8C7?_ySa&q4w2_9Nn0QQTU zab!Y%3?w8ZNIzGNrZyQ?TxI8gFa%s_^~|zX!{$$RJ2isduX=2e%1D{=Smv`>dzA=z>zDu<9{kDr#OodT`pCsq;ZsLDX64j zK+^s4fbppUJCc7)kDNT^G6A~=o5?~1+-dp|!n-+V#CNyEK{3!hh>Yo}+xlD~;n5SucTL&h`D#Y=q|3FR`q^&*n->UGoU1 zL+y7Tt9dGT=LVA2S)teSRhJ5Bc6$71m_NKHdlIbTUvI$fQv5-9LsFa$pP6gkpVKXy z&Oz2*f*MqF`&iPWJlYT6J*LS7^G$qB-0N)mJ_1v0G#{zC2QP8?*PijwzaqO?B_0!5 z=}aolq4EUU#yfcK#sNZ~ojzQr*G_MrJ1Z_63JxG|cu#ndx@fQQ4u<&-kuewU|IKAP{$#^va`2%gxHFbhr2Vg?Cw`P>W+m z#X}?B@aOBcd~lANA~p6gF5KZgcqa}$SFY^cRG!|HUjM*ew@L!0(3S3|&S`h1ZMPc4 z^$0!%!JNwEk-0cfc4}FrH2%ccY&xc9Rj2XFJE^Pj2pDy!R~}KY+jnO9ylM?&l& zUpwHJ&-o`Xu^%&Na_WuDjW-DPb$QDPU-jUi@wugn94YQ{ZukdcVQ5*Rbte}m)FAx- zdddRGOd&qz221;k@_gP)K6#?E0lT>a{y62ILihw)45?zDHfeKS7Pep9O`IZt9PN4Ub^7 z^5vC$4`dp6k4sr#F$DPXPt6DEWRubDEe|1Fsw(!vg&v}2ho9$SzqMg^sWUmGqJxMH zLE?gBT$y`qASoDme%h!5{rk#;CCE?|U1tR=HRbi^2{f@Q!G`!YpbPD1uLX{SIJTvG zB~-D(AolZ30Z78ciGW6a@STHDN0Qz9rK(=i0l)?IFv&~!--cdA1;H;o^ajpQ%Vl{0 zcrW%iKHN%yPbTy2aB(XLojuV=0czYo#*ijS1vrO#?KHWqiplMG0|MBs6l{S|XXj)l zRhg%h1mIJ_N{_XQzU!P%1>Sv8U%{>i&Bn~TMM%Tt&Thj1XE_cBDQcQF_a9HzCa zJULBaAWJ@Hbu-kI9qC?)>7>p{unx8w=KrCgh#px3cMZnQbdgG!!XdSiYSCL%nCQ$SQ7SEc+31TZrr7g0vP`?Gq29Pn+%QScT!hE zK`|Op6S~cEii{ITh>(}_{%8s6>IufXA+2~Q;6*t$J{w{jM<$kAOV3QPC{4fn(p%#}`q!X}A}8W}zUaJ}>L` zC@R7B-^u}}%Yg>E6n5khc(d>3@W(7O23)Bu^p`iizxP-V(j&(4-FFc5AA-%%UcHQ- zUpKCo>?1FPRj)?MG{JL?8mdnX*JNcCcc+`52SYzM55%TAM^47Vx#9)*uf{d>_;ZomARrc_POBKy z9{(JU8l+cYL-zDH13{agzlktjSbFy(zxxZKciTegtbfaI6cU}F|L&FQXXmb=ur2YY z9g4>H%0!{xPlv~R^L3$X`tElsDQ@-}L(e07-m@+|lsn(SM*u{1sln83Ewhg>5`2N~`b%g~VDaNNF zMB^NO-pT1KC)*Ahlv|5qt+;p+W z4IDX?`Qj>cDrY9>kyNNubSqiif5_qkNV>hWy25AaW%xeS0;1N1M|SMQ_~UFHa9Ah7 z(tFS*4vgbUX-rJ*npQZrI4yoc2COf%K|xxG{c)UDiZAWTasA@CMAxFSuLL^_S6et6 z*M`r#K#05i0Nt1hncfr&DZiqeZO493x#ZH}wBSPwSf7+Sf0s{$E*L?CxN6RI&*Ut8VWdA~Zs17bZsp@Ht@i{^>KNXk&fbI z*f_nT$Y!<&;u{grnFQ>%O+O$xKw6~2^@ZeMgaUL26q@Ysvs?^Wth{z5_#5)gmF}a| zm1%&B?9K&G%;6*5j==`^=KZNN89LFm0=a>BUe@eX6~G!J9Y3r%l_SyFwM70^z65i^ z=1BXnmRpz5N?et_bs44I>M`(i4X$*Zwd5|o7oMO%^mh{euHQ!<3osV2I1 zW69p*T zU~LFbg(YhECP3*EUj{E~%4RZ$8%f*5HEPJ}`c)5%)fK3UNXk`J_c7K&5jR^5HhE&Z z6xb=SS>&~!mIiK-Mq*$)`3Y|?xP69cTNUv-z?=nbbnp+N`j{fKM!lY_^ljx~tNy0X znOcEuiDYs9QN${Kdgz-3KCchlI(=RHk@vH5OddQyUBM+BVvQ1Jt;u>wnx)$0F=6Vd zv(zR_H^TUvtR>GTT+Z}ohP|w(`IX7p(g}3^_-*oiuP2V>85@L_(kl1YcZPlWR`_dh z^N;vJL;U?z5y}Lv>W7WxU+1gZGpm{q!8bpa7yZzkTK0$ssIEC5MTTZPK1yr=HaVy& z=!6*YDl$R;ees-9u>JL#DA zBEGsU{FKp^J+G#E8X96V{mF~OFZiT4@>@dw3hvQbySqPTEh#-nkw5qCnj53EG(*O^B~BkT&~ao&9{GU*-*RIXHIZZa01!egux398#Z zZ-e*;#imcQAI?74<1G~G_>u!7((o4vigqwxuFe16c21^|%le&{Qwzsq;VA2}S=r=t zgX`-V4^YAfri!J=dY>}%q7aUTl8mvzYlZ8@r2Y?VKA`2j&E5vYP^Ur z5)!I$o!V$AEHOu)hsi}F9TwfYmI4%XWra%!W`krV852F2sogF~Zc>j97If0ctK>HT z#K7|OViE&Lq;-eq;I5t9zx}B;@zj6|CD^(E)PfvpzHoKj&;`+MO)+Mz%%ycXj_-7Z z`mb}ex2zWgGl{$CwyQsBV$Si2EJzG@TkK;F-kE=JD51XPV92W26pZVw>xcZ4YRNV+ zt{A+bBP8^xhb`{jhjoLZp4>I=YW)JN$g?_fs9b-Vc=jLQ-hwj_e>icc3PT4T&Bagn z<|)ZvdB9@*X29`8xF6b^_gQ#_)lbK1|fE6U##kPxNw9`TH^0uJg8@ zUtWxJF-C$#ZZ0t^NM^->c|SUG8OmMZP}-^U_h8?cnQWd8%Q?G?SEw>j-<}!PPw%=|St;~Zxw@*0ytyFo)of7>rK&ZE4ejF{4OdqPwd zVpi2GLxX*cQ3Y;ixP#UGx@~@otPX%#4`Y}JiCKUh(U3{tOOKMAXZKB!^o?0ku}>FiQHG1zamrh?kabEpWM7flV%len3^ zyp@Z?8q4ep3Sr}HClHGRud`y7=qqNC^$V7q0zLv|W#xCzo`jA>Vpg-e?qky>ZaP}C zaytlL@9nW5cEQwb)$nCUn+W~`L1A3cZFjOttm2-wh&H`Q+92-j%xR5sviwzQn~h$A z?UQX9-F4DBk$lNr7Rpc5>#l~MnkS(JU&SvLJ?;#RDGmZXePu5~RvUxLPfhW>pOi@A zZb>Qz*eKrRV^Q_h?DjoN1QOyKE1~l$D3W`MrSBuH6aGj~zTP%$_Ynw{Fy6F)iAe1o zeVn_JqJX*f$VrRex{bupymzmsFafTiB)3U$+P~@cbkttc-t|+v=du?vORZ6)E8Kk{ zvxG%Ife}+%?j*8_q?>8lG2y*j$_@Qt)&~(^2;+m|xAM?lZZh2?4|%dYQ96yK-syw- zOA(&h#{X)zkWheYoL;=U6{k0OaX>5{A(<)&)P`;6ASKiBB{=P^V#67=X5pZo=~B<~G-@ zqaxIiwpkLsR_r*Q%sPB;j}r}izl&0W73+CVVC(L&rqqP|JMe0GfcL8OXQfI-s_Y^- z#sLLT56sEe8y&-pNZmS9J<=iQYubCrcQ;jo1|Rx$uoKD#8;&*WYWJMduv49I%{P9B z((Q;Jn$H3!dXWMedRMw8vKe+_#klBwGL2RVX?d^BbHL5}u#B(5nVLx(YumxOx$2`) z2KZS~7X!C^>XR%p+baC@3M93M-*mXPT@AU>vm_mh6S-9Nf?S%}Xt%B^&b7lrS8Hkl zv>pZ4Hca#`ttBA&B{C8f0{t(n6H0_vZ1w-Bw2Fj2To1^&R*b%_$qJzmjWFSLXTH`t zU^@U>#mbGjFJhW%6JUwZ6vXOqG3Fd9m=3g7f5e_rFA?tP@JW@cVB6GsnE7V^31vTs zHQGpY9G_DoQn})yN}czSZ{0%m(l`mLM264dm)@{Z#K`N{p>S}2yAR=#4dY1%)^$k7 z+-1N|YYavaLK5yeg)+_9tl_5R?WTiy_f`e{@;&yyDAuMPP}Bbsb}l>T`6d$B8{RFn z%*^i@zqASrJ%I7>W-Y?!W<+N0Dd@QwmRbQun!~qhI@@fEX@yM=%_OUS6BrdF z%mPwsEeq>MhMI>}1o3(%(Jt(XJ*1?&d#;+uBlK9XE~b0O?lY;c{IL?^v%Wl9JyDpI zh1;=zj)`_BL;qa3^f%SFV)?3Y?rZWs4+Fg)U5RiN2zY;VMuf@NJ=;yU?X)INh{dw% zj2rq|&pXvRrex0NbAn}EJ56VI<~3?2L%02y>`u)^d7?GMS$P zEN4Ou;W>IlR388zMmafLOR`TKT$kJG-=`LeK#^GG*3`;@D!=gId-+9WbM~2#G>VR# z%OL{z@HzXH&s&_<$~V*JGOYjd7W`X|TCGpdbY!lIlKVGS9n`EOs5oiwqIOOUphtbv zBofjYcZudvD5?H@cL_HZmzb&uFu`e(fz+(>a3p4O^IluXGwznu|DIy1kSM1Abiy-A z$8!Z#$KegE?;qyQlKtXD_}vE#dCnofu22J{W73`#1ZfNgtmNzCic{78HVc^`P;tWx zQ(O2Ys``3DmOU=yLC8;6)ho#Q_w}7RrVvgnkST2mT3(3pbeL~(ldBOMhu$(TlkWEx zO~i9bCJckm7r_TU)pjeo?9aq;k`F06ORUNUqtq4ZJ208w?@&=Xhe@)7<9p7j@^;d8 zJXWSS%_4J7tDGDgvGNPZ>T;rNf0h_9KDB+75lEG^gF3Bb|1z7pK5N34Ymo>kP~eQ2 zn<2YlIBIVCJF`kMAp9QsKFJFK5o3c7U)h(RJmN}K(&8e4hx5HT;SoRIIHWTvMy;;0 z6^VWT3Emi8E=*WT?d-h#X>zF-x!)xFZtL8xJhMcpi^@ zrr}?~X`l+R=3%dxjt;`wj>Aci)pvRUr?OXYQOGJ167kb}JNZ8Ob5?_~xE8&a4`A>~f&U8L{B znRk5|yG^PTdGF{n(I()L+7$!mT{L(dF49rI$q#KK(M(!57ooo%HU+IayqM%2mHk5h zN>;o8Jb9{sxKUa!7rBHJ1yCOH=yMs;WGujsr~k8p_(p2%2n2oq0XF1MLz@39`}Ow_0uo7Hp7EbkX|#+PTB*X29x z-LWjwk-hUJHplP_GoH){0dGAqd~T}v3h$FSx&|H{VgK;Vk+pX^+pzy@Zx+(zgM;X~ zRW)_S%MV=X;gJ+PJVB7rg)Dksjc)BbFuV@ze|cQzJAK35mbXu?hcah-9U4gaJ}dnI z9c8i&Kz!h%1^@S>JeNblo`Oebnw#6-XHUZI_ZIZ0 z<+>mc>vuHGBgxkx4tPsDRlk3#fq!T`iL8HVe>n1*vEkG668Rsy4R%b7RA7;fk8s(a zV~g%o(3`7qrInNncn1x0{SCCW-`LowtfJDL_2pGGw+Rw&&U8M;@Q;Wpx{q1Kj8wxfc%Y}Zc zjWo)Ji>&|H2(9q zL#Vfx`2IX)BK|B*S2!>+)#9t8IRU&ou48|F5R(zZgt!gnFe|^ijIaJAg<1`)_m6=vvyvyx2~$ ztGBQH_8zY2f7zl9#lOVHrH$4fi=aF4r{;(U8e3WxH}YV@JM{gu)@7``E|Q<^YCB`% z8$NL%yt{5NxW8^uf5OxBH^0rfnpvnkd(seoJi&$J90(oWWabZcC3T9H6JKo3R}~xy z*O#q!HHpD3z&g_};&8@hWiPLbQg|C@DJS~{X=&ax~gv)&uepa6^lk<;)urv-^N&f zmF=VANZKPZH#au~wR0`@JOeL?g+3N|kX8b_f7hRhgdN|Ro12q(Y|*!`KB4S_`xsBF z4SyAI_{iz79BXymj)Ni=mhgpkf&AvL-Jny-(o`r~4*OQtr26);#KxErT{J`=X4B>N zP+}=|r_Zbxpi`f@kv@MkaLeI$&6U1CDPj9=*IzX3BKwac-A48SVoO6vYVr)*3g1q@ z7e%p{>a8GWlI{$yl6rycGU(+%C?5W}zowp^&ZUg9pZL@SStqZ03SOBqiS~NxMv$n| zBWQQF5H{FRiVD!hy1KezTvyylJp|z1AtGM7op0|dmDVN6vg<=Q6%`E?U0TG(+MaJs z7-3@Kb%_V2Sa4cFUS53qk=(^pouUl=o6yw#x6s@qz*vOb?cf}UqbC)j0YFN^{Xg+Q ziq7)gv46dTUv~+>45C1cl@kM-FoNgKb zKha0^{LW#IJ(jIaU}Jwh(ho5-7WMr3^#)jcpdaulI4lflc=bLQr*`cgcPGYpi(maA z`S<_OUF@i@S)2q&?s0u2pJZ;c_1`%k&4p}jQGNYd0n{0Mm!6>qAx?qWii8BQxy5-X zC0$+JV{f_Nbg^4EOgf$=k0dAW@uo>Ar;L^aOq>^9}gc+K5&;@8dpm6J69W< zC4?h^6h2p%E^?kkN}u>+H$mRM_L8*aJ?%YUtr5=>d09n;MUmE&$#Yu6a&g> z5E7+1^V+#bV4}zu9RS~=kt7>67qcd%1TiGHc@PZN;70l{dEF?(M4X|UNJkhElalfi zkRki+o2Eja#N}uKN^h@(s+LxrL>Oc${N_ojw2ck&__*@4ojtpDAzzA}Vh~tpe1XZC6V#tt2cRjo=rpSu=!y1q1@Oa?59sQ@HuTze>A^bE*9ufCB1Xb)=Wm# z748f{!ggKxsc)!nu@Qw9_wm>rC5JhQ*Ky{0?|fJr9$kH8zj8w2s3kXO8qF%a7x(XJ`*@ z2GoN6?F*MyKSU7ulFVd+^q=w3xcz?`8am(Bk_kD|ib(3`JZ)qAR(=!Cj5T5ZdHUr3 zUH?{_%c2CNBFP&y4Zytv7p_yl*jNmpgG1+PrBF_ep>BshD9NBar}2(Pj%R!VQ-o(w zTAEt1sXP`c^MxeZ?dMb}$hKf}Z9YfzSiYUGgm7qx83oXjkeOj zA$9NQY;zrL2m+504*7qb)F(w6M(Fo@BvXD}eu0~NbJYM3M@I?~$WRbBw*#wVF?eM{ zdT8|jrr_jSH0W%}Fq~T3Ls^~EdQqf}u}pGGO1-8uG_ffe#LxewJ$Ccbu)Zy%8uLFi z^-qylzaZ8PlPcCPUS9sSqm97)`~b(ef8CtMpI^Uz9U1~tDP|NdsYPr-bQj1jB6|LM zq72Rd>oo)sY?hPP$4Xa86z!W`9P)UnFu~5kVofh--2tb9V?L7TJc+K z4HF}NRO5rDsm$PcCCRRN-_J-@W z^fsAyyw~1E8kpL(&MbzuWpxB$GS5!T!%5z<;TqQBcaiC%dck#$F{MN0smH}%NV z;UnZg{9oPtF?~qCl(!@L<{Hbo!`*JzN57bunVnrf)af$PE3f>E6jRZ}FZgmH8G@2d zE0U4Ve_~xb1QhfNsX*mAwJ8m&qyTT&}!%o^wriht7EXE5HLZA$kE$K?QRg>{N zJ6<=b++>Y-H03!1jfe^bEWzwtGJlljAuI%K+D(Qv=N z>8ctEe25=Z$|E8r^n-_(w};ihp4Dfh`BD%+EbbpPvb>>Dn~w19HfiQCc{&Lj+LE3B zwMu0Dk$zvvvb%d{Bxs*D{M#p7X(fAwKTyGBNe>g@Fnej@lXy^M=lpyCYx_gEc+jmT z$&U|3)0%t^4y4u{cgW`Eny{$tZ40(G(!I+<`zl&EgA0()=`_=oa>H zFnZQP!)_;Sza0o0MG+R~6v0aaY)MTL1}Py}T~G=Na|WUrZHO zmbDPqc2fgS!Ci`m8uu=dIX8UW$Cc43P}?#dw<}+kXMMn^fmc@xD>yspJFP?BtR9l~ z!#ZsH{2g;vYm=J;QQ(PXAKPv)5pe^ z6SJe_^Muzi5O}MhO<;eqkQDMo0z^bW{FX2lQ|ZBi;E=)1qen|V))D>gb~S7M@Z`}( zP{tA-w>AE$_Y-qk$4Vz{C9{dH8wnI7O%!P)<Gu(<)+%&c&B>qXdy~XkG2#dbRrgzB7K>O-A@mze-nY+o|CG#m0y7 z^P@vap$dbnxcJ$h>+OozH$rB$x%*=DZ&}7ct2-QJ>eDm&HHlS@eH1j;$z8v(3Ga3e zQOe4Qh7U&5HA%B`iNDQ;STYKmuIm9@BaG+q<}?@YAB=_WH3PUgv}!k06T#!&VC<;2 z@Dz8I&zt=lR;Rh)eQ)BVdrA%fzi~R7`O{Dw504vKWc52}R1ALn$t80bq=?H_QA62h ziL1N_gLbp#sL`RNzJ9t-DjM{zvo?uJ!EnG3ZpD+8EbX5o%LWD`2Ataf%+ zedfigWS4&q5f`>l<*8)uB$MIQVf^Boa>-JL4V3T7xN z0#O90x9U=B$7-9cxd{+}Wh6_qk0zK1#Fjz-Yd;150Mn>UR60`SyN2#;0|P1VnlIBz zqd6@!ecGH3D0|vLe)o|wsp`R?2I2B&nJhh4%az&EFO;%$^_a2nZ{r?e$y19+E?3_b zOn4`3k0=sZi@e#pr~bdA#wOYAHFY> z2*a3M%9_yR8M=}9{)&LR%Fz>9tjXGfj#xL0FP|2h)03&Q!%{-#pMm3IY@K}_7n z=0-zP%b_ig0u1hNp9~>w^v3dvwE%#PorA!-x`+!i2qj$I$(vmEA5Xvb!>TQsEnn-HE zCwC<8TatX&F~jgNdAPQ=K5z*cd@!G!jl)}p^0HCYuLJ(C zgW%Idj>n+@CXZc9k|j^X2nOHi5_)kf=Z!@N3}D{jS!f($PWZtFZ1KSTwqhUn9ZMwd zhhqANnT)Y5-7TO3Rq=Zfl60(4YY3wl@k+i&BH0ar!v*s8q<*B_P0X-qwEd)~M|L>2 z-FgQ8n)tkFxbpm<y11Ak5EztP{6Q+e(?AiJd^AB$?C^U20lC+pklQA9! zcn$<@$kNb$Prx41xJVn#TU;6p1B@QglA6E#3QD<|d0&0>0q^?Tb-wyWM@CnAA?a?& zJQ9Qf6Y=}Ahi{g-*$SB>`TpYYtXTslzN)wos-L{a8Fhby)9mI!)#5C7kr?0#*yml9 z(1k7}JE8LdFL5VUl#_9}BMo4A7>{VBzxRs&N0cN3{187c>FS)Hl?^0wn6uojc#tM0 zYIxRILZ!7ovoa)vdeADG-yAiKc<-_4LJ9yKN4JR1uIz)d3Uka&Y=M{7LFTfiEjga> z_(CaN@9RM*T%W$b66O~RqLQaZA6a-m{~zMsIx5PjT^lD<1f&H-N~NV6BnC;57!{>q zK)O@9y9A|S2nFc|hwhY??uJ2f=$e7~J@~%wIqzBLoZnjCAK&`^U@wMv*0cAspF6Jm zy6$b`dD=3TqAm6y*Gx>I)+=qWg51V(@|ry69;p72z2i%r?Mu5;3g`D1?sfw17b82W zpw_RwZJ7B-S(n$;8yVfW_-8%-4^^#8>b0LDT6~GiFqei*SR~GFXk)r7snuGp0&=*A zOk&LhKweepowFJC*jn1#XvKP?^+)p2k4miXN#(p_gWg834n+k*VzAWC1?r2d`}3#M zUKCAdY?)DnQo({k6B_elh*jWF;BBfR;p-G7;5zt8gNvIYD#kH4wZ$346!yx_tW z{viSrT(*6enVhtRaFZtb&Iva){f;oleGM+hlex7%z0XEc^d=mtw~<3`E;?xugHz`P z@7hgDygv8Fa+|kX_1WtDWfdbclRfVt)+TpaSAP`&@*I)#<7W`n`EYw%+n2Avc_7VD zi}N9a*-l>PH@0I%3>`hg2F?(Z27eTCq`{NY;|^8r!|1O_*ZWk1%lrF%rfZ-6g8I+< z9iqJGq~}Q;*R-x@`nG*HVK|E=71bDc6O5LyScimXu;4f5GHpX&X7{__D!Gaxlu(wKN|JL! zxG;tVTWEXQ-OQuYS*9qypWUT&KsDmv=;WP{k%eJ+g30Nrg3eEKf3qE-AGtZ|RseSh zC@l5VRDlTdd&QMzNZr`0k540l=Y>TcLVAiA<@JhT7u7EWsnO!W-QUTuyW7jfJk|5S^^^l<$Lb!uomqHBCCI}%0o?txs8q?Y`^P; zv-cstMq^q`HfSX9N1Re;SG3@E?-Pl^ zX1T6Yp3+e2)M@PTc)Z6iD9m2{$5T~DNE0h5;al76g@=d3V-7mJ z4ptnS(S{6DWsuFQ(;ct#YkA2Fdr@CH329|zfoc~QO)ahGi0*Z1EbsFAG+E1jm!LcB zHH#RyprZ*hM3t%1so=4tF~Gso1Dmy zNT#aD7sZIPDMgc#Pv0y{U~P|9yskCyE`s>BzArjIiA(lg=}UiZBl%E;PXB?I8^=U6 z32paLJG5WxYE}0hmV(+l4A2YZ-?N+5Z(h83scz})9w?|`G*x-g%cflKdWXnIuiAN_ zc1yd4w_^O~!{XxiCw~^Jv^~{b?op*sP0V_n-S6(}i-?c!pP2m{eMfGICsBrYzU+4J zS=4Ybl+yGQ)C#5G-D;x}uK=R!A$`H;)cr_=k19FfrI)2cJ~_xb?Tai;y;pQ}AXA8w zn%Gc=?0Y9?m+#qn)sazNFw2Ha8uX%y)e4#nhL=3rF^8)9jK?U*4<@xZ88A z0Z+HNf71EUncw7#(_EInS>03H2ZB3<@=2T{uD-+>y6c@n66EA&{J%O#mY$SY;)NDC zTVwyw`ysAUuh^GaB}0szLGw~0@8c?i@Py`j>pz-lhW}xD)tm5NIyyNiDk|oxNj{b-@Bl9&+4%xkjh^1A(9bS@sbK+n zp}jvK9||XUb7y0y84usLtM{fpGP(RtN3T3Wlud``lakSY9^6CDd?e#ZrHbKNzPudf zGxK7#VYeGe5@TNMp=~N!k}U5x&y_%N3=ey!S=6|;<%V3hQM4?&ChQ^C#o_Z}simBl zv%J=}X|VItgzeF!Vx|%|eE*<3V|zxy^2WEe@Tb?vl$1J^Iy*B#|=nkI$1_ z(#aBn)G=w&MpIDF8$qZc@Ctq!Ce5fFB;X3Ix_mRE-$SbQ%`vlL!2KB0V}=dU&l9fG zq1gG^AN%^r76ybpZ+N`gn@Maf(&10l7Z`gYk6F7W^PqNn-vs{F=KFyySttmWRdY7|8chk?_IwGlf866O#oBYKSJi4|t z4VKXlIq*)zPJ-u@0eGfMr!ev2?s={Z`-TfcJZRI;|E0*f+%eLZJu!QvqqU;89?5Ft zaO)L$nt)=$1rlbqIB#}vbOfKTbHlKu7mE01EAdK6=_w~?Fz{Wi_cSX8u(pvkHQdK= z$-uI*4EIsxPE!MnjKl(6@mN{eRdVab2I6-%MD!sl(C+0k!u(+c(xeBp@ z>NbZbd;Q<`s~NlG9Jf-5t`TX2#Ur$JE{BZ1nHp=vBC!qK>Kp~D5zssq+o1_NkZCe^ zFfOkwq~eDSB3zmJT}7kP>9x%jcx`d6!N7?rq{WEzO~XBY+p7gSS0#tzf@~(&lBbItGyax^B=`3Wn_s>ESPks ztBo;+cesv?eNd4eP$WG{!+p#fn9}h);$`0%5sjO$gbkMy7aS{?OYf181D{_1IdM(y zzZDceDmOR#SkE6YxPlvNW}D$p5K!NP{UNvFhCzcBtA4E)Ry?*E?OMl(jf9=g8JbNQ z-bs-Td%S_cKz{tta~k@imO(~OxBsiAy?r?|?{?3&(&(SsU#WNTHIFyt%t6VDP858b z8EwwxjlU|&C=X-G`eLe&h02XDU4{xg_&>EdCN>Kt@#HB-d&A-rDuDCaJvQ!r#KU@Y z9>aZMx|cUV50{5$T4^EmE@f;`UpuHKots=ml_-ZMJqS--udhD&+?W9MWQ~-|R+<-g zS-FbtVu^h+gk#6ppIUOYSR)ndv~I&0cZxY$?E*zv`EdI%C#_2n(*4^W5KD%!y8`t-G@p&SUFYN?UklG{MM7pEtPGyGeu%N@qcv2SY01|9X8Ph7v$D8>_Y}6lk+Jy2iP&U#1}Nb* z^5aA2N3-k z)LIROa=j;>q>cB*!J04j^4?xY6w=h;;uj_%?IL9FM!6%g?HnX?f5i*6ioQ>b<(jB^7IPYClq;{B1IAwT8V@peq{yzWgtayY{bNA z^rhB=&2G$vhrDYdGRgc5V-BRhq-KH^HGL|zhmQ}MJIl~Bzn0`oTt^I1Rmx{zvvUP% z5&h;Cqj`CC8;PP*-NskbSCTrbeVGxp8`HD1mAepj^Sza>NbX^rW#D*k7Ji06U(~Vt z(eZJDFt6r+7D;yy;8_B#hEX8myZPDZ7(%8PLLU#DW$bHXrkdm?H0Y7~=_)4q)V{Mu zfn~nZ($}XHv+1y^|B2*w)?%OoPUhmBTFAynW3S7E{JuROO%}cJhLYy@&&fMNKmX7e zmV8J~9-E%t^{I8Di-4M%`WYD2wdn0x>!Om~Sa6%Zr#_N7s-uoA6TKKIQe)>EreS#t ziB+R)2`;|0=a>woI9wJJTSE-k2-NrFCPm(H&e^EqA9eEzPQqiOO7v?H+Z?d)4w&XE z&2ty3$XnRTRxSi?J-aQ)@G2On;l97#y!s@NS|}@pToMjOzQLN4vTUb+h^c#-UbUs} zc6DB+o7gqjK?MaA$ZTZ=7_3)2SX4|O&^X_I1ogcy$-hJJjje>W9s>r~-e@@;edv(W zn2d#|*rctw#_qj;ME+VgAO&^sfSC}Nsr*Esr$184(&cmeZs8_&uyJ=NS;D^JuP-A} z83K_h-)$<|2&olH7A)7JGohSvYkv{1g>LizW9Z1n?K{-HL}?&CgJz&J==KRrJw zXXf^(A(4B6VM&_3?c<|$*dzK@hUC7K{-}fMxcxHj7qeAtaGx*8Wq)=k1nr}Eks128 z;S75usGX?7r-O2Lwn>Ii{5Dj5+t3)97FG-2OW-0l3(tXBeW67x_{>hL-XW3 zZea%W<{9yWU;O+k`ga2U;d0HfwjYNULhB9Xp46xq?i=-M3d|SnGo^ldBt)U1LBF%e z^-m9~Ot66q>mO*8e)&=o;D1FL%Gly8w+G`p^dmJrQ|v_m1OA`(2C>qJ}`K z^TB5z5F(`H=_bWIp>XlRev2O^1qVF%F8=*PjDDeXD&6Mikqu3P7!zuV;&{}&p=?)c z?2^|^X-dJ-KMCl1J3}dX(9MQFKkRF=yIz6yS{rfpnSW$+XCzw2#yR!jeSEMQU4qB@ zp^-QxST|0Z$k4A*Trd)%^-9qKHzy|tWpsF)KT+4W5cHOYO7bJ#S_n?O3f0XJ#Rj1% zH(<`%(c9eM^cOqvK4aJi+(M>7;1j=g) z%iCP}ZI$ij-*sqJIhxQa2|($4v2Pdu_#Hr~Ngm77gk53B#>JU0H8Wte?9D08r;Iso zkEcY_Vu{dFcL3BHtlt$f3S3Mqm6oSCY0;cI$(=vvaSvVd7*8K9dDXn!K|Cs8+P}a_ z`Vi1*QqVR@G91AsjWItr+NZvQ7Eb5XeevrYjg0@mo&=Z!Qa7A2uoXpg{avy@R&qx- z|dY;$ZLSfPZ+^5g)VA?x6w$IIl*7BQBz17#J1AJ?EjQTY+2IQW(CsrMs z1aW~MDSL4&E=mFn#2>YkWQX)YE&YP;)_gZUw%;vjfrKkHgg|{+Z827O8I#;bk2Cx) zW-x^I9=V&jrX`%aj@9xwPGZrun3>NUwf3qz`(PXEK^Y*0kB4`(HCZBdEz^-Kd``u@#Geirs^3|1_{<9u!7Ox{;6FBo&Re9i zhA%NWwOJ7z0xwRiL#vp>YeDfk%Q4f8uXSJW)-t?t4nw#osQuxMvH)|!gY!&@lgWDP zq&G@z6Rlkk;~>$X&aJ)bw7{E-GQJ78tGr*@=p8Jx8>!q? zfqVex)*QeGt7Hc-EI*^bh`71RpzU!o7cAeEgoDIGs^vy@ zZ*IPjC=LAkm$;swGv@`s@0~sDJS}+f=#{SF3`TNoKNgPGM|FGiHVciV>3y=5zxDx(9 zu^E7ThwN{m?!VpA|9v9z|MLm(fNh$W&*UoRC9g&-2UW8Pc??Imf0j%>f2=mQRiUi; zu)p=jFoM$%P`p~}v>0?TV>YU`$N|6j2_-y>P&uRLv430aH3`_itc_I3Uf4kBy7j3^hA8x3Ood}(lfd*Qf_?1F+|V=s;u8Mq zGa*e2!SHSq6T3hdjKBstAe+A2-8OW-3MpaWy*jffT#r6tqGyDnT z_S_pdth#9r=u)NuY29)X+jVDN7+E1+#uT8t3MxnLSM7lY*vTV*xtT7SyW$j z`>kIMsYBo?Rf@NS_;G{Pi(a4^Yei+9R(Xv^B8Lzd{+r0@54P#(-*G$!%98$5Nys_< zK3b`&NsXfB>-q5^C<_dmA$*(U9i@8$+^yWJ)$)#hi{0ECf_T>j%)kw+{XdTpt zOuy%)7_>Sg932F4MkqY`vHVfoebF2DAm7sI&lqjePv=UQ>m829rQDvAg$HSu*qE4P zR?}zr5?6!8FP3pN2U}B$9PF+=X3n-Czq?_xIb4J9xe6$qEEbS&ONK85Q1xzK(i8P< zz#Po0k|-SDwgy{0HP-Y;eCL9ly$yuZ8{*MRt8cM#5xHQr#f0r5kP|F@H9>2?ME~a5 zZ?R+MZn^Mv^YHjE$70<|d~-bGA*p>SYBQ(q8`I#t-{;v6fq47@mx_z<)x^v%(8n6AyM&Xi#Zg~;n` zsY$wSnDthMI)WgjGrzhCKu1@xHAU&)>>V6dawzpze0PMaZi*0YZj;$S@lCzKTV_Tq zS>dBC;WbaFqyh8aQU1Et-TIeEd6K~SO3(wU()s(*^gO$Dd4J%k@|IrDT)u;O_rKTl z6ROgB9pdhG*tin)JZC3}^b3!2JHwHWvQ&91DT@ORcGiWW=#w$C>ams zU*Uwvj=Gu0GN%?vYda@UNXQJ4Ygl>U;~`iALo{eP2JE`wNnDM7 zUriP>c$_Xiswk444O_B*A%2Bf6YB8=`bZ_$`%w+(`0mY_)QYg~kc~=N1E_VOoiYg* zJeH@&MTthq@0@)e9vh2Hg1FrUdOoSjD>y7KOU~Bpv<8?#N(XWPh!JX*p)cj&Kyv0n zsHy#aLo*{oU;KPP3E(wWtTqYXQZ&@^7Kgw2%V3sQRJXM)VzL)i?ugxH%6;p|@Gy~X zp!X^}qUYfNTOw2q!c%pV{IAjWd6BH@o>HgDZ?!uj&xIc+;sh;HOTDxt+5aBHw|dD< zMf3iZZ3X{L2PL1I>}9K~OJjX!{?idm=WFK)6s&*T{j?0pDdosn^;A^HI|VYt zeCtTQAB;C{;x^e}_y*B4AIaX)(n=8*Mbz~b$#{ETm;bC>?=O?w+;i3c`vtPn&{*`j z4cQ&qn`lI8V-n~~S|=t-W^p4FHpLY;TT6?tkNABq9LQXwXsnKklmSy{UiTs?4CG|t zjofj5L-(r?wDy~YyW;v784g16gq|^d94RfE^j9Lmol_t^-MOZjP6{j0dCH4ek{bsz zh(7!pS!hG7>bLi+VauK~0GobZZeS%;^kjsPZ|*^!lL1VD4E90>RiH~#|GA6y$$^U( z&6uJ{VlHf0_5~4s7UPkOi>+6(Q%kfla?yESCNE)u*+ >G748njSvC=oxk)Mj5Kw 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

  • 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ʻTC*{GziX=r)w9c( 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 diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/k10dashboard.png b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/k10dashboard.png deleted file mode 100644 index d836a1536129b67fcf461f9bd7bbd85726adb041..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153879 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 z 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�qlGZm^ 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 iXLGgi5t$cuYOCGIIj54_}X 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 G+5ZdL1}U!q diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/nvidiasmi.png b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/nvidiasmi.png deleted file mode 100644 index 54abb537c84e9be00586ff9fb7f5b02c2a8d3d4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19640 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 I&MBb@07n5-pa1{> diff --git a/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencost.png b/i18n/de/docusaurus-plugin-content-docs/current/managed_kubernetes/tutorials/images/opencost.png deleted file mode 100644 index d845e487f63f4e593888c05bacfd628f393e566d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89375 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�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 hH(? z6gx?$RGL2DT!MJ7wn6p;(OM8*;D_3CeD$4cLB+vp2$V`)P@qzJ;g+mhAHjh@>{zTWR{Kjf2{ z|9Oz8xGQYz+(klOwD45ArUUX)(}Y z0(`4d6WHAuh)sUB@NCWm)nu6R`AtrkKs&S6cLk z1*>N;I;Hy0*F^(t9+KvAR$c{pd)&BhjGDT=j&V+kfg7K&gW#sC8bpdB0-%`N&UuV zrt9@2=7t8^=mb`!2;4mPo-ZstlpjiX^0_Yj?VsPmDK`>trWS&mwOD+MKV~Eit=Of! z2Q$@?X0I!(LX)VUAOHA-dZ=~!Srt`FFfWr`*d?%VSDl3%28M6B%!&Ove}q@O_x9at zcShYE&Nd~60HF&LD)o;;H#37oD#VuHW`pzC&QXcOtKyB%^0SwNl5$`BFqGt)kLJ5y zs^y~$g)fA`)VM;DpNYa>za{Xh%CRrRw~OuHYLfc;Yh5hML*#<7wBlylrfx%8^;Nll z6#Z{diL%JmaI@4_P>trB3vr_a@UfTGB;@`E*`3BOk6GE&cCXd>TVDre;8@DL!d&RY z^3wyHaauX6x+=*sNq-BjCDo`}%+Wu$KYqIroH-c2JNiO{Lm*R)S#TbvKahME&L=2u zpyp&NbV&m=A+P1@R+*EAqi@v-Ih6vENisfBWUh)VWi& z3>`DVy0dv7#ozC)vMKJabBF&26g!s_69az0GgYYRGruti&{;PZJty8sa5H<c2+^@qGuHa?yx5u@Ctu+vlnF8y9wb+Sf+$ zro6y?c+jl83%}7s=sU&Y!K2y{o*mx;jIsLni@FbxO?UNjxgU-A3J8aSM0E`fmAk&) zO&9yO-Wp&Q{j6Mo2>Jh`3!TFC|C>7qoX3B^qG_`nB3@Q7r_37u7iziURdsdss5$`v ziG((zN(zCG{O`NLeKA(@w@@OPxubNBi`pBw+fP{XVw6P21SHr#|4gz*+7=hACEb&k z_ZO1u@*}OXy$=9K#?3CyYa+;7`kZ(E2MaM8p#S0(v%3|tN}%!(Cz5-M1cmb79uT=o z4WAsQAy;ChtYl>r+{4KZGU2f8S5(MC<-1Vz#rYdG>8URXQpl_vPW+@Lhb+*Yzc_@aqHxaILALnH68^Ts@JTecP`bMYU=IFB!WrNS&33tY{zNqklhB3wd zoclnc$~GY<4d{fi)on?I&Fq~E1RdRG!gwyqRk@(#m{Pt>$+?J>_SG>vuUNdX;ngAf zF9di65i67>LPl)KdMF^YX7l}kWn$}^!y)>eSUqZI>WV?jT6+9p{Y%4HB|zsFQXPlCoW1N zN6{+E{aTcyuPw4Comxjl=+x9)U1O{ek5Td`+hHudhYkjk>-MV5U-_7qE(#L#wb)tu zCR)r;ZQFuzC$Rlz42Ip~0VWFz#;=|of(u_awF+;LM{r<}w<{yU4)b$2&1U;}pMs`x z5}f&DusL}GNGzvJ!zZqA9}O0YIsV~YNo4HCp&(SnYSb*Z%eQ5;IaKiY=)#vNsrQW6 zdxsiQiA?Q1?q)vy`uUk#bC=XK7AiQs7sNfsXk{*X@A=#JQ(qg-jl}W1{zMY>QX~w5 zA1>f1HN5Z$fYufVhE@WD@46s3tK^iJ)z;;hZ2&4XKc8GCwcbiJU;BA}o^>1SLj6Bx z6;0azbnnZvufedSYD8WP#6`l&1Y{jpslA@f3M5$pf9UrajnrN{a+S*M5@wR;_jT8S zrygkjxWSwpo$`9?*saj&%}OVzfK|lO?ebv9mHA|b@y}WcMJHTMir}7NWf57`hEvR7MHnb1cJj%7F!MQ|XT)5Kzhc`t zXBY7j0W-bNtN!#FPt2iW7kt^?y+dl(TLOGky{ZlSw|oEZOkLo88LL=_ zGjC{JQDd#Uj>Xqt7r7^3=2axoy;`35X+3ZlR)cwWLYpN4S)fOQ@f!%=5{bKkLmIa7 z0q+XkLQpFqE|6R=4`#!2`o{HcoY@F)7IX6K8c4#^xCkmuc3SR*h1D?)V*0;e&?my1 zFEg<}(~>-0c+!<^XRdtcR-MnR-C%O9;PlBmO+ll8$-=X^;PP$9|)= zM*}M;Yo4OinEWGooEI=(EoOFpI~_56x_4~aJC?vR#5WRGc`YrDC38BB`${UW8_qf9 zHb2<^R@p#{BIda3IllaSX|4IW-)bwr*2N~)BrM%M6|(Xc&VKPi z*kLL&390bJfj3_v|BV=1kYIw#$j4ibvk@efxIS2%Qs~@6O5NE|*S_(H+`N3~t_#*+ zH4NsEiWROgy7yuvCt0dd4(?#DZn;ga%Z ziA@;Eq8k{#Xce9;9`wDGj#ShQ*$5U)`rDgdd4MvM_es$EULYXFMxoo$%)>|t+$Xlr zQRe-hu}aAY4tk}%W0)39`%_U-Y-<#NfE_(?5b0aOGK$6PRT(U|XIR{8VeSWLOjX;l2Ku7_DLOD==%v`m#vakh{`wM`8tB0B4BRt z*iCk9(9{_jRNs=b46?Ol%M9En0iffS0Gjy_Jr@NaK=)6Onc&ky2jtSrHGdB`P74sf zr^~;X9??H2?)8MlmG>#e&uIm$jR-WToNfrZyR?Rt*B>il(8B1 zHn=>3>u1{`cMA=~^DuITr}!_uEn&{7Q`vUZzjrEmeV>(*@7Tz*KYkjqCcQbe)V?D1 zjV$EO$0bx^eoZBS(>~ms=xT0W{L(PjL<*lHCH?N7=CW>)^{m=`#?B|AFNlt;tI@uw5x$LyiNI_UrsOOVNS0B^e~X0xVcokQB>^K zbB7zWa6cU7vuID7pEtZX$Ao|nH??n*IzLedfWrXt*KVypIuO6pII7vg0}N&c_!KwI zAfDL(#h}hSdyJ{G52VHXe;1sr(w@RxADJnSZ1Tjdv<=L)^BFD&@D8@+rec+!#}X+G9Yx+MKSk>x~2zy=6* zm7wymd-A&xU6vx_fK^<2T;GWrwS8OZUDsO9+Ga(WHcMEZvCY4tvcEg_e$wsmEQNAm zzIkK-CH$}_%>*OJV*NObOv;z)(E}snWIJX~fk%vf$EM@HL=}4rQ=fn7ew|qB6gEE_ z*6X%k*=%$_L~MFZVy9w)6~ODMJajf3tJkQdZ3z7%wO*5%CyZ$rjNiqT?3 zR#8j!47{$SxroCx(l-bq?aFIfKMl-1eJ=KbV`7!~@9}J;t+D)kHoj}BAipUiMn{$h zZoXJCHhQmP6cE8xy`=6M1y)CPRO7jSEw)O|uuh>|J+ki+_$9Y1>xYc|yy0mQs8GZpHbp#yzhZ^601L$fLxY z<4`MV;JBrUk&AJ>6USm-3~m*={qWaM0}J5o4CX`RgW(fj1{>~+hr3387!%T&rtqgdKY!5<+bq~dE2 zblZ;lob;OBwpREadg8CQ#HR-Z7Pypslt3_eG_k~I6mTJaJqa~UIY#P+%tpyVEDB*S znk$Cozn}Q!LihR0b;|(u&t*sP5kiEf8e%)YC#F?qdj3_k2VRn?ohrk75co{a)zHk- zTx=lSWJJjNtBO+G`GsUTesOcIJ&{fJm^6Qr@Z3phra(6?C@Z9mwFkSE{~G-? z>*2=9+hCUm^$+YhhiBFMf7E6IOu_Om(81YCi%R~Ev&rzWd4Lpm1ayo!o<3Cocrfu( zsA=GFAI)1up#b*848Vx83l3uiIGCz{6w${k>Xv${sJdB;_Y7;IX^s+8(3`9O0h86! z_g-jByk^G&L6k$RluPKbWLsx)xxyD)WL&`Rv<*Y-ba~;aBED|@fC_Bqjs5yw*z)1xc9e-`(&LZ(8?q=0;VTu$yMbVb}YTecR{*5YuuU(RoV?e-oX#P(G!* zO@c2Owi)6CJzHHi{k7=eVX3%9u&=;OL3OjrM;&wO zdrbBlizVQwD9nkZ4i#}h(aIZ%`zfp{Ex1kAwoCpXN|-i-R7PMoS3_X(3W&G8xbl^Z zNw5Kns5vJgaw~&L^$R9M$ANQM{y_r9$p380`E(AcGkCHT8Dfq;VJyu^EKqg@#&^Dv zO~h4B$6a(C4I^V9o(3I;jiN!uTI+T@G~Ar+t+(jq*>7_taF)f{IPJBrOYV0C2=9dq z)*4@$eWH@uwxi8f_y2q0^_{`X`KK$~9!`rna~p_fW`I^{ONAqYa9`DIN;CcAE5$E* zG7Ieor)>%kV>=9q9=u#kvElbq9E!@@%*ezErfU7@m6F>kD7eo11qvZmamUVATloVN zT;TvLNao^r)fQZyz;EI5%B~xOa{}0tTd>ATK7dBbD;?qq|F);&xr8f2F*QfYIpECvlfUq|O zs7jUcl$xF(2-GzJ-daiEZc|m^_JTpMrDr5x+ae#LqmjvC!PhlGmfx!=1Y@jP8^aQS z(1x_@MqeB?-rY~&k2f_!tM=Ms%jn{aQOO(-h+V$uUX8)vj(1Dmtm6_yCv&!Z#yFpg zE5x#cU&>_5BU*=w>&QJl_r6~}#zf_{wqwd#5YndY0uv-@_=c-qTFKzdGwxKJJ1D}q z)N5!kvw)*Kb#3H`@v?3fk^QEn1N+*6^L24rrq`F?qvNNLWm6SmZ|+j%Ew2~rKg?Q2 zQMQTF@bA$2EAx5JR#Eoc&(E)S^|-xc3vL3)%zQa`i2hW$xKNEHiC~h}Wyk3Blo)jE z4w`sn_R3v;SoHJr2x&KsI(uRQ*-&D)BVl9V&_^Hk8aFQb6><-(IjpOq^PGB71ydCn zdKIh6=kMOMiZ1!pGA_oIx3)>u?ZcN-jQl1V_?Bk)^^MODKN;hiO`uFXbHh$b4(=jU zkeiVZz3Le4W0HLz5Z}tpt&6@_X*$;1@Z7}18F`ugGvYybivn7(*XeItwvkNbYQ&VM z?zW@)BMDt}`=GA5d4s6UVj1^o`ljoFlb|a1}4Vo@SK*S#Z=eDqKq7yz+^Y6R*n|e znKR|!EXiaW-K^L?$@K*HoYd$DDPd=h4rGfAWhLTh>#KD3&X#8*>wkF7)hitKQ@43u z3Q=iZv=HxMXyb}LoI*#cW8Qg9RoRN|j~cF~F;&y*49Jx0<<2_AT$&LHFehE5dptVKUMHa3^(><_Udx~z7XZ7J|z z#2=X1H&bCIMRfg|%w9K@ag$p%K(Z_bl=$qo=c`j>0vh1Kc<16XyW<_#kWxU~N-N}a zDicsmG6v)$IAmmin7A_ultqVIrImxrZky3cj1v|Y`_x{W<1YZZ{A~CmAy0tjUT)rI zT-knF0-T*Epx(Ik=f$AH$Sd@$qnUPRoFr~Lmuy{?4ucQ;5tx3;u`@kYcay=hN8O;f z>%z<55A221DkclYLNY?OFZSCEF*B_p^!)y_n$fp|VzBKMe(QaJ7(jp*hLE3IH3rxD zLS{+vT_jblz`<@nZx2bqsi_Sz>kJ@w~gU-lW|rgJ7Y7z;3@ z>#=p~UtY_h+i+XO5wZ@Kd*|9$#z-*ISz#w!;%aeJzE6|C9>D4a(c^D@rd>hKI59G3 zUc5|hS9&RQAS^#gZNZS4Pa}6m6m+;<&vn){0;zGeFguB5ufvu2`J-|1w|y^#w86x^ zPDkkmTZ1QsMz+`k8{<}9{l-YC`eTDO!@Gf=Z5a%_<@9ojL6yLdP2ik%|GqZMIYnIz zH$w{C@(aRSbrgCl<0dc50{CKTd;+zLbMws4MXFMMYie~^2~mcOxE{{y>D5Lywq{ZH zwjBOCOBGrBzI@tId5VViDJh@IOKr7GI4(XP!6UhrGEYD3LK-Shu?#t!bdp;c1{UMx z>o3oCg=Xz%hDncp$tX-Wx?0>#u2I>WvKUXX&=1x~~Yg z92Eoo!1s_XE5utkSJ_f0(uZ3c+@~d&dfh{nLDO<$S#8es#;<0pb7>y!O_l!om2%^i zsC51ZV@w8)$1)+)6^!6|$006tp3HC_q7w`)a7i~`>)AGR)j-szOCrX$7Cy#9oYvyE z0(#t*j$UWn?IGe4}$(f9o zQeNx*Er)&Eq#{1+g~lSX-{K$M+tauY?^Ng_@O(u`48{ezyK zp5&1SHMO-z2bq_q0Q<6QBN}p(#KCAaA)Vlv_lk zeg)w;TW0j2L)ELpLPI0cJm^R-f)bPW*TP--yf11(gp;g3GU2di z2!hLx4I*pDOO3!53J3QhanM3E1|MG`uFWC)SMz+gdT!UrT5Xg4D`=1_X(d{&DH&M%<#H?Cm(<0 zG34$a2)aAwOngy{kiqijYowHLYbM9hm(OBnCDk3MuZ;dZ8?rxz6Y|GARDUOp`(Z!m zo#kG43{{wR*r)1pvs;pFkt`_HXQTI20sy?Pbjur)1wa-cTtv;ou+ zP6|3ndVbkBKqIh`G3Zdc+_ZTTKPB2cuG&SKWalKr5vmgX5NvFcPvI&Uyy> zoLrmJW&w)TOrMe1Q(PI(KWEr?HqE~qI;uTZmqJ=AB4M{lbL5a-u9pleS%VtE@-<|< zUOM_|>*_>zG$fb)LTyVbojN9ZE5U3UGXoX5Pkk+C@tQIRFuS_!Gfo~zy+ZNRN^Q*t zoM`mmCEH6bN#m2Lr9n8iL`IH_z3R$%6i+=E8sKfjD6$n|GVyfAhQ*P$IKIe?np=FU!FWD>Sb- z2-3p*AJ`!P@fM-mVSsc&5Fk!syZ9DR`CmKopUGAr?&;Mx8~?p5ZbNHQzOuTi3GEYl z0HJE6`6`5z7{p0a=a=PeHLsA0ojUD zU^baCVB6KZ?f)NpZygq8yR{Ev`-m-wfPeu?BNEb}lmpV;D$*q_4f-fb3ev6gz%WWT zk0Q;G14t_fNJ}?->qbTQe%yP%alGGOKaM#LYVLck`--*B^IYp%*P8jlXsdXq-YQ{)^ZD5DJ?Am6D1WU1tEX95;IlW_TM?>d3xC8My$;{|tPm|Z`Nn?fN zPBDO|peMV^u4Bt0nWkU5bZxd1uJ+bOEIrO3TuW3*m8s`sa&ipLonERLnWG=ajBrf9 zB$>zVMm_5dYPp-&&V<3o6i9dDuaiXUIIQcB<|K{><@8_f-()OVtO^ZIRMcu4c@TTs z)$^!JhDu|Yo6$<38~vK>ie*Sfi=C5<*5@Gn1yPm5lZ?~kjbB#mvuvA2THlsvWRHz{ z&ab)M3uTEtj0}KK>xk=+{*i)}6E0S5(>dtctN8?Eu^M%50wUKMw?y{DswXabfP!Q`mr!!i@H*4pd3s{ z`KRao)7Y!NYC{!Gh4l3FfsG?+9{^s%77s=(aJg;|RK|EvzY%u56=KD0QPXG=A&Zvu6=t>~hVzlR&~v zl?-K$;B&C5@X=!D_d9=$-fYWcbwhY=9$zbiU!9#PoFmgsvbo_U-z_;ZUwqRx_L`IC zcs9AsV9g)>Kq$&)$lM$bOgauaY)myL&o6Dzk=ZNApw_anrR130TWu-f3brotxypPi z&nX?h*sCu-*6O%Lj@|qtP~E1T!=7|f4P)E3%xf#PLP=M(faln7R$rPIcKlL9GS8wD zVV>_4cwEu9z$uEEzAJ8o%H`%U{(@UY6xR&LSTdf+ud6{4puO>8zPI9h z!(7BtlW;`d{ph3GT+;SOWVjPkj%<&a!Vp=R82FggFV9Ylsp`22vy-Z9Xmc|foqeep z5f&aFwdI=7e{9;2b2q_5MJ&HTl|L00sxOCG-psb>*Cr%kW*=0?sJ^)YKjDG;*}UC% zc`2f&&^GOoR78R&rQ=Ol7X0!22EFEa<|PZtxG>iEyDtVIs3KjqT)|>9nbXm3(%5;* zsb+J4q^!v-uU9$14Tc9gKNB%dh`0jN!4~7x;K)bGzx?shYT4GBpq5Rus65BoOw95+ zNT023DmqN4u6)b*7`IIa1gsLTMJwkWV(~ zt5@vyQ<^S-GAm(+6~p#@>q7#9gKxmB9ymgF zPwadv+=lIt1em}DD3oRdL9Nv`1QuizN*v>#f1Xh^#lsK(LGa58O<)2v$Z%$$f(Pgh zhvU4V?-|w`kdC9CdGDDfb0~GHQkwGW0@e+KybV}KA?O0O&7vf!5d0yodgkTT0z4@m zDou^`IZd}Mbm(BgP>-Y2GSKtA(t25)Hr-}N&>2PY#p5g3t>p5Y!HB);;a| zS)))SsyW-JmEEF`Ps_GV2?1-vxX5InU=o4grITU&KzR^;a=1B3Dl#Y_;3eeqez?LPp$aw2tT!Uju=C7JP zE0s`4>ts9qqt^)Drgdai>gnkLnOY>BtW%GK(pFfB=2M188H>_cf4oiT)QLBBWa6Tt zbU>=2d2Fvnj_E;P5b6Jz!vqBEbPMziXlJT+WWD6|Sb0OSpxc}sD6Dn~J2-nVe75?h ze%z0MKqT9d$>i|4Y}NKN$RFK@N5TzaSTC}lS4fuTi0ApVZrH^oc%LVViYt0Gh6<;p z%WQJX^7QNDURgW$IFiQdowcC-?FQfeD$D!J{|S!oC)!zL1O(>}(>Cnhxmf6oY}C%& zA#lGE$3?jFKY}|#mOp!l;GO%xws-&b|37zCsQrBB!9D-)1Ap|!zwgr9b1Tlf*bXCw z`bIH%eJzMVT3>etOF{=4fr_?6Vn)F*S&l`2-}=coHNw5SL1a(@?gKWYbKAEgALH&w z&%ltj%ysc%yo82rOKU6cix0<#`c5b{_XSygU@)2Tx-n3|5+#4<&P(7E@lZ%m0ZI~a zl%@CS<02BXv$LU+LkJ^lk+=^aRL}zR+xy|56CEhk6vtff`D9{ZVyfHLCL%p3X=<9< z{hTDn#g52FX=UmAYC8-Ovt_(WPrv21ITyPC;$yhff*o97GTD^_K0r6P3Pgwcj5Z#* zgT2{CFFNlTfep>;wTrZy`0x_3$Vdmks-H*9E0kkW0O@gsW+Bt4^%5dZg1q+YQW5@L z#9%xT3Li?`x}^wqK8@Z%L9n#0&hD`~!P`B=j#{tTeFjS%Si1fmA zzm7KvOZz~DH-}-C#2LX#oBllJ#-<%I3VCD5WN{+<3l_tr=W`NyQJi7&z**bs$S@5rZ zi6>(>loc(7fNMo%UqRfT+sk$zrYg|!a*gtOSTgqsJk-UbbohLN`|QyYs0$atZJk6t3Yga) z)*%N}*EIX^8kx+k(8?sJu^H7|@N=rM6N7g+O-wxc$&)HWK8jBPal}`zUL9lC$i777 zw*F>yepG>VkPU>zyna`wiU}N)s?_YzwDv{tlv!6cYHNK&&=wvO4Wb@^Y6Xzii2#K_ z<#aE9d!R>&lA&YZ*;}5TxcJ!yHn5f~)tcua!35&|wF8379;adAjb{`|Lq#~^6{%~z z35a1}4wZ}-^KEh8wI^G*>S(GnRu!xVOclhrBTm&7)^}Q5oKRFLjPSh1HPSq)Mg?WMfytIZa2S_<_ScO@Oh4137 zWjfID5v;mTcmNF!g#|B6^=iP~Th>?R7KTD~(An9F2z!N^t{IT*lEwS;!A;@8*EZLt zBjs-1)7MA9EZbmQj%lYnti&`#Rg>D{)wWu5`;KB|-ak8f%tF|Kyu_GHZ{%&|6f%EV=icmwJiblA}BEM6|(rjmLqf{Ffgz_g9DMw;q#qfH0w;|K@mhazy^ro z3NXQj?sLJAC@Cu|C&m^`Tim_-YPcaf4Iat}svnNEBznW<=ya%em?R;n0Qi0Z>hr20 zfFG%M=>o+cx9JWAx7GWJLp!6wP7do?Ok6xtt~%`TJ6U>W=Jt1w2|=JsLc#&lWm~0) zGM}Xp{Ll;zv?e;Z7qEN`J)4zAu4yWiZEQ37V_;&!l$eOf5Ns9F`h;213|l&Vp0h`_ z9EO5x>+A7g2Q(5VD3+_eD)I}Tt#7NpeS`tXb35jD&UL<6A;<-ep@5?_J3d0Bmhg{}`4~9Mlor z7OB6JBq*zTvup(-35d8XxG^e&qk1U~$ND58v;&bYx0hg}z*;)+rAx`JsasHYRey<$ zJ6al{k_gGOg-$f7eturP_`#d0!f|F?6nEC$Bx|rn+2C}eou&%N_#Lwm9{%p#4JJS_ zU|B#AGf^plLZ$SKjCgP{uvy~@f`2}}dyK3gYQ$jxT6u~` znqttQ7rca$?|Nz(;cT0E7kzf;F@*lkC|IpeyNj;m40ZM!cP6ur*^cjt5VY`1+M<Z@*gVKEdtvCwyeKiAPeO1PE7pzmzrF)7&w9jexMOY2I0`+tm4(+41&uah>$a~9dk z{_~xH`S)ilwUgB z`f(?BF%iqt?i>`T=V?o~kKE!daDPLTEbYfN`r%n)R#1+HRdlF&s(+AUjAU1IVmdwD zkL!d6UvUxs712PN@`t^TeB)wpx$}_opvo<)Yc#09eylv|kI6v>dwJ)zKj~w4rk3iz z>g0))ew^$oL%#{W{FvcawLre`2o8G;kCbM@XsGho^2}~2bw(*wb}g6Mc;I7-WB26& zkunHmtXoXYJZPZJ>okS9&mkU_BUPz%$J#8bYZyk3xM)8fTjrohPSWH!>lsyiem0_^ zyl@!(Y57QW$NU_g1Kw=$r8p_}#~Z8~R!+qfzubz(4UP;C(;w$@B~K{ad|8W|CLe=u zF&~TK=s~8^XaI3v2B;ZYi^cuKiD@bQCDjgU?@Ve|cWRt~+oA2L~%TM+F4P zC1Q9Wf~{{;8OBX`?rJ{U!ZL%J1R2k#2X{F4LcQh;!0UBBcjUCODvuveP#AjTM>A>vkEC|k%A-7HaUjg9&6n~W)7?!QCi1Ng+ApAmg^S06e}3!f(PTqk_^?$an>N0LG1-z$ z9bY<<>!wvDXEx>-^<;{Q-gcwZc2Y+N$RcnM%-oXMmrag8+AQ7gLs_BcfRJ%#gbqTj z-LbXlvTM4kK@d%p&o^U+Cse)Z9-h_4TP#Yb&mt#XyLZFRm`Z8l#&~~%&wMB`#ryis zF(hp>Fo9LKGED0AIc!H7$gR~wR^d_vW2u0K;UgtbDAq^9?@V>^ z!q6-Nj?~mE3@A%WuMoxiDPyL!Jw1Emz0XuAqJA165->RJw)L3$70GOV*RZLWyF~gl zs8k7laVxi(f_36>9XOsKFfFoBY1E0nsF%5@*SzvIt!Me$bhS7SYHI2$CZ`S0f%CfC z&e-H0#zDv)1ubVo{s=q5>Ld1%J*^wM3y0}g@zlUn?X7KIW;)ScGHLZz)b@<`!mtkW4|o;OAs|eIQNqY zeH)pImP(;LorSgxlH_}i+ykv(tQ|v+{Ctj=R|7o3JtN(?UHQG{Ks7V7E&u%bfKPs9 zw(?VZScO^$$BrfYn?CkeW~KY%*XfoI5C9vPFpe$jGu_eFq=@RscB~13&?#}t(?VIq z2lo;keEs0Z;}9G?2EthcQ*7hq*hT{wBWwplUbh)I9H>{0&@KJL=k~%R&H-A+w*UAA zjXZOXiv;I0;a6f3l1NtfJ^DRa87HqqZUw~g#(v&gC zf8hWH+Vkh%!X@r?LxJU=uE64I9fcSB;3faRDTTNYoc;@(KAY~3CwJd}9qEsuxs}gz zEA?ki4=p$j*%fUsRw5!=Ufyn`Ey&(+L0|}z zBEK8H11&})u#AUscPLjx!Dsw_})Sdn4S3$S3*NOv6! zfL~Mc^FJUn!p<%iws;`(4^}H&j@*Qg5?*ZPv;RTYj_b_qo`l!`$pilv`y7xo1ScX` z8EeNEAdhi-sA*|s;i-`EhlxG;;Y~R_XEm@IWVV57DGZ4uNIyd+2|}fz^Z%N(s~cZH zZZbGiJvb9)`NCjZRNmXfwF8s!j2&vn@?dYm%|OVCG2wjs5ax;BS?+hGSvXBgOI8cC zApuCdJiz1-(ex5tfqK$fL0LHoi2}2ZLHT^$*|iNMG}QU0qgTRA;%vv&gC)@XimIwe z*0EIZVkdI;-2zn+B3t!m7LfcgXlSY^;jrDG@*pVSGxa3da?`;K@7vuYaFhdx7aSHt z&%@JYdV?QGj2MVnth(%M=6M>hbNGaPNt0$YZ9S(Le?oeC`oN%%j}N_B8%jpzT0EQB zw}8hdQA^HD*{H|0-dPC$BHa^$xYcM#9MCsagV0S^kv$gvh^S%AT7_Y65+~s>g~;xw zXFwP6%^#S6%plyE*I>31o-#D7Zn(1TXQYEeVg?v#8^pqf)uVV`vpW;~H)?-eCy(>;Yd9jq^cREv?SgZ`)7;}fOcniNw3#&A z%P<#)4PK->-h%z$-^|BvZ1uNW3I%?)D)={F@HPF-Hzh8>(`CUL4rc~ z&w2R$4L1XSYf*MC-wqxb=9+Rw!t0;fn~tSc(a^4G@)^ksV+yni=5`9aBz2XFP*H2T z7DPUHfsp`H0S4p8mG0CvLsm7P?uS7`Ms45~Vfg~wq`NJJrO8~2XYghnw|XY4@JLP9U&G%_y&-4}DT8e3$+n!VPFdc+ zdF5~Ya1Lcv)H~}~0)_-)x$x5O`MiBA%b6K{8}y?UdRdP?9d_Z?OHwTfbgk@zH957Z zc7NRa(Tnbty0BhN^AD1A|UowGBjoc|rp95z?z7^!?83f7VVz&V+eZ zC+t=tvdJLxQ$X;($la+0M_Z7+D?&*oO~z#?o%@f$>*`)W(nvJ{gSVHLJZNF`0@oT1 zW`_d|^z`WH=_SA#{DBs97#!AdSqO$RaWrTMLo+ioz5Lm(UPWgsUFPTS^=UZ6X0S^n zH)b$s#^%WsIlnBwQ$p%UQ%!`ELgxICBSvt=SqB5EDS$Y{IDWdX2!YviE&DX$-oObp zHtI)usa|KwMmJveYn2@&dV0^6g5>QYRw~60)?GyD^74ZmBd9=qN6uF%%*?btY9Aw{ zU2$;ZfCoId%3(64ZX1z*vz3K|T!x1=(hfrY5S;P`!A*ad@q!qDA{)qHihQF7Yzm0; ziE=15@<$lA_steKKkljH;4U_U6DUwAzu84b{e}yH)R!*F2kkk|uHUfxFH(9sM#WEe zIDhIC?Fe2J>CSb2qR*G57TjMx+8-S6OoJY;VbVnZ4K{tBThu79r`p&KcnV7YkI`HkUC@RbU|J}~w`ypSZkOZ!w+K*fdFn{Fk6Eatb< z1@X&Fugtl=x0%4b8obGmUkH9$!_?QWo1oKx+M4G9^!)Y?Fs(n3WpHF9!w#m#opy5l zfvuXjBF6b0|Bub}IB+1ur~HBzzqJqy=-;T+%J z@DGbeoYKGQzXId`d!9`w>$eZO)57fpjJQrvR}~>{|34jW?~R>=6vMNyzl9%c08Sb5 zfb{aZ5tamj5UYZnzNSX)uon~xWyKTy&7J*Yn|6NNP6`pqvIV>c;n5HO)A8Qs!T$v| z_Wg5zKi)qZ^_y&z2u!)>F~B+h7UV#B5X{PNgfXrY_BrYQuxAN`6WP=O8CO#^BDrl~wD*G#cSts$2hQ`TlV;YUqg6W}olKfTDO@C$8 zEB`y8wv%G#+TTK}z@WtR-oWu~G@2o!>B`ekS=WO}&Pg_?+lVhRt|^%epd2`Z%pL=~E;|tBJvd zZpA_`PD`FTE!FX?4*^&BPx-JN2BZKK8Q1+d#ZBhuQ}h-$v_pIJvp^=J`vO{RauT0n z)%nZVsB7~M#OT3pQ%=a-(FS^ACQ5!=56+*LwXw0u8F5Rg6iu;$Xfgz}Vc(E)_AX_T zQ>PRrSJKHE<_d>jQYQcOds2gG8H2AfHcV%mmGxi&+JONTxci^`q2IZRQmPunc&Lqlvg)5=tR7z&gOlnec)ROCsA2;^6c2&|&)P&5 z?n5TTYycTOy#uG3?X8azr5=S0Kar9dkYk@xLvKSuM^uN8ceWEG$%d$Xp6G_8dK~|`oTqZPf{At}p(RY<<8S4I9sNFU z4p>J!A4~q%vgr4VI6w!fkMKPwot!17kK^P7zkWfrc)w<=f+eqt(OZ-5U?*A?H4DZT zbTq33IiJvszWtAna~FFblLczvh^dtE2kYD@r@`G!D{G*L1`tIiWK+pB&0o)He69H_ zEV|pMCUSByY9HBAr-t1}y!j10o|MOA36(#~<~JyVIs$O&W*F;j6r{{3f+|NUo?Y2v z9Wuap`#h0Bxe1(I8<+s0t%x0I`gOJ?8#w;}fN@Rt!9*SL{_(@*lipd|ijgWp&B+qD z#%CTR%ntdMV<2^q@z+?^HxGFlHN79ke)}tq&d6`+3mrmJ!QuflM-)bok^?KhzoAKl zD_R=BS@<@0`~FAx_M3b`Tu9@{3&<7+sjy=_xO)=xo^M}5dw*q8JNNiaJ|cL~JlMqW z8$Wj3tN^!q(dRR2O{cOK>cqC39j68s$wY`zq$U-axQXrDR3Pr%wLUM2*ZcD1s1?e$F2k)==RyRR}x6_mp zv>S-Mz^+8R&n`&_SjpFgFu~G=&Su1Wm|#{LE_dl)YM^?A`E}a zPlUw?1jF_|3BJe*B2B;wBdGLzd=88yM=ZBPVZa0L<;q_n96u}e! z))_w)f?UV{j3G@0Vp(oKAs`dqQ34=q3#b3*2gtmmMgfAk7D=Fr|4nzLZ1h5BZ0GBaPe^+R^rPXb<{_SX&Ch9?kz zIyWl|mit-uz(ijE0lY=$63nlbPBYWh+nVHTx!Ktj{dGF;fX9_DJ~JaC(Ph)EE8N7o zx&*k@!+dhwsN{mya9g;Btt!9i`=EsIJASr=;3sz8oVsu z<}Z*9fnCQt|GnaMyz@URT>rR;&Sg^6t9Trm-+V2{+3~o&~DZ^CXuf*7`cU+PW1V^qtY`;g_`>>IF-s>-=&as%+Ik zk}hPU$gd0!URHF?lhy*flmudJoORp%sEAovipwXhAp{FKK=c9v0x6rH-+m99L$G7Y zT{xc2o4$*Hp@{m;twzmZ?Be>dw)}%ipo8Hrl)hMHS}T2Z3x64?f`lGc+14Yaj3kFZoiY#PGM^t-svEmC&iJT9vfN zI+tRVO-<8b*ND-!@0F7a+vk3hOZs~f>x%>UGjAzPgohc8Ebvi&y1P+NXbx41S+$$TF7+-Y|?LM8KJPEW;Wtvq3PW zPNC?O@Z;JIMg_vn5SnN~)kkWiJ7H(lgTR0Tn9LpyOH-x)8C^I3wVpI$Zv7Im))ncp z5|g-r`qCdWnZWlc(k7BvPWjQf)5guOMAfse2wP8`iF0GsjZh9DaG?MrAc@b}+Q_}44WrS7D= z4bQ^PR*3sR8nbc8^yxqHAVcM5AXNV_=iK!=g(>E$Zv*31-M<1?x#H(*tJ^_q>vyG+ zEz|3d1jq1m8nm2tV{!Wf5r4Zc=gMjN;Cz_IzpWKkh^mY(kPq72x%;_3H2ing-Ernr ztR3aYX_5=V*enf08~>!7LwbK-6aOQe+v1fqC&+^~5adQY3hqm{yn2P9dbcmTy~d*U?9l^~Kce_Tr#?XdNDnnw`8N&mZ+G~AIQLtZZ2P$%uz%1I zGDm6s_dl3`&27MVxoJk^wtn!8KO?IK1F8mD2QM`a&#mm%KNx4Zv)4UEEhCH4{AacY zIuwx6IPBjC&>;`HmMx@RhriJ?n+Y@|B|U zG109I3CUe{T9M3O7rXaC;EnIVT~nCo9b0W!mRWxUlVbbNBom&xXiy5-w_XdC8S==a z-mz@$>;8UYoiYzv`7V_ElrnK7sz|bBk+Wo6Wrw5phg5xA3@ACnq+YscJUhsIuOnMXYu3M~ zwzf2E(y5^XOI2;juMF?QI5|Tiz}A!b&EYpUXE@Vp zS4c2EF+PLJ^%)p#CkRWh<72XXQ(2dy61gB%r=s&KlDqkh*DI8K2YsfU2HlFzOZSi% zDq377$8nY$2*Y0xV5T#b%ZDY9A)xuoqCm#0LD7{)(l=miZj| zmLb37V*WnC;CoWXPU6mydN>=THV}?R`-jAozi0T#WjW{F%!jQHVu9?CJ)f1T4bCxr zJ0^Y`1<4X^Y6j7Il_5DxkFMR*nSF(Xo1c0s6ea6i)vcq)^K`z9)n7OFt%J3GqB>F>sCsfCB*(F?DJjGHGt;oqeP zrUNFuS&)8cso6@iQ+d27pd%cy)hx%q_6PRZ2~z!evsAhg^$4I@Y4i4czwQG2!LpEz zz=7;`6RPkCr8BGdc*odu@d^-efjBd44ZvN(3!g(LHb_aZ>(+I}lnIx)ZtX$_lj%(n zWy!=H7^6oO2W-0|Pa&;1is3OF&5;EEZ?4HER-p&^2&yeQo@MFEav0zaQ#}vztPYiO zg5QWCn@LbIILMce`jO+wOjJkM()Q6jvjfwu@0eTek1}0OU zkROOwfW2eQf$?5uq}+`;0RyR2OzamWi{_$@^#4SXa+K4Q*EbI3RAoF+#k}eUlheD> zpg2TCS@uRnr)DM^m(s~&HUCt-GCK%zogyQmqu#kdI%Q1Z>~)&FviCkrCVk>dz>6Zi zZ%l$Z=H=(7OeC4^iRZ|WWd9h2EKnNB&A50L77pmkyO-9n>V5?{pK<6WcQJ8G&SEm- zMm2;c2Pj7=)g;UBx|Vn1{9WdNlNVAR*f8qwJa`0b4}U>!>}y20dbdYfA_4M-21kud zQQ79TqVB{No+)lZ_7FQ3iRO{;RNEDONpa2yy4zBVo(UhW>l^fnN76FpGU@<)5cGM*$$Dsg*w;k)Ytjm^}ZsEN&{+OQ%D5P2ddnxs3Gj`Kl z%w2Ee>IzxTGe01J68$qOE?PEtpYe1H=g;d62h02qZRp#GQEuE3)H)t(3X_J{oh{YV0tYO2y(ITNQXbm(aA-3Uks~3gZ#FpFcD5G*C2R$ ztkYJFo^LyW@M5LWY+DW5tj-?PwF_9TwZ`evj$n;4R_N9Y!w#|OMS%_Zat= z{Jsy?r-kC_+zAxhD%(r!yzF(lBqT8-?;h>OY-`zgILupziq47N z$V7ivv&xiYT@PIzWjkcAhW@Fs_#9!na+UB@J%^){FWffHu!-^SBa$^j(OrX_$6Bc^ zn6-7<4v$IC?}g|o8ZvJpSjXs$J`3V6wS!d(-pDh7E$$I-Y;*XlZZW1NB#1P#HfPr8 zbE?&S>eat%6rItis8K}&6S5yurZj7M71kMOjS!-{m!;uU$bZKi`EKTky4 za#1iAD?ihbhC8#MsH}_*3_JKQUH4UUl1W zHL46*Fl&G++H3rWBl+EV?@Ranr;OSaI4tjl|=12|0r@&!@dS1rB_vAwyXeA>T+2YA}Jyf zRjpmFd37nQny%7$W%B&SJ$|RV7px}o^@>T=)RzQHZo_&i*&2*&E0y|O>@odLkf~j| ze-~SB(9{eC?%7S377i>=mq#UQB;n4s;DNLsU3)>@x-Mm#TQWw%ky z81U+P+^_n1%bI85 zmk3w*82_?2(y?nt5xvrd*9M=RhUFZ53cc}({h+VpJ z`JuZUdaYq+=);HayzV-hZPYw!)X4SYp2TIW4(IgVBIJa<4PL&+X+kSSxyPskGz0RC z6jqjaVkFVCE;S|%bF*^`xDK81hlI=r(QXRWWm}t0`*v5wrjuv7)p0VRKj%b`=(|G7 zh}U%Y^9@Kox~q|$y4=;}ioHEoNO>8*fgAB;3WwWV zbRNI{w#A`qwd#E*nm?BK^NNmwcE{k}?yWCNRa>rYi%uMh+8xsx9h(Lb9rjVBP{3oX zzif-nL26^%aeX*KydqcjM$wA`2Z4?ds-sq#&oy}aU*CDeT=?YzvdtMJCn+`-Isy89 zGsV}n^PE8t2c`}6J+x$@C+f_Y)Kj!LESTk)MjUj9DjrvPYxldk&6fJE6h1AUT3Mvv z#TP<0@fe5xgbY>Ztz#e1B_|-qNscYy?jen_3D~m5%(M|>?JN@>?vGeYgCl2maR98pC##PYnvq*p3 zivV#h$}^VVYJVjpCr37ug8xA@AyuW#vXIe&HjU2$iWeYyxbE19Hk8vcAW6qKNr`yaw8blNn!%`L51G;7 z^IM@NIiG_UR$B&Dp4}xHxz(CN_k!auxf~tbY|dtYntBee6oi;nsIo}8gx~rQGWf6% z4;!{J)Xlplqa1IG$hYN|tEm^w6Jz?r8Qh)`oeE9JCQml9+Io-PKv!=k2##}DSDv|X zIb~$?otb*bn_C*SYwu&(gmjaAtq1nRXN~I6o=fN~h zR0bzj^;J&nluGHAbLHt93}M!DsxNby+~n&7n5R!ox41W#;luhaA5eYdj}6o`b66nW z$hq%6+<(W%T^G>&I(JEK8|K}`z`KLNtMPwC*a)N1I-bc%Wm-dL%h^X>2B3#7?=~iR zHA9TI%--JLL3fccWv)P^fC}5fz(B};d-F5eO?Qm1wASI;c!7b6(b{OtDfiWbV?B&N z5ZsVUU=Ziss7pH0>0XkrXrd=${Vo|45^X5zi_nM*R zYCb*I$)oV#m~9ksM&6B8$Jd#y{;jvChT<%ND{_uO=sH#xA}o!7UtoH`b{NpQeBW)& z?8Z4*CZAmGeUh*J z$ER!8(T_4#-L!~LO;}P-_PmzwRzKR5Pj#%NB2-gz<|Z#T?PQvZlH#lN#&)Bccggc3 zd7JSYo*HAt9x8M>v&XFr#`5NLR9y4qBKU?lH?qrw3#igt3#GI-Zr^0#HVs~F|7&aN zf?jbfOU+B|@-=i;=Ps^2*L}UkD0Jj&JSNqb1{55}WX2a_d&-T&uga<@QQofVsdfHr zS>pPY&o_cyEzh_3mfyy-NpIwI?b;)gwzNueBi@`%mTn@a6|UYZUp_Zl&CnR}GzOn} zFM3?oJ1%C;dVcni%xFnUOyNeTz0t%_^w7pqe{jL*>p~rufUW~BXX%y(+qynWwO2QH zpe+(-Y%RwMBqUNc$BI5xh9;D2WPjW|j1j~u?Qy#*cFmtO!5pJYq_?=ILFD;}euEBW zlR~5hdSudmG$S%Yc4Uvn!cu*nZT{MEEqv*ns!+fDoRvnxpqZ++u36hsKbwifPcHOj z59dtksD{5JvYf}=O!892V6&y!i%4vAkQ zULWtDU08qS8ra^qej(2M21n^bK0m&#_Az_FuTNt~yS7w}oEL7k6`=mOOehyj!4R;v zA!zcp)jNB&+#<-0x;bBr=fw<7O_@|9PV1E!lgy@8!`3}ayZOP*!XsQI9~-2$oMcQE zb(X#yC{H%(YQ!ovws$(NS%j}<_9~6pOW$g$;*K|oQLj?@+To@Yyj8E0(~(n_uV8<8 z(_>b!Msb*@lB7Xa7CT6`n$eMrqQpF}D7T&zliO zf{*N0IhzZUvpQEKTE&+F(p-uI9ewcgC@6hWOY<@47!yjqQ{}JXYqq7D*7K)F z#8rnldEN?!&8S@we3o$o8yfSQoLTl9M=ja|RqW|7;tN#=8gAVmd?i;EYL&CNM3~*) zjVe#_Q_Q(|yIU~Z&aHTVAFJA)Mj3f$r_lYkVqSU7xSDbI63neB(bIieM+?@uZ>Ao) zD{xLW4Q5)N1%6og85yV1!_}x$*k$Wg!*>aHB>1w`$m{xpDDall#4G+1m_l?iYpG+Q zaekad^-Q8O#?A3rZq>2YJ^r^ksy9<5jH#-Q5d0}EJ2Gr%wyyH>BsM(ZkI+J*{=P(k zJeig&;x9SNoSfY`dX@u!O$2Y-i0&@aHW8d-Sh(EEF)SZC(0!S1^2sQfL+R(fVzmPO zEi2ZU87~V9zMfb^jW?3Q`!7fKdK3~iFCUuXs?vEup(JTLX;ge^d=&liuZu?G){e_8 zv6B3iM(={#imiCdXA+~Sj3Nc)9$i*mE#k9$eezL>`5xm__yV;Q+_WBwzmnF)5FOZc znaM6L=`mkH2kh ztQ2ikl&%nXk|tQuc{;*uYn8?N0XT-lNXyr&3e}yLB z^_b~oTh`L?1q{z$K|!>s=?PYdwQ5u!QxTUJL$B(5^->i!Q>yhUhON`a1YRLOdfus6WQN+ zVWIT;qqL&Y19&;ZN|onT0SUq@^oo~h+Vl((3C&yAlSjrqy7#AaISnkF)nN^;G9|KL zx^Zxyt+_s(N#183?3l)ge4{n0C@U!O_OHXVwn(efi)TudZ_f>F(F|NGQwzRv?#$Z~ zKa-wu%zkHn)p4#P!`eq9c$wRF5hQomvbFiTlpB#-+3r1;C7|xMSqqGy3P4Lw`Taojb}dckf~%Z__sg^^wxB)CpERZv##rYLb!vCXkoO(Olw?Y9)- z^orNt&d?MLuV*?tCpI=`Vv-{tH{BmhyT3M4>pzJOYrHD$w{#%3by#7McTdAD*^#7v zY`lc*UC-L+gsiUEGq;a$mnP&dt8+H-8pK`dVU^%dOTQ6?jj~wxLQS1s_brRMRg%l5 zy~j03KbOFOnthO=dhjMapW-~K4u@bMJo``>KvE}diTJli&Scq%*jH~~R2S23zi$G*;X<0eJfK3f>6 z=xD36D0;bDiavK6cyu~?1+-eH&!n>J(OGZaFyql2N*f?_{S0EPZ}ntDidy5+H3vSjvGnuVmfua&{ZnNGTc z$!EpyK*ukxHZ~Qcoy?IeqTib28*Y!;;Mq8Q{hVrBv7h(*ag1@5Rdn>HlC$g##o4?W-- z+0KKLVl>rKkavR+vz`}fyzwc9%xRB(_woH4e%?Ij8Lm%fbON^q_o;t1Pj&3OIy`@^ z+0jp-vX!*ZVqR!rA|NS7__E2AR833hcut?L-TpC#<&n+Sv{5b;nREXQCTGLUCkrwP z>i!;NY`TH_-;;o}#1y>RCi8lbVN3QUQDhQ4d%L@J?UGppt3318X-xmw77Y(~MNjLw zc`|$Fn&{Ljof`R;ra#`Y$V~L7FK9>xISvUat6qQf2W}a?!i5r^YJHdNmR2KtfEFVj zvEQ#$<^{9A$|t9-rVv?T(}xr~2(r@;UMzZIwA!;0;kLE+h~ZLV2!Ax4eTwVpxXjy) zxGua+)P2o4{DTdH`$wDpvX;mms;CNDQOh`FZ_!*g7mHtYM)|#uFgUpTdg`dHrdFHH zS;8{Py$!Pb+U>gtB1p<|`PLHJPbV3@^9cyn&c96i$tFuiMy}P;xM|Tjktbo@#e8&d zUsY%qy<5E_W@;bJl8L`b&Eno8MNXNHF&{|Yy+~CH_TwE5XR7LVSY6tXD6;ISaTR)$ zYNRRBz8uJ_;9vGy>kr}S_RoEn_e*D7HBcebd2u==NisQqP9ZqOd9u?Wmta9*(z+}` zM7N+2c^u=Mn@VE^fr}&bd4*+cwn`l{!A(jvW-_h?4H8Ou59qdpt|uNp=waL_g_=B- z#yqHuU}Mib!?!O?l%8{5U-IKx>9DS23$E&5)FZprGIz~fQTZ0t5lY$aV~3+&9{0tP z`71oa&lO2jEi%||8ErP~O*=Z6_H{B*eO#(7W%OcjJDv8-$b54?scz7iR$8J(?Ar;3 zk2c0!*V>q0np@$p)J>yY8k=&epmmnL`Xw zYsh0|IYEvRKkt-r3|Xa>tsB-@rNfEa&<`RL1P?!Ugc#@>q3kj*@jLzX(M{jzi&V~-#R0Y^1z()IZwB=f`p-HjMCvqPYB}}SYC9%xA8%LXKiZmdjVoj;W zpf%?{+#~DYPGj`JM`F;VZ|_3TxAY8-O?IJb{BjRVs;#DE>N%YQ=!CW4NDDt~E0s8n zD={U#B1$UD5xv5zaM|{(4l4R&;@vVY`h~q@BEBO@3He+(iXOAalzo?`8wH1?MdJOi zKoM>)o*YWJ)nt*pC^xj`&To;%S31@DS~{4_f5>pd$-H8TN)g-XBjkI7y;R!iY;d(( zitJ-?pZpsOZUzsPt7d{1bn=42(m&Ty3)8WRU)tw{NR$Vk=@(D@fxL?{L{+@P;JXPar+T&04(NngX?=>x= z^%+%`me6*#fX0WtS_ueb(_Tz#rX_v6NVmWj`nfNokpUC*Wy`|PYDhj$0y|^E>nEUr zCS@Zrv>w`E+2F3N2|dYMln};Mk>@YC@)U!|p5F8)`BHQ3P!Q*4pMuWkoTsUdJ-MtB zWR5z)-r*~A!zPJDja@-g64 z=`^V+V-R1FQ0!<3z7a<$z1G7*M@OT^DxNv-Fl4r1m6<)R>Z4h6xj#;}+cGFm+aKqA zlVvNg z5`Ii_?Thq#ZmIR(WF4_f3+ru785~E9a;Txx`juY(A$;T*s~LkocA5TK%X%bR&ggT= zM;}a2A2}~FnASc>t1})O_0n@QLWu^~nImr8j6y}Dw|Gwlv7OP$Xn0m-F`!bq;#!a4 zUy%=FODXy!G-=FzEm1Ks=3+tFa&b$J*N@EX=%>c~(vuy027IN)MVo}PT@58rPMcP0 z4>M*e`GB!X_jvx({64fEGG_E=-uBg9pCkU9x|hH(!>>%JR%O=zvY~AE4Pr|4JgwUS z!*#umRD(1|jQaD`$u+{@wIOw;RgI9lj)$AwXZ831emNeKkIg@eal9LzJHf2@X>+nx z^RXI%;}%B(%&fQI8(S;k}%P!TiUw3Jb*tJW_f32 z#&+PwB|G=Z-Y|4aZT}kkwCSX^9#zFqddr|>UbRb#Y(cD^@!S5)gt-GIuUjXMM0wnf zS!;b_bU*oqnd2t6S)W$QyIzg#d!v_#dG?!pc*f)hEwgstAES_hYh-EaVzE|wP>sPg z@~2684sd*p5Fi$m2j{sg-*wZMFIhG+riN>CZlW)JWZ0m#*EKF<+{|u&gOKcqe#8^4 z=!AFnv2E7V1;{O!SeRRrfPpzntq_>h&)D9jtKL&X#^L(>Y#3zPt_ru9)I zhg*aeFAAqTHg?`;8%2F2zbEk>&O7^~FXIp;eb8FT$oxdnW3RGxo(1l~q9+ENrGd;; zv??{HnZn)HZ7q;)jM~b~txMdsXKcoiI0c{?>A$WLLaQUs7dFV=!yzLJOO}?7F=#DI zs#f!g@Ub$vxNMEfDgJ7{yC0sYALmNbvDn8Q(kOCe$*QUN?+J%Bqv=&??C1W>va-*msfw;AqrO5iXS3`vJ@@H& zE`$G%z4r`jvTM_Y^>NfkRCrYo=}PYi2uh72y-Eq8qjW+OkP=!{9z>8Ly@PZ}2rcv$ z73n3k5C~1F5}NcHvTyKdGxN^ueeCc1v5%SIhjMU)gnQlhTI)K?InAxr4d%_vM<_*odb!$?o`KZ+8+^Oc9m4AF%oG+bnrRQ3?mg>&fm_IBc`nyC^O<5s z?Nk9;VUbkAG-eLGUAKY`k5?iBe&a|NVdmo-PcP(v8f)6 zdM8{M_o;5(dLS$KS+wcogm%QRCt_>&3F4O57#~Mm?rDZmvVHAxf|%v8O|GVC!6lh) z#SiJgy8IfX8R9l&oTUICD>eam$v?BDw31}>(q?9AVqC*t%+DaL$Tk9o6{=%00dWOK z+r*qp^nD@s+gPbzgYHi-(AsrORrBq>%^6|OC3(NjqmmTP722B_T1d`6SO*6$VRU23 z8q(DH^0r!689;B!f<$j_Ej>^(aS{8t^vO*uT(@us*g*Y&!~QfZwpLbp0A=FiQ%9F3 z915Jg_*;;%ok6%^YOW&HpA_(ajVNQgc%TtNPeCYwuoU_?Bg;#hMW8|D{cK*SLkZvC z{f5c8C*2T$&LQHKDmn|jX(w5@Nv@3}|IVrl1mq_7{5e!t}#4FeLRV?SB@M^FJZde~#?`WlXkRL}z)Wo2oen7Z=}t zx(3eH8g^i{!qv$qim9RZSbX`DpYIq2lJo-(X2{9f>UU*yatr$VJ?dYhpnl&|QLiH{4 z@EB{EL=|1Ofj<@3V_fJAb3`jdzp(0|2L5=5_RaA-@2<@4N+MGkXuo&zyxUgUuOUC( zIj?%W=mrj`0DhehRvsM_Y`4BTBeQXQ@WCdaPYWARp)19*2=R|U z%wtXxH-jG)5&Mzggrg1j=X5oZ}eit^I5;+dEpK;_I^-BjAb z2+4oE!FPH)?tB}bPAMLWWjeRL+^SXSzL4*;JNk+sY+bracv4v-IvojAb{*Q9y_)`Y z>xNgyg%u#0#weod!_xTASG^WP*O7C{Wr`Wj*#2HEydCt&Eu3ZRgRHQP!#bHUMDcr2 z>I~UM3gi#LnpLS$9lr?GU%g*P@~yqO(4q=A%fkg^qf!s|=MKKc()lS>IIl>G%KwXU z(!TS)cW-|$%HbaPvKVys20@#1yWT!a(%HDUdn3y-s6?dFr$h~?6BGLT{8IgxrPsaH zZeS%Q^-U7FOg#dN7jGd)Mn;He!D=YDH@^;Ji<{9$3i@kn32OLl&XSidgW|VlXf=;P z7zu5`O|_?&fPvvGwxmq}nvQM`(U!!;&4FP`>l|z>{TFE<+$k?08~>0g-@0}c^VR$C zJRX!q1w=*@rW=})H&k(6cWlU{VqOxm$^G=u=*u^*Ry}M!vzxCDNE^OGC29>8mNRoi zugH0g5FBxz&mr;Ab>yBP=>@h~7w6h+zBOMsSp1Y{^k8Njr<&L#zxgJYTUIkPT&rK> zat02i6z}kjaAVLy;|QdbHR7Fc(36NXwgmO1us}!{(rx!#MlWgPp>Oe^0|R0ozBa7Z zSYguD?QTI<6)?uDHF7g6RE+HK)GdZg*?paCF{;%VP+;@WO>jh+K(>=)4_T0N$KOzO zi@{(EWx@-s^5WD40TRHncO@WDf>KSLA3H{?bTVaO0ig%+Q(8@550Z?$rjIvy{I%Rm zYW%ie$E9da`mRb@=a%zfGA+oGJq=BMaldUIKsz@x7~$?cZ|Y-HrE>=u0Pp*@5HwL` zs+-2yNACWvP=>}B*+#~7dY-)6LLcpy%e=4JneH{$kyMqBq8*yQxA2CYiIBtPENcj< zk(dcYxWp4Gb#yh0LR~+_C70hbR_es!X3dM@D~x7RK9+Z$+(E%_@mEO42&#LV>2Wyz zMb~kzNXp?@COi>K?$GXqgK(BSd>)(rNRJI`hbsMm#H_GLPw0Y@(D%I0Ep@d3jo^*T z0A_%u|CS!e|2a9($nf|o1%4v;n|rQ3dAu++jb$;Y>lp3}XB@YQTkt(*aW2q-RCQ9L zA;m8`d3~rKC9t}8C9bZ6Lpdx4oovrlC4GWuM2;ox(*-xN8WJilOz+5*Q`SN+4u4$< zU-!IQeAXO$w{A6W<;;yB4W+)q?+batN4GG92^T{mzi?!y`eWlMT-vlsRQG=q_3-^c6gHg$NT$`t6XUZt;@{@ z5z}n+boY_-zEz`b_y;&~da#QJbdFa4dQ50&&Md}y{By>w0S3}dv78 zZlw*f3goQ)l>5DFhFa*6WuzhkU=^!HC@s#Hc97UoSTU4V?8=Ur7 zL1sOro%cONf6Sp(K%*H>=*^&QWc#l2yVi+CKXNB(y$ZT7R~SGC1oHaW2Gt(SxdGd| z!Fo4h@p~-aP}W57Li*(N$bP!)ep{MbQCvlyGI-2H=WCA5{H@W7nYHn9nj|Zc`k^0> zQ?^hm8^fbkB1u-0JEbNRi?jLB)G_3_I}#b754>m*0SmEP5yHz-uufd*HGVg|bWwchV zbdkGCO>}qRcSH<}rsB5Kh4+$T+K9L`WAjuQ@O2jLRz=gCcK3rl0Tsuunj zbrF{(Juec>gG4&=|5#&omnE?2njhG7{X!*ZNe3aNSBS2Ev`}vjey$UJT{7ct*FMYO z{^Uqb!qoR6pbbH6Py%fz`Xls-UiLZJ{MR7+;XcM~!$Cp`H35Xycm(x*Sz=RND>ef! ziK=LQu}x*FGLWd57WEpW;v)03veSrA^dWixjNLum7{9hAd7$embecA=5=lzw*sA5! z6>V$9{>+WO<;MECM%nS_!J(+yC z945>*USD4tCzy$4rNh6`HqkpMyz? zobS2_itmiNCgQS=AoUMjTM(~SUt@;Y>Cj6M6NpuvwVc`O8oalz5P=Mp(cls{Ah_au z;3lnhcnkF8s&!1#R&%lzEKRWQsZ!jUp=se*MTdUj~1 z%|#c><_TW=QMfSi*7?vmE|p=vSf1Y&Sb)KwkL>aZX^&O{1m9P-sOfwf?i><7&k~*| zn`(|q!m)aBitR1H+oey(S1q@oot@)4#HBGootrtsU;5Byn=26IHj&Y8EJ9~YUol(z>S1cMBQKeXZpj2oiCDAbd9VGWa7~NXvp_2o zdGlhT9=h?-0@XIpy`-VOkMH>-@3+@-=CzynmQLr{IKbe;-pn$Ss5kW@m+#x)WQjV< zs7DI-vOe99K@jxCu&g(zTdz;@9lt}lb(OHO1bZBr3Zw{xV~!6TNUL5L=kz3|+qYUfoLCeK=<$KAWD2`90oxpaVkG)7BP(w{E_JPyo*+ z;#vF{o_Fk0Gdt0z5_NhCijk@Nd@8obRfJSbjbv_@%%g|BLVH_=h$ zq`vG?kSkS~oIkNS{x zm~ku=Jn_n^H!iivJ(dj67a@<{FV{+Bfi>-;TQ^xIttwfcvqEP)*$0B*fB>yg(l(D&%JG+rg6tdOEue?RJ zO};14gYf}6os;Q%l4~?6RgMW#qq*^`rO`1u8%5^z6X6FvnC_w+A$XrakX)#v?^DCM zgHIP(QU!qsb`TkT(hOk2txMow0e-x&_<1>yN;c8osMiEuuiHYB_4sXCmA7!OtP#2> zG~A0xt9xT)wO>Vjm>|pn++s6GjD)Nu?v}&yNbI|A}eY0@7h zWym02wJIcdm+6V$v;Vqx)^Kv&&OOO=ct8X!&JtB?{cysgw#bVE+x5!6i<~8H`=oyC zwd$J-b6Wa~@KnoPoi_dI?pITG&w(6LCy=8~tvYnXtodd&@+GqP5oZ!^Ha$DLNDiIe zm=++$(&b#~9p4&oRXS=YUBlCGjX!4LMuN}9M%5CPjJdj1ni7vfl5#cU+7R%^fp<{; zA~L>uX*fDAxGi$r;a=Ns;VDzV%_#taFTU@s&qx9Z`@QKh$eFfC2f%a*@AppnAVw(;qwrn1&MYfnp3xug-L#@166 z#!;AM+_#Lpd^wam@(@y=Q>;3Q(jUD~qHSSW%h)%WdXmivQExh2LHN4EO7a@#fSxvx za;jfygo{mTv$_(5mIiXwj4%QIo`2@Zs!NPzcV5&i+}`ZnB6iIItyw1f0qR6Z1!gRK z*)k^P-MG2$C4if9X8o%R*WJ5Gdei1uz9BOdV4S7*4}g_K2LQjBvjsJxzHsWq{)mV7B~|>} zhr7KLFtbSRq-#y87VhkK>f^uMjTs6#!GdMfHv=!|+F#g+lH|H0o;-NyiK*31UiMs~Am+aFxWf8Lq#T_n! zl(N&@tTRqW;G@Rv3XG92<~b7Xt(Tp_I2>`=6fq|AVmo}>J)m+KJLxQxm;T0Q-|6B# zX?ooEub$!6V29l@WUr;D%7e2d z#@sqBGPnFW=x(R6c=nE>s|hk_Gx1sPdg>=`!H$i+{zczsgC)lol2knr9US(o1@S26 zptYspAHaJ?9)LGn%)o0@))<-%$8Q18ned|$hYH0R=V}CPef7xgkL(wog$FR>zLRl? z=vRtj$9M^SljBeM^JfFypzZm@D%V=L7{cy_UUSn`$?5fiH4|P&zZR}RbOyJik6tC$ zPG^Q-XXJ88ypVjv=BMWk^x-96&YRw?#mPt)eOtuKO4u58->nm5Xh{Gl|Buie>nBXx zi-wtA`US^xg`T_M*WGK* zF}W%=doRU`*UfGrMoi~xb+SK$U}olmQEUM+N?`NH$or#=+KRP(-Xx7^`x(tj-_UzQ zQUwyuH`H#NC2>C0AB=G}RF58(tk?{p=b&VP5Ir#p8f)@m<5R_)5S5)#1Ca})k9S=R z!w3v5uHjcU9yq11OZRZgX4D*AJe>7*^d&Y-u|$Es#qZkZcXO&#CpbW2)HQtrD#=?=&{o#KDuNTw{XsVe2P*+^j66` zI`aj~(5YvGifF_6MM%_qcSOI(D0fpBuzTnuJ4z*?3}P=JKJi^0{vsH&5+ZGLvu3wxw?1h}ivN3BKO46nbagU$<>8}>G? z^y`A_oCZHU?Vv{PVRQS|nOj+6w%OjSo&5RMoQt1X9mKuqmSp@74&klDn)}C z=QQoD(o?+GH|Y~}a{)4KbTw9hIi5wKys))hy#T&aaynHDA&CHjdFU5q4Kupvl+83^N zlA<9I#_=%jG$)`3wrF!Seru#+Ts19%ytwNFYk1sD{B$~h1IZ~S|0_6r$&vCip z#Z)6N_UPL)_X3lA8anKQ_zpexK|@S(eid((bNpIZY(whAlju~!@tzYA_NAD}B)i?f z(C;*bigs^y!#JMSEb&7ZstH1)Hv;rFc<7=L6A62RPty$Mk>kV)B8hZD)6+f70fKqMQX62QA z9a3mq=$;rCuZ54(Z3UVLj0o*9*0{DFAzZ!>%9ME8Qmg5XX|=%#RW-j5S#}TywK)wg z`56+veTAP66!-J>&5DuQ3mrqExsk_r`KK;b8!-joMp5NPd_y&TYYCWRY zqV5C-^w1C|jdXF`IFOp7fayJ}Ml5r&`Fs^lutM|KkW59~FBWz!@4XmIEMdu+OTK?P zC$slA?Czz9PhY;ZZygNKs94i0$zcWgnP!1=jYPO#`n14?OH;smzUBZ|CtwTF4Ed1E zVy`_Na@NB+sY88Zgn8w-^wG*YMu$i6jA-~^UfLiwRpx`gu^bV`hx{%{r;QbD10P1K zW#*H3$-&wRAVPlD4&_zrV&a#|B(Dau<~<`@?U3ovG%Tgn&t2or2@JFT17*X#zgUFY zWjk`vwTUQb^0?szVbw{4#w2!I^7D=tf<+(epK)|k))E_u{)gu(oqjFkx{JTre!7P! z(=X}dR=N&{gN?x`M+!a>!SnTgq1-v~8ifmqhAcmLvflbp8GvEjBwtZWFc3t7I%v&* z6bF&LyBo@LLh=k04$`%;X7GKcKr(cFV3|$*Ib;lh()8iB*?SF~Z?=d_)%FXz?vB0^ zNl(5eNitPXy?LhXh|A|s(s^}q4wHJM-GN&2ok zk+$f!ax3~?jv^A=(q;@`|-NHSsx?=nDzYRR5@8Us#)}MzHmT7W_|8> zh(15?XaI|k4*5tUvLlT}CbaM)rB~$~U=!gqWDT zP9f`#k&ZH@_s&#RNQyl8JaDqnL?tb>Y`u%!2VH!x6mxC6hHo2zf{>VvhkyI^UGfF= z#x^uOhkjczn>fyDFH+oRd{$v#OhVEW9J=e-4vLQj$d?ySN|^ZuhA)Z~w|0D}3s_Mt zX`T2mP%k^&5gDU1U7?va_Q68Of90l(*#d((r35BL5BtuPLQ7e-mB!mS@->GuZZZuj zd|2mnT1T1#btDcN{&@0}nS@qO)$LLj0;=77hxkLwR`$E&Sn@3WuD!c`+QBjVV!Hm- zJ#o9|zCoRxs|iA@@pul?n!9Z_?MvgtW1L_iQpXbs-q9c{thXKFOxyC=PM+|m%nqG6 z&m804NErloWv7`w&lIgOZeA+g0}Db8=Nni<0D6<(UL+?yfemqB zyo*D!V-Mzh`R@47>&^}FHf=fd()hJUN^b=sHyrK0Vb9KL|M=jSp%Mb1f_UM)qG8o- z{`qxJvX9BdM&@n5JRqZ`ltxKP0kVm7tLn{xm>U5ArI}|GsH8`mU?#D&zj;8}{S#8qb zy{@|R=*<0Ap#SHK{S9l=x)&--_!8_-@K_4{LJ1}cH^x_9r$Ao)3mNG*d#9zQt|f)5 z0Wnw4Z)E=LN%K(EjX&pFTvzQkqAm8>_6L@tE3?%SA=Jh|w9OF1~#daqB%EeD=)4&#Fqe+L?d*1cGaZaO|#`a4wD1yW=Is1A(y zxV*?a^k28?-vjbHnzURnpO z*Hr)|R{Q%W?6>sTqx}6;)nx!UB^!S{n5k-5y~778evc0XGwZIyt7#sR!$rI&J4N0|31h+o{ZiG+Ll z33ep@g2Dle-9q|rj?_xW03I^gbR3%Gj&QJyZ3BLJDBk*rJejX7!WK}a6sPYXDZ35T zznk5`AM)N$cg@Q-NV-HRcHdJ1!?Mv_z%na&e1gKxc4O@t1m`7_mv-}l2wGogD0d1i zl`46c1^DKDG=LC?3;6_4Bm&c$`ZLG+!)>`kWaaKqOM_*qmf+Bf+pbw4NdJu>E$_L9iZ#?mZGv$!A$h_%QAtRA#_rzZjbH}P41&Z2ywL^{zDjVv41p90=*?wybv7fas?-+>=?%wjug#ojo<>VgdIH5cG{bWA z4b}f;E9Ir3hE|=maPG8JMuGP957(aEp^A2)U1EDx0MmBu95;_@qYI@g|M|dx_YUdd zzr*CcL$(dB@eSFP*irVy9k&&z8_)hTZyVgue&V#(NJYP6JnR6>K3Ig|a&lBY#+ndz z{o=YgJ1SfO;Z=d2$TYOY>{{Evvhf8dseZrh{2!k-bngAU?PJD6Tbg>!B;bAHtS-dM z0PN=cZg3;QfhplI{8@Me<2;>Aq2 zRHtXYLD;|B<18iB@;J|O@TI!LQo9BD2Q{OL|%R=N8c#Wjo+qG9?6>UNrPacDR zbK&%6O75h|inlu#S|;WI)8I?kd2*Rn$ALa9%_d1*p&SRRw0!J|tUw2NFnacOYu=NZ zn^@GDO?$bXzHxe~%F*hG{d&(h%$l~LePuG$d1}o>z1YU`6$5wT1v7=lqp4Led}jIT zrVXmD#v@bAb>_g2Kl5RG(J+-Fjf{t$)6}wVV_Qa32yk5k1|}c_zjWP`*%*avnR7L= zQ1%_eBEPkXiLPJIH<|K4ZZ|%=3hyh)6AOTiGlh1`isp{6qOYr}TQS!2^S~Yr?(Vz8 zK(igwz*x;-Pw?tTlbgb3v<(sS2aP=V9lnbId%gLV=X!i6Q&pH{-hTC+x2ZbvkHivs zrGFhij`?6Co_!iP_w<^04Gtt-)Qqi|ZZlr-q#8=K*sO4v!-0#D=W6SJSm-<%Q zOA$)ryC-ck@7`K2^5?O9ov$8|=9D8Cj}>`$y(Bb=x{s8j zG#Z&S+~O0h1zkH2yTs!n55@Kj=R54Z@SUdDhtd~*0o0?}MDz5C$I+v#?sY1fYr#i` zj-WF)V}01Ch8h=Y%}rtoJ$;w55m6~MKvw?|ARMKRyo0>fx{*gh`RW$a(Si7~Xel1RSeTXQP z{UAR65y;>LK%4wN{|Y+Z0!xgT!6fpyO_cUh_p>wwj!-^NS*hD9;xJO0ThNJ+0^W(a zCi5dvt=urLTBWJ;^;&R)$oGr25ug*)$FC&lVKe31MD)iEJmG` zBnrS>@==<F%rWkKu7jD*ibp8~n28+5^(*Hzp3yZms&9%4l4 zB;J9rrU`_LAH5!I?%bj@a1#I9!O14nmZ9yN{ov(3T{t9r$*y=R#mx!x8qhuN3gM|3 ztcbgXY}62uq$hjZjXoay^;mo5Jh*vZ+@ ziOX1uDv>Ih&4~>Q9$N2wA6g}IJD44X8fXT)ZXbOvG0+)EU?X~4E5|E2=(?(eh@QQg zmPp_$G11VHqV_8`JVvY7vyyhfq=%LBEnmvm!~R@b00KPwUjZD5jB3}N1+N$)tW51& z$WUY6M|WRpeplqqs@}WN8JMb0$a?7!Ru8#9$XR)82Q8(?u*ARA1{r+Wvy?t}-r}Cw z)spO1U?dKitK25s)~8$eMlYTnzXd5a>7VOL@K_w+K$&A?rA*EM7{lCO{L&%s~}gzb#=lfj9or!KcoL%y$mXmKGJgSyu&Ol49|{o5j0~e}^7- z+(#Mo8UEc1f$qwuLk#@$v}2-udKuFt`^OJ}|Jyv8&C-2f-OdaPj>{qFA&=cbL6|}|4e)Q`G`6*cf382rXh?oM@>TY zMt3N~*+r&rxCRCK6GyaB6u$3X(`7oI=!oH*ba1-Zk}7q5Bv}7M^OHf7o4&mDk*1+@ z#jwWEx$Z9TxD!zK&EriX}D{_M?Cr$hc1J+FJ`5}=dU)>B=0Qs=q z+iWEMR5L~W;!dGaMgRu7*0;P~Cs#7|2OaQy@Yj`+;Yp!!A`76eaRpb-$R!Xxsd8PG zTZT3vG*CaWqOsv5YOR1c|AVj-q3}K-La4YYPw}Tv2;LfcIc~nEN4DT*()v>;e9@rb z0b=R!VVNEKOuCJ4xK(*SbjC;^waqWmRwd+e-BUNDueU+-V2Qt*pf~_ro`c#wj_80F zv0+{lO!Wn(>S?WxcWGnys!e7L7OCXFp!4l3pKMY(Nxr{7 z8zEB$Io`4gk0RkVf^PDkwTQaOSaRc0rQ}vVDgcjy!1|0bQ zrEkLAL?yBsjb$i64?gr`b!R*ra$q~&rkQvrVATwbBfK8*Do~*DvT;0nbgBv_S)Qtb zMRbZCZ;vLSqYEj8(e_13xM2~oi}NYjv3>1#B6(NUd+f?ULs<_G0`JjK_8e4O^=4i2 zK_ML1VqBoZVU3zhEVd+>jzMBd@_Ac8mAp5FIR!+e(qE{L@A5#JDJ6P1lR_B@`&Qx9 zdnlc15<3CT&wqeU!S{x>JY9yo++85C{i}wWDH>?t^z=%$AKqmUtyfg zUvlEWdYaY{x9eWbO>NH4VxmArHQ#bl;^NzHN5WXJ(Y z|E#)Zlho2OB8fkcX0=S!))#57WeDsTDtFXF!RUVW4))Ee6}KtbtjN#N)Vk~@MLJ4R zR^=Vv-hS7UA7I((boUJQl%VUtW1lu0AHO}iRNbH@r8|}4EQBx43tQ8$e7pglA81<8 zokFTJcp)Zqb229%_0&GvSbVQIEZ%-t^EgkeaNTJ0gGR^=Hc`GJ$ajyFY5vkIg`v#| zm5Y;f!yhC02doU3D#PjP_+;GYW@VGiOCa0tbj>xc(-Xiv=HsYWx}u_BUh-xi&RCxP zH8kK0SLKxgG=f`-S0!|N7`aLlvy;XM-rCd}!btD~s?aqRKuG8^E&1x-cvUozp{P1CH}kSGm*GUFPt#dQoVT zn<}9h_?lGSiA2}X70uDrfrVC@(gT0{*@z~!lQLw$=wGSl*3ukK@BKw}<90|j#LlHP+m9BdT90_D`fxOMc~ z1}xrgRcfd`{FApwB_F+00^dy7CY(NjzlAqG2flA|ji%6UMSc7P3l6l5IeM)PeT#8& z%RN*UVU8xJy=7cQ4DFWE_)X*i{tG*smGLP~yy^VVdEq@o-Skx`d^j$-)}mO))+?~r z3xoKYlYF?#qfr*xzm1+!jTf)s95r6*L_>3P?fK~Cn!p_{)(ue6!fuJJ~9SjBJVqo8-s zZ>5Ayqece>O9uI43Y8=1s~tP8g@-`(G5rls7RM?gO zRm-1+zO#-OY}-8Jej!_9ibWDv4&m6W7N7gMIDc2=u*<3v0{zh>?j*SptH`{R8ZqM| z;M}08cE#T15GHn1!$~7l)n4@5b-K$%FAQ}yKI7hDM3@{jY0UVDb7aqw1BQH6G@ytA zyput{^Pm%*?wdbc$MXp{QXbDqqS|Y6+IbYZHREgp5>f8$&s1HmMR}H!g!eV;E7lD0 zTVXjPnVm%!-P&m0jlEcF4eQ#W52p8%niI(<3#!bv&oiiIaH%;=z!KyQG zNs#~ds&4WF6&<&o{gZ9;<(zGxF{!y(@~A;AB+~{wWtY_L^5Y zn|nytltIa-LfiZ_Nq!f%62#a@!s46y-hh`WUp(f8tJnDrt11htvsHSpqq{jYVerws z4Oh$skg*A)+N|W^S^X%`GI-lv1vaG#a^Lx&8@L_5p@oVyfn@i_0DFZt6X}^j(+%fJ z$s+{X*t$}`V7+I~ti1jbzh}c=$U3jM{}24EBNffwcC@j~9Nm3039Xr7{jWefc8|GA z=VaS_g%eCN@E#7muG;Hk<|V(r)|7Y55^je*{<>8g-xkSBui<}JF*^-iC7zgoHf%6qe}x6q^{ zErC+B8TTy#xWNQJr2-|+ll)bWHBvlJM(O2_)1|@%R8iKFmAnj=5wfBt7?i$)JYrF# zA=zbw5~OToZc^dfpEf{6fXV1{HQsiu$UX)?#RK84WK$W{Qr!AzDcE77;^gc2(aN*) zP(J*+3uP~P?=y|t=>otSf0ZHk28%uWW|sYoqBrDm8hIbCAz~ z^TzqP3n#dqJYOHn?+xdwI?NO?Agd5Yqtu!!dseqc=5*!nR644z4Q##Cx~4Ge`w`Lk z*j;+XQAf2i$K}Xt^wpNU^&c8(X8S_uE!3G$+rq>@W-z`L=po?7jHN&>Wm4>GS}`Uo zbKgPpx4a9nR5=0sKi5}h=NO%S0`h)e;}3GTU}>8fTs3gY0W$c;HBHhzQhdTP+IgyA zz{64!+ZmPPjS9Qy5m57;RUNw~tU2i1`fG15k`B!Ay z(qMbMsoPZ4wwZ$|ROYMBQ#|we`68_3>~Y!SPYa%W|Ikv6xfI?oR8Y4QGhozF;S@|C z`U_!Z8_+QCU5kQ4f`|vUvNCKXd$TNRsxc}-^~OVS1^qh$5cq@BnneGti^Lp11!895 zQ43d&6)P+J@R5S52|#q-Z%SSYDw;@&sP5!UF^W|3*jgXj?7D9I3%z92@d_+h4b1U~ z=}3X-RSrn5n1TEncVwyq#~*A1D`{-I>zYS{2zys{rCawgGD=I4^z<4mDbDs(FoX%_cvX% zJmCsr2`^X)a*nBZlW_7o5 z^+xMiNb{3LanR!m6%;60rL$<=#0;_FF03^NLg@67PmnuuUS@Kts~OZryd`p%mTu}&NO@`m)$`$#w)QVN$T4m6AOk<}pe z>rE793vhbKoX9hfATDmDU0+e`y*Tz5wG|iNIRiG8n_>;$huh7^tOdrh<=;WX#z9S< ziZk0q=1tYt2W(}*lSz}f+a##0_%srWT?-)w37Evr*LwPRCWk&tyo$i1v!yQ?>!$AE+jxAW4;HU)@F-A>KZEV}`Uei-c0_(f9{>rr3h34^a zo;!X&FL6Vy!%jNma>3l4!>v8!4yAx}dU&ft@mjSy@Blp@EIaCXnUw)79a5*4WU&2D zHCfe(wtwn<7P?Ei@A`;V-PwbR%E9}fQmeOcPyUI(E(G!TD$#%KMtIX8d)Knp$LsAb zrwU}5-p%e!-~|B7Foj2b>o3S+*+$O4YXn^1odGEoi9W{&x$u%V9%GU*(;X${47Vb^ z_(RTb`U%XqWJ=GEyF5`YoAkjovaa|6?Q6alOv0<=k6RVD)4H5_!W%~T;riQRd!br+ zwjk{nTLn<9!Mu{6PS;CGWGK4|8;IN_{S8GVlND%4M>m*C_rV|;ODFjz zC8K+*nmx*Nq&VXlCxF>v@0wAfk(uO8afHeMHp(`E=<5_m6-K@lYAj)jVv^&03n7ZQ z#&}o=WAs{vqtAY}c6j=7tmsHqBiTvVcYy0&1yZM}#`s*mjZK^0@xq-d)ah&n=l>}> z|6}=7bXIS{I+$q2Id?y3IZ>Ar=MT@*Ge`+&>}|{Yh?J2sZ=TPC{E(;i-hG|QN#3%u zJbY{zlT!9C8>y$|0spl?=~H`jSDb6>J}6u*-h#%KF{S0{#+T2)Xg33+efRig_e|v$ z1NB=4jX-TC=k5`>g$QsUm%poM_RG-biv)4$DFmv}c+~#pDC2?$Z|eK#YeCI74MUrW zdxr9p3l8^?Jn?Toc{lmyQ)W2E@c9d9wm#m#+=yy6727Rl`)jEACguR$k)CFJ0MH$s z27{TTrUtplHM$X%CzJv-MU5g=z2~|1PY1LmR58^44+r$ZDE)MiIa6@j?@j;!?9>nD zwoAPVqvID`S$f`8HOxL(M=#T$K@o1H6_VU+h@oWWOV|y1GlcO#J(fBFtCkn@t53)H zOwmnF+>vR0=hSXNQH4=Y@Glfx>b#vs`{E8BK)x%Vy=tnPKOQx_`$p{O5hi(fZ_d?= zn^lD#zhHUkyqryCz+J@m!ffcFO$Jfs820W$doV})ChLjX?eeZ`v*OG9ovI8-bELz3 zgiz~iV2mwYVZHW8bJ1;nTMYb3Kh%81X1Ab+6QXU?E>-QjQ`Jikw{dg&_`$;*l65(O zPt4mqMVtwy$`LRb0ZQI_Qr4^a-ZXDjN4>@u0*Tk$u zc6bqT{jqg6JSNbd28E>xxRU&&^=nF&2!5Oymf-u{l58i>+>@9_;3vxWK1A z8_P<8sJ%xr(?>3YF7Y;AxsOs-a1bT)+q=zwPWAyKxaz;sOXR*CE!^m)8u6f%P+xTV z8LNWq`uD!-Vt*c_wQ-7%RPrppaF@w+>~4Y+FUzjO4^fqwYvCP5X@`w&$r=MjDdSq= z9gOrtt_ZXm9~RcC0WE`R{#H?4Ww;)Hw$h(Vs>b_rgcpBW%RDUVW?Gx{HUocnd&)Lq z4WraJ;hdCD$@!+DUQBSUDa3_a#mU<(t|^^(BR5B{l*YlvsB4`RSqVs#cb8Uf@{v0aT+E z_U}#9K@dbT{k?wxyn-es;vSug(EFy+JToQS3nkCMTK3pf+iOB6Gx;ga-G56gggtkI zB4t$SQfH{zJ#NNv7mvVH;QIV%fEh|cr>!+XG+W{l+aJ8ijrwclGz46z_l6uw{dS6< z!=fZ6%POvH_?gbQ6iW+QV?KGPF*@j*I>^-r;CS#`wvIZVswU|7Q#@D3@79yRoNPqc zd=1pxjc2RE9MDw|-<1yah9)!b$Yz|Zjp_FDvAd@Zf}z)QLkbai1iJJy(^$(Yft!ZWkC;F)uKb&qaoeSF zoj0if@?oE4!6LLhZ(zR!2wns#mN>g2wYcF{!~14V;L38IqV^j0KZt+@d0EI8$0XnL z5q}r$xk*R$l^o@XtdjfoikVOOiv~r^8>Of>xc(|z(CiwV)ZTfT7o8>!z6Ooff1c}o z+5lJs<|G!@tKUk`S5DoYinguOBWJW#%(TBu7I{}X<4^SFEBvzLF(@S<-oybo*9=iT z=umhWK4akPE&*5Z%p|{eJX>QoF=y;P;>AQ_FB;u4AWVt8nMcXXg@^{gcCJ{b{$rS-o>*ynJJ0Ii z(HKiwd^db2T(9O!R(L4S2AnG{Raw=`39o6ZZmQ*FH>(C9Y&jt?a=Nx}IW4@Tg~@q^ zAd(d!j$yqK&H0(QesHhcI$`{sk@e~65Ch?+xmYxJK}5zynvD0+A#aaXF4FM0c7R#! zo#L2_Ly-%#0WHzdO^n)Ye2>eejrf!f1Ww5TVULC3zgYv;M*pw|IIHkN1_vq6XE?-@ z9d(kG$^Kx_la+Dsx!K1}KaG01&th#ksQu;xV664`e#pgzie#uHi~CA52-B|_Tvvpd zec9_;sdE~4d44W@yTEw~N%#TZaab@loU4rHWa=d(mF)^~kgQ9x`Za6w2poaLgG#lP z$T4=OCyS;mOS5e%Jg!Fhy-rVrGq7rHcG3w6h$E9ozlmoYT)G}X5s)`}6)Ue`t>{nQ zre6*PAixa(XZ?xcl`kdD$&Qq~0j+?o4U;;LcWPGsKMSC*7dj;k*WyS>Qyoa|GO+Tc z9KV~6+(p(4k~*qdb5|mbXI(0~jxlf8fz#D8h^p2AIf&x&J| z<}InyGlj-gR%iw;5ngOPy^5YZo%EH4y2Vv&6K(;^+6sl>opROvrV)fQ22$7)r;d=g zdwUJVL~yL`^l@o?9pQXcS^~YT^95tvBgE1_H2Gu>+m!Fzb`2Mo7l2(o^(Su!MCX>7 zpVLxinnHIO85KqtH_|_N5)(XCp9q=!c@H?A#V()&_9s=9GxqghwosahA>_URQJ}mH zeJy)Eg5zoIfMiX5*r)$DCzAii zKK=jQK>yO3i+Ne6E9D!IF!ii`llbrik6$Tb3|m-w3~Z5Quc1}?hy}-;Qv&=e@&qK1e|S4(JAXB-Ldv$qkh}(-4wC346Sq4{hbo~SbmLQ zj%qYNF-#)*|5ta{8P!y}u5~;!9vREX5DQWS1f;7p>5lX!2n3`nD3LIL3K1a`%OD*j zNa!#s5E4qHON|bKgcgAiq^k);YUmwuz68{nbDaC*uKVMx%MaFKuf0Nc_Pg`F&-;|m zWWU>+VCk+&J~J~wCX*bYIWt|)J#1lSsw>dNQEL=;uRSKZ*`Y>*drNXqk~2jYiimW^ zN~V5!v#23e*jc(&^X9~)f>(|DamU#dHYA~0nN~I9hLKD6TbP^oIhklT|FWykwGsK$ zTTHk`d;1kcU?0ALzm3cL0e<Fc!56MycM?w|zuliZK?>&bYm?4Z^xD+F#0#qi`Oh3rcv*6dO|9vOMRKO#u2x)n`o6Bb zCxww)VF8^^96^bXbFYM?y2Kf2@1OK9(&1RQ6wpWg*&j@_O8Ms}#ht~;>E6vws1gd0 zRI{o7KLCjVP_fdM6vH`;rbO!GwpgOJ&?>BtA zAI)p0jwAU7hcqU@PEZb$rmN7>tW%fI9Bp?l9n_gn`RgXB$3AXmT=k*&rP4kmn-A`_*s+}87_oWrpJBQ1NL<>7T`dnSYD7q>} zIA*eaN@L1mEyl1|v%;SLk*IH5F-yETOS*1%v>sE>wf4-r&s|$KgfjTd*hd%=_FCBb zs#j_^_QrVw9j^VhSHH1tbv)EYF$A?Ho&V{PlaV=Gibf##9w4tZNy;c zU>k(d-3uc7YEm2o);>pkp=!+~%Ef-C5=?@fUfp$qGUIR*gU^ik%|_tl{!EEm#9MWs z1IF@v8l9v&$accT7<&hdwTO8vkGw|@3MAMiWG1fL{}Qj!g?$($;u@vD-vr+~wP);o zijE0CtF_pXr~WO}y1dU%$|y;3)1ziJE%IYydHwKqRS6BDkCWnrW_=&rBGBTgl!@aW zk=r=+rmVPSp?2ksD~kmYM13*9kif?M{4z=iMwZB|9~f?(*+M3+w89G&-Pcm@3zxi@ zNsWX0v7fUWqJ8{vj1t4ObVO^i8m)f>Jvu<;Fg6g<-7p)lRO;3g6_=YhVkI{sJraPru}=r;X47uuc73o)8xYSe zJs;(%Q#8c2f~L<@+pzg$h}6?%A4hX$j7|wG$h25GHmDHlv4WscpGOlUD$0#LRezt| zJWV5K7EUxM>n9t2^GI^@LHXm+a*00aiL8iXTIRYd7&f| z|4<19k)GNb0qRyV4yvKj!qq($LG7}HN~HV|4#Mp1zF;|)@ztrUu{!ZA`r*ZNuht0G zlZnF;k(UOfIx-FEYLTaI9^p2c&1hSbr}{wOoYAk%_mGPqKZDX6(md*|fLD#XwrIkb_G zdmgdTy&49KMPdwvWEinQl48apkSTXG!#Ux$8l33CZfGw}{tenf4czfy3$^u_(e}1k zA-NyNR+l1Z(slo6ty0758E>pm$`>>CiP{gVyaEo_ zv2MMc2$iD-VtN8;)gSho;H&*zir!e-ihVJ|Ui33q>WB#Xi?&9!vZ zV+b>)i{JPepHpe8n}Mq2D{A(`*dquExs!V3aLYdRtu5D`zwI4uLJ!>L`(hM5vTYQN zCNuhx;}CCexA#P>k8C&~@ke^j%Fuj|HX_q+nl~Z0%t7WW-BjgI3pw=8B+Ww2_#!kK zJ2jkGw&?$Kvoa4!5=rPCT5KxRK}o{zwCBeX%9?G;bi)qe;T=`yoc0`vhB@1nn}56g zrQjVic-siYYB>M*k8LyU3)SoSRzIK40@k+2{ zTl8NNo_fxI$(G9FWFZ=G#+RI>JTt|jvuli^KSi7Gm<9Gy_Bz1+^?$9{WxwcuS7Ovl zDUjw=jSBebWz@~#CWw8lzjcDNeFr<1aH{~pn|_H97ZW3@Tbu&mKSj^w=IxEug`O*4 zJ|{a2kw~1-{JyS??Z((T{_l$KZ&P@zbN|Z%uKpJ!<@1RzaZVC@zn1oc8UFxq*%FqY zmDsgMy1k^?ACDm;SN6ed&=Hb)B;+AjXxUKxWfK_htAjF?bbOP{>XH)!cvxpYzXfs$ z<}9vzA+`K+FJ9|YkwZ0xit3Q5*hg&NXSYj?Bk+AL+o4W>Z<7nXQr=Wqs$1CdZi{0a z#GAxkb=f5u=1=coNnlwtB>L5zwx7oH(ed?rf&toL5lBL!L@li+<$h!{M{JSq2tSD5 z1G!8EwT{R61?rLY*C$XA*(EcQka;yXIlgPF+Ujmw1JbwEQEDL{Dh|kol)%%ld zXovu%ZL{`{yVr!i6~>fF4ygWW_5?;Z`QuB6rC27=#lDvR^n6CTvlPzd4|Tz+MaCz~ zEaLovt}h~wGq!P$Wc>O_&t+AZGQdQEWmL(>;7@iK%O1Fob*Vq_3$6?~ntmKAq8{CR zZ$9_3Yq*1^b-oe<)eQ-eS6x_r10t*DW8y901#7#G1F{#h|E6iP&hd)Bf!J-ywmMkD9-cd~Ce1u}5W z9kS_7xZxk$)>ZP-u@U8&VFL1ic}}U_l)f_OuPka+Wn_)<4^}btYyAzTO8zE@8j+~e3aqfwEn67RAxY`##~Qhvxlhm#4EjTg z(Rl#`IwcZtpZfKg`Jzb z2$EPN%Bf`&?;}ApQlN59KB8bEw2kR%w~97a00~M!z>+=T0_eVA!CUIX(D)v<^g3kN zOixrJJ~L79gHyb6_=z~<{kmEhLDc4RtMp=(l4hlDq#$8$L-AjvVe z!UHYS)|ll?^iG5&8}3C=}!1$yL7-Q5D9hz1Rioj zmwHt-jH!XXV;jBik5RTVw`LU;aEw%1FS_=Q3FNjW0s59kp%6};#S7s+<;tVrwcy9i8D(X*Tgrh64Q|YBIHqW$9BPkyX#+wfU z?3-1^bJ0Ze*?n8TF6JHSxt;E_wY0RPoy9?zmU}@Rm+d;N3CjCbO1Cn>h!c-}Fov-{ z-+7UE()CUj+;XoZv4fn~9LYg9LYjn$3%leKAI_)DkIX%}d@j2(|5m~2v!2osD?U&L zs@oM!yo#FC?Sl$o$7Yh4ZOOac4Ib)@Y%*BozN7#0Hvrw4!(v`FEqPE#xpWE2#V#X8 znCqWOU8}Eho?@bLlPLkXrDb|;7)Uf9T%3b1-)zkz99Tg!R52`1htSY$8W{G{i3eAz zf2nYsZMr!=QCw&N4sx-81g%|(VB;W{8_@QhtC=?Ql`zIDVHFH|mi4NdG;1T>Z_qi- zNtU^JKE2SD;up79`e-&O;V;q$MJHwAx*V{t)_O}u8_l_W^US9ZJ&b!`iXIMeCA1;(>hzz+VEUJwsQ|oSC$!?Ls9y1)aunXIxA8Q_dGH0YCDda_85U0i1 z&+<7Vks(!9eBt^&7FZ(0vbhF=W9o;joB9(TKxBC-@`d?w@vgz8#>qhMxD zX=`}--keDl>(ewx^|{CtEA_eR&>5b)Z>QC^MIYD{}(F0uVP>Snn=ZXbO_%wfP?e&w3Q300RwI zB`v7A9qe9US+#+If{QujHpXlZU7R=|ejuUoX!Z~Lw9NT`>%LS=rXQmLLFxQp%E&RMz%zvynQ!Il~#+Lk`O5#&8e;aOEt1_aTp^Va;GW&)vTRQ z)*lF>)s|hjP-_+_Kv~`>6GTGJBn+w~bNL(}O@idgk~25P&eq>=@~+6p%1kJpGu<$!YHB9L&9j=Znc^dMsi*Cl)Yr%Qd&<-H&u*WtXmZ zs)>v)Mv2=iy4cOvm&$UJx}BadtbYL26bY({I}d?fxNCUN9?7NG4O8^*%Wl+I6gy%9 z{A-Ovfu_ZZ0iiim3@=B0oB^N^{mKkyaQrzG$W<4`2zZD{l@4qqN00i?N4>aRC-!0mR)h)==(WuJ#-dOKE@{H4#^e zUE8j|7XM~3*hN!bjRWH9Pm+d;g{3PD{>I!qtVhuPXmn0fG<&Kaojd9pa-SsM9Hby- zoH^tU9UvXG_T?H=71~Ff-vN;D#xs0?s;{LN!+*T+yegu!A=mg;=3Y z4P9Rsy-Y!j!iKLYugq=`_m-SkNm_pnCU(hS!vM>3v07srsXjrPuMVqlg^Feo!PJ-6 z57C0nA8Ng0VSgs4z!7Y`fKUXpkQl@)HS_V=d~>=&%f)%^!6Q+0?Zkiq1@K)s4cbap zA#-X&*Sz1?3iwuQ8t4_NE{6BI>yj^BNvQdFn%9xuG0`geD||IK(|@V&noKU`m(C0O zcoO}7Dz}~*d-bW94ooN^G-MVy7Qa6HjE@! zGlx;M#j_B5rPT5#I>rTw;N_r8E|N>z#qRrUHd1jTg_4=PYuD^x?~~Tsxp_+z382n> z87E7)BeW$)&ZZ1s;$D-V{*64N24+t2V<0SPZf)s{{P#jWhXElu#+V>HE5+E74x#{# z-`61P5m~*}O9fv;S0T?;i7e*);lbibHy7NMdz1JQzGOMU-I24;{g@&JY>Bn26(XTz z+-jgW1Lk%MyWx)KaXUeL`tUH2Gq_ddT|+*;K7(^f!sk?Dj{=lm+%N|kr+o7G>bF7S z>cV(&orKMVX_f-B5ZWHyGPZ@Cy&`yVWM{u9h^GY4S2VN*^p7nWX|b%?SD}YsqMYGO zH$CR?6PE!BU>1_>qqg*!R@>IXv|1!3Dn)zKv=u->k Tp(9bO3)R=YpjB}G^8J4SJ)mt0!ML`k;kpK|}1_ni1N=z9B20jP|2G$7v1GFUmE(ig7dgG!j zDFRb5MzjyTcxNFjFAM`y9gFm2^d5SR;3%c#0t18E^VjdqfWt3S7?{@rX)$3{PyM46 zug}=qF9YY?hr+0X?G!)AnSO=aq+}r37id{qr)PMn{Hc+vox%b9-nPEgUn(=O)=H_@ zNzu|~N|#M}4E?qK_UG5HpZK3%c*-c~8#Qv~Pq{V5F8y|RUCeioU3YxiW0M^|JF=3K z&yzVgkSb(Jv2jI)|1%BpY7!EP{htJ>94avuM~4g3P8(Iw)X`BpaZCP)jh&dBEUlnW z&q_)D`nd$2{6ERrjwgMzv8mC-uKe_4WVo)hxVU(hj3N~~U>Fax$ub#JSU{k)LJL!> z_~%b!Wn~3|OmPUQRK%zMG(bKtLHx=`B+Db=euHl!B__s{r~R7<;S6nEsvE;Z3i4A; zW~+5h`jalr(myJZUnrW}*_BhGW5kz!;(v@PVIDFoVwd^9b8*B4&971&6P zM)djT^#95$Sz4x5?>Bq!)-RYcbr$JUU+WZMu5Q1>5RAo|yyV%?Q~1*1Mi0DZV@*ej zDxC$J$-ndJr3nL8++R5X)=9>7O*H>+pQL@JOrLnjLFOQ31pBn;QjIt6h2&*roqrII z0iwSNj_Q07!E+5$zY} z;&N~MK|mE0b@gZK@Hjk6NvvhK}*ysYyVN z8Y?hRSghVs+%!`C-G>iGZ0S)e6(#D|MEH0c!_`3?Ch!(Ea0d%MYT8-l#8E3e>T&&@ z@CMqmE*zm_!+*FxH8x%arlxvq|LXEw%aWPyz0+H-Q{%-;^T8;vd+M2+G?j*ojH zu%!FV|98Mm-9fOy5epsTU|)rp81wF)%#Fjtu)I8qhzNw<{{FZ)#}Tlam>6<50SD!a zWoz}l10x4V6c~(W;u5_820OYGRn*xod?>BC_=wZ@vG)Epx=gR(dv~`iv!+s_9alP% zIfAxfFcOU^CWR^~p|f0BLG?@q47vX=OIVd_n!dhlxw!w_Z^S zkR@|8Iq!qpQKaRr>kTSjoXMz*q|LciiJ;^~*$`8GYeu(m`0#Hdzd}X>P)$*GaX8a& zBpx-xzEvW^Ef%w}tYU#tx#+auaLct|AgITQ?hgbK;W`FtR>o2gL(UrMRq~i@P!XI8 zSRKSL!Hp02+U0>tRVGZq#>Rk~%@^3!IOERfW2;KTg6HGoGxuEIkJtREb|IpyOtz6k z7e`^n3P(ZjQ7(b)feuYon$7i5Ch}g3_ba- zE5X9Nb#PD~o}-P)k^9lE@4lIN4mtt1jilbK$i;Ymyj!~BbtINlX7)<4gIjn{@or@| z^}pH8xv6o^or;RH53E~IC{NL7vDY?JxdxLM9I?4+d@x(Cn90SBPDIqbLE!{}K=3s9 z(XdVeH#lq-@JOfer&MZ~rrWY*jrswDXf8&478Q}>QBW4@?deIpa#^-%`M8qjt<<4U z3y0QEAUdDb(gIgJ`y}YX1Wm}zF0?2jgf$l93Udy3$;lm0gQuC?acQ1W(2mK;wUsON zX~Q;A6EZVxh<-{~*Ng_rE2s=NU06IQ%%O_$%#eY{g4xBr@;{m1>C2Wz3cCZ?v@n%l%mQr7bj2ie;kdgTAF9-qRi-_w^aR{|H-zSk`#@m15|AHq&fJ zcun`g2f}KagEjO%ncZ1N&sIFH-=kw}CQzPb>9ao|NKI9x-bTKj+Mp5!!xTzf5lzMJWY>Su z{Y+L5*2In@sSOHQdvUT0*o9jg+Y8(P_xpG0$leg-{rz>;5OV_r%~X>9Sr@)VuMHp_ zPVtjfSHHIi6&5DD+IQja>l1IiT_w7>ER7f5n2+!BTiVhi@9R?Rrz;okQww zu!zzsJDr{zTNlDuSyQ#M=JPTBFl{K0shtut$N6M@%7NsDqf4@|`o|w1yyV$@hhl&l zhUwtC5e$R&Q!cCP=xlzogj!j7dDHHRkCSuB=+tTZ&RIN<2`-FC(4o^IV?%s={Fo$Z zhoaN@{SFgv$ANwAknZQLn4$h18EoPDZ6Y(ToiUm7Yz6rUNBFWDa;aiLn^FzzeD4K9 zs!eA*%^W+Fn-D|#caI{4G(1_!@1}Zn2U*s1PcDaZV=YKd+{MkR8)7rV0X07>=eM8D z?Aq<9Rp7!BnvA&6mRF+rLtRbIrZ2(jGv9>AM+%j~$g~r`)SXeJ{4Y_IM-f>a)Y@Z7ie&91ikZeEsee za2bzH@tLh12bAb<_XQeBNA;$_FDn7}w>Fh$i#D&@kwP(B=yQ>|eg}jajm?`KJHZ~W z!@5*~|K2+cy7kY^r7S(%(3rmhfv-=AGSZ)5!q5h)4ZC!Sh@qmRNvA+_R$yXTqyL1QJXP3oz6<$iu@kHtQ4V6P$8EnwHcSha;F6H&!}Ru%LY4{)whj-+QH~c0C7RfD{l-A5st2CJ zd{CjFs$C-U#8NT_o^iFt``Z5-$#O^iYck_gyxFjiq)l=kk*%Rbk6i!UXyI=iAma++ z-d_Cp%A2N{dPZ~EP{#Lt>PI{#qC&5_{ybXOpyCWg6s#c%EQv3-VDgik=5R>DgW)}m z``IOlL-WdFJowoOZG2d2+lI!qO64w&GG_+5!r1bR*j8k2V_#Z`qrpC%TLnJ>pY} zj?#>`$v1%;2E7{0msea=Pljyny7#4ux*+wz?jo+GVmJKvcl7V(^+k3Ze*Tft6yq@a2LRS;@&HnUE zBJVrFX4A~q+*^hmel?PNEgQ9ssa)`-+}IeElI0gyQt~p^zpg91)!V3Ycr#qDseQq2 zyzsQ;F2IlW!^K2n&c7obnPExm+O6)JB)5d%4JBGM$uLNXdjfpU6L12wr`y+TW^MrG zPgYrYQ9h7(b6jrCoD%XT7#Q&zd#o=Xdyz!8=lBy7Y{Xf%nm14LK8R=I38rlL`C#I| zjmW%F%69R3IXvMFkW8b%=kP~_wmuMd5`ULZ(qDWWJ@Xx~!c4UVk!g(Or0jYqa<;ZbV1rYVuN(B>=-(>W1FO?hz^9Kh3pLyc3uSQZw1n4aVgk$1tp(Aig| z4zb`Nae;TqBeaBA^^h*1Y8RHX3Zxdz(xDQK(=L5vnQokhvEQFew71Jt86OY4x}(U) zt^YYL$c?^!6rSfIO2CEC?fs}9qoG-=%Wr>xIk-=3Pz{*GgVny;t}l!sdf9htUs2IE z<;YQSTH@KCj2iqRWLs~$6f0+!_}Vj zEg?C*ZDoOj>1n`ZULdg-nbOtiN~8qpAuT*%7h}AB)}l+?g;CGGmxfSA23pOjCQloj zTT%OHPH$3srwd7*Jy*42{@qcZpAvr~SDm@(5 zGvBD?Gin?+9wECLf?l%v`Xsyy7JCyL=3I8#0fFNk+7lHfEM7jlm%}d!h25^32`*I> z!B|cMQUEKi_w_{{uGLW!}DRN2pcD)zFnzJdGM9-eO zCQxXO&PTdcE+kPLBIEq2@tW~!e<6fxlweceFz*W{*99I=A|PYA*@7`{nLDB?4nTKIFAJRh2&Gg z`ck#nFFvRAMWJ*m$VHfcTsX!GB(Q~Hw7qu%{V>3|=QbI71>l)}{AEa{tXwws_>l)> z|Jj_&Y*E=%V-VD}Fk+h>*v3i3XCnI0r=iQ6*+g;ecL9DrY^?>j9c2#v@?Y^ZjM?Vz zv=7{vv6+iidJd9aY>isGwFqkBRx!vNA>Ozl(rSn@aL->SCTLUZxs zQzFHqdo}+H&$?JF-6>0T08ioFZw7;w5Y>)VIbSQba@p)f8lEI??v;UFS{h^SO4B7P z1AC%#-v#bH!q|+ynaPzi`IT;Fp~~%WKgymQp9o>xu>p+uL!~bqwQE^&iX9*8%k_rp zRfU?x#*J@&QBx5=!6Tw<7m`hK@cxcBm?Iu2cHv;(6&Od)@tk{ZP0$qCXFsRZ9YYp zy{N6Hx4vNVlfU(H4F};nJau`hkb>E9ka3} zB)k4q$!Ellx1+%Z#s_;bJULspT_L(ttZcu@!EIknTGZpLqqZw3sB>XzJt&snWC(6Y_vhv5qZLJ0Y^CXfqP|l-_?|v;=og_#+Fp>gA6 zE4W2g`lxka59Yl)@EfPC+G2V?%E8vwbX?U`;h8zdl}8X{Dpvk)^`A+>@G~*gYSg@r z>$`wudT#yeIWTp8nBe!0``t zIN@nysy-EI_nljFq(3NgJ;5!_ui$(MZmJ%_&LY_W(|S<%(n9O)NX9?O8TuwhdM@OkkIzFgx@_HQ}}=% z7xN%KHn|ucpu+k%4o>RRJ&xS}7&pA=%1;8`>>j6)e{!D6K3@W*Ht zggxttC@BrpP2y^AOqBHRV@CJ+hB--IZJn-9hC&B)B-r+n(BG6*L-Uq2b)i zl*HvnU&c&6|K6oE!uPkO);3i$G4^FWAKIaO+f#I_;Oa$o&hzq@!ph-%{f5V1cl8Q- zw@KU0=MO!;cNQeTo#zn{%d9hTdVK;qx*c&e33=Q-jki zQ?RC{=HNh%Z+K>=j`Yv2?WPxVVkt5tnq_Urz(d;4l)^x--WNkJVi$elo{rs-tx~t- zfhaw`8q+m7)8!h?qXP+TOnDhF4bxV8f*EzZFjQuVf21mE;FwO5&*{aEa{ zT!61hu-IXOv9f#;x%O#vKh}vNdY2NXJG=06YH)NAWBf*2asmdv=X4luz?JgoqDx(# zkil@A;02DSxA_WskPQduk6n!KR^Ldyc^UP_P&Hc4XLQj#J9buQFc^f>Nvt|Y$mNB( zc5(^|dUAQO(k*lvfcHg2t1=eecWLXJXKlLUXiFbV01BVjf24ly+T0%2I={qa(7b`Q z;XZ~%J$oGYkp_Gl!TPIMf}Yw~_c(%yd+X33JV}v2FXXwO-VGcoHMUfOA z0#JAZ=H0B@K$1&V+Clb@zt!hmL#|Bbw0Ccl7Fj8={GN6Eteb^Vu3s< zMjls%W_|hSa;~-uFppb@=^c9jf30gQSzN!difN{A_0>sFifgwtnf}k;?+qAhdpj28 zzeh8>0aiOUcmn)cQY!- z$HG(d`w}6#^6M{-rktm~H}VDb1l86fj1=}{Jlm2xjH|9ErU}Epd{mi3kxA68&TlTd zmWFrBZcdciqDnPtTz0vXRaEfU_DGhOmmOVPOa_1WNGU2>JjRswpJ?cP?bt>t7)VU` z12ywSE<6oLynTX=_AdNf{Np!L`rKs^TP_12Lo>T;#G2q4NYnUbBLT^9?6?OfVzs*$qo~3?xJ@ynxCBt zg@kHt(*=Htm@D5{p=vy}P#&^$_|-;%r&khaMe8RnkA50J z0sA}5g-pWDpYNf>V`X0!2HDL0aq36}WA-Mu!b$u{fsjB&$KR#$F!}jekS#@=^&{QP zuHaB(Gqrm@Ke`L$QWxTt?hQ&G0z)5-6YOUvi(m`=Bb6FeJQqszJ zn8`>~@n!$w7Tg1Qyf#0`WKS2^RIq2z9-bmKDVFv>P3Ds@&%DT&k0eS!RU3pET#@p% ze#3N<`;|uc1oh*NNLz(q#KB_XuL|xh5we*Z23h~FZ=I+9uq!$%nrqYh&V+9_Ime!w z`Gh2+o$!mK3`PE68Q$tCE~+{|9SOcg&fP^}JmWow>lmP(U%wZyI@*%(-kc*SQ;A1d zLTou(zu}nziCRv-?F_8%YL9D-{XO(qg;Zdupwrc5sQpk{)dUXl($49;_{{3FLNl4w zHjECYf)Q$aR|1SlbKoZjsc*HaKCGw5cUFd}ur!6O>(>Z5 zC*G)J(=h&Rbahg&$nGC5eF8}BZXO>aeU^~ubGXVD-K1{!55PHPdI((GRPL-r06j#T zx#sL>wga&PQvncc9!Hbi6W9G^5ECfVke;@;zMeU^Gd=&lPVVgI(qk&K z0}j0y{~i0%6zaxG1Gp~vbtYio-s%OOmdm)~NYs7^(jXij$C7k%2?1uu!&+{*fA_Pg zRKOhEPRYp`FUkoJQCFu9J|X(^gFh@G(Ir$-=rOIeHS)3US?1S)x=fygJWrxqXe`h_ zXLIwyO6I$4A$4s%*D7}tn{8Q{)iFBM;!il7LR&;l#3W@Vyy#FS?CeSnm$s)nBr>PdqF84#99_)~#3} zzkNn#+t5~En>U8jL@n3=b615%0MEsregI8lm#;ZKeT#<8LQlZGi?|8!Kn&Eai;Ga= z9QGY%F7vfhDF5<4Pr*($L2sJ^UD4d#>+Ncvu16^ecXHX$g``#_=}x;=PBl$WaDQ7~ z`qK_3PKT?(LJ|k3TAoQAAf3b3$&oR=x$o1+Fut>b2G9U`x)wV{4db%63-#A_L`MMV zq7RsupAT_SY*QY3qpT2Y$5@&0%2GK3Arbi!M^iYpOV2h!oS7l|h6|k1YJtiG8raP7 zNHE?~=pnQ>yW69|TPYGxHqjWGc}qIakg!=wTdqV-CWu6&OHbLXihdLpsrRO-;8mRT z6#%C~e1>56z7TchI@shMk zSUA*P<)tRB>w^#i(d0VI$?r2Wrc+Z)S5~@B?9xjMSI^|Yrw%QK)s!H==Nngqw~qNK z#F{Pd)=zcX8$aedUi8vA2Zjm`IKG~dxgw)=ujzJ1H0C3%b~t%dz5n6;{#G1PIq*$I z&t$1j>v@AiAH*B2@hX5y6VUJ^;KEc2xEfmM__hsaGilxVMO*a|_E`3E`a7v+-Cd8& za73bX7EijX`lBMipQXY-WqFwhC!jv==TCB|9MrtpmxMr68+n~klGSg|&Vl^+=ko>{ zmpvB+kZra0+N~{{^gY0S@43vehKO)B=iJv=(6Cu4{HDonklPS=R;gTHu|ctKEEgW& zBg=^ncoZo+iVQzv>JY954t@Jw9M{YgO2|i5b5Z_h&cltCBb0ga_6TULxHYyl_7dvb zBP@0&Jmoa(%A|I%8Uf$3GD7T5gC>X9lcZr$3swG$8zyqo1$}^f169=~c(=={J4e5y zjegj>+V9IAd=JAH@TT0#&KNlwk0rF{_&#VbplzIZ!Q#XDi$f3jIM|6Md22VLcC&RZ zAqknXe7hLI1W%(z;QHuYzkFJkvdQh`+1c6VNlU29gX@P#oB&Na*o&WOKI{h{3@*^@ z*ZE7lh~2_1Rt~Ye3|)mz@VMehr+xRAA4x=uE-%lI)%Tqq4Lt^Bwqeeey0#$mH$VIf zU?<}Fvg0ypUVm1$bWr67IW7NiJea9C!=nLTW2od13{{b>;N5iDTTW&2kFj(9nCv6X zD<=XXyvTclK!fWZfYE1L>F700vW>nswHkf-@#wy~wsa%BC`VL+ScBk!&Dd2F;h~zl z+E~rA$@$$Z?Sh(wV(F)hiTg4-gTrZ?^)DaXEv1-zr2o)%LXI?eiz#NXXxOBghjpvT zsBZXi0?u%1U-={Z_!YONsyI`~b7s-;zgoOVV;V;VIj5`pia>8p+!h^pjfO!>nbunx}&S1rL^+9Z`V1Slw^205^UF0;R?2!P0(;z&xZx( z9$S(^MD4rv{kd-ftx58D>S?mO`|_|~m^2fB2_Err8^WE8WOt5Pp4~Uf?#J0;*+*!;yQ+L6p23maxCHYv&&*&!{L3b@XZSesq%b#Gxh}jxHGy z0IaU4Wxig^8% z7V9+PU%?HuBGhW$6Tk+tT@F@mD}cOH911ftqw^GNk^E$zIhyWo8sUT3 zP}VPHsMra!o_b^pv>AgeTTpiYg7kmM#wyT+GY%hEiy#^U1QTK1b~Q2_DvZI0vUs}3>o4@i+~Yo?F{ z7qR(_iD@tO)wrIB$WlLtROAVoS9z}bQs1~Y2)M&{4R4+VqU zQ8w03bDZB9?i09MgiLMi=ZdAhaY6UXZUOZl?WCfi89ce&UUD7{Rr1(VPR6?B2@K4n z?#-vNI2`z;@F=|V;x|$x@xpz`5RQ=Lml!I0*hfnk*;ocz!xM`NvZf0l*l>PT@~H2m zvSIEh|D}u4Lt_iW{f-v~^_^QZd6_%vc?$zV;^A$t()xVR(o%@#3yT|S(W7AO+1;Q{ z@kyCiF+jbFrYCyGBPQ3NRH8AH$Pvv>vI7Ga!38Kj((eXiyWo+eTM7RmMId#k4I5Vb zoyexbuqvR=uoEnaKU=FdbgDrpkYyum1jM#6<4I$1d81w+AID5N0HP@V*;`Sm<;H^h zN;tqKQ1Tu)W_V*Iyxa0~Uw0rS|9BWc)di`DrRthX9sEFI+UGzU+h+^;oRR(jvM;D+ zPkCOlXE7nk=v=RT#o-(@dJfD3Kh%+r2u9v9?vBm;8e`@2rA^jN{c?~gn+V+GiPQb6 z==dos+)T6pfALUti)Z!*;*YGt8& z?YmijK5%mBi^X%R2z)jcEDCZkvb=2$STKz%W7nEj!-W4VEc_R>o|s@cn78TN8O@}nZCw@zjHRS&-`|&FTJB0H7M;n+{s3*G&fTk8*p_6% zvjy1LkvtD2<_iF5iw~d{@D~yqLILUc5BZx7q!b)LLr8;=o~(Y4B~TYyE(bM)9a%4w!XhMPq71WPXy=g2h9g zTK=by$$mmI1Bg3@T8mKY?4|nxIP2&*;7?9c7j6iT?#(Ixho3be^ zZDIV9?U_AGIsh~`rc~c3OpPkfee;Cl0~gT_)+irK=?REC4T&!q<9O znzOra2*~yuA{RHOn$5$Qqt9DN{@{d&ad}aEZX?9l*mh7q>cGNTj|WjH$JjlQ;eHS^ zI6*tIY77?ddg7hLbtHM2I-*X>h>6uuokz;9%s?KbsXzKi{PPKux^MLu+bp7vRg@=xOTWI4Xiu#wrI$Z26w{PDj^z*V)#ikM}92=IIf;SBJY` ze2)&w<6Ws)et`RCf^Ajj`Qz=hXhJ57n5wO#;y1&phj_<}UDYBww#u=|R3%5ezC^a4 zq_;o++YAk1`!h6TzR`Vuv``zlWPdmgh8tktKQF@fd)3U~u>UhJ3*0Tj7Mdtl!L_$t zn`~_E!fDrO&Q2^ecO`v+j|H+tOp5YhStoYaV;fYL=WA?!FDQ#>C@`w57I+w>B*B}& zsBB#+d-g|iOf%p*DjIBH&m&Fm&5MmHXtP@kDH0r8>Gc5AJ1&+}!2YB;x4fclzT2+4 z-5p<09o5lxJGk52#Q6+LaERC2s}9!{M-ZxA?@&p9-Vnj*xMiyxyALX-Iz3*ti%ft1 zqpI)cM@AT^m(w;2%udbZ)|U+qSb- ztvMAP9nJpAAy-iFpWWyCt?{*mC&_zTGB?qKsnUUR=q9;$(XI5)Vr70ErOA6|Bsc&+ zLAvig1TVDqH|+l)0-y-FJqVrzMItk*x|&8Y?>tySz5Pv>**<~3{wfqDHm5!@B9ywp zIK8haL`YlM2>!ksaJBv@xLfgKlJ^R^@`e}TBdq#oR#^}J^X}N}{tB3^)){98l3cNw zz#bhFUb84r7%xl0m+@&%opGpKhecB$UFh!07(rI)2YE9FIVr4;*CSEqgzNe!3cMhX zW{NvQECpcP-Uh$};t^Rp63?cPQgz~oEZ zMpW6uCh_vZNW?1{8m(hVDcoDjSYN^`$?Q&;^=rE9jXT0FumacrStGC(P52}Z)1a@l zXhRfl9`MyfXk;@|Q!&WbuH*#nD}Ih4vs_WE3(s%k=je=@C{b%7>0JgGmkl5k8zvx^ zPD!j#@j^PB-N5E8#&S;D+UG3FG|&Xal|dp^b_&|;6Mf);V+*?r9jQIrd=h`#FD;Nz zk*UoC_PM)C2FAun3=9m)%F2d@hAOV^?U(Ag(PztXp@^X2lycmcpWlZV;TMF2RwY!R__HGq*V@)%(82L#>O>v46#C?6at+sy@ zeL$L3UCDkle`Mo5(~$7NY{5Q@g(fw0Z`UswfAeNp57exTtc2I{2v$|t^Eqlbj0XR=4 zdUE80A$2zM*+)mV^$wNhbb1)^0pWmTcxS;^hY=W!(+d2|kJ=qwFtn|91 zo_l#f3Q0ARNz1UU4Q`6lc;v|Mkd-xo|GJ&t;wk86R!|?d(lR+s*Q%^j%sl-H)rI{a zrVDtYYR$jI(7(1gNLl#anwFLQXiTdK*it@{9|jc(_)B0E|6M4lWkAZcN>f;>Zhk4|3;18hc#pVg@0D&qzcmIOC0)^nu?~cum1&^ zCQ;FGvlrpw!de~sz}LEY^u_I>iEJtZMn@z2>`30(h+0m zlOGkat8q^XdArZFiC zAR#s}!}2$8L$UKwg`pT2P2L=wBL+PMe^Czl>j$mI2XhrM);Uch8?`2TNns}?Erw%H zM$DVcp`n`MnWAPUK8$=m@A|RzlV7UlzDL9DJ*fR>ymT01VqeJrcUps-d18M7*d-%A z1)!vwWXkWn)%A0BbRO^NYJ$;uB!@wS;&plLWX($it)x+*7+(U7@_0Z7ymR%xY3y%T ztr#Rj3EJ-9?4_dIyLdpUbNS!I_Mh|pa7hxpvZ|^&5hSCDq+a+xRmH?0Ic2|og+oF2 z(WB(#&gr~-8FchDa%kkvO{y6L{av{@=CxRJbLz=HdQ{@#eWqq+35khz$Pt4=aeuv< zzf%)e)`Gq@?Yb-7W*gg|F4(K>7q5wb8LHD zRr{O$|3oK1pI38Sz!X0E>n^tz4ps2~zPW$pblucPDVA_xKjIoZA+z3l-9xr_HLPnJ zYJ0|BPC@9#W@cu#n17G&-{&UtGGEvrM*L5>>F~xD7O|kVAu#f1e|@I=d$0bT4m7Hu za9yR7r&+6(o5NJi~@Kr7Kd&}_I4+h@eDW!ib z%3oQ?K@AgAJ-xIuZDAT>GUHe+cxl1N;na}mFze`;xT>L+-zKYLQ`t#KD}&*2JORyE z8ir05{=dcyy=eMgcEAa*(cf+MMHktti5G$kF)>qHwO2b244(;aXh5S;pv2GoTbKIR z5FkWl(J0PN(5Qt~2#h9uNRk?ylG*=<)R#$ucgEM!N~ZSzsG_Tziy5BqPqO--8PIH2E*IT=))$`qZRMEyCk!NnPpnWG@jpjy00#fiv4t{g8`<*>ExpD@i3+J( zYmg6`rDXdf0suB;WmS|xh9Oi)y%(BdC5rz=ycZg(AP7ueXD1(Ids|uaizV`qnxTnJ za9dkMo@6ZEKRfq+20qHt1j0bfDIM>^eD-;EaAR`*KruAZ(0<`km$i!JReE&I`}+Dm zrYd|;DYG*A$4sGQ&~000mqhD`f{pW0zxq2dU%guC3GlU)CQ#Q(?U)oQMcmcDBp@qi zzx(O>|EX-{{~taYEU2li?U|b!12d45f54S{x4%gB{q=d5 zaW&@=!J&gSHP-`WU~#cV+tZWXyqz!e?99A>_N7Y(5cn}z%}Qqh?Z1fK8RNqmZ&H`X zs@Y$R6MRV>w9M_yK_MAs{`#V+A8^U(zt$RPzv6uc&QpXjw6Kw74ATZLED~ru570B! zKPj?ee-BK0EqGhjJ-Kk?Xl|q*OeOObypf z!AzjMzYv~>b9VSn<9^E%C)CQyiM;8)n8@Q6%PC5`K}HY!hj7oJ)@%_zsH*| zP~?ax8t{8dCR{b#4Xoq%3Weor+506A+tND5-2@OQIyqVGK4{y3;T2821eIJ_5Bj~; z(y}l>`Ue$2ataLAUZAX-2sMwTrgFEqAG5eORW!Ev#ARd{+X9(2a5XM2E}}-0k+WLk z22Mym+ssEl)oi(jNWt`E=kzpo!G=5DC2;!Ce=A{eybvKdv>fNQ@gNY@kmCPo;Gew8 zWKd(Ss6pcMjQw*7e0F^RYMil?@oNxJDBQ-=;2ZX8Xc^@(7i5p}rfIiu31Zb0yt$#C zl0Bi*&~S@!bBnP%+~f8%n)zaX$o`{y3iI*Q-@Kvv5*xBNp9Bp=8I%Fax3hY_SGCCT z`G&^M1uBmLjK^H;M)+q(MLF-zQBxzLnb+JRPq2RNL-U;CVvf#1CDdr;Lv&G0BzffQ zDnF%SFB-&aH!W@fmR;RtVG9#*TZ=%AJ~nd|6*DiR4F;Ic>r(DVWm$L|o15Ktk~A2r zjdXBmB%QOf$uv2hDNw?NhO%8k@wFVb6LHCafL^Friv?crtm?1+MMUSZa@|8i5rRG* zSkQ{GQ9eX8G`lieuxRr{@0cH=GA7NQ#8sryp8 zlPk-Xr3La6Cpdis>=b0z@iKByV+NaY@m@o*_XmQ&`MM){RN!F-;Vbd6e3AtQzlUj! zxdX|JllhaSkoH?moekTXu9vI@i~ynCGWe->Ke)HB2UXUi%T;L(RuSdMNqg+&eSEJZjvi0& zMf@L&6d!;C6=4UnNCi%Lj@lCSxh7$mRwR=NPp!Tw{vF@)^To(@>L@ulkcB#6eEpuG zc(NZUqKs^8Q*=!2!1kYdAbJdm*weR9dYoqgaY3DYk?0HNikqbOhZ)R#`jn=xb%+x4}2yadA+DsZLN(2LW zX;`=&B6{M-@60Sj`L6dR!jFxndL$={B1mImpn++`-$xIkiOM)mM#UZ=)jsn^&cpSO z=#qlotOsLDjZGnN7VbxsWTd~QS<|m^qNcrw{gvQo`0m91%3(WPQW!OW8t2WJ zz?My9oejE1|x$T{`4cCm*c7%^__{ot(Y-l~y?Ag=B-XC3Z)Laao;Pt=(jfn+o z=G4kkRa8`%f`*JwfwD#!BO}w$P3E_TR5XN$0r1tMx3_yo$o;9`$QBm03U|K#koU>m z+1G%Qx3~{HH}lnu}Hc0Z{%@9r7xP!EG33^X3^2noX|!+Jv}d$r>8vwPH0*m zE?&=WF8WqY=?^nOdj6Db3KmJvP^tNkG%q10M)~YO+AGiP{!;<;sbOkyT~Qr%U)Mk8Pd z&Y1SqyF7gr>s8cMRZnVF(pMiwY4UZWnsAse3EpI|c6^eXAy#lWH9?MYa$IP*N{V|b zhJ=#2ie{3%aB_aKk%VWJD_Seh2U7&|F%e`bc%`M^Dl~=23s9m%KK-I)C)geD|Z z@#g>=Q$_-h9#UH2!5Kl*Is_|9rOVxlzFaBLFK3Z|{QJqtmG7 z-)&u0UA-|RJ&vL5yq1%&z@43SMO0sJ2KRUXPLwqcV4 z*7Vf}jUXhXK^Ha*H%XXjZP+v~_d3!ZQ9CK#c-f!96g{V?>k%w4I#0gG2oA?xwP6b?j0*Me@`=( zzU@SNf=-yr*^;TWe6P;oo@_=~UK~!A zG_|zOKVR{5cN4s+@>nA|A$G&PjcJa=xLxTx^MN~mW|O7+5t*Ep)+rhr#YA{p;qy?t z-s9D8k87$oDu(x8I!F@-f4u`0aFxxbbJ0NKeCQ{d*30zmQS6Gw-0pgA@KfC;98N%U zoPm1fk2GUcQebbrU4Say{wYHYC#x1us2dgH4@rIko@~R{#qVm^HJWXXsFkl40?h54 zsZH!1rXGdqaVf|2SJe~;)e%>y0{u1f**ll8op!L6$6is`%(1(_y<9xEn-s&TqQ-*X z(wD(aByAA)46fCFbz(O^-_S`+`+f5+oAGgq&~mDQv8(s2XIk;{p*7Xhx(j$Qd}^1v z@Vqbkl#NX3u(^P1Ui+5k@=$lD{Tx$qEUho>Qr~cBm4WE6K96CPCV+HJ;D)2JN#$vFEHuKBIeYy{DJewNZ!{8-GnglS$nT(^*7g zFzjM>YFxg9QCyyV^E#8`_4u5I2-v9(7_!v&wZUNq)_+~GXpIOz(5fe$3dk8%dClxO zWS6M5)FA2NM*ZQpUs7z7ehv1__OpA_qA{|QDe4vH6Yikz86n<6FAyROb&?Fx(WG;n zTR}zB`SrQQ)Yf=hw$t~ZptmNs0Kh$^Vt`+U7{BBR9_C0!dakeFYApYO>XEA4Qz!+p z&mnD|{x~IuPLSxEnmf}W1pWIv^jQD6!TftIO6{fTI?DJDpH4Li@(TM{ZT;z$p0ljJ zr1b>tZl+(IvxfR*NtcwS1Ka2YX2qd8+Rk0^TXS(ZbcmfIF|*Ih<>yay_#qJ7xw6Gc z-ddu1+ZDNy7r*7X1|ed8*AJf<$}nKzkjVgm$hOBD^@EOpS0EAbXq|(FG=n z&QV2XNLvH$#cEj#yc>*UYV-Et8}!grB%V-|hAST*GR4((6jX&qn9;Vjjb5^LW>CJ- zAR{D#%*;n8|$QJ?o1Y4^I^t#a9Q&-Q%6&-T9Hy*XMP z%JNucac`l=43ISiv$MKBjI*vTC5cuPv2RJju{D-SvO@pEp>SB5>F1`HAjzAUt0syh zY-UcwQB#YjUs=-skFBqOimF||M?nz*5s;EnYNVT?Q4s+trIBVx>245dC8Qff3F+>V z9EKV~y1QeB92l7Y@!tF0d%yeppS4^wEYCS};*ICs&))lqNz#380)rFk+qMsN9VI<3 zU&*~&Tn~*9(-hXwU&`w-&~Zs0lD>2(}87RADXwLWg@({c+d8xyZi^kSGWi@2Lhlhz3W}Yo@s`a+SesmjxEAYN z;Rha6+w?mF(JUC0R5IRsTMu=t5`;4eIcTEiwcCSGq{Cs)3N7gE_D3S!o@%Jr{zcIG z=XAZP3Gm>x4EI;8kjQa9Jr>f40!f^9y!35C~j!EwNMaL^nIRUxL5`e zinrKfmDzw@#~=lDyUhQ6rkqjCYfUaDd*7zwMQeFIFZ(WWS9a8` zK05DQZ3$n7Y#^>Sxe+T}F9xRHOD+>)vB;to{2w@U5g3W1Lo0h3v!)FD458L#Ex*|9 z6I32K`SyW4CzaijxI+7inuXo=6iClGhSCvv^3kR0nI%wSXPuEmtbx2(-%9pKjy?AE zHsSYLa(5eF0U=cL^$?)tyAG7PL1)x$prcn-7$9}*WhEf^!oF2X=DHj?zNAFo5}8G> zfY@;BkBX`n*8Z7$>p|YCkL|fcdzPT1;o!4^Cn8Pv_=b-B4QV#lW7mVDNj;r2DmJ@W z*+M8J-Cn_CQy3UdxMAN+!3LXILCf0AZh!bkfx_qUR5lDP-(d8GJ zS!V*<+uIhA*hf19+s&fRqFC&jH@|$(iOjZ+0$xS8MCa!za(vN%!XUD8eY~VI#t-Xi z%E2Lj1NGK!0~a&Zc&dVBV*_t>w6%o^}K z8Np~3vVBd?5(cR%p-q?UsvH*!&j;=AzK>P!yQnsmqtN=5@Uxv0u||0n30{WVFiB2F zEgiWzSb~~}UKHJ0rF3MeedQlVshgeZcYU6Xn;&>ka}bSk1mbvBdl!-LTe5&Sf7-NsBVd^~u& zbt*x{GRwl#`^M+HL^QGP`f=yZsekOjc!I@7Tl-I}i;bknoU0SlvpE%%(FT?tKcW0H z=!2NWbNznjkXhoZ!C4=VVke3zSh|QI$>BmAXaOBhwBVEYtcxC(?MFt-;$%Gw4CQnFn!&i_O<&Vh%CD4VDGu_Z~ zX0xbdL^qMw2(0F#loseXucB;ZMy*)6nxR=se`27xKkk-8l-l^pEY6L+)>9?#J5?Js zJR4_)GIn}*zi|0=#Ibi28U!Bsn|z)lBVD2ogPBIRXh}1?{5&Ob&Of26V{CRu6H8OG zN8{BRO>>K{up1lJ+--|kAx{2pCUm|}= zy6CfVMk6NH@Qe4OQIfz4X(X8pS69N4gVv~9_d8drTl_bXExj|&r5+-(ZFxb$G$j*~ z0072v0MwyB}8ArWpV=mBR(H`>Na_yt*0|Sy-9fY z+R{c8SM2?3;idS5&eSO%$Wb%;WrpQ*JHiQmM`>#@}cm zXlUTLJYgjFy(FHt7#ePxv=tT+S>0cU=qa&@l4+ITgjJcvl;`gReX2_T3~|>0dbvfE z{wsiR^%$|KcstwlYKVf{oyBoe<{%JYRfca$ns0}?8Mwvi!uSgNp z<4z(>D@wv~;(SKD#;03#X5sf9At6=WhCDK3oV8=QuLJ**GG!v~2?sL78* z7mvmM`^Lk1@Ay_bNFH)~L}TNgQA-1BEGU}jCR&Bu-;y94U1g)+7mA-$Ir!J9yw3OG zOOoJslko!+HATX9dw+-CDdH0nWE>qUDjF0W9eH(h{Lc%xUcLID9R4I}I+f5GWrnig zxNu=jQ_-F&j>!01gbe&qiUnjQ%&kBwP7I7?%`bHRer~5*!7{;9Q!|ul>uePjHQD7q zho^jWwx%>o8n2pp!1Gf~Wa>5ke==86?h?!eF)Jo=3JUFgGmov=*^7%y$^o$xyMmD1 zb{m7L#Q!f{*H9W95<*N(4FRz6s%bnh7;ICVz~jLAh@8x6=QnF*C0}IrF#t_XRFu4T zJ@?#ilsK~SlM-T~fNXL9cycZfnn>`i`-seR{Sj3sMF|f$V{IQJ+mlVtUc(N&T~@9T zehcNeq@?JY8Zu4I31GDxE5(7LU&nh2T+bVvzYWF21yt-7T4gJM6V9_g>BIUCJ(fiD zL$h%8^!Z$$MQxo*@jem>AXjmVy|_ey((69xUnJAFR z1^*^8^H0~cawRHPzbt1fxVfdBz#I^-NGNSpDF-Y3b2Rb)JvyN%RK?LzNAPQ`i1M39 zT0eskDi#{NVtGv2ovQmkknqIZj%pt51TqpJqbxTF5E=fq<(L=iN%(vLw*Ep*ZRB%x zlC`-$cArNST8dZ&=>)2xWQx<(Jn^8fVREPcpJV4*&|ega0^&99#NZcdwWorqCz;+D7s6=TUu5blC3*lK;sxe(32N0|W4Zf(CwW zfV!dlJW)9tSH?x|OQb9+p6BP|uwI$tvol_yzc?iSe5Ade+McKh)({hgp-+4-3d?N# z6LJFLF)Fz$^lxqxH+TRIizYl8{6C3lz&1};N5@!0s74;vcG-4}G3>rJGt)5skZkfd z;>4fd=oN(Mr#8RkZOG1fp+Kgv&h)S^PKr$v=YJA$z@B>86U&zc)7^<*QlT@5h(eI_$Lkw-69` zm20A^ng39tl_Lr7aR~`c1O-ZS0+4t2;P@cr?IraY)(3PE%plM# zB?++zH$Wth>Vi`Lp9C_O2=Us@JEEnX9Xp#+ASL@~Aq@-#W-=#(|NW_g6oof92#52f z)|ioEZ4|a{?Ts-3_QUD#Wbfv^cfVAO`ceRSFhi}DeL=YPH6g;GWY-RBL21^iQMGFpG>CB1sWb7 z>Wp#rH+`9k-B4UTYXLm*{!R4x*IPkRS2`B%i;hoe>vM6H3J}^44e8IqdgZ_&*{Qx< z8DOOuq3>tgEjDxBqoeWep9Ae88wyGpr*|<-r8)VmTP&AzPWbbUZaJPU57V7YMAF~C zHRj-t{Bd`rOqWQs_JeX5MGmdpnv4AJB1B}6NEXY+c?J{qMa>Vx#b@s?-aDQwIi{Z6 zP)IzUilKef{ZZFzq%@r34(_=LDeuP@b@Q*2+=zcWODYXyo8DLG5x7&sP~mx_6)<#@LNiwtck+JOg$nuPdZsakrYb>S zeu;ECI$-}z&(RkX2aG{blNm{y1v@Xy4ac2w;1~6qS{N)2E6eD;TjMQw#I=o7yqt2k zEtcX7397k#LAv}pMCV z0la-GQ@ABBKaojsTfk)PE1!%J<)0& zNge#V1p6{aDUlpEmUp0RJ<5mc$I-1u-SEYVqe<*Xze{CCch0qu$4-g^#gHi#pl zx|6}V_6b7vi%SeSAgWz2zBpra1I@0em1%Sn%U`Z4ZTOwivimJ)BfZ{S$ne(tTc@wI zK@MU|))ED98=BrFpMBO?pwB|GTn4U#$EdMqvbHy|n z)lo-3^tLy|{qLhy!>2!loG+1);~M$OJkodPJHM+)t@OrtKqw2RH%Ei{jrR6&EDp@B zViXnPGC-$~LzY~;*bU*BsK9E-QT?-Yw;_`QIN65}E|(P1bpeYOEzq+AB0e^bgmrr^ z6K|c+*C$`-oE5ax1H*3qbM#H2qH4p zE5nMq=J~?ymT+$6cWG_zuQ6(bWcq0=-68IaI6Cj@93yr90Hf3>Hart|lV=jST1u(@ z43^T-O2oPSwhSIfV7aBJsVa_Za$e~=sTuobvyQl70HCNC_@df`C-|_xW;ln)t3-kL z`8%g-UjK>kN&L4b34s8m+4s7^CCx7Cyu zTXR50ZWm^95#)9Rbs;Y$oZu@4*H~=_7qtZb8kiC zxz~FxuAvlk>xG0Sb0V}o;9IX6@a+(SxdfH9-9M|M>QBQ`P1k1pxI>2!U2XyI@zWZ!kQ!_J0_WsMqU0e2o zf&)4vaq{rG?w(su5`PmoxU#3j=Dzxxg)h`ForBFQpa0Cop#!R3AuBDO@pRWk)l+Tg zmS2ikG#PHT!EXtdv!bas^T(m%P-bg(`Zff)v()8B?nKNRFIUoG<(u{X*lFW^JY4?74H?EODA++{wSVXZGY8ThD0iF*s4>=H~J`j&>?03!GIl1?VXQOQXs4 zLB|+;*pQ^!K7nDzrW5Z6r>MVzBRLUjYU=rTvKR$bz=op)ZsFR3vS5GqbHUTZMThhS z5UE-L1eU?HnqM=Ql@IhK+)8oogvN7lZuw|=f7(-y@xpl$#p#&Ob7xU8>viHb`+%$W zsL1cglX^m%TT_)ukOoPCLx0j2EdBAEG1xOp@ON${NN#H`jySxUs8?e-B?Ps*Y^5FB6T(fF8&-^u1mj;z*F-m2gbkH3532?=v<`Fb*K60 zoEZN_Hmmr}Fy(i2<#d$^FLhzM$~u-pk{wflD#`0Xz>*AXf&_d9y*`_z*;PJm$vYo$ zoFQvBx}2`HW0$9 zMT$pQRVw%B($^eR6M0=^{)9|CW`9B{XPZ%(2G!NidW8Q7c-u~PUwc$-0RFYW;*1aP z54#;B38~U!F(!PhX^k=XXD8Bih5x4$QIM!6jpeIQr+n94wO)ba z|HQm&m(D=62Cy6}4(bF4(lA_YrMgN$GEArVTlrVODA0TX?XGh^`&c<$*uYBvuYuvO z&xU3$R$?Y@?xa6SCBR{kSA9eMJzHCeA>iAV3D{x(_onp~u>Ost4jua;YwvZkrL@|! z3{XuTH--1!0al13^^U^xji=x37sV_`zB9AL!KU_8?-!CPj^%Oo(TNEQ5AziB{;OGz z{)}0`U>^OEYD|u#111UU|ClN0?QKdcj?4$cBO`f*`proG40AWWJ?0IHfWvU{#7#>k z+&P1BvTi36^4E2#axvv_<*Q@~2^kUt$^D?9AcsBePrNP$fB=%9<;uY8{NM{fK+Dwz zmiP*7x*gwT@ShdGMHsGq_~*N;@7X->W&>X1vu9yJL9ZZN&A^$dB=-z)aBws~a6fxy z1h^w>moG^;IXSU)7j{lhr_|R=1FoVUoLW3DvY|goA9e7<#fQGVkZ#C5x3y@&+-k+# zP?P(iTNf}CU$e48o0?>6&M^t98OL3{Jq5M9>X07*Rrr^U8v~=n{FEMKK~gd&FYixV zbS&9_(Zifo8rzgI3dBm>xSTanKQy&Ex6yl52|Io`>Ocp7D6wZvb zCD5l37Z)$8@h{svMz6q$8y**W|JO*TrBzp?N!a%D=R+;6$;b0yCrIRSO1@!^QX2Ke z>7<|!YTQKfVo4&=?_BT-a{f+TT~1w{8zBCeU!8HLi^Q4Htjx{rjtEpgaMO`b9|GSk z<8ywZBzBe~3*qKdU6B`qLz_!aQ%QI1WhY<+rKjc!4d1_if1I_L^!?}0dlVED%2}m1 z^T9xTxE8P_`|R1XrDM31@yH61PW6`b+2LX+fG=c-y5`Okf|0ZK*0BD5!BRg1AeUcV zEdX(57Hn9UbCAaU6!>y$q6F~LcwcG0&&^?gCO+Q8&|6R54BSk$Jfa{Q%T;(3!}-3- zSC()QlZ~#GB$~zd>c;~I(Ciy zFNLWDuQ`zv?g%hSjDI^)YfICbZqZh#r;z;QNbhDI{B6a&ql&wdvjs^?R?tFxEP$h$+6?5d9-C$Os=(v34!KlOt|xcv3h5x zPt{F1ug41t|0uM?wZ?yqNLq2!RY`?;;ZG(eCKNN#;y|1W@0!&kyxxf=Mlp zad|gcXN(TeOl2yx($N!xcwa14ewScd9{R<*`qPyl%@2Qp7S;{*eT32bsrWv0Ue}MO zcmnGfKf}aL`wuE7d?dHh+8x-v$@3o}Un~;zfCr3o9Pz5zbPr$G(d4-fnEH4KG45_S zLn=70ly#grC7GKSNMDG$Yz_FHM;f2*Bs8P@j`yaUzEoGM0nFo=uMY8%X%kgIqV;>@ zDbshE{?wMFLeIc9mdP}?eLIF~KWrNt8_(Sm%+a`3mLuBZHZTa7nwmOXIEYgV6*Hba zCzx+KXAy7qB&m<1ck(CweWC2S0R z5qQAr-Ryg%Y2fcme!468ZPE6+f2OQ~1w01m^<6AY2-J;Q<3I=2(bhfYlBrJI(mky` z+;|U%PbCkm&Gyje#`bI-3jtMM+OL2-D$LKfXpb!x^23SUw0S-yi2%m#}`soxWdq{&JFZ#$5lFun`RXUS68qbWOqU;1u$wNHXS5wuQV|M;f z7aQ#K=RZFw+4j{E7NLeBSG=jG>)lulImP6sIDNN%fBTv%wf}_PVfWEs+{pPDCNZ=6 zxF0fGE4?-x9UkqTZMXkkczhdhY3J3n6^m-nk)or#qLjWm%axX0xGTIy(|O@Y0#d_d5tVymafNwSZVCyp325sd^dV9~wF{TW-@SiN)}G zz^HGZP)@rgB}W&;FV@KTKqQ8MdNR5Zq*=LMPfA=D1<^aXXLmTAa@P$s-GK4XF?T^( zi;1~Oj+dS-{r=npQd%FWAg#}LXZKNEacIqEta*^2h2!{{vOP{kynPB+cDTq^EjJv5T$m5MOnytOmZ;4j+@cuS0} zNYXtP|M-B=R&K63+I01s#?LbmRlZaB7?DIrub5r7MvF;Q$zmrg*0K$>acqezOR_W9 z?HtE~C=+WO8Fr~gdtfgqu6^C~_<;TqK|PaH8<{S5=}Zk(5LFimnZKoZDEdyQBe-_8 z!_k7_N@=M=K8{k#21{Re{HgP<*MkhJ(?!D=nPfTiIAG9;n2ip+#av=SpE* zLo$^yn%qR^n|yV+rChH1*yKZ zI>4hIOsjjsR!HHz+0wn-iRf`)c67wuo~ppNv$HF{vW?{RQ64Wic^kJoi0Hx@9UGf! z@dh=yADYgdaqi93wDf(ZXJuve@bDVRRd8=b)utZ$zuX$Glkn4-_1s-u2WY2V;nM!) z3oVS-9k(lB*Aa$iZ&58SvhEDjO>s50Vo+p2W;6onON%)E85s!6nAmR|ow5^2qme~+ zF)~_ie|>Q=yy@ZbO7;UMDqR1g2wItrPArj_@$Lw7C6%3ye>r>h$vh;_3U2v2x*?0$ zooH#J_jR(0o$;Z(LbKQ5bz#9DHQ3_23BJ}DFPf%ra$Z;)v*vsjFQsA^na!#c&m~3} z=Hm_cTs?h5it&~1xMwTzDgW+8Ts;EhCt=EfY@Kel6_LlCJ9vDaQ2(H$R&{Me@u%ov38vO2hx_ z%3^4~fp=6b=EPa?UntfZeX-sA<)7h(l@-=}w8Fo(rnhyr+Kor>GcYg^yA5M-{kbpA zZ}H>w9^}{Hh3IeZ zjQ_AI!sc zO^G?2d9#u=r!B%D{8`!kC}q#d=N-T`?|+4EZO1`jaRqC)HiqClyW8HDyF^xa`M-)p z+{MpWR9tEa$Q{lFGV8&g8)?kPLa-lBWwxt`LutvfcAF2c`w!o@sr*s1_M&VR`h(sN z)nn_hTO79~v5;Q>R^MorjOiBR;|+CPd!5L0Ty?z`0}X)p@SFy6mLD?STra{DeLeW9 z7Bl+PiXK3;CS%{4s4qe@&=&~DNbfDNYOeVz+CJEZ)29VW_jXIIS=-6~?! z4_IRUa%Rd(XHGE8n}=bOvhcg_zP-D+)?eVt?_qSQXfEyw!d#g%R^(rQl%w042x_Kv zrab#|O`;(M>`|*@2g(OL4?HU_qw=(_^@IlLdUJHDJRlRobQeqyn%?Kqrc?2k^DBEx z8cj*7d8`iVG#?GW@{>dUSp7=;%S+PVnY@i<CcRmZzaSG?suM6EKOYF~^X6zq|G3G8~sPdyf*w@X@f{6FOj#>)_Tk!5SG^HSY z8Cq!%*6pzJL+g)OEZn#o<8bo^S0cgrN5A58Y0mcthO^0fyb=kJG7DCoQ*mA2^w z_J^lQiav;$bDQ}$;u&I`y9j5eg*Ygig2tOAZGo~DD3Z9$jBe^LlExS*G!5y$U=vh6 z^7M3d+9JVu}Hwt_EPIf zgujrJ9>{YhEae-?OpswFTzU0E06Iw3i^zqOLM(T03119XA5&)foyrf1@rFv1rx`RS z;i>iT8>4+poSr->ZerHlq`Rzk0?5QZJxY}DIJF+Woto1ek>5Z1m(n5`Gm`ZC9%o)p zUMnUe368;fOM-?jJ)>sM@#;C&sB%U}Pfrg| z-#97x#Mc-`S?V5eLYdbp1k-}r@yoTQ39VKaqqX*5=V)a z6!)I!bzp}S9;>HfRdZo`-bA;ahaP!Nk?pTS<++hVV%&Vo3GUjLr_nZr^(~v;hlaN% zJFosB;@*4*ZO20%m!oy)6fNs4&Hd{m%3Aec^@++xw*C`(KIE+e;q`Hj^c<^2aIMOV z3Fk#ljN>&qa_7N%CwEfC#e5RwLPvBnM}0*mw;R>fwBA|T2RvMrkJCjj)^825#&Pr) z^E#+u`|R_H9BuYgZWT5Fwkqqdzu`$97(IyID3a;F_%Om}KDVcvh~+GTGky+b^#xh? zvp3w)c0mv%yFUnpYRUvp4?+h9$OQQz1eJ z(j+3|x;A(*OvMS#*}8YN%>5yv&N;YXH8(GB%15N~WP(6*gH`>}v4;zpt(`+^ zPD>}oZU@{bk=;i+sE^*?m_2hKjJJDNhqDaTYMK3g;H7a!4?dX5n-t^~LuSJZrW{~p zC_dKO+n*guFMD3s07)yp)!YI=NQgLzr||UZ`(kRIX+CqZ**nx4L=d+Nxcel+Mgjw0 zYPb2(x)ZeoK6O78v-b2E6;^0lYD^b#US_o@jUOHkIoWe$H$V1Vz`mQ3lCN{K>dwRz z?{{gabn{MJ0wt4~iDn=o`ohq)fs-cb6A&F0-CJ{r2yGA%Yfb#K0AQIX<{l{E0yxm>>= zrQze9aoFO2M~~<*uF4-jEKDw(Wo~4EBKE9`j`HNh^sZpvDxkIJU%s&$m~%NW+#p`f zf9P99FWZ_7`z?DlvYCe5v;M*O1;kg6$%wc*6bB6V7)+K-^B#oQvL=3DDm9bHD6hK3 zW$xEnQebKlJ^iB@X2Vr-^7W0T5R+{x>~|7KH_?hT1v%GNa1h}@L9%CpDynqSXn4fe z?>FhWq=&!flS;Bs?}O<7!YCv(qAFU(HlMlL8BBk?({@QRJr#$RZmYoLRE&)$rKNRt zL`!`G_@)5ITJrscq=*P}oScF5kDI30TudaFw~amiqxBeE8dxt*9BKCYJ1peqzUWln zlKTZOYW6EY(aoufMxJyUS&X5*eOxM|Sl@W+kf^WkjS1Z?_R67U9U_kwrm~tDdH19= zTkLhzTWHq{qqG)=27)1!m!qIP+3}qNHBYF{D7o8iB%>1)j~$GQL=x{i#B&}d z`B9UYNX`!7{p!y*y`P#|d8@Z>&WOwT<3Rd-c@B!*Si>qA17ah!SGoMXg_NXUJsTf~ zi_6zCk#COi^v0sq`r!O&xxW0Kt;L_uQGhE2uk9s2bCwGEamN?6Qp;Rw#;WO*%}ifB z3JNU)4}_I+rnvE*la9@7ZE#1&%SM?~pswM{CdG5WF&J3rh4Q+Lr;8g;6SYeE^$dFs zW?{H^dDjnfKgeshS5v`xYkNQ=Z4MRCZ$Od0TT26g)aRjj+JOS}@@!`W7 zl!GfCFS~6#aRgPB<3{MVb&PwkU*x9S$+8d#r2 zOZfZX{0fLmc{mm2$T`o8d-lWm`u;2={#0-_YG$l{R^3hjo9;SU+yc)~sfkp(=irCu zMUeZCp%_k^*~cmwx*$GB2ar$Xs$NbFRP|SP;9W8>Zw}Q9Gk=joCd8vPXmdX{Q6z^h zoxc+ek)mfHCz)o^PwV`%i_G_ZjMun)JK4O7DW|u>$qt9<e z6v^?)2iC987gq;Tiqgk@ALMQ-y6}UJwxEOA%4?wgP4E&_=?aFlf=al9Z>5J(`ic?P zs7+Tn*-l@&MSkblO=S!}cpRm#DLy-?;r01Tt&mWR&#K5vi%-o@1RFZ&zhypkDVbW& zdnn$^bc*#b?iVX^s;wMNNh^_lL8w71M4A=;$)V&*xldXlNqzxxUobV*?8Z z;_>|saH+y6;9LNx7FJd`<(ZNSWhXW3$q!bGM%+mxjK$$Y=qLec`lh`Wj!fRftr&Mc z(>>X)wT6+}$tTif&a(*~_Z>R)Dn7a?*y{!GH&E!Lfw>Ym25^M#bJ+7QzR)*ZT6@Fo^FTWVuZM=EbtDuZ(>6r0Bx?8XL^M0SpnU~20Uz0@5R3^r>EO?Vh&p59hb_9RsJkS39GC1o-b?5iaG++ZWuph3#Wvukr*B*!Rc<-`UKw?|+R3d|d4f4;m-z8g z|5NAUu`Y)Iow0oB#eRPRP4yS1%hd#qYlpi^a-4^{u=lOHq+fiC!vEp4Sa#NVy~Rh) z*%#DVmD1t?Rt77YAz~AJDCZy44nY>6iJSVTD3UW%+>zA=xVE_S!xThlWT2KqvPcz0 zWxl2?i+^)$?r{%sOk40BdcV8B^2f}p*u-MDJlS;`*Z9Auwbv$ORYHXay5CoSo<|v< zcp2lwC?`_y5=o5wc=;X1CTW-zrh65dGTg0N+r?^vGq#EOrNy0f1wJiESNuu)l2oN1 zQr8L}Va<6NTJOtbE=uZog)`&zNiE|>v8{$RQRjMSaBZ*MbM!+YCp-IbW8;gqoi=Cf zggu2UD+P{CtR~b4z@OD&T79Dw#^iFe%b{NxwB6z(f?Tz^(K04!DZXYENU01094B+4 z?b(Vpl+3I=FGe|Zx`zfnZ_4pp=MjCw6VnlqYHiL^U=LB=3ZVXI;h(oS@#sPEN|mtD zAjn4XXeq>BLPkpk%Yq?vV6Btee`(xrT{>M$V;1q-SzOGM52%30XkaCF?XfjauPqFz zW{%>2Dmj$g%h=Yzyn5*M??hv7Lw8Tl5waf+FwXTNWsc0u~QoA;WjKZUtO;T=CgnR?&!i ztj9ioRsQ~JYJ0=edvSF9TEQBs>MrS|B?reKKGSO_aidE;d7d}Y8F4$d0mUw zwPz6Biv@lX-CUIB?x;Mu;(Oa@o%*3(!&!7#uWQHbY$zjw%nr*i=N}pR5&`N(W`}$O ze0OEr$n_49ZlLn*1l9w)<=#7oWA86#m~EDgKJ#t>C2!l;4$FpwDK^L-%fB7+tEDYj zAySNf%YZ%(n|G}5KwEE8{3FkgpG4rigQBsQn!;X;9d*i|@P*yvT{{|jk`fKvvh4e{ zneSxi-B$T35*8PmF8#s@Atlcw7Gxp=EkUH(L2C<8pm6TKKkkz zTx7Ayr(qE;v3Pv#1JAy|u}(aE>Xt5L7+D{j^ij;#*vj(1{?@>+ zKMr4Co4N2-(-cBZ{fO|-5m0NYJ%6Vw@viPTt8G#79C^7yLy{x~!-ki!)ZOv_Pqsug zUpWH?vr1*X`SSVx_U{5x*{B@KA{)LGMRCMM8&8^q=K;#U3IZjEkYahAMHtWMp95vo z+tV>=uoQla2ql{)1l0m9tsO^jx}oRU8T6uHmk@m&01V%44>BsE20gFCPg#rdsV4_~ zgAns4toeH51u40E?jd8d9=nO5whLc30Am*awq+90cqyd?V?Qrz za(HR2gp+4yT)*5AyFU?D($QqnAt;f}OuuXmbI=lu->(JZf~_ur;m9fL-M$`a&PDHc zJLf)06G{EvxfSTfD~~U_9>@%Kyr~QBya7xrI=7^jeZF?b!c8wn0k6HgM8|eBYcR1_ z=&SSHsK@N7!zuhSLBYY(*VmEareU+{68r1R~8ePKIRKP0jrcUPjjr2P8M^=!k5An2Msw{{7z%tEvw|WFsCJn9f zgnL!}X2N1gH1mD=#rhzNP5+nM2?W$|{tILB`SGL^?jFQa8kq{A3#0Lw^xSY~-S@7Q z3*H`@PU~scJ*^)AFGNbpzvkD{ z`8Ie=7-wUhe})L%ZH@8WT60Tp(T#hP^hqRo$~&f2#2-$36%~IiA=0}ck(k1!5hv`! zcs0EJn@$Kcd*G8IeK{=nBs4JXOg(N`wP|NTwqa(6dPPFuj(6LCs64P3{HoJ+ONM*T zpFbBfpTj)N5Dl&}A3V3YIJNM@_=0R_lDB4Rs3}gHl5b&$I4u2=BuDS!MbWE(C1qMr zLFYM)u)Qh6!L4LjSuTQe#`9jG2k#Aw?zTm_JQE%up7o?9^Xc#&MVv^w<@_EUzD3tA zvAvhozr24{l2}uaG$VOT|5iZ`hn0eMKJd@^U(_AAYz@Z%@l&nceD9y)!m6XU?3xjp zJrQ(JP`~8bygMf!RiPRDj-Tu*P*;wL=;qWOu&g@jBw9oOrcG7$i*!J-ciY+8AG&qV z>`-I-0MfF$vC%hSt4k|~wnL*a?G;a0~50PBrmYi)6?s3F4L$aK5ziGDV0CPyw5nY{3{~d7d$)L znT=mP)&ztH70@+Uor6qAg7`U_AAPa<0a8Qe&2==%ya4cLolxs|dXgprettLPt`_i2 zGZa$gVyUyv(`TVg?#&Fm3Vz-HJu?0eH%5-}ErVSD@LLL0w~#mYD0uVGQ`%S74mHVE zxmJ0wG()9uokVjq&n4y~zfYEq`r}Z~govfxO|`E}3DuNp}+Z zY*rbNun2qyI!rk`UQPjEkPxj=)VhAmomk;rw~lD@y&`80NY8&PPP~>{1acl6pQQTo zKXkiSIWdBk404lU0D*TgU}@=L$4fElqO_0fe%ZWwKHCnL`VYfGD;lYg_x4`>%qptT z{)^B2ug@-H!qj_wmP-$n%`F`H#Nxhi(-{@p>Fuwkh}+&(E2ZoFh=0Z7agxB$IXyP&>E{TU1sNXOX+D3j8=P%I~G^msLs#}GrwpmAx$i&;=`M32RAUgZo zws{9sl?2y=7~8(Dvs3c$zq}TtJ3d{Oq}o&NyA8Kofkv2Xqvh^G4dg&=V>EMF%EVZ{a`napF&XI+3a{ruk>|{_x^2@dmQM< z)3#i#YLXaLIy&=8l}rJ0v0{CrCsb6Ri0;wnKFvPD+1Im{=Sk`Ny+uzlW?lY?V#Zx65pBQ-XIzI?&g(b4HK z!B?WP?^2bQ=LJ$Bn?9J?V+r2Ev4|%vUfq1leewh}JV9T-zC|LBr&?|C4Si6o04Xh< zm1_fNkB-3T1`zw|c^WA?LnGG;!zYQU$0jda2$$SPm0vF1iKCjE{!w|c^;*-vF7x`i z-D@^h(3kABM^Lp`k;E8$E?&iSALeV(WZ_l|{H6!%E56GKiptLn3%e=Wem!Tvjbe%w zaJ$aza{SfVh8^(KmvW|#QwO)U9J6KhjS~T$Q+nxc??kl!)1y?ZlsXI_tMr7%pBhgh z@Y$RB_EO&z4?`ESc?tH#QaOcqo{cvP{+s-w!NFSb!9hXDgIJY%r#TIBTX+Icq+@Ag z!;XX8>TGUa;u#m05czD*VZ-lW#zo%0ns0%+o?b*;TpZ9*y6lvdmE9uYYzyd$8Y{@+ zdDl;kx1l_t`J0xjYh6KzxO@2c7TsXOa@SdN2r2%%cNBc)C)%+@v}-@27grT&7c5I= zpuCPQ;>(h@-=0NB#JAYY)~6EUBH3oUFe$j-opo-|O?!78tQ6LQ=N*(T!)>7oX(#Ez zf&JHKhz0g6hp^>20mcW%neM1Viz~KFmJetGl8&h3WBjtJyl=%km+$kU2^hBH{HuzK z3ly?obHs;(H$<3zWOILtlQV$~H3gz)r;@^2DrB}Sy4@86;?QfXT0zOYCjnUfbQtLE znL9YVyY1Up=wq0FoZ|`((e>i>+U6!TxI(wdEr1EcO!b9!V|Q1f>DyVg)mV=gVvLi@M&Yr$1!5^2-9gsi*+2B%N1NumMnO^6~QnL@iIZ*t`g^2`d;(Q8jJDVW)cL zrxLLffA6JE$Y{c9DMPdKt4P?Bb@?Y(XZ!18aLH1&+Ru#Qw;@}O?*v9@MOQXQLYlka zI@LD#ccy^JbN#S$PsiG*xvDeyt~zI+P(wo%V39 z6&vz8di{LS9RaH(qL#qJdBSarFXdkwB*T3ZR|lqt3YuUg1ykuJSc!eL&YSO7`f)YJ zTrXkk6ekZ8wY4!zsy!GQo{6k&e~P0eKG&T!LGI z1QI+1x1fUz?yd>$I%x3V8YH+o1PC&?yUQRmz}uYrKkuIW?z&I*S}bN@rg!h|>gwvM zufD1UKW;0G=+}_9WMtGD3uV>jvx9-t87M0iXKWc3IUrYTiQUq$yqGXDw#nfsdxIBQ z3PGB;K=G>cse9L>>T&_cftfy04=x8kIhg0M*rIFk{zv9w#$B|w7XM)PmQb&-UFf1Ru4FZiG&xgf#7D@wJ@21NQF z;z8zK`(1Z|T3e&RH2|s{0tBl5xd-Ql@B^hrH%ZYc#;QRqcivVXoa3VHX98r`_Y5i^%m(o5sMqyBsi+%U6a$S z#(T^L_+8p1w#m{uZ)}`b$Me{m*-5+F9!Ug;InoMM6J)Rn>_aO8)&eIi-%9iU`c{g< ztk3$=0x2eA!)o9K6*XsPdS3=|Fd0XnA2J(5l@;@+X?ByHk^OO~c%&fiVh*;~>c_p# z=e*TxpQUFB?|N>Q#+misN+KN}bHtTG|6yb7Pci+F&}g0lH|%`VM#BJOztx&mR`Y7b z^UX@aD1Ig8evWF>e4Enk9MRofj_;T8R)HyqOM$G|ifLi<1!L@ZAGg|+pY#_-gs%Mu zA;+}GMka1vF}FvG>rq9zjc;S)V#B-tp7l==?u`CGkapn(;fv$WsA6cHO}UgVVB=s= zI-&tWu;~+~U-JVWw-6}&`?ozqu5u)agN==SdUht@F$J5bv6y@g7<{Lvq=sdfxYx7~ z#NB^gMp|U(Q;EDZP02^!ao!-fC&-nXYZ8KU%~?W8Y$D zZxIm`1l9OY8Vq21Sd*n_f-@~GM>4)v(}Paz%Cu-{wrCj{hj0GoP_h@TY|uj4*p#0hdS$S#HArhk*pxm+>?N$z-R-Or2KR~1$B(%98k3r_5*_)LdD)D^TCq2&u+mAylnY zcJE%`o->SBwa!X|@`*l<{O3!iCsTA6#+7WZAji&(&l+U9P{`ImalIpZ6y*x){eHwbDEp?l5RQ1&~g z#>#9zH?Gq$dSM<`znL$i<1|~aKv+hbM7d9&L}&QHKYLE+Un4m8d?fKUsYhnUjD=I~ zmk}2By!r;`Rx8WhsOKRCbaJNt(0#G327YMrNzq6uFNSY;#V@soIBYa#{MLRC)u7bp?b!ldR1E69_TPhTxxY?wgIL` zpwJCmVpEV%MC0IOWP`D4iG#W}+GI6K*isNAi4aJUv%;d};E5V6bi7+ACc%ij|Q7_281x z5K}ubbSrCG?WEf>ilg4*q?G-nyGpg`TFKJ{B9Ng?>6Ln!RJs~wQmk>)BRenhr}ZN| zL=wp{rH^P(?Ics1neT!^Fra|YYvAF1Hwx8h$Nhp_Nkdf&;^OXX%k|K^tVVb8fYtG$ z7i0ad*1w!-s;S=qFdkiZZlg3|6GtW{wV+odh~Giqw#vcNUgMsGUKOG2iCzQQBxuPe zTjL&jtneZIlg+p~b+@Gi_~E!8x9dvt0Pn&H9c=b=ORF2sF4j?BOJMUT9BvFPU~#v9 zmZWB-vLH&r8^xDYYPd7Or{Y8;PVCb9&}{Q?I65oSUpkC5O^OB;q^&7xF;=Smxto?H zH?A_JB3gmaD&_Mgp{TbtFV(%8%yzW)51p8{pfJV}LzvP1Mjq&{Q|z$uYZ&X4!K>0t zco%b1%@@(?qx#raYo9pEkRhH+o*8biR>WG1_O?+;FXYGACD&z$y6a&`FN9Z+bdZ5k zGNPsKT!bZgbia{NQzQufG|6tz>&$HzGVQimDb1Rh12;ZQ=MJ-6EjON>zds#sGCzN0 z8^y2^DSh4R|L_?Bxkw&OVMbRRr=0^~r2`OA%r|boWKl|ATAQv%VFzh=JzBm26JZ zX5E6bHI$R~%DJa*0`>3?v>`{I<>Q?|uL}DxZnrg_XO&TBlv#qvkoY>1+z1d-6hU4# z-%IKcf#d+6aC;=v#$QV*qRsw&G~S@J)AQ$w$j8$VY<1zX=FRs=&(WX1VtIwMJZouP zW2WLXmmkwREp|Y^)Qn7Y{`C0E@j{dXyswO(YOxKwb${Ks(bYPWC*pKc&wUa0st)_; z?c$N;^~!W7ze{FUvrj|SN17mR6j%V^eI+LMx!hpJ2yXl~}&ySXK*toAMrgZ`1?~Wgb_)Yio~cup3~V zce}ihb3bvv_7S2GIi&> zL&mGq&4&iu85Ua8J`0Cz>-1H@2M5Z$({-i39CCf<(nM~viL6Ve*SV|%M&q6JLI*an%H#4rO3YY z!Fx`I?NCpPYEslUJAm2s=BK*m=}0T2@k&+nZkH&mK{HP z$vTqb_UO`G+FNiigdDE4@?$rbhiBY4_n-#s?EGY`#O191onv(2{_8s0S)daCpL6b=UGVcGr za{Wk5p9pB1ypOI{E!JwvodFdNDDe#cWKve97;okelZ``uN|t+T3?Pi%HhVj znvSqoe+Xtg|IO#wEbw)}GW_d$!G zp@|1G*?Q|}ODE2}x!F!DH+I!#h;g+XKo$~>Ew$#N##{=SoNR4nr#k3&7) zI~^#^{aku(S|Q@HHsJM(pJ7{zy_+0XtHd`iY`$z@qg2*oF|B?F^1#oIX?-?~of*z3 zQ%9S6Hv#9>a9Zmyjo8xewpp!0rs!}0_QGg?iCl)e1+}8c&uE~G*WJx@Yjmc*TM6_a zC?^d#^)XIqOh;p}eQA%SSg*BK+|LbiwHQdHE2^k-00X(qVmT{_+q_d zpjUql?XlcQ;$Yhg!nw?@=!RXVySwEJIa2QE4=!TuRU!hvYq4F1N_715prOAa-NIT{ zQwhW>9mm80Zd&U1-!#|^R7N&M1+IAa;{2jT!w;Tdq{@J``xfqa%BNCf{yI^7@*xa) zNm%WdR_gsedhlD+db_4iwFYdXoSSMhCWxxQp}tR+(*)RaZ)lNwfq?t6;^QaM{Mh?tt(6NEBuqAG4}@&fD?b# zBL(Tl>BqN(*Q#o({rY#P)q2-yT{`+StBl+Sm4Mw*9vA%MSBMM+kUz?`wE}sO^g`v+ zrw$2+LqUZa`Of~J6kn|# zxc%W{I&{Cq>WLy9Ob1c}g2ce6ip1Yo zzr6qH*UOH^qh|B5{M}ml9OgI_DMP`QpiGxX7vl2EGg=9~CIgDQ$hm?>z`%Ix0}3V%6bM8Gq- z8;&ye8jf*Ej*Jky489MFnFtY(USkth!+SnqObUBQ3T&9(~qySJu8SiuitjT9ygJ zslyO@w_4=lx47`(kYVC z->|URl#rk~x*oC#aFhoOmB<-Y zc4CRZ`Kb<>yI#b$EhTymWHWBrUEZ@Ak9p{G=Cq0#m#yXbeCAW>vZ$r(d(=UEd0vdL zn#C{`zNW^$u&+(KE|^9wqfBbMn9wun3B>KfYK|nCV53Hr5vi%PkVU0vYcl7qFA|G} z1K3`HM^mFT&r}z6dV7oNcMw3jK9@lM&egVt)oxD!fcrMWJHVIeQ=?vA- zBWgKOT7P2--HIJkrF1^&+S&sv5Jo*k_Q}T$q91Pc*Zh)(T!g;_G2hRP*XwhHpd6-l zB3}-#z>3$<*k*@%M}^zY#1abZJUigU*sCJ8SfkCSykYm;VR}!ci&)mGQj)|FA&6sb z*Uf}FO~il?ggj%k*2Jc=DLaB9*2VtE-a+2z$sg8pmc{;F8&>M4zRgX)%+MMeg6A@s zydpe;uA*xY0(y&DzpfAIWuY3s6D%{_Q@hKXhPl_|a+4GYKQ$v1uP(L4VwUXiun}8U zg!dpUuc&fUZELpx$Hb-+v=56(2~(}7&#^I1Hn&}5T`iL~R6=AVpzX3Qi=DD!bTK>o zie^WyJ(xQZKiG{Auag<`hu4ckjsDD5`3U#A^b0Ig^e@}t6GJziWO`R1hdG8MM4eu` zxJ2&|_V*P=9siMV;pQ5T8=@#b>%!j~AQkB?&ZJj1e!iA%hhOj1;e_OQxeeCSN|Jo{ zg{thA3pKX9{L2nc|1Og#E>H;VU{<`QK#)*|ZhMv-$df%BG+&PvPG(QtG9o~(bxH0( zrK>!}5wf+}I#MRb@$}MQy&g>mtk)~c97UQ@QRp?aq_6dE_qC59qgaQEqG-p(g5q)e zv`09m<Bk@b``&X}$n#n|w_z1|V|K%A)}G(IW-UvT_6KM+R;0_xdIQMJ>wBre^O zJrU`BrFFXc%2TDy-HEc5DKDFjZeovY?pL8r3bQfu~Z!< zT3rgv{B^lM+_2_-%nmkc5|YCAym{HEVl~RRO8G)QS@EJ=x$biL-SN|OvpBU|kOOuo z!w`E^ye^7)1G=k>gn%>4u*M&7jU|zc{rI&5?gC#GcKVP2`Fu@~1(xF6kU`)t2D|P0 z%4{Y@aSy50qt6p(9(bgyLs{$i-|T&8++8}VulPOc7?dTfLl*#hZJQM74=l~96ICR= zE6ai`4c!DDtF`DM?=IGnsu?eXCZt3*c=TwZdff~E;5R_!&)_#N9f&Jq7V5V*;SEd! zUvSLnP>U7lAe>(^#2eJ`=c2r8VZZVN0*4R4%X2$H6 z^?glmggFlcLPEGfV}A&Ed2?5~M9--eF|DxQ9v)6Z&XSVGcD4WWv^yRTI6tv;#>TR_ zteX!27qEcOzrJ?$o`GYR%ZJNbXE@49SM6^Ll@jO_o_J9ihQ$1h_}~4$+wS2d5o{hVfkdT}-s^x{C&PJ=3GA zkA+`W4OiGFx85QlI1LmUCff(Fs}P3$bypemhe$(m{vA$?Y2p788o&%A`G?ORutzo? zFd=_meQx4^RS^8wL~Nn`ldLj0IF0cE?(+9#pYflSL;tJcKDX?LWm(-LjvKT2{olRA zI^pnGK3EHii#uJE%ynaCV_Pv+d*;^Q*29DzY6&=>UzLUQUH2^3e=|%Cu6YUT;qB%D zyx=dU0VlnYjSja(g(MC@O!N5hV>B}|q_;OGjsR8@V5Z^VCBUtem7w!~;(|df1g8T+ z@jXnqF{a(d_C14xsqvlt{~vEq85oZXfNkQ z0KTR-oKlmafZ7pz|`aS@jGwTVx(#5ze@CfApfYadcmh}Fj-`?y?86m zpnuQU)YKG_%J)(oAufbVYPz01=;ot2dar=o010Lp0i7h9*r3=VEofP?t&OXf^zOENla?b+(qUhhNk2Lpq5Qr9u@o#Y<`+2t>W@N1p?B53#5Ditk0ul9znSUo&|9e+nZ~9ySthrJxJLT3e zXw$|+sX&%ppwJxgn`6Ag`UC48Jx)IbgYq$GcXw8t zkThtWPo~s0y#(7v)2g;e3=L&L^qeRX}K4W4*YHB%u*I;M#TIXlc3;s=!f zO4!x=r~2vAbNcvX2S+DmpTkwjv-{q|-F>XwhTP*4(L-j#+S6aiBjjRL@cp|l;MgE} zVWCa7KT+G8aP$E7=CqY0y^&+t96J$*XN=`9ivWf2_qF;1=p?|__^b`v zQq7KTgTpE%$**8Z9IA6={ z;T}`eB$(L?-Q;;6D?f7Sh%MK!y(Ssb2%!pnIr3>}(Oq$9ZGDO_o`hGA`N*;)S)7R- zy`qlX?;fGR<>i4OmlL${aYg&t86C-W>=G{}4m+X?5V*s&jF>wk?B;^;RYh|pB)Cr? zPlKN3lTi0Z+?bvmVrD>hJ*Zr?7sa{swpfyxdn~>q7#r^PJM%F|z_dk04~uN-;v?4oFFXwX1!KWHU)r3gwR|R<=oN zDTO0#){#0E>}Tqo#JUL&Wckl0-ov(%L>Q$t8h?5!;D7`#b|bI1?e8vEKGs^#bxm2N zUL9QOf@fQT;xo9llw(ATWLGzdV`vpgpDfwAkma#jxZ)V*0p$(1fM6(zrL<0 z$A8SvD#~(m4A1kZhjjb_iiv)^e&5BlUiIO8N2#x{q{rt7v)`DD({pAcydM0xW|u6N0@+>C05{13YOB zcL=pET|uq0Mp-vbc`ukZJdG7~Bq~eQczSusyr4)Rd)AwU!5K&-N-}^44lf1VAO|bFn9iksUB>fC=L|JZ z-O-g5o(-E;r;_WkgLU!bJOs^m&*jOTcTj&xOP$@Mh5^(qD;?XE`!fyc^Yi3JDoxGJ z4Ld!r!AmU>lS@99CDuq|a%s-=6yxe={Wr9Usse@N1N@i=?4SW2&I&8Eu$F)oKE?bk zXhhRxPaXNARhtxvR$p%8eT|Vu{Uf^3YHWPQC^{A&k@DsfRuYV@d=k3~J4&09XGx-Q z4YZ=c_+s8&L3`N#`c!xf5p*mbJfp3*_)j-R``t6Vb56Nk>i5~oqS#F5)NM{KY~1Pt zvDS;2S5Fk-psEB+;^6d(a`8-c|S?kGtUQ_xa>lqn}=tcOvWc^i1Pa1 zW?~uL&5k4$nLf~AqKirbMwUJ{vY+xyJ25pfc`wS+(bD!PQI+UK#1`no&)T5aHZFaxl` zv@iBUttQV+6!WTXd|Wv0=X8Wd)&j0BAa+Bn>ECBkbdPfGUKr)&Rs5Hv@mib3*IA-P z-5YUg9|)aT<4}rNn;e$(OR7escQ*i|BZ}SJ)HA~AJ3BKwiYZ|yPnxo-)!F;A0h`s- z<$7yauRm>$3REmrT;W`xggH~spa0A-p$QThi8QpFul&s zZXU9;e^b}fQuqt0)c_>=D@AD2_NT_YmfkuhC*+vJ^mG}PWhvm3dH{F(R{C31aJ!HL zy1thSG5=5ZyvW zVzyippdo`BR@xn%uK^eeithcHDo+O%MEGWmUYg=%07yS zI_ru*>`9!Q8A1ddei^CpaIN%HyF9DkMBCJxq=+ifW%2T60D5nH=dt&}A?&5W=HvW8 z(z+kT8s8#Gq&uQDjHH@htA(UVbieJ@=pi=z+Iu0feW)g*9I$jUlkkYPCx*k2LpNMC z;^VDgjM$5A-nq)skNVCdXZo@848d20iX8o&Rgg7uPpXUW#LPY#KFRgZq6eq=1`Q`^ zqt5Qw3xTlW(2%)Z&$ozPBQ6Ijh+Mq%vqrIu(KKLKK<#+mB8PHU$xvZC2Z?kuzC~{} zojB8@DDvrA(DIlU7dNQu5mm+Er4DMi$&l2y;ng7Aji->gB&fn;Wh%Mc{z-t!U(Sw` ziq$KVyPJOAv9t6%@<19WK~4PTRmQu3Rr6`KXwhc&)lISjCC5#SOcuEB>ia>@*?#HK z(Y2kYQ&C@KT@o3*o9-0vE^ekj4-wg)JLu^hD=q>hRtL_=LD$(nr%QE-$BV`2t~VR> z;2-tdC#*Is58#}10Z)yt9D{mc`sAiZLG~^hTE9c~f zT<+s7dR!vwxf-&?xyQF8>G6q;@WhPxa_g3PhkU(^DE?)T4v`yqP+fBg`Y{lQrg8>= z8h#(ql)btH(IoM#vv}&|ewinq%1f|8V<@4_rdx$vYsmU2$4u0fs|gIlSmAl8mJZ?C=As!h zlrFMWXOTi>(Ufq(0Xs|$Z0fUWs@5u!x?=-o7=6+1Tg;5lC+sd~3d1iy-E17xIN$fo z$2zHYnv7I89p5B1U7i*Xr3zx`BlU1Pw10X0Xcp6S#lIJVXVhS>`yly7y`MhN z#`{gHQE2cv97rv2rpwTcSqN%!H8KhwqCz)nj9U4=L-@7P14A&sYn@(7JiIL^C z6DgpgnSf>ZWO==xC9&z2>47Y6T$X)plgx(p4PE%}Xb$U^lTi!`!8E|$ty({r?i+Ci z52rZ1WPs_UV(tL_}^-sw%f6#7KdT^TdLVne89+b|JTg7!Br@-o>dm|04t3E`4_ilh}~n zQXMW1e;lr>{wf|MBSRXFn7-L*XA%qN%55rc$XV3=F(%RiU<_ z#$>VDA%uO7W_|PNP_x$yT)LA9MGtB)2cO6|j*FfuJ3!pAx{Bw#KX0wv;&ODf4~3^n zL17fyui4mun%m!g<-A*uG8AD)xT6YZ?}!n$4FwATq9IP6MOSIy@odvNCs}L5wJy?p z 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 >G748njSvC=oxk)Mj5Kw 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